From 375041c3d6d2ecb2228dcaa3cbefa079da40a8dd Mon Sep 17 00:00:00 2001
From: wangting <675591594@qq.com>
Date: 星期四, 24 八月 2023 15:10:21 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 Source/UBCS/ubcs-service-api/ubcs-applyjtcodeservice-api/src/main/java/com/vci/ubcs/code/applyjtcodeservice/vo/DockingApplyGroupCode.java               |    5 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/87_read.js                                                                                               |   48 
 Source/UBCS-WEB/src/config/js-xlsx-master/bower.json                                                                                                    |   23 
 Source/UBCS-WEB/src/api/GetItem.js                                                                                                                      |   10 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/30_ctype.js                                                                                              |  254 
 Source/UBCS-WEB/src/config/js-xlsx-master/example-style.js                                                                                              |  642 
 Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/30_manifest.js                                                                                        |   20 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/58_cmntbin.js                                                                                            |   46 
 Source/UBCS-WEB/src/config/js-xlsx-master/tests/test-min.js                                                                                             |   10 
 Source/UBCS-WEB/src/config/js-xlsx-master/misc/_bower.json                                                                                              |   23 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/50_styxls.js                                                                                             |   78 
 Source/UBCS-WEB/src/config/js-xlsx-master/misc/xlsx2csv.ts                                                                                              |   71 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/01_version.js                                                                                            |    1 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingSystemConfigDTO.java                                              |    8 
 Source/UBCS-WEB/src/config/js-xlsx-master/cell_style_simple.json                                                                                        | 1773 +
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/84_defaults.js                                                                                           |   40 
 Source/UBCS-WEB/src/config/js-xlsx-master/tests/FormulaSpec.js                                                                                          |    9 
 Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/00_header.js                                                                                          |    6 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/22_xmlutils.js                                                                                           |  171 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/38_xlstypes.js                                                                                           |  440 
 Source/UBCS-WEB/src/config/js-xlsx-master/.npmignore                                                                                                    |   35 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/77_wbxml.js                                                                                              |  181 
 Source/UBCS-WEB/src/config/js-xlsx-master/example1.js                                                                                                   |   89 
 Source/UBCS-WEB/src/config/js-xlsx-master/jszip.js                                                                                                      | 8982 +++++++
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/24_hoppers.js                                                                                            |   66 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/attrmap/appcode.xml                                       |   15 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/26_crypto.js                                                                                             |   35 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/29_xlsenum.js                                                                                            |  265 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/34_extprops.js                                                                                           |   76 
 Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/98_exports.js                                                                                         |    1 
 Source/UBCS-WEB/src/config/js-xlsx-master/example-4.js                                                                                                  |  642 
 Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CodeApplyPanelFor410ActionListener.java                                                 |   17 
 Source/UBCS-WEB/src/config/js-xlsx-master/package.json                                                                                                  |   39 
 Source/UBCS-WEB/src/config/js-xlsx-master/tests/test-open.js                                                                                            |    8 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/25_cellutils.js                                                                                          |   21 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/68_wsbin.js                                                                                              |  439 
 Source/UBCS-WEB/src/config/js-xlsx-master/tests/MixedSpec.js                                                                                            |    8 
 Source/UBCS-WEB/src/config/js-xlsx-master/test.js                                                                                                       | 1129 
 Source/UBCS-WEB/src/config/js-xlsx-master/.gitmodules                                                                                                   |    3 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/42_sstxml.js                                                                                             |  204 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/99_footer.js                                                                                             |    2 
 Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/22_xmlutils.js                                                                                        |   89 
 Source/UBCS-WEB/src/config/js-xlsx-master/misc/node.d.ts                                                                                                |    8 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/39_xlsbiff.js                                                                                            |  917 
 Source/UBCS-WEB/src/config/js-xlsx-master/misc/strip_sourcemap.sh                                                                                       |   11 
 Source/UBCS-WEB/src/main.js                                                                                                                             |    2 
 Source/UBCS-WEB/src/config/js-xlsx-master/tests/print-header.js                                                                                         |   48 
 Source/UBCS/ubcs-service-api/ubcs-applyjtcodeservice-api/src/main/java/data/data.json                                                                   |   22 
 Source/UBCS-WEB/src/config/js-xlsx-master/tests/test-csv.js                                                                                             |   37 
 Source/UBCS-WEB/src/config/js-xlsx-master/ods.js                                                                                                        |  414 
 Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/DockingSystemConfigMapper.xml                                                              |    1 
 Source/UBCS/ubcs-service-api/ubcs-applyjtcodeservice-api/src/main/java/com/vci/ubcs/code/applyjtcodeservice/feign/IMdmInterJtClient.java                |   21 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/88_write.js                                                                                              |   37 
 Source/UBCS-WEB/src/views/wel/index.vue                                                                                                                 |   25 
 Source/UBCS-WEB/src/config/js-xlsx-master/dist/xlsx.js                                                                                                  | 12577 ++++++++++
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/23_binutils.js                                                                                           |  167 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/43_sstbin.js                                                                                             |   39 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/56_cmntcommon.js                                                                                         |   42 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/66_wscommon.js                                                                                           |   84 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeOrderDTO.java                                                        |   35 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/63_fbin.js                                                                                               |    5 
 Source/UBCS-WEB/src/config/js-xlsx-master/xlsx.js                                                                                                       | 12577 ++++++++++
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/78_wbbin.js                                                                                              |  181 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/10_ssf.js                                                                                                |  765 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/18_cfb.js                                                                                                |  383 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/49_theme.js                                                                                              |  116 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/67_wsxml.js                                                                                              |  433 
 Source/UBCS-WEB/src/config/js-xlsx-master/CONTRIBUTING.md                                                                                               |   63 
 Source/UBCS-WEB/src/config/js-xlsx-master/Makefile                                                                                                      |  116 
 Source/UBCS-WEB/src/config/js-xlsx-master/tests/test-acid.js                                                                                            |   20 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeBasicSecController.java                                               |   27 
 Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/10_utils.js                                                                                           |   10 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/28_binstructs.js                                                                                         |  160 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/21_ziputils.js                                                                                           |   49 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/81_xls.js                                                                                                |  675 
 Source/UBCS-WEB/src/config/js-xlsx-master/example3.js                                                                                                   |   42 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/05_buf.js                                                                                                |   16 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/82_parsetab.js                                                                                           | 1230 +
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/64_ftab.js                                                                                               | 1090 
 Source/UBCS-WEB/src/views/code/code.vue                                                                                                                 |   26 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/79_xmlbin.js                                                                                             |   52 
 Source/UBCS-WEB/src/views/system/menu.vue                                                                                                               |   17 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/DefaultAttrAssimtUtil.java                                           |   31 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/46_stycommon.js                                                                                          |    4 
 Source/UBCS-WEB/src/components/refer/vciWebReferDefalut.vue                                                                                             |    1 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/48_stybin.js                                                                                             |  133 
 Source/UBCS-WEB/src/components/FormTemplate/FormTemplate.vue                                                                                            |  429 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeApplySwingController.java                                             |   11 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/52_ccxml.js                                                                                              |   18 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/02_codepage.js                                                                                           |   23 
 Source/UBCS-WEB/src/config/js-xlsx-master/tests/IssueSpec.js                                                                                            |    8 
 Source/UBCS-WEB/src/components/FormTemplate/index.vue                                                                                                   |    7 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/90_utils.js                                                                                              |  207 
 Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/LauncherConstant.java                                                                |    4 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java                                               |   72 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/47_styxml.js                                                                                             |  400 
 Source/UBCS-WEB/src/components/code-dialog-page/maxSerialnumDialog.vue                                                                                  |  308 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/61_fcommon.js                                                                                            |   17 
 Source/UBCS-WEB/src/config/js-xlsx-master/.travis.yml                                                                                                   |   16 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingSystemConfigVO.java                                      |   16 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeBasicSecService.java                                                    |   19 
 Source/UBCS/ubcs-service/ubcs-applyjtcodeservice/src/main/java/com/vci/ubcs/code/applyjtcodeservice/controller/DockingPreApplyCodeController.java       |    2 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmIOService.java                                                            |    2 
 Source/UBCS-WEB/src/components/MasterCrud/VciMasterCrud.vue                                                                                             |   20 
 Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/23_xlml.js                                                                                            |    8 
 Source/UBCS-WEB/vue.config.js                                                                                                                           |    5 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/57_cmntxml.js                                                                                            |   27 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/35_custprops.js                                                                                          |   70 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/result/xml/XMLResultDataObjectDetailDO.java               |    2 
 Source/UBCS-WEB/src/config/js-xlsx-master/dist/ods.js                                                                                                   |  414 
 Source/UBCS-WEB/src/config/js-xlsx-master/misc/spin.sh                                                                                                  |   14 
 Source/UBCS-WEB/src/config/js-xlsx-master/bin/xlsx.njs                                                                                                  |  133 
 Source/UBCS-WEB/src/config/js-xlsx-master/dist/xlsx.full.min.js                                                                                         |   20 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/92_stylebuilder.js                                                                                       |  378 
 Source/UBCS-WEB/public/cdn/avue/2.9.12/avue.min.js                                                                                                      |    2 
 Source/UBCS-WEB/src/config/js-xlsx-master/xlsxworker2.js                                                                                                |   31 
 Source/UBCS-WEB/src/config/js-xlsx-master/tests/EncodedSpec.js                                                                                          |    8 
 Source/UBCS-WEB/src/config/js-xlsx-master/package-lock.json                                                                                             |  323 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/45_styutils.js                                                                                           |   85 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/44_offcrypto.js                                                                                          |  180 
 Source/UBCS-WEB/src/config/js-xlsx-master/README.md                                                                                                     |  705 
 Source/UBCS-WEB/src/config/js-xlsx-master/dist/cpexcel.js                                                                                               | 1324 +
 Source/UBCS-WEB/src/config/js-xlsx-master/dist/xlsx.full.min.map                                                                                        |    1 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/04_base64.js                                                                                             |   41 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/98_exports.js                                                                                            |   11 
 Source/UBCS-WEB/src/config/js-xlsx-master/tests/test-freeze.js                                                                                          |  105 
 Source/UBCS/ubcs-service/ubcs-code/pom.xml                                                                                                              |    7 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/Scheduling/DockingClassSyncScheduling.java                                           |    2 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/83_parseods.js                                                                                           |    6 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/Scheduling/DockingDataSyncScheduling.java                                            |   10 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/20_jsutils.js                                                                                            |   44 
 Source/UBCS-WEB/src/config/js-xlsx-master/dist/LICENSE                                                                                                  |   17 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/11_ssfutils.js                                                                                           |   20 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/DockingSystemConfig.java                                              |   59 
 Source/UBCS-WEB/src/config/js-xlsx-master/misc/xl.d.ts                                                                                                  |   65 
 Source/UBCS-WEB/src/config/js-xlsx-master/color.js                                                                                                      |   86 
 Source/UBCS-WEB/src/config/js-xlsx-master/tests/NamedRangesSpec.js                                                                                      |    8 
 Source/UBCS-WEB/src/config/js-xlsx-master/LICENSE                                                                                                       |   17 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/80_xlml.js                                                                                               |  699 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/91_xmlbuilder.js                                                                                         |   88 
 Source/UBCS-WEB/src/config/js-xlsx-master/tests/test-style.js                                                                                           |  717 
 Source/UBCS-WEB/src/config/js-xlsx-master/tests/InterviewSpec.js                                                                                        |    8 
 Source/UBCS-WEB/src/config/js-xlsx-master/.gitignore                                                                                                    |   27 
 Source/UBCS-WEB/src/config/js-xlsx-master/.jshintrc                                                                                                     |    4 
 Source/UBCS-WEB/src/config/js-xlsx-master/dist/xlsx.core.min.map                                                                                        |    1 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/.npmignore                                                                                               |    1 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/36_xlsprops.js                                                                                           |    8 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java                                             |  122 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java                                            |  152 
 Source/UBCS-WEB/src/config/js-xlsx-master/dist/xlsx.min.js                                                                                              |   11 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/53_ccbin.js                                                                                              |   30 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/62_fxls.js                                                                                               |  803 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/76_wbcommon.js                                                                                           |  100 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/85_parsezip.js                                                                                           |  142 
 Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/99_footer.js                                                                                          |    1 
 Source/UBCS-WEB/src/config/js-xlsx-master/dist/jszip.js                                                                                                 | 8982 +++++++
 Source/UBCS-WEB/src/config/js-xlsx-master/.jscs.json                                                                                                    |    6 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java                                          |    5 
 Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/80_parse.js                                                                                           |    5 
 Source/UBCS-WEB/src/config/js-xlsx-master/shim.js                                                                                                       |  237 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/33_coreprops.js                                                                                          |   79 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java                                                   |   29 
 Source/UBCS/ubcs-service/ubcs-applyjtcodeservice/src/main/java/com/vci/ubcs/code/applyjtcodeservice/Scheduling/DockingApplyGroupCodeSyncScheduling.java |   55 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/86_writezip.js                                                                                           |   90 
 Source/UBCS-WEB/src/config/js-xlsx-master/dist/xlsx.core.min.js                                                                                         |   15 
 Source/UBCS-WEB/src/config/js-xlsx-master/misc/ssf.json                                                                                                 |  152 
 Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/40_helpers.js                                                                                         |   20 
 Source/UBCS-WEB/src/config/js-xlsx-master/testA.lst                                                                                                     |    3 
 Source/UBCS-WEB/src/api/code/maxSerialNum.js                                                                                                            |   18 
 Source/UBCS/ubcs-service/ubcs-applyjtcodeservice/src/main/java/com/vci/ubcs/code/applyjtcodeservice/feigh/MdmInterJtClient.java                         |   36 
 Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/21_ziputils.js                                                                                        |   37 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineService.java                                                        |    9 
 /dev/null                                                                                                                                               |    0 
 Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/20_jsutils.js                                                                                         |    7 
 Source/UBCS-WEB/src/config/js-xlsx-master/tests/write.js                                                                                                |   87 
 Source/UBCS-WEB/src/config/js-xlsx-master/tests/Common.js                                                                                               |   25 
 Source/UBCS-WEB/src/config/js-xlsx-master/dist/xlsx.min.map                                                                                             |    1 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/31_rels.js                                                                                               |   61 
 Source/UBCS-WEB/src/config/js-xlsx-master/misc/cfb.d.ts                                                                                                 |  104 
 Source/UBCS-WEB/src/config/js-xlsx-master/xlsxworker1.js                                                                                                |   31 
 Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/60_content.js                                                                                         |  210 
 Source/UBCS-WEB/src/config/js-xlsx-master/tests.lst                                                                                                     | 1064 
 Source/UBCS-WEB/src/config/js-xlsx-master/xlsxworker.js                                                                                                 |   16 
 Source/UBCS-WEB/src/config/js-xlsx-master/bits/00_header.js                                                                                             |    6 
 184 files changed, 68,330 insertions(+), 514 deletions(-)

diff --git a/Source/UBCS-WEB/public/cdn/avue/2.9.12/avue.min.js b/Source/UBCS-WEB/public/cdn/avue/2.9.12/avue.min.js
index 20b5357..6ba70d1 100644
--- a/Source/UBCS-WEB/public/cdn/avue/2.9.12/avue.min.js
+++ b/Source/UBCS-WEB/public/cdn/avue/2.9.12/avue.min.js
@@ -4,6 +4,6 @@
  *  Released under the MIT License.
  *
  */
-!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("vue"),require("axios")):"function"==typeof define&&define.amd?define("AVUE",["vue","axios"],e):"object"==typeof exports?exports.AVUE=e(require("vue"),require("axios")):t.AVUE=e(t.Vue,t.axios)}(this,(function(__WEBPACK_EXTERNAL_MODULE__8__,__WEBPACK_EXTERNAL_MODULE__20__){return function(t){var e={};function n(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return t[i].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(i,o,function(e){return t[e]}.bind(null,o));return i},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=24)}([function(t,e,n){"use strict";function i(t,e,n,i,o,a,r,s){var l,c="function"==typeof t?t.options:t;if(e&&(c.render=e,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),a&&(c._scopeId="data-v-"+a),r?(l=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),o&&o.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(r)},c._ssrRegister=l):o&&(l=s?function(){o.call(this,(c.functional?this.parent:this).$root.$options.shadowRoot)}:o),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(t,e){return l.call(e),u(t,e)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:t,options:c}}n.d(e,"a",(function(){return i}))},function(t,e,n){"use strict";var i=function(t,e,n){return e?t+n+e:t},o=function t(e,n){if("string"==typeof n)return i(e,n,"--");if(Array.isArray(n))return n.map((function(n){return t(e,n)}));var o={};return Object.keys(n||{}).forEach((function(t){o[e+"--"+t]=n[t]})),o},a={methods:{b:function(t,e){var n=this.$options.name;return t&&"string"!=typeof t&&(e=t,t=""),t=i(n,t,"__"),e?[t,o(t,e)]:t}}},r=n(3);e.a=function(t){return t.name=r.i+(t.name||""),t.mixins=t.mixins||[],t.mixins.push(a),t}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"n",(function(){return getFixed})),__webpack_require__.d(__webpack_exports__,"m",(function(){return getAsVal})),__webpack_require__.d(__webpack_exports__,"t",(function(){return setAsVal})),__webpack_require__.d(__webpack_exports__,"r",(function(){return loadScript})),__webpack_require__.d(__webpack_exports__,"h",(function(){return downFile})),__webpack_require__.d(__webpack_exports__,"w",(function(){return strCorNum})),__webpack_require__.d(__webpack_exports__,"c",(function(){return createObj})),__webpack_require__.d(__webpack_exports__,"d",(function(){return dataURLtoFile})),__webpack_require__.d(__webpack_exports__,"l",(function(){return findObject})),__webpack_require__.d(__webpack_exports__,"s",(function(){return randomId})),__webpack_require__.d(__webpack_exports__,"q",(function(){return isJson})),__webpack_require__.d(__webpack_exports__,"e",(function(){return deepClone})),__webpack_require__.d(__webpack_exports__,"v",(function(){return sortArrys})),__webpack_require__.d(__webpack_exports__,"u",(function(){return setPx})),__webpack_require__.d(__webpack_exports__,"f",(function(){return detailDataType})),__webpack_require__.d(__webpack_exports__,"g",(function(){return detailDic})),__webpack_require__.d(__webpack_exports__,"k",(function(){return findByValue})),__webpack_require__.d(__webpack_exports__,"i",(function(){return filterParams})),__webpack_require__.d(__webpack_exports__,"o",(function(){return getObjValue})),__webpack_require__.d(__webpack_exports__,"j",(function(){return findArray})),__webpack_require__.d(__webpack_exports__,"p",(function(){return getPasswordChar})),__webpack_require__.d(__webpack_exports__,"a",(function(){return arraySort})),__webpack_require__.d(__webpack_exports__,"b",(function(){return clearVal})),__webpack_require__.d(__webpack_exports__,"x",(function(){return vaildData}));var _validate__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(5),global_variable__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(3);function _typeof(t){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function getFixed(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return Number(t.toFixed(e))}function getAsVal(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=deepClone(t);return Object(_validate__WEBPACK_IMPORTED_MODULE_0__.a)(e)||e.split(".").forEach((function(t){n=Object(_validate__WEBPACK_IMPORTED_MODULE_0__.a)(n[t])?"":n[t]})),n}function setAsVal(obj){var bind=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",value=arguments.length>2?arguments[2]:void 0,result,type=getObjType(value);return result=Object(_validate__WEBPACK_IMPORTED_MODULE_0__.a)(value)?"array"===type?"obj.".concat(bind,"=[]"):"object"===type?"obj.".concat(bind,"={}"):["number","boolean"].includes(type)?"obj.".concat(bind,"=undefined"):"obj.".concat(bind,"=''"):"string"==type?"obj.".concat(bind,"='").concat(value,"'"):"obj.".concat(bind,"=").concat(value),eval(result),obj}var loadScript=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"js",e=arguments.length>1?arguments[1]:void 0,n=!1;return new Promise((function(i){var o,a=document.getElementsByTagName("head")[0];(a.children.forEach((function(t){-1!==(t.src||"").indexOf(e)&&(n=!0,i())})),n)||("js"===t?((o=document.createElement("script")).type="text/javascript",o.src=e):"css"===t&&((o=document.createElement("link")).rel="stylesheet",o.type="text/css",o.href=e),a.appendChild(o),o.onload=function(){i()})}))};function downFile(t,e){"object"==_typeof(t)&&t instanceof Blob&&(t=URL.createObjectURL(t));var n,i=document.createElement("a");i.href=t,i.download=e||"",window.MouseEvent?n=new MouseEvent("click"):(n=document.createEvent("MouseEvents")).initMouseEvent("click",!0,!1,window,0,0,0,0,0,!1,!1,!1,!1,0,null),i.dispatchEvent(n)}function strCorNum(t){return t.forEach((function(e,n){t[n]=Number(e)})),t}function extend(){var t,e,n,i,o=arguments[0]||{},a=!1,r=Array.prototype.slice.call(arguments),s=1,l=!1;for("boolean"==typeof o&&(a=o,s++,o=arguments[1]);s<r.length;s++)if(null!=(t=r[s]))for(n in t)i=t[n],e=o[n],a&&("[object Object]"===toString.call(i)||(l="[object Array]"==toString.call(i)))?(e=l?"[object Array]"===toString.call(e)?e:[]:"[object Object]"===toString.call(e)?e:{},o[n]=extend(a,e,i)):void 0!==i&&i!==e&&(o[n]=i);return o}function createObj(t,e){var n=e.split("."),i=n.splice(0,1)[0],o={};if(o[i]={},n.length>=2){var a="";n.forEach((function(t){a="".concat(a).concat("{",'"').concat(t,'":')})),a="".concat(a,'""');for(var r=0;r<n.length;r++)a="".concat(a).concat("}");a=JSON.parse(a),o[i]=a}return t=extend(!0,t,o)}function dataURLtoFile(t,e){for(var n=t.split(","),i=n[0].match(/:(.*?);/)[1],o=atob(n[1]),a=o.length,r=new Uint8Array(a);a--;)r[a]=o.charCodeAt(a);return new File([r],e,{type:i})}function findObject(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"prop",i=-1,o=function(){var e;return t.forEach((function(t){t.column?e="group":t.children&&(e="tree")})),e}();return"group"===o?t.forEach((function(t){var o=findArray(t.column,e,n,!0);-1!==o&&(i=o)})):i="tree"===o?findLabelNode(t,e,{value:n},!0):findArray(t,e,n,!0),i}function randomId(){for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",e=t.length,n="",i=0;i<16;i++)n+=t.charAt(Math.floor(Math.random()*e));return n}var getObjType=function(t){var e=Object.prototype.toString;return t instanceof Element?"element":{"[object Boolean]":"boolean","[object Number]":"number","[object String]":"string","[object Function]":"function","[object Array]":"array","[object Date]":"date","[object RegExp]":"regExp","[object Undefined]":"undefined","[object Null]":"null","[object Object]":"object"}[e.call(t)]},isJson=function(t){return Array.isArray(t)?t[0]instanceof Object:t instanceof Object},deepClone=function t(e){var n,i=getObjType(e);if("array"===i)n=[];else{if("object"!==i)return e;n={}}if("array"===i)for(var o=0,a=e.length;o<a;o++)e[o]=(e[o],e[o]),e[o]&&delete e[o].$parent,n.push(t(e[o]));else if("object"===i)for(var r in e)e&&delete e.$parent,n[r]=t(e[r]);return n},sortArrys=function(t,e){return t.sort((function(t,n){return t[e]>n[e]?-1:t[e]<n[e]?1:0})),t},setPx=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return Object(_validate__WEBPACK_IMPORTED_MODULE_0__.a)(t)&&(t=e),Object(_validate__WEBPACK_IMPORTED_MODULE_0__.a)(t)?"":(-1===(t+="").indexOf("%")&&(t+="px"),t)},detailDataType=function(t,e){return Object(_validate__WEBPACK_IMPORTED_MODULE_0__.a)(t)?t:"number"===e?Number(t):"string"===e?t+"":t},getUrlParams=function(t){var e={url:"",params:{}},n=t.split("?");e.url=n[0];var i=n[1];i&&i.split("&").forEach((function(t){var n=t.split("="),i=n[0],o=n[1];e.params[i]=o}));return e},detailDic=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=arguments.length>2?arguments[2]:void 0,o=n.value||global_variable__WEBPACK_IMPORTED_MODULE_1__.e.value,a=n.children||global_variable__WEBPACK_IMPORTED_MODULE_1__.e.children;return e.forEach((function(e){e[o]=detailDataType(e[o],i),e[a]&&t(e[a],n,i)})),e},findByValue=function(t,e,n){if(Object(_validate__WEBPACK_IMPORTED_MODULE_0__.a)(t))return e;var i="",o=e instanceof Array,a=o?e:[e];n=n||global_variable__WEBPACK_IMPORTED_MODULE_1__.e,i=[];for(var r=0;r<a.length;r++)i.push(findLabelNode(t,a[r],n)||a[r]);return o?i.join(global_variable__WEBPACK_IMPORTED_MODULE_1__.f).toString():i.join()},filterParams=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:["","$"],n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],i=n?deepClone(t):t;for(var o in i)e.includes("")&&Object(_validate__WEBPACK_IMPORTED_MODULE_0__.a)(i[o])&&delete i[o],e.includes("$")&&-1!==o.indexOf("$")&&delete i[o];return i},detailDicGroup=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=deepClone(t),i=e[global_variable__WEBPACK_IMPORTED_MODULE_1__.e.groups]||global_variable__WEBPACK_IMPORTED_MODULE_1__.e.groups;return t.forEach((function(t){t[i]&&(n=n.concat(t[i]))})),n},findLabelNode=function(t,e,n,i){var o;i||(t=detailDicGroup(t,n));return function t(a){for(var r=n.label||global_variable__WEBPACK_IMPORTED_MODULE_1__.e.label,s=n.value||global_variable__WEBPACK_IMPORTED_MODULE_1__.e.value,l=n.children||global_variable__WEBPACK_IMPORTED_MODULE_1__.e.children,c=0;c<a.length;c++){var u=a[c],d=u[l]||[];u[s]===e?o=i?u:u[r]:t(d)}}(t),o},getDeepData=function(t){return(Array.isArray(t)?t:t.data)||[]},getObjValue=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0,i=e.split("."),o=t;return""===i[0]&&"object"!==n?getDeepData(t):(""!==i[0]&&i.forEach((function(t){o=o[t]})),o)},findArray=function(t,e,n,i){n=n||global_variable__WEBPACK_IMPORTED_MODULE_1__.e.value;for(var o=0;o<t.length;o++)if(t[o][n]===e)return i?t[o]:o;return-1},getPasswordChar=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,n=t.toString().length;t="";for(var i=0;i<n;i++)t+=e;return t},arraySort=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;return t.filter((function(t){return!Object(_validate__WEBPACK_IMPORTED_MODULE_0__.a)(t[e])})).sort((function(t,e){return n(t,e)})).concat(t.filter((function(t){return Object(_validate__WEBPACK_IMPORTED_MODULE_0__.a)(t[e])})))},clearVal=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return t?(Object.keys(t).forEach((function(n){if(!e.includes(n))if(n.includes("$"))delete t[n];else if(!Object(_validate__WEBPACK_IMPORTED_MODULE_0__.a)(t[n])){var i=getObjType(t[n]);"array"===i?t[n]=[]:"object"===i?t[n]={}:["number","boolean"].includes(i)?t[n]=void 0:t[n]=""}})),t):{}},vaildData=function(t,e){return"boolean"==typeof t?t:Object(_validate__WEBPACK_IMPORTED_MODULE_0__.a)(t)?e:t}},function(t,e,n){"use strict";n.d(e,"i",(function(){return i})),n.d(e,"e",(function(){return o})),n.d(e,"d",(function(){return a})),n.d(e,"c",(function(){return r})),n.d(e,"h",(function(){return s})),n.d(e,"a",(function(){return l})),n.d(e,"j",(function(){return c})),n.d(e,"k",(function(){return u})),n.d(e,"b",(function(){return d})),n.d(e,"l",(function(){return p})),n.d(e,"f",(function(){return h})),n.d(e,"g",(function(){return f})),n.d(e,"m",(function(){return m}));var i="avue-",o={rowKey:"id",rowParentKey:"parentId",nodeKey:"id",label:"label",value:"value",desc:"desc",groups:"groups",title:"title",leaf:"leaf",children:"children",hasChildren:"hasChildren",labelText:"鍚嶇О",disabled:"disabled"},a={name:"name",url:"url",fileName:"file",res:""},r=["dates","date","datetime","datetimerange","daterange","time","timerange","week","month","monthrange","year"],s=["tree","number","icon","color","table","map"],l=["img","array","url"],c=["cascader","tree","select"],u=["slider"],d=l.concat(["upload","dynamic","map","checkbox","cascader","dynamic","timerange","monthrange","daterange","datetimerange","dates"]),p=r.concat(["select","checkbox","radio","cascader","tree","color","icon","table","map"]),h=" | ",f=",",m={img:/\.(gif|jpg|jpeg|png|webp|GIF|JPG|PNG)/,video:/\.(swf|avi|flv|mpg|rm|mov|wav|asf|3gp|mkv|rmvb|ogg|mp4)/}},function(t,e,n){"use strict";var i=n(12);e.a={methods:{t:function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];return i.b.apply(this,e)}}}},function(t,e,n){"use strict";function i(t){if(t instanceof Date||"boolean"==typeof t||"number"==typeof t)return!1;if(!(t instanceof Array)){if(t instanceof Object){for(var e in t)return!1;return!0}return"null"===t||null==t||"undefined"===t||void 0===t||""===t}return 0===t.length}n.d(e,"a",(function(){return i}))},function(t,e,n){"use strict";var i=n(15),o={AliOSS:{title:"闃块噷浜戜簯鍥剧墖涓婁紶锛岄渶寮曞叆OSS鐨剆dk",github:"https://github.com/ali-sdk/ali-oss/"},Map:{url:"https://webapi.amap.com/maps?v=1.4.11&key=xxxxx&plugin=AMap.PlaceSearch,https://webapi.amap.com/ui/1.0/main.js?v=1.0.11",title:"鍦板浘缁勪欢锛岄渶寮曞叆楂樺痉SDK"},MapUi:{url:"https://webapi.amap.com/ui/1.0/main.js?v=1.0.11",title:"鍦板浘缁勪欢锛岄渶寮曞叆楂樺痉UISDK"},Sortable:{url:"https://cdn.staticfile.org/Sortable/1.10.0-rc2/Sortable.min.js",title:"鎷栨嫿锛岄渶寮曞叆sortableJs",github:"https://github.com/SortableJS/Sortable"},Screenshot:{url:"https://cdn.staticfile.org/html2canvas/0.5.0-beta4/html2canvas.min.js",title:"闇�寮曞叆html2canvas渚濊禆鍖�",github:"https://github.com/niklasvh/html2canvas/"},CryptoJS:{url:"https://avuejs.com/cdn/CryptoJS.js",title:"涓冪墰浜戝浘鐗囦笂浼狅紝闇�寮曞叆CryptoJS"},hljs:{url:"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.15.6/highlight.min.js",title:"闇�寮曞叆hljs妗嗘灦鍖�",github:"https://github.com/highlightjs/highlight.js"},"file-saver":{url:"../../src/config/FileSaver.js-master",title:"闇�寮曞叆鏂囦欢鎿嶄綔鍖�"},xlsx:{url:"https://cdn.staticfile.org/xlsx/0.18.2/xlsx.full.min.js",title:"闇�寮曞叆excel鎿嶄綔鍖�",github:"https://github.com/protobi/js-xlsx"},mock:{url:"https://cdn.staticfile.org/Mock.js/1.0.1-beta3/mock-min.js",title:"闇�瑕佸紩鍏ock妯℃嫙鏁版嵁鍖�",github:"https://github.com/Colingo/mock"}};e.a={logs:function(t){var e=o[t];i.a.capsule(t,e.title,"warning"),i.a.warning("CDN:"+(e.url||"-")),i.a.warning("GITHUB:"+(e.github||"-"))}}},function(t,e,n){"use strict";n.d(e,"a",(function(){return s})),n.d(e,"b",(function(){return c})),n.d(e,"h",(function(){return u})),n.d(e,"g",(function(){return d})),n.d(e,"e",(function(){return p})),n.d(e,"d",(function(){return h})),n.d(e,"f",(function(){return f}));var i=n(5),o=n(3),a=n(2),r=n(12),s=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return t.forEach((function(e){var n=e.cascader;if(!Object(i.a)(n)){var o=e.prop;n.forEach((function(e){var n=Object(a.l)(t,e);-1!==n&&(n.parentProp=o)}))}})),t},l=0,c=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:12,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];n&&(l=0);var i=24;return(l=l+(t.span||e)+(t.offset||0))===i?l=0:l>i?l=0+(t.span||e)+(t.offset||0):t.row&&l!==i&&(t.count=i-l,l=0),t},u=function(t,e){var n=e.type,r=e.multiple,s=e.dataType,l=e.separator,c=void 0===l?o.g:l,u=e.alone,d=e.emitPath,p=e.range,h=t;return o.j.includes(n)&&1==r||o.b.includes(n)&&!1!==d||o.k.includes(n)&&1==p?(Array.isArray(h)||(h=Object(i.a)(h)?[]:(h+"").split(c)||[]),h.forEach((function(t,e){h[e]=Object(a.f)(t,s)})),o.a.includes(n)&&Object(i.a)(h)&&u&&(h=[""])):h=Object(a.f)(h,s),h},d=function(t){var e=t.type,n=t.searchRange,i=e;if(t.searchType)return t.searchType;if(["radio","checkbox","switch"].includes(e))i="select";else if(o.c.includes(e)){i=n?e.includes("range")?e:e+"range":e.replace("range","")}else["textarea"].includes(e)&&(i="input");return i},p=function(t,e){var n=t||"input";return Object(i.a)(e)?(o.a.includes(t)?n="array":["time","timerange"].includes(t)?n="time":o.c.includes(t)?n="date":["password","textarea","search"].includes(t)?n="input":o.h.includes(t)&&(n="input-"+t),o.i+n):e},h=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e={};return t.forEach((function(t){o.b.includes(t.type)&&!1!==t.emitPath||o.j.includes(t.type)&&t.multiple||"array"===t.dataType?e[t.prop]=[]:o.k.includes(t.type)&&1==t.range?e[t.prop]=[0,0]:["rate","slider","number"].includes(t.type)||"number"===t.dataType?e[t.prop]=void 0:e[t.prop]="",t.bind&&(e=Object(a.c)(e,t.bind)),Object(i.a)(t.value)||(e[t.prop]=t.value)})),{tableForm:e}},f=function(t){var e=t.placeholder,n=t.label;return Object(i.a)(e)?o.l.includes(t.type)?"".concat(Object(r.b)("tip.select")," ").concat(n):"".concat(Object(r.b)("tip.input")," ").concat(n):e}},function(t,e){t.exports=__WEBPACK_EXTERNAL_MODULE__8__},function(t,e,n){"use strict";n.d(e,"a",(function(){return a})),n.d(e,"b",(function(){return r})),n.d(e,"c",(function(){return s})),n.d(e,"d",(function(){return l}));var i=n(5),o=n(2),a=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return new Promise((function(n,o){var a=[],r=[],s={};t.forEach((function(t){t.parentProp&&a.push(t)})),e.forEach((function(t,e){a.forEach((function(n){!0!==n.hide&&!1!==n.dicFlag&&r.push(new Promise((function(o){Object(i.a)(t[n.parentProp])?o({prop:n.prop,data:[],index:e}):n.dicUrl&&l({url:"".concat(n.dicUrl.replace("{{key}}",t[n.parentProp])),props:n.props,method:n.dicMethod,formatter:n.dicFormatter,query:n.dicQuery,form:t}).then((function(t){o({prop:n.prop,data:t,index:e})}))})))}))})),Promise.all(r).then((function(t){t.forEach((function(t){Object(i.a)(s[t.index])&&(s[t.index]={}),s[t.index][t.prop]=t.data})),n(s)}))}))},r=function(t){var e=[];return new Promise((function(n,i){var a,r,s,c=function(t){var e=t.column||[],n=[],i={},o=[];return e.forEach((function(t){var e=t.dicData,a=t.dicUrl,r=t.prop,s=t.parentProp;o=o.concat(t.cascader||[]),Array.isArray(e)&&(i[r]=e),!1===t.dicFlag||!0===t.lazy||o.includes(r)||a&&!s&&n.push({url:a,name:r,method:t.dicMethod,formatter:t.dicFormatter,props:t.props,dataType:t.dataType,resKey:(t.props||{}).res,query:t.dicQuery||{}})})),{ajaxdic:n,locationdic:i}}(t);e=c.ajaxdic,(a=e,r={},s=[],new Promise((function(t){a.forEach((function(t){s.push(new Promise((function(e){l(Object.assign(t,{url:"".concat(t.url.replace("{{key}}",""))})).then((function(n){n=Object(o.g)(n,t.props,t.dataType),e(n)})).catch((function(){e([])}))})))})),Promise.all(s).then((function(e){a.forEach((function(t,n){r[t.name]=e[n]})),t(r)}))}))).then((function(t){n(t)})).catch((function(t){i(t)}))}))},s=function(t){var e={},n=t.dicData||{};return t.column.forEach((function(t){t.dicData&&(e[t.prop]=Object(o.g)(t.dicData,t.props,t.dataType))})),Object.assign(n,e)};var l=function(t){var e=t.url,n=t.query,i=t.method,a=t.resKey,r=t.props,s=t.formatter,l=t.value,c=void 0===l?"":l,u=t.column,d=t.form,p=void 0===d?{}:d;u&&(e=u.dicUrl,i=u.dicMethod,n=u.dicQuery||{},s=u.dicFormatter,r=u.props);var h={};return((e=e||"").match(/[^\{\}]+(?=\})/g)||[]).forEach((function(t){var n="{{".concat(t,"}}"),i=p[t];e="key"===t?e.replace(n,c):e.replace(n,i)})),"post"===i&&Object.keys(n).forEach((function(t){var e=n[t];if("string"==typeof e)if(e.match(/\{{|}}/g)){var i=p[e.replace(/\{{|}}/g,"")];h[t]=i}else h[t]=e;else h[t]=e})),r&&(a=(r||{}).res||a),new Promise((function(t){var r=function(e){var n=[];n="function"==typeof s?s(e.data):Object(o.o)(e.data,a),t(n)};"post"===i?window.axios.post(e,h).then((function(t){r(t)})).catch((function(){return[t([])]})):window.axios.get(e,{params:n}).then((function(t){r(t)})).catch((function(){return[t([])]}))}))}},function(t,e,n){t.exports=function(){"use strict";var t=6e4,e=36e5,n="millisecond",i="second",o="minute",a="hour",r="day",s="week",l="month",c="quarter",u="year",d="date",p="Invalid Date",h=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,f=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,m={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_")},v=function(t,e,n){var i=String(t);return!i||i.length>=e?t:""+Array(e+1-i.length).join(n)+t},b={s:v,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),i=Math.floor(n/60),o=n%60;return(e<=0?"+":"-")+v(i,2,"0")+":"+v(o,2,"0")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var i=12*(n.year()-e.year())+(n.month()-e.month()),o=e.clone().add(i,l),a=n-o<0,r=e.clone().add(i+(a?-1:1),l);return+(-(i+(n-o)/(a?o-r:r-o))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:l,y:u,w:s,d:r,D:d,h:a,m:o,s:i,ms:n,Q:c}[t]||String(t||"").toLowerCase().replace(/s$/,"")},u:function(t){return void 0===t}},g="en",y={};y[g]=m;var _=function(t){return t instanceof C},x=function t(e,n,i){var o;if(!e)return g;if("string"==typeof e){var a=e.toLowerCase();y[a]&&(o=a),n&&(y[a]=n,o=a);var r=e.split("-");if(!o&&r.length>1)return t(r[0])}else{var s=e.name;y[s]=e,o=s}return!i&&o&&(g=o),o||!i&&g},w=function(t,e){if(_(t))return t.clone();var n="object"==typeof e?e:{};return n.date=t,n.args=arguments,new C(n)},O=b;O.l=x,O.i=_,O.w=function(t,e){return w(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var C=function(){function m(t){this.$L=x(t.locale,null,!0),this.parse(t)}var v=m.prototype;return v.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(O.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var i=e.match(h);if(i){var o=i[2]-1||0,a=(i[7]||"0").substring(0,3);return n?new Date(Date.UTC(i[1],o,i[3]||1,i[4]||0,i[5]||0,i[6]||0,a)):new Date(i[1],o,i[3]||1,i[4]||0,i[5]||0,i[6]||0,a)}}return new Date(e)}(t),this.$x=t.x||{},this.init()},v.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},v.$utils=function(){return O},v.isValid=function(){return!(this.$d.toString()===p)},v.isSame=function(t,e){var n=w(t);return this.startOf(e)<=n&&n<=this.endOf(e)},v.isAfter=function(t,e){return w(t)<this.startOf(e)},v.isBefore=function(t,e){return this.endOf(e)<w(t)},v.$g=function(t,e,n){return O.u(t)?this[e]:this.set(n,t)},v.unix=function(){return Math.floor(this.valueOf()/1e3)},v.valueOf=function(){return this.$d.getTime()},v.startOf=function(t,e){var n=this,c=!!O.u(e)||e,p=O.p(t),h=function(t,e){var i=O.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return c?i:i.endOf(r)},f=function(t,e){return O.w(n.toDate()[t].apply(n.toDate("s"),(c?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},m=this.$W,v=this.$M,b=this.$D,g="set"+(this.$u?"UTC":"");switch(p){case u:return c?h(1,0):h(31,11);case l:return c?h(1,v):h(0,v+1);case s:var y=this.$locale().weekStart||0,_=(m<y?m+7:m)-y;return h(c?b-_:b+(6-_),v);case r:case d:return f(g+"Hours",0);case a:return f(g+"Minutes",1);case o:return f(g+"Seconds",2);case i:return f(g+"Milliseconds",3);default:return this.clone()}},v.endOf=function(t){return this.startOf(t,!1)},v.$set=function(t,e){var s,c=O.p(t),p="set"+(this.$u?"UTC":""),h=(s={},s[r]=p+"Date",s[d]=p+"Date",s[l]=p+"Month",s[u]=p+"FullYear",s[a]=p+"Hours",s[o]=p+"Minutes",s[i]=p+"Seconds",s[n]=p+"Milliseconds",s)[c],f=c===r?this.$D+(e-this.$W):e;if(c===l||c===u){var m=this.clone().set(d,1);m.$d[h](f),m.init(),this.$d=m.set(d,Math.min(this.$D,m.daysInMonth())).$d}else h&&this.$d[h](f);return this.init(),this},v.set=function(t,e){return this.clone().$set(t,e)},v.get=function(t){return this[O.p(t)]()},v.add=function(n,c){var d,p=this;n=Number(n);var h=O.p(c),f=function(t){var e=w(p);return O.w(e.date(e.date()+Math.round(t*n)),p)};if(h===l)return this.set(l,this.$M+n);if(h===u)return this.set(u,this.$y+n);if(h===r)return f(1);if(h===s)return f(7);var m=(d={},d[o]=t,d[a]=e,d[i]=1e3,d)[h]||1,v=this.$d.getTime()+n*m;return O.w(v,this)},v.subtract=function(t,e){return this.add(-1*t,e)},v.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||p;var i=t||"YYYY-MM-DDTHH:mm:ssZ",o=O.z(this),a=this.$H,r=this.$m,s=this.$M,l=n.weekdays,c=n.months,u=function(t,n,o,a){return t&&(t[n]||t(e,i))||o[n].slice(0,a)},d=function(t){return O.s(a%12||12,t,"0")},h=n.meridiem||function(t,e,n){var i=t<12?"AM":"PM";return n?i.toLowerCase():i},m={YY:String(this.$y).slice(-2),YYYY:this.$y,M:s+1,MM:O.s(s+1,2,"0"),MMM:u(n.monthsShort,s,c,3),MMMM:u(c,s),D:this.$D,DD:O.s(this.$D,2,"0"),d:String(this.$W),dd:u(n.weekdaysMin,this.$W,l,2),ddd:u(n.weekdaysShort,this.$W,l,3),dddd:l[this.$W],H:String(a),HH:O.s(a,2,"0"),h:d(1),hh:d(2),a:h(a,r,!0),A:h(a,r,!1),m:String(r),mm:O.s(r,2,"0"),s:String(this.$s),ss:O.s(this.$s,2,"0"),SSS:O.s(this.$ms,3,"0"),Z:o};return i.replace(f,(function(t,e){return e||m[t]||o.replace(":","")}))},v.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},v.diff=function(n,d,p){var h,f=O.p(d),m=w(n),v=(m.utcOffset()-this.utcOffset())*t,b=this-m,g=O.m(this,m);return g=(h={},h[u]=g/12,h[l]=g,h[c]=g/3,h[s]=(b-v)/6048e5,h[r]=(b-v)/864e5,h[a]=b/e,h[o]=b/t,h[i]=b/1e3,h)[f]||b,p?g:O.a(g)},v.daysInMonth=function(){return this.endOf(l).$D},v.$locale=function(){return y[this.$L]},v.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),i=x(t,e,!0);return i&&(n.$L=i),n},v.clone=function(){return O.w(this.$d,this)},v.toDate=function(){return new Date(this.valueOf())},v.toJSON=function(){return this.isValid()?this.toISOString():null},v.toISOString=function(){return this.$d.toISOString()},v.toString=function(){return this.$d.toUTCString()},m}(),k=C.prototype;return w.prototype=k,[["$ms",n],["$s",i],["$m",o],["$H",a],["$W",r],["$M",l],["$y",u],["$D",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),w.extend=function(t,e){return t.$i||(t(e,C,w),t.$i=!0),w},w.locale=x,w.isDayjs=_,w.unix=function(t){return w(1e3*t)},w.en=y[g],w.Ls=y,w.p={},w}()},function(t,e,n){"use strict";e.a={methods:{getSlotName:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"D",n=arguments.length>2?arguments[2]:void 0,i={F:"Form",H:"Header",E:"Error",L:"Label",S:"Search",T:"Type",D:""},o=t.prop+i[e];return n?n[o]:o},getSlotList:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;return n=n.map((function(t){return t.prop})),Object.keys(e).filter((function(e){var i=!1;return n.includes(e)||t.forEach((function(t){e.includes(t)&&(i=!0)})),i}))}}}},function(t,e,n){"use strict";n.d(e,"b",(function(){return h}));var i=n(8),o=n.n(i);function a(t){return(a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var r=Object.prototype.hasOwnProperty;function s(t,e){return r.call(t,e)}var l=/(%|)\{([0-9a-zA-Z_]+)\}/g,c=(o.a,function(){for(var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length,n=new Array(e>1?e-1:0),i=1;i<e;i++)n[i-1]=arguments[i];return 1===n.length&&"object"===a(n[0])&&(n=n[0]),n&&n.hasOwnProperty||(n={}),t.replace(l,(function(e,i,o,a){var r;return"{"===t[a-1]&&"}"===t[a+e.length]?o:null==(r=s(n,o)?n[o]:null)?"":r}))}),u={common:{condition:"鏉′欢",display:"鏄剧ず",hide:"闅愯棌"},tip:{select:"璇烽�夋嫨",input:"璇疯緭鍏�"},upload:{upload:"鐐瑰嚮涓婁紶",tip:"灏嗘枃浠舵嫋鍒版澶勶紝鎴�"},date:{start:"寮�濮嬫棩鏈�",end:"缁撴潫鏃ユ湡",t:"浠婃棩",y:"鏄ㄦ棩",n:"杩�7澶�",a:"鍏ㄩ儴"},form:{printBtn:"鎵� 鍗�",mockBtn:"妯� 鎷�",submitBtn:"鎻� 浜�",emptyBtn:"娓� 绌�"},crud:{filter:{addBtn:"鏂板鏉′欢",clearBtn:"娓呯┖鏁版嵁",resetBtn:"娓呯┖鏉′欢",cancelBtn:"鍙� 娑�",submitBtn:"纭� 瀹�"},column:{name:"鍒楀悕",hide:"闅愯棌",fixed:"鍐荤粨",filters:"杩囨护",sortable:"鎺掑簭",index:"椤哄簭",width:"瀹藉害"},tipStartTitle:"褰撳墠琛ㄦ牸宸查�夋嫨",tipEndTitle:"椤�",editTitle:"缂� 杈�",copyTitle:"澶� 鍒�",addTitle:"鏂� 澧�",viewTitle:"鏌� 鐪�",filterTitle:"杩囨护鏉′欢",showTitle:"鍒楁樉闅�",menu:"鎿嶄綔",addBtn:"鏂� 澧�",show:"鏄� 绀�",hide:"闅� 钘�",open:"灞� 寮�",shrink:"鏀� 缂�",printBtn:"鎵� 鍗�",excelBtn:"瀵� 鍑�",updateBtn:"淇� 鏀�",cancelBtn:"鍙� 娑�",searchBtn:"鎼� 绱�",emptyBtn:"娓� 绌�",menuBtn:"鍔� 鑳�",saveBtn:"淇� 瀛�",viewBtn:"鏌� 鐪�",editBtn:"缂� 杈�",copyBtn:"澶� 鍒�",delBtn:"鍒� 闄�"}},d=!1,p=function(){var t=Object.getPrototypeOf(this||o.a).$t;if("function"==typeof t&&o.a.locale)return d||(d=!0,o.a.locale(o.a.config.lang,Object.assign(u,o.a.locale(o.a.config.lang)||{},{clone:!0}))),t.apply(this,arguments)},h=function(t,e){var n=p.apply(this,arguments);if(null!=n)return n;for(var i=t.split("."),o=u,a=0,r=i.length;a<r;a++){var s=i[a];if(n=o[s],a===r-1)return c(n,e);if(!n)return"";o=n}return""};e.a={use:function(t){u=t||u},t:h,i18n:function(t){p=t||p}}},function(t,e,n){"use strict";var i=n(9),o=n(3),a=n(11);e.a=function(){return{mixins:[a.a],props:{defaults:{type:Object,default:function(){return{}}},option:{type:Object,required:!0,default:function(){return{}}}},watch:{defaults:{handler:function(t){this.objectOption=t},deep:!0},objectOption:{handler:function(t){this.$emit("update:defaults",t)},deep:!0},propOption:{handler:function(t){var e=this;this.objectOption={},t.forEach((function(t){return e.objectOption[t.prop]=t}))},deep:!0},option:{handler:function(){this.init(!1)},deep:!0}},data:function(){return{DIC:{},cascaderDIC:{},tableOption:{},isMobile:"",objectOption:{}}},created:function(){this.init()},computed:{resultOption:function(){return Object.assign(this.deepClone(this.tableOption),{column:this.propOption})},rowKey:function(){return this.tableOption.rowKey||o.e.rowKey},formRules:function(){var t={};return this.propOption.forEach((function(e){e.rules&&!1!==e.display&&(t[e.prop]=e.rules)})),t},isMediumSize:function(){return this.controlSize},controlSize:function(){return this.tableOption.size||this.$AVUE.size}},methods:{init:function(t){this.tableOption=this.option,this.getIsMobile(),this.handleLocalDic(),!1!==t&&this.handleLoadDic()},dicInit:function(t){"cascader"===t?this.handleLoadCascaderDic():this.handleLoadDic()},getIsMobile:function(){this.isMobile=window.document.body.clientWidth<=768},updateDic:function(t,e){var n=this,o=this.findObject(this.propOption,t);this.validatenull(e)&&this.validatenull(t)?this.handleLoadDic():this.validatenull(e)&&!this.validatenull(o.dicUrl)?Object(i.d)({column:o}).then((function(e){n.$set(n.DIC,t,e)})):this.$set(this.DIC,t,e)},handleSetDic:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};Object.keys(n).forEach((function(i){e.$set(t,i,n[i])}))},handleLocalDic:function(){this.handleSetDic(this.DIC,Object(i.c)(this.resultOption))},handleLoadDic:function(){var t=this;Object(i.b)(this.resultOption).then((function(e){return t.handleSetDic(t.DIC,e)}))},handleLoadCascaderDic:function(){var t=this;Object(i.a)(this.propOption,this.data).then((function(e){return t.handleSetDic(t.cascaderDIC,e)}))}}}}},function(t,e,n){"use strict";var i=n(7),o={name:"form-temp",mixins:[n(11).a],props:{value:{},uploadBefore:Function,uploadDelete:Function,uploadAfter:Function,uploadPreview:Function,uploadError:Function,uploadExceed:Function,columnSlot:{type:Array,default:function(){return[]}},tableData:{type:Object,default:function(){return{}}},clearable:{type:Boolean},enter:{type:Boolean,default:!1},type:{type:String},propsHttp:{type:Object,default:function(){return{}}},props:{type:Object},dic:{type:Array},placeholder:{type:String},size:{type:String},disabled:{type:Boolean},readonly:{type:Boolean},column:{type:Object,default:function(){return{}}}},data:function(){return{first:!1,text:void 0}},computed:{params:function(){return this.column.params||{}},event:function(){return this.column.event||{}}},watch:{text:{handler:function(t){this.first||!this.validatenull(t)?(this.first=!0,this.$emit("input",t),this.$emit("change",t)):this.first=!0}},value:{handler:function(t){this.text=t},immediate:!0}},methods:{getComponent:i.e,getPlaceholder:i.f,enterChange:function(){var t=this.column.enter;this.validatenull(t)?this.enter&&this.$emit("enter"):"function"==typeof t&&this.column.enter(this.text,this.column)}}},a=n(0),r=Object(a.a)(o,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n(t.getComponent(t.column.type,t.column.component),t._g(t._b({ref:"temp",tag:"component",attrs:{column:Object.assign(t.column,t.params),dic:t.dic,disabled:t.column.disabled||t.disabled,readonly:t.column.readonly||t.readonly,placeholder:t.getPlaceholder(t.column),props:t.column.props||t.props,propsHttp:t.column.propsHttp||t.propsHttp,size:t.column.size||t.size,"table-data":t.tableData,type:t.type||t.column.type,"column-slot":t.columnSlot},nativeOn:{keyup:function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:t.enterChange.apply(null,arguments)}},scopedSlots:t._u([t._l(t.getSlotName(t.column,"T",t.$scopedSlots)?[t.column]:[],(function(e){return{key:"default",fn:function(n){return[t._t(t.getSlotName(e,"T"),null,null,n)]}}})),t._l(t.columnSlot,(function(e){return{key:e,fn:function(n){return[t._t(e,null,null,n)]}}}))],null,!0),model:{value:t.text,callback:function(e){t.text=e},expression:"text"}},"component",Object.assign(t.column,t.$uploadFun(t.column)),!1),t.event),[t.params.html?n("span",{domProps:{innerHTML:t._s(t.params.html)}}):t._e()])}),[],!1,null,null,null);e.a=r.exports},function(t,e,n){"use strict";function i(t){return function(t){if(Array.isArray(t))return o(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(!t)return;if("string"==typeof t)return o(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return o(t,e)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}var a={};function r(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"default",e="";switch(t){case"default":e="#35495E";break;case"primary":e="#3488ff";break;case"success":e="#43B883";break;case"warning":e="#e6a23c";break;case"danger":e="#f56c6c"}return e}a.capsule=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"primary";console.log("%c ".concat(t," %c ").concat(e," %c"),"background:#35495E; padding: 1px; border-radius: 3px 0 0 3px; color: #fff;","background:".concat(r(n),"; padding: 1px; border-radius: 0 3px 3px 0;  color: #fff;"),"background:transparent")},a.colorful=function(t){var e;(e=console).log.apply(e,["%c".concat(t.map((function(t){return t.text||""})).join("%c"))].concat(i(t.map((function(t){return"color: ".concat(r(t.type),";")})))))},a.default=function(t){a.colorful([{text:t}])},a.primary=function(t){a.colorful([{text:t,type:"primary"}])},a.success=function(t){a.colorful([{text:t,type:"success"}])},a.warning=function(t){a.colorful([{text:t,type:"warning"}])},a.danger=function(t){a.colorful([{text:t,type:"danger"}])},window.$Log=a,e.a=a},function(module,__webpack_exports__,__webpack_require__){"use strict";var core_detail__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(17),core_create__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(1),common_common_init__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(13),common_components_form_index__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(14),global_variable__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__(3),core_dataformat__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__(7),core_dic__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__(9),utils_util__WEBPACK_IMPORTED_MODULE_7__=__webpack_require__(2),utils_mock__WEBPACK_IMPORTED_MODULE_8__=__webpack_require__(19),_menu__WEBPACK_IMPORTED_MODULE_9__=__webpack_require__(23);__webpack_exports__.a=Object(core_create__WEBPACK_IMPORTED_MODULE_1__.a)({name:"form",mixins:[Object(common_common_init__WEBPACK_IMPORTED_MODULE_2__.a)()],components:{formTemp:common_components_form_index__WEBPACK_IMPORTED_MODULE_3__.a,formMenu:_menu__WEBPACK_IMPORTED_MODULE_9__.a},data:function(){return{activeName:"",labelWidth:90,allDisabled:!1,optionIndex:[],optionBox:!1,tableOption:{},itemSpanDefault:12,form:{},formList:[],formBind:{},formCreate:!1,formDefault:{},formVal:{}}},provide:function(){return{formSafe:this}},watch:{tabsActive:{handler:function(t){this.activeName=this.tabsActive},immediate:!0},form:{handler:function(t){this.formCreate&&this.setVal()},deep:!0},DIC:{handler:function(){this.forEachLabel()},deep:!0,immediate:!0},allDisabled:{handler:function(t){this.$emit("update:status",t)},deep:!0,immediate:!0},value:{handler:function(t){this.formCreate?this.setForm(t):this.formVal=Object.assign(this.formVal,t||{})},deep:!0,immediate:!0}},computed:{columnSlot:function(){var t=this;return Object.keys(this.$scopedSlots).filter((function(e){return!t.propOption.map((function(t){return t.prop})).includes(e)}))},labelSuffix:function(){return this.parentOption.labelSuffix||":"},isMenu:function(){return 1!=this.columnOption.length},isDetail:function(){return!0===this.detail},isTabs:function(){return!0===this.parentOption.tabs},isAdd:function(){return"add"===this.boxType},isEdit:function(){return"edit"===this.boxType},isView:function(){return"view"===this.boxType},gutter:function(){return this.setPx((this.parentOption.gutter||10)/2)},detail:function(){return this.parentOption.detail},disabled:function(){return this.parentOption.disabled},readonly:function(){return this.parentOption.readonly},tabsType:function(){return this.parentOption.tabsType},columnLen:function(){return this.columnOption.length},dynamicOption:function(){var t=this,e=[];return this.propOption.forEach((function(n){"dynamic"==n.type&&t.vaildDisplay(n)&&e.push(n)})),e},propOption:function(){var t=[];return this.columnOption.forEach((function(e){!1!==e.display&&e.column.forEach((function(e){t.push(e)}))})),t},parentOption:function(){return this.tableOption||{}},columnOption:function(){var t=this,e=this.tableOption.column||[],n=this.deepClone(this.tableOption.group)||[],i=this.tableOption.footer||[];return 0!==e.length&&n.unshift({header:!1,column:e}),0!==i.length&&n.push({header:!1,column:i}),n.forEach((function(e,n){e.column=e.column||[],e.column.forEach((function(e,n){!1===e.display||t.isMobile||(e=Object(core_dataformat__WEBPACK_IMPORTED_MODULE_5__.b)(e,t.itemSpanDefault,0===n))})),e.column=Object(core_dataformat__WEBPACK_IMPORTED_MODULE_5__.a)(e.column),e.column=e.column.sort((function(t,e){return(e.order||0)-(t.order||0)}))})),n},menuPosition:function(){return this.parentOption.menuPosition?this.parentOption.menuPosition:"center"},boxType:function(){return this.parentOption.boxType},isPrint:function(){return this.vaildData(this.parentOption.printBtn,!1)},tabsActive:function(){return this.vaildData(this.tableOption.tabsActive+"","1")},isMock:function(){return this.vaildData(this.parentOption.mockBtn,!1)}},props:{uploadBefore:Function,uploadAfter:Function,uploadDelete:Function,uploadPreview:Function,uploadError:Function,uploadExceed:Function,status:{type:Boolean,default:!1},isCrud:{type:Boolean,default:!1},value:{type:Object,required:!0,default:function(){return{}}}},created:function(){var t=this;this.$nextTick((function(){t.dataFormat(),t.setVal(),t.$nextTick((function(){return t.clearValidate()})),t.formCreate=!0,t.setControl()}))},methods:{getComponent:core_dataformat__WEBPACK_IMPORTED_MODULE_5__.e,getPlaceholder:core_dataformat__WEBPACK_IMPORTED_MODULE_5__.f,getDisabled:function(t){return this.vaildDetail(t)||this.isDetail||this.vaildDisabled(t)||this.allDisabled},getSpan:function(t){return t.span||this.parentOption.span||this.itemSpanDefault},isGroupShow:function(t,e){return!this.isTabs||(e==this.activeName||0==e)},forEachLabel:function(){var t=this;1!=this.tableOption.filterDic?this.propOption.forEach((function(e){var n,i=t.DIC[e.prop];t.validatenull(i)||(n=Object(core_detail__WEBPACK_IMPORTED_MODULE_0__.a)(t.form,e,t.tableOption,i),t.$set(t.form,["$"+e.prop],n))})):this.form=Object(utils_util__WEBPACK_IMPORTED_MODULE_7__.i)(this.form,["$"],!1)},handleGroupClick:function(t){this.$emit("tab-click",t)},handleTabClick:function(t,e){this.$emit("tab-click",t,e)},getLabelWidth:function(t,e){var n;return n=this.validatenull(t.labelWidth)?this.validatenull(e.labelWidth)?this.parentOption.labelWidth:e.labelWidth:t.labelWidth,this.setPx(n,this.labelWidth)},validateField:function(t){return this.$refs.form.validateField(t)},validTip:function(t){return!t.tip||"upload"===t.type},getPropRef:function(t){return this.$refs[t][0]},dataFormat:function(){this.formDefault=Object(core_dataformat__WEBPACK_IMPORTED_MODULE_5__.d)(this.propOption);var t=this.deepClone(this.formDefault.tableForm);this.setForm(this.deepClone(Object.assign(t,this.formVal)))},setVal:function(){this.$emit("input",this.form),this.$emit("change",this.form)},setControl:function setControl(){var _this6=this;this.propOption.forEach((function(column){var prop=column.prop,bind=column.bind,control=column.control,value=_this6.form;if(!_this6.formBind[prop]){if(bind&&(_this6.$watch("form."+prop,(function(t,e){t!=e&&Object(utils_util__WEBPACK_IMPORTED_MODULE_7__.t)(_this6.form,bind,t)})),_this6.$watch("form."+bind,(function(t,e){t!=e&&_this6.$set(_this6.form,prop,t)})),_this6.$set(_this6.form,prop,eval("value."+bind))),control){var callback=function(){var t=control(_this6.form[column.prop],_this6.form)||{};Object.keys(t).forEach((function(e){_this6.objectOption[e]=Object.assign(_this6.objectOption[e]||{},t[e]),t[e].dicData&&(_this6.DIC[e]=t[e].dicData)}))};_this6.$watch("form."+prop,(function(t,e){callback()})),callback()}_this6.formBind[prop]=!0}}))},setForm:function(t){var e=this;Object.keys(t).forEach((function(n){e.$set(e.form,n,t[n])})),this.forEachLabel(),!0===this.tableOption.filterNull&&(this.form=Object(utils_util__WEBPACK_IMPORTED_MODULE_7__.i)(this.form,[""],!1))},handleChange:function(t,e){var n=this;this.$nextTick((function(){var i=e.cascader,o=i.join(",");i.forEach((function(a){var r=a,s=n.form[e.prop],l=n.findObject(t,r);n.validatenull(l)||(n.formList.includes(o)&&i.forEach((function(t){n.form[t]="",n.$set(n.DIC,t,[])})),n.validatenull(i)||n.validatenull(s)||n.validatenull(l)||Object(core_dic__WEBPACK_IMPORTED_MODULE_6__.d)({column:l,value:s,form:n.form}).then((function(t){n.formList.includes(o)||n.formList.push(o);var e=t||[];n.$set(n.DIC,r,e),n.validatenull(e)||n.validatenull(e)||n.validatenull(l.cascaderIndex)||!n.validatenull(n.form[r])||(n.form[r]=e[l.cascaderIndex][(l.props||{}).value||global_variable__WEBPACK_IMPORTED_MODULE_4__.e.value])})))}))}))},handlePrint:function(){this.$Print(this.$el)},propChange:function(t,e){e.cascader&&this.handleChange(t,e)},handleMock:function(){var t=this;this.isMock&&(this.columnOption.forEach((function(e){var n=Object(utils_mock__WEBPACK_IMPORTED_MODULE_8__.a)(e.column,t.DIC,t.form,t.isMock);t.validatenull(n)||Object.keys(n).forEach((function(e){t.form[e]=n[e]}))})),this.$nextTick((function(){t.clearValidate(),t.$emit("mock-change",t.form)})))},vaildDetail:function(t){var e;if(this.detail)return!1;if(this.validatenull(t.detail)){if(this.isAdd)e="addDetail";else if(this.isEdit)e="editDetail";else if(this.isView)return!1}else e="detail";return!!e&&this.vaildData(t[e],!1)},vaildDisabled:function(t){var e;if(this.disabled)return!0;if(this.validatenull(t.disabled)){if(this.isAdd)e="addDisabled";else if(this.isEdit)e="editDisabled";else if(this.isView)return!0}else e="disabled";return!!e&&this.vaildData(t[e],!1)},vaildDisplay:function(t){var e;return this.validatenull(t.display)?this.isAdd?e="addDisplay":this.isEdit?e="editDisplay":this.isView&&(e="viewDisplay"):e="display",!e||this.vaildData(t[e],!0)},clearValidate:function(t){this.$refs.form.clearValidate(t)},validateCellForm:function(){var t=this;return new Promise((function(e){t.$refs.form.validate((function(t,n){e(n)}))}))},validate:function(t){var e=this;this.$refs.form.validate((function(n,i){var o=[],a=[],r={};e.dynamicOption.forEach((function(t){var n="form"===t.children.type;a.push(t.prop),n?e.validatenull(e.$refs[t.prop][0].$refs.temp.$refs.main)||e.$refs[t.prop][0].$refs.temp.$refs.main.forEach((function(t){o.push(t.validateCellForm())})):o.push(e.$refs[t.prop][0].$refs.temp.$refs.main.validateCellForm())})),Promise.all(o).then((function(n){n.forEach((function(t,n){e.validatenull(t)||(r[a[n]]=t)}));var o=Object.assign(r,i);e.validatenull(o)?(e.show(),t(!0,e.hide)):t(!1,e.hide,o)}))}))},resetForm:function(){var t=this;this.form=Object(utils_util__WEBPACK_IMPORTED_MODULE_7__.b)(this.form,(this.tableOption.filterParams||[]).concat([this.rowKey])),this.$nextTick((function(){t.clearValidate(),t.$emit("reset-change")}))},resetFields:function(){this.$refs.form.resetFields()},show:function(){this.allDisabled=!0},hide:function(){this.allDisabled=!1},submit:function(){var t=this;this.validate((function(e,n){e?t.$emit("submit",Object(utils_util__WEBPACK_IMPORTED_MODULE_7__.i)(t.form),t.hide):t.$emit("error",n)}))}}})},function(t,e,n){"use strict";n.d(e,"a",(function(){return l}));var i=n(5),o=n(2),a=n(3),r=n(10),s=n.n(r),l=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],l=t[e.prop],c=e.type,u=e.separator;if(e.bind&&(l=Object(o.m)(t,e.bind)),Object(i.a)(l))l="";else{var d=a.j.includes(e.type)&&e.multiple,p=a.b.includes(e.type);if((["string","number"].includes(e.dataType)||d||p)&&!Array.isArray(l)&&(l=(l+"").split(u||a.g),"number"===e.dataType&&(l=Object(o.w)(l))),a.a.includes(c))l=Array.isArray(l)?l.join(u||a.f):l.split(u||a.g).join(u||a.f);else if("password"===c)l=Object(o.p)(l,"*");else if(a.c.includes(c)&&e.format){var h=e.format.replace("dd","DD").replace("yyyy","YYYY"),f=s()().format("YYYY-MM-DD");if(-1!==c.indexOf("range")){var m=l[0]||"",v=l[1]||"";"timerange"===c&&m.length<=8&&v.length<8&&(m="".concat(f," ").concat(m),v="".concat(f," ").concat(v)),l=[s()(m).format(h),s()(v).format(h)].join(e.separator||"~")}else"time"===c&&l.length<=8&&(l="".concat(f," ").concat(l)),l=s()(l).format(h)}l=Object(o.k)(r,l,e.props||n.props)}return e.formatter&&"function"==typeof e.formatter&&(l=e.formatter(t,t[e.prop],l,e)),l}},function(t,e,n){var i,o;void 0===(o="function"==typeof(i=function(t,e,n){return function(t,e,n,i,o,a){function r(t){return"number"==typeof t&&!isNaN(t)}var s=this;if(s.version=function(){return"1.9.3"},s.options={useEasing:!0,useGrouping:!0,separator:",",decimal:".",easingFn:function(t,e,n,i){return n*(1-Math.pow(2,-10*t/i))*1024/1023+e},formattingFn:function(t){var e,n,i,o,a,r,l=t<0;if(t=Math.abs(t).toFixed(s.decimals),n=(e=(t+="").split("."))[0],i=e.length>1?s.options.decimal+e[1]:"",s.options.useGrouping){for(o="",a=0,r=n.length;a<r;++a)0!==a&&a%3==0&&(o=s.options.separator+o),o=n[r-a-1]+o;n=o}return s.options.numerals.length&&(n=n.replace(/[0-9]/g,(function(t){return s.options.numerals[+t]})),i=i.replace(/[0-9]/g,(function(t){return s.options.numerals[+t]}))),(l?"-":"")+s.options.prefix+n+i+s.options.suffix},prefix:"",suffix:"",numerals:[]},a&&"object"==typeof a)for(var l in s.options)a.hasOwnProperty(l)&&null!==a[l]&&(s.options[l]=a[l]);""===s.options.separator?s.options.useGrouping=!1:s.options.separator=""+s.options.separator;for(var c=0,u=["webkit","moz","ms","o"],d=0;d<u.length&&!window.requestAnimationFrame;++d)window.requestAnimationFrame=window[u[d]+"RequestAnimationFrame"],window.cancelAnimationFrame=window[u[d]+"CancelAnimationFrame"]||window[u[d]+"CancelRequestAnimationFrame"];window.requestAnimationFrame||(window.requestAnimationFrame=function(t,e){var n=(new Date).getTime(),i=Math.max(0,16-(n-c)),o=window.setTimeout((function(){t(n+i)}),i);return c=n+i,o}),window.cancelAnimationFrame||(window.cancelAnimationFrame=function(t){clearTimeout(t)}),s.initialize=function(){return!(!s.initialized&&(s.error="",s.d="string"==typeof t?document.getElementById(t):t,s.d?(s.startVal=Number(e),s.endVal=Number(n),r(s.startVal)&&r(s.endVal)?(s.decimals=Math.max(0,i||0),s.dec=Math.pow(10,s.decimals),s.duration=1e3*Number(o)||2e3,s.countDown=s.startVal>s.endVal,s.frameVal=s.startVal,s.initialized=!0,0):(s.error="[CountUp] startVal ("+e+") or endVal ("+n+") is not a number",1)):(s.error="[CountUp] target is null or undefined",1)))},s.printValue=function(t){var e=s.options.formattingFn(t);"INPUT"===s.d.tagName?this.d.value=e:"text"===s.d.tagName||"tspan"===s.d.tagName?this.d.textContent=e:this.d.innerHTML=e},s.count=function(t){s.startTime||(s.startTime=t),s.timestamp=t;var e=t-s.startTime;s.remaining=s.duration-e,s.options.useEasing?s.countDown?s.frameVal=s.startVal-s.options.easingFn(e,0,s.startVal-s.endVal,s.duration):s.frameVal=s.options.easingFn(e,s.startVal,s.endVal-s.startVal,s.duration):s.countDown?s.frameVal=s.startVal-(s.startVal-s.endVal)*(e/s.duration):s.frameVal=s.startVal+(s.endVal-s.startVal)*(e/s.duration),s.countDown?s.frameVal=s.frameVal<s.endVal?s.endVal:s.frameVal:s.frameVal=s.frameVal>s.endVal?s.endVal:s.frameVal,s.frameVal=Math.round(s.frameVal*s.dec)/s.dec,s.printValue(s.frameVal),e<s.duration?s.rAF=requestAnimationFrame(s.count):s.callback&&s.callback()},s.start=function(t){s.initialize()&&(s.callback=t,s.rAF=requestAnimationFrame(s.count))},s.pauseResume=function(){s.paused?(s.paused=!1,delete s.startTime,s.duration=s.remaining,s.startVal=s.frameVal,requestAnimationFrame(s.count)):(s.paused=!0,cancelAnimationFrame(s.rAF))},s.reset=function(){s.paused=!1,delete s.startTime,s.initialized=!1,s.initialize()&&(cancelAnimationFrame(s.rAF),s.printValue(s.startVal))},s.update=function(t){if(s.initialize()){if(!r(t=Number(t)))return void(s.error="[CountUp] update() - new endVal is not a number: "+t);s.error="",t!==s.frameVal&&(cancelAnimationFrame(s.rAF),s.paused=!1,delete s.startTime,s.startVal=s.frameVal,s.endVal=t,s.countDown=s.startVal>s.endVal,s.rAF=requestAnimationFrame(s.count))}},s.initialize()&&s.printValue(s.startVal)}})?i.call(e,n,e,t):i)||(t.exports=o)},function(t,e,n){"use strict";var i=n(6);function o(t){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}e.a=function(t,e,n,a){if(a){if(window.Mock){var r=(window.Mock||{}).Random,s={};return Object.keys(t).forEach((function(i){var a,c,u,d,p,h=t[i];if(h.mock&&"object"===o(h.mock)){var f=h.mock;switch(f.dic="string"==typeof h.dicData?e[h.dicData]:h.dicData||[],f.props=h.props||{},f.columnType=h.type,f.multiple=h.multiple,f.type){case"name":s[h.prop]=f.en?r.name(!0):r.cname();break;case"number":s[h.prop]=l(f);break;case"datetime":s[h.prop]=(p=(d=f).format,d.now?r.now(p):r.datetime(p));break;case"word":s[h.prop]=(c=(a=f).min,u=a.max,r.csentence(c,u));break;case"url":s[h.prop]=function(t){var e=t.header,n=(t.footer,r.url()),i=n.indexOf("://");return n=!1===e?n.substring(i+3):"http://"+n.substring(i+3)}(f);break;case"county":s[h.prop]=r.county(!0);break;case"dic":s[h.prop]=function(t){var e=t.dic,n=t.props,i=t.columnType,o=t.multiple,a=n.value||"value",r=e.length;if(["checkbox"].includes(i)||o){for(var s=l({min:1,max:r}),c=[],u=0;u<s;u++)for(var d=!0;d;){var p=e[l({min:0,max:r-1})][a];c.includes(p)||(c.push(p),d=!1)}return c}return e[l({min:0,max:r-1})][a]}(f)}}else h.mock instanceof Function&&(s[h.prop]=h.mock(n))})),s}i.a.logs("mock")}function l(t){var e=t.max,n=t.min,i=t.precision;if(i){var o=r.float(n,e,i)+"",a=o.indexOf(".")+1;return Number(o.substring(0,a+i))}return r.integer(n,e)}}},function(t,e){t.exports=__WEBPACK_EXTERNAL_MODULE__20__},function(t,e,n){var i,o;
+!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("vue"),require("axios")):"function"==typeof define&&define.amd?define("AVUE",["vue","axios"],e):"object"==typeof exports?exports.AVUE=e(require("vue"),require("axios")):t.AVUE=e(t.Vue,t.axios)}(this,(function(__WEBPACK_EXTERNAL_MODULE__8__,__WEBPACK_EXTERNAL_MODULE__20__){return function(t){var e={};function n(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return t[i].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(i,o,function(e){return t[e]}.bind(null,o));return i},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=24)}([function(t,e,n){"use strict";function i(t,e,n,i,o,a,r,s){var l,c="function"==typeof t?t.options:t;if(e&&(c.render=e,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),a&&(c._scopeId="data-v-"+a),r?(l=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),o&&o.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(r)},c._ssrRegister=l):o&&(l=s?function(){o.call(this,(c.functional?this.parent:this).$root.$options.shadowRoot)}:o),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(t,e){return l.call(e),u(t,e)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:t,options:c}}n.d(e,"a",(function(){return i}))},function(t,e,n){"use strict";var i=function(t,e,n){return e?t+n+e:t},o=function t(e,n){if("string"==typeof n)return i(e,n,"--");if(Array.isArray(n))return n.map((function(n){return t(e,n)}));var o={};return Object.keys(n||{}).forEach((function(t){o[e+"--"+t]=n[t]})),o},a={methods:{b:function(t,e){var n=this.$options.name;return t&&"string"!=typeof t&&(e=t,t=""),t=i(n,t,"__"),e?[t,o(t,e)]:t}}},r=n(3);e.a=function(t){return t.name=r.i+(t.name||""),t.mixins=t.mixins||[],t.mixins.push(a),t}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"n",(function(){return getFixed})),__webpack_require__.d(__webpack_exports__,"m",(function(){return getAsVal})),__webpack_require__.d(__webpack_exports__,"t",(function(){return setAsVal})),__webpack_require__.d(__webpack_exports__,"r",(function(){return loadScript})),__webpack_require__.d(__webpack_exports__,"h",(function(){return downFile})),__webpack_require__.d(__webpack_exports__,"w",(function(){return strCorNum})),__webpack_require__.d(__webpack_exports__,"c",(function(){return createObj})),__webpack_require__.d(__webpack_exports__,"d",(function(){return dataURLtoFile})),__webpack_require__.d(__webpack_exports__,"l",(function(){return findObject})),__webpack_require__.d(__webpack_exports__,"s",(function(){return randomId})),__webpack_require__.d(__webpack_exports__,"q",(function(){return isJson})),__webpack_require__.d(__webpack_exports__,"e",(function(){return deepClone})),__webpack_require__.d(__webpack_exports__,"v",(function(){return sortArrys})),__webpack_require__.d(__webpack_exports__,"u",(function(){return setPx})),__webpack_require__.d(__webpack_exports__,"f",(function(){return detailDataType})),__webpack_require__.d(__webpack_exports__,"g",(function(){return detailDic})),__webpack_require__.d(__webpack_exports__,"k",(function(){return findByValue})),__webpack_require__.d(__webpack_exports__,"i",(function(){return filterParams})),__webpack_require__.d(__webpack_exports__,"o",(function(){return getObjValue})),__webpack_require__.d(__webpack_exports__,"j",(function(){return findArray})),__webpack_require__.d(__webpack_exports__,"p",(function(){return getPasswordChar})),__webpack_require__.d(__webpack_exports__,"a",(function(){return arraySort})),__webpack_require__.d(__webpack_exports__,"b",(function(){return clearVal})),__webpack_require__.d(__webpack_exports__,"x",(function(){return vaildData}));var _validate__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(5),global_variable__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(3);function _typeof(t){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function getFixed(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return Number(t.toFixed(e))}function getAsVal(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=deepClone(t);return Object(_validate__WEBPACK_IMPORTED_MODULE_0__.a)(e)||e.split(".").forEach((function(t){n=Object(_validate__WEBPACK_IMPORTED_MODULE_0__.a)(n[t])?"":n[t]})),n}function setAsVal(obj){var bind=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",value=arguments.length>2?arguments[2]:void 0,result,type=getObjType(value);return result=Object(_validate__WEBPACK_IMPORTED_MODULE_0__.a)(value)?"array"===type?"obj.".concat(bind,"=[]"):"object"===type?"obj.".concat(bind,"={}"):["number","boolean"].includes(type)?"obj.".concat(bind,"=undefined"):"obj.".concat(bind,"=''"):"string"==type?"obj.".concat(bind,"='").concat(value,"'"):"obj.".concat(bind,"=").concat(value),eval(result),obj}var loadScript=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"js",e=arguments.length>1?arguments[1]:void 0,n=!1;return new Promise((function(i){var o,a=document.getElementsByTagName("head")[0];(a.children.forEach((function(t){-1!==(t.src||"").indexOf(e)&&(n=!0,i())})),n)||("js"===t?((o=document.createElement("script")).type="text/javascript",o.src=e):"css"===t&&((o=document.createElement("link")).rel="stylesheet",o.type="text/css",o.href=e),a.appendChild(o),o.onload=function(){i()})}))};function downFile(t,e){"object"==_typeof(t)&&t instanceof Blob&&(t=URL.createObjectURL(t));var n,i=document.createElement("a");i.href=t,i.download=e||"",window.MouseEvent?n=new MouseEvent("click"):(n=document.createEvent("MouseEvents")).initMouseEvent("click",!0,!1,window,0,0,0,0,0,!1,!1,!1,!1,0,null),i.dispatchEvent(n)}function strCorNum(t){return t.forEach((function(e,n){t[n]=Number(e)})),t}function extend(){var t,e,n,i,o=arguments[0]||{},a=!1,r=Array.prototype.slice.call(arguments),s=1,l=!1;for("boolean"==typeof o&&(a=o,s++,o=arguments[1]);s<r.length;s++)if(null!=(t=r[s]))for(n in t)i=t[n],e=o[n],a&&("[object Object]"===toString.call(i)||(l="[object Array]"==toString.call(i)))?(e=l?"[object Array]"===toString.call(e)?e:[]:"[object Object]"===toString.call(e)?e:{},o[n]=extend(a,e,i)):void 0!==i&&i!==e&&(o[n]=i);return o}function createObj(t,e){var n=e.split("."),i=n.splice(0,1)[0],o={};if(o[i]={},n.length>=2){var a="";n.forEach((function(t){a="".concat(a).concat("{",'"').concat(t,'":')})),a="".concat(a,'""');for(var r=0;r<n.length;r++)a="".concat(a).concat("}");a=JSON.parse(a),o[i]=a}return t=extend(!0,t,o)}function dataURLtoFile(t,e){for(var n=t.split(","),i=n[0].match(/:(.*?);/)[1],o=atob(n[1]),a=o.length,r=new Uint8Array(a);a--;)r[a]=o.charCodeAt(a);return new File([r],e,{type:i})}function findObject(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"prop",i=-1,o=function(){var e;return t.forEach((function(t){t.column?e="group":t.children&&(e="tree")})),e}();return"group"===o?t.forEach((function(t){var o=findArray(t.column,e,n,!0);-1!==o&&(i=o)})):i="tree"===o?findLabelNode(t,e,{value:n},!0):findArray(t,e,n,!0),i}function randomId(){for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",e=t.length,n="",i=0;i<16;i++)n+=t.charAt(Math.floor(Math.random()*e));return n}var getObjType=function(t){var e=Object.prototype.toString;return t instanceof Element?"element":{"[object Boolean]":"boolean","[object Number]":"number","[object String]":"string","[object Function]":"function","[object Array]":"array","[object Date]":"date","[object RegExp]":"regExp","[object Undefined]":"undefined","[object Null]":"null","[object Object]":"object"}[e.call(t)]},isJson=function(t){return Array.isArray(t)?t[0]instanceof Object:t instanceof Object},deepClone=function t(e){var n,i=getObjType(e);if("array"===i)n=[];else{if("object"!==i)return e;n={}}if("array"===i)for(var o=0,a=e.length;o<a;o++)e[o]=(e[o],e[o]),e[o]&&delete e[o].$parent,n.push(t(e[o]));else if("object"===i)for(var r in e)e&&delete e.$parent,n[r]=t(e[r]);return n},sortArrys=function(t,e){return t.sort((function(t,n){return t[e]>n[e]?-1:t[e]<n[e]?1:0})),t},setPx=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return Object(_validate__WEBPACK_IMPORTED_MODULE_0__.a)(t)&&(t=e),Object(_validate__WEBPACK_IMPORTED_MODULE_0__.a)(t)?"":(-1===(t+="").indexOf("%")&&(t+="px"),t)},detailDataType=function(t,e){return Object(_validate__WEBPACK_IMPORTED_MODULE_0__.a)(t)?t:"number"===e?Number(t):"string"===e?t+"":t},getUrlParams=function(t){var e={url:"",params:{}},n=t.split("?");e.url=n[0];var i=n[1];i&&i.split("&").forEach((function(t){var n=t.split("="),i=n[0],o=n[1];e.params[i]=o}));return e},detailDic=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=arguments.length>2?arguments[2]:void 0,o=n.value||global_variable__WEBPACK_IMPORTED_MODULE_1__.e.value,a=n.children||global_variable__WEBPACK_IMPORTED_MODULE_1__.e.children;return e.forEach((function(e){e[o]=detailDataType(e[o],i),e[a]&&t(e[a],n,i)})),e},findByValue=function(t,e,n){if(Object(_validate__WEBPACK_IMPORTED_MODULE_0__.a)(t))return e;var i="",o=e instanceof Array,a=o?e:[e];n=n||global_variable__WEBPACK_IMPORTED_MODULE_1__.e,i=[];for(var r=0;r<a.length;r++)i.push(findLabelNode(t,a[r],n)||a[r]);return o?i.join(global_variable__WEBPACK_IMPORTED_MODULE_1__.f).toString():i.join()},filterParams=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:["","$"],n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],i=n?deepClone(t):t;for(var o in i)e.includes("")&&Object(_validate__WEBPACK_IMPORTED_MODULE_0__.a)(i[o])&&delete i[o],e.includes("$")&&-1!==o.indexOf("$")&&delete i[o];return i},detailDicGroup=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=deepClone(t),i=e[global_variable__WEBPACK_IMPORTED_MODULE_1__.e.groups]||global_variable__WEBPACK_IMPORTED_MODULE_1__.e.groups;return t.forEach((function(t){t[i]&&(n=n.concat(t[i]))})),n},findLabelNode=function(t,e,n,i){var o;i||(t=detailDicGroup(t,n));return function t(a){for(var r=n.label||global_variable__WEBPACK_IMPORTED_MODULE_1__.e.label,s=n.value||global_variable__WEBPACK_IMPORTED_MODULE_1__.e.value,l=n.children||global_variable__WEBPACK_IMPORTED_MODULE_1__.e.children,c=0;c<a.length;c++){var u=a[c],d=u[l]||[];u[s]===e?o=i?u:u[r]:t(d)}}(t),o},getDeepData=function(t){return(Array.isArray(t)?t:t.data)||[]},getObjValue=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0,i=e.split("."),o=t;return""===i[0]&&"object"!==n?getDeepData(t):(""!==i[0]&&i.forEach((function(t){o=o[t]})),o)},findArray=function(t,e,n,i){n=n||global_variable__WEBPACK_IMPORTED_MODULE_1__.e.value;for(var o=0;o<t.length;o++)if(t[o][n]===e)return i?t[o]:o;return-1},getPasswordChar=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,n=t.toString().length;t="";for(var i=0;i<n;i++)t+=e;return t},arraySort=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;return t.filter((function(t){return!Object(_validate__WEBPACK_IMPORTED_MODULE_0__.a)(t[e])})).sort((function(t,e){return n(t,e)})).concat(t.filter((function(t){return Object(_validate__WEBPACK_IMPORTED_MODULE_0__.a)(t[e])})))},clearVal=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return t?(Object.keys(t).forEach((function(n){if(!e.includes(n))if(n.includes("$"))delete t[n];else if(!Object(_validate__WEBPACK_IMPORTED_MODULE_0__.a)(t[n])){var i=getObjType(t[n]);"array"===i?t[n]=[]:"object"===i?t[n]={}:["number","boolean"].includes(i)?t[n]=void 0:t[n]=""}})),t):{}},vaildData=function(t,e){return"boolean"==typeof t?t:Object(_validate__WEBPACK_IMPORTED_MODULE_0__.a)(t)?e:t}},function(t,e,n){"use strict";n.d(e,"i",(function(){return i})),n.d(e,"e",(function(){return o})),n.d(e,"d",(function(){return a})),n.d(e,"c",(function(){return r})),n.d(e,"h",(function(){return s})),n.d(e,"a",(function(){return l})),n.d(e,"j",(function(){return c})),n.d(e,"k",(function(){return u})),n.d(e,"b",(function(){return d})),n.d(e,"l",(function(){return p})),n.d(e,"f",(function(){return h})),n.d(e,"g",(function(){return f})),n.d(e,"m",(function(){return m}));var i="avue-",o={rowKey:"id",rowParentKey:"parentId",nodeKey:"id",label:"label",value:"value",desc:"desc",groups:"groups",title:"title",leaf:"leaf",children:"children",hasChildren:"hasChildren",labelText:"鍚嶇О",disabled:"disabled"},a={name:"name",url:"url",fileName:"file",res:""},r=["dates","date","datetime","datetimerange","daterange","time","timerange","week","month","monthrange","year"],s=["tree","number","icon","color","table","map"],l=["img","array","url"],c=["cascader","tree","select"],u=["slider"],d=l.concat(["upload","dynamic","map","checkbox","cascader","dynamic","timerange","monthrange","daterange","datetimerange","dates"]),p=r.concat(["select","checkbox","radio","cascader","tree","color","icon","table","map"]),h=" | ",f=",",m={img:/\.(gif|jpg|jpeg|png|webp|GIF|JPG|PNG)/,video:/\.(swf|avi|flv|mpg|rm|mov|wav|asf|3gp|mkv|rmvb|ogg|mp4)/}},function(t,e,n){"use strict";var i=n(12);e.a={methods:{t:function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];return i.b.apply(this,e)}}}},function(t,e,n){"use strict";function i(t){if(t instanceof Date||"boolean"==typeof t||"number"==typeof t)return!1;if(!(t instanceof Array)){if(t instanceof Object){for(var e in t)return!1;return!0}return"null"===t||null==t||"undefined"===t||void 0===t||""===t}return 0===t.length}n.d(e,"a",(function(){return i}))},function(t,e,n){"use strict";var i=n(15),o={AliOSS:{title:"闃块噷浜戜簯鍥剧墖涓婁紶锛岄渶寮曞叆OSS鐨剆dk",github:"https://github.com/ali-sdk/ali-oss/"},Map:{url:"https://webapi.amap.com/maps?v=1.4.11&key=xxxxx&plugin=AMap.PlaceSearch,https://webapi.amap.com/ui/1.0/main.js?v=1.0.11",title:"鍦板浘缁勪欢锛岄渶寮曞叆楂樺痉SDK"},MapUi:{url:"https://webapi.amap.com/ui/1.0/main.js?v=1.0.11",title:"鍦板浘缁勪欢锛岄渶寮曞叆楂樺痉UISDK"},Sortable:{url:"https://cdn.staticfile.org/Sortable/1.10.0-rc2/Sortable.min.js",title:"鎷栨嫿锛岄渶寮曞叆sortableJs",github:"https://github.com/SortableJS/Sortable"},Screenshot:{url:"https://cdn.staticfile.org/html2canvas/0.5.0-beta4/html2canvas.min.js",title:"闇�寮曞叆html2canvas渚濊禆鍖�",github:"https://github.com/niklasvh/html2canvas/"},CryptoJS:{url:"https://avuejs.com/cdn/CryptoJS.js",title:"涓冪墰浜戝浘鐗囦笂浼狅紝闇�寮曞叆CryptoJS"},hljs:{url:"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.15.6/highlight.min.js",title:"闇�寮曞叆hljs妗嗘灦鍖�",github:"https://github.com/highlightjs/highlight.js"},"file-saver":{url:"../../src/config/FileSaver.js-master",title:"闇�寮曞叆鏂囦欢鎿嶄綔鍖�"},xlsx:{url:"../../src/config/js-xlsx-master",title:"闇�寮曞叆excel鎿嶄綔鍖�"},mock:{url:"https://cdn.staticfile.org/Mock.js/1.0.1-beta3/mock-min.js",title:"闇�瑕佸紩鍏ock妯℃嫙鏁版嵁鍖�",github:"https://github.com/Colingo/mock"}};e.a={logs:function(t){var e=o[t];i.a.capsule(t,e.title,"warning"),i.a.warning("CDN:"+(e.url||"-")),i.a.warning("GITHUB:"+(e.github||"-"))}}},function(t,e,n){"use strict";n.d(e,"a",(function(){return s})),n.d(e,"b",(function(){return c})),n.d(e,"h",(function(){return u})),n.d(e,"g",(function(){return d})),n.d(e,"e",(function(){return p})),n.d(e,"d",(function(){return h})),n.d(e,"f",(function(){return f}));var i=n(5),o=n(3),a=n(2),r=n(12),s=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return t.forEach((function(e){var n=e.cascader;if(!Object(i.a)(n)){var o=e.prop;n.forEach((function(e){var n=Object(a.l)(t,e);-1!==n&&(n.parentProp=o)}))}})),t},l=0,c=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:12,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];n&&(l=0);var i=24;return(l=l+(t.span||e)+(t.offset||0))===i?l=0:l>i?l=0+(t.span||e)+(t.offset||0):t.row&&l!==i&&(t.count=i-l,l=0),t},u=function(t,e){var n=e.type,r=e.multiple,s=e.dataType,l=e.separator,c=void 0===l?o.g:l,u=e.alone,d=e.emitPath,p=e.range,h=t;return o.j.includes(n)&&1==r||o.b.includes(n)&&!1!==d||o.k.includes(n)&&1==p?(Array.isArray(h)||(h=Object(i.a)(h)?[]:(h+"").split(c)||[]),h.forEach((function(t,e){h[e]=Object(a.f)(t,s)})),o.a.includes(n)&&Object(i.a)(h)&&u&&(h=[""])):h=Object(a.f)(h,s),h},d=function(t){var e=t.type,n=t.searchRange,i=e;if(t.searchType)return t.searchType;if(["radio","checkbox","switch"].includes(e))i="select";else if(o.c.includes(e)){i=n?e.includes("range")?e:e+"range":e.replace("range","")}else["textarea"].includes(e)&&(i="input");return i},p=function(t,e){var n=t||"input";return Object(i.a)(e)?(o.a.includes(t)?n="array":["time","timerange"].includes(t)?n="time":o.c.includes(t)?n="date":["password","textarea","search"].includes(t)?n="input":o.h.includes(t)&&(n="input-"+t),o.i+n):e},h=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e={};return t.forEach((function(t){o.b.includes(t.type)&&!1!==t.emitPath||o.j.includes(t.type)&&t.multiple||"array"===t.dataType?e[t.prop]=[]:o.k.includes(t.type)&&1==t.range?e[t.prop]=[0,0]:["rate","slider","number"].includes(t.type)||"number"===t.dataType?e[t.prop]=void 0:e[t.prop]="",t.bind&&(e=Object(a.c)(e,t.bind)),Object(i.a)(t.value)||(e[t.prop]=t.value)})),{tableForm:e}},f=function(t){var e=t.placeholder,n=t.label;return Object(i.a)(e)?o.l.includes(t.type)?"".concat(Object(r.b)("tip.select")," ").concat(n):"".concat(Object(r.b)("tip.input")," ").concat(n):e}},function(t,e){t.exports=__WEBPACK_EXTERNAL_MODULE__8__},function(t,e,n){"use strict";n.d(e,"a",(function(){return a})),n.d(e,"b",(function(){return r})),n.d(e,"c",(function(){return s})),n.d(e,"d",(function(){return l}));var i=n(5),o=n(2),a=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return new Promise((function(n,o){var a=[],r=[],s={};t.forEach((function(t){t.parentProp&&a.push(t)})),e.forEach((function(t,e){a.forEach((function(n){!0!==n.hide&&!1!==n.dicFlag&&r.push(new Promise((function(o){Object(i.a)(t[n.parentProp])?o({prop:n.prop,data:[],index:e}):n.dicUrl&&l({url:"".concat(n.dicUrl.replace("{{key}}",t[n.parentProp])),props:n.props,method:n.dicMethod,formatter:n.dicFormatter,query:n.dicQuery,form:t}).then((function(t){o({prop:n.prop,data:t,index:e})}))})))}))})),Promise.all(r).then((function(t){t.forEach((function(t){Object(i.a)(s[t.index])&&(s[t.index]={}),s[t.index][t.prop]=t.data})),n(s)}))}))},r=function(t){var e=[];return new Promise((function(n,i){var a,r,s,c=function(t){var e=t.column||[],n=[],i={},o=[];return e.forEach((function(t){var e=t.dicData,a=t.dicUrl,r=t.prop,s=t.parentProp;o=o.concat(t.cascader||[]),Array.isArray(e)&&(i[r]=e),!1===t.dicFlag||!0===t.lazy||o.includes(r)||a&&!s&&n.push({url:a,name:r,method:t.dicMethod,formatter:t.dicFormatter,props:t.props,dataType:t.dataType,resKey:(t.props||{}).res,query:t.dicQuery||{}})})),{ajaxdic:n,locationdic:i}}(t);e=c.ajaxdic,(a=e,r={},s=[],new Promise((function(t){a.forEach((function(t){s.push(new Promise((function(e){l(Object.assign(t,{url:"".concat(t.url.replace("{{key}}",""))})).then((function(n){n=Object(o.g)(n,t.props,t.dataType),e(n)})).catch((function(){e([])}))})))})),Promise.all(s).then((function(e){a.forEach((function(t,n){r[t.name]=e[n]})),t(r)}))}))).then((function(t){n(t)})).catch((function(t){i(t)}))}))},s=function(t){var e={},n=t.dicData||{};return t.column.forEach((function(t){t.dicData&&(e[t.prop]=Object(o.g)(t.dicData,t.props,t.dataType))})),Object.assign(n,e)};var l=function(t){var e=t.url,n=t.query,i=t.method,a=t.resKey,r=t.props,s=t.formatter,l=t.value,c=void 0===l?"":l,u=t.column,d=t.form,p=void 0===d?{}:d;u&&(e=u.dicUrl,i=u.dicMethod,n=u.dicQuery||{},s=u.dicFormatter,r=u.props);var h={};return((e=e||"").match(/[^\{\}]+(?=\})/g)||[]).forEach((function(t){var n="{{".concat(t,"}}"),i=p[t];e="key"===t?e.replace(n,c):e.replace(n,i)})),"post"===i&&Object.keys(n).forEach((function(t){var e=n[t];if("string"==typeof e)if(e.match(/\{{|}}/g)){var i=p[e.replace(/\{{|}}/g,"")];h[t]=i}else h[t]=e;else h[t]=e})),r&&(a=(r||{}).res||a),new Promise((function(t){var r=function(e){var n=[];n="function"==typeof s?s(e.data):Object(o.o)(e.data,a),t(n)};"post"===i?window.axios.post(e,h).then((function(t){r(t)})).catch((function(){return[t([])]})):window.axios.get(e,{params:n}).then((function(t){r(t)})).catch((function(){return[t([])]}))}))}},function(t,e,n){t.exports=function(){"use strict";var t=6e4,e=36e5,n="millisecond",i="second",o="minute",a="hour",r="day",s="week",l="month",c="quarter",u="year",d="date",p="Invalid Date",h=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,f=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,m={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_")},v=function(t,e,n){var i=String(t);return!i||i.length>=e?t:""+Array(e+1-i.length).join(n)+t},b={s:v,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),i=Math.floor(n/60),o=n%60;return(e<=0?"+":"-")+v(i,2,"0")+":"+v(o,2,"0")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var i=12*(n.year()-e.year())+(n.month()-e.month()),o=e.clone().add(i,l),a=n-o<0,r=e.clone().add(i+(a?-1:1),l);return+(-(i+(n-o)/(a?o-r:r-o))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:l,y:u,w:s,d:r,D:d,h:a,m:o,s:i,ms:n,Q:c}[t]||String(t||"").toLowerCase().replace(/s$/,"")},u:function(t){return void 0===t}},g="en",y={};y[g]=m;var _=function(t){return t instanceof C},x=function t(e,n,i){var o;if(!e)return g;if("string"==typeof e){var a=e.toLowerCase();y[a]&&(o=a),n&&(y[a]=n,o=a);var r=e.split("-");if(!o&&r.length>1)return t(r[0])}else{var s=e.name;y[s]=e,o=s}return!i&&o&&(g=o),o||!i&&g},w=function(t,e){if(_(t))return t.clone();var n="object"==typeof e?e:{};return n.date=t,n.args=arguments,new C(n)},O=b;O.l=x,O.i=_,O.w=function(t,e){return w(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var C=function(){function m(t){this.$L=x(t.locale,null,!0),this.parse(t)}var v=m.prototype;return v.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(O.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var i=e.match(h);if(i){var o=i[2]-1||0,a=(i[7]||"0").substring(0,3);return n?new Date(Date.UTC(i[1],o,i[3]||1,i[4]||0,i[5]||0,i[6]||0,a)):new Date(i[1],o,i[3]||1,i[4]||0,i[5]||0,i[6]||0,a)}}return new Date(e)}(t),this.$x=t.x||{},this.init()},v.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},v.$utils=function(){return O},v.isValid=function(){return!(this.$d.toString()===p)},v.isSame=function(t,e){var n=w(t);return this.startOf(e)<=n&&n<=this.endOf(e)},v.isAfter=function(t,e){return w(t)<this.startOf(e)},v.isBefore=function(t,e){return this.endOf(e)<w(t)},v.$g=function(t,e,n){return O.u(t)?this[e]:this.set(n,t)},v.unix=function(){return Math.floor(this.valueOf()/1e3)},v.valueOf=function(){return this.$d.getTime()},v.startOf=function(t,e){var n=this,c=!!O.u(e)||e,p=O.p(t),h=function(t,e){var i=O.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return c?i:i.endOf(r)},f=function(t,e){return O.w(n.toDate()[t].apply(n.toDate("s"),(c?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},m=this.$W,v=this.$M,b=this.$D,g="set"+(this.$u?"UTC":"");switch(p){case u:return c?h(1,0):h(31,11);case l:return c?h(1,v):h(0,v+1);case s:var y=this.$locale().weekStart||0,_=(m<y?m+7:m)-y;return h(c?b-_:b+(6-_),v);case r:case d:return f(g+"Hours",0);case a:return f(g+"Minutes",1);case o:return f(g+"Seconds",2);case i:return f(g+"Milliseconds",3);default:return this.clone()}},v.endOf=function(t){return this.startOf(t,!1)},v.$set=function(t,e){var s,c=O.p(t),p="set"+(this.$u?"UTC":""),h=(s={},s[r]=p+"Date",s[d]=p+"Date",s[l]=p+"Month",s[u]=p+"FullYear",s[a]=p+"Hours",s[o]=p+"Minutes",s[i]=p+"Seconds",s[n]=p+"Milliseconds",s)[c],f=c===r?this.$D+(e-this.$W):e;if(c===l||c===u){var m=this.clone().set(d,1);m.$d[h](f),m.init(),this.$d=m.set(d,Math.min(this.$D,m.daysInMonth())).$d}else h&&this.$d[h](f);return this.init(),this},v.set=function(t,e){return this.clone().$set(t,e)},v.get=function(t){return this[O.p(t)]()},v.add=function(n,c){var d,p=this;n=Number(n);var h=O.p(c),f=function(t){var e=w(p);return O.w(e.date(e.date()+Math.round(t*n)),p)};if(h===l)return this.set(l,this.$M+n);if(h===u)return this.set(u,this.$y+n);if(h===r)return f(1);if(h===s)return f(7);var m=(d={},d[o]=t,d[a]=e,d[i]=1e3,d)[h]||1,v=this.$d.getTime()+n*m;return O.w(v,this)},v.subtract=function(t,e){return this.add(-1*t,e)},v.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||p;var i=t||"YYYY-MM-DDTHH:mm:ssZ",o=O.z(this),a=this.$H,r=this.$m,s=this.$M,l=n.weekdays,c=n.months,u=function(t,n,o,a){return t&&(t[n]||t(e,i))||o[n].slice(0,a)},d=function(t){return O.s(a%12||12,t,"0")},h=n.meridiem||function(t,e,n){var i=t<12?"AM":"PM";return n?i.toLowerCase():i},m={YY:String(this.$y).slice(-2),YYYY:this.$y,M:s+1,MM:O.s(s+1,2,"0"),MMM:u(n.monthsShort,s,c,3),MMMM:u(c,s),D:this.$D,DD:O.s(this.$D,2,"0"),d:String(this.$W),dd:u(n.weekdaysMin,this.$W,l,2),ddd:u(n.weekdaysShort,this.$W,l,3),dddd:l[this.$W],H:String(a),HH:O.s(a,2,"0"),h:d(1),hh:d(2),a:h(a,r,!0),A:h(a,r,!1),m:String(r),mm:O.s(r,2,"0"),s:String(this.$s),ss:O.s(this.$s,2,"0"),SSS:O.s(this.$ms,3,"0"),Z:o};return i.replace(f,(function(t,e){return e||m[t]||o.replace(":","")}))},v.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},v.diff=function(n,d,p){var h,f=O.p(d),m=w(n),v=(m.utcOffset()-this.utcOffset())*t,b=this-m,g=O.m(this,m);return g=(h={},h[u]=g/12,h[l]=g,h[c]=g/3,h[s]=(b-v)/6048e5,h[r]=(b-v)/864e5,h[a]=b/e,h[o]=b/t,h[i]=b/1e3,h)[f]||b,p?g:O.a(g)},v.daysInMonth=function(){return this.endOf(l).$D},v.$locale=function(){return y[this.$L]},v.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),i=x(t,e,!0);return i&&(n.$L=i),n},v.clone=function(){return O.w(this.$d,this)},v.toDate=function(){return new Date(this.valueOf())},v.toJSON=function(){return this.isValid()?this.toISOString():null},v.toISOString=function(){return this.$d.toISOString()},v.toString=function(){return this.$d.toUTCString()},m}(),k=C.prototype;return w.prototype=k,[["$ms",n],["$s",i],["$m",o],["$H",a],["$W",r],["$M",l],["$y",u],["$D",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),w.extend=function(t,e){return t.$i||(t(e,C,w),t.$i=!0),w},w.locale=x,w.isDayjs=_,w.unix=function(t){return w(1e3*t)},w.en=y[g],w.Ls=y,w.p={},w}()},function(t,e,n){"use strict";e.a={methods:{getSlotName:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"D",n=arguments.length>2?arguments[2]:void 0,i={F:"Form",H:"Header",E:"Error",L:"Label",S:"Search",T:"Type",D:""},o=t.prop+i[e];return n?n[o]:o},getSlotList:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;return n=n.map((function(t){return t.prop})),Object.keys(e).filter((function(e){var i=!1;return n.includes(e)||t.forEach((function(t){e.includes(t)&&(i=!0)})),i}))}}}},function(t,e,n){"use strict";n.d(e,"b",(function(){return h}));var i=n(8),o=n.n(i);function a(t){return(a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var r=Object.prototype.hasOwnProperty;function s(t,e){return r.call(t,e)}var l=/(%|)\{([0-9a-zA-Z_]+)\}/g,c=(o.a,function(){for(var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length,n=new Array(e>1?e-1:0),i=1;i<e;i++)n[i-1]=arguments[i];return 1===n.length&&"object"===a(n[0])&&(n=n[0]),n&&n.hasOwnProperty||(n={}),t.replace(l,(function(e,i,o,a){var r;return"{"===t[a-1]&&"}"===t[a+e.length]?o:null==(r=s(n,o)?n[o]:null)?"":r}))}),u={common:{condition:"鏉′欢",display:"鏄剧ず",hide:"闅愯棌"},tip:{select:"璇烽�夋嫨",input:"璇疯緭鍏�"},upload:{upload:"鐐瑰嚮涓婁紶",tip:"灏嗘枃浠舵嫋鍒版澶勶紝鎴�"},date:{start:"寮�濮嬫棩鏈�",end:"缁撴潫鏃ユ湡",t:"浠婃棩",y:"鏄ㄦ棩",n:"杩�7澶�",a:"鍏ㄩ儴"},form:{printBtn:"鎵� 鍗�",mockBtn:"妯� 鎷�",submitBtn:"鎻� 浜�",emptyBtn:"娓� 绌�"},crud:{filter:{addBtn:"鏂板鏉′欢",clearBtn:"娓呯┖鏁版嵁",resetBtn:"娓呯┖鏉′欢",cancelBtn:"鍙� 娑�",submitBtn:"纭� 瀹�"},column:{name:"鍒楀悕",hide:"闅愯棌",fixed:"鍐荤粨",filters:"杩囨护",sortable:"鎺掑簭",index:"椤哄簭",width:"瀹藉害"},tipStartTitle:"褰撳墠琛ㄦ牸宸查�夋嫨",tipEndTitle:"椤�",editTitle:"缂� 杈�",copyTitle:"澶� 鍒�",addTitle:"鏂� 澧�",viewTitle:"鏌� 鐪�",filterTitle:"杩囨护鏉′欢",showTitle:"鍒楁樉闅�",menu:"鎿嶄綔",addBtn:"鏂� 澧�",show:"鏄� 绀�",hide:"闅� 钘�",open:"灞� 寮�",shrink:"鏀� 缂�",printBtn:"鎵� 鍗�",excelBtn:"瀵� 鍑�",updateBtn:"淇� 鏀�",cancelBtn:"鍙� 娑�",searchBtn:"鎼� 绱�",emptyBtn:"娓� 绌�",menuBtn:"鍔� 鑳�",saveBtn:"淇� 瀛�",viewBtn:"鏌� 鐪�",editBtn:"缂� 杈�",copyBtn:"澶� 鍒�",delBtn:"鍒� 闄�"}},d=!1,p=function(){var t=Object.getPrototypeOf(this||o.a).$t;if("function"==typeof t&&o.a.locale)return d||(d=!0,o.a.locale(o.a.config.lang,Object.assign(u,o.a.locale(o.a.config.lang)||{},{clone:!0}))),t.apply(this,arguments)},h=function(t,e){var n=p.apply(this,arguments);if(null!=n)return n;for(var i=t.split("."),o=u,a=0,r=i.length;a<r;a++){var s=i[a];if(n=o[s],a===r-1)return c(n,e);if(!n)return"";o=n}return""};e.a={use:function(t){u=t||u},t:h,i18n:function(t){p=t||p}}},function(t,e,n){"use strict";var i=n(9),o=n(3),a=n(11);e.a=function(){return{mixins:[a.a],props:{defaults:{type:Object,default:function(){return{}}},option:{type:Object,required:!0,default:function(){return{}}}},watch:{defaults:{handler:function(t){this.objectOption=t},deep:!0},objectOption:{handler:function(t){this.$emit("update:defaults",t)},deep:!0},propOption:{handler:function(t){var e=this;this.objectOption={},t.forEach((function(t){return e.objectOption[t.prop]=t}))},deep:!0},option:{handler:function(){this.init(!1)},deep:!0}},data:function(){return{DIC:{},cascaderDIC:{},tableOption:{},isMobile:"",objectOption:{}}},created:function(){this.init()},computed:{resultOption:function(){return Object.assign(this.deepClone(this.tableOption),{column:this.propOption})},rowKey:function(){return this.tableOption.rowKey||o.e.rowKey},formRules:function(){var t={};return this.propOption.forEach((function(e){e.rules&&!1!==e.display&&(t[e.prop]=e.rules)})),t},isMediumSize:function(){return this.controlSize},controlSize:function(){return this.tableOption.size||this.$AVUE.size}},methods:{init:function(t){this.tableOption=this.option,this.getIsMobile(),this.handleLocalDic(),!1!==t&&this.handleLoadDic()},dicInit:function(t){"cascader"===t?this.handleLoadCascaderDic():this.handleLoadDic()},getIsMobile:function(){this.isMobile=window.document.body.clientWidth<=768},updateDic:function(t,e){var n=this,o=this.findObject(this.propOption,t);this.validatenull(e)&&this.validatenull(t)?this.handleLoadDic():this.validatenull(e)&&!this.validatenull(o.dicUrl)?Object(i.d)({column:o}).then((function(e){n.$set(n.DIC,t,e)})):this.$set(this.DIC,t,e)},handleSetDic:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};Object.keys(n).forEach((function(i){e.$set(t,i,n[i])}))},handleLocalDic:function(){this.handleSetDic(this.DIC,Object(i.c)(this.resultOption))},handleLoadDic:function(){var t=this;Object(i.b)(this.resultOption).then((function(e){return t.handleSetDic(t.DIC,e)}))},handleLoadCascaderDic:function(){var t=this;Object(i.a)(this.propOption,this.data).then((function(e){return t.handleSetDic(t.cascaderDIC,e)}))}}}}},function(t,e,n){"use strict";var i=n(7),o={name:"form-temp",mixins:[n(11).a],props:{value:{},uploadBefore:Function,uploadDelete:Function,uploadAfter:Function,uploadPreview:Function,uploadError:Function,uploadExceed:Function,columnSlot:{type:Array,default:function(){return[]}},tableData:{type:Object,default:function(){return{}}},clearable:{type:Boolean},enter:{type:Boolean,default:!1},type:{type:String},propsHttp:{type:Object,default:function(){return{}}},props:{type:Object},dic:{type:Array},placeholder:{type:String},size:{type:String},disabled:{type:Boolean},readonly:{type:Boolean},column:{type:Object,default:function(){return{}}}},data:function(){return{first:!1,text:void 0}},computed:{params:function(){return this.column.params||{}},event:function(){return this.column.event||{}}},watch:{text:{handler:function(t){this.first||!this.validatenull(t)?(this.first=!0,this.$emit("input",t),this.$emit("change",t)):this.first=!0}},value:{handler:function(t){this.text=t},immediate:!0}},methods:{getComponent:i.e,getPlaceholder:i.f,enterChange:function(){var t=this.column.enter;this.validatenull(t)?this.enter&&this.$emit("enter"):"function"==typeof t&&this.column.enter(this.text,this.column)}}},a=n(0),r=Object(a.a)(o,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n(t.getComponent(t.column.type,t.column.component),t._g(t._b({ref:"temp",tag:"component",attrs:{column:Object.assign(t.column,t.params),dic:t.dic,disabled:t.column.disabled||t.disabled,readonly:t.column.readonly||t.readonly,placeholder:t.getPlaceholder(t.column),props:t.column.props||t.props,propsHttp:t.column.propsHttp||t.propsHttp,size:t.column.size||t.size,"table-data":t.tableData,type:t.type||t.column.type,"column-slot":t.columnSlot},nativeOn:{keyup:function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:t.enterChange.apply(null,arguments)}},scopedSlots:t._u([t._l(t.getSlotName(t.column,"T",t.$scopedSlots)?[t.column]:[],(function(e){return{key:"default",fn:function(n){return[t._t(t.getSlotName(e,"T"),null,null,n)]}}})),t._l(t.columnSlot,(function(e){return{key:e,fn:function(n){return[t._t(e,null,null,n)]}}}))],null,!0),model:{value:t.text,callback:function(e){t.text=e},expression:"text"}},"component",Object.assign(t.column,t.$uploadFun(t.column)),!1),t.event),[t.params.html?n("span",{domProps:{innerHTML:t._s(t.params.html)}}):t._e()])}),[],!1,null,null,null);e.a=r.exports},function(t,e,n){"use strict";function i(t){return function(t){if(Array.isArray(t))return o(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(!t)return;if("string"==typeof t)return o(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return o(t,e)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}var a={};function r(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"default",e="";switch(t){case"default":e="#35495E";break;case"primary":e="#3488ff";break;case"success":e="#43B883";break;case"warning":e="#e6a23c";break;case"danger":e="#f56c6c"}return e}a.capsule=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"primary";console.log("%c ".concat(t," %c ").concat(e," %c"),"background:#35495E; padding: 1px; border-radius: 3px 0 0 3px; color: #fff;","background:".concat(r(n),"; padding: 1px; border-radius: 0 3px 3px 0;  color: #fff;"),"background:transparent")},a.colorful=function(t){var e;(e=console).log.apply(e,["%c".concat(t.map((function(t){return t.text||""})).join("%c"))].concat(i(t.map((function(t){return"color: ".concat(r(t.type),";")})))))},a.default=function(t){a.colorful([{text:t}])},a.primary=function(t){a.colorful([{text:t,type:"primary"}])},a.success=function(t){a.colorful([{text:t,type:"success"}])},a.warning=function(t){a.colorful([{text:t,type:"warning"}])},a.danger=function(t){a.colorful([{text:t,type:"danger"}])},window.$Log=a,e.a=a},function(module,__webpack_exports__,__webpack_require__){"use strict";var core_detail__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(17),core_create__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(1),common_common_init__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(13),common_components_form_index__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(14),global_variable__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__(3),core_dataformat__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__(7),core_dic__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__(9),utils_util__WEBPACK_IMPORTED_MODULE_7__=__webpack_require__(2),utils_mock__WEBPACK_IMPORTED_MODULE_8__=__webpack_require__(19),_menu__WEBPACK_IMPORTED_MODULE_9__=__webpack_require__(23);__webpack_exports__.a=Object(core_create__WEBPACK_IMPORTED_MODULE_1__.a)({name:"form",mixins:[Object(common_common_init__WEBPACK_IMPORTED_MODULE_2__.a)()],components:{formTemp:common_components_form_index__WEBPACK_IMPORTED_MODULE_3__.a,formMenu:_menu__WEBPACK_IMPORTED_MODULE_9__.a},data:function(){return{activeName:"",labelWidth:90,allDisabled:!1,optionIndex:[],optionBox:!1,tableOption:{},itemSpanDefault:12,form:{},formList:[],formBind:{},formCreate:!1,formDefault:{},formVal:{}}},provide:function(){return{formSafe:this}},watch:{tabsActive:{handler:function(t){this.activeName=this.tabsActive},immediate:!0},form:{handler:function(t){this.formCreate&&this.setVal()},deep:!0},DIC:{handler:function(){this.forEachLabel()},deep:!0,immediate:!0},allDisabled:{handler:function(t){this.$emit("update:status",t)},deep:!0,immediate:!0},value:{handler:function(t){this.formCreate?this.setForm(t):this.formVal=Object.assign(this.formVal,t||{})},deep:!0,immediate:!0}},computed:{columnSlot:function(){var t=this;return Object.keys(this.$scopedSlots).filter((function(e){return!t.propOption.map((function(t){return t.prop})).includes(e)}))},labelSuffix:function(){return this.parentOption.labelSuffix||":"},isMenu:function(){return 1!=this.columnOption.length},isDetail:function(){return!0===this.detail},isTabs:function(){return!0===this.parentOption.tabs},isAdd:function(){return"add"===this.boxType},isEdit:function(){return"edit"===this.boxType},isView:function(){return"view"===this.boxType},gutter:function(){return this.setPx((this.parentOption.gutter||10)/2)},detail:function(){return this.parentOption.detail},disabled:function(){return this.parentOption.disabled},readonly:function(){return this.parentOption.readonly},tabsType:function(){return this.parentOption.tabsType},columnLen:function(){return this.columnOption.length},dynamicOption:function(){var t=this,e=[];return this.propOption.forEach((function(n){"dynamic"==n.type&&t.vaildDisplay(n)&&e.push(n)})),e},propOption:function(){var t=[];return this.columnOption.forEach((function(e){!1!==e.display&&e.column.forEach((function(e){t.push(e)}))})),t},parentOption:function(){return this.tableOption||{}},columnOption:function(){var t=this,e=this.tableOption.column||[],n=this.deepClone(this.tableOption.group)||[],i=this.tableOption.footer||[];return 0!==e.length&&n.unshift({header:!1,column:e}),0!==i.length&&n.push({header:!1,column:i}),n.forEach((function(e,n){e.column=e.column||[],e.column.forEach((function(e,n){!1===e.display||t.isMobile||(e=Object(core_dataformat__WEBPACK_IMPORTED_MODULE_5__.b)(e,t.itemSpanDefault,0===n))})),e.column=Object(core_dataformat__WEBPACK_IMPORTED_MODULE_5__.a)(e.column),e.column=e.column.sort((function(t,e){return(e.order||0)-(t.order||0)}))})),n},menuPosition:function(){return this.parentOption.menuPosition?this.parentOption.menuPosition:"center"},boxType:function(){return this.parentOption.boxType},isPrint:function(){return this.vaildData(this.parentOption.printBtn,!1)},tabsActive:function(){return this.vaildData(this.tableOption.tabsActive+"","1")},isMock:function(){return this.vaildData(this.parentOption.mockBtn,!1)}},props:{uploadBefore:Function,uploadAfter:Function,uploadDelete:Function,uploadPreview:Function,uploadError:Function,uploadExceed:Function,status:{type:Boolean,default:!1},isCrud:{type:Boolean,default:!1},value:{type:Object,required:!0,default:function(){return{}}}},created:function(){var t=this;this.$nextTick((function(){t.dataFormat(),t.setVal(),t.$nextTick((function(){return t.clearValidate()})),t.formCreate=!0,t.setControl()}))},methods:{getComponent:core_dataformat__WEBPACK_IMPORTED_MODULE_5__.e,getPlaceholder:core_dataformat__WEBPACK_IMPORTED_MODULE_5__.f,getDisabled:function(t){return this.vaildDetail(t)||this.isDetail||this.vaildDisabled(t)||this.allDisabled},getSpan:function(t){return t.span||this.parentOption.span||this.itemSpanDefault},isGroupShow:function(t,e){return!this.isTabs||(e==this.activeName||0==e)},forEachLabel:function(){var t=this;1!=this.tableOption.filterDic?this.propOption.forEach((function(e){var n,i=t.DIC[e.prop];t.validatenull(i)||(n=Object(core_detail__WEBPACK_IMPORTED_MODULE_0__.a)(t.form,e,t.tableOption,i),t.$set(t.form,["$"+e.prop],n))})):this.form=Object(utils_util__WEBPACK_IMPORTED_MODULE_7__.i)(this.form,["$"],!1)},handleGroupClick:function(t){this.$emit("tab-click",t)},handleTabClick:function(t,e){this.$emit("tab-click",t,e)},getLabelWidth:function(t,e){var n;return n=this.validatenull(t.labelWidth)?this.validatenull(e.labelWidth)?this.parentOption.labelWidth:e.labelWidth:t.labelWidth,this.setPx(n,this.labelWidth)},validateField:function(t){return this.$refs.form.validateField(t)},validTip:function(t){return!t.tip||"upload"===t.type},getPropRef:function(t){return this.$refs[t][0]},dataFormat:function(){this.formDefault=Object(core_dataformat__WEBPACK_IMPORTED_MODULE_5__.d)(this.propOption);var t=this.deepClone(this.formDefault.tableForm);this.setForm(this.deepClone(Object.assign(t,this.formVal)))},setVal:function(){this.$emit("input",this.form),this.$emit("change",this.form)},setControl:function setControl(){var _this6=this;this.propOption.forEach((function(column){var prop=column.prop,bind=column.bind,control=column.control,value=_this6.form;if(!_this6.formBind[prop]){if(bind&&(_this6.$watch("form."+prop,(function(t,e){t!=e&&Object(utils_util__WEBPACK_IMPORTED_MODULE_7__.t)(_this6.form,bind,t)})),_this6.$watch("form."+bind,(function(t,e){t!=e&&_this6.$set(_this6.form,prop,t)})),_this6.$set(_this6.form,prop,eval("value."+bind))),control){var callback=function(){var t=control(_this6.form[column.prop],_this6.form)||{};Object.keys(t).forEach((function(e){_this6.objectOption[e]=Object.assign(_this6.objectOption[e]||{},t[e]),t[e].dicData&&(_this6.DIC[e]=t[e].dicData)}))};_this6.$watch("form."+prop,(function(t,e){callback()})),callback()}_this6.formBind[prop]=!0}}))},setForm:function(t){var e=this;Object.keys(t).forEach((function(n){e.$set(e.form,n,t[n])})),this.forEachLabel(),!0===this.tableOption.filterNull&&(this.form=Object(utils_util__WEBPACK_IMPORTED_MODULE_7__.i)(this.form,[""],!1))},handleChange:function(t,e){var n=this;this.$nextTick((function(){var i=e.cascader,o=i.join(",");i.forEach((function(a){var r=a,s=n.form[e.prop],l=n.findObject(t,r);n.validatenull(l)||(n.formList.includes(o)&&i.forEach((function(t){n.form[t]="",n.$set(n.DIC,t,[])})),n.validatenull(i)||n.validatenull(s)||n.validatenull(l)||Object(core_dic__WEBPACK_IMPORTED_MODULE_6__.d)({column:l,value:s,form:n.form}).then((function(t){n.formList.includes(o)||n.formList.push(o);var e=t||[];n.$set(n.DIC,r,e),n.validatenull(e)||n.validatenull(e)||n.validatenull(l.cascaderIndex)||!n.validatenull(n.form[r])||(n.form[r]=e[l.cascaderIndex][(l.props||{}).value||global_variable__WEBPACK_IMPORTED_MODULE_4__.e.value])})))}))}))},handlePrint:function(){this.$Print(this.$el)},propChange:function(t,e){e.cascader&&this.handleChange(t,e)},handleMock:function(){var t=this;this.isMock&&(this.columnOption.forEach((function(e){var n=Object(utils_mock__WEBPACK_IMPORTED_MODULE_8__.a)(e.column,t.DIC,t.form,t.isMock);t.validatenull(n)||Object.keys(n).forEach((function(e){t.form[e]=n[e]}))})),this.$nextTick((function(){t.clearValidate(),t.$emit("mock-change",t.form)})))},vaildDetail:function(t){var e;if(this.detail)return!1;if(this.validatenull(t.detail)){if(this.isAdd)e="addDetail";else if(this.isEdit)e="editDetail";else if(this.isView)return!1}else e="detail";return!!e&&this.vaildData(t[e],!1)},vaildDisabled:function(t){var e;if(this.disabled)return!0;if(this.validatenull(t.disabled)){if(this.isAdd)e="addDisabled";else if(this.isEdit)e="editDisabled";else if(this.isView)return!0}else e="disabled";return!!e&&this.vaildData(t[e],!1)},vaildDisplay:function(t){var e;return this.validatenull(t.display)?this.isAdd?e="addDisplay":this.isEdit?e="editDisplay":this.isView&&(e="viewDisplay"):e="display",!e||this.vaildData(t[e],!0)},clearValidate:function(t){this.$refs.form.clearValidate(t)},validateCellForm:function(){var t=this;return new Promise((function(e){t.$refs.form.validate((function(t,n){e(n)}))}))},validate:function(t){var e=this;this.$refs.form.validate((function(n,i){var o=[],a=[],r={};e.dynamicOption.forEach((function(t){var n="form"===t.children.type;a.push(t.prop),n?e.validatenull(e.$refs[t.prop][0].$refs.temp.$refs.main)||e.$refs[t.prop][0].$refs.temp.$refs.main.forEach((function(t){o.push(t.validateCellForm())})):o.push(e.$refs[t.prop][0].$refs.temp.$refs.main.validateCellForm())})),Promise.all(o).then((function(n){n.forEach((function(t,n){e.validatenull(t)||(r[a[n]]=t)}));var o=Object.assign(r,i);e.validatenull(o)?(e.show(),t(!0,e.hide)):t(!1,e.hide,o)}))}))},resetForm:function(){var t=this;this.form=Object(utils_util__WEBPACK_IMPORTED_MODULE_7__.b)(this.form,(this.tableOption.filterParams||[]).concat([this.rowKey])),this.$nextTick((function(){t.clearValidate(),t.$emit("reset-change")}))},resetFields:function(){this.$refs.form.resetFields()},show:function(){this.allDisabled=!0},hide:function(){this.allDisabled=!1},submit:function(){var t=this;this.validate((function(e,n){e?t.$emit("submit",Object(utils_util__WEBPACK_IMPORTED_MODULE_7__.i)(t.form),t.hide):t.$emit("error",n)}))}}})},function(t,e,n){"use strict";n.d(e,"a",(function(){return l}));var i=n(5),o=n(2),a=n(3),r=n(10),s=n.n(r),l=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],l=t[e.prop],c=e.type,u=e.separator;if(e.bind&&(l=Object(o.m)(t,e.bind)),Object(i.a)(l))l="";else{var d=a.j.includes(e.type)&&e.multiple,p=a.b.includes(e.type);if((["string","number"].includes(e.dataType)||d||p)&&!Array.isArray(l)&&(l=(l+"").split(u||a.g),"number"===e.dataType&&(l=Object(o.w)(l))),a.a.includes(c))l=Array.isArray(l)?l.join(u||a.f):l.split(u||a.g).join(u||a.f);else if("password"===c)l=Object(o.p)(l,"*");else if(a.c.includes(c)&&e.format){var h=e.format.replace("dd","DD").replace("yyyy","YYYY"),f=s()().format("YYYY-MM-DD");if(-1!==c.indexOf("range")){var m=l[0]||"",v=l[1]||"";"timerange"===c&&m.length<=8&&v.length<8&&(m="".concat(f," ").concat(m),v="".concat(f," ").concat(v)),l=[s()(m).format(h),s()(v).format(h)].join(e.separator||"~")}else"time"===c&&l.length<=8&&(l="".concat(f," ").concat(l)),l=s()(l).format(h)}l=Object(o.k)(r,l,e.props||n.props)}return e.formatter&&"function"==typeof e.formatter&&(l=e.formatter(t,t[e.prop],l,e)),l}},function(t,e,n){var i,o;void 0===(o="function"==typeof(i=function(t,e,n){return function(t,e,n,i,o,a){function r(t){return"number"==typeof t&&!isNaN(t)}var s=this;if(s.version=function(){return"1.9.3"},s.options={useEasing:!0,useGrouping:!0,separator:",",decimal:".",easingFn:function(t,e,n,i){return n*(1-Math.pow(2,-10*t/i))*1024/1023+e},formattingFn:function(t){var e,n,i,o,a,r,l=t<0;if(t=Math.abs(t).toFixed(s.decimals),n=(e=(t+="").split("."))[0],i=e.length>1?s.options.decimal+e[1]:"",s.options.useGrouping){for(o="",a=0,r=n.length;a<r;++a)0!==a&&a%3==0&&(o=s.options.separator+o),o=n[r-a-1]+o;n=o}return s.options.numerals.length&&(n=n.replace(/[0-9]/g,(function(t){return s.options.numerals[+t]})),i=i.replace(/[0-9]/g,(function(t){return s.options.numerals[+t]}))),(l?"-":"")+s.options.prefix+n+i+s.options.suffix},prefix:"",suffix:"",numerals:[]},a&&"object"==typeof a)for(var l in s.options)a.hasOwnProperty(l)&&null!==a[l]&&(s.options[l]=a[l]);""===s.options.separator?s.options.useGrouping=!1:s.options.separator=""+s.options.separator;for(var c=0,u=["webkit","moz","ms","o"],d=0;d<u.length&&!window.requestAnimationFrame;++d)window.requestAnimationFrame=window[u[d]+"RequestAnimationFrame"],window.cancelAnimationFrame=window[u[d]+"CancelAnimationFrame"]||window[u[d]+"CancelRequestAnimationFrame"];window.requestAnimationFrame||(window.requestAnimationFrame=function(t,e){var n=(new Date).getTime(),i=Math.max(0,16-(n-c)),o=window.setTimeout((function(){t(n+i)}),i);return c=n+i,o}),window.cancelAnimationFrame||(window.cancelAnimationFrame=function(t){clearTimeout(t)}),s.initialize=function(){return!(!s.initialized&&(s.error="",s.d="string"==typeof t?document.getElementById(t):t,s.d?(s.startVal=Number(e),s.endVal=Number(n),r(s.startVal)&&r(s.endVal)?(s.decimals=Math.max(0,i||0),s.dec=Math.pow(10,s.decimals),s.duration=1e3*Number(o)||2e3,s.countDown=s.startVal>s.endVal,s.frameVal=s.startVal,s.initialized=!0,0):(s.error="[CountUp] startVal ("+e+") or endVal ("+n+") is not a number",1)):(s.error="[CountUp] target is null or undefined",1)))},s.printValue=function(t){var e=s.options.formattingFn(t);"INPUT"===s.d.tagName?this.d.value=e:"text"===s.d.tagName||"tspan"===s.d.tagName?this.d.textContent=e:this.d.innerHTML=e},s.count=function(t){s.startTime||(s.startTime=t),s.timestamp=t;var e=t-s.startTime;s.remaining=s.duration-e,s.options.useEasing?s.countDown?s.frameVal=s.startVal-s.options.easingFn(e,0,s.startVal-s.endVal,s.duration):s.frameVal=s.options.easingFn(e,s.startVal,s.endVal-s.startVal,s.duration):s.countDown?s.frameVal=s.startVal-(s.startVal-s.endVal)*(e/s.duration):s.frameVal=s.startVal+(s.endVal-s.startVal)*(e/s.duration),s.countDown?s.frameVal=s.frameVal<s.endVal?s.endVal:s.frameVal:s.frameVal=s.frameVal>s.endVal?s.endVal:s.frameVal,s.frameVal=Math.round(s.frameVal*s.dec)/s.dec,s.printValue(s.frameVal),e<s.duration?s.rAF=requestAnimationFrame(s.count):s.callback&&s.callback()},s.start=function(t){s.initialize()&&(s.callback=t,s.rAF=requestAnimationFrame(s.count))},s.pauseResume=function(){s.paused?(s.paused=!1,delete s.startTime,s.duration=s.remaining,s.startVal=s.frameVal,requestAnimationFrame(s.count)):(s.paused=!0,cancelAnimationFrame(s.rAF))},s.reset=function(){s.paused=!1,delete s.startTime,s.initialized=!1,s.initialize()&&(cancelAnimationFrame(s.rAF),s.printValue(s.startVal))},s.update=function(t){if(s.initialize()){if(!r(t=Number(t)))return void(s.error="[CountUp] update() - new endVal is not a number: "+t);s.error="",t!==s.frameVal&&(cancelAnimationFrame(s.rAF),s.paused=!1,delete s.startTime,s.startVal=s.frameVal,s.endVal=t,s.countDown=s.startVal>s.endVal,s.rAF=requestAnimationFrame(s.count))}},s.initialize()&&s.printValue(s.startVal)}})?i.call(e,n,e,t):i)||(t.exports=o)},function(t,e,n){"use strict";var i=n(6);function o(t){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}e.a=function(t,e,n,a){if(a){if(window.Mock){var r=(window.Mock||{}).Random,s={};return Object.keys(t).forEach((function(i){var a,c,u,d,p,h=t[i];if(h.mock&&"object"===o(h.mock)){var f=h.mock;switch(f.dic="string"==typeof h.dicData?e[h.dicData]:h.dicData||[],f.props=h.props||{},f.columnType=h.type,f.multiple=h.multiple,f.type){case"name":s[h.prop]=f.en?r.name(!0):r.cname();break;case"number":s[h.prop]=l(f);break;case"datetime":s[h.prop]=(p=(d=f).format,d.now?r.now(p):r.datetime(p));break;case"word":s[h.prop]=(c=(a=f).min,u=a.max,r.csentence(c,u));break;case"url":s[h.prop]=function(t){var e=t.header,n=(t.footer,r.url()),i=n.indexOf("://");return n=!1===e?n.substring(i+3):"http://"+n.substring(i+3)}(f);break;case"county":s[h.prop]=r.county(!0);break;case"dic":s[h.prop]=function(t){var e=t.dic,n=t.props,i=t.columnType,o=t.multiple,a=n.value||"value",r=e.length;if(["checkbox"].includes(i)||o){for(var s=l({min:1,max:r}),c=[],u=0;u<s;u++)for(var d=!0;d;){var p=e[l({min:0,max:r-1})][a];c.includes(p)||(c.push(p),d=!1)}return c}return e[l({min:0,max:r-1})][a]}(f)}}else h.mock instanceof Function&&(s[h.prop]=h.mock(n))})),s}i.a.logs("mock")}function l(t){var e=t.max,n=t.min,i=t.precision;if(i){var o=r.float(n,e,i)+"",a=o.indexOf(".")+1;return Number(o.substring(0,a+i))}return r.integer(n,e)}}},function(t,e){t.exports=__WEBPACK_EXTERNAL_MODULE__20__},function(t,e,n){var i,o;
 /* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress
  * @license MIT */void 0===(o="function"==typeof(i=function(){var t,e,n={version:"0.2.0"},i=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function o(t,e,n){return t<e?e:t>n?n:t}function a(t){return 100*(-1+t)}n.configure=function(t){var e,n;for(e in t)void 0!==(n=t[e])&&t.hasOwnProperty(e)&&(i[e]=n);return this},n.status=null,n.set=function(t){var e=n.isStarted();t=o(t,i.minimum,1),n.status=1===t?null:t;var l=n.render(!e),c=l.querySelector(i.barSelector),u=i.speed,d=i.easing;return l.offsetWidth,r((function(e){""===i.positionUsing&&(i.positionUsing=n.getPositioningCSS()),s(c,function(t,e,n){var o;return(o="translate3d"===i.positionUsing?{transform:"translate3d("+a(t)+"%,0,0)"}:"translate"===i.positionUsing?{transform:"translate("+a(t)+"%,0)"}:{"margin-left":a(t)+"%"}).transition="all "+e+"ms "+n,o}(t,u,d)),1===t?(s(l,{transition:"none",opacity:1}),l.offsetWidth,setTimeout((function(){s(l,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),e()}),u)}),u)):setTimeout(e,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var t=function(){setTimeout((function(){n.status&&(n.trickle(),t())}),i.trickleSpeed)};return i.trickle&&t(),this},n.done=function(t){return t||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(t){var e=n.status;return e?("number"!=typeof t&&(t=(1-e)*o(Math.random()*e,.1,.95)),e=o(e+t,0,.994),n.set(e)):n.start()},n.trickle=function(){return n.inc(Math.random()*i.trickleRate)},t=0,e=0,n.promise=function(i){return i&&"resolved"!==i.state()?(0===e&&n.start(),t++,e++,i.always((function(){0==--e?(t=0,n.done()):n.set((t-e)/t)})),this):this},n.render=function(t){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var e=document.createElement("div");e.id="nprogress",e.innerHTML=i.template;var o,r=e.querySelector(i.barSelector),l=t?"-100":a(n.status||0),u=document.querySelector(i.parent);return s(r,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),i.showSpinner||(o=e.querySelector(i.spinnerSelector))&&p(o),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(e),e},n.remove=function(){u(document.documentElement,"nprogress-busy"),u(document.querySelector(i.parent),"nprogress-custom-parent");var t=document.getElementById("nprogress");t&&p(t)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var t=document.body.style,e="WebkitTransform"in t?"Webkit":"MozTransform"in t?"Moz":"msTransform"in t?"ms":"OTransform"in t?"O":"";return e+"Perspective"in t?"translate3d":e+"Transform"in t?"translate":"margin"};var r=function(){var t=[];function e(){var n=t.shift();n&&n(e)}return function(n){t.push(n),1==t.length&&e()}}(),s=function(){var t=["Webkit","O","Moz","ms"],e={};function n(n){return n=n.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(t,e){return e.toUpperCase()})),e[n]||(e[n]=function(e){var n=document.body.style;if(e in n)return e;for(var i,o=t.length,a=e.charAt(0).toUpperCase()+e.slice(1);o--;)if((i=t[o]+a)in n)return i;return e}(n))}function i(t,e,i){e=n(e),t.style[e]=i}return function(t,e){var n,o,a=arguments;if(2==a.length)for(n in e)void 0!==(o=e[n])&&e.hasOwnProperty(n)&&i(t,n,o);else i(t,a[1],a[2])}}();function l(t,e){return("string"==typeof t?t:d(t)).indexOf(" "+e+" ")>=0}function c(t,e){var n=d(t),i=n+e;l(n,e)||(t.className=i.substring(1))}function u(t,e){var n,i=d(t);l(t,e)&&(n=i.replace(" "+e+" "," "),t.className=n.substring(1,n.length-1))}function d(t){return(" "+(t.className||"")+" ").replace(/\s+/gi," ")}function p(t){t&&t.parentNode&&t.parentNode.removeChild(t)}return n})?i.call(e,n,e,t):i)||(t.exports=o)},function(t,e,n){window,t.exports=function(t){var e={};function n(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return t[i].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(i,o,function(e){return t[e]}.bind(null,o));return i},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=6)}([function(t,e,n){var i=n(2);"string"==typeof i&&(i=[[t.i,i,""]]),n(4)(i,{hmr:!0,transform:void 0,insertInto:void 0}),i.locals&&(t.exports=i.locals)},function(t,e,n){"use strict";var i=n(0);n.n(i).a},function(t,e,n){(t.exports=n(3)(!1)).push([t.i,'\n.vue-cropper[data-v-6dae58fd] {\n  position: relative;\n  width: 100%;\n  height: 100%;\n  box-sizing: border-box;\n  user-select: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  direction: ltr;\n  touch-action: none;\n  text-align: left;\n  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC");\n}\n.cropper-box[data-v-6dae58fd],\n.cropper-box-canvas[data-v-6dae58fd],\n.cropper-drag-box[data-v-6dae58fd],\n.cropper-crop-box[data-v-6dae58fd],\n.cropper-face[data-v-6dae58fd] {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  user-select: none;\n}\n.cropper-box-canvas img[data-v-6dae58fd] {\n  position: relative;\n  text-align: left;\n  user-select: none;\n  transform: none;\n  max-width: none;\n  max-height: none;\n}\n.cropper-box[data-v-6dae58fd] {\n  overflow: hidden;\n}\n.cropper-move[data-v-6dae58fd] {\n  cursor: move;\n}\n.cropper-crop[data-v-6dae58fd] {\n  cursor: crosshair;\n}\n.cropper-modal[data-v-6dae58fd] {\n  background: rgba(0, 0, 0, 0.5);\n}\n.cropper-crop-box[data-v-6dae58fd] {\n  /*border: 2px solid #39f;*/\n}\n.cropper-view-box[data-v-6dae58fd] {\n  display: block;\n  overflow: hidden;\n  width: 100%;\n  height: 100%;\n  outline: 1px solid #39f;\n  outline-color: rgba(51, 153, 255, 0.75);\n  user-select: none;\n}\n.cropper-view-box img[data-v-6dae58fd] {\n  user-select: none;\n  text-align: left;\n  max-width: none;\n  max-height: none;\n}\n.cropper-face[data-v-6dae58fd] {\n  top: 0;\n  left: 0;\n  background-color: #fff;\n  opacity: 0.1;\n}\n.crop-info[data-v-6dae58fd] {\n  position: absolute;\n  left: 0px;\n  min-width: 65px;\n  text-align: center;\n  color: white;\n  line-height: 20px;\n  background-color: rgba(0, 0, 0, 0.8);\n  font-size: 12px;\n}\n.crop-line[data-v-6dae58fd] {\n  position: absolute;\n  display: block;\n  width: 100%;\n  height: 100%;\n  opacity: 0.1;\n}\n.line-w[data-v-6dae58fd] {\n  top: -3px;\n  left: 0;\n  height: 5px;\n  cursor: n-resize;\n}\n.line-a[data-v-6dae58fd] {\n  top: 0;\n  left: -3px;\n  width: 5px;\n  cursor: w-resize;\n}\n.line-s[data-v-6dae58fd] {\n  bottom: -3px;\n  left: 0;\n  height: 5px;\n  cursor: s-resize;\n}\n.line-d[data-v-6dae58fd] {\n  top: 0;\n  right: -3px;\n  width: 5px;\n  cursor: e-resize;\n}\n.crop-point[data-v-6dae58fd] {\n  position: absolute;\n  width: 8px;\n  height: 8px;\n  opacity: 0.75;\n  background-color: #39f;\n  border-radius: 100%;\n}\n.point1[data-v-6dae58fd] {\n  top: -4px;\n  left: -4px;\n  cursor: nw-resize;\n}\n.point2[data-v-6dae58fd] {\n  top: -5px;\n  left: 50%;\n  margin-left: -3px;\n  cursor: n-resize;\n}\n.point3[data-v-6dae58fd] {\n  top: -4px;\n  right: -4px;\n  cursor: ne-resize;\n}\n.point4[data-v-6dae58fd] {\n  top: 50%;\n  left: -4px;\n  margin-top: -3px;\n  cursor: w-resize;\n}\n.point5[data-v-6dae58fd] {\n  top: 50%;\n  right: -4px;\n  margin-top: -3px;\n  cursor: e-resize;\n}\n.point6[data-v-6dae58fd] {\n  bottom: -5px;\n  left: -4px;\n  cursor: sw-resize;\n}\n.point7[data-v-6dae58fd] {\n  bottom: -5px;\n  left: 50%;\n  margin-left: -3px;\n  cursor: s-resize;\n}\n.point8[data-v-6dae58fd] {\n  bottom: -5px;\n  right: -4px;\n  cursor: se-resize;\n}\n@media screen and (max-width: 500px) {\n.crop-point[data-v-6dae58fd] {\n    position: absolute;\n    width: 20px;\n    height: 20px;\n    opacity: 0.45;\n    background-color: #39f;\n    border-radius: 100%;\n}\n.point1[data-v-6dae58fd] {\n    top: -10px;\n    left: -10px;\n}\n.point2[data-v-6dae58fd],\n  .point4[data-v-6dae58fd],\n  .point5[data-v-6dae58fd],\n  .point7[data-v-6dae58fd] {\n    display: none;\n}\n.point3[data-v-6dae58fd] {\n    top: -10px;\n    right: -10px;\n}\n.point4[data-v-6dae58fd] {\n    top: 0;\n    left: 0;\n}\n.point6[data-v-6dae58fd] {\n    bottom: -10px;\n    left: -10px;\n}\n.point8[data-v-6dae58fd] {\n    bottom: -10px;\n    right: -10px;\n}\n}\n',""])},function(t,e){t.exports=function(t){var e=[];return e.toString=function(){return this.map((function(e){var n=function(t,e){var n=t[1]||"",i=t[3];if(!i)return n;if(e&&"function"==typeof btoa){var o=function(t){return"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(t))))+" */"}(i),a=i.sources.map((function(t){return"/*# sourceURL="+i.sourceRoot+t+" */"}));return[n].concat(a).concat([o]).join("\n")}return[n].join("\n")}(e,t);return e[2]?"@media "+e[2]+"{"+n+"}":n})).join("")},e.i=function(t,n){"string"==typeof t&&(t=[[null,t,""]]);for(var i={},o=0;o<this.length;o++){var a=this[o][0];"number"==typeof a&&(i[a]=!0)}for(o=0;o<t.length;o++){var r=t[o];"number"==typeof r[0]&&i[r[0]]||(n&&!r[2]?r[2]=n:n&&(r[2]="("+r[2]+") and ("+n+")"),e.push(r))}},e}},function(t,e,n){var i={},o=function(t){var e;return function(){return void 0===e&&(e=t.apply(this,arguments)),e}}((function(){return window&&document&&document.all&&!window.atob})),a=function(t){var e={};return function(t,n){if("function"==typeof t)return t();if(void 0===e[t]){var i=function(t,e){return e?e.querySelector(t):document.querySelector(t)}.call(this,t,n);if(window.HTMLIFrameElement&&i instanceof window.HTMLIFrameElement)try{i=i.contentDocument.head}catch(t){i=null}e[t]=i}return e[t]}}(),r=null,s=0,l=[],c=n(5);function u(t,e){for(var n=0;n<t.length;n++){var o=t[n],a=i[o.id];if(a){a.refs++;for(var r=0;r<a.parts.length;r++)a.parts[r](o.parts[r]);for(;r<o.parts.length;r++)a.parts.push(v(o.parts[r],e))}else{var s=[];for(r=0;r<o.parts.length;r++)s.push(v(o.parts[r],e));i[o.id]={id:o.id,refs:1,parts:s}}}}function d(t,e){for(var n=[],i={},o=0;o<t.length;o++){var a=t[o],r=e.base?a[0]+e.base:a[0],s={css:a[1],media:a[2],sourceMap:a[3]};i[r]?i[r].parts.push(s):n.push(i[r]={id:r,parts:[s]})}return n}function p(t,e){var n=a(t.insertInto);if(!n)throw new Error("Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.");var i=l[l.length-1];if("top"===t.insertAt)i?i.nextSibling?n.insertBefore(e,i.nextSibling):n.appendChild(e):n.insertBefore(e,n.firstChild),l.push(e);else if("bottom"===t.insertAt)n.appendChild(e);else{if("object"!=typeof t.insertAt||!t.insertAt.before)throw new Error("[Style Loader]\n\n Invalid value for parameter 'insertAt' ('options.insertAt') found.\n Must be 'top', 'bottom', or Object.\n (https://github.com/webpack-contrib/style-loader#insertat)\n");var o=a(t.insertAt.before,n);n.insertBefore(e,o)}}function h(t){if(null===t.parentNode)return!1;t.parentNode.removeChild(t);var e=l.indexOf(t);e>=0&&l.splice(e,1)}function f(t){var e=document.createElement("style");if(void 0===t.attrs.type&&(t.attrs.type="text/css"),void 0===t.attrs.nonce){var i=n.nc;i&&(t.attrs.nonce=i)}return m(e,t.attrs),p(t,e),e}function m(t,e){Object.keys(e).forEach((function(n){t.setAttribute(n,e[n])}))}function v(t,e){var n,i,o,a;if(e.transform&&t.css){if(!(a="function"==typeof e.transform?e.transform(t.css):e.transform.default(t.css)))return function(){};t.css=a}if(e.singleton){var l=s++;n=r||(r=f(e)),i=g.bind(null,n,l,!1),o=g.bind(null,n,l,!0)}else t.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(n=function(t){var e=document.createElement("link");return void 0===t.attrs.type&&(t.attrs.type="text/css"),t.attrs.rel="stylesheet",m(e,t.attrs),p(t,e),e}(e),i=function(t,e,n){var i=n.css,o=n.sourceMap,a=void 0===e.convertToAbsoluteUrls&&o;(e.convertToAbsoluteUrls||a)&&(i=c(i)),o&&(i+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(o))))+" */");var r=new Blob([i],{type:"text/css"}),s=t.href;t.href=URL.createObjectURL(r),s&&URL.revokeObjectURL(s)}.bind(null,n,e),o=function(){h(n),n.href&&URL.revokeObjectURL(n.href)}):(n=f(e),i=function(t,e){var n=e.css,i=e.media;if(i&&t.setAttribute("media",i),t.styleSheet)t.styleSheet.cssText=n;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(n))}}.bind(null,n),o=function(){h(n)});return i(t),function(e){if(e){if(e.css===t.css&&e.media===t.media&&e.sourceMap===t.sourceMap)return;i(t=e)}else o()}}t.exports=function(t,e){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!=typeof document)throw new Error("The style-loader cannot be used in a non-browser environment");(e=e||{}).attrs="object"==typeof e.attrs?e.attrs:{},e.singleton||"boolean"==typeof e.singleton||(e.singleton=o()),e.insertInto||(e.insertInto="head"),e.insertAt||(e.insertAt="bottom");var n=d(t,e);return u(n,e),function(t){for(var o=[],a=0;a<n.length;a++){var r=n[a];(s=i[r.id]).refs--,o.push(s)}for(t&&u(d(t,e),e),a=0;a<o.length;a++){var s;if(0===(s=o[a]).refs){for(var l=0;l<s.parts.length;l++)s.parts[l]();delete i[s.id]}}}};var b=function(){var t=[];return function(e,n){return t[e]=n,t.filter(Boolean).join("\n")}}();function g(t,e,n,i){var o=n?"":i.css;if(t.styleSheet)t.styleSheet.cssText=b(e,o);else{var a=document.createTextNode(o),r=t.childNodes;r[e]&&t.removeChild(r[e]),r.length?t.insertBefore(a,r[e]):t.appendChild(a)}}},function(t,e){t.exports=function(t){var e="undefined"!=typeof window&&window.location;if(!e)throw new Error("fixUrls requires window.location");if(!t||"string"!=typeof t)return t;var n=e.protocol+"//"+e.host,i=n+e.pathname.replace(/\/[^\/]*$/,"/");return t.replace(/url\s*\(((?:[^)(]|\((?:[^)(]+|\([^)(]*\))*\))*)\)/gi,(function(t,e){var o,a=e.trim().replace(/^"(.*)"$/,(function(t,e){return e})).replace(/^'(.*)'$/,(function(t,e){return e}));return/^(#|data:|http:\/\/|https:\/\/|file:\/\/\/|\s*$)/i.test(a)?t:(o=0===a.indexOf("//")?a:0===a.indexOf("/")?n+a:i+a.replace(/^\.\//,""),"url("+JSON.stringify(o)+")")}))}},function(t,e,n){"use strict";n.r(e);var i=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{ref:"cropper",staticClass:"vue-cropper",on:{mouseover:t.scaleImg,mouseout:t.cancelScale}},[t.imgs?n("div",{staticClass:"cropper-box"},[n("div",{directives:[{name:"show",rawName:"v-show",value:!t.loading,expression:"!loading"}],staticClass:"cropper-box-canvas",style:{width:t.trueWidth+"px",height:t.trueHeight+"px",transform:"scale("+t.scale+","+t.scale+") translate3d("+t.x/t.scale+"px,"+t.y/t.scale+"px,0)rotateZ("+90*t.rotate+"deg)"}},[n("img",{ref:"cropperImg",attrs:{src:t.imgs,alt:"cropper-img"}})])]):t._e(),t._v(" "),n("div",{staticClass:"cropper-drag-box",class:{"cropper-move":t.move&&!t.crop,"cropper-crop":t.crop,"cropper-modal":t.cropping},on:{mousedown:t.startMove,touchstart:t.startMove}}),t._v(" "),n("div",{directives:[{name:"show",rawName:"v-show",value:t.cropping,expression:"cropping"}],staticClass:"cropper-crop-box",style:{width:t.cropW+"px",height:t.cropH+"px",transform:"translate3d("+t.cropOffsertX+"px,"+t.cropOffsertY+"px,0)"}},[n("span",{staticClass:"cropper-view-box"},[n("img",{style:{width:t.trueWidth+"px",height:t.trueHeight+"px",transform:"scale("+t.scale+","+t.scale+") translate3d("+(t.x-t.cropOffsertX)/t.scale+"px,"+(t.y-t.cropOffsertY)/t.scale+"px,0)rotateZ("+90*t.rotate+"deg)"},attrs:{src:t.imgs,alt:"cropper-img"}})]),t._v(" "),n("span",{staticClass:"cropper-face cropper-move",on:{mousedown:t.cropMove,touchstart:t.cropMove}}),t._v(" "),t.info?n("span",{staticClass:"crop-info",style:{top:t.cropInfo.top}},[t._v(t._s(t.cropInfo.width)+" 脳 "+t._s(t.cropInfo.height))]):t._e(),t._v(" "),t.fixedBox?t._e():n("span",[n("span",{staticClass:"crop-line line-w",on:{mousedown:function(e){t.changeCropSize(e,!1,!0,0,1)},touchstart:function(e){t.changeCropSize(e,!1,!0,0,1)}}}),t._v(" "),n("span",{staticClass:"crop-line line-a",on:{mousedown:function(e){t.changeCropSize(e,!0,!1,1,0)},touchstart:function(e){t.changeCropSize(e,!0,!1,1,0)}}}),t._v(" "),n("span",{staticClass:"crop-line line-s",on:{mousedown:function(e){t.changeCropSize(e,!1,!0,0,2)},touchstart:function(e){t.changeCropSize(e,!1,!0,0,2)}}}),t._v(" "),n("span",{staticClass:"crop-line line-d",on:{mousedown:function(e){t.changeCropSize(e,!0,!1,2,0)},touchstart:function(e){t.changeCropSize(e,!0,!1,2,0)}}}),t._v(" "),n("span",{staticClass:"crop-point point1",on:{mousedown:function(e){t.changeCropSize(e,!0,!0,1,1)},touchstart:function(e){t.changeCropSize(e,!0,!0,1,1)}}}),t._v(" "),n("span",{staticClass:"crop-point point2",on:{mousedown:function(e){t.changeCropSize(e,!1,!0,0,1)},touchstart:function(e){t.changeCropSize(e,!1,!0,0,1)}}}),t._v(" "),n("span",{staticClass:"crop-point point3",on:{mousedown:function(e){t.changeCropSize(e,!0,!0,2,1)},touchstart:function(e){t.changeCropSize(e,!0,!0,2,1)}}}),t._v(" "),n("span",{staticClass:"crop-point point4",on:{mousedown:function(e){t.changeCropSize(e,!0,!1,1,0)},touchstart:function(e){t.changeCropSize(e,!0,!1,1,0)}}}),t._v(" "),n("span",{staticClass:"crop-point point5",on:{mousedown:function(e){t.changeCropSize(e,!0,!1,2,0)},touchstart:function(e){t.changeCropSize(e,!0,!1,2,0)}}}),t._v(" "),n("span",{staticClass:"crop-point point6",on:{mousedown:function(e){t.changeCropSize(e,!0,!0,1,2)},touchstart:function(e){t.changeCropSize(e,!0,!0,1,2)}}}),t._v(" "),n("span",{staticClass:"crop-point point7",on:{mousedown:function(e){t.changeCropSize(e,!1,!0,0,2)},touchstart:function(e){t.changeCropSize(e,!1,!0,0,2)}}}),t._v(" "),n("span",{staticClass:"crop-point point8",on:{mousedown:function(e){t.changeCropSize(e,!0,!0,2,2)},touchstart:function(e){t.changeCropSize(e,!0,!0,2,2)}}})])])])};i._withStripped=!0;var o={getData:function(t){return new Promise((function(e,n){var i={};(function(t){var e=null;return new Promise((function(n,i){if(t.src)if(/^data\:/i.test(t.src))e=function(t){t=t.replace(/^data\:([^\;]+)\;base64,/gim,"");for(var e=atob(t),n=e.length,i=new ArrayBuffer(n),o=new Uint8Array(i),a=0;a<n;a++)o[a]=e.charCodeAt(a);return i}(t.src),n(e);else if(/^blob\:/i.test(t.src)){var o=new FileReader;o.onload=function(t){e=t.target.result,n(e)},function(t,e){var n=new XMLHttpRequest;n.open("GET",t,!0),n.responseType="blob",n.onload=function(t){200!=this.status&&0!==this.status||function(t){o.readAsArrayBuffer(t)}(this.response)},n.send()}(t.src)}else{var a=new XMLHttpRequest;a.onload=function(){if(200!=this.status&&0!==this.status)throw"Could not load image";e=a.response,n(e),a=null},a.open("GET",t.src,!0),a.responseType="arraybuffer",a.send(null)}else i("img error")}))})(t).then((function(t){i.arrayBuffer=t,i.orientation=function(t){var e,n,i,o,a,r,s,l,c,u=new DataView(t),d=u.byteLength;if(255===u.getUint8(0)&&216===u.getUint8(1))for(l=2;l<d;){if(255===u.getUint8(l)&&225===u.getUint8(l+1)){r=l;break}l++}if(r&&(n=r+10,"Exif"===function(t,e,n){var i,o="";for(i=e,n+=e;i<n;i++)o+=String.fromCharCode(t.getUint8(i));return o}(u,r+4,4)&&((o=18761===(a=u.getUint16(n)))||19789===a)&&42===u.getUint16(n+2,o)&&(i=u.getUint32(n+4,o))>=8&&(s=n+i)),s)for(d=u.getUint16(s,o),c=0;c<d;c++)if(l=s+12*c+2,274===u.getUint16(l,o)){l+=8,e=u.getUint16(l,o);break}return e}(t),e(i)})).catch((function(t){n(t)}))}))}},a=o,r={data:function(){return{w:0,h:0,scale:1,x:0,y:0,loading:!0,trueWidth:0,trueHeight:0,move:!0,moveX:0,moveY:0,crop:!1,cropping:!1,cropW:0,cropH:0,cropOldW:0,cropOldH:0,canChangeX:!1,canChangeY:!1,changeCropTypeX:1,changeCropTypeY:1,cropX:0,cropY:0,cropChangeX:0,cropChangeY:0,cropOffsertX:0,cropOffsertY:0,support:"",touches:[],touchNow:!1,rotate:0,isIos:!1,orientation:0,imgs:"",coe:.2,scaling:!1,scalingSet:"",coeStatus:"",isCanShow:!0}},props:{img:{type:[String,Blob,null,File],default:""},outputSize:{type:Number,default:1},outputType:{type:String,default:"jpeg"},info:{type:Boolean,default:!0},canScale:{type:Boolean,default:!0},autoCrop:{type:Boolean,default:!1},autoCropWidth:{type:[Number,String],default:0},autoCropHeight:{type:[Number,String],default:0},fixed:{type:Boolean,default:!1},fixedNumber:{type:Array,default:function(){return[1,1]}},fixedBox:{type:Boolean,default:!1},full:{type:Boolean,default:!1},canMove:{type:Boolean,default:!0},canMoveBox:{type:Boolean,default:!0},original:{type:Boolean,default:!1},centerBox:{type:Boolean,default:!1},high:{type:Boolean,default:!0},infoTrue:{type:Boolean,default:!1},maxImgSize:{type:[Number,String],default:2e3},enlarge:{type:[Number,String],default:1},preW:{type:[Number,String],default:0},mode:{type:String,default:"contain"},limitMinSize:{type:[Number,Array,String],default:function(){return 10}}},computed:{cropInfo:function(){var t={};if(t.top=this.cropOffsertY>21?"-21px":"0px",t.width=this.cropW>0?this.cropW:0,t.height=this.cropH>0?this.cropH:0,this.infoTrue){var e=1;this.high&&!this.full&&(e=window.devicePixelRatio),1!==this.enlarge&!this.full&&(e=Math.abs(Number(this.enlarge))),t.width=t.width*e,t.height=t.height*e,this.full&&(t.width=t.width/this.scale,t.height=t.height/this.scale)}return t.width=t.width.toFixed(0),t.height=t.height.toFixed(0),t},isIE:function(){return navigator.userAgent,!!window.ActiveXObject||"ActiveXObject"in window},passive:function(){return this.isIE?null:{passive:!1}}},watch:{img:function(){this.checkedImg()},imgs:function(t){""!==t&&this.reload()},cropW:function(){this.showPreview()},cropH:function(){this.showPreview()},cropOffsertX:function(){this.showPreview()},cropOffsertY:function(){this.showPreview()},scale:function(t,e){this.showPreview()},x:function(){this.showPreview()},y:function(){this.showPreview()},autoCrop:function(t){t&&this.goAutoCrop()},autoCropWidth:function(){this.autoCrop&&this.goAutoCrop()},autoCropHeight:function(){this.autoCrop&&this.goAutoCrop()},mode:function(){this.checkedImg()},rotate:function(){this.showPreview(),(this.autoCrop||this.cropW>0||this.cropH>0)&&this.goAutoCrop(this.cropW,this.cropH)}},methods:{getVersion:function(t){for(var e=navigator.userAgent.split(" "),n="",i=new RegExp(t,"i"),o=0;o<e.length;o++)i.test(e[o])&&(n=e[o]);return n?n.split("/")[1].split("."):["0","0","0"]},checkOrientationImage:function(t,e,n,i){var o=this;if(this.getVersion("chrome")[0]>=81)e=-1;else if(this.getVersion("safari")[0]>=605){var a=this.getVersion("version");a[0]>13&&a[1]>1&&(e=-1)}else{var r=navigator.userAgent.toLowerCase().match(/cpu iphone os (.*?) like mac os/);if(r){var s=r[1];((s=s.split("_"))[0]>13||s[0]>=13&&s[1]>=4)&&(e=-1)}}var l=document.createElement("canvas"),c=l.getContext("2d");switch(c.save(),e){case 2:l.width=n,l.height=i,c.translate(n,0),c.scale(-1,1);break;case 3:l.width=n,l.height=i,c.translate(n/2,i/2),c.rotate(180*Math.PI/180),c.translate(-n/2,-i/2);break;case 4:l.width=n,l.height=i,c.translate(0,i),c.scale(1,-1);break;case 5:l.height=n,l.width=i,c.rotate(.5*Math.PI),c.scale(1,-1);break;case 6:l.width=i,l.height=n,c.translate(i/2,n/2),c.rotate(90*Math.PI/180),c.translate(-n/2,-i/2);break;case 7:l.height=n,l.width=i,c.rotate(.5*Math.PI),c.translate(n,-i),c.scale(-1,1);break;case 8:l.height=n,l.width=i,c.translate(i/2,n/2),c.rotate(-90*Math.PI/180),c.translate(-n/2,-i/2);break;default:l.width=n,l.height=i}c.drawImage(t,0,0,n,i),c.restore(),l.toBlob((function(t){var e=URL.createObjectURL(t);URL.revokeObjectURL(o.imgs),o.imgs=e}),"image/"+this.outputType,1)},checkedImg:function(){var t=this;if(null===this.img||""===this.img)return this.imgs="",void this.clearCrop();this.loading=!0,this.scale=1,this.rotate=0,this.clearCrop();var e=new Image;if(e.onload=function(){if(""===t.img)return t.$emit("imgLoad","error"),t.$emit("img-load","error"),!1;var n=e.width,i=e.height;a.getData(e).then((function(o){t.orientation=o.orientation||1;var a=Number(t.maxImgSize);!t.orientation&&n<a&i<a?t.imgs=t.img:(n>a&&(i=i/n*a,n=a),i>a&&(n=n/i*a,i=a),t.checkOrientationImage(e,t.orientation,n,i))}))},e.onerror=function(){t.$emit("imgLoad","error"),t.$emit("img-load","error")},"data"!==this.img.substr(0,4)&&(e.crossOrigin=""),this.isIE){var n=new XMLHttpRequest;n.onload=function(){var t=URL.createObjectURL(this.response);e.src=t},n.open("GET",this.img,!0),n.responseType="blob",n.send()}else e.src=this.img},startMove:function(t){if(t.preventDefault(),this.move&&!this.crop){if(!this.canMove)return!1;this.moveX=("clientX"in t?t.clientX:t.touches[0].clientX)-this.x,this.moveY=("clientY"in t?t.clientY:t.touches[0].clientY)-this.y,t.touches?(window.addEventListener("touchmove",this.moveImg),window.addEventListener("touchend",this.leaveImg),2==t.touches.length&&(this.touches=t.touches,window.addEventListener("touchmove",this.touchScale),window.addEventListener("touchend",this.cancelTouchScale))):(window.addEventListener("mousemove",this.moveImg),window.addEventListener("mouseup",this.leaveImg)),this.$emit("imgMoving",{moving:!0,axis:this.getImgAxis()}),this.$emit("img-moving",{moving:!0,axis:this.getImgAxis()})}else this.cropping=!0,window.addEventListener("mousemove",this.createCrop),window.addEventListener("mouseup",this.endCrop),window.addEventListener("touchmove",this.createCrop),window.addEventListener("touchend",this.endCrop),this.cropOffsertX=t.offsetX?t.offsetX:t.touches[0].pageX-this.$refs.cropper.offsetLeft,this.cropOffsertY=t.offsetY?t.offsetY:t.touches[0].pageY-this.$refs.cropper.offsetTop,this.cropX="clientX"in t?t.clientX:t.touches[0].clientX,this.cropY="clientY"in t?t.clientY:t.touches[0].clientY,this.cropChangeX=this.cropOffsertX,this.cropChangeY=this.cropOffsertY,this.cropW=0,this.cropH=0},touchScale:function(t){var e=this;t.preventDefault();var n=this.scale,i=this.touches[0].clientX,o=this.touches[0].clientY,a=t.touches[0].clientX,r=t.touches[0].clientY,s=this.touches[1].clientX,l=this.touches[1].clientY,c=t.touches[1].clientX,u=t.touches[1].clientY,d=Math.sqrt(Math.pow(i-s,2)+Math.pow(o-l,2)),p=Math.sqrt(Math.pow(a-c,2)+Math.pow(r-u,2))-d,h=1,f=(h=(h=h/this.trueWidth>h/this.trueHeight?h/this.trueHeight:h/this.trueWidth)>.1?.1:h)*p;if(!this.touchNow){if(this.touchNow=!0,p>0?n+=Math.abs(f):p<0&&n>Math.abs(f)&&(n-=Math.abs(f)),this.touches=t.touches,setTimeout((function(){e.touchNow=!1}),8),!this.checkoutImgAxis(this.x,this.y,n))return!1;this.scale=n}},cancelTouchScale:function(t){window.removeEventListener("touchmove",this.touchScale)},moveImg:function(t){var e=this;if(t.preventDefault(),t.touches&&2===t.touches.length)return this.touches=t.touches,window.addEventListener("touchmove",this.touchScale),window.addEventListener("touchend",this.cancelTouchScale),window.removeEventListener("touchmove",this.moveImg),!1;var n,i,o="clientX"in t?t.clientX:t.touches[0].clientX,a="clientY"in t?t.clientY:t.touches[0].clientY;n=o-this.moveX,i=a-this.moveY,this.$nextTick((function(){if(e.centerBox){var t,o,a,r,s=e.getImgAxis(n,i,e.scale),l=e.getCropAxis(),c=e.trueHeight*e.scale,u=e.trueWidth*e.scale;switch(e.rotate){case 1:case-1:case 3:case-3:t=e.cropOffsertX-e.trueWidth*(1-e.scale)/2+(c-u)/2,o=e.cropOffsertY-e.trueHeight*(1-e.scale)/2+(u-c)/2,a=t-c+e.cropW,r=o-u+e.cropH;break;default:t=e.cropOffsertX-e.trueWidth*(1-e.scale)/2,o=e.cropOffsertY-e.trueHeight*(1-e.scale)/2,a=t-u+e.cropW,r=o-c+e.cropH}s.x1>=l.x1&&(n=t),s.y1>=l.y1&&(i=o),s.x2<=l.x2&&(n=a),s.y2<=l.y2&&(i=r)}e.x=n,e.y=i,e.$emit("imgMoving",{moving:!0,axis:e.getImgAxis()}),e.$emit("img-moving",{moving:!0,axis:e.getImgAxis()})}))},leaveImg:function(t){window.removeEventListener("mousemove",this.moveImg),window.removeEventListener("touchmove",this.moveImg),window.removeEventListener("mouseup",this.leaveImg),window.removeEventListener("touchend",this.leaveImg),this.$emit("imgMoving",{moving:!1,axis:this.getImgAxis()}),this.$emit("img-moving",{moving:!1,axis:this.getImgAxis()})},scaleImg:function(){this.canScale&&window.addEventListener(this.support,this.changeSize,this.passive)},cancelScale:function(){this.canScale&&window.removeEventListener(this.support,this.changeSize)},changeSize:function(t){var e=this;t.preventDefault();var n=this.scale,i=t.deltaY||t.wheelDelta;i=navigator.userAgent.indexOf("Firefox")>0?30*i:i,this.isIE&&(i=-i);var o=this.coe,a=(o=o/this.trueWidth>o/this.trueHeight?o/this.trueHeight:o/this.trueWidth)*i;a<0?n+=Math.abs(a):n>Math.abs(a)&&(n-=Math.abs(a));var r=a<0?"add":"reduce";if(r!==this.coeStatus&&(this.coeStatus=r,this.coe=.2),this.scaling||(this.scalingSet=setTimeout((function(){e.scaling=!1,e.coe=e.coe+=.01}),50)),this.scaling=!0,!this.checkoutImgAxis(this.x,this.y,n))return!1;this.scale=n},changeScale:function(t){var e=this.scale;t=t||1;var n=20;if((t*=n=n/this.trueWidth>n/this.trueHeight?n/this.trueHeight:n/this.trueWidth)>0?e+=Math.abs(t):e>Math.abs(t)&&(e-=Math.abs(t)),!this.checkoutImgAxis(this.x,this.y,e))return!1;this.scale=e},createCrop:function(t){var e=this;t.preventDefault();var n="clientX"in t?t.clientX:t.touches?t.touches[0].clientX:0,i="clientY"in t?t.clientY:t.touches?t.touches[0].clientY:0;this.$nextTick((function(){var t=n-e.cropX,o=i-e.cropY;if(t>0?(e.cropW=t+e.cropChangeX>e.w?e.w-e.cropChangeX:t,e.cropOffsertX=e.cropChangeX):(e.cropW=e.w-e.cropChangeX+Math.abs(t)>e.w?e.cropChangeX:Math.abs(t),e.cropOffsertX=e.cropChangeX+t>0?e.cropChangeX+t:0),e.fixed){var a=e.cropW/e.fixedNumber[0]*e.fixedNumber[1];a+e.cropOffsertY>e.h?(e.cropH=e.h-e.cropOffsertY,e.cropW=e.cropH/e.fixedNumber[1]*e.fixedNumber[0],e.cropOffsertX=t>0?e.cropChangeX:e.cropChangeX-e.cropW):e.cropH=a,e.cropOffsertY=e.cropOffsertY}else o>0?(e.cropH=o+e.cropChangeY>e.h?e.h-e.cropChangeY:o,e.cropOffsertY=e.cropChangeY):(e.cropH=e.h-e.cropChangeY+Math.abs(o)>e.h?e.cropChangeY:Math.abs(o),e.cropOffsertY=e.cropChangeY+o>0?e.cropChangeY+o:0)}))},changeCropSize:function(t,e,n,i,o){t.preventDefault(),window.addEventListener("mousemove",this.changeCropNow),window.addEventListener("mouseup",this.changeCropEnd),window.addEventListener("touchmove",this.changeCropNow),window.addEventListener("touchend",this.changeCropEnd),this.canChangeX=e,this.canChangeY=n,this.changeCropTypeX=i,this.changeCropTypeY=o,this.cropX="clientX"in t?t.clientX:t.touches[0].clientX,this.cropY="clientY"in t?t.clientY:t.touches[0].clientY,this.cropOldW=this.cropW,this.cropOldH=this.cropH,this.cropChangeX=this.cropOffsertX,this.cropChangeY=this.cropOffsertY,this.fixed&&this.canChangeX&&this.canChangeY&&(this.canChangeY=0),this.$emit("change-crop-size",{width:this.cropW,height:this.cropH})},changeCropNow:function(t){var e=this;t.preventDefault();var n="clientX"in t?t.clientX:t.touches?t.touches[0].clientX:0,i="clientY"in t?t.clientY:t.touches?t.touches[0].clientY:0,o=this.w,a=this.h,r=0,s=0;if(this.centerBox){var l=this.getImgAxis(),c=l.x2,u=l.y2;r=l.x1>0?l.x1:0,s=l.y1>0?l.y1:0,o>c&&(o=c),a>u&&(a=u)}this.$nextTick((function(){var t=n-e.cropX,l=i-e.cropY;if(e.canChangeX&&(1===e.changeCropTypeX?e.cropOldW-t>0?(e.cropW=o-e.cropChangeX-t<=o-r?e.cropOldW-t:e.cropOldW+e.cropChangeX-r,e.cropOffsertX=o-e.cropChangeX-t<=o-r?e.cropChangeX+t:r):(e.cropW=Math.abs(t)+e.cropChangeX<=o?Math.abs(t)-e.cropOldW:o-e.cropOldW-e.cropChangeX,e.cropOffsertX=e.cropChangeX+e.cropOldW):2===e.changeCropTypeX&&(e.cropOldW+t>0?(e.cropW=e.cropOldW+t+e.cropOffsertX<=o?e.cropOldW+t:o-e.cropOffsertX,e.cropOffsertX=e.cropChangeX):(e.cropW=o-e.cropChangeX+Math.abs(t+e.cropOldW)<=o-r?Math.abs(t+e.cropOldW):e.cropChangeX-r,e.cropOffsertX=o-e.cropChangeX+Math.abs(t+e.cropOldW)<=o-r?e.cropChangeX-Math.abs(t+e.cropOldW):r))),e.canChangeY&&(1===e.changeCropTypeY?e.cropOldH-l>0?(e.cropH=a-e.cropChangeY-l<=a-s?e.cropOldH-l:e.cropOldH+e.cropChangeY-s,e.cropOffsertY=a-e.cropChangeY-l<=a-s?e.cropChangeY+l:s):(e.cropH=Math.abs(l)+e.cropChangeY<=a?Math.abs(l)-e.cropOldH:a-e.cropOldH-e.cropChangeY,e.cropOffsertY=e.cropChangeY+e.cropOldH):2===e.changeCropTypeY&&(e.cropOldH+l>0?(e.cropH=e.cropOldH+l+e.cropOffsertY<=a?e.cropOldH+l:a-e.cropOffsertY,e.cropOffsertY=e.cropChangeY):(e.cropH=a-e.cropChangeY+Math.abs(l+e.cropOldH)<=a-s?Math.abs(l+e.cropOldH):e.cropChangeY-s,e.cropOffsertY=a-e.cropChangeY+Math.abs(l+e.cropOldH)<=a-s?e.cropChangeY-Math.abs(l+e.cropOldH):s))),e.canChangeX&&e.fixed){var c=e.cropW/e.fixedNumber[0]*e.fixedNumber[1];c+e.cropOffsertY>a?(e.cropH=a-e.cropOffsertY,e.cropW=e.cropH/e.fixedNumber[1]*e.fixedNumber[0]):e.cropH=c}if(e.canChangeY&&e.fixed){var u=e.cropH/e.fixedNumber[1]*e.fixedNumber[0];u+e.cropOffsertX>o?(e.cropW=o-e.cropOffsertX,e.cropH=e.cropW/e.fixedNumber[0]*e.fixedNumber[1]):e.cropW=u}e.$emit("crop-sizing",{cropW:e.cropW,cropH:e.cropH})}))},checkCropLimitSize:function(){this.cropW,this.cropH;var t=this.limitMinSize,e=new Array;return e=Array.isArray[t]?t:[t,t],[parseFloat(e[0]),parseFloat(e[1])]},changeCropEnd:function(t){window.removeEventListener("mousemove",this.changeCropNow),window.removeEventListener("mouseup",this.changeCropEnd),window.removeEventListener("touchmove",this.changeCropNow),window.removeEventListener("touchend",this.changeCropEnd)},endCrop:function(){0===this.cropW&&0===this.cropH&&(this.cropping=!1),window.removeEventListener("mousemove",this.createCrop),window.removeEventListener("mouseup",this.endCrop),window.removeEventListener("touchmove",this.createCrop),window.removeEventListener("touchend",this.endCrop)},startCrop:function(){this.crop=!0},stopCrop:function(){this.crop=!1},clearCrop:function(){this.cropping=!1,this.cropW=0,this.cropH=0},cropMove:function(t){if(t.preventDefault(),!this.canMoveBox)return this.crop=!1,this.startMove(t),!1;if(t.touches&&2===t.touches.length)return this.crop=!1,this.startMove(t),this.leaveCrop(),!1;window.addEventListener("mousemove",this.moveCrop),window.addEventListener("mouseup",this.leaveCrop),window.addEventListener("touchmove",this.moveCrop),window.addEventListener("touchend",this.leaveCrop);var e,n,i="clientX"in t?t.clientX:t.touches[0].clientX,o="clientY"in t?t.clientY:t.touches[0].clientY;e=i-this.cropOffsertX,n=o-this.cropOffsertY,this.cropX=e,this.cropY=n,this.$emit("cropMoving",{moving:!0,axis:this.getCropAxis()}),this.$emit("crop-moving",{moving:!0,axis:this.getCropAxis()})},moveCrop:function(t,e){var n=this,i=0,o=0;t&&(t.preventDefault(),i="clientX"in t?t.clientX:t.touches[0].clientX,o="clientY"in t?t.clientY:t.touches[0].clientY),this.$nextTick((function(){var t,a,r=i-n.cropX,s=o-n.cropY;if(e&&(r=n.cropOffsertX,s=n.cropOffsertY),t=r<=0?0:r+n.cropW>n.w?n.w-n.cropW:r,a=s<=0?0:s+n.cropH>n.h?n.h-n.cropH:s,n.centerBox){var l=n.getImgAxis();t<=l.x1&&(t=l.x1),t+n.cropW>l.x2&&(t=l.x2-n.cropW),a<=l.y1&&(a=l.y1),a+n.cropH>l.y2&&(a=l.y2-n.cropH)}n.cropOffsertX=t,n.cropOffsertY=a,n.$emit("cropMoving",{moving:!0,axis:n.getCropAxis()}),n.$emit("crop-moving",{moving:!0,axis:n.getCropAxis()})}))},getImgAxis:function(t,e,n){t=t||this.x,e=e||this.y,n=n||this.scale;var i={x1:0,x2:0,y1:0,y2:0},o=this.trueWidth*n,a=this.trueHeight*n;switch(this.rotate){case 0:i.x1=t+this.trueWidth*(1-n)/2,i.x2=i.x1+this.trueWidth*n,i.y1=e+this.trueHeight*(1-n)/2,i.y2=i.y1+this.trueHeight*n;break;case 1:case-1:case 3:case-3:i.x1=t+this.trueWidth*(1-n)/2+(o-a)/2,i.x2=i.x1+this.trueHeight*n,i.y1=e+this.trueHeight*(1-n)/2+(a-o)/2,i.y2=i.y1+this.trueWidth*n;break;default:i.x1=t+this.trueWidth*(1-n)/2,i.x2=i.x1+this.trueWidth*n,i.y1=e+this.trueHeight*(1-n)/2,i.y2=i.y1+this.trueHeight*n}return i},getCropAxis:function(){var t={x1:0,x2:0,y1:0,y2:0};return t.x1=this.cropOffsertX,t.x2=t.x1+this.cropW,t.y1=this.cropOffsertY,t.y2=t.y1+this.cropH,t},leaveCrop:function(t){window.removeEventListener("mousemove",this.moveCrop),window.removeEventListener("mouseup",this.leaveCrop),window.removeEventListener("touchmove",this.moveCrop),window.removeEventListener("touchend",this.leaveCrop),this.$emit("cropMoving",{moving:!1,axis:this.getCropAxis()}),this.$emit("crop-moving",{moving:!1,axis:this.getCropAxis()})},getCropChecked:function(t){var e=this,n=document.createElement("canvas"),i=new Image,o=this.rotate,a=this.trueWidth,r=this.trueHeight,s=this.cropOffsertX,l=this.cropOffsertY;function c(t,e){n.width=Math.round(t),n.height=Math.round(e)}i.onload=function(){if(0!==e.cropW){var u=n.getContext("2d"),d=1;e.high&!e.full&&(d=window.devicePixelRatio),1!==e.enlarge&!e.full&&(d=Math.abs(Number(e.enlarge)));var p=e.cropW*d,h=e.cropH*d,f=a*e.scale*d,m=r*e.scale*d,v=(e.x-s+e.trueWidth*(1-e.scale)/2)*d,b=(e.y-l+e.trueHeight*(1-e.scale)/2)*d;switch(c(p,h),u.save(),o){case 0:e.full?(c(p/e.scale,h/e.scale),u.drawImage(i,v/e.scale,b/e.scale,f/e.scale,m/e.scale)):u.drawImage(i,v,b,f,m);break;case 1:case-3:e.full?(c(p/e.scale,h/e.scale),v=v/e.scale+(f/e.scale-m/e.scale)/2,b=b/e.scale+(m/e.scale-f/e.scale)/2,u.rotate(90*o*Math.PI/180),u.drawImage(i,b,-v-m/e.scale,f/e.scale,m/e.scale)):(v+=(f-m)/2,b+=(m-f)/2,u.rotate(90*o*Math.PI/180),u.drawImage(i,b,-v-m,f,m));break;case 2:case-2:e.full?(c(p/e.scale,h/e.scale),u.rotate(90*o*Math.PI/180),v/=e.scale,b/=e.scale,u.drawImage(i,-v-f/e.scale,-b-m/e.scale,f/e.scale,m/e.scale)):(u.rotate(90*o*Math.PI/180),u.drawImage(i,-v-f,-b-m,f,m));break;case 3:case-1:e.full?(c(p/e.scale,h/e.scale),v=v/e.scale+(f/e.scale-m/e.scale)/2,b=b/e.scale+(m/e.scale-f/e.scale)/2,u.rotate(90*o*Math.PI/180),u.drawImage(i,-b-f/e.scale,v,f/e.scale,m/e.scale)):(v+=(f-m)/2,b+=(m-f)/2,u.rotate(90*o*Math.PI/180),u.drawImage(i,-b-f,v,f,m));break;default:e.full?(c(p/e.scale,h/e.scale),u.drawImage(i,v/e.scale,b/e.scale,f/e.scale,m/e.scale)):u.drawImage(i,v,b,f,m)}u.restore()}else{var g=a*e.scale,y=r*e.scale,_=n.getContext("2d");switch(_.save(),o){case 0:c(g,y),_.drawImage(i,0,0,g,y);break;case 1:case-3:c(y,g),_.rotate(90*o*Math.PI/180),_.drawImage(i,0,-y,g,y);break;case 2:case-2:c(g,y),_.rotate(90*o*Math.PI/180),_.drawImage(i,-g,-y,g,y);break;case 3:case-1:c(y,g),_.rotate(90*o*Math.PI/180),_.drawImage(i,-g,0,g,y);break;default:c(g,y),_.drawImage(i,0,0,g,y)}_.restore()}t(n)},"data"!==this.img.substr(0,4)&&(i.crossOrigin="Anonymous"),i.src=this.imgs},getCropData:function(t){var e=this;this.getCropChecked((function(n){t(n.toDataURL("image/"+e.outputType,e.outputSize))}))},getCropBlob:function(t){var e=this;this.getCropChecked((function(n){n.toBlob((function(e){return t(e)}),"image/"+e.outputType,e.outputSize)}))},showPreview:function(){var t=this;if(!this.isCanShow)return!1;this.isCanShow=!1,setTimeout((function(){t.isCanShow=!0}),16);var e=this.cropW,n=this.cropH,i=this.scale,o={};o.div={width:"".concat(e,"px"),height:"".concat(n,"px")};var a=(this.x-this.cropOffsertX)/i,r=(this.y-this.cropOffsertY)/i;o.w=e,o.h=n,o.url=this.imgs,o.img={width:"".concat(this.trueWidth,"px"),height:"".concat(this.trueHeight,"px"),transform:"scale(".concat(i,")translate3d(").concat(a,"px, ").concat(r,"px, ").concat(0,"px)rotateZ(").concat(90*this.rotate,"deg)")},o.html='\n      <div class="show-preview" style="width: '.concat(o.w,"px; height: ").concat(o.h,'px,; overflow: hidden">\n        <div style="width: ').concat(e,"px; height: ").concat(n,'px">\n          <img src=').concat(o.url,' style="width: ').concat(this.trueWidth,"px; height: ").concat(this.trueHeight,"px; transform:\n          scale(").concat(i,")translate3d(").concat(a,"px, ").concat(r,"px, ").concat(0,"px)rotateZ(").concat(90*this.rotate,'deg)">\n        </div>\n      </div>'),this.$emit("realTime",o),this.$emit("real-time",o)},reload:function(){var t=this,e=new Image;e.onload=function(){t.w=parseFloat(window.getComputedStyle(t.$refs.cropper).width),t.h=parseFloat(window.getComputedStyle(t.$refs.cropper).height),t.trueWidth=e.width,t.trueHeight=e.height,t.original?t.scale=1:t.scale=t.checkedMode(),t.$nextTick((function(){t.x=-(t.trueWidth-t.trueWidth*t.scale)/2+(t.w-t.trueWidth*t.scale)/2,t.y=-(t.trueHeight-t.trueHeight*t.scale)/2+(t.h-t.trueHeight*t.scale)/2,t.loading=!1,t.autoCrop&&t.goAutoCrop(),t.$emit("img-load","success"),t.$emit("imgLoad","success"),setTimeout((function(){t.showPreview()}),20)}))},e.onerror=function(){t.$emit("imgLoad","error"),t.$emit("img-load","error")},e.src=this.imgs},checkedMode:function(){var t=1,e=(this.trueWidth,this.trueHeight),n=this.mode.split(" ");switch(n[0]){case"contain":this.trueWidth>this.w&&(t=this.w/this.trueWidth),this.trueHeight*t>this.h&&(t=this.h/this.trueHeight);break;case"cover":(e*=t=this.w/this.trueWidth)<this.h&&(t=(e=this.h)/this.trueHeight);break;default:try{var i=n[0];if(-1!==i.search("px")){i=i.replace("px","");var o=parseFloat(i)/this.trueWidth,a=1,r=n[1];-1!==r.search("px")&&(r=r.replace("px",""),a=(e=parseFloat(r))/this.trueHeight),t=Math.min(o,a)}if(-1!==i.search("%")&&(i=i.replace("%",""),t=parseFloat(i)/100*this.w/this.trueWidth),2===n.length&&"auto"===i){var s=n[1];-1!==s.search("px")&&(s=s.replace("px",""),t=(e=parseFloat(s))/this.trueHeight),-1!==s.search("%")&&(s=s.replace("%",""),t=(e=parseFloat(s)/100*this.h)/this.trueHeight)}}catch(e){t=1}}return t},goAutoCrop:function(t,e){if(""!==this.imgs&&null!==this.imgs){this.clearCrop(),this.cropping=!0;var n=this.w,i=this.h;if(this.centerBox){var o=Math.abs(this.rotate)%2>0,a=(o?this.trueHeight:this.trueWidth)*this.scale,r=(o?this.trueWidth:this.trueHeight)*this.scale;n=a<n?a:n,i=r<i?r:i}var s=t||parseFloat(this.autoCropWidth),l=e||parseFloat(this.autoCropHeight);0!==s&&0!==l||(s=.8*n,l=.8*i),s=s>n?n:s,l=l>i?i:l,this.fixed&&(l=s/this.fixedNumber[0]*this.fixedNumber[1]),l>this.h&&(s=(l=this.h)/this.fixedNumber[1]*this.fixedNumber[0]),this.changeCrop(s,l)}},changeCrop:function(t,e){var n=this;if(this.centerBox){var i=this.getImgAxis();t>i.x2-i.x1&&(e=(t=i.x2-i.x1)/this.fixedNumber[0]*this.fixedNumber[1]),e>i.y2-i.y1&&(t=(e=i.y2-i.y1)/this.fixedNumber[1]*this.fixedNumber[0])}this.cropW=t,this.cropH=e,this.checkCropLimitSize(),this.$nextTick((function(){n.cropOffsertX=(n.w-n.cropW)/2,n.cropOffsertY=(n.h-n.cropH)/2,n.centerBox&&n.moveCrop(null,!0)}))},refresh:function(){var t=this;this.img,this.imgs="",this.scale=1,this.crop=!1,this.rotate=0,this.w=0,this.h=0,this.trueWidth=0,this.trueHeight=0,this.clearCrop(),this.$nextTick((function(){t.checkedImg()}))},rotateLeft:function(){this.rotate=this.rotate<=-3?0:this.rotate-1},rotateRight:function(){this.rotate=this.rotate>=3?0:this.rotate+1},rotateClear:function(){this.rotate=0},checkoutImgAxis:function(t,e,n){t=t||this.x,e=e||this.y,n=n||this.scale;var i=!0;if(this.centerBox){var o=this.getImgAxis(t,e,n),a=this.getCropAxis();o.x1>=a.x1&&(i=!1),o.x2<=a.x2&&(i=!1),o.y1>=a.y1&&(i=!1),o.y2<=a.y2&&(i=!1)}return i}},mounted:function(){this.support="onwheel"in document.createElement("div")?"wheel":void 0!==document.onmousewheel?"mousewheel":"DOMMouseScroll";var t=this,e=navigator.userAgent;this.isIOS=!!e.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/),HTMLCanvasElement.prototype.toBlob||Object.defineProperty(HTMLCanvasElement.prototype,"toBlob",{value:function(e,n,i){for(var o=atob(this.toDataURL(n,i).split(",")[1]),a=o.length,r=new Uint8Array(a),s=0;s<a;s++)r[s]=o.charCodeAt(s);e(new Blob([r],{type:t.type||"image/png"}))}}),this.showPreview(),this.checkedImg()},destroyed:function(){window.removeEventListener("mousemove",this.moveCrop),window.removeEventListener("mouseup",this.leaveCrop),window.removeEventListener("touchmove",this.moveCrop),window.removeEventListener("touchend",this.leaveCrop),this.cancelScale()}};n(1);var s=function(t,e,n,i,o,a,r,s){var l,c="function"==typeof t?t.options:t;if(e&&(c.render=e,c.staticRenderFns=[],c._compiled=!0),c._scopeId="data-v-"+a,l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(t,e){return l.call(e),u(t,e)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:t,options:c}}(r,i,0,0,0,"6dae58fd");s.options.__file="src/vue-cropper.vue";var l=s.exports;n.d(e,"VueCropper",(function(){return l}));var c=function(t){t.component("VueCropper",l)};"undefined"!=typeof window&&window.Vue&&c(window.Vue),e.default={version:"0.5.8",install:c,VueCropper:l,vueCropper:l}}])},function(t,e,n){"use strict";var i={inject:["formSafe"],mixins:[n(4).a],computed:{menuSpan:function(){return this.formSafe.parentOption.menuSpan||24},styleName:function(){return 24!==this.menuSpan?{padding:0}:{}}}},o=n(0),a=Object(o.a)(i,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return t.vaildData(t.formSafe.parentOption.menuBtn,!0)?n("el-col",{class:[t.formSafe.b("menu",[t.formSafe.menuPosition]),"no-print"],style:t.styleName,attrs:{span:t.menuSpan,md:t.menuSpan}},[n("el-form-item",{attrs:{"label-width":"0px"}},[t.formSafe.isMock?n("el-button",{attrs:{type:"primary",size:t.formSafe.controlSize,icon:"el-icon-edit-outline",loading:t.formSafe.allDisabled},on:{click:t.formSafe.handleMock}},[t._v(t._s(t.vaildData(t.formSafe.parentOption.mockText,t.t("form.mockBtn"))))]):t._e(),t._v(" "),t.formSafe.isPrint?n("el-button",{attrs:{type:"primary",size:t.formSafe.controlSize,icon:"el-icon-printer",loading:t.formSafe.allDisabled},on:{click:t.formSafe.handlePrint}},[t._v(t._s(t.vaildData(t.formSafe.parentOption.printText,t.t("form.printBtn"))))]):t._e(),t._v(" "),t.vaildData(t.formSafe.parentOption.submitBtn,!0)?n("el-button",{attrs:{type:"primary",size:t.formSafe.controlSize,icon:t.formSafe.parentOption.submitIcon||"el-icon-check",loading:t.formSafe.allDisabled},on:{click:t.formSafe.submit}},[t._v(t._s(t.vaildData(t.formSafe.parentOption.submitText,t.t("form.submitBtn"))))]):t._e(),t._v(" "),t.vaildData(t.formSafe.parentOption.emptyBtn,!0)?n("el-button",{attrs:{icon:t.formSafe.parentOption.emptyIcon||"el-icon-delete",size:t.formSafe.controlSize,loading:t.formSafe.allDisabled},on:{click:t.formSafe.resetForm}},[t._v(t._s(t.vaildData(t.formSafe.parentOption.emptyText,t.t("form.emptyBtn"))))]):t._e(),t._v(" "),t._t("menuForm",null,{disabled:t.formSafe.allDisabled,size:t.formSafe.controlSize})],2)],1):t._e()}),[],!1,null,null,null);e.a=a.exports},function(t,e,n){t.exports=n(25)},function(t,e,n){"use strict";n.r(e);var i=n(1);function o(t){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}Object.prototype.hasOwnProperty;var a,r=Object(i.a)({name:"affix",props:{id:String,offsetTop:{type:Number,default:0},offsetBottom:{type:Number}},data:function(){return{affix:!1,styles:{},slot:!1,slotStyle:{}}},computed:{parent:function(){return this.validatenull(this.id)?window:(t=this.id,("object"===("undefined"==typeof HTMLElement?"undefined":o(HTMLElement))?t instanceof HTMLElement:t&&"object"===o(t)&&1===t.nodeType&&"string"==typeof t.nodeName)?this.id:window.document.getElementById(this.id));var t},offsetType:function(){var t="top";return this.offsetBottom>=0&&(t="bottom"),t}},mounted:function(){this.parent.addEventListener("scroll",this.handleScroll,!1),this.parent.addEventListener("resize",this.handleScroll,!1)},beforeDestroy:function(){this.parent.removeEventListener("scroll",this.handleScroll,!1),this.parent.removeEventListener("resize",this.handleScroll,!1)},methods:{getScroll:function(t,e){var n=e?"scrollTop":"scrollLeft",i=t[e?"pageYOffset":"pageXOffset"];return"number"!=typeof i&&(i=window.document.documentElement[n]),i},getOffset:function(t){var e=t.getBoundingClientRect(),n=this.getScroll(this.parent,!0),i=this.getScroll(this.parent),o=window.document.body,a=o.clientTop||0,r=o.clientLeft||0;return{top:e.top+n-a,left:e.left+i-r}},handleScroll:function(){var t=this.affix,e=this.getScroll(this.parent,!0),n=this.getOffset(this.$el),i=this.parent.innerHeight,o=this.$el.getElementsByTagName("div")[0].offsetHeight;n.top-this.offsetTop<e&&"top"==this.offsetType&&!t?(this.affix=!0,this.slotStyle={width:this.$refs.point.clientWidth+"px",height:this.$refs.point.clientHeight+"px"},this.slot=!0,this.styles={top:"".concat(this.offsetTop,"px"),left:"".concat(n.left,"px"),width:"".concat(this.$el.offsetWidth,"px")},this.$emit("on-change",!0)):n.top-this.offsetTop>e&&"top"==this.offsetType&&t&&(this.slot=!1,this.slotStyle={},this.affix=!1,this.styles=null,this.$emit("on-change",!1)),n.top+this.offsetBottom+o>e+i&&"bottom"==this.offsetType&&!t?(this.affix=!0,this.styles={bottom:"".concat(this.offsetBottom,"px"),left:"".concat(n.left,"px"),width:"".concat(this.$el.offsetWidth,"px")},this.$emit("on-change",!0)):n.top+this.offsetBottom+o<e+i&&"bottom"==this.offsetType&&t&&(this.affix=!1,this.styles=null,this.$emit("on-change",!1))}}}),s=n(0),l=Object(s.a)(r,(function(){var t=this.$createElement,e=this._self._c||t;return e("div",[e("div",{ref:"point",class:{"avue-affix":this.affix},style:this.styles},[this._t("default")],2),this._v(" "),e("div",{directives:[{name:"show",rawName:"v-show",value:this.slot,expression:"slot"}],style:this.slotStyle})])}),[],!1,null,null,null).exports,c=n(18),u=n.n(c),d=Object(i.a)({name:"count-up",props:{animation:{type:Boolean,default:!0},start:{type:Number,required:!1,default:0},end:{required:!0},decimals:{type:Number,required:!1,default:0},duration:{type:Number,required:!1,default:2},options:{type:Object,required:!1,default:function(){return{}}},callback:{type:Function,required:!1,default:function(){}}},data:function(){return{c:null}},watch:{decimals:function(){this.c&&this.c.update&&this.c.update(this.end)},end:function(t){this.c&&this.c.update&&this.c.update(t)}},mounted:function(){this.animation&&this.init()},methods:{init:function(){var t=this;this.c||(this.c=new u.a(this.$el,this.start,this.end,this.decimals,this.duration,this.options),this.c.start((function(){t.callback(t.c)})))},destroy:function(){this.c=null}},beforeDestroy:function(){this.destroy()},start:function(t){var e=this;this.c&&this.c.start&&this.c.start((function(){t&&t(e.c)}))},pauseResume:function(){this.c&&this.c.pauseResume&&this.c.pauseResume()},reset:function(){this.c&&this.c.reset&&this.c.reset()},update:function(t){this.c&&this.c.update&&this.c.update(t)}}),p=Object(s.a)(d,(function(){var t=this.$createElement;return(this._self._c||t)("span",[this._v(this._s(this.end))])}),[],!1,null,null,null).exports;function h(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var f=Object(i.a)({name:"avatar",props:(a={src:String,shape:{validator:function(t){return["circle","square"].includes(t)},default:"circle"}},h(a,"shape",String),h(a,"size",{validator:function(t){return"number"==typeof t||["small","large","default"].includes(t)},default:"default"}),h(a,"icon",String),a),data:function(){return{scale:1}},updated:function(){var t=this;this.$nextTick((function(){t.setScale()}))},computed:{sizeChildrenStyle:function(){var t={},e=(this.$refs.avatarChildren,"scale(".concat(this.scale,") translateX(-50%)"));return t={msTransform:e,WebkitTransform:e,transform:e},"number"==typeof size&&(t.lineHeight="".concat(this.size,"px")),t},sizeCls:function(){var t;return h(t={},"".concat("avue-avatar","--").concat(this.shape),this.shape),h(t,"".concat("avue-avatar","--lg"),"large"===this.size),h(t,"".concat("avue-avatar","--sm"),"small"===this.size),t},sizeStyle:function(){return"number"==typeof this.size?{width:"".concat(this.size,"px"),height:"".concat(this.size,"px"),lineHeight:"".concat(this.size,"px"),fontSize:this.icon?"".concat(this.size/2,"px"):"18px"}:{}}},mounted:function(){var t=this;this.$nextTick((function(){t.setScale()}))},methods:{setScale:function(){var t=this.$refs.avatarChildren;if(t){var e=t.offsetWidth,n=this.$el.getBoundingClientRect().width;this.scale=n-8<e?(n-8)/e:1}}}}),m=Object(s.a)(f,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("span",{class:[t.b(),t.sizeCls,t.b("icon")],style:t.sizeStyle},[t.src?n("img",{class:t.b("images"),attrs:{src:t.src,alt:""}}):t.icon?n("i",{class:t.icon}):n("span",{ref:"avatarChildren",class:t.b("string"),style:t.sizeChildrenStyle},[t._t("default")],2)])}),[],!1,null,null,null).exports,v={title:"title",meta:"meta",lead:"lead",body:"body"},b=Object(i.a)({name:"article",props:{data:{type:Object,default:function(){return{}}},props:{type:Object,default:function(){return v}}},computed:{titleKey:function(){return this.props.title||v.title},metaKey:function(){return this.props.meta||v.meta},leadKey:function(){return this.props.lead||v.lead},bodyKey:function(){return this.props.body||v.body},title:function(){return this.data[this.titleKey]},meta:function(){return this.data[this.metaKey]},lead:function(){return this.data[this.leadKey]},body:function(){return this.data[this.bodyKey]}},mounted:function(){}}),g=Object(s.a)(b,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:t.b()},[n("div",{class:t.b("header")},[t.title?n("div",{class:t.b("title"),domProps:{textContent:t._s(t.title)}}):t._e(),t._v(" "),t.meta?n("small",{class:t.b("meta"),domProps:{textContent:t._s(t.meta)}}):t._e()]),t._v(" "),t.lead?n("div",{class:t.b("lead"),domProps:{textContent:t._s(t.lead)}}):t._e(),t._v(" "),t.body?n("div",{class:t.b("body"),domProps:{innerHTML:t._s(t.body)}}):t._e()])}),[],!1,null,null,null).exports,y=Object(i.a)({name:"carousel",data:function(){return{}},props:{option:{type:Object,default:function(){}}},computed:{data:function(){return this.option.data||[]}},created:function(){},mounted:function(){},watch:{},methods:{}}),_=Object(s.a)(y,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:[t.b(),{"avue-carousel--fullscreen":t.option.fullscreen}]},[n("el-carousel",{attrs:{type:t.option.type,height:t.option.height+"px",autoplay:t.option.autoplay,interval:t.option.interval,"indicator-position":"outside"}},t._l(t.data,(function(e,i){return n("el-carousel-item",{key:i},[n("div",{class:t.b("item")},[n("a",{attrs:{href:e.href?e.href:"javascript:void(0);",target:e.target}},[n("div",{class:t.b("img"),style:{backgroundImage:"url("+e.src+")"}}),t._v(" "),e.title?n("div",{class:t.b("title")},[t._v(t._s(e.title))]):t._e()])])])})),1)],1)}),[],!1,null,null,null).exports,x=n(6),w=function(){function t(t,e){var n=e.value;t.style.display=!1===n?"none":""}return{bind:function(e,n){t(e,n)},update:function(e,n){t(e,n)}}}(),O=n(13),C={menuWidth:220,menuFixed:"right",menuXsWidth:100,menuAlign:"center",menuHeaderAlign:"center",headerAlign:"left",cancelBtnIcon:"el-icon-circle-close",viewBtnIcon:"el-icon-view",editBtnIcon:"el-icon-edit",copyBtnIcon:"el-icon-document-add",addBtnIcon:"el-icon-plus",printBtnIcon:"el-icon-printer",excelBtnIcon:"el-icon-download",delBtnIcon:"el-icon-delete",searchBtnIcon:"el-icon-search",emptyBtnIcon:"el-icon-delete",saveBtnIcon:"el-icon-circle-plus-outline",updateBtnIcon:"el-icon-circle-check",columnBtnIcon:"el-icon-s-operation",filterBtnIcon:"el-icon-tickets",refreshBtnIcon:"el-icon-refresh",viewBtn:!1,editBtn:!0,copyBtn:!1,cancelBtn:!0,addBtn:!0,addRowBtn:!1,printBtn:!1,excelBtn:!1,delBtn:!0,cellBtn:!1,dateBtn:!1,updateBtn:!0,saveBtn:!0,refreshBtn:!0,columnBtn:!0,filterBtn:!1,queryBtn:!0,menuBtn:!1,searchBtn:!0,clearBtn:!0,selectClearBtn:!0,searchShow:!0,tip:!0,dialogWidth:"60%",dialogDrag:!1,formFullscreen:!1,pageBackground:!0,simplePage:!1,page:!0,menu:!0,indexLabel:"#",indexWidth:50,indexFixed:"left",selectionWidth:50,selectionFixed:"left",expandWidth:60,expandFixed:"left",filterMultiple:!0,calcHeight:300,title:"琛ㄦ牸鏍囬",width:"100%",searchGutter:20,searchLabelWidth:80,searchSpan:6,dropRowClass:".el-table__body-wrapper > table > tbody",dropColClass:".el-table__header-wrapper tr",ghostClass:"avue-crud__ghost"},k=Object(i.a)({name:"crud",inject:["crud"],props:{page:{type:Object,default:function(){return{}}}},data:function(){return{config:C,defaultPage:{total:0,pagerCount:7,currentPage:1,pageSize:10,pageSizes:[10,20,30,40,50,100],layout:"total, sizes, prev, pager, next, jumper",background:!0}}},created:function(){this.pageInit(),this.crud.$emit("on-load",this.defaultPage)},watch:{page:{handler:function(){this.pageInit()},deep:!0},pageFlag:function(){this.crud.getTableHeight()},"defaultPage.total":function(t){this.defaultPage.total===(this.defaultPage.currentPage-1)*this.defaultPage.pageSize&&0!=this.defaultPage.total&&(this.defaultPage.currentPage=this.defaultPage.currentPage-1,this.crud.$emit("on-load",this.defaultPage),this.crud.$emit("current-change",this.defaultPage.currentPage),this.updateValue())}},computed:{pageFlag:function(){return 0!=this.defaultPage.total}},methods:{pageInit:function(){this.defaultPage=Object.assign(this.defaultPage,this.page,{total:Number(this.page.total||this.defaultPage.total),pagerCount:Number(this.page.pagerCount||this.defaultPage.pagerCount),currentPage:Number(this.page.currentPage||this.defaultPage.currentPage),pageSize:Number(this.page.pageSize||this.defaultPage.pageSize)}),this.updateValue()},updateValue:function(){this.crud.$emit("update:page",this.defaultPage)},nextClick:function(t){this.crud.$emit("next-click",t)},prevClick:function(t){this.crud.$emit("prev-click",t)},sizeChange:function(t){this.defaultPage.currentPage=1,this.defaultPage.pageSize=t,this.updateValue(),this.crud.$emit("on-load",this.defaultPage),this.crud.$emit("size-change",t)},currentChange:function(t){this.updateValue(),this.crud.$emit("on-load",this.defaultPage),this.crud.$emit("current-change",t)}}}),S=Object(s.a)(k,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return t.pageFlag&&t.vaildData(t.crud.tableOption.page,!0)?n("el-card",{class:t.b("pagination"),attrs:{shadow:t.crud.isCard}},[t._t("page"),t._v(" "),n("el-pagination",{attrs:{small:t.crud.isMobile,disabled:t.defaultPage.disabled,"hide-on-single-page":t.vaildData(t.crud.tableOption.simplePage,t.config.simplePage),"pager-count":t.defaultPage.pagerCount,"current-page":t.defaultPage.currentPage,background:t.vaildData(t.defaultPage.background,t.config.pageBackground),"page-size":t.defaultPage.pageSize,"page-sizes":t.defaultPage.pageSizes,layout:t.defaultPage.layout,total:t.defaultPage.total},on:{"update:currentPage":function(e){return t.$set(t.defaultPage,"currentPage",e)},"update:current-page":function(e){return t.$set(t.defaultPage,"currentPage",e)},"size-change":t.sizeChange,"prev-click":t.prevClick,"next-click":t.nextClick,"current-change":t.currentChange}})],2):t._e()}),[],!1,null,null,null).exports,E=n(11),j=n(4),$=n(7),D=n(2),A=Object(i.a)({name:"crud__search",inject:["crud"],mixins:[j.a,E.a],data:function(){return{show:!1,searchIndex:2,searchShow:!0,searchForm:{}}},props:{search:Object},watch:{"crud.propOption":{handler:function(){this.dataFormat()},deep:!0},show:function(){this.crud.getTableHeight()},searchShow:function(){this.crud.getTableHeight()},search:{handler:function(){this.searchForm=Object.assign(this.searchForm,this.search)},immediate:!0,deep:!0}},created:function(){this.initFun(),this.dataFormat()},computed:{option:function(){var t=this,e=this.crud.option;this.searchIndex=e.searchIndex||2;var n,i;return n=e,(i=t.deepClone(n)).column=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],i=[],o=0;return(n=n.sort((function(t,e){return(e.searchOrder||0)-(t.searchOrder||0)}))).forEach((function(n){if(n.search){var a=o<t.searchIndex,r={};Object.keys(n).forEach((function(t){if(t.includes("search")){var e=t.replace("search","");if(0==e.length)return;e=e.replace(e[0],e[0].toLowerCase()),r[e]=n[t]}})),n=Object.assign(n,r,{type:Object($.g)(n),detail:!1,dicFlag:!!n.cascader||t.vaildData(n.dicFlag,!1),span:n.searchSpan||e.searchSpan||C.searchSpan,control:n.searchControl,gutter:n.searchGutter||e.searchGutter||C.searchGutter,labelWidth:n.searchLabelWidth||e.searchLabelWidth||C.searchLabelWidth,labelPosition:n.searchLabelPosition||e.searchLabelPosition,size:n.searchSize||e.searchSize,value:n.searchValue,rules:n.searchRules,row:n.searchRow,bind:n.searchBin,disabled:n.searchDisabled,readonly:n.searchReadonly,display:!t.isSearchIcon||!!t.show||a}),i.push(n),o+=1}})),i}(t.deepClone(t.crud.propOption)),i=Object.assign(i,{rowKey:e.searchRowKey||"null",tabs:!1,group:!1,printBtn:!1,mockBtn:!1,filterDic:e.searchFilterDic,filterNull:e.searchFilterNull,filterParam:e.searchFilterParam,enter:e.searchEnter,size:e.searchSize,submitText:e.searchBtnText||t.t("crud.searchBtn"),submitBtn:t.vaildData(e.searchBtn,C.searchSubBtn),submitIcon:t.crud.getBtnIcon("searchBtn"),emptyText:e.emptyBtnText||t.t("crud.emptyBtn"),emptyBtn:t.vaildData(e.emptyBtn,C.emptyBtn),emptyIcon:t.crud.getBtnIcon("emptyBtn"),menuSpan:t.show||!t.isSearchIcon||e.searchMenuSpan<6?e.searchMenuSpan:6,menuPosition:e.searchMenuPosition||"center",dicFlag:!1,dicData:t.crud.DIC})},isSearchIcon:function(){return this.vaildData(this.crud.option.searchIcon,this.$AVUE.searchIcon)&&this.searchLen>this.searchIndex},searchLen:function(){var t=0;return this.crud.propOption.forEach((function(e){e.search&&t++})),t},searchFlag:function(){return!!this.crud.$scopedSlots.search||0!==this.searchLen}},methods:{initFun:function(){var t=this;["searchReset","searchChange"].forEach((function(e){return t.crud[e]=t[e]}))},getSlotName:function(t){return t.replace("Search","")},handleChange:function(){this.crud.$emit("update:search",this.searchForm)},searchChange:function(t,e){this.crud.$emit("search-change",Object(D.i)(t),e)},resetChange:function(){this.crud.$emit("search-reset",this.searchForm)},searchReset:function(){this.$refs.form.resetForm()},handleSearchShow:function(){this.searchShow=!this.searchShow},dataFormat:function(){var t=this.crud.option;this.searchShow=this.vaildData(t.searchShow,C.searchShow)}}}),T=Object(s.a)(A,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("el-card",{directives:[{name:"show",rawName:"v-show",value:t.searchShow&&t.searchFlag,expression:"searchShow && searchFlag"}],class:t.b(),attrs:{shadow:t.crud.isCard}},[t._t("search",null,{row:t.searchForm,search:t.searchForm,size:t.crud.controlSize}),t._v(" "),t.searchShow?n("avue-form",{ref:"form",attrs:{option:t.option},on:{submit:t.searchChange,change:t.handleChange,"reset-change":t.resetChange},scopedSlots:t._u([{key:"menuForm",fn:function(e){return[t._t("searchMenu",null,null,Object.assign(e,{search:t.searchForm,row:t.searchForm})),t._v(" "),t.isSearchIcon?[!1===t.show?n("el-button",{attrs:{type:"text",icon:"el-icon-arrow-down"},on:{click:function(e){t.show=!0}}},[t._v(t._s(t.t("crud.open")))]):t._e(),t._v(" "),!0===t.show?n("el-button",{attrs:{type:"text",icon:"el-icon-arrow-up"},on:{click:function(e){t.show=!1}}},[t._v(t._s(t.t("crud.shrink")))]):t._e()]:t._e()]}},t._l(t.crud.searchSlot,(function(e){return{key:t.getSlotName(e),fn:function(n){return[t._t(e,null,null,Object.assign(n,{search:t.searchForm,row:t.searchForm}))]}}}))],null,!0),model:{value:t.searchForm,callback:function(e){t.searchForm=e},expression:"searchForm"}}):t._e()],2)}),[],!1,null,null,null).exports,P=n(17),B=n(3),M=n(9),L=n(14),I={name:"icon-temp",props:{small:Boolean,text:{type:String,default:""}}},N=Object(s.a)(I,(function(){var t=this.$createElement,e=this._self._c||t;return e("span",{staticClass:"avue-icon",class:{"avue-icon--small":this.small}},[this.text.includes("#")?e("svg",{attrs:{"aria-hidden":"true"}},[e("use",{attrs:{"xlink:href":this.text}})]):e("i",{class:this.text})])}),[],!1,null,null,null).exports;function z(t){return(z="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function F(t){return function(t){if(Array.isArray(t))return H(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(!t)return;if("string"==typeof t)return H(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return H(t,e)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function H(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}var K={},R={name:"column-slot",inject:["dynamic","crud"],components:{formTemp:L.a,iconTemp:N},props:{column:Object,columnOption:Array},created:function(){var t=this,e=["getColumnProp","handleFiltersMethod","handleFilters"];Object.keys(this.dynamic).forEach((function(n){e.includes(n)&&(t[n]=t.dynamic[n])}))},methods:{getIsVideo:function(t){return B.m.video.test(t)?"video":"img"},vaildLabel:function(t,e,n){if(t.rules&&e.$cellEdit)return n},columnChange:function(t,e,n){var i="".concat(n,"-").concat(e.prop);K[i]||(this.handleChange(e,t),"function"==typeof e.change&&1==e.cell&&e.change({row:t,column:e,index:n,value:t[e.prop]})),K[i]=!0,this.$nextTick((function(){return K[i]=!1}))},handleChange:function(t,e){var n=this;t.cascader&&this.$nextTick((function(){F(n.crud.propOption);var i=t.cascader;i.join(",");i.forEach((function(o){var a=o,r=e[t.prop],s=e.$index,l=n.findObject(n.columnOption,a);n.validatenull(l)||(n.validatenull(n.crud.cascaderDIC[s])&&n.$set(n.crud.cascaderDIC,s,{}),n.crud.formIndexList.includes(s)&&i.forEach((function(t){n.$set(n.crud.cascaderDIC[s],t.prop,[]),i.forEach((function(t){return e[t]=""}))})),n.validatenull(i)||n.validatenull(r)||n.validatenull(l)||Object(M.d)({column:l,value:r,form:e}).then((function(t){n.crud.formIndexList.includes(s)||n.crud.formIndexList.push(s);var i=t||[];n.$set(n.crud.cascaderDIC[s],a,i),n.validatenull(i[l.cascaderIndex])||n.validatenull(i)||n.validatenull(l.cascaderIndex)||(e[a]=i[l.cascaderIndex][(l.props||{}).value||B.e.value])})))}))}))},openImg:function(t,e){t=t.map((function(t){return{thumbUrl:t,url:t}})),this.$ImagePreview(t,e)},corArray:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:B.g;return this.validatenull(t)?[]:Array.isArray(t)?t:t.split(e)},handleDetail:function(t,e){var n=t[e.prop],i=e.parentProp?(this.crud.cascaderDIC[t.$index]||{})[e.prop]:this.crud.DIC[e.prop];return n=Object(P.a)(t,e,this.crud.tableOption,i),this.validatenull(i)||!0===this.crud.tableOption.filterDic||(t["$"+e.prop]=n),n},getImgList:function(t,e){var n=(e.propsHttp||{}).home||"",i=(e.props||{}).value||B.e.value,o=this.handleDetail(t,e);if(this.validatenull(o))return[];if("picture-img"==e.listType)return[n+o];var a=this.corArray(this.deepClone(o),e.separator);return a.forEach((function(t,e){a[e]=n+("object"===z(t)?t[i]:t)})),a}}},W=Object(s.a)(R,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return t.getColumnProp(t.column,"hide")?n("el-table-column",{key:t.column.prop,attrs:{prop:t.column.prop,label:t.column.label,"column-key":t.column.prop,"filter-placement":"bottom-end",filters:t.getColumnProp(t.column,"filters"),"filter-method":t.getColumnProp(t.column,"filterMethod")?t.handleFiltersMethod:void 0,"filter-multiple":t.vaildData(t.column.filterMultiple,!0),"show-overflow-tooltip":t.column.overHidden,"min-width":t.column.minWidth,sortable:t.getColumnProp(t.column,"sortable"),"render-header":t.column.renderHeader,align:t.column.align||t.crud.tableOption.align,"header-align":t.column.headerAlign||t.crud.tableOption.headerAlign,width:t.getColumnProp(t.column,"width"),fixed:t.getColumnProp(t.column,"fixed")},scopedSlots:t._u([{key:"header",fn:function(e){var i=e.$index;return[t.crud.getSlotName(t.column,"H",t.crud.$scopedSlots)?t._t(t.crud.getSlotName(t.column,"H"),null,null,{column:t.column,$index:i}):n("span",[t._v(t._s(t.column.label))])]}},{key:"default",fn:function(e){var i=e.row,o=e.$index;return[i.$cellEdit&&t.column.cell?n("el-form-item",{attrs:{prop:t.crud.isTree?"":"list."+o+"."+t.column.prop,label:t.vaildLabel(t.column,i," "),"label-width":t.vaildLabel(t.column,i,"1px"),rules:t.column.rules}},[n("el-tooltip",{attrs:{content:(t.crud.listError["list."+o+"."+t.column.prop]||{}).msg,disabled:!(t.crud.listError["list."+o+"."+t.column.prop]||{}).valid,placement:"top"}},[t.crud.getSlotName(t.column,"F",t.crud.$scopedSlots)?t._t(t.crud.getSlotName(t.column,"F"),null,null,{row:i,dic:t.crud.DIC[t.column.prop],size:t.crud.isMediumSize,index:o,disabled:t.crud.btnDisabledList[o],label:t.handleDetail(i,t.column),$cell:i.$cellEdit}):n("form-temp",t._b({attrs:{column:t.column,size:t.crud.isMediumSize,"table-data":{index:o,row:i,label:t.handleDetail(i,t.column)},dic:(t.crud.cascaderDIC[o]||{})[t.column.prop]||t.crud.DIC[t.column.prop],props:t.column.props||t.crud.tableOption.props,readonly:t.column.readonly,disabled:t.crud.disabled||t.crud.tableOption.disabled||t.column.disabled||t.crud.btnDisabledList[o],clearable:t.vaildData(t.column.clearable,!1),"column-slot":t.crud.mainSlot},on:{change:function(e){return t.columnChange(i,t.column,o)}},scopedSlots:t._u([t._l(t.crud.mainSlot,(function(e){return{key:e,fn:function(n){return[t._t(e,null,null,n)]}}}))],null,!0),model:{value:i[t.column.prop],callback:function(e){t.$set(i,t.column.prop,e)},expression:"row[column.prop]"}},"form-temp",t.$uploadFun(t.column,t.crud),!1))],2)],1):t.crud.$scopedSlots[t.column.prop]?t._t(t.column.prop,null,{row:i,index:o,dic:t.crud.DIC[t.column.prop],size:t.crud.isMediumSize,label:t.handleDetail(i,t.column)}):[["img","upload"].includes(t.column.type)?n("span",[n("div",{staticClass:"avue-crud__img"},t._l(t.getImgList(i,t.column),(function(e,o){return n(t.getIsVideo(e),{key:o,tag:"component",attrs:{src:e},on:{click:function(e){e.stopPropagation(),t.openImg(t.getImgList(i,t.column),o)}}})})),1)]):"url"===t.column.type?n("span",t._l(t.corArray(i[t.column.prop],t.column.separator),(function(e,i){return n("el-link",{key:i,attrs:{type:"primary",href:e,target:t.column.target||"_blank"}},[t._v(t._s(e))])})),1):"rate"===t.column.type?n("span",[n("avue-rate",{attrs:{disabled:""},model:{value:i[t.column.prop],callback:function(e){t.$set(i,t.column.prop,e)},expression:"row[column.prop]"}})],1):"color"===t.column.type?n("i",{staticClass:"avue-crud__color",style:{backgroundColor:i[t.column.prop]}}):"icon"===t.column.type?n("icon-temp",{attrs:{text:i[t.column.prop]}}):t.column.html?n("span",{domProps:{innerHTML:t._s(t.handleDetail(i,t.column))}}):n("span",{domProps:{textContent:t._s(t.handleDetail(i,t.column))}})]]}}],null,!0)}):t._e()}),[],!1,null,null,null).exports,U={name:"column-dynamic",components:{columnSlot:W},inject:["dynamic","crud"],props:{columnOption:Object},created:function(){var t=this,e=["getColumnProp","handleFiltersMethod","handleFilters"];Object.keys(this.dynamic).forEach((function(n){e.includes(n)&&(t[n]=t.dynamic[n])}))}},V=Object(s.a)(U,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return t.getColumnProp(t.columnOption,"hide")?n("el-table-column",{key:t.columnOption.prop,attrs:{prop:t.columnOption.prop,label:t.columnOption.label,"filter-placement":"bottom-end",filters:t.getColumnProp(t.columnOption,"filters"),"filter-method":t.getColumnProp(t.columnOption,"filterMethod")?t.handleFiltersMethod:void 0,"filter-multiple":t.vaildData(t.columnOption.filterMultiple,!0),"show-overflow-tooltip":t.columnOption.overHidden,"min-width":t.columnOption.minWidth,sortable:t.getColumnProp(t.columnOption,"sortable"),"render-header":t.columnOption.renderHeader,align:t.columnOption.align||t.crud.tableOption.align,"header-align":t.columnOption.headerAlign||t.crud.tableOption.headerAlign,width:t.getColumnProp(t.columnOption,"width"),fixed:t.getColumnProp(t.columnOption,"fixed")}},[t._l(t.columnOption.children,(function(e){return[e.children&&e.children.length>0?n("column-dynamic",{key:e.label,attrs:{columnOption:e},scopedSlots:t._u([t._l(t.crud.mainSlot,(function(e){return{key:e,fn:function(n){return[t._t(e,null,null,n)]}}}))],null,!0)}):n("column-slot",{attrs:{column:e,"column-option":t.columnOption.children},scopedSlots:t._u([t._l(t.crud.mainSlot,(function(e){return{key:e,fn:function(n){return[t._t(e,null,null,n)]}}}))],null,!0)})]}))],2):t._e()}),[],!1,null,null,null).exports;function Y(t){return function(t){if(Array.isArray(t))return X(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(!t)return;if("string"==typeof t)return X(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return X(t,e)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function X(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}var q=Object(i.a)({name:"crud",data:function(){return{}},components:{columnSlot:W,columnDynamic:V},inject:["crud"],provide:function(){return{crud:this.crud,dynamic:this}},props:{columnOption:Array},computed:{list:function(){var t=this,e=Y(this.columnOption);return e=Object(D.a)(e,"index",(function(e,n){var i,o;return(null===(i=t.crud.objectOption[e.prop])||void 0===i?void 0:i.index)-(null===(o=t.crud.objectOption[n.prop])||void 0===o?void 0:o.index)}))}},methods:{handleFiltersMethod:function(t,e,n){var i=this.columnOption.filter((function(t){return t.prop===n.property}))[0];return"function"==typeof i.filtersMethod?i.filtersMethod(t,e,i):e[i.prop]===t},handleFilters:function(t,e){var n=this;if(!0===e){var i=this.crud.DIC[t.prop]||[],o=[];return this.validatenull(i)?this.crud.cellForm.list.forEach((function(e){o.map((function(t){return t.text})).includes(e[t.prop])||o.push({text:e[t.prop],value:e[t.prop]})})):i.forEach((function(e){var i=t.props||n.crud.tableOption.props||{};o.push({text:e[i.label||B.e.label],value:e[i.value||B.e.value]})})),o}},getColumnProp:function(t,e){var n=this.crud.objectOption[t.prop]||{};if("filterMethod"===e)return null==n?void 0:n.filters;if(this.crud.isMobile&&["fixed"].includes(e))return!1;var i=null==n?void 0:n[e];return"width"!=e||0!=i?"filters"==e?this.handleFilters(t,i):"hide"==e?!0!==(null==n?void 0:n.hide):i:void 0}}}),G=Object(s.a)(q,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",[t._t("header"),t._v(" "),t._l(t.list,(function(e,i){return[e.children&&e.children.length>0?n("column-dynamic",{key:e.label,attrs:{columnOption:e},scopedSlots:t._u([t._l(t.crud.mainSlot,(function(e){return{key:e,fn:function(n){return[t._t(e,null,null,n)]}}}))],null,!0)}):n("column-slot",{attrs:{column:e,"column-option":t.columnOption},scopedSlots:t._u([t._l(t.crud.mainSlot,(function(e){return{key:e,fn:function(n){return[t._t(e,null,null,n)]}}}))],null,!0)})]})),t._v(" "),t._t("footer")],2)}),[],!1,null,null,null).exports,J=Object(i.a)({name:"crud",mixins:[j.a],directives:{permission:w},inject:["crud"],data:function(){return{dateCreate:!1,pickerOptions:{shortcuts:[{text:"浠婃棩",onClick:function(t){var e=new Date,n=new Date;n.setTime(n.getTime()),t.$emit("pick",[n,e])}},{text:"鏄ㄦ棩",onClick:function(t){var e=new Date,n=new Date;n.setTime(n.getTime()-864e5),t.$emit("pick",[n,e])}},{text:"鏈�杩戜竴鍛�",onClick:function(t){var e=new Date,n=new Date;n.setTime(n.getTime()-6048e5),t.$emit("pick",[n,e])}},{text:"鏈�杩戜竴涓湀",onClick:function(t){var e=new Date,n=new Date;n.setTime(n.getTime()-2592e6),t.$emit("pick",[n,e])}},{text:"鏈�杩戜笁涓湀",onClick:function(t){var e=new Date,n=new Date;n.setTime(n.getTime()-7776e6),t.$emit("pick",[n,e])}}]},config:C}},created:function(){this.initFun()},methods:{dateChange:function(t){this.dateCreate?this.crud.$emit("date-change",t):this.dateCreate=!0},initFun:function(){this.vaildData=D.x,this.crud.rowExcel=this.rowExcel,this.crud.rowPrint=this.rowPrint},rowExcel:function(){this.crud.$refs.dialogExcel.handleShow()},rowPrint:function(){this.$Print(this.crud.$refs.table)}}}),Q=Object(s.a)(J,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:t.b("menu")},[n("div",{class:t.b("left")},[t.vaildData(t.crud.tableOption.addBtn,t.config.addBtn)?n("el-button",{directives:[{name:"permission",rawName:"v-permission",value:t.crud.getPermission("addBtn"),expression:"crud.getPermission('addBtn')"}],attrs:{type:"primary",icon:t.crud.getBtnIcon("addBtn"),size:t.crud.isMediumSize},on:{click:t.crud.rowAdd}},[t.crud.isIconMenu?t._e():[t._v("\n        "+t._s(t.crud.menuIcon("addBtn"))+"\n      ")]],2):t._e(),t._v(" "),t.vaildData(t.crud.tableOption.addRowBtn,t.config.addRowBtn)?n("el-button",{directives:[{name:"permission",rawName:"v-permission",value:t.crud.getPermission("addRowBtn"),expression:"crud.getPermission('addRowBtn')"}],attrs:{type:"primary",icon:t.crud.getBtnIcon("addBtn"),size:t.crud.isMediumSize},on:{click:t.crud.rowCellAdd}},[t.crud.isIconMenu?t._e():[t._v("\n        "+t._s(t.crud.menuIcon("addBtn"))+"\n      ")]],2):t._e(),t._v(" "),t._t("menuLeft",null,{size:t.crud.isMediumSize})],2),t._v(" "),n("div",{class:t.b("right")},[t.vaildData(t.crud.tableOption.dateBtn,t.config.dateBtn)?n("avue-date",{staticStyle:{display:"inline-block","margin-right":"20px"},attrs:{type:"datetimerange","value-format":"yyyy-MM-dd HH:mm:ss",format:"yyyy-MM-dd HH:mm:ss",pickerOptions:t.pickerOptions,size:t.crud.isMediumSize},on:{change:t.dateChange}}):t._e(),t._v(" "),t._t("menuRight",null,{size:t.crud.isMediumSize}),t._v(" "),t.vaildData(t.crud.tableOption.excelBtn,t.config.excelBtn)?n("el-button",{directives:[{name:"permission",rawName:"v-permission",value:t.crud.getPermission("excelBtn"),expression:"crud.getPermission('excelBtn')"}],attrs:{icon:t.crud.getBtnIcon("excelBtn"),circle:"",size:t.crud.isMediumSize},on:{click:t.rowExcel}}):t._e(),t._v(" "),t.vaildData(t.crud.tableOption.printBtn,t.config.printBtn)?n("el-button",{directives:[{name:"permission",rawName:"v-permission",value:t.crud.getPermission("printBtn"),expression:"crud.getPermission('printBtn')"}],attrs:{icon:t.crud.getBtnIcon("printBtn"),circle:"",size:t.crud.isMediumSize},on:{click:t.rowPrint}}):t._e(),t._v(" "),t.vaildData(t.crud.tableOption.refreshBtn,t.config.refreshBtn)?n("el-button",{directives:[{name:"permission",rawName:"v-permission",value:t.crud.getPermission("refreshBtn"),expression:"crud.getPermission('refreshBtn')"}],attrs:{icon:t.crud.getBtnIcon("refreshBtn"),circle:"",size:t.crud.isMediumSize},on:{click:t.crud.refreshChange}}):t._e(),t._v(" "),t.vaildData(t.crud.tableOption.columnBtn,t.config.columnBtn)?n("el-button",{directives:[{name:"permission",rawName:"v-permission",value:t.crud.getPermission("columnBtn"),expression:"crud.getPermission('columnBtn')"}],attrs:{icon:t.crud.getBtnIcon("columnBtn"),circle:"",size:t.crud.isMediumSize},on:{click:function(e){t.crud.$refs.dialogColumn.columnBox=!0}}}):t._e(),t._v(" "),(t.crud.$refs.headerSearch||{}).searchFlag&&t.vaildData(t.crud.tableOption.searchShowBtn,!0)?n("el-button",{attrs:{icon:t.crud.getBtnIcon("searchBtn"),circle:"",size:t.crud.isMediumSize},on:{click:function(e){return t.crud.$refs.headerSearch.handleSearchShow()}}}):t._e(),t._v(" "),t.vaildData(t.crud.tableOption.filterBtn,t.config.filterBtn)?n("el-button",{directives:[{name:"permission",rawName:"v-permission",value:t.crud.getPermission("filterBtn"),expression:"crud.getPermission('filterBtn')"}],attrs:{icon:t.crud.getBtnIcon("filterBtn"),circle:"",size:t.crud.isMediumSize},on:{click:function(e){t.crud.$refs.dialogFilter.box=!0}}}):t._e()],2)])}),[],!1,null,null,null).exports,Z=Object(i.a)({name:"crud",mixins:[j.a],inject:["crud"],data:function(){return{columnBox:!1,bindList:{}}},computed:{defaultColumn:function(){return[{label:this.t("crud.column.hide"),prop:"hide"},{label:this.t("crud.column.fixed"),prop:"fixed"},{label:this.t("crud.column.filters"),prop:"filters"},{label:this.t("crud.column.sortable"),prop:"sortable"},{label:this.t("crud.column.index"),prop:"index",hide:!0},{label:this.t("crud.column.width"),prop:"width",hide:!0}]},list:function(){var t=[];return this.crud.propOption.forEach((function(e){0!=e.showColumn&&t.push(e)})),t}},methods:{init:function(){var t=this;this.crud.propOption.forEach((function(e){!0!==t.bindList[e.prop]&&(t.defaultColumn.forEach((function(n){["hide","filters"].includes(n.prop)&&t.$watch("crud.objectOption.".concat(e.prop,".").concat(n.prop),(function(){return t.crud.refreshTable()}))})),t.bindList[e.prop]=!0)})),this.rowDrop()},rowDrop:function(){var t=this,e=this.$refs.table.$el.querySelectorAll(C.dropRowClass)[0];this.crud.tableDrop("column",e,(function(e){var n=e.oldIndex,i=e.newIndex;t.crud.headerSort(n,i),t.crud.refreshTable((function(){return t.rowDrop()}))}))}}}),tt=Object(s.a)(Z,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("el-drawer",{staticClass:"avue-dialog",class:[t.b("dialog"),t.b("column")],attrs:{"lock-scroll":"","modal-append-to-body":!1,"append-to-body":"",title:t.t("crud.showTitle"),size:t.crud.isMobile?"100%":"40%",visible:t.columnBox},on:{opened:t.init,"update:visible":function(e){t.columnBox=e}}},[n("el-table",{key:Math.random(),ref:"table",attrs:{data:t.list,height:"100%",size:"small",border:""}},[n("el-table-column",{key:"label",attrs:{align:"center",width:"100","header-align":"center",prop:"label",label:t.t("crud.column.name")}}),t._v(" "),t._l(t.defaultColumn,(function(e,i){return[1!=e.hide?n("el-table-column",{key:e.prop,attrs:{prop:e.prop,align:"center","header-align":"center",label:e.label},scopedSlots:t._u([{key:"default",fn:function(i){var o=i.row;return[n("el-checkbox",{model:{value:t.crud.objectOption[o.prop][e.prop],callback:function(n){t.$set(t.crud.objectOption[o.prop],e.prop,n)},expression:"crud.objectOption[row.prop][item.prop]"}})]}}],null,!0)}):t._e()]}))],2)],1)}),[],!1,null,null,null).exports,et=Object(i.a)({name:"crud",mixins:[j.a],inject:["crud"],components:{formTemp:L.a},data:function(){return{box:!1,formDefault:{},list:[],columnList:[],dateList:$.dateList,columnProps:{value:"prop"}}},computed:{symbolDic:function(){return[{label:"=",value:"="},{label:"鈮�",value:"鈮�"},{label:"like",value:"like"},{label:">",value:">"},{label:"鈮�",value:"鈮�"},{label:"<",value:"<"},{label:"鈮�",value:"鈮�"},{label:"鈭�",value:"鈭�"}]},result:function(){var t=this,e=[];return this.list.forEach((function(n){t.validatenull(n.value)||e.push([n.text,n.symbol,n.value])})),e},columnObj:function(){return this.columnOption[0]},columnOption:function(){return this.crud.propOption.filter((function(t){return!1!==t.filter&&!1!==t.showColumn}))}},created:function(){this.getSearchType=$.g,this.formDefault=Object($.d)(this.columnOption).tableForm},methods:{getColumnByIndex:function(t,e){var n=this.deepClone(t);return n.type=Object($.g)(n),n.multiple=["checkbox"].includes(t.type),n},handleDelete:function(t){this.list.splice(t,1),this.columnList.splice(t,1)},handleClear:function(){this.list=[],this.columnList=[]},handleValueClear:function(){var t=this;this.list.forEach((function(e,n){t.$set(t.list[n],"value",t.formDefault[e.text])}))},handleGetColumn:function(t){return this.columnOption.find((function(e){return e.prop===t}))},handleSubmit:function(){this.list.push({}),this.list.splice(this.list.length-1,1),this.crud.$emit("filter",this.result),this.box=!1},handleChange:function(t,e){var n=this.handleGetColumn(t);this.columnList[e]=n,this.list[e].value=this.formDefault[t]},handleAdd:function(){this.list.length;var t=this.columnObj.prop,e=this.handleGetColumn(t);this.columnList.push(e),this.list.push({text:t,value:this.formDefault[t],symbol:this.symbolDic[0].value})}}}),nt=Object(s.a)(et,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("el-drawer",{staticClass:"avue-dialog",class:[t.b("dialog"),t.b("filter")],attrs:{"lock-scroll":"","modal-append-to-body":!1,"append-to-body":"",title:t.t("crud.filterTitle"),size:t.crud.isMobile?"100%":"60%",visible:t.box},on:{"update:visible":function(e){t.box=e}}},[n("el-row",{attrs:{span:24}},[n("div",{class:t.b("filter-menu")},[n("el-button-group",[n("el-button",{attrs:{type:"primary",size:t.crud.isMediumSize},on:{click:t.handleAdd}},[t._v(t._s(t.t("crud.filter.addBtn")))]),t._v(" "),n("el-button",{attrs:{type:"primary",size:t.crud.isMediumSize},on:{click:t.handleClear}},[t._v(t._s(t.t("crud.filter.resetBtn")))]),t._v(" "),n("el-button",{attrs:{type:"primary",size:t.crud.isMediumSize},on:{click:t.handleValueClear}},[t._v(t._s(t.t("crud.filter.clearBtn")))])],1)],1),t._v(" "),t._l(t.list,(function(e,i){return n("el-col",{key:i,class:t.b("filter-item"),attrs:{md:12,xs:24,sm:12}},[n("avue-select",{class:t.b("filter-label"),attrs:{dic:t.columnOption,props:t.columnProps,clearable:!1,size:t.crud.isMediumSize},on:{change:function(n){return t.handleChange(e.text,i)}},model:{value:e.text,callback:function(n){t.$set(e,"text",n)},expression:"column.text"}}),t._v(" "),n("avue-select",{class:t.b("filter-symbol"),attrs:{dic:t.symbolDic,clearable:!1,size:t.crud.isMediumSize},model:{value:e.symbol,callback:function(n){t.$set(e,"symbol",n)},expression:"column.symbol"}}),t._v(" "),n("form-temp",{class:t.b("filter-value"),attrs:{column:t.getColumnByIndex(t.columnList[i]),size:t.crud.isMediumSize,dic:t.crud.DIC[t.columnList[i].prop],props:t.columnList[i].props||t.crud.tableOption.props},model:{value:e.value,callback:function(n){t.$set(e,"value",n)},expression:"column.value"}}),t._v(" "),n("el-button",{class:t.b("filter-icon"),attrs:{type:"danger",size:"mini",circle:"",icon:"el-icon-minus"},on:{click:function(e){return t.handleDelete(i)}}})],1)})),t._v(" "),n("el-col",{staticClass:"avue-form__menu avue-form__menu--right",attrs:{span:24}},[n("el-button",{attrs:{type:"primary",size:t.crud.isMediumSize},on:{click:t.handleSubmit}},[t._v(t._s(t.t("crud.filter.submitBtn")))]),t._v(" "),n("el-button",{attrs:{size:t.crud.isMediumSize},on:{click:function(e){t.box=!1}}},[t._v(t._s(t.t("crud.filter.cancelBtn")))])],1)],2)],1)}),[],!1,null,null,null).exports,it=Object(i.a)({name:"crud",mixins:[j.a],inject:["crud"],data:function(){return{disabled:!1,config:C,boxType:"",fullscreen:!1,size:null,boxVisible:!1}},props:{value:{type:Object,default:function(){return{}}}},computed:{option:function(){var t=this,e=this.deepClone(this.crud.tableOption);return e.boxType=this.boxType,e.column=this.deepClone(this.crud.propOption),e.menuBtn=!1,this.isAdd?(e.submitBtn=e.saveBtn,e.submitText=this.crud.menuIcon("saveBtn"),e.submitIcon=this.crud.getBtnIcon("saveBtn")):this.isEdit?(e.submitBtn=e.updateBtn,e.submitText=this.crud.menuIcon("updateBtn"),e.submitIcon=this.crud.getBtnIcon("updateBtn")):this.isView&&(e.detail=!0),e.emptyBtn=e.cancelBtn,e.emptyText=this.crud.menuIcon("cancelBtn"),e.emptyIcon=this.crud.getBtnIcon("cancelBtn"),this.crud.isGroup||(e.dicFlag=!1,e.dicData=this.crud.DIC),this.validatenull(e.dicFlag)||e.column.forEach((function(n){n.boxType=t.boxType,n.dicFlag=n.dicFlag||e.dicFlag})),e},isView:function(){return"view"===this.boxType},isAdd:function(){return"add"===this.boxType},isEdit:function(){return"edit"===this.boxType},direction:function(){return this.crud.tableOption.dialogDirection},width:function(){return this.vaildData(this.crud.tableOption.dialogWidth+"",this.crud.isMobile?"100%":C.dialogWidth+"")},dialogType:function(){return this.isDrawer?"elDrawer":"elDialog"},dialogTop:function(){return this.isDrawer||this.fullscreen?"0":this.crud.tableOption.dialogTop},isDrawer:function(){return"drawer"===this.crud.tableOption.dialogType},params:function(){return this.isDrawer?{size:this.fullscreen?"100%":this.width,direction:this.crud.tableOption.dialogDirection}:{width:this.width,fullscreen:this.fullscreen}},dialogTitle:function(){var t="".concat(this.boxType);if(!this.validatenull(this.boxType))return this.crud.tableOption[t+"Title"]||this.t("crud.".concat(t,"Title"))},dialogMenuPosition:function(){return this.crud.option.dialogMenuPosition||"right"}},methods:{submit:function(){this.$refs.tableForm.submit()},reset:function(){this.$refs.tableForm.resetForm()},getSlotName:function(t){return t.replace("Form","")},handleOpened:function(){var t=this;this.$nextTick((function(){["clearValidate","validate","resetForm"].forEach((function(e){t.crud[e]=t.$refs.tableForm[e]}))}))},handleChange:function(){this.crud.$emit("input",this.crud.tableForm),this.crud.$emit("change",this.crud.tableForm)},handleTabClick:function(t,e){this.crud.$emit("tab-click",t,e)},handleFullScreen:function(){this.isDrawer&&(this.validatenull(this.size)?this.size="100%":this.size=""),this.fullscreen?this.fullscreen=!1:this.fullscreen=!0},handleError:function(t){this.crud.$emit("error",t)},handleSubmit:function(t,e){this.isAdd?this.rowSave(e):this.isEdit&&this.rowUpdate(e)},rowSave:function(t){this.crud.$emit("row-save",Object(D.i)(this.crud.tableForm),this.closeDialog,t)},rowUpdate:function(t){this.crud.$emit("row-update",Object(D.i)(this.crud.tableForm),this.crud.tableIndex,this.closeDialog,t)},closeDialog:function(t){var e=this;(t=this.deepClone(t))&&function(){if(e.isEdit){var n=e.crud.findData(t[e.crud.rowKey]),i=n.parentList,o=n.index;i&&(i.splice(o,1),i.splice(o,0,t))}else if(e.isAdd){var a=e.crud.findData(t[e.crud.rowParentKey]).item;a?(a[e.crud.childrenKey]||(a[e.crud.childrenKey]=[],a[e.crud.hasChildrenKey]=!0),a[e.crud.childrenKey].push(t)):e.crud.list.push(t)}}(),this.hide()},hide:function(t){var e=this,n=function(){t&&t(),e.crud.tableIndex=-1,e.boxVisible=!1,Object.keys(e.crud.tableForm).forEach((function(t){e.$delete(e.crud.tableForm,t)}))};"function"==typeof this.crud.beforeClose?this.crud.beforeClose(n,this.boxType):n()},show:function(t){var e=this;this.boxType=t;var n=function(){e.fullscreen=e.crud.tableOption.dialogFullscreen,e.boxVisible=!0};"function"==typeof this.crud.beforeOpen?this.crud.beforeOpen(n,this.boxType):n()}}}),ot=Object(s.a)(it,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n(t.dialogType,t._b({directives:[{name:"dialogDrag",rawName:"v-dialogDrag",value:t.vaildData(t.crud.tableOption.dialogDrag,t.config.dialogDrag),expression:"vaildData(crud.tableOption.dialogDrag,config.dialogDrag)"}],tag:"component",class:["avue-dialog",t.b("dialog"),{"avue-dialog--fullscreen":t.fullscreen}],attrs:{"lock-scroll":"","destroy-on-close":t.crud.tableOption.dialogDestroy,wrapperClosable:t.crud.tableOption.dialogClickModal,direction:t.direction,"custom-class":t.crud.tableOption.dialogCustomClass,"modal-append-to-body":"","append-to-body":"",top:t.dialogTop,title:t.dialogTitle,"close-on-press-escape":t.crud.tableOption.dialogEscape,"close-on-click-modal":t.vaildData(t.crud.tableOption.dialogClickModal,!1),modal:t.crud.tableOption.dialogModal,"show-close":t.crud.tableOption.dialogCloseBtn,visible:t.boxVisible,"before-close":t.hide},on:{"update:visible":function(e){t.boxVisible=e},opened:t.handleOpened}},"component",t.params,!1),[n("div",{class:t.b("dialog__header"),attrs:{slot:"title"},slot:"title"},[n("span",{staticClass:"el-dialog__title"},[t._v(t._s(t.dialogTitle))]),t._v(" "),n("div",{class:t.b("dialog__menu")},[n("i",{staticClass:"el-dialog__close",class:t.fullscreen?"el-icon-news":"el-icon-full-screen",on:{click:t.handleFullScreen}})])]),t._v(" "),t.boxVisible?n("avue-form",t._b({ref:"tableForm",attrs:{status:t.disabled,option:t.option},on:{"update:status":function(e){t.disabled=e},change:t.handleChange,submit:t.handleSubmit,"reset-change":t.hide,"tab-click":t.handleTabClick,error:t.handleError},scopedSlots:t._u([t._l(t.crud.formSlot,(function(e){return{key:t.getSlotName(e),fn:function(n){return[t._t(e,null,null,Object.assign(n,{type:t.boxType}))]}}}))],null,!0),model:{value:t.crud.tableForm,callback:function(e){t.$set(t.crud,"tableForm",e)},expression:"crud.tableForm"}},"avue-form",t.$uploadFun({},t.crud),!1)):t._e(),t._v(" "),n("span",{staticClass:"avue-dialog__footer",class:"avue-dialog__footer--"+t.dialogMenuPosition},[t.vaildData(t.option.submitBtn,!0)&&!t.isView?n("el-button",{attrs:{disabled:t.disabled,size:t.crud.controlSize,icon:t.option.submitIcon,type:"primary"},on:{click:t.submit}},[t._v(t._s(t.option.submitText))]):t._e(),t._v(" "),t.vaildData(t.option.emptyBtn,!0)&&!t.isView?n("el-button",{attrs:{disabled:t.disabled,size:t.crud.controlSize,icon:t.option.emptyIcon},on:{click:t.reset}},[t._v(t._s(t.option.emptyText))]):t._e(),t._v(" "),t._t("menuForm",null,{disabled:t.disabled,size:t.crud.controlSize,type:t.boxType})],2)],1)}),[],!1,null,null,null).exports,at={name:"crud",mixins:[j.a],inject:["crud"],data:function(){return{box:!1,form:{name:this.crud.tableOption.title}}},computed:{columnOption:function(){var t=[];return this.deepClone(this.crud.columnOption).forEach((function(e){var n=e.children;n&&!Array.isArray(n)&&delete e.children,!1!==e.showColumn&&t.push(e)})),t},columnList:function(){if(!this.form.params)return[];if(this.form.params.includes("headers"))return this.crud.propOption;var t=[];return function e(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];n.forEach((function(n,i){n.children?e(n.children):t.push(n)}))}(this.columnOption),t},columns:function(){var t=this,e=this.deepClone(this.columnOption);if(!this.form.params)return[];if(this.form.params.includes("headers")){return function e(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];n.forEach((function(i,o){i.children?e(i.children):t.form.prop.includes(i.prop)||n.splice(o,1)}))}(e),e}var n=[];return function e(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];i.forEach((function(i,o){i.children?e(i.children):t.form.prop.includes(i.prop)&&n.push(i)}))}(e),n},option:function(){var t,e=this;return{submitBtn:!1,emptyBtn:!1,column:[{label:"鏂囦欢鍚�",prop:"name",span:24},{label:"閫夋嫨鏁版嵁",prop:"type",span:24,type:"select",value:0,dicData:[{label:"褰撳墠鏁版嵁(褰撳墠椤靛叏閮ㄧ殑鏁版嵁)",value:0},{label:"閫変腑鐨勬暟鎹�(褰撳墠椤甸�変腑鐨勬暟鎹�)",value:1}]},{label:"閫夋嫨瀛楁",prop:"prop",type:"tree",multiple:!0,checkStrictly:!0,span:24,props:{value:"prop"},dicData:this.columnOption},{label:"鍙傛暟璁剧疆",prop:"params",type:"checkbox",span:24,value:["header","data"].concat((t=[],e.crud.isHeader&&t.push("headers"),e.crud.isShowSummary&&t.push("sum"),t)),dicData:[{label:"琛ㄥご",disabled:!0,value:"header"},{label:"鏁版嵁婧�",value:"data"}].concat(function(){var t=[];return t.push({label:"澶嶆潅琛ㄥご",value:"headers",disabled:!e.crud.isHeader}),t.push({label:"鍚堣缁熻",value:"sum",disabled:!e.crud.isShowSummary}),t}())}]}}},watch:{columnList:function(){this.form.prop=this.columnList.map((function(t){return t.prop}))}},methods:{handleShow:function(){this.box=!0},handleSubmit:function(){this.$Export.excel({title:this.form.name,columns:this.columns,data:this.handleSum()}),this.box=!1},handleSum:function(){var t=this,e=this.crud.tableOption,n=this.crud.propOption,i=0==this.form.type?this.crud.list:this.crud.tableSelect,o=[];return this.form.params.includes("data")&&i.forEach((function(e){var i=t.deepClone(e);n.forEach((function(e){e.bind&&(i[e.prop]=Object(D.m)(i,e.bind)),t.validatenull(i["$"+e.prop])||(i[e.prop]=i["$"+e.prop])})),o.push(i)})),this.form.params.includes("sum")&&e.showSummary&&o.push(this.crud.sumsList),o}}},rt=Object(s.a)(at,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("el-dialog",{staticClass:"avue-dialog",attrs:{title:t.t("crud.excelBtn"),"lock-scroll":"","modal-append-to-body":!1,"append-to-body":"",visible:t.box,width:t.crud.isMobile?"100%":"30%"},on:{"update:visible":function(e){t.box=e}}},[n("avue-form",{attrs:{option:t.option},model:{value:t.form,callback:function(e){t.form=e},expression:"form"}}),t._v(" "),n("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[n("el-button",{attrs:{type:"primary",size:t.crud.isMediumSize},on:{click:t.handleSubmit}},[t._v(t._s(t.t("crud.filter.submitBtn")))]),t._v(" "),n("el-button",{attrs:{size:t.crud.isMediumSize},on:{click:function(e){t.box=!1}}},[t._v(t._s(t.t("crud.filter.cancelBtn")))])],1)],1)}),[],!1,null,null,null).exports,st=Object(i.a)({name:"crud",data:function(){return{config:C}},mixins:[j.a],inject:["crud"],directives:{permission:w},computed:{menuType:function(){return this.crud.tableOption.menuType||this.$AVUE.menuType||"button"},isIconMenu:function(){return"icon"===this.menuType},isTextMenu:function(){return"text"===this.menuType},isMenu:function(){return"menu"===this.menuType}},methods:{menuText:function(t){return["text","menu"].includes(this.menuType)?"text":t}}}),lt=Object(s.a)(st,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return t.vaildData(t.crud.tableOption.menu,t.config.menu)&&t.crud.getPermission("menu")?n("el-table-column",{key:"menu",class:t.b("btn"),attrs:{prop:"menu",fixed:t.vaildData(t.crud.tableOption.menuFixed,t.config.menuFixed),label:t.crud.tableOption.menuTitle||t.t("crud.menu"),align:t.crud.tableOption.menuAlign||t.config.menuAlign,"header-align":t.crud.tableOption.menuHeaderAlign||t.config.menuHeaderAlign,width:t.crud.isMobile?t.crud.tableOption.menuXsWidth||t.config.menuXsWidth:t.crud.tableOption.menuWidth||t.config.menuWidth},scopedSlots:t._u([{key:"default",fn:function(e){var i=e.row,o=e.$index;return[t.isMenu?n("el-dropdown",{attrs:{size:t.crud.isMediumSize}},[n("el-button",{attrs:{type:"text",size:t.crud.isMediumSize}},[t._v("\n        "+t._s(t.crud.tableOption.menuBtnTitle||t.t("crud.menuBtn"))+"\n        "),n("i",{staticClass:"el-icon-arrow-down el-icon--right"})]),t._v(" "),n("el-dropdown-menu",{attrs:{slot:"dropdown"},slot:"dropdown"},[t.vaildData(t.crud.tableOption.viewBtn,t.config.viewBtn)?n("el-dropdown-item",{directives:[{name:"permission",rawName:"v-permission",value:t.crud.getPermission("viewBtn",i,o),expression:"crud.getPermission('viewBtn',row,$index)"}],attrs:{icon:t.crud.getBtnIcon("viewBtn")},nativeOn:{click:function(e){return t.crud.rowView(i,o)}}},[t._v(t._s(t.crud.menuIcon("viewBtn")))]):t._e(),t._v(" "),t.vaildData(t.crud.tableOption.editBtn,t.config.editBtn)?n("el-dropdown-item",{directives:[{name:"permission",rawName:"v-permission",value:t.crud.getPermission("editBtn",i,o),expression:"crud.getPermission('editBtn',row,$index)"}],attrs:{icon:t.crud.getBtnIcon("editBtn")},nativeOn:{click:function(e){return t.crud.rowEdit(i,o)}}},[t._v(t._s(t.crud.menuIcon("editBtn")))]):t._e(),t._v(" "),t.vaildData(t.crud.tableOption.copyBtn,t.config.copyBtn)?n("el-dropdown-item",{directives:[{name:"permission",rawName:"v-permission",value:t.crud.getPermission("copyBtn",i,o),expression:"crud.getPermission('copyBtn',row,$index)"}],attrs:{icon:t.crud.getBtnIcon("copyBtn")},nativeOn:{click:function(e){return t.crud.rowCopy(i)}}},[t._v(t._s(t.crud.menuIcon("copyBtn")))]):t._e(),t._v(" "),t.vaildData(t.crud.tableOption.delBtn,t.config.delBtn)?n("el-dropdown-item",{directives:[{name:"permission",rawName:"v-permission",value:t.crud.getPermission("delBtn",i,o),expression:"crud.getPermission('delBtn',row,$index)"}],attrs:{icon:t.crud.getBtnIcon("delBtn")},nativeOn:{click:function(e){return t.crud.rowDel(i,o)}}},[t._v(t._s(t.crud.menuIcon("delBtn")))]):t._e(),t._v(" "),t._t("menuBtn",null,{row:i,type:t.menuText("primary"),disabled:t.crud.btnDisabled,size:t.crud.isMediumSize,index:o})],2)],1):["button","text","icon"].includes(t.menuType)?[t.vaildData(t.crud.tableOption.cellBtn,t.config.cellBtn)?[t.vaildData(t.crud.tableOption.editBtn,t.config.editBtn)&&!i.$cellEdit?n("el-button",{directives:[{name:"permission",rawName:"v-permission",value:t.crud.getPermission("editBtn",i,o),expression:"crud.getPermission('editBtn',row,$index)"}],attrs:{type:t.menuText("primary"),icon:t.crud.getBtnIcon("editBtn"),size:t.crud.isMediumSize,disabled:t.crud.btnDisabledList[o]},on:{click:function(e){return e.stopPropagation(),t.crud.rowCell(i,o)}}},[t.isIconMenu?t._e():[t._v("\n            "+t._s(t.crud.menuIcon("editBtn"))+"\n          ")]],2):t.vaildData(t.crud.tableOption.saveBtn,t.config.saveBtn)&&i.$cellEdit?n("el-button",{directives:[{name:"permission",rawName:"v-permission",value:t.crud.getPermission("saveBtn",i,o),expression:"crud.getPermission('saveBtn',row,$index)"}],attrs:{type:t.menuText("primary"),icon:t.crud.getBtnIcon("saveBtn"),size:t.crud.isMediumSize,disabled:t.crud.btnDisabledList[o]},on:{click:function(e){return e.stopPropagation(),t.crud.rowCell(i,o)}}},[t.isIconMenu?t._e():[t._v("\n            "+t._s(t.crud.menuIcon("saveBtn"))+"\n          ")]],2):t._e(),t._v(" "),i.$cellEdit?n("el-button",{attrs:{type:t.menuText("danger"),icon:t.crud.getBtnIcon("cancelBtn"),size:t.crud.isMediumSize,disabled:t.crud.btnDisabledList[o]},on:{click:function(e){return e.stopPropagation(),t.crud.rowCancel(i,o)}}},[t.isIconMenu?t._e():[t._v("\n            "+t._s(t.crud.menuIcon("cancelBtn"))+"\n          ")]],2):t._e()]:t._e(),t._v(" "),t.vaildData(t.crud.tableOption.viewBtn,t.config.viewBtn)?n("el-button",{directives:[{name:"permission",rawName:"v-permission",value:t.crud.getPermission("viewBtn",i,o),expression:"crud.getPermission('viewBtn',row,$index)"}],attrs:{type:t.menuText("success"),icon:t.crud.getBtnIcon("viewBtn"),size:t.crud.isMediumSize,disabled:t.btnDisabled},on:{click:function(e){return e.stopPropagation(),t.crud.rowView(i,o)}}},[t.isIconMenu?t._e():[t._v("\n          "+t._s(t.crud.menuIcon("viewBtn"))+"\n        ")]],2):t._e(),t._v(" "),t.vaildData(t.crud.tableOption.editBtn,t.config.editBtn)&&!t.crud.tableOption.cellBtn?n("el-button",{directives:[{name:"permission",rawName:"v-permission",value:t.crud.getPermission("editBtn",i,o),expression:"crud.getPermission('editBtn',row,$index)"}],attrs:{type:t.menuText("primary"),icon:t.crud.getBtnIcon("editBtn"),size:t.crud.isMediumSize,disabled:t.btnDisabled},on:{click:function(e){return e.stopPropagation(),t.crud.rowEdit(i,o)}}},[t.isIconMenu?t._e():[t._v("\n          "+t._s(t.crud.menuIcon("editBtn"))+"\n        ")]],2):t._e(),t._v(" "),t.vaildData(t.crud.tableOption.copyBtn,t.config.copyBtn)?n("el-button",{directives:[{name:"permission",rawName:"v-permission",value:t.crud.getPermission("copyBtn",i,o),expression:"crud.getPermission('copyBtn',row,$index)"}],attrs:{type:t.menuText("primary"),icon:t.crud.getBtnIcon("copyBtn"),size:t.crud.isMediumSize,disabled:t.btnDisabled},on:{click:function(e){return e.stopPropagation(),t.crud.rowCopy(i)}}},[t.isIconMenu?t._e():[t._v("\n          "+t._s(t.crud.menuIcon("copyBtn"))+"\n        ")]],2):t._e(),t._v(" "),t.vaildData(t.crud.tableOption.delBtn,t.config.delBtn)&&!i.$cellEdit?n("el-button",{directives:[{name:"permission",rawName:"v-permission",value:t.crud.getPermission("delBtn",i,o),expression:"crud.getPermission('delBtn',row,$index)"}],attrs:{type:t.menuText("danger"),icon:t.crud.getBtnIcon("delBtn"),size:t.crud.isMediumSize,disabled:t.btnDisabled},on:{click:function(e){return e.stopPropagation(),t.crud.rowDel(i,o)}}},[t.isIconMenu?t._e():[t._v("\n          "+t._s(t.crud.menuIcon("delBtn"))+"\n        ")]],2):t._e()]:t._e(),t._v(" "),t._t("menu",null,{row:i,type:t.menuText("primary"),disabled:t.crud.btnDisabled,size:t.crud.isMediumSize,index:o})]}}],null,!0)}):t._e()}),[],!1,null,null,null).exports,ct=Object(i.a)({name:"crud",data:function(){return{config:C}},mixins:[j.a],inject:["crud"],methods:{indexMethod:function(t){return t+1+((this.crud.page.currentPage||1)-1)*(this.crud.page.pageSize||10)},setSort:function(){this.rowDrop(),this.columnDrop()},rowDrop:function(){var t=this,e=this.crud.$refs.table.$el.querySelectorAll(this.config.dropRowClass)[0];this.crud.tableDrop("row",e,(function(e){var n=e.oldIndex,i=e.newIndex,o=t.crud.list.splice(n,1)[0];t.crud.list.splice(i,0,o),t.crud.$emit("sortable-change",n,i),t.crud.refreshTable((function(){return t.rowDrop()}))}))},columnDrop:function(){var t=this,e=this.crud.$refs.table.$el.querySelector(this.config.dropColClass),n=0;this.crud.tableOption.selection&&(n+=1),this.crud.tableOption.index&&(n+=1),this.crud.tableOption.expand&&(n+=1),this.crud.tableDrop("column",e,(function(e){t.crud.headerSort(e.oldIndex-n,e.newIndex-n),t.columnDrop()}))}}}),ut=Object(s.a)(ct,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",[n("el-table-column",{attrs:{width:"1px"}}),t._v(" "),t.crud.tableOption.expand?n("el-table-column",{key:"expand",attrs:{type:"expand",width:t.crud.tableOption.expandWidth||t.config.expandWidth,fixed:t.vaildData(t.crud.tableOption.expandFixed,t.config.expandFixed),align:"center"},scopedSlots:t._u([{key:"default",fn:function(e){var n=e.row;return[t._t("expand",null,{row:n,index:n.$index})]}}],null,!0)}):t._e(),t._v(" "),t.crud.tableOption.selection?n("el-table-column",{key:"selection",attrs:{fixed:t.vaildData(t.crud.tableOption.selectionFixed,t.config.selectionFixed),type:"selection",selectable:t.crud.tableOption.selectable,"reserve-selection":t.vaildData(t.crud.tableOption.reserveSelection),width:t.crud.tableOption.selectionWidth||t.config.selectionWidth,align:"center"}}):t._e(),t._v(" "),t.vaildData(t.crud.tableOption.index)?n("el-table-column",{key:"index",attrs:{fixed:t.vaildData(t.crud.tableOption.indexFixed,t.config.indexFixed),label:t.crud.tableOption.indexLabel||t.config.indexLabel,type:"index",width:t.crud.tableOption.indexWidth||t.config.indexWidth,index:t.indexMethod,align:"center"}}):t._e()],1)}),[],!1,null,null,null).exports;function dt(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(!t)return;if("string"==typeof t)return pt(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return pt(t,e)}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var i=0,o=function(){};return{s:o,n:function(){return i>=t.length?{done:!0}:{done:!1,value:t[i++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,r=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return r=t.done,t},e:function(t){s=!0,a=t},f:function(){try{r||null==n.return||n.return()}finally{if(s)throw a}}}}function pt(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}var ht=Object(i.a)({name:"crud",mixins:[Object(O.a)(),j.a],directives:{permission:w},provide:function(){return{crud:this}},components:{column:G,columnDefault:ut,columnMenu:lt,tablePage:S,headerSearch:T,headerMenu:Q,dialogColumn:tt,dialogFilter:nt,dialogExcel:rt,dialogForm:ot},data:function(){return{reload:Math.random(),cellForm:{list:[]},config:C,list:[],listError:{},tableForm:{},tableHeight:void 0,tableIndex:-1,tableSelect:[],formIndexList:[],sumsList:{},cascaderDicList:{},formCascaderList:{},btnDisabledList:{},btnDisabled:!1,default:{}}},mounted:function(){this.dataInit(),this.getTableHeight()},computed:{isSortable:function(){return this.tableOption.sortable},isRowSort:function(){return this.tableOption.rowSort},isColumnSort:function(){return this.tableOption.columnSort},rowParentKey:function(){return this.option.rowParentKey||B.e.rowParentKey},childrenKey:function(){return this.treeProps.children||B.e.children},hasChildrenKey:function(){return this.treeProps.hasChildren||B.e.hasChildren},treeProps:function(){return this.tableOption.treeProps||{}},isAutoHeight:function(){return"auto"===this.tableOption.height},formSlot:function(){return this.getSlotList(["Error","Label","Type","Form"],this.$scopedSlots,this.propOption)},searchSlot:function(){return this.getSlotList(["Search"],this.$scopedSlots,this.propOption)},mainSlot:function(){var t=this,e=[];return this.propOption.forEach((function(n){t.$scopedSlots[n.prop]&&e.push(n.prop)})),this.getSlotList(["Header","Form"],this.$scopedSlots,this.propOption).concat(e)},calcHeight:function(){return(this.tableOption.calcHeight||0)+this.$AVUE.calcHeight},propOption:function(){var t=[];return function e(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];Array.isArray(n)&&n.forEach((function(n){t.push(n),n.children&&e(n.children)}))}(this.columnOption),t=Object($.a)(t)},isShowSummary:function(){return this.option.showSummary},isHeader:function(){var t=!1;return this.columnOption.forEach((function(e){e.children&&(t=!0)})),t},isTree:function(){var t=!1;return this.data.forEach((function(e){e.children&&(t=!0)})),t},isCard:function(){return this.option.card?"always":"never"},expandLevel:function(){return this.parentOption.expandLevel||0},expandAll:function(){return this.parentOption.expandAll||!1},parentOption:function(){return this.tableOption||{}},columnOption:function(){return this.tableOption.column||[]},sumColumnList:function(){return this.tableOption.sumColumnList||[]},selectLen:function(){return this.tableSelect?this.tableSelect.length:0}},watch:{value:{handler:function(){this.tableForm=this.value},immediate:!0,deep:!0},list:{handler:function(){this.cellForm.list=this.list},deep:!0},data:{handler:function(){this.dataInit()},deep:!0}},props:{sortBy:Function,sortOrders:Array,sortMethod:Function,spanMethod:Function,summaryMethod:Function,rowStyle:Function,cellStyle:Function,beforeClose:Function,beforeOpen:Function,rowClassName:Function,cellClassName:Function,headerCellClassName:Function,uploadBefore:Function,uploadAfter:Function,uploadDelete:Function,uploadPreview:Function,uploadError:Function,uploadExceed:Function,permission:{type:[Function,Object],default:function(){return{}}},value:{type:Object,default:function(){return{}}},search:{type:Object,default:function(){return{}}},page:{type:Object,default:function(){return{}}},tableLoading:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},data:{type:Array,required:!0,default:function(){return[]}}},methods:{handleValidate:function(t,e,n){this.listError[t]||this.$set(this.listError,t,{valid:!1,msg:""}),this.listError[t].valid=!e,this.listError[t].msg=n},getPermission:function(t,e,n){return"function"==typeof this.permission?this.permission(t,e,n):!!this.validatenull(this.permission[t])||this.permission[t]},getTableHeight:function(){var t=this;this.isAutoHeight?this.$nextTick((function(){var e=t.$refs.table,n=t.$refs.tablePage;if(e){var i=e.$el,o=n.$el.offsetHeight||20;t.tableHeight=document.documentElement.clientHeight-i.offsetTop-o-t.calcHeight}})):this.tableHeight=this.tableOption.height,this.refreshTable()},doLayout:function(){this.$refs.table.doLayout()},refreshTable:function(t){var e=this;this.reload=Math.random(),this.tableSelect=[],this.$nextTick((function(){e.$refs.columnDefault.setSort(),t&&t()}))},treeLoad:function(t,e,n){this.$emit("tree-load",t,e,(function(e){t.children=e,n(e)}))},menuIcon:function(t){return this.vaildData(this.tableOption[t+"Text"],this.t("crud."+t))},getBtnIcon:function(t){var e=t+"Icon";return this.tableOption[e]||C[e]},validateField:function(t){return this.$refs.dialogForm.$refs.tableForm.validateField(t)},handleGetRowKeys:function(t){return t[this.rowKey]},selectClear:function(){this.$emit("selection-clear",this.deepClone(this.tableSelect)),this.$refs.table.clearSelection()},toggleRowSelection:function(t,e){this.$refs.table.toggleRowSelection(t,e)},toggleRowExpansion:function(t,e){this.$refs.table.toggleRowExpansion(t,e)},setCurrentRow:function(t){this.$refs.table.setCurrentRow(t)},dataInit:function(){var t=this;this.list=this.data,this.list.forEach((function(e,n){e.$cellEdit&&!t.formCascaderList[n]&&(t.formCascaderList[n]=t.deepClone(e)),t.$set(e,"$cellEdit",e.$cellEdit||!1),t.$set(e,"$index",n)}))},headerDragend:function(t,e,n,i){this.objectOption[n.property].width=t,this.$emit("header-dragend",t,e,n,i)},headerSort:function(t,e){var n=this.columnOption,i=n.splice(t,1)[0];n.splice(e,0,i),this.refreshTable()},clearFilter:function(t){this.$refs.table.clearFilter(t)},expandChange:function(t,e){this.$emit("expand-change",t,e)},currentRowChange:function(t,e){this.$emit("current-row-change",t,e)},refreshChange:function(){this.$emit("refresh-change")},toggleSelection:function(t){var e=this;t?t.forEach((function(t){e.$refs.table.toggleRowSelection(t)})):this.$refs.table.clearSelection()},selectionChange:function(t){this.tableSelect=t,this.$emit("selection-change",this.tableSelect)},select:function(t,e){this.$emit("select",t,e)},selectAll:function(t){this.$emit("select-all",t)},filterChange:function(t){this.$emit("filter-change",t)},sortChange:function(t){this.$emit("sort-change",t)},rowDblclick:function(t,e){this.$emit("row-dblclick",t,e)},rowClick:function(t,e,n){this.$emit("row-click",t,e,n)},clearSort:function(){this.$refs.table.clearSort()},cellMouseEnter:function(t,e,n,i){this.$emit("cell-mouse-enter",t,e,n,i)},cellMouseLeave:function(t,e,n,i){this.$emit("cell-mouse-leave",t,e,n,i)},cellClick:function(t,e,n,i){this.$emit("cell-click",t,e,n,i)},headerClick:function(t,e){this.$emit("header-click",t,e)},rowContextmenu:function(t,e,n){this.$emit("row-contextmenu",t,e,n)},headerContextmenu:function(t,e){this.$emit("header-contextmenu",t,e)},cellDblclick:function(t,e,n,i){this.$emit("cell-dblclick",t,e,n,i)},rowCell:function(t,e){t.$cellEdit?this.rowCellUpdate(t,e):this.rowCellEdit(t,e)},rowCellAdd:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=this.list.length,i=Object($.d)(this.propOption).tableForm;e=this.deepClone(Object.assign({$cellEdit:!0,$index:n},i,e)),this.list.push(e),this.formIndexList.push(n),setTimeout((function(){return t.$refs.columnDefault.setSort()}))},rowCancel:function(t,e){this.validatenull(t[this.rowKey])?this.list.splice(e,1):(this.formCascaderList[e].$cellEdit=!1,this.$set(this.list,e,this.formCascaderList[e]),delete this.formCascaderList[e],this.$set(this.cascaderDIC,e,this.cascaderDicList[e]),this.formIndexList.splice(this.formIndexList.indexOf(e),1))},rowCellEdit:function(t,e){var n=this;t.$cellEdit=!0,this.$set(this.list,e,t),this.formCascaderList[e]=this.deepClone(t),this.cascaderDicList[e]=this.deepClone(this.cascaderDIC[e]),setTimeout((function(){n.formIndexList.push(e)}),1e3)},validateCellForm:function(t){var e=this;return new Promise((function(t){e.$refs.cellForm.validate((function(e,n){t(n)}))}))},validateCellField:function(t){var e,n=!0,i=dt(this.$refs.cellForm.fields);try{for(i.s();!(e=i.n()).done;){var o=e.value;if(o.prop.split(".")[1]==t&&this.$refs.cellForm.validateField(o.prop,(function(t){t&&(n=!1)})),!n)break}}catch(t){i.e(t)}finally{i.f()}return n},rowCellUpdate:function(t,e){var n=this;t=this.deepClone(t);var i=function(){n.btnDisabledList[e]=!1,n.btnDisabled=!1,t.$cellEdit=!1,n.$set(n.list,e,t),delete n.formCascaderList[e]},o=function(){n.btnDisabledList[e]=!1,n.btnDisabled=!1};this.validateCellField(e)&&(this.btnDisabledList[e]=!0,this.btnDisabled=!0,this.validatenull(t[this.rowKey])?this.$emit("row-save",t,i,o):this.$emit("row-update",t,e,i,o))},rowAdd:function(){this.$refs.dialogForm.show("add")},rowSave:function(){return this.$refs.dialogForm.$refs.tableForm.submit()},rowUpdate:function(){return this.$refs.dialogForm.$refs.tableForm.submit()},closeDialog:function(){return this.$refs.dialogForm.closeDialog()},rowClone:function(t){var e={};return Object.keys(t).forEach((function(n){["_parent","children"].includes(n)||(e[n]=t[n])})),e},getPropRef:function(t){return this.$refs.dialogForm.$refs.tableForm.getPropRef(t)},rowEdit:function(t,e){this.tableForm=this.rowClone(t),this.tableIndex=e,this.$emit("input",this.tableForm),this.$refs.dialogForm.show("edit")},rowCopy:function(t){this.tableForm=this.rowClone(t),delete this.tableForm[this.rowKey],this.tableIndex=-1,this.$emit("input",this.tableForm),this.$refs.dialogForm.show("add")},rowView:function(t,e){this.tableForm=this.rowClone(t),this.tableIndex=e,this.$emit("input",this.tableForm),this.$refs.dialogForm.show("view")},rowDel:function(t,e){var n=this;this.$emit("row-del",t,e,(function(){var e=n.findData(t[n.rowKey]),i=e.parentList,o=e.index;i&&i.splice(o,1)}))},tableSpanMethod:function(t){if("function"==typeof this.spanMethod)return this.spanMethod(t)},tableSummaryMethod:function(t){var e=this,n={};if("function"==typeof this.summaryMethod)return this.summaryMethod(t);var i=t.columns,o=t.data,a=[];return i.length>0&&i.forEach((function(t,i){var r=e.sumColumnList.find((function(e){return e.name===t.property}));if(r){var s=r.decimals||2,l=r.label||"";switch(r.type){case"count":a[i]=l+o.length;break;case"avg":var c=o.map((function(e){return Number(e[t.property])})),u=1;a[i]=c.reduce((function(t,e){var n=Number(e);return isNaN(n)?t:(t*(u-1)+e)/u++}),0),a[i]=l+a[i].toFixed(s);break;case"sum":var d=o.map((function(e){return Number(e[t.property])}));a[i]=d.reduce((function(t,e){var n=Number(e);return isNaN(n)?t:t+e}),0),a[i]=l+a[i].toFixed(s)}n[t.property]=a[i]}else a[i]=""})),this.sumsList=n,a},tableDrop:function(t,e,n){if(!0!==this.isSortable){if("row"==t&&!this.isRowSort)return;if("column"==t&&!this.isColumnSort)return}window.Sortable?window.Sortable.create(e,{ghostClass:C.ghostClass,chosenClass:C.ghostClass,animation:500,delay:0,onEnd:function(t){return n(t)}}):x.a.logs("Sortable")},findData:function(t){var e=this,n={};return function i(o,a){o.forEach((function(r,s){r[e.rowKey]==t&&(n={item:r,index:s,parentList:o,parent:a}),r[e.childrenKey]&&i(r[e.childrenKey],r)}))}(this.list),n}}}),ft=Object(s.a)(ht,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:t.b({card:!t.option.card})},[t.tableOption.title?n(t.tableOption.titleSize||"h2",{tag:"component",style:t.tableOption.titleStyle},[t._v(t._s(t.tableOption.title))]):t._e(),t._v(" "),n("header-search",{ref:"headerSearch",attrs:{search:t.search},scopedSlots:t._u([{key:"search",fn:function(e){return[t._t("search",null,null,e)]}},{key:"searchMenu",fn:function(e){return[t._t("searchMenu",null,null,e)]}},t._l(t.searchSlot,(function(e){return{key:e,fn:function(n){return[t._t(e,null,null,n)]}}}))],null,!0)}),t._v(" "),n("el-card",{attrs:{shadow:t.isCard}},[t.vaildData(t.tableOption.header,!0)?n("header-menu",{ref:"headerMenu",scopedSlots:t._u([{key:"menuLeft",fn:function(e){return[t._t("menuLeft",null,null,e)]}},{key:"menuRight",fn:function(e){return[t._t("menuRight",null,null,e)]}}],null,!0)}):t._e(),t._v(" "),t.vaildData(t.tableOption.tip,t.config.tip)&&t.tableOption.selection?n("el-tag",{staticClass:"avue-crud__tip"},[n("span",{staticClass:"avue-crud__tip-name"},[t._v("\n        "+t._s(t.t("crud.tipStartTitle"))+"\n        "),n("span",{staticClass:"avue-crud__tip-count"},[t._v(t._s(t.selectLen))]),t._v("\n        "+t._s(t.t("crud.tipEndTitle"))+"\n      ")]),t._v(" "),t.vaildData(t.tableOption.selectClearBtn,t.config.selectClearBtn)&&t.tableOption.selection?n("el-button",{directives:[{name:"permission",rawName:"v-permission",value:t.getPermission("selectClearBtn"),expression:"getPermission('selectClearBtn')"}],attrs:{type:"text",size:"small"},on:{click:t.selectClear}},[t._v(t._s(t.t("crud.emptyBtn")))]):t._e(),t._v(" "),t._t("tip")],2):t._e(),t._v(" "),t._t("header"),t._v(" "),n("el-form",{ref:"cellForm",attrs:{model:t.cellForm,"show-message":!1},on:{validate:t.handleValidate}},[n("el-table",{directives:[{name:"loading",rawName:"v-loading",value:t.tableLoading,expression:"tableLoading"}],key:t.reload,ref:"table",class:{"avue-crud--indeterminate":t.vaildData(t.tableOption.indeterminate,!1)},attrs:{data:t.cellForm.list,"row-key":t.handleGetRowKeys,size:t.$AVUE.tableSize||t.controlSize,lazy:t.vaildData(t.tableOption.lazy,!1),load:t.treeLoad,"tree-props":t.treeProps,"expand-row-keys":t.tableOption.expandRowKeys,"default-expand-all":t.tableOption.defaultExpandAll,"highlight-current-row":t.tableOption.highlightCurrentRow,"show-summary":t.tableOption.showSummary,"summary-method":t.tableSummaryMethod,"span-method":t.tableSpanMethod,stripe:t.tableOption.stripe,"show-header":t.tableOption.showHeader,"default-sort":t.tableOption.defaultSort,"row-class-name":t.rowClassName,"cell-class-name":t.cellClassName,"row-style":t.rowStyle,"cell-style":t.cellStyle,"sort-method":t.sortMethod,"sort-orders":t.sortOrders,"sort-by":t.sortBy,fit:t.tableOption.fit,"header-cell-class-name":t.headerCellClassName,"max-height":t.isAutoHeight?t.tableHeight:t.tableOption.maxHeight,height:t.tableHeight,width:t.setPx(t.tableOption.width,t.config.width),border:t.tableOption.border},on:{"current-change":t.currentRowChange,"expand-change":t.expandChange,"header-dragend":t.headerDragend,"row-click":t.rowClick,"row-dblclick":t.rowDblclick,"cell-mouse-enter":t.cellMouseEnter,"cell-mouse-leave":t.cellMouseLeave,"cell-click":t.cellClick,"header-click":t.headerClick,"row-contextmenu":t.rowContextmenu,"header-contextmenu":t.headerContextmenu,"cell-dblclick":t.cellDblclick,"filter-change":t.filterChange,"selection-change":t.selectionChange,select:t.select,"select-all":t.selectAll,"sort-change":t.sortChange}},[n("template",{slot:"empty"},[n("div",{class:t.b("empty")},[t.$slots.empty?t._t("empty"):n("el-empty",{attrs:{"image-size":100,description:t.tableOption.emptyText}})],2)]),t._v(" "),n("column",{attrs:{columnOption:t.columnOption},scopedSlots:t._u([t._l(t.mainSlot,(function(e){return{key:e,fn:function(n){return[t._t(e,null,null,n)]}}}))],null,!0)},[n("column-default",{ref:"columnDefault",attrs:{slot:"header"},slot:"header",scopedSlots:t._u([{key:"expand",fn:function(e){var n=e.row,i=e.index;return[t._t("expand",null,{row:n,index:i})]}}],null,!0)}),t._v(" "),t._v(" "),n("column-menu",{attrs:{slot:"footer"},slot:"footer",scopedSlots:t._u([{key:"menu",fn:function(e){return[t._t("menu",null,null,e)]}},{key:"menuBtn",fn:function(e){return[t._t("menuBtn",null,null,e)]}}],null,!0)})],1)],2)],1),t._v(" "),t._t("footer")],2),t._v(" "),n("table-page",{ref:"tablePage",attrs:{page:t.page}},[n("template",{slot:"page"},[t._t("page")],2)],2),t._v(" "),n("dialog-form",{ref:"dialogForm",scopedSlots:t._u([t._l(t.formSlot,(function(e){return{key:e,fn:function(n){return[t._t(e,null,null,n)]}}})),{key:"menuForm",fn:function(e){return[t._t("menuForm",null,null,e)]}}],null,!0)}),t._v(" "),n("dialog-column",{ref:"dialogColumn"}),t._v(" "),n("dialog-excel",{ref:"dialogExcel"}),t._v(" "),n("dialog-filter",{ref:"dialogFilter"})],1)}),[],!1,null,null,null).exports,mt={img:"img",title:"title",info:"info"},vt=Object(i.a)({name:"card",props:{props:{type:Object,default:function(){return mt}},option:{type:Object,default:function(){return{}}},data:{type:Array,default:function(){return[]}}},data:function(){return{propsDefault:mt}},computed:{imgKey:function(){return this.option.props.img||this.propsDefault.img},titleKey:function(){return this.option.props.title||this.propsDefault.title},infoKey:function(){return this.option.props.info||this.propsDefault.info},span:function(){return this.option.span||8},gutter:function(){return this.option.gutter||20}},methods:{rowAdd:function(){this.$emit("row-add")},rowClick:function(t,e){this.$emit("row-click",t,e)}}}),bt=Object(s.a)(vt,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:t.b()},[n("el-row",{attrs:{span:24,gutter:t.gutter}},[t.vaildData(t.option.addBtn,!0)?n("el-col",{attrs:{span:t.span}},[n("div",{class:t.b("item",{add:!0}),on:{click:function(e){return t.rowAdd()}}},[n("i",{staticClass:"el-icon-plus"}),t._v(" "),n("span",[t._v("娣诲姞")])])]):t._e(),t._v(" "),t._l(t.data,(function(e,i){return n("el-col",{key:i,attrs:{span:t.span}},[n("div",{class:t.b("item"),on:{click:function(n){return t.rowClick(e,i)}}},[n("div",{class:t.b("body")},[n("div",{class:t.b("avatar")},[n("img",{attrs:{src:e[t.imgKey],alt:""}})]),t._v(" "),n("div",{class:t.b("detail")},[n("div",{class:t.b("title")},[t._v(t._s(e[t.titleKey]))]),t._v(" "),n("div",{class:t.b("info")},[t._v(t._s(e[t.infoKey]))])])]),t._v(" "),n("div",{class:t.b("menu")},[t._t("menu",null,{index:i,row:e})],2)])])}))],2)],1)}),[],!1,null,null,null).exports,gt=Object(i.a)({name:"code",props:{height:{type:Number,default:200},syntax:{type:String,default:"javascript"}},computed:{styleName:function(){return{height:this.setPx(this.height)}}},mounted:function(){window.hljs?window.hljs&&"function"==typeof window.hljs.highlightBlock&&window.hljs.highlightBlock(this.$refs.container):x.a.logs("hljs")}}),yt=Object(s.a)(gt,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:t.b()},[n("el-scrollbar",{style:t.styleName},[n("pre",[t._v("      "),n("code",{ref:"container",class:t.syntax},[t._v("\n        "),t._t("default"),t._v("\n      ")],2),t._v("\n    ")])])],1)}),[],!1,null,null,null).exports,_t=n(10),xt=n.n(_t);function wt(t){return(wt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var Ot,Ct=Object(i.a)({name:"chat",data:function(){return{upload:{box:!1,src:"",type:"",title:""},visible:!1,imgSrc:"",videoSrc:"",audioSrc:"",keys:"",show:!1,msg:""}},props:{beforeOpen:Function,tools:{type:Object,default:function(){return{img:!0,video:!0,file:!0}}},placeholder:{type:String,default:"璇疯緭鍏�..."},width:{type:[String,Number],default:320},height:{type:[String,Number],default:520},value:{type:String},notice:{type:Boolean,default:!0},audio:{type:Array,default:function(){return["https://www.helloweba.net/demo/notifysound/notify.ogg","https://www.helloweba.net/demo/notifysound/notify.mp3","https://www.helloweba.net/demo/notifysound/notify.wav"]}},config:{type:Object,default:function(){return{}}},keylist:{type:Array,default:function(){return[]}},list:{type:Array,default:function(){return[]}}},watch:{"upload.box":function(t){var e=this;t&&this.$nextTick((function(){e.$refs.form.clearValidate()}))},value:{handler:function(){this.msg=this.value},immediate:!0},msg:{handler:function(){this.$emit("input",this.msg)},immediate:!0}},computed:{heightStyleName:function(){return{height:this.setPx(this.height)}},widthStyleName:function(){return{width:this.setPx(this.width)}},msgActive:function(){return!this.validatenull(this.msg.replace(/[\r\n]/g,""))}},methods:{uploadSubmit:function(){var t=this;this.$refs.form.validate((function(e){e&&(t.upload.box=!1,t.$emit("submit",t.getDetail(t.upload)))}))},handleUpload:function(t){this.upload.type=t,this.upload.src="","img"===t?this.upload.title="鍥剧墖涓婁紶":"video"===t?this.upload.title="瑙嗛涓婁紶":"file"===t&&(this.upload.title="鏂囦欢涓婁紶"),this.upload.box=!0},handleClose:function(t){this.imgSrc=void 0,this.videoSrc=void 0,this.audioSrc=void 0,t()},addKey:function(){""!==this.keys&&(this.$emit("keyadd",this.keys),this.keys=""),this.visible=!1},sendKey:function(t){this.$emit("keysend",t)},getAudio:function(){this.$refs.chatAudio.play()},getNotification:function(t){var e=this,n=Notification||window.Notification;if(n){var i=function(){var n=new Notification(e.config.name,{body:t,icon:e.config.img});n.onshow=function(){e.getAudio(),setTimeout((function(){n.close()}),2500)},n.onclick=function(t){n.close()}},o=n.permission;"granted"===o?i():"denied"===o?console.log("鐢ㄦ埛鎷掔粷浜嗕綘!!!"):n.requestPermission((function(t){"granted"===t?i():console.log("鐢ㄦ埛鏃犳儏娈嬪繊鐨勬嫆缁濅簡浣�!!!")}))}},pushMsg:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=!0===e.mine,i=e.text||{},o=e.date,a={date:o||xt()().format("YYYY-MM-DD HH:mm:ss"),text:"object"!=wt(i)?{text:i}:i,mine:n,img:n?this.config.myImg:this.config.img,name:n?this.config.myName:this.config.name};this.list.push(a),setTimeout((function(){t.setScroll()}),50)},setScroll:function(t){var e=this;this.$nextTick((function(){e.$refs.main.scrollTop=t||e.$refs.main.scrollHeight}))},handleSend:function(){this.msgActive&&this.$emit("submit")},handleItemMsg:function(t){this.$emit("submit",t.ask)},handleDetail:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",n=e;return setTimeout((function(){t.$refs.content.forEach((function(e){for(var n=function(n){var i=e.children[n];0!=i.getAttribute("data-flag")&&(i.setAttribute("data-flag",0),i.onclick=function(){t.handleEvent(i.dataset)},"IMG"===i.tagName?(i.className="web__msg--img",i.src=i.getAttribute("data-src")):"VIDEO"===i.tagName?(i.className="web__msg--video",i.src=i.getAttribute("data-src")):"AUDIO"===i.tagName?(i.className="web__msg--audio",i.controls="controls",i.src=i.getAttribute("data-src")):"FILE"===i.tagName?(i.className="web__msg--file",i.innerHTML="<h2>File</h2><span>".concat(i.getAttribute("data-name"),"</span>")):"MAP"===i.tagName&&(i.className="web__msg--file web__msg--map",i.innerHTML="<h2>Map</h2><span>".concat(i.getAttribute("data-longitude")," , ").concat(i.getAttribute("data-latitude"),"<br />").concat(i.getAttribute("data-address"),"</span>")),t.setScroll())},i=0;i<e.children.length;i++)n(i)}))}),0),n},getDetail:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.type,n=t.src,i=t.name,o=t.longitude,a=t.latitude,r=t.address;return"img"===e?'<img data-type="IMG" data-src="'.concat(n,'"  />'):"video"===e?'<video data-type="VIDEO"  data-src="'.concat(n,'"></video>'):"audio"===e?'<audio data-type="AUDIO"  data-src="'.concat(n,'"></audio>'):"file"===e?'<file data-type="FILE" data-name="'.concat(i,'" data-src="').concat(n,'"></file>'):"map"===e?'<map data-type="MAP" data-src="'.concat(n,'" data-address="').concat(r,' "data-latitude="').concat(a,'" data-longitude="').concat(o,'"></map>'):void 0},handleEvent:function(t){var e=this,n=function(){"IMG"===t.type?(e.imgSrc=t.src,e.show=!0):"VIDEO"===t.type?(e.videoSrc=t.src,e.show=!0):"AUDIO"===t.type?(e.audioSrc=t.src,e.show=!0):"FILE"===t.type&&window.open(t.src)};"function"==typeof this.beforeOpen?this.beforeOpen(t,n):n()},rootSendMsg:function(t){this.pushMsg({text:t}),this.notice&&this.getNotification(t.text||t)}}}),kt=Object(s.a)(Ct,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:t.b(),style:t.heightStyleName,on:{keyup:function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:t.handleSend.apply(null,arguments)}}},[n("audio",{ref:"chatAudio"},[n("source",{attrs:{src:t.audio[0],type:"audio/ogg"}}),t._v(" "),n("source",{attrs:{src:t.audio[1],type:"audio/mpeg"}}),t._v(" "),n("source",{attrs:{src:t.audio[2],type:"audio/wav"}})]),t._v(" "),n("div",{staticClass:"web__logo"},[n("img",{staticClass:"web__logo-img",attrs:{src:t.config.img,alt:""}}),t._v(" "),n("div",{staticClass:"web__logo-info"},[n("p",{staticClass:"web__logo-name"},[t._v(t._s(t.config.name))]),t._v(" "),n("p",{staticClass:"web__logo-dept"},[t._v(t._s(t.config.dept))])]),t._v(" "),t._t("header")],2),t._v(" "),n("div",{staticClass:"web__content"},[n("div",{style:t.widthStyleName},[n("div",{ref:"main",staticClass:"web__main"},t._l(t.list,(function(e,i){return n("div",{key:i,staticClass:"web__main-item",class:{"web__main-item--mine":e.mine}},[n("div",{staticClass:"web__main-user"},[n("img",{attrs:{src:e.img}}),t._v(" "),n("cite",[t._v("\n              "+t._s(e.name)+"\n              "),n("i",[t._v(t._s(e.date))])])]),t._v(" "),n("div",{staticClass:"web__main-text"},[n("div",{staticClass:"web__main-arrow"}),t._v(" "),n("span",{ref:"content",refInFor:!0,domProps:{innerHTML:t._s(t.handleDetail(e.text.text))}}),t._v(" "),t.validatenull(e.text.list)?t._e():n("ul",{staticClass:" web__main-list"},t._l(e.text.list,(function(e,i){return n("li",{key:i,on:{click:function(n){return t.handleItemMsg(e)}}},[t._v(t._s(e.text))])})),0)])])})),0),t._v(" "),n("div",{staticClass:"web__footer",style:t.widthStyleName},[n("div",{staticClass:"web__tools"},[t.tools.img?n("i",{staticClass:"el-icon-picture-outline",on:{click:function(e){return t.handleUpload("img")}}}):t._e(),t._v(" "),t.tools.video?n("i",{staticClass:"el-icon-video-camera",on:{click:function(e){return t.handleUpload("video")}}}):t._e(),t._v(" "),t.tools.file?n("i",{staticClass:"el-icon-folder-opened",on:{click:function(e){return t.handleUpload("file")}}}):t._e()]),t._v(" "),n("div",{staticClass:"web__msg"},[n("textarea",{directives:[{name:"model",rawName:"v-model",value:t.msg,expression:"msg"}],staticClass:"web__msg-input",attrs:{rows:"2",placeholder:t.placeholder},domProps:{value:t.msg},on:{input:function(e){e.target.composing||(t.msg=e.target.value)}}}),t._v(" "),n("div",{staticClass:"web__msg-menu"},[n("el-dropdown",{staticClass:"web__msg-submit",attrs:{"split-button":"",type:"primary",size:"mini",trigger:"click"},on:{click:t.handleSend}},[t._v("\n              鍙戦�乗n              "),n("el-dropdown-menu",{attrs:{slot:"dropdown"},slot:"dropdown"},[n("el-dropdown-item",[n("el-popover",{attrs:{placement:"top",width:"160"},model:{value:t.visible,callback:function(e){t.visible=e},expression:"visible"}},[n("el-input",{staticStyle:{"margin-bottom":"10px"},attrs:{size:"mini",rows:3,"show-word-limit":"",maxlength:"100",placeholder:"璇疯緭鍏ュ揩鎹峰洖澶嶈",type:"textarea"},model:{value:t.keys,callback:function(e){t.keys=e},expression:"keys"}}),t._v(" "),n("div",{staticStyle:{"text-align":"right",margin:"0"}},[n("el-button",{attrs:{size:"mini",type:"text"},on:{click:function(e){t.visible=!1}}},[t._v("鍙栨秷")]),t._v(" "),n("el-button",{attrs:{type:"primary",size:"mini"},on:{click:t.addKey}},[t._v("纭畾")])],1),t._v(" "),n("el-button",{attrs:{slot:"reference",type:"text",icon:"el-icon-plus"},slot:"reference"})],1)],1),t._v(" "),n("el-scrollbar",{staticStyle:{height:"100px"}},t._l(t.keylist,(function(e,i){return n("el-dropdown-item",{key:i,nativeOn:{click:function(n){return t.sendKey(e)}}},[n("el-tooltip",{attrs:{effect:"dark",content:e,placement:"top"}},[n("span",[t._v(" "+t._s(e.substr(0,10))+t._s(e.length>10?"...":""))])])],1)})),1)],1)],1)],1)])])]),t._v(" "),t._t("default")],2),t._v(" "),n("el-dialog",{attrs:{title:t.upload.title,"append-to-body":"",visible:t.upload.box,width:"30%"},on:{"update:visible":function(e){return t.$set(t.upload,"box",e)}}},[n("el-form",{ref:"form",attrs:{model:t.upload}},[n("el-form-item",{attrs:{prop:"src",rules:[{required:!0,message:"鍦板潃涓嶈兘涓虹┖"}]}},[n("el-input",{staticStyle:{"margin-bottom":"10px"},attrs:{size:"mini",rows:4,"show-word-limit":"",maxlength:"100",placeholder:"璇疯緭鍏ュ湴鍧�",type:"textarea"},model:{value:t.upload.src,callback:function(e){t.$set(t.upload,"src",e)},expression:"upload.src"}})],1)],1),t._v(" "),n("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[n("el-button",{attrs:{size:"small"},on:{click:function(e){t.upload.box=!1}}},[t._v("鍙� 娑�")]),t._v(" "),n("el-button",{attrs:{type:"primary",size:"small"},on:{click:t.uploadSubmit}},[t._v("纭� 瀹�")])],1)],1),t._v(" "),n("el-dialog",{staticClass:"web__dialog",attrs:{visible:t.show,width:"40%","append-to-body":"","before-close":t.handleClose},on:{"update:visible":function(e){t.show=e}}},[t.imgSrc?n("img",{staticStyle:{width:"100%","object-fit":"cover"},attrs:{src:t.imgSrc}}):t._e(),t._v(" "),t.videoSrc?n("video",{staticStyle:{width:"100%","object-fit":"cover"},attrs:{src:t.videoSrc,controls:"controls"}}):t._e(),t._v(" "),t.audioSrc?n("audio",{staticStyle:{width:"100%","object-fit":"cover"},attrs:{src:t.audioSrc,controls:"controls"}}):t._e()])],1)}),[],!1,null,null,null).exports,St={avatar:"avatar",author:"author",body:"body"},Et=Object(i.a)({name:"comment",props:{reverse:{type:Boolean,default:!1},data:{type:Object,default:function(){return{}}},props:{type:Object,default:function(){return St}},option:{type:Object,default:function(){return{}}}},computed:{avatarKey:function(){return this.props.avatar||St.avatar},authorKey:function(){return this.props.author||St.author},bodyKey:function(){return this.props.body||St.body},avatar:function(){return this.data[this.avatarKey]},author:function(){return this.data[this.authorKey]},body:function(){return this.data[this.bodyKey]}},mounted:function(){}}),jt=Object(s.a)(Et,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:t.b({reverse:t.reverse})},[n("img",{class:t.b("avatar"),attrs:{src:t.avatar,alt:""}}),t._v(" "),n("div",{class:t.b("main")},[n("div",{class:t.b("header")},[t.author?n("div",{class:t.b("author"),domProps:{textContent:t._s(t.author)}}):t._e(),t._v(" "),t._t("default")],2),t._v(" "),t.body?n("div",{class:t.b("body"),domProps:{innerHTML:t._s(t.body)}}):t._e()])])}),[],!1,null,null,null).exports,$t=n(16).a,Dt=Object(s.a)($t,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:[t.b(),{"avue--detail":t.isDetail}],style:{width:t.setPx(t.parentOption.formWidth,"100%")}},[n("el-form",{ref:"form",attrs:{"status-icon":t.parentOption.statusIcon,model:t.form,"label-suffix":t.labelSuffix,size:t.$AVUE.formSize||t.controlSize,"label-position":t.parentOption.labelPosition,"label-width":t.setPx(t.parentOption.labelWidth,t.labelWidth)},nativeOn:{submit:function(t){t.preventDefault()}}},[n("el-row",{class:{"avue-form__tabs":t.isTabs},attrs:{span:24}},[t._l(t.columnOption,(function(e,i){return n("avue-group",{key:e.prop,attrs:{tabs:t.isTabs,arrow:e.arrow,collapse:e.collapse,display:t.vaildDisplay(e),icon:e.icon,index:i,header:!t.isTabs,active:t.activeName,label:e.label},on:{change:t.handleGroupClick}},[t.isTabs&&1==i?n("el-tabs",{class:t.b("tabs"),attrs:{slot:"tabs",type:t.tabsType},on:{"tab-click":t.handleTabClick},slot:"tabs",model:{value:t.activeName,callback:function(e){t.activeName=e},expression:"activeName"}},[t._l(t.columnOption,(function(e,i){return[t.vaildDisplay(e)&&0!=i?n("el-tab-pane",{key:i,attrs:{name:i+""}},[n("span",{attrs:{slot:"label"},slot:"label"},[t.getSlotName(e,"H",t.$scopedSlots)?t._t(t.getSlotName(e,"H"),null,{column:t.column}):[n("i",{class:e.icon},[t._v("聽")]),t._v("\n                  "+t._s(e.label)+"\n                ")]],2)]):t._e()]}))],2):t._e(),t._v(" "),t.getSlotName(e,"H",t.$scopedSlots)?n("template",{slot:"header"},[t._t(t.getSlotName(e,"H"),null,{column:e})],2):t._e(),t._v(" "),n("div",{directives:[{name:"show",rawName:"v-show",value:t.isGroupShow(e,i),expression:"isGroupShow(item,index)"}],class:t.b("group",{flex:t.vaildData(e.flex,!0)})},[t._l(e.column,(function(i,o){return[t.vaildDisplay(i)?n("el-col",{key:o,class:[t.b("row"),{"avue--detail avue--detail__column":t.vaildDetail(i)},i.className],style:{paddingLeft:t.gutter,paddingRight:t.gutter},attrs:{span:t.getSpan(i),md:t.getSpan(i),sm:i.smSpan||e.smSpan||12,xs:i.xsSpan||e.xmSpan||24,offset:i.offset||e.offset||0}},[n("el-form-item",{class:t.b("item--"+(i.labelPosition||e.labelPosition||"")),attrs:{prop:i.prop,label:i.label,rules:i.rules,"label-position":i.labelPosition||e.labelPosition||t.parentOption.labelPosition,"label-width":t.getLabelWidth(i,e)},scopedSlots:t._u([{key:"error",fn:function(e){return t.getSlotName(i,"E",t.$scopedSlots)?[t._t(t.getSlotName(i,"E"),null,null,Object.assign(e,{column:i,value:t.form[i.prop],readonly:t.readonly||i.readonly,disabled:t.getDisabled(i),size:i.size||t.controlSize,dic:t.DIC[i.prop]}))]:void 0}}],null,!0)},[t.getSlotName(i,"L",t.$scopedSlots)?n("template",{slot:"label"},[t._t(t.getSlotName(i,"L"),null,{column:i,value:t.form[i.prop],readonly:i.readonly||t.readonly,disabled:t.getDisabled(i),size:i.size||t.controlSize,dic:t.DIC[i.prop]})],2):i.labelTip?n("template",{slot:"label"},[n("el-tooltip",{staticClass:"item",attrs:{effect:"dark",placement:i.labelTipPlacement||"top-start"}},[n("div",{attrs:{slot:"content"},domProps:{innerHTML:t._s(i.labelTip)},slot:"content"}),t._v(" "),n("i",{staticClass:"el-icon-info"})]),t._v(" "),n("span",[t._v(" "+t._s(i.label)+t._s(t.labelSuffix))])],1):t._e(),t._v(" "),t._v(" "),n(t.validTip(i)?"div":"elTooltip",{tag:"component",attrs:{disabled:t.validTip(i),content:t.vaildData(i.tip,t.getPlaceholder(i)),placement:i.tipPlacement}},[t.$scopedSlots[i.prop]?t._t(i.prop,null,{value:t.form[i.prop],column:i,label:t.form["$"+i.prop],size:i.size||t.controlSize,readonly:t.readonly||i.readonly,disabled:t.getDisabled(i),dic:t.DIC[i.prop]}):n("form-temp",t._b({ref:i.prop,refInFor:!0,attrs:{column:i,dic:t.DIC[i.prop],props:t.parentOption.props,propsHttp:t.parentOption.propsHttp,disabled:t.getDisabled(i),readonly:i.readonly||t.readonly,enter:t.parentOption.enter,size:t.parentOption.size,"column-slot":t.columnSlot},on:{enter:t.submit,change:function(n){return t.propChange(e.column,i)}},scopedSlots:t._u([t._l(t.getSlotName(i,"T",t.$scopedSlots)?[i]:[],(function(e){return{key:t.getSlotName(i,"T"),fn:function(n){return[t._t(t.getSlotName(e,"T"),null,null,n)]}}})),t._l(t.columnSlot,(function(e){return{key:e,fn:function(n){return[t._t(e,null,null,n)]}}}))],null,!0),model:{value:t.form[i.prop],callback:function(e){t.$set(t.form,i.prop,e)},expression:"form[column.prop]"}},"form-temp",t.$uploadFun(i),!1))],2)],2)],1):t._e(),t._v(" "),t.vaildDisplay(i)&&i.row&&24!==i.span&&i.count?n("div",{key:"line"+o,class:t.b("line"),style:{width:i.count/24*100+"%"}}):t._e()]})),t._v(" "),t.isDetail||t.isMenu?t._e():n("form-menu",{scopedSlots:t._u([{key:"menuForm",fn:function(e){return[t._t("menuForm",null,null,e)]}}],null,!0)})],2)],2)})),t._v(" "),!t.isDetail&&t.isMenu?n("form-menu",{scopedSlots:t._u([{key:"menuForm",fn:function(e){return[t._t("menuForm",null,null,e)]}}],null,!0)}):t._e()],2)],1)],1)}),[],!1,null,null,null).exports,At=function(){return{mixins:[E.a],data:function(){return{stringMode:!1,name:"",text:void 0,propsHttpDefault:B.d,propsDefault:B.e}},props:{blur:Function,focus:Function,change:Function,click:Function,typeformat:Function,control:Function,separator:{type:String,default:B.g},params:{type:Object,default:function(){return{}}},listType:{type:String},tableData:{type:Object},value:{},column:{type:Object,default:function(){return{}}},label:{type:String,default:""},readonly:{type:Boolean,default:!1},size:{type:String,default:""},tip:{type:String,default:""},disabled:{type:Boolean,default:!1},dataType:{type:String},clearable:{type:Boolean,default:!0},type:{type:String,default:""},dicUrl:{type:String,default:""},dicMethod:{type:String,default:""},dicFormatter:Function,dicQuery:{type:Object,default:function(){return{}}},dic:{type:Array,default:function(){return[]}},placeholder:{type:String,default:""},rules:{type:Array},min:{type:Number},max:{type:Number},multiple:{type:Boolean,default:!1},button:{type:Boolean,default:!1},group:{type:Boolean,default:!1},row:{type:Boolean,default:!1},prop:{type:String,default:""},border:{type:Boolean,default:!1},popperClass:{type:String},propsHttp:{type:Object,default:function(){return B.d}},props:{type:Object,default:function(){return B.e}}},watch:{text:{handler:function(t){this.handleChange(t)}},value:{handler:function(){this.initVal()}}},computed:{clearableVal:function(){return!this.disabled&&this.clearable},componentName:function(){return"".concat("el","-").concat(this.name).concat(this.button?"-button":"")},required:function(){return!this.validatenull(this.rules)},isArray:function(){return"array"===this.dataType},isString:function(){return"string"===this.dataType},isNumber:function(){return"number"===this.dataType},nameKey:function(){return this.propsHttp.name||this.propsHttpDefault.name},urlKey:function(){return this.propsHttp.url||this.propsHttpDefault.url},resKey:function(){return this.propsHttp.res||this.propsHttpDefault.res},groupsKey:function(){return this.props.groups||this.propsDefault.groups},valueKey:function(){return this.props.value||this.propsDefault.value},descKey:function(){return this.props.desc||this.propsDefault.desc},leafKey:function(){return this.props.leaf||this.propsDefault.leaf},labelKey:function(){return this.props.label||this.propsDefault.label},childrenKey:function(){return this.props.children||this.propsDefault.children},disabledKey:function(){return this.props.disabled||this.propsDefault.disabled},idKey:function(){return this.props.id||this.propsDefault.id}},created:function(){this.initVal()}}},Tt=function(){return{methods:{bindEvent:function(t,e){e=Object.assign(e,{column:this.column},this.tableData),"function"==typeof this[t]&&("change"==t?1!=this.column.cell&&this[t](e):this[t](e)),this.$emit(t,e)},initVal:function(){this.stringMode="string"==typeof this.value,this.text=Object($.h)(this.value,this.column)},getLabelText:function(t){return this.validatenull(t)?"":"function"==typeof this.typeformat?this.typeformat(t,this.labelKey,this.valueKey):t[this.labelKey]},handleFocus:function(t){this.bindEvent("focus",{value:this.value,event:t})},handleBlur:function(t){this.bindEvent("blur",{value:this.value,event:t})},handleClick:function(t){this.bindEvent("click",{value:this.value,event:t})},handleChange:function(t){var e=t;(this.isString||this.isNumber||this.stringMode||"picture-img"===this.listType)&&Array.isArray(t)&&(e=t.join(this.separator||B.g)),this.bindEvent("change",{value:e}),this.$emit("input",e)}}}},Pt=Object(i.a)({name:"checkbox",props:{all:{type:Boolean,default:!1}},mixins:[At(),Tt()],data:function(){return{checkAll:!1,isIndeterminate:!1,name:"checkbox"}},watch:{dic:function(){this.handleCheckChange(this.text)},text:{handler:function(t){this.handleChange(t),this.handleCheckChange(t)},immediate:!0}},created:function(){},mounted:function(){},methods:{handleCheckAll:function(t){var e=this;this.all&&(this.text=t?this.dic.map((function(t){return t[e.valueKey]})):[],this.isIndeterminate=!1)},handleCheckChange:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];if(this.all){var e=t.length,n=this.dic.length;this.checkAll=e===n,this.isIndeterminate=e>0&&e<n}}}}),Bt=Object(s.a)(Pt,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:t.b()},[t.all?n("el-checkbox",{class:t.b("all"),attrs:{disabled:t.disabled,indeterminate:t.isIndeterminate},on:{change:t.handleCheckAll},model:{value:t.checkAll,callback:function(e){t.checkAll=e},expression:"checkAll"}},[t._v("鍏ㄩ��")]):t._e(),t._v(" "),n("el-checkbox-group",{attrs:{disabled:t.disabled,size:t.size,min:t.min,max:t.max},on:{change:t.handleCheckChange},nativeOn:{click:function(e){return t.handleClick.apply(null,arguments)}},model:{value:t.text,callback:function(e){t.text=e},expression:"text"}},t._l(t.dic,(function(e,i){return n(t.componentName,{key:i,tag:"component",attrs:{label:e[t.valueKey],border:t.border,size:t.size,readonly:t.readonly,disabled:e[t.disabledKey]}},[t._v(t._s(e[t.labelKey])+"\n    ")])})),1)],1)}),[],!1,null,null,null).exports,Mt=Object(i.a)({name:"date",mixins:[At(),Tt(),j.a],data:function(){return{text:"",menu:[]}},props:{editable:{type:Boolean,default:!0},unlinkPanels:{type:Boolean,default:!1},value:{},startPlaceholder:{type:String},endPlaceholder:{type:String},rangeSeparator:{type:String},defaultValue:{type:[String,Array]},defaultTime:{type:[String,Array]},pickerOptions:{type:Object,default:function(){}},type:{type:String,default:"date"},valueFormat:{},format:{}}}),Lt=Object(s.a)(Mt,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:t.b()},[n("el-date-picker",{attrs:{type:t.type,"popper-class":t.popperClass,size:t.size,editable:t.editable,"unlink-panels":t.unlinkPanels,readonly:t.readonly,"default-value":t.defaultValue,"default-time":t.defaultTime,"range-separator":t.rangeSeparator,"start-placeholder":t.startPlaceholder,"end-placeholder":t.endPlaceholder,format:t.format,clearable:t.clearableVal,"picker-options":t.pickerOptions,"value-format":t.valueFormat,placeholder:t.placeholder,disabled:t.disabled},on:{blur:t.handleBlur,focus:t.handleFocus},nativeOn:{click:function(e){return t.handleClick.apply(null,arguments)}},model:{value:t.text,callback:function(e){t.text=e},expression:"text"}})],1)}),[],!1,null,null,null).exports,It=Object(i.a)({name:"draggable",props:{index:{type:[String,Number]},mask:{type:Boolean,default:!0},scale:{type:Number,default:1},readonly:{type:Boolean,default:!1},resize:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1},lock:{type:Boolean,default:!1},step:{type:Number,default:1},zIndex:{type:[Number,String],default:1},left:{type:Number,default:0},top:{type:Number,default:0},width:{type:Number},height:{type:Number}},data:function(){return{first:!0,value:"",baseWidth:0,baseHeight:0,baseLeft:0,baseTop:0,children:{},moveActive:!1,overActive:!1,rangeActive:!1,active:!1,keyDown:null,rangeList:[{classname:"left"},{classname:"right"},{classname:"top"},{classname:"bottom"},{classname:"top-left"},{classname:"top-right"},{classname:"bottom-left"},{classname:"bottom-right"}]}},computed:{scaleVal:function(){return this.scale},styleMenuName:function(){return{transformOrigin:"0 0",transform:"scale(".concat(this.scaleVal,")")}},styleLineName:function(){return{borderWidth:this.setPx(this.scaleVal)}},styleRangeName:function(){var t=10*this.scaleVal;return{width:this.setPx(t),height:this.setPx(t)}},styleLabelName:function(){return{fontSize:this.setPx(18*this.scaleVal)}},styleName:function(){var t=this;return Object.assign(t.active?Object.assign({zIndex:9999},t.styleLineName):{zIndex:t.zIndex},{top:this.setPx(this.baseTop),left:this.setPx(this.baseLeft),width:this.setPx(this.baseWidth),height:this.setPx(this.baseHeight)})}},watch:{active:function(t){t?this.handleKeydown():document.onkeydown=this.keyDown},width:function(t){this.baseWidth=Object(D.n)(t)||this.children.offsetWidth},height:function(t){this.baseHeight=Object(D.n)(t)||this.children.offsetHeight},left:function(t){this.baseLeft=Object(D.n)(t)},top:function(t){this.baseTop=Object(D.n)(t)},baseWidth:function(t){this.$refs.wrapper.style.width=this.setPx(t),this.resize&&this.children.style&&(this.children.style.width=this.setPx(t))},baseHeight:function(t){this.$refs.wrapper.style.height=this.setPx(t),this.resize&&this.children.style&&(this.children.style.height=this.setPx(t))},baseLeft:function(t,e){this.first||this.setMove(t-e,0)},baseTop:function(t,e){this.first||this.setMove(0,t-e)}},mounted:function(){this.init()},methods:{init:function(){var t=this;this.children=this.$refs.item.firstChild,this.baseWidth=Object(D.n)(this.width)||this.children.offsetWidth,this.baseHeight=Object(D.n)(this.height)||this.children.offsetHeight,this.baseLeft=Object(D.n)(this.left),this.baseTop=Object(D.n)(this.top),this.keyDown=document.onkeydown,this.$nextTick((function(){t.first=!1}))},setMove:function(t,e){this.$emit("move",{index:this.index,left:t,top:e})},setLeft:function(t){this.baseLeft=t},setTop:function(t){this.baseTop=t},getRangeStyle:function(t){var e=this,n=10*this.scaleVal/2,i={};return t.split("-").forEach((function(t){i[t]=e.setPx(-n)})),i},setOverActive:function(t){this.overActive=t},setActive:function(t){this.active=t},rangeMove:function(t,e){var n=this;if(!this.disabled&&!this.lock){var i,o,a,r,s,l;this.rangeActive=!0,this.handleMouseDown();var c=t.clientX,u=t.clientY;document.onmousemove=function(t){n.moveActive=!0,"right"===e?(i=!0,o=!1):"left"===e?(i=!0,a=!0,s=!0,o=!1):"top"===e?(i=!1,o=!0,r=!0,l=!0):"bottom"===e?(i=!1,o=!0):"bottom-right"===e?(i=!0,o=!0):"bottom-left"===e?(i=!0,o=!0,a=!0,s=!0):"top-right"===e?(i=!0,o=!0,r=!0,l=!0):"top-left"===e&&(i=!0,o=!0,a=!0,s=!0,r=!0,l=!0);var d=t.clientX-c,p=t.clientY-u;if(c=t.clientX,u=t.clientY,i){var h=d*n.step;s&&(h=-h),a&&(n.baseLeft=Object(D.n)(n.baseLeft-h)),n.baseWidth=Object(D.n)(n.baseWidth+h)}if(o){var f=p*n.step;l&&(f=-f),r&&(n.baseTop=Object(D.n)(n.baseTop-f)),n.baseHeight=Object(D.n)(n.baseHeight+f)}},this.handleClear()}},handleOut:function(){this.overActive=!1,this.$emit("out",{index:this.index,width:this.baseWidth,height:this.baseHeight,left:this.baseLeft,top:this.baseTop})},handleOver:function(){this.disabled||(this.overActive=!0,this.$emit("over",{index:this.index,width:this.baseWidth,height:this.baseHeight,left:this.baseLeft,top:this.baseTop}))},handleMove:function(t){var e=this;if(!this.disabled&&!this.lock){setTimeout((function(){e.$refs.input.focus()})),this.active=!0,this.handleMouseDown();var n=t.clientX,i=t.clientY;document.onmousemove=function(t){var o=t.clientX-n,a=t.clientY-i;n=t.clientX,i=t.clientY,e.baseLeft=Object(D.n)(e.baseLeft+o*e.step),e.baseTop=Object(D.n)(e.baseTop+a*e.step)},this.handleClear()}},handleClear:function(){var t=this;document.onmouseup=function(){document.onmousemove=null,document.onmouseup=null,t.handleMouseUp()}},handleKeydown:function(){var t=arguments,e=this;document.onkeydown=function(n){var i=n||window.event||t.callee.caller.arguments[0],o=1*e.step;e.$refs.input.focused&&(i&&38==i.keyCode?e.baseTop=Object(D.n)(e.baseTop-o):i&&37==i.keyCode?e.baseLeft=Object(D.n)(e.baseLeft-o):i&&40==i.keyCode?e.baseTop=Object(D.n)(e.baseTop+o):i&&39==i.keyCode&&(e.baseLeft=Object(D.n)(e.baseLeft+o)),n.stopPropagation(),n.preventDefault(),e.$emit("blur",{index:e.index,width:e.baseWidth,height:e.baseHeight,left:e.baseLeft,top:e.baseTop}),e.keyDown&&e.keyDown(n))}},handleMouseDown:function(t){this.moveActive=!0,this.$emit("focus",{index:this.index,width:this.baseWidth,height:this.baseHeight,left:this.baseLeft,top:this.baseTop})},handleMouseUp:function(){this.moveActive=!1,this.rangeActive=!1,this.$emit("blur",{index:this.index,width:this.baseWidth,height:this.baseHeight,left:this.baseLeft,top:this.baseTop})}}}),Nt=Object(s.a)(It,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:t.b({active:(t.active||t.overActive)&&!t.readonly,move:t.moveActive,click:t.disabled}),style:t.styleName,on:{mousedown:function(e){return e.stopPropagation(),t.handleMove.apply(null,arguments)},mouseover:function(e){return e.stopPropagation(),t.handleOver.apply(null,arguments)},mouseout:function(e){return e.stopPropagation(),t.handleOut.apply(null,arguments)}}},[n("el-input",{ref:"input",class:t.b("focus"),model:{value:t.value,callback:function(e){t.value=e},expression:"value"}}),t._v(" "),n("div",{ref:"wrapper",class:t.b("wrapper")},[(t.active||t.overActive||t.moveActive)&&!t.readonly?[n("div",{class:t.b("line",["left"]),style:t.styleLineName}),t._v(" "),n("div",{class:t.b("line",["top"]),style:t.styleLineName}),t._v(" "),n("div",{class:t.b("line",["label"]),style:t.styleLabelName},[t._v(t._s(t.baseLeft)+","+t._s(t.baseTop))])]:t._e(),t._v(" "),t._l(t.rangeList,(function(e,i){return t.readonly?t._e():[t.active?n("div",{key:i,class:t.b("range",[e.classname]),style:[t.styleRangeName,t.getRangeStyle(e.classname)],on:{mousedown:function(n){return n.stopPropagation(),t.rangeMove(n,e.classname)}}}):t._e()]})),t._v(" "),n("div",{directives:[{name:"show",rawName:"v-show",value:t.active||t.overActive,expression:"active || overActive"}],class:t.b("menu"),style:t.styleMenuName},[t._t("menu",null,{zIndex:t.zIndex,index:t.index})],2),t._v(" "),n("div",{ref:"item",class:t.b("item")},[t._t("default")],2),t._v(" "),!t.disabled&&t.mask?n("div",{class:t.b("mask")}):t._e()],2)],1)}),[],!1,null,null,null).exports,zt=Object(i.a)({name:"flow",props:{active:[String,Number],index:[String,Number],node:Object},data:function(){return{mouseEnter:!1}},computed:{flowNodeContainer:{get:function(){return{position:"absolute",width:"200px",top:this.setPx(this.node.top),left:this.setPx(this.node.left),boxShadow:this.mouseEnter?"#66a6e0 0px 0px 12px 0px":"",backgroundColor:"transparent"}}}},methods:{showDelete:function(){this.mouseEnter=!0},hideDelete:function(){this.mouseEnter=!1},changeNodeSite:function(){this.node.left==this.$refs.node.style.left&&this.node.top==this.$refs.node.style.top||this.$emit("changeNodeSite",{index:this.index,left:Number(this.$refs.node.style.left.replace("px","")),top:Number(this.$refs.node.style.top.replace("px",""))})}}}),Ft=Object(s.a)(zt,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{ref:"node",style:t.flowNodeContainer,attrs:{left:t.node.left,top:t.node.top,disabled:"",mask:!1},on:{mouseenter:t.showDelete,mouseleave:t.hideDelete,mouseup:t.changeNodeSite}},[n("div",{class:t.b("node",{active:t.active===t.node.id})},[n("div",{class:t.b("node-header")},[n("i",{staticClass:"el-icon-rank",class:t.b("node-drag")}),t._v(" "),t._t("header",null,{node:t.node})],2),t._v(" "),n("div",{class:t.b("node-body")},[t._t("default",null,{node:t.node})],2)])])}),[],!1,null,null,null).exports,Ht=Object(i.a)({name:"flow",components:{flowNode:Ft},data:function(){return{active:"",jsPlumb:{},id:"",jsplumbSetting:{Anchors:["Top","TopCenter","TopRight","TopLeft","Right","RightMiddle","Bottom","BottomCenter","BottomRight","BottomLeft","Left","LeftMiddle"],Container:"",Connector:"Flowchart",ConnectionsDetachable:!1,DeleteEndpointsOnDetach:!1,Endpoint:["Rectangle",{height:10,width:10}],EndpointStyle:{fill:"rgba(255,255,255,0)",outlineWidth:1},LogEnabled:!0,PaintStyle:{stroke:"black",strokeWidth:3},Overlays:[["Arrow",{width:12,length:12,location:1}]],RenderMode:"svg"},jsplumbConnectOptions:{isSource:!0,isTarget:!0,anchor:"Continuous"},jsplumbSourceOptions:{filter:".avue-flow__node-drag",filterExclude:!1,anchor:"Continuous",allowLoopback:!1},jsplumbTargetOptions:{filter:".avue-flow__node-drag",filterExclude:!1,anchor:"Continuous",allowLoopback:!1},loadEasyFlowFinish:!1}},props:{value:{type:String},option:{type:Object},width:{type:[Number,String],default:"100%"},height:{type:[Number,String],default:"100%"}},watch:{value:{handler:function(){this.active=this.value},immediate:!0},active:function(t){this.$emit("input",t)}},created:function(){this.id=Object(D.s)(),this.jsplumbSetting.Container=this.id},mounted:function(){this.init()},computed:{styleName:function(){return{position:"relative",width:this.setPx(this.width),height:this.setPx(this.height)}}},methods:{init:function(){var t=this;this.jsPlumb=jsPlumb.getInstance(),this.$nextTick((function(){t.jsPlumbInit()}))},handleClick:function(t){this.$emit("click",t)},hasLine:function(t,e){for(var n=0;n<this.data.lineList.length;n++){var i=this.data.lineList[n];if(i.from===t&&i.to===e)return!0}return!1},hashOppositeLine:function(t,e){return this.hasLine(e,t)},deleteLine:function(t,e){this.option.lineList=this.option.lineList.filter((function(n){return n.from!==t&&n.to!==e}))},changeLine:function(t,e){this.deleteLine(t,e)},changeNodeSite:function(t){for(var e=t.index,n=t.left,i=t.top,o=0;o<this.option.nodeList.length;o++){this.option.nodeList[o];o===e&&(this.$set(this.option.nodeList[o],"left",n),this.$set(this.option.nodeList[o],"top",i))}},deleteNode:function(t){var e=this;return this.$confirm("纭畾瑕佸垹闄よ妭鐐�"+t+"?","鎻愮ず",{confirmButtonText:"纭畾",cancelButtonText:"鍙栨秷",type:"warning",closeOnClickModal:!1}).then((function(){e.option.nodeList.forEach((function(e){e.id===t&&(e.display=!0)})),e.$nextTick((function(){this.jsPlumb.removeAllEndpoints(t)}))})).catch((function(){})),!0},addNode:function(t){var e=this.option.nodeList.length,n="node"+e;this.option.nodeList.push({id:"node"+e,name:t,left:0,top:0}),this.$nextTick((function(){this.jsPlumb.makeSource(n,this.jsplumbSourceOptions),this.jsPlumb.makeTarget(n,this.jsplumbTargetOptions),this.jsPlumb.draggable(n,{containment:"parent"})}))},loadEasyFlow:function(){for(var t=0;t<this.option.nodeList.length;t++){var e=this.option.nodeList[t];this.jsPlumb.makeSource(e.id,this.jsplumbSourceOptions),this.jsPlumb.makeTarget(e.id,this.jsplumbTargetOptions),this.jsPlumb.draggable(e.id)}for(t=0;t<this.option.lineList.length;t++){var n=this.option.lineList[t];this.jsPlumb.connect({source:n.from,target:n.to},this.jsplumbConnectOptions)}this.$nextTick((function(){this.loadEasyFlowFinish=!0}))},jsPlumbInit:function(){var t=this;this.jsPlumb.ready((function(){t.jsPlumb.importDefaults(t.jsplumbSetting),t.jsPlumb.setSuspendDrawing(!1,!0),t.loadEasyFlow(),t.jsPlumb.bind("click",(function(e,n){console.log("click",e),t.$confirm("纭畾鍒犻櫎鎵�鐐瑰嚮鐨勭嚎鍚�?","鎻愮ず",{confirmButtonText:"纭畾",cancelButtonText:"鍙栨秷",type:"warning"}).then((function(){t.jsPlumb.deleteConnection(e)})).catch((function(){}))})),t.jsPlumb.bind("connection",(function(e){console.log("connection",e);var n=e.source.id,i=e.target.id;t.loadEasyFlowFinish&&t.option.lineList.push({from:n,to:i})})),t.jsPlumb.bind("connectionDetached",(function(e){console.log("connectionDetached",e),t.deleteLine(e.sourceId,e.targetId)})),t.jsPlumb.bind("connectionMoved",(function(e){console.log("connectionMoved",e),t.changeLine(e.originalSourceId,e.originalTargetId)})),t.jsPlumb.bind("contextmenu",(function(t){console.log("contextmenu",t)})),t.jsPlumb.bind("beforeDrop",(function(e){console.log("beforeDrop",e);var n=e.sourceId,i=e.targetId;return n===i?(t.$message.error("涓嶈兘杩炴帴鑷繁"),!1):t.hasLine(n,i)?(t.$message.error("涓嶈兘閲嶅杩炵嚎"),!1):!t.hashOppositeLine(n,i)||(t.$message.error("涓嶈兘鍥炵幆鍝�"),!1)})),t.jsPlumb.bind("beforeDetach",(function(t){console.log("beforeDetach",t)}))}))}}}),Kt=Object(s.a)(Ht,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:t.b(),style:t.styleName},[n("div",{style:t.styleName,attrs:{id:t.id}},[n("div",{staticClass:"avue-grid"}),t._v(" "),t._l(t.option.nodeList,(function(e,i){return e.display?t._e():n("flow-node",{key:i,attrs:{node:e,id:e.id,index:i,active:t.active},on:{changeNodeSite:t.changeNodeSite},nativeOn:{click:function(n){return t.handleClick(e)}},scopedSlots:t._u([{key:"header",fn:function(e){var n=e.node;return[t._t("header",null,{node:n})]}}],null,!0)},[t._v(" "),t._t("default",null,{node:e})],2)}))],2)])}),[],!1,null,null,null).exports,Rt=Object(i.a)({name:"group",data:function(){return{activeName:""}},props:{arrow:{type:Boolean,default:!0},collapse:{type:Boolean,default:!0},header:{type:Boolean,default:!0},icon:{type:String},display:{type:Boolean,default:!0},card:{type:Boolean,default:!1},label:{type:String}},watch:{text:function(t){this.activeName=[t]}},computed:{text:function(){return this.collapse?1:0},isHeader:function(){return this.$slots.header&&this.header||(this.label||this.icon)&&this.header}},created:function(){this.activeName=[this.text]},methods:{handleChange:function(t){this.$emit("change",t)}}}),Wt=Object(s.a)(Rt,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return t.display?n("div",{class:[t.b({header:!t.isHeader,arrow:!t.arrow})]},[t._t("tabs"),t._v(" "),n("el-collapse",{attrs:{value:t.text},on:{change:t.handleChange},model:{value:t.activeName,callback:function(e){t.activeName=e},expression:"activeName"}},[n("el-collapse-item",{attrs:{name:1,disabled:!t.arrow}},[t.$slots.header&&t.header?n("div",{class:[t.b("header")],attrs:{slot:"title"},slot:"title"},[t._t("header")],2):(t.label||t.icon)&&t.header?n("div",{class:[t.b("header")],attrs:{slot:"title"},slot:"title"},[t.icon?n("i",{class:[t.icon,t.b("icon")]}):t._e(),t._v(" "),t.label?n("h1",{class:t.b("title")},[t._v(t._s(t.label))]):t._e()]):t._e(),t._v(" "),t._t("default")],2)],1)],2):t._e()}),[],!1,null,null,null).exports,Ut={img:"img",title:"title",subtile:"title",tag:"tag",status:"status"},Vt=Object(i.a)({name:"notice",props:{finish:{type:Boolean,default:!1},option:{type:Object,default:function(){return{}}},data:{type:Array,default:function(){return[]}}},data:function(){return{page:1,loading:!1}},computed:{props:function(){return this.option.props||Ut},imgKey:function(){return this.props.img||Ut.img},titleKey:function(){return this.props.title||Ut.title},subtitleKey:function(){return this.props.subtitle||Ut.subtitle},tagKey:function(){return this.props.tag||Ut.tag},statusKey:function(){return this.props.status||Ut.status}},methods:{click:function(t){this.$emit("click",t)},handleClick:function(){var t=this;this.loading=!0;this.page++,this.$emit("page-change",this.page,(function(){t.loading=!1}))},getType:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return 0==t?"info":1==t?"":2==t?"warning":3==t?"danger":4==t?"success":void 0}}}),Yt=Object(s.a)(Vt,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:t.b()},[t._l(t.data,(function(e,i){return n("div",{key:i,class:t.b("item"),on:{click:function(n){return t.click(e)}}},[e[t.imgKey]?n("div",{class:t.b("img")},[n("img",{attrs:{src:e[t.imgKey],alt:""}})]):t._e(),t._v(" "),n("div",{class:t.b("content")},[n("div",{class:t.b("title")},[n("span",{class:t.b("name")},[t._v(t._s(e[t.titleKey]))]),t._v(" "),e[t.tagKey]?n("span",{class:t.b("tag")},[n("el-tag",{attrs:{size:"small",type:t.getType(e[t.statusKey])}},[t._v(t._s(e[t.tagKey]))])],1):t._e()]),t._v(" "),n("div",{class:t.b("subtitle")},[t._v(t._s(e[t.subtitleKey]))])])])})),t._v(" "),t.finish?t._e():n("div",{directives:[{name:"loading",rawName:"v-loading",value:t.loading,expression:"loading"}],class:t.b("more"),on:{click:t.handleClick}},[t._v("\n    鍔犺浇鏇村\n  ")])],2)}),[],!1,null,null,null).exports,Xt=Object(i.a)({name:"license",props:{id:{type:String,default:""},option:{type:Object,default:function(){return{}}}},watch:{option:{handler:function(){this.init()},deep:!0}},data:function(){return{base64:"",draw:!1,canvas:"",context:""}},computed:{img:function(){return this.option.img},list:function(){return this.option.list||[]}},mounted:function(){this.canvas=document.getElementById("canvas"+this.id),this.context=this.canvas.getContext("2d"),this.init()},methods:{init:function(){var t=this;this.draw=!1;var e=new Image;e.src=this.img,e.onload=function(){var n=t.option.width||e.width,i=t.option.width?e.height/e.width*t.option.width:e.height;t.$refs.canvas.width=n,t.$refs.canvas.height=i,t.context.clearRect(0,0,n,i),t.context.drawImage(e,0,0,n,i),t.list.forEach((function(e,n){var i=function(){n==t.list.length-1&&setTimeout((function(){t.draw=!0}),0)};if(e.img){var o=new Image;o.src=e.img,o.onload=function(){var n=e.width||o.width,a=e.width?o.height/o.width*e.width:o.height;t.context.drawImage(o,e.left,e.top,n,a),i()}}else e.bold?t.context.font="bold ".concat(e.size,"px ").concat(e.style):t.context.font="".concat(e.size,"px ").concat(e.style),t.context.fillStyle=e.color,t.context.fillText(e.text,e.left,e.top),t.context.stroke(),i()}))}},getFile:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:(new Date).getTime();return new Promise((function(n){var i=setInterval((function(){if(t.draw){var o=t.canvas.toDataURL("image/jpeg",1),a=t.dataURLtoFile(o,e);clearInterval(i),n(a)}}),1e3)}))},downFile:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:(new Date).getTime();Object(D.h)(this.base64,t)},getBase64:function(){var t=this;return new Promise((function(e){var n=setInterval((function(){if(t.draw){var i=t.canvas.toDataURL("image/jpeg",1);t.base64=i,clearInterval(n),e(i)}}),100)}))},getPdf:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:(new Date).getTime(),e=this.canvas.width,n=this.canvas.height,i=e/592.28*841.89,o=n,a=0,r=595.28,s=592.28/e*n,l=this.canvas.toDataURL("image/jpeg",1),c=new window.jsPDF("","pt","a4");if(o<i)c.addImage(l,"JPEG",0,0,r,s);else for(;o>0;)c.addImage(l,"JPEG",0,a,r,s),a-=841.89,(o-=i)>0&&c.addPage();c.save("".concat(t,".pdf"))}}}),qt=Object(s.a)(Xt,(function(){var t=this.$createElement,e=this._self._c||t;return e("div",{class:this.b(),staticStyle:{position:"relative"}},[e("canvas",{ref:"canvas",attrs:{id:"canvas"+this.id}}),this._v(" "),this._t("default")],2)}),[],!1,null,null,null).exports,Gt=Object(i.a)({name:"progress",props:{showText:{type:Boolean},width:{type:[Number,String]},strokeWidth:{type:[Number,String]},type:{type:String},color:{type:String},percentage:{type:[Number]}}}),Jt=Object(s.a)(Gt,(function(){var t=this.$createElement,e=this._self._c||t;return e("div",{class:this.b()},[e("el-progress",{attrs:{type:this.type,color:this.color,width:this.width,"text-inside":"","show-text":this.showText,"stroke-width":this.strokeWidth,percentage:this.percentage}})],1)}),[],!1,null,null,null).exports,Qt=Object(i.a)({name:"time",mixins:[At(),Tt(),j.a],data:function(){return{}},props:{editable:{type:Boolean,default:!0},startPlaceholder:{type:String,default:"寮�濮嬫椂闂�"},endPlaceholder:{type:String,default:"缁撴潫鏃堕棿"},rangeSeparator:{type:String},value:{required:!0},defaultValue:{type:[String,Array]},pickerOptions:{type:Object,default:function(){}},valueFormat:{default:""},arrowControl:{type:Boolean,default:!1},type:{default:""},format:{default:""}},watch:{text:function(){Array.isArray(this.text)&&this.validatenull(this.text)&&(this.text=this.text.join(","))}},created:function(){},mounted:function(){},computed:{isRange:function(){return"timerange"===this.type}},methods:{}}),Zt=Object(s.a)(Qt,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:t.b()},[n("el-time-picker",{attrs:{"popper-class":t.popperClass,"is-range":t.isRange,size:t.size,editable:t.editable,"default-value":t.defaultValue,"range-separator":t.rangeSeparator,"arrow-control":t.arrowControl,"start-placeholder":t.startPlaceholder,"end-placeholder":t.endPlaceholder,format:t.format,readonly:t.readonly,clearable:t.clearableVal,"picker-options":t.pickerOptions,"value-format":t.valueFormat,placeholder:t.placeholder,disabled:t.disabled},on:{change:t.handleChange},nativeOn:{click:function(e){return t.handleClick.apply(null,arguments)}},model:{value:t.text,callback:function(e){t.text=e},expression:"text"}})],1)}),[],!1,null,null,null).exports,te=n(5);function ee(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var ne,ie=Object(i.a)({name:"input",mixins:[At(),Tt()],data:function(){return{}},props:(Ot={value:{},maxlength:"",minlength:"",showPassword:{type:Boolean,default:!0},showWordLimit:{type:Boolean,default:!1},target:{type:String,default:" _blank"},prefixIcon:{type:String},suffixIcon:{type:String},prependClick:{type:Function,default:function(){}},prepend:{type:String},appendClick:{type:Function,default:function(){}},append:{type:String}},ee(Ot,"minlength",{type:Number}),ee(Ot,"maxlength",{type:Number}),ee(Ot,"minRows",{type:Number,default:5}),ee(Ot,"maxRows",{type:Number,default:10}),ee(Ot,"autocomplete",{type:String}),Ot),computed:{isSearch:function(){return"search"==this.type},typeParam:function(){return"textarea"===this.type?"textarea":"password"===this.type?"password":"text"}}}),oe=Object(s.a)(ie,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("el-input",{class:t.b(),attrs:{size:t.size,clearable:t.clearableVal,type:t.typeParam,maxlength:t.maxlength,minlength:t.minlength,"show-password":"password"==t.typeParam&&t.showPassword,autosize:{minRows:t.minRows,maxRows:t.maxRows},"prefix-icon":t.prefixIcon,"suffix-icon":t.suffixIcon,readonly:t.readonly,placeholder:t.placeholder,"show-word-limit":t.showWordLimit,disabled:t.disabled,autocomplete:t.autocomplete},on:{keyup:function(e){if(!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter"))return null;t.isSearch&&t.appendClick()},focus:t.handleFocus,blur:t.handleBlur},nativeOn:{click:function(e){return t.handleClick.apply(null,arguments)}},model:{value:t.text,callback:function(e){t.text=e},expression:"text"}},[t.prepend?n("template",{slot:"prepend"},[n("span",{on:{click:function(e){return t.prependClick()}}},[t._v(t._s(t.prepend))])]):t._e(),t._v(" "),t.append?n("template",{slot:"append"},[n("span",{on:{click:function(e){return t.appendClick()}}},[t._v(t._s(t.append))])]):t.isSearch?n("el-button",{attrs:{slot:"append",icon:"el-icon-search"},on:{click:function(e){return t.appendClick()}},slot:"append"}):t._e()],2)}),[],!1,null,null,null).exports,ae=Object(i.a)({name:"radio",mixins:[At(),Tt()],data:function(){return{name:"radio"}},props:{value:{}},watch:{},created:function(){},mounted:function(){},methods:{}}),re=Object(s.a)(ae,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:t.b()},[n("el-radio-group",{attrs:{size:t.size,disabled:t.disabled},on:{change:t.handleChange},nativeOn:{click:function(e){return t.handleClick.apply(null,arguments)}},model:{value:t.text,callback:function(e){t.text=e},expression:"text"}},t._l(t.dic,(function(e,i){return n(t.componentName,{key:i,tag:"component",attrs:{label:e[t.valueKey],border:t.border,readonly:t.readonly,disabled:e[t.disabledKey]}},[t._v(t._s(e[t.labelKey]))])})),1)],1)}),[],!1,null,null,null).exports,se=Object(i.a)({name:"select",mixins:[At(),Tt()],data:function(){return{checkAll:!1,created:!1,netDic:[],loading:!1}},props:{value:{},loadingText:{type:String},noMatchText:{type:String},noDataText:{type:String},drag:{type:Boolean,default:!1},remote:{type:Boolean,default:!1},tags:{type:Boolean,default:!1},limit:{type:Number,default:0},filterable:{type:Boolean,default:!1},allowCreate:{type:Boolean,default:!1},defaultFirstOption:{type:Boolean,default:!1},all:{type:Boolean,default:!1},popperAppendToBody:{type:Boolean,default:!0}},watch:{value:function(t){this.validatenull(t)||this.remote&&!this.created&&(this.created=!0,this.handleRemoteMethod(this.multiple?this.text.join(B.g):this.text))},dic:{handler:function(t){this.netDic=t},immediate:!0}},mounted:function(){this.drag&&this.setSort()},methods:{setSort:function(){var t=this;if(window.Sortable){var e=this.$refs.main.$el.querySelectorAll(".el-select__tags > span")[0];window.Sortable.create(e,{animation:100,onEnd:function(e){var n=t.value.splice(e.oldIndex,1)[0];t.value.splice(e.newIndex,0,n)}})}else x.a.logs("Sortable")},handleRemoteMethod:function(t){var e=this;this.loading=!0,Object(M.d)({column:this.column,value:t}).then((function(t){e.loading=!1,e.netDic=t}))},selectAll:function(){var t=this;this.text=[],this.checkAll?this.netDic.map((function(e){t.text.push(e[t.valueKey])})):this.text=[]},changeSelect:function(t){this.checkAll=t.length===this.netDic.length}}}),le=Object(s.a)(se,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("el-select",{ref:"main",class:t.b(),attrs:{size:t.size,loading:t.loading,"loading-text":t.loadingText,multiple:t.multiple,filterable:!!t.remote||t.filterable,remote:t.remote,readonly:t.readonly,"no-match-text":t.noMatchText,"no-data-text":t.noDataText,"remote-method":t.handleRemoteMethod,"popper-class":t.popperClass,"popper-append-to-body":t.popperAppendToBody,"collapse-tags":t.tags,clearable:t.clearableVal,placeholder:t.placeholder,"multiple-limit":t.limit,"allow-create":t.allowCreate,"default-first-option":t.defaultFirstOption,disabled:t.disabled},on:{focus:t.handleFocus,blur:t.handleBlur,change:t.changeSelect},nativeOn:{click:function(e){return t.handleClick.apply(null,arguments)}},model:{value:t.text,callback:function(e){t.text=e},expression:"text"}},[t.group?t._l(t.netDic,(function(e,i){return n("el-option-group",{key:i,attrs:{label:t.getLabelText(e)}},t._l(e[t.groupsKey],(function(e,i){return n("el-option",{key:i,attrs:{disabled:e[t.disabledKey],label:t.getLabelText(e),value:e[t.valueKey]}},[t.$scopedSlots.default?t._t("default",null,{label:t.labelKey,value:t.valueKey,item:e}):[n("span",[t._v(t._s(t.getLabelText(e)))]),t._v(" "),e[t.descKey]?n("span",{class:t.b("desc")},[t._v(t._s(e[t.descKey]))]):t._e()]],2)})),1)})):[t.all&&t.multiple?n("el-checkbox",{class:t.b("check"),on:{change:t.selectAll},model:{value:t.checkAll,callback:function(e){t.checkAll=e},expression:"checkAll"}},[t._v("鍏ㄩ��")]):t._e(),t._v(" "),t._l(t.netDic,(function(e,i){return n("el-option",{key:i,attrs:{disabled:e[t.disabledKey],label:t.getLabelText(e),value:e[t.valueKey]}},[t.$scopedSlots.default?t._t("default",null,{label:t.labelKey,value:t.valueKey,item:e}):[n("span",[t._v(t._s(t.getLabelText(e)))]),t._v(" "),e[t.descKey]?n("span",{class:t.b("desc")},[t._v(t._s(e[t.descKey]))]):t._e()]],2)}))]],2)}),[],!1,null,null,null).exports;function ce(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var ue=Object(i.a)({name:"cascader",mixins:[At(),Tt()],props:(ne={checkStrictly:{type:Boolean,default:!1},emitPath:{type:Boolean,default:!0},tags:{type:Boolean,default:!1},expandTrigger:{type:String,default:"hover"},showAllLevels:{type:Boolean,default:!0},lazy:{type:Boolean,default:!1},lazyLoad:Function,filterable:{type:Boolean,default:!1}},ce(ne,"expandTrigger",{type:String,default:"click"}),ce(ne,"separator",{type:String}),ne),data:function(){return{}},watch:{},computed:{allProps:function(){var t=this;return{label:this.labelKey,value:this.valueKey,children:this.childrenKey,checkStrictly:this.checkStrictly,multiple:this.multiple,emitPath:this.emitPath,lazy:this.lazy,lazyLoad:function(e,n){t.lazyLoad&&t.lazyLoad(e,(function(i){!function e(n,i,o){n.forEach((function(n){n[t.valueKey]==i?n[t.childrenKey]=o:n[t.childrenKey]&&e(n[t.childrenKey])}))}(t.dic,e[t.valueKey],i),n(i)}))},expandTrigger:this.expandTrigger}}},created:function(){},mounted:function(){},methods:{}}),de=Object(s.a)(ue,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("el-cascader",{attrs:{options:t.dic,placeholder:t.placeholder,props:t.allProps,size:t.size,clearable:t.clearableVal,"show-all-levels":t.showAllLevels,filterable:t.filterable,"popper-class":t.popperClass,separator:t.separator,disabled:t.disabled,"collapse-tags":t.tags},on:{focus:t.handleFocus,blur:t.handleBlur},nativeOn:{click:function(e){return t.handleClick.apply(null,arguments)}},scopedSlots:t._u([{key:"default",fn:function(e){var i=e.data,o=e.node;return[t.$scopedSlots.default?t._t("default",null,{data:i,node:o}):n("span",[t._v(t._s(i[t.labelKey]))])]}}],null,!0),model:{value:t.text,callback:function(e){t.text=e},expression:"text"}})}),[],!1,null,null,null).exports,pe=Object(i.a)({name:"input-color",mixins:[At(),Tt()],props:{colorFormat:String,showAlpha:{type:Boolean,default:!0},iconList:{type:Array,default:function(){return[]}}},data:function(){return{predefineColors:["#ff4500","#ff8c00","#ffd700","#90ee90","#00ced1","#1e90ff","#c71585","rgba(255, 69, 0, 0.68)","rgb(255, 120, 0)","hsv(51, 100, 98)","hsva(120, 40, 94, 0.5)","hsl(181, 100%, 37%)","hsla(209, 100%, 56%, 0.73)","#c7158577"]}},methods:{}}),he=Object(s.a)(pe,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:t.b()},[n("el-input",{ref:"main",attrs:{placeholder:t.placeholder,size:t.size,readonly:t.readonly,clearable:t.clearableVal,disabled:t.disabled},on:{change:t.handleChange},nativeOn:{click:function(e){return t.handleClick.apply(null,arguments)}},model:{value:t.text,callback:function(e){t.text=e},expression:"text"}},[n("template",{slot:"append"},[n("el-color-picker",{attrs:{size:"mini","popper-class":t.popperClass,"color-format":t.colorFormat,disabled:t.disabled,"show-alpha":t.showAlpha,predefine:t.predefineColors},on:{change:t.handleChange},model:{value:t.text,callback:function(e){t.text=e},expression:"text"}})],1)],2)],1)}),[],!1,null,null,null).exports,fe=Object(i.a)({name:"input-number",mixins:[At(),Tt()],data:function(){return{}},props:{controls:{type:Boolean,default:!0},step:{type:Number,default:1},controlsPosition:{type:String,default:"right"},precision:{type:Number},min:{type:Number,default:-1/0},max:{type:Number,default:1/0}},created:function(){},mounted:function(){},methods:{}}),me=Object(s.a)(fe,(function(){var t=this,e=t.$createElement;return(t._self._c||e)("el-input-number",{class:t.b(),attrs:{precision:t.precision,placeholder:t.placeholder,size:t.size,min:t.min,max:t.max,step:t.step,clearable:t.clearableVal,readonly:t.readonly,"controls-position":t.controlsPosition,controls:t.controls,label:t.placeholder,disabled:t.disabled},on:{focus:t.handleFocus,blur:t.handleBlur},nativeOn:{click:function(e){return t.handleClick.apply(null,arguments)}},model:{value:t.text,callback:function(e){t.text=t._n(e)},expression:"text"}})}),[],!1,null,null,null).exports,ve=Object(i.a)({name:"input-tree",mixins:[At(),Tt()],data:function(){return{node:[],filterValue:"",box:!1,created:!1,netDic:[],loading:!1}},props:{nodeClick:Function,treeLoad:Function,checked:Function,value:{},loadingText:{type:String},lazy:{type:Boolean,default:!1},leafOnly:{type:Boolean,default:!1},tags:{type:Boolean,default:!1},limit:{type:Number,default:0},expandOnClickNode:{type:Boolean,default:!0},filter:{type:Boolean,default:!0},filterText:{type:String,default:"杈撳叆鍏抽敭瀛楄繘琛岃繃婊�"},checkStrictly:{type:Boolean,default:!1},accordion:{type:Boolean,default:!1},parent:{type:Boolean,default:!0},iconClass:{type:String},defaultExpandAll:{type:Boolean,default:!1},popperAppendToBody:{type:Boolean,default:!0}},watch:{text:{handler:function(t){this.validatenull(t)&&this.clearHandle(),this.init()}},value:function(t){this.validatenull(t)||this.lazy&&!this.created&&(this.created=!0,this.handleRemoteMethod(this.multiple?this.text.join(","):this.text))},dic:{handler:function(t){this.netDic=t},immediate:!0},netDic:{handler:function(){this.init()},immediate:!0},filterValue:function(t){this.$refs.tree.filter(t)}},computed:{treeProps:function(){return Object.assign(this.props,{isLeaf:this.leafKey})},dicList:function(){var t=this.netDic;return function t(e,n){e.forEach((function(e){var i=e.children;i&&t(i,e),n&&(e.$parent=n)}))}(t),t},keysList:function(){var t=this;if(this.validatenull(this.text))return[];return Array.isArray(this.text)?this.text:(this.text+"").split(this.separator).map((function(e){return Object(D.f)(e,t.dataType)}))},labelShow:function(){var t=this,e=[],n=this.deepClone(this.node);return e=this.typeformat?n.map((function(e){return t.getLabelText(e)})):n.map((function(e){return e[t.labelKey]})),this.multiple?e:e.join("")}},methods:{handleClear:function(){this.multiple?this.text=[]:this.text="",this.node=[]},handleTreeLoad:function(t,e){var n=this;this.treeLoad&&this.treeLoad(t,(function(i){!function t(e,i,o){e.forEach((function(e){e[n.valueKey]==i?e[n.childrenKey]=o:e[n.childrenKey]&&t(e[n.childrenKey])}))}(n.netDic,t.key,i),e(i)}))},initScroll:function(t){var e=this;setTimeout((function(){e.$nextTick((function(){document.querySelectorAll(".el-scrollbar .el-select-dropdown__wrap").forEach((function(t){t.scrollTop=0}))}))}),0),this.handleClick(t)},filterNode:function(t,e){return!t||-1!==e[this.labelKey].toLowerCase().indexOf(t.toLowerCase())},checkChange:function(t,e,n,i){var o=this;this.text=[],this.$refs.tree.getCheckedNodes(this.leafOnly,!1).forEach((function(t){return o.text.push(t[o.valueKey])})),"function"==typeof this.checked&&this.checked(t,e,n,i)},getHalfList:function(){var t=this,e=this.$refs.tree.getCheckedNodes(!1,!0);return e=e.map((function(e){return e[t.valueKey]}))},init:function(){var t=this;this.$nextTick((function(){if(t.node=[],t.multiple){t.$refs.tree.getCheckedNodes(t.leafOnly,!1).forEach((function(e){t.node.push(e)}))}else{var e=t.$refs.tree.getNode(t.vaildData(t.text,""));if(e){var n=e.data;t.$refs.tree.setCurrentKey(n[t.valueKey]),t.node.push(n)}}})),this.disabledParentNode(this.dic,this.parent)},disabledParentNode:function(t,e){var n=this;t.forEach((function(t){var i=t[n.childrenKey];n.validatenull(i)||(e||(t.disabled=!0),n.disabledParentNode(i,e))}))},clearHandle:function(){this.filterValue="",this.$refs.tree.setCurrentKey(null),this.$refs.tree.setCheckedKeys([])},handleNodeClick:function(t,e,n){t.disabled||("function"==typeof this.nodeClick&&this.nodeClick(t,e,n),this.multiple||(this.validatenull(t[this.childrenKey])&&!this.multiple||this.parent)&&(this.text=t[this.valueKey],this.$refs.main.blur()))},handleRemoteMethod:function(t){var e=this;this.loading=!0,Object(M.d)({column:this.column,value:t}).then((function(t){e.loading=!1,e.netDic=t}))}}}),be=Object(s.a)(ve,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("el-select",{ref:"main",class:t.b(),attrs:{size:t.size,loading:t.loading,"loading-text":t.loadingText,multiple:t.multiple,"multiple-limit":t.limit,"collapse-tags":t.tags,value:t.labelShow,clearable:t.clearableVal,placeholder:t.placeholder,"popper-class":t.popperClass,"popper-append-to-body":t.popperAppendToBody,disabled:t.disabled},on:{focus:t.handleFocus,blur:t.handleBlur,clear:t.handleClear},nativeOn:{click:function(e){return t.initScroll.apply(null,arguments)}}},[t.filter?n("div",{staticStyle:{padding:"0 10px",margin:"5px 0 0 0"}},[n("el-input",{attrs:{size:"mini",placeholder:t.filterText},model:{value:t.filterValue,callback:function(e){t.filterValue=e},expression:"filterValue"}})],1):t._e(),t._v(" "),n("el-option",{attrs:{value:t.text}},[n("el-tree",{ref:"tree",staticClass:"tree-option",staticStyle:{padding:"10px 0"},attrs:{data:t.dicList,lazy:t.lazy,load:t.handleTreeLoad,"node-key":t.valueKey,accordion:t.accordion,"icon-class":t.iconClass,"show-checkbox":t.multiple,"expand-on-click-node":t.expandOnClickNode,props:t.treeProps,"check-strictly":t.checkStrictly,"highlight-current":!t.multiple,"current-node-key":t.multiple?"":t.text,"filter-node-method":t.filterNode,"default-checked-keys":t.keysList,"default-expand-all":t.defaultExpandAll},on:{check:t.checkChange,"node-click":function(e){return e.target!==e.currentTarget?null:t.handleNodeClick.apply(null,arguments)}},scopedSlots:t._u([{key:"default",fn:function(e){var i=e.data;return n("div",{staticStyle:{width:"100%","padding-right":"10px"}},[t.$scopedSlots.default?t._t("default",null,{label:t.labelKey,value:t.valueKey,item:i}):[n("span",{class:{"avue--disabled":i[t.disabledKey]}},[t._v(t._s(i[t.labelKey]))]),t._v(" "),i[t.descKey]?n("span",{class:t.b("desc")},[t._v(t._s(i[t.descKey]))]):t._e()]],2)}}],null,!0)})],1)],1)}),[],!1,null,null,null).exports,ge=Object(i.a)({name:"input-map",mixins:[At(),Tt()],props:{dialogWidth:{type:String,default:"80%"}},data:function(){return{formattedAddress:"",address:"",poi:{},marker:null,map:null,box:!1}},watch:{poi:function(t){this.formattedAddress=t.formattedAddress},value:function(t){this.validatenull(t)&&(this.poi={})},text:function(t){this.validatenull(t)||(this.poi={longitude:t[0],latitude:t[1],formattedAddress:t[2]},this.address=t[2])},box:{handler:function(){var t=this;this.box&&this.$nextTick((function(){return t.init((function(){t.longitude&&t.latitude&&(t.addMarker(t.longitude,t.latitude),t.getAddress(t.longitude,t.latitude))}))}))},immediate:!0}},computed:{longitude:function(){return this.text[0]},latitude:function(){return this.text[1]},title:function(){return this.disabled||this.readonly?"鏌ョ湅":"閫夋嫨"}},methods:{clear:function(){this.poi={},this.clearMarker()},handleSubmit:function(){this.setVal(),this.box=!1},handleClear:function(){this.text=[],this.poi={},this.handleChange(this.text)},setVal:function(){this.text=[this.poi.longitude,this.poi.latitude,this.poi.formattedAddress],this.handleChange(this.text)},handleShow:function(){this.$refs.main.blur(),this.box=!0},addMarker:function(t,e){this.clearMarker(),this.marker=new window.AMap.Marker({position:[t,e]}),this.marker.setMap(this.map)},clearMarker:function(){this.marker&&(this.marker.setMap(null),this.marker=null)},getAddress:function(t,e){var n=this;new window.AMap.service("AMap.Geocoder",(function(){new window.AMap.Geocoder({}).getAddress([t,e],(function(i,o){if("complete"===i&&"OK"===o.info){var a=o.regeocode;n.poi=Object.assign(a,{longitude:t,latitude:e});var r=document.createElement("div"),s=document.createElement("img");s.src="//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png",r.appendChild(s);var l=document.createElement("span");l.className="avue-input-map__marker",l.innerHTML=n.poi.formattedAddress,r.appendChild(l),n.marker.setContent(r)}}))}))},handleClose:function(){window.poiPicker.clearSearchResults()},addClick:function(){var t=this;this.map.on("click",(function(e){if(!t.disabled&&!t.readonly){var n=e.lnglat,i=n.P||n.Q,o=n.R;t.addMarker(o,i),t.getAddress(o,i)}}))},init:function(t){var e=this;window.AMap?(this.map=new window.AMap.Map("map__container",Object.assign({zoom:13,center:function(){if(e.longitude&&e.latitude)return[e.longitude,e.latitude]}()},this.params)),this.initPoip(),this.addClick(),t()):x.a.logs("Map")},initPoip:function(){var t=this;window.AMapUI?window.AMapUI.loadUI(["misc/PoiPicker"],(function(e){var n=new e({input:"map__input",placeSearchOptions:{map:t.map,pageSize:10},searchResultsContainer:"map__result"});t.poiPickerReady(n)})):x.a.logs("MapUi")},poiPickerReady:function(t){var e=this;window.poiPicker=t,t.on("poiPicked",(function(n){e.clearMarker();var i=n.source,o=n.item;e.poi=Object.assign(o,{formattedAddress:o.name,longitude:o.location.R,latitude:o.location.P||o.location.Q}),"search"!==i&&t.searchByKeyword(o.name)}))}}}),ye=Object(s.a)(ge,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:t.b()},[n("el-input",{ref:"main",attrs:{size:t.size,clearable:t.clearableVal,disabled:t.disabled,placeholder:t.placeholder},on:{clear:t.handleClear,focus:t.handleShow},nativeOn:{click:function(e){return t.handleClick.apply(null,arguments)}},model:{value:t.address,callback:function(e){t.address=e},expression:"address"}}),t._v(" "),n("el-dialog",{staticClass:"avue-dialog avue-dialog--none",attrs:{width:t.dialogWidth,"append-to-body":"",title:t.placeholder,visible:t.box},on:{close:t.handleClose,"update:visible":function(e){t.box=e}}},[t.box?n("div",{class:t.b("content")},[n("el-input",{class:t.b("content-input"),attrs:{id:"map__input",size:t.size,readonly:t.disabled,clearable:"",placeholder:"杈撳叆鍏抽敭瀛楅�夊彇鍦扮偣"},on:{clear:t.clear},model:{value:t.formattedAddress,callback:function(e){t.formattedAddress=e},expression:"formattedAddress"}}),t._v(" "),n("div",{class:t.b("content-box")},[n("div",{class:t.b("content-container"),attrs:{id:"map__container",tabindex:"0"}}),t._v(" "),n("div",{class:t.b("content-result"),attrs:{id:"map__result"}})])],1):t._e(),t._v(" "),n("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[t.disabled||t.readonly?t._e():n("el-button",{attrs:{type:"primary",size:t.size,icon:"el-icon-check"},on:{click:t.handleSubmit}},[t._v("纭� 瀹�")])],1)])],1)}),[],!1,null,null,null).exports,_e=Object(i.a)({name:"input-icon",components:{iconTemp:N},mixins:[At(),Tt()],props:{dialogWidth:{type:String,default:"80%"},iconList:{type:Array,default:function(){return[]}}},data:function(){return{box:!1,tabs:{}}},computed:{list:function(){var t=(this.tabs.list||[]).map((function(t){return t.value?t:{value:t}}));return t},option:function(){return{column:this.iconList}}},created:function(){this.tabs=this.iconList[0]||{}},methods:{handleTabs:function(t){this.tabs=t},handleSubmit:function(t){this.box=!1,this.text=t,this.handleChange(t)},handleShow:function(){this.$refs.main.blur(),this.disabled||this.readonly||(this.box=!0)}}}),xe=Object(s.a)(_e,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:t.b()},[n("el-input",{ref:"main",attrs:{placeholder:t.placeholder,size:t.size,clearable:t.clearableVal,disabled:t.disabled},on:{change:t.handleChange,focus:t.handleShow},nativeOn:{click:function(e){return t.handleClick.apply(null,arguments)}},model:{value:t.text,callback:function(e){t.text=e},expression:"text"}},[n("icon-temp",{attrs:{slot:"append",text:t.text,size:28,small:""},on:{click:t.handleShow},slot:"append"})],1),t._v(" "),n("el-dialog",{staticClass:"avue-dialog avue-dialog--none",attrs:{title:t.placeholder,"append-to-body":"",visible:t.box,width:t.dialogWidth},on:{"update:visible":function(e){t.box=e}}},[n("avue-tabs",{attrs:{option:t.option},on:{change:t.handleTabs}}),t._v(" "),n("div",{class:t.b("list")},t._l(t.list,(function(e,i){return n("div",{key:i,class:t.b("item",{active:t.text===e}),on:{click:function(n){return t.handleSubmit(e.value)}}},[n("icon-temp",{attrs:{text:e.value}}),t._v(" "),n("p",[t._v(t._s(e.label||e.value))])],1)})),0)],1)],1)}),[],!1,null,null,null).exports,we=Object(i.a)({name:"input-table",mixins:[At(),Tt()],data:function(){return{object:{},active:{},page:{},loading:!1,box:!1,created:!1,data:[]}},props:{formatter:Function,onLoad:Function,dialogWidth:{type:String,default:"80%"}},watch:{value:function(t){this.validatenull(t)&&(this.active={},this.object={})},text:function(t){var e=this;this.created||this.validatenull(t)||"function"==typeof this.onLoad&&this.onLoad({value:this.text},(function(t){e.active=t,e.object=t,e.created=!0}))}},computed:{title:function(){return this.disabled||this.readonly?"鏌ョ湅":"閫夋嫨"},labelShow:function(){return"function"==typeof this.formatter?this.formatter(this.object):this.object[this.labelKey]||""},option:function(){return Object.assign({menu:!1,header:!1,size:"mini",headerAlign:"center",align:"center",highlightCurrentRow:!0},this.column.children)}},methods:{handleClear:function(){this.active={},this.setVal()},handleShow:function(){this.$refs.main.blur(),this.disabled||this.readonly||(this.page={currentPage:1,total:0},this.data=[],this.box=!0)},setVal:function(){this.object=this.active,this.text=this.active[this.valueKey]||"",this.handleChange(this.text),this.box=!1},handleCurrentRowChange:function(t){this.active=t},handleSearchChange:function(t,e){var n=this;this.onLoad({page:this.page,data:t},(function(t){n.page.total=t.total,n.data=t.data})),e&&e()},onList:function(t){var e=this;this.loading=!0,"function"==typeof this.onLoad&&this.onLoad({page:this.page},(function(t){e.page.total=t.total,e.data=t.data,e.loading=!1;var n=e.data.find((function(t){return t[e.valueKey]==e.object[e.valueKey]}));setTimeout((function(){return e.$refs.crud.setCurrentRow(n)}))}))}}}),Oe=Object(s.a)(we,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:t.b()},[n("el-input",{ref:"main",attrs:{size:t.size,value:t.labelShow,clearable:t.clearableVal,placeholder:t.placeholder,disabled:t.disabled},on:{clear:t.handleClear,focus:t.handleShow},nativeOn:{click:function(e){return t.handleClick.apply(null,arguments)}}}),t._v(" "),n("el-dialog",{staticClass:"avue-dialog avue-dialog--none",attrs:{width:t.dialogWidth,"append-to-body":"",title:t.placeholder,visible:t.box},on:{"update:visible":function(e){t.box=e}}},[t.box?n("avue-crud",{ref:"crud",class:t.b("crud"),attrs:{option:t.option,data:t.data,"table-loading":t.loading,page:t.page},on:{"on-load":t.onList,"search-change":t.handleSearchChange,"search-reset":t.handleSearchChange,"current-row-change":t.handleCurrentRowChange,"update:page":function(e){t.page=e}}}):t._e(),t._v(" "),n("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[n("el-button",{attrs:{type:"primary",size:t.size,icon:"el-icon-check"},on:{click:t.setVal}},[t._v("纭� 瀹�")])],1)],1)],1)}),[],!1,null,null,null).exports,Ce=Object(i.a)({name:"verify",props:{size:{type:[Number,String],default:50},value:[Number,String],len:{type:[Number,String],default:6}},computed:{styleName:function(){return{padding:"".concat(this.setPx(this.size/7)," ").concat(this.setPx(this.size/4)),fontSize:this.setPx(this.size)}},list:function(){return this.data.split("")}},watch:{value:{handler:function(t){this.validatenull(t)?this.randomn():this.data=t+""},immediate:!0},data:{handler:function(t){this.$emit("input",t)},immediate:!0}},data:function(){return{data:0}},methods:{randomn:function(){var t=this.len;if(t>21)return null;var e=new RegExp("(\\d{"+t+"})(\\.|$)"),n=(Array(t-1).join(0)+Math.pow(10,t)*Math.random()).match(e)[1];this.data=n}}}),ke=Object(s.a)(Ce,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:t.b()},t._l(t.list,(function(e,i){return n("span",{key:i,class:t.b("item"),style:t.styleName},[t._v("\n    "+t._s(e)+"\n  ")])})),0)}),[],!1,null,null,null).exports,Se=Object(i.a)({name:"switch",mixins:[At(),Tt()],props:{value:{},activeIconClass:String,inactiveIconClass:String,activeColor:String,inactiveColor:String,len:Number},data:function(){return{}},watch:{},created:function(){},mounted:function(){},computed:{active:function(){return this.dic[1]||{}},inactive:function(){return this.dic[0]||{}}},methods:{}}),Ee=Object(s.a)(Se,(function(){var t=this,e=t.$createElement;return(t._self._c||e)("el-switch",{attrs:{"active-text":t.active[t.labelKey],"active-value":t.active[t.valueKey],"inactive-value":t.inactive[t.valueKey],"inactive-text":t.inactive[t.labelKey],"active-icon-class":t.activeIconClass,"inactive-icon-class":t.inactiveIconClass,"active-color":t.activeColor,"inactive-color":t.inactiveColor,width:t.len,disabled:t.disabled,readonly:t.readonly,size:t.size},nativeOn:{click:function(e){return t.handleClick.apply(null,arguments)}},model:{value:t.text,callback:function(e){t.text=e},expression:"text"}})}),[],!1,null,null,null).exports,je=Object(i.a)({name:"rate",mixins:[At(),Tt()],props:{value:{type:Number,default:0},colors:{type:Array},max:{type:Number,default:5},iconClasses:{type:Array},texts:{type:Array},showText:{type:Boolean,default:!1},voidIconClass:{type:String}},data:function(){return{}},watch:{},created:function(){},mounted:function(){},methods:{}}),$e=Object(s.a)(je,(function(){var t=this,e=t.$createElement;return(t._self._c||e)("el-rate",{staticStyle:{"margin-top":"10px"},attrs:{max:t.max,readonly:t.readonly,texts:t.texts,"show-text":t.showText,"icon-classes":t.iconClasses,"void-icon-class":t.voidIconClass,disabled:t.disabled,colors:t.colors},on:{change:t.handleChange},nativeOn:{click:function(e){return t.handleClick.apply(null,arguments)}},model:{value:t.text,callback:function(e){t.text=e},expression:"text"}})}),[],!1,null,null,null).exports;function De(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function Ae(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}var Te,Pe,Be=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};De(this,t),this.CONTAINERID=Object(D.s)(),this.drawCanvas=this.drawCanvas.bind(this),this.parentObserver=this.parentObserver.bind(this),this.Repaint=this.Repaint.bind(this),this.isOberserve=!1,this.init(e),this.drawCanvas(),this.parentObserver()}var e,n,i;return e=t,(n=[{key:"init",value:function(t){this.option=Object.assign({width:400,height:200,text:"avueJS",fontSize:"30px",fontStyle:"榛戜綋",textAlign:"center",color:"rgba(100,100,100,0.15)",degree:-20},t)}},{key:"drawCanvas",value:function(){this.isOberserve=!0;var t=document.createElement("div"),e=document.createElement("canvas"),n=e.getContext("2d");t.id=this.CONTAINERID,e.width=this.option.width,e.height=this.option.height,n.font="".concat(this.option.fontSize," ").concat(this.option.fontStyle),n.textAlign=this.option.textAlign,n.fillStyle=this.option.color,n.translate(e.width/2,e.height/2),n.rotate(this.option.degree*Math.PI/180),n.fillText(this.option.text,0,0);var i,o=e.toDataURL("image/png"),a=this.option.id;a&&(i=document.getElementById(a)),this.styleStr="\n    position:".concat(a?"absolute":"fixed",";\n    top:0;\n    left:0;\n    width:").concat(a?i.offsetWidth+"px":"100%",";\n    height:").concat(a?i.offsetHeight+"px":"100%",";\n    z-index:9999;\n    pointer-events:none;\n    background-repeat:repeat;\n    background-image:url('").concat(o,"')"),t.setAttribute("style",this.styleStr),a?document.getElementById(a).appendChild(t):document.body.appendChild(t),this.wmObserver(t),this.isOberserve=!1}},{key:"wmObserver",value:function(t){var e=this,n=new MutationObserver((function(t){if(!e.isOberserve){var i=t[0].target;i.setAttribute("style",e.styleStr),i.setAttribute("id",e.CONTAINERID),n.takeRecords()}}));n.observe(t,{attributes:!0,childList:!0,characterData:!0})}},{key:"parentObserver",value:function(){var t=this;new MutationObserver((function(){if(!t.isOberserve){var e=document.querySelector("#".concat(t.CONTAINERID));e?e.getAttribute("style")!==t.styleStr&&e.setAttribute("style",t.styleStr):t.drawCanvas()}})).observe(document.querySelector("#".concat(this.CONTAINERID)).parentNode,{childList:!0})}},{key:"Repaint",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.remove(),this.init(t),this.drawCanvas()}},{key:"remove",value:function(){this.isOberserve=!0;var t=document.querySelector("#".concat(this.CONTAINERID));t.parentNode.removeChild(t)}}])&&Ae(e.prototype,n),i&&Ae(e,i),Object.defineProperty(e,"prototype",{writable:!1}),t}(),Me=200,Le=200,Ie={text:"avueJS",fontFamily:"microsoft yahei",color:"#999",fontSize:16,opacity:100,bottom:10,right:10,ratio:1};function Ne(t,e){var n=new FileReader;n.readAsDataURL(t),n.onload=function(t){e(t.target.result)}}var ze=function(t,e,n){var i=function(t){var e,n,i,o,a,r;i=t.length,n=0,e="";for(;n<i;){if(o=255&t.charCodeAt(n++),n==i){e+=Fe.charAt(o>>2),e+=Fe.charAt((3&o)<<4),e+="==";break}if(a=t.charCodeAt(n++),n==i){e+=Fe.charAt(o>>2),e+=Fe.charAt((3&o)<<4|(240&a)>>4),e+=Fe.charAt((15&a)<<2),e+="=";break}r=t.charCodeAt(n++),e+=Fe.charAt(o>>2),e+=Fe.charAt((3&o)<<4|(240&a)>>4),e+=Fe.charAt((15&a)<<2|(192&r)>>6),e+=Fe.charAt(63&r)}return e}(function(t){var e,n,i,o;for(e="",i=t.length,n=0;n<i;n++)(o=t.charCodeAt(n))>=1&&o<=127?e+=t.charAt(n):o>2047?(e+=String.fromCharCode(224|o>>12&15),e+=String.fromCharCode(128|o>>6&63),e+=String.fromCharCode(128|o>>0&63)):(e+=String.fromCharCode(192|o>>6&31),e+=String.fromCharCode(128|o>>0&63));return e}(JSON.stringify(n))),o=CryptoJS.HmacSHA1(i,e).toString(CryptoJS.enc.Base64);return t+":"+He(o)+":"+i};var Fe="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";new Array(-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1);var He=function(t){return t=(t=t.replace(/\+/g,"-")).replace(/\//g,"_")};function Ke(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return e.match(/(^http:\/\/|^https:\/\/|^\/\/|data:image\/)/)?e:t+e}var Re=Object(i.a)({name:"upload",mixins:[At(),Tt(),j.a],data:function(){return{res:"",loading:!1,text:[],file:{},menu:!1,reload:Math.random()}},props:{data:{type:Object,default:function(){return{}}},showFileList:{type:Boolean,default:!0},fileType:{type:String},oss:{type:String},limit:{type:Number,default:10},headers:{type:Object,default:function(){return{}}},accept:{type:[String,Array],default:""},canvasOption:{type:Object,default:function(){return{}}},cropperOption:{type:Object,default:function(){return{}}},fileSize:{type:Number},dragFile:{type:Boolean,default:!1},drag:{type:Boolean,default:!1},loadText:{type:String,default:"Loading..."},action:{type:String,default:""},uploadBefore:Function,uploadAfter:Function,uploadDelete:Function,uploadPreview:Function,uploadError:Function,uploadExceed:Function,httpRequest:Function},computed:{isMultiple:function(){return this.isArray||this.isString||this.stringMode},acceptList:function(){return Array.isArray(this.accept)?this.accept.join(","):this.accept},homeUrl:function(){return this.propsHttp.home||""},fileName:function(){return this.propsHttp.fileName||"file"},isAliOss:function(){return"ali"===this.oss},isQiniuOss:function(){return"qiniu"===this.oss},isPictureImg:function(){return"picture-img"===this.listType},imgUrl:function(){if(!this.validatenull(this.text))return Ke(this.homeUrl,this.text[0])},fileList:function(){var t=this,e=[];return(this.text||[]).forEach((function(n,i){if(n){var o;if(t.isMultiple){var a=n.lastIndexOf("/");o=n.substring(a+1)}var r=Ke(t.homeUrl,t.isMultiple?n:n[t.valueKey]);e.push({uid:i+"",status:"done",type:t.getIsVideo(r),name:t.isMultiple?o:n[t.labelKey],url:r})}})),e}},mounted:function(){this.drag&&this.setSort()},methods:{getIsVideo:function(t){return B.m.video.test(t)||"video"==this.fileType?"video":B.m.img.test(t)||"image"==this.fileType?"img":void 0},setSort:function(){var t=this;if(window.Sortable){var e=this.$el.querySelectorAll(".avue-upload > ul")[0];window.Sortable.create(e,{animation:100,onEnd:function(e){var n=t.text.splice(e.oldIndex,1)[0];t.text.splice(e.newIndex,0,n),t.reload=Math.random(),t.$nextTick((function(){return t.setSort()}))}})}else x.a.logs("Sortable")},handleSuccess:function(t){if(this.isPictureImg)this.text.splice(0,1,t[this.urlKey]);else if(this.isMultiple)this.text.push(t[this.urlKey]);else{var e={};e[this.labelKey]=t[this.nameKey],e[this.valueKey]=t[this.urlKey],this.text.push(e)}},handleRemove:function(t,e){var n=this;this.beforeRemove(t).then((function(){n.delete(t)}))},handleError:function(t){this.uploadError&&this.uploadError(t,this.column)},delete:function(t){var e=this;(this.text||[]).forEach((function(n,i){(e.isMultiple?n:n[e.valueKey])===t.url.replace(e.homeUrl,"")&&e.text.splice(i,1)}))},show:function(t){this.loading=!1,this.handleSuccess(t||this.res)},hide:function(t){this.loading=!1,this.handleError(t)},handleFileChange:function(t,e){e.splice(e.length-1,1)},httpUpload:function(t){var e=this;if("function"!=typeof this.httpRequest){this.loading=!0;var n=t.file,i=n.size/1024;if(this.file=t.file,!this.validatenull(i)&&i>this.fileSize)this.hide("鏂囦欢澶ぇ涓嶇鍚�");else{var o=Object.assign(this.headers,{"Content-Type":"multipart/form-data"}),a={},r={},s=new FormData,l=function(){var t=function(t){var i=e.action;for(var l in e.data)s.append(l,e.data[l]);var c=t||n;if(s.append(e.fileName,c),e.isQiniuOss){if(!window.CryptoJS)return x.a.logs("CryptoJS"),void e.hide();a=e.$AVUE.qiniu;var u=ze(a.AK,a.SK,{scope:a.scope,deadline:(new Date).getTime()+3600*a.deadline});s.append("token",u),i=a.bucket}else if(e.isAliOss){if(!window.OSS)return x.a.logs("AliOSS"),void e.hide();a=e.$AVUE.ali,r=new OSS(a)}(e.isAliOss?r.put(c.name,c,{headers:e.headers}):e.$axios.post(i,s,{headers:o})).then((function(t){e.res={},e.isQiniuOss&&(t.data.key=a.url+t.data.key),e.isAliOss?e.res=Object(D.m)(t,e.resKey):e.res=Object(D.m)(t.data,e.resKey),"function"==typeof e.uploadAfter?e.uploadAfter(e.res,e.show,(function(){e.loading=!1}),e.column):e.show(e.res)})).catch((function(t){"function"==typeof e.uploadAfter?e.uploadAfter(t,e.hide,(function(){e.loading=!1}),e.column):e.hide(t)}))};"function"==typeof e.uploadBefore?e.uploadBefore(e.file,t,(function(){e.loading=!1}),e.column):t()};this.validatenull(this.cropperOption)?this.validatenull(this.canvasOption)?l():function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0,i=e.text,o=e.fontFamily,a=e.color,r=e.fontSize,s=e.opacity,l=e.bottom,c=e.right,u=e.ratio;function d(){Ie.text=i||Ie.text,Ie.fontFamily=o||Ie.fontFamily,Ie.color=a||Ie.color,Ie.fontSize=r||Ie.fontSize,Ie.opacity=s||Ie.opacity,Ie.bottom=l||Ie.bottom,Ie.right=c||Ie.right,Ie.ratio=u||Ie.ratio}function p(e){var i=new Image;i.src=e,i.onload=function(){var e=i.width,o=i.height;h(e,o),Pe.drawImage(i,0,0,e,o),f(e,o),n&&n(Object(D.d)(document.getElementById("canvas").toDataURL(t.type,Ie.ratio),t.name))}}function h(t,e){null===(Te=document.getElementById("canvas"))&&((Te=document.createElement("canvas")).id="canvas",Te.className="avue-canvas",document.body.appendChild(Te)),Pe=Te.getContext("2d"),Te.width=t,Te.height=e}function f(t,e){var n=Ie.text,i=m(n,t,e);Pe.font=i.fontSize+"px "+Ie.fontFamily,Pe.fillStyle=Ie.color,Pe.globalAlpha=Ie.opacity/100,Pe.fillText(n,i.x,i.y)}function m(t,e,n){var i,o,a=Ie.fontSize/Me*e;return o=Ie.bottom?Le-Ie.bottom:Ie.top,i=Ie.right?Me-Ie.right:Ie.left,Pe.font=Ie.fontSize+"px "+Ie.fontFamily,{x:i=(i-=Number(Pe.measureText(t).width))/Me*e,y:o=o/Le*n,fontSize:a}}d(),Ne(t,p)}(n,this.canvasOption,(function(t){n=t,l()})):Ne(this.file,(function(t){var i=Object.assign(e.cropperOption,{img:t,type:"file",callback:function(t){n=t,l()},cancel:function(){e.loading=!1}});e.$ImageCropper(i)}))}}else this.httpRequest(t)},handleExceed:function(t,e){this.uploadExceed&&this.uploadExceed(this.limit,t,e,this.column)},handlePreview:function(t){var e=this,n=function(){var n=e.fileList.findIndex((function(e){return e.url===t.url}));e.$ImagePreview(e.fileList,n)};"function"==typeof this.uploadPreview?this.uploadPreview(t,this.column,n):n()},handleDelete:function(t){var e=this;this.beforeRemove(t).then((function(){e.text=[],e.menu=!1}))},beforeRemove:function(t){return"function"==typeof this.uploadDelete?this.uploadDelete(t,this.column):Promise.resolve()}}}),We=Object(s.a)(Re,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{directives:[{name:"loading",rawName:"v-loading.lock",value:t.loading,expression:"loading",modifiers:{lock:!0}}],class:t.b(),attrs:{"element-loading-text":t.loadText}},[n("el-upload",{key:t.reload,class:t.b({list:"picture-img"==t.listType,upload:t.disabled}),attrs:{action:t.action,"on-remove":t.handleRemove,accept:t.acceptList,"before-remove":t.beforeRemove,multiple:t.multiple,"on-preview":t.handlePreview,limit:t.limit,"http-request":t.httpUpload,readonly:t.readonly,drag:t.dragFile,"show-file-list":!t.isPictureImg&&t.showFileList,"list-type":t.listType,"on-change":t.handleFileChange,"on-exceed":t.handleExceed,disabled:t.disabled,"file-list":t.fileList},nativeOn:{click:function(e){return t.handleClick.apply(null,arguments)}},scopedSlots:t._u([{key:"file",fn:function(e){var i=e.file;return[t.$scopedSlots.default?t._t("default",null,{file:i}):"picture-card"===t.listType?n("span",[n(i.type,{tag:"component",staticClass:"el-upload-list__item-thumbnail",attrs:{src:i.url}}),t._v(" "),n("span",{staticClass:"el-upload-list__item-actions"},[n("span",{staticClass:"el-upload-list__item-preview"},[n("i",{staticClass:"el-icon-zoom-in",on:{click:function(e){return e.stopPropagation(),t.handlePreview(i)}}})]),t._v(" "),n("span",{staticClass:"el-upload-list__item-delete"},[t.disabled?t._e():n("i",{staticClass:"el-icon-delete",on:{click:function(e){return e.stopPropagation(),t.handleRemove(i)}}})])])],1):"picture"===t.listType?n("span",{on:{click:function(e){return e.stopPropagation(),t.handlePreview(i)}}},[n(i.type,{tag:"component",staticClass:"el-upload-list__item-thumbnail",attrs:{src:i.url}}),t._v(" "),n("a",{staticClass:"el-upload-list__item-name"},[n("i",{staticClass:"el-icon-document"}),t._v("\n          "+t._s(i.name)+"\n        ")]),t._v(" "),n("i",{staticClass:"el-icon-close",on:{click:function(e){return e.stopPropagation(),t.handleRemove(i)}}})],1):n("span",{on:{click:function(e){return e.stopPropagation(),t.handlePreview(i)}}},[n("a",{staticClass:"el-upload-list__item-name"},[n("i",{staticClass:"el-icon-document"}),t._v("\n          "+t._s(i.name)+"\n        ")]),t._v(" "),t.disabled?t._e():n("i",{staticClass:"el-icon-close",on:{click:function(e){return e.stopPropagation(),t.handleRemove(i)}}})])]}}],null,!0)},["picture-card"==t.listType?[n("i",{staticClass:"el-icon-plus"})]:"picture-img"==t.listType?[t.$scopedSlots.default?t._t("default",null,{file:{url:t.imgUrl}}):[t.imgUrl?n(t.getIsVideo(t.imgUrl),{tag:"component",class:t.b("avatar"),attrs:{src:t.imgUrl},on:{mouseover:function(e){t.menu=!0}}}):n("i",{staticClass:"el-icon-plus",class:t.b("icon")}),t._v(" "),t.menu?n("div",{staticClass:"el-upload-list__item-actions",class:t.b("menu"),on:{mouseover:function(e){t.menu=!0},mouseout:function(e){t.menu=!1},click:function(t){return t.stopPropagation(),function(){return!1}.apply(null,arguments)}}},[n("i",{staticClass:"el-icon-zoom-in",on:{click:function(e){return e.stopPropagation(),t.handlePreview({url:t.imgUrl})}}}),t._v(" "),t.disabled?t._e():n("i",{staticClass:"el-icon-delete",on:{click:function(e){return e.stopPropagation(),t.handleDelete(t.imgUrl)}}})]):t._e()]]:t.dragFile?[n("i",{staticClass:"el-icon-upload"}),t._v(" "),n("div",{staticClass:"el-upload__text"},[t._v("\n        "+t._s(t.t("upload.tip"))+"\n        "),n("em",[t._v(t._s(t.t("upload.upload")))])])]:[n("el-button",{attrs:{size:"small",type:"primary"}},[t._v(t._s(t.t("upload.upload")))])],t._v(" "),n("div",{staticClass:"el-upload__tip",attrs:{slot:"tip"},domProps:{innerHTML:t._s(t.tip)},slot:"tip"})],2)],1)}),[],!1,null,null,null).exports;var Ue=Object(i.a)({name:"sign",props:{width:{type:Number,default:600},height:{type:Number,default:400}},data:function(){return{disabled:!1,linex:[],liney:[],linen:[],canvas:{},context:{}}},computed:{styleName:function(){return{width:this.setPx(this.width),height:this.setPx(this.height)}}},mounted:function(){this.init()},methods:{getStar:function(t,e,n){var i=this.canvas,o=this.context,a=i.width/2,r=i.height/2;o.lineWidth=7,o.strokeStyle="#f00",o.beginPath(),o.arc(a,r,110,0,2*Math.PI),o.stroke(),function(t,e,n,i,o,a){t.save(),t.fillStyle=o,t.translate(e,n),t.rotate(Math.PI+a),t.beginPath();for(var r=Math.sin(0),s=Math.cos(0),l=Math.PI/5*4,c=0;c<5;c++){r=Math.sin(c*l),s=Math.cos(c*l);t.lineTo(r*i,s*i)}t.closePath(),t.stroke(),t.fill(),t.restore()}(o,a,r,20,"#f00",0),o.font="18px 榛戜綋",o.textBaseline="middle",o.textAlign="center",o.lineWidth=1,o.strokeStyle="#f00",o.strokeText(t,a,r+50),o.font="14px 榛戜綋",o.textBaseline="middle",o.textAlign="center",o.lineWidth=1,o.strokeStyle="#f00",o.strokeText(n,a,r+80),o.translate(a,r),o.font="22px 榛戜綋";for(var s,l=e.length,c=4*Math.PI/(3*(l-1)),u=e.split(""),d=0;d<l;d++)s=u[d],0==d?o.rotate(5*Math.PI/6):o.rotate(c),o.save(),o.translate(90,0),o.rotate(Math.PI/2),o.strokeText(s,0,0),o.restore(),o.save();this.disabled=!0},submit:function(t,e){return t||(t=this.width),e||(e=this.height),this.canvas.toDataURL("i/png")},clear:function(){this.linex=new Array,this.liney=new Array,this.linen=new Array,this.disabled=!1,this.canvas.width=this.canvas.width},init:function(){this.canvas=this.$refs.canvas;var t=this.canvas,e=this;void 0!==document.ontouchstart?(t.addEventListener("touchmove",s,!1),t.addEventListener("touchstart",l,!1),t.addEventListener("touchend",c,!1)):(t.addEventListener("mousemove",s,!1),t.addEventListener("mousedown",l,!1),t.addEventListener("mouseup",c,!1),t.addEventListener("mouseleave",c,!1)),this.context=t.getContext("2d");var n=this.context;this.linex=new Array,this.liney=new Array,this.linen=new Array;var i=1,o=30,a=0;function r(t,e){var n,i,o=t.getBoundingClientRect();return e.targetTouches?(n=e.targetTouches[0].clientX,i=e.targetTouches[0].clientY):(n=e.clientX,i=e.clientY),{x:(n-o.left)*(t.width/o.width),y:(i-o.top)*(t.height/o.height)}}function s(s){if(!e.disabled){var l=r(t,s).x,c=r(t,s).y;if(1==a){e.linex.push(l),e.liney.push(c),e.linen.push(1),n.save(),n.translate(n.canvas.width/2,n.canvas.height/2),n.translate(-n.canvas.width/2,-n.canvas.height/2),n.beginPath(),n.lineWidth=2;for(var u=1;u<e.linex.length;u++)i=e.linex[u],o=e.liney[u],0==e.linen[u]?n.moveTo(i,o):n.lineTo(i,o);n.shadowBlur=10,n.stroke(),n.restore()}s.preventDefault()}}function l(n){if(!e.disabled){var i=r(t,n).x,o=r(t,n).y;a=1,e.linex.push(i),e.liney.push(o),e.linen.push(0)}}function c(){e.disabled||(a=0)}}}}),Ve=Object(s.a)(Ue,(function(){var t=this.$createElement,e=this._self._c||t;return e("div",{class:this.b()},[e("canvas",{ref:"canvas",class:this.b("canvas"),attrs:{width:this.width,height:this.height}})])}),[],!1,null,null,null).exports,Ye=Object(i.a)({name:"slider",mixins:[At(),Tt()],props:{step:{type:Number},min:{type:Number},max:{type:Number},marks:{type:Object},range:{type:Boolean,default:!1},showInput:{type:Boolean,default:!1},showStops:{type:Boolean,default:!1},vertical:{type:Boolean,default:!1},formatTooltip:Function,height:String}}),Xe=Object(s.a)(Ye,(function(){var t=this,e=t.$createElement;return(t._self._c||e)("el-slider",{attrs:{disabled:t.disabled,vertical:t.vertical,height:t.height,step:t.step,min:t.min,max:t.max,range:t.range,"show-stops":t.showStops,"show-input":t.showInput,marks:t.marks,"format-tooltip":t.formatTooltip},nativeOn:{click:function(e){return t.handleClick.apply(null,arguments)}},model:{value:t.text,callback:function(e){t.text=e},expression:"text"}})}),[],!1,null,null,null).exports;function qe(t){return(qe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function Ge(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}var Je=function(){function t(e){if(function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),"object"===qe(e)){this.obj=e;var n=document.querySelector(e.el),i="";if("object"===qe(e.style))for(var o in e.style)i+=o+": "+e.style[o]+";";for(var a='<div class="akeyboard-keyboard'+(e.fixedBottomCenter?" akeyboard-keyboard-fixedBottomCenter":"")+'" style="'+i+'">',r=[],s=1;s<10;s++)r.push(s.toString());r.push("0");for(var l,c=e.keys||[["`"].concat(r).concat(["-","=","Delete"]),["Tab","q","w","e","r","t","y","u","i","o","p","[","]","\\"],["Caps","a","s","d","f","g","h","j","k","l",";","'","Enter"],["Shift","z","x","c","v","b","n","m",",",".","/","Shift"],["Space"]],u=[],d=[],p=0;p<c.length;p++){u.push([]),d.push([]),l=c[p];for(var h=0;h<l.length;h++)if(1!==l[h].length)u[p].push(l[h]),d[p].push(l[h]);else{switch(d[p].push(l[h].toUpperCase()),l[h]){case"`":u[p].push("~");continue;case"1":u[p].push("!");continue;case"2":u[p].push("@");continue;case"3":u[p].push("#");continue;case"4":u[p].push("$");continue;case"5":u[p].push("%");continue;case"6":u[p].push("^");continue;case"7":u[p].push("&");continue;case"8":u[p].push("*");continue;case"9":u[p].push("(");continue;case"0":u[p].push(")");continue;case"-":u[p].push("_");continue;case"=":u[p].push("+");continue;case"[":u[p].push("{");continue;case"]":u[p].push("}");continue;case"\\":u[p].push("|");continue;case";":u[p].push(":");continue;case"'":u[p].push('"');continue;case",":u[p].push("<");continue;case".":u[p].push(">");continue;case"/":u[p].push("?");continue}u[p].push(l[h].toUpperCase())}}for(var f=0;f<c.length;f++){l=c[f],a+='<div class="akeyboard-keyboard-innerKeys">';for(var m=0;m<l.length;m++)a+='<div class="akeyboard-keyboard-keys akeyboard-keyboard-keys-'+l[m]+'">'+l[m]+"</div>";a+="</div>"}a+="</div>",n.innerHTML=a;var v=!1;if(c.forEach((function(t){t.includes("Shift")&&(v=!0)})),v)document.querySelectorAll(e.el+" .akeyboard-keyboard-keys-Shift").forEach((function(t){t.onclick=function(){if(this.isShift){t.isShift=!1,t.innerHTML="Shift",this.classList.remove("keyboard-keyboard-keys-focus");for(var n,i=document.querySelectorAll(e.el+" .akeyboard-keyboard-innerKeys"),o=0;o<i.length;o++){n=i[o];for(var a=0;a<n.childNodes.length;a++)n.childNodes[a].innerHTML=c[o][a]}}else{var r=document.querySelector(e.el+" .akeyboard-keyboard-keys-Caps");if(r&&r.isCaps)return;t.isShift=!0,t.innerHTML="SHIFT",this.classList.add("keyboard-keyboard-keys-focus");for(var s,l=document.querySelectorAll(e.el+" .akeyboard-keyboard-innerKeys"),d=0;d<l.length;d++){s=l[d];for(var p=0;p<s.childNodes.length;p++)"Shift"!==u[d][p]&&(s.childNodes[p].innerHTML=u[d][p])}}}}));var b=!1;if(c.forEach((function(t){t.includes("Caps")&&(b=!0)})),b)document.querySelectorAll(e.el+" .akeyboard-keyboard-keys-Caps").forEach((function(t){t.onclick=function(){if(this.isCaps){this.isCaps=!1,this.classList.remove("keyboard-keyboard-keys-focus");for(var t,n=document.querySelectorAll(e.el+" .akeyboard-keyboard-innerKeys"),i=0;i<n.length;i++){t=n[i];for(var o=0;o<t.childNodes.length;o++)t.childNodes[o].innerHTML=c[i][o]}}else{var a=document.querySelector(e.el+" .akeyboard-keyboard-keys-Shift");if(a&&a.isShift)return;this.isCaps=!0,this.classList.add("keyboard-keyboard-keys-focus");for(var r,s=document.querySelectorAll(e.el+" .akeyboard-keyboard-innerKeys"),l=0;l<s.length;l++){r=s[l];for(var u=0;u<r.childNodes.length;u++)r.childNodes[u].innerHTML=d[l][u]}}}}))}else console.error('aKeyboard: The obj parameter needs to be an object <In "new aKeyboard()">')}var e,n,i;return e=t,(n=[{key:"inputOn",value:function(t,e,n,i){if("string"==typeof t)if("string"==typeof e)for(var o=document.querySelector(t),a=document.querySelectorAll(this.obj.el+" .akeyboard-keyboard-keys"),r=0;r<a.length;r++)["Shift","Caps"].includes(a[r].innerHTML)||("Delete"!==a[r].innerHTML?"Tab"!==a[r].innerHTML?"Enter"!==a[r].innerHTML?"Space"!==a[r].innerHTML?i&&"object"===qe(i)&&Object.keys(i).length>0&&i[a[r].innerHTML]?a[r].onclick=i[a[r].innerHTML]:a[r].onclick=function(){o[e]+=this.innerText,n(this.innerText,o[e])}:a[r].onclick=function(){o[e]+=" ",n("Space",o[e])}:a[r].onclick=function(){o[e]+="\n",n("Enter",o[e])}:a[r].onclick=function(){o[e]+="  ",n("Tab",o[e])}:a[r].onclick=function(){o[e]=o[e].substr(0,o[e].length-1),n("Delete",o[e])});else console.error('aKeyboard: The type parameter needs to be a string <In "aKeyboard.inputOn()">');else console.error('aKeyboard: The inputEle parameter needs to be a string <In "aKeyboard.inputOn()">')}},{key:"onclick",value:function(t,e){if("string"==typeof t)if("function"==typeof e){var n=document.querySelector(this.obj.el+" .akeyboard-keyboard-keys-"+t);n?n.onclick=e:console.error("Can not find key: "+t)}else console.error('aKeyboard: The fn parameter needs to be a function <In "aKeyboard.onclick()">');else console.error('aKeyboard: The btn parameter needs to be a string <In "aKeyboard.onclick()">')}}])&&Ge(e.prototype,n),i&&Ge(e,i),Object.defineProperty(e,"prototype",{writable:!1}),t}();function Qe(t){return(Qe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function Ze(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}var tn=function(){function t(e){if(function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),"object"===Qe(e)){this.obj=e;var n=document.querySelector(e.el),i="";if("object"===Qe(e.style))for(var o in e.style)i+=o+": "+e.style[o]+";";var a='<div class="akeyboard-numberKeyboard'+(e.fixedBottomCenter?" akeyboard-keyboard-fixedBottomCenter":"")+'" style="'+i+'">';a+='<div class="akeyboard-keyboard-innerKeys">';for(var r=1;r<10;r++)a+='<div class="akeyboard-keyboard-keys akeyboard-keyboard-keys-'+r+'">'+r+"</div>",r%3==0&&(a+='</div><div class="akeyboard-keyboard-innerKeys">');a+='<div class="akeyboard-keyboard-keys akeyboard-keyboard-keys-0">0</div><div class="akeyboard-keyboard-keys akeyboard-keyboard-keys-Delete">Delete</div></div><div class="akeyboard-keyboard-innerKeys"><div class="akeyboard-keyboard-keys akeyboard-numberKeyboard-keys-Enter">Enter</div></div>',a+="</div>",n.innerHTML=a}else console.error('aKeyboard: The obj parameter needs to be an object <In "new aKeyboard()">')}var e,n,i;return e=t,(n=[{key:"inputOn",value:function(t,e,n,i){if("string"==typeof t)if("string"==typeof e)for(var o=document.querySelector(t),a=document.querySelectorAll(this.obj.el+" .akeyboard-keyboard-keys"),r=0;r<a.length;r++)"Delete"!==a[r].innerHTML?"Enter"!==a[r].innerHTML?i&&"object"===Qe(i)&&Object.keys(i).length>0&&i[a[r].innerHTML]?a[r].onclick=i[a[r].innerHTML]:a[r].onclick=function(){o[e]+=this.innerText,n(this.innerText,o[e])}:a[r].onclick=function(){o[e]+="\n",n("Enter",o[e])}:a[r].onclick=function(){o[e]=o[e].substr(0,o[e].length-1),n("Delete",o[e])};else console.error('aKeyboard: The type parameter needs to be a string <In "aKeyboard.inputOn()">');else console.error('aKeyboard: The inputEle parameter needs to be a string <In "aKeyboard.inputOn()">')}},{key:"onclick",value:function(t,e){if("string"==typeof t)if("function"==typeof e){var n=document.querySelector(this.obj.el+" .akeyboard-keyboard-keys-"+t);n?n.onclick=e:console.error("Can not find key: "+t)}else console.error('aKeyboard: The fn parameter needs to be a function <In "aKeyboard.onclick()">');else console.error('aKeyboard: The btn parameter needs to be a string <In "aKeyboard.onclick()">')}}])&&Ze(e.prototype,n),i&&Ze(e,i),Object.defineProperty(e,"prototype",{writable:!1}),t}();var en=Object(i.a)({name:"keyboard",props:{ele:{type:String,required:!0},keys:Array,theme:{type:String,default:"default",validator:function(t){return["default","dark","green","classic"].includes(t)}},type:{type:String,default:"default",validator:function(t){return["default","number","mobile"].includes(t)}},fixedBottomCenter:{type:Boolean,default:!1},rebind:{type:Boolean,default:!0}},watch:{ele:function(){this.init()}},data:function(){return{customClick:{}}},computed:{className:function(){return"avue-keyboard--".concat(this.theme)}},mounted:function(){this.init()},methods:{init:function(){var t=this;if(this.ele){var e,n={el:"#keyboard",style:{},keys:this.keys,fixedBottomCenter:this.fixedBottomCenter};"default"==this.type?e=new Je(n):"number"==this.type?e=new tn(n):"mobile"==this.type&&(e=new MobileKeyBoard(n));var i=0==this.ele.indexOf("#")?this.ele.substring(1):this.ele;e.inputOn("#".concat(i),"value",(function(e,n){t.$emit("click",e,n)}),this.rebind?this.customClick:null),this.keyboard=e}},bindClick:function(t,e){this.keyboard.onclick(t,e),this.customClick[t]=e}}}),nn=Object(s.a)(en,(function(){var t=this.$createElement,e=this._self._c||t;return e("div",{class:[this.b(),this.className]},[e("div",{attrs:{id:"keyboard"}})])}),[],!1,null,null,null).exports,on=Object(i.a)({name:"tree",mixins:[j.a],directives:{permission:w},props:{indent:Number,filterNodeMethod:Function,checkOnClickNode:Boolean,permission:{type:[Function,Object],default:function(){return{}}},iconClass:{type:String},loading:{type:Boolean,default:!1},expandOnClickNode:{type:Boolean,default:!1},option:{type:Object,default:function(){return{}}},data:{type:Array,default:function(){return[]}},value:{type:Object,default:function(){return{}}}},data:function(){return{filterValue:"",client:{x:0,y:0,show:!1},box:!1,type:"",node:{},obj:{},form:{}}},computed:{styleName:function(){return{top:this.setPx(this.client.y-10),left:this.setPx(this.client.x-10)}},treeProps:function(){return Object.assign(this.props,{isLeaf:this.leafKey})},menu:function(){return this.vaildData(this.option.menu,!0)},title:function(){return this.option.title},treeLoad:function(){return this.option.treeLoad},checkStrictly:function(){return this.option.checkStrictly},accordion:function(){return this.option.accordion},multiple:function(){return this.option.multiple},lazy:function(){return this.option.lazy},addText:function(){return this.addFlag?this.menuIcon("addBtn"):this.menuIcon("updateBtn")},addFlag:function(){return["add","parentAdd"].includes(this.type)},size:function(){return this.option.size||"small"},props:function(){return this.option.props||{}},leafKey:function(){return this.props.leaf||B.e.leaf},valueKey:function(){return this.props.value||B.e.value},labelKey:function(){return this.props.label||B.e.label},childrenKey:function(){return this.props.children||B.e.children},nodeKey:function(){return this.option.nodeKey||B.e.nodeKey},defaultExpandAll:function(){return this.option.defaultExpandAll},defaultExpandedKeys:function(){return this.option.defaultExpandedKeys},formOption:function(){return Object.assign(this.option.formOption||{},{submitText:this.addText})}},mounted:function(){var t=this;document.addEventListener("click",(function(e){t.$el.contains(e.target)||(t.client.show=!1)})),this.initFun()},watch:{filterValue:function(t){this.$refs.tree.filter(t)},value:function(t){this.form=t},form:function(t){this.$emit("input",t)}},methods:{menuIcon:function(t){return this.vaildData(this.option[t+"Text"],this.t("crud."+t))},getPermission:function(t){return"function"==typeof this.permission?this.permission(t,this.node):!!this.validatenull(this.permission[t])||this.permission[t]},initFun:function(){var t=this;["filter","updateKeyChildren","getCheckedNodes","setCheckedNodes","getCheckedKeys","setCheckedKeys","setChecked","getHalfCheckedNodes","getHalfCheckedKeys","getCurrentKey","getCurrentNode","setCurrentKey","setCurrentNode","getNode","remove","append","insertBefore","insertAfter"].forEach((function(e){t[e]=t.$refs.tree[e]}))},nodeContextmenu:function(t,e){this.node=this.deepClone(e),this.client.x=t.clientX,this.client.y=t.clientY,this.client.show=!0},handleCheckChange:function(t,e,n){this.$emit("check-change",t,e,n)},handleSubmit:function(t,e){this.addFlag?this.save(t,e):this.update(t,e)},nodeClick:function(t,e,n){this.client.show=!1,this.$emit("node-click",t,e,n)},filterNode:function(t,e){return"function"==typeof this.filterNodeMethod?this.filterNodeMethod(t,e):!t||-1!==e[this.labelKey].indexOf(t)},hide:function(){this.box=!1,this.node={},this.$refs.form.resetForm(),this.$refs.form.clearValidate()},save:function(t,e){var n=this;this.$emit("save",this.node,t,(function(){var t=n.deepClone(n.form);"add"===n.type?n.$refs.tree.append(t,n.node[n.valueKey]):"parentAdd"===n.type&&n.$refs.tree.append(t),n.hide(),e()}),e)},update:function(t,e){var n=this;this.$emit("update",this.node,t,(function(){(n.$refs.tree.getNode(n.node[n.valueKey])||{}).data=n.deepClone(n.form),n.hide(),e()}),e)},rowEdit:function(t){this.type="edit",this.form=this.node,this.show()},parentAdd:function(){this.type="parentAdd",this.show()},rowAdd:function(){this.type="add",this.show()},show:function(){this.client.show=!1,this.box=!0},rowRemove:function(){var t=this;this.client.show=!1;this.$emit("del",this.node,(function(){t.$refs.tree.remove(t.node[t.valueKey])}))}}}),an=Object(s.a)(on,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:t.b()},[t.vaildData(t.option.filter,!0)?n("div",{class:t.b("filter")},[n("el-input",{attrs:{placeholder:t.vaildData(t.option.filterText,"杈撳叆鍏抽敭瀛楄繘琛岃繃婊�"),size:t.size},model:{value:t.filterValue,callback:function(e){t.filterValue=e},expression:"filterValue"}},[t.vaildData(t.option.addBtn,!0)?n("el-button",{directives:[{name:"permission",rawName:"v-permission",value:t.getPermission("addBtn"),expression:"getPermission('addBtn')"}],attrs:{slot:"append",size:t.size,icon:"el-icon-plus"},on:{click:t.parentAdd},slot:"append"}):t._t("addBtn",null,{slot:"append"})],2)],1):t._e(),t._v(" "),n("el-scrollbar",{class:t.b("content")},[n("el-tree",{directives:[{name:"loading",rawName:"v-loading",value:t.loading,expression:"loading"}],ref:"tree",attrs:{data:t.data,lazy:t.lazy,load:t.treeLoad,props:t.treeProps,"icon-class":t.iconClass,indent:t.indent,"highlight-current":!t.multiple,"show-checkbox":t.multiple,accordion:t.accordion,"node-key":t.valueKey,"check-strictly":t.checkStrictly,"check-on-click-node":t.checkOnClickNode,"filter-node-method":t.filterNode,"expand-on-click-node":t.expandOnClickNode,"default-expand-all":t.defaultExpandAll,"default-expanded-keys":t.defaultExpandedKeys},on:{"check-change":t.handleCheckChange,"node-click":t.nodeClick,"node-contextmenu":t.nodeContextmenu},scopedSlots:t._u([{key:"default",fn:function(e){var i=e.node,o=e.data;return t.$scopedSlots.default?t._t("default",null,{node:i,data:o}):n("span",{staticClass:"el-tree-node__label"},[n("span",[t._v(t._s(i.label))])])}}],null,!0)})],1),t._v(" "),t.client.show&&t.menu?n("div",{staticClass:"el-cascader-panel is-bordered",class:t.b("menu"),style:t.styleName,on:{click:function(e){t.client.show=!1}}},[t.vaildData(t.option.addBtn,!0)?n("div",{directives:[{name:"permission",rawName:"v-permission",value:t.getPermission("addBtn"),expression:"getPermission('addBtn')"}],class:t.b("item"),on:{click:t.rowAdd}},[t._v(t._s(t.menuIcon("addBtn")))]):t._e(),t._v(" "),t.vaildData(t.option.editBtn,!0)?n("div",{directives:[{name:"permission",rawName:"v-permission",value:t.getPermission("editBtn"),expression:"getPermission('editBtn')"}],class:t.b("item"),on:{click:t.rowEdit}},[t._v(t._s(t.menuIcon("editBtn")))]):t._e(),t._v(" "),t.vaildData(t.option.delBtn,!0)?n("div",{directives:[{name:"permission",rawName:"v-permission",value:t.getPermission("delBtn"),expression:"getPermission('delBtn')"}],class:t.b("item"),on:{click:t.rowRemove}},[t._v(t._s(t.menuIcon("delBtn")))]):t._e(),t._v(" "),t._t("menu",null,{node:t.node})],2):t._e(),t._v(" "),n("el-dialog",{staticClass:"avue-dialog",class:t.b("dialog"),attrs:{title:t.node[t.labelKey]||t.title,visible:t.box,"modal-append-to-body":"","append-to-body":"",width:t.vaildData(t.option.dialogWidth,"50%")},on:{"update:visible":function(e){t.box=e},close:t.hide}},[n("avue-form",{ref:"form",attrs:{option:t.formOption},on:{submit:t.handleSubmit},model:{value:t.form,callback:function(e){t.form=e},expression:"form"}})],1)],1)}),[],!1,null,null,null).exports,rn=Object(i.a)({name:"title",mixins:[At(),Tt()],props:{styles:{type:Object,default:function(){return{}}}},mounted:function(){},methods:{}}),sn=Object(s.a)(rn,(function(){var t=this.$createElement,e=this._self._c||t;return e("div",{class:this.b()},[e("p",{style:this.styles},[this._v(this._s(this.text))])])}),[],!1,null,null,null).exports,ln=Object(i.a)({name:"search",mixins:[Object(O.a)()],props:{value:{}},computed:{isCard:function(){return this.parentOption.card},parentOption:function(){return this.tableOption},propOption:function(){return this.columnOption},columnOption:function(){return this.parentOption.column}},data:function(){return{form:{}}},watch:{value:{handler:function(){this.setVal()},deep:!0}},created:function(){this.dataformat(),this.setVal()},methods:{setVal:function(){var t=this;Object.keys(this.value).forEach((function(e){t.$set(t.form,e,t.value[e])}))},getKey:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0;return t[e[n]||(this.parentOption.props||{})[n]||n]},dataformat:function(){var t=this;this.columnOption.forEach((function(e){var n=e.prop;t.validatenull(t.form[n])&&(!1===e.multiple?t.$set(t.form,n,""):t.$set(t.form,n,[]))}))},getActive:function(t,e){var n=this.getKey(t,e.props,"value");return!1===e.multiple?this.form[e.prop]===n:this.form[e.prop].includes(n)},handleClick:function(t,e){var n=this.getKey(e,t.props,"value");if(!1===t.multiple)this.form[t.prop]=n;else{var i=this.form[t.prop].indexOf(n);-1===i?this.form[t.prop].push(n):this.form[t.prop].splice(i,1)}this.$emit("change",this.form),this.$emit("input",this.form)}}}),cn=Object(s.a)(ln,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("el-row",{class:[t.b(),{"avue--card":t.isCard}],attrs:{span:24}},t._l(t.columnOption,(function(e,i){return n("el-col",{key:e.prop,class:t.b("item"),attrs:{span:e.span||24}},[n("p",{class:t.b("title")},[t._v(t._s(e.label)+":")]),t._v(" "),n("div",{class:t.b("content")},[e.slot?t._t(e.prop,null,{dic:t.DIC[e.prop]}):t._l(t.DIC[e.prop],(function(i){return n("span",{key:t.getKey(i,e.props,"value"),class:[t.b("tags"),{"avue-search__tags--active":t.getActive(i,e)}],on:{click:function(n){return t.handleClick(e,i)}}},[t._v(t._s(t.getKey(i,e.props,"label")))])}))],2)])})),1)}),[],!1,null,null,null).exports;var un=Object(i.a)({name:"skeleton",props:{loading:{type:Boolean,default:!0},avatar:Boolean,active:{type:Boolean,default:!0},block:Boolean,number:{type:Number,default:1},rows:{type:Number,default:3}},computed:{styleName:function(){return this.block?{width:"100%"}:{}},className:function(){var t,e,n,i=this.active;return t={},e="".concat("avue-skeleton","__loading"),n=i,e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}}}),dn=Object(s.a)(un,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:t.b()},t._l(t.number,(function(e,i){return t.loading?n("div",{key:i,class:t.b("item")},[n("div",{class:t.b("header")},[t.avatar?n("span",{class:[t.b("avatar"),t.className]}):t._e()]),t._v(" "),n("div",{class:t.b("content")},[n("h3",{class:[t.b("title"),t.className]}),t._v(" "),n("div",{class:t.b("list")},t._l(t.rows,(function(e,i){return n("li",{key:i,class:[t.b("li"),t.className],style:t.styleName})})),0)])]):n("div",[t._t("default")],2)})),0)}),[],!1,null,null,null).exports,pn=Object(i.a)({name:"tabs",props:{option:{type:Object,required:!0,default:function(){return{}}}},data:function(){return{active:"0"}},watch:{active:function(){this.$emit("change",this.tabsObj)}},computed:{tabsObj:function(){return this.columnOption[this.active]},parentOption:function(){return this.option},columnOption:function(){return this.parentOption.column||[]}},methods:{changeTabs:function(t){this.active=t+""}}}),hn=Object(s.a)(pn,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:t.b()},[n("el-tabs",{attrs:{"tab-position":t.parentOption.position,type:t.parentOption.type},model:{value:t.active,callback:function(e){t.active=e},expression:"active"}},t._l(t.columnOption,(function(e,i){return n("el-tab-pane",{key:i,attrs:{name:i+"",disabled:e.disabled}},[n("span",{attrs:{slot:"label"},slot:"label"},[n("i",{class:e.icon}),t._v("聽\n        "+t._s(e.label)+"\n      ")])])})),1)],1)}),[],!1,null,null,null).exports,fn=Object(i.a)({name:"dynamic",mixins:[At(),Tt()],data:function(){return{hoverList:[]}},props:{columnSlot:{type:Array,default:function(){return[]}},children:{type:Object,default:function(){return{}}}},computed:{showIndex:function(){return this.vaildData(this.children.index,!0)},showType:function(){return this.children.type||"crud"},isForm:function(){return"form"===this.showType},isCrud:function(){return"crud"===this.showType},selectionChange:function(){return this.children.selectionChange},sortableChange:function(){return this.children.sortableChange},rowAdd:function(){return this.children.rowAdd},rowDel:function(){return this.children.rowDel},viewBtn:function(){return!1===this.children.viewBtn},addBtn:function(){return!1===this.children.addBtn},delBtn:function(){return!1===this.children.delBtn},valueOption:function(){var t={};return this.columnOption.forEach((function(e){e.value&&(t[e.prop]=e.value)})),t},rulesOption:function(){var t={};return this.columnOption.forEach((function(e){e.rules&&(t[e.prop]=e.rules)})),t},columnOption:function(){return this.children.column||[]},option:function(){var t,e=this;return Object.assign({border:!0,header:!1,menu:!1,size:this.size,disabled:this.disabled,readonly:this.readonly,emptyBtn:!1,submitBtn:!1},function(){var t=e.deepClone(e.children);return delete t.column,t}(),(t=[{label:e.children.indexLabel||"#",prop:"_index",display:e.showIndex,fixed:!0,align:"center",headerAlign:"center",span:24,width:50}],e.columnOption.forEach((function(n){t.push(Object.assign(n,{cell:e.vaildData(n.cell,!0)}))})),{column:t}))}},mounted:function(){this.initData()},watch:{textLen:function(){return this.text.length},text:function(){this.initData()}},methods:{handleSelectionChange:function(t){this.selectionChange&&this.selectionChange(t)},handleSortableChange:function(t,e,n,i){this.sortableChange&&this.sortableChange(t,e,n,i)},cellMouseenter:function(t){var e=t.$index;this.mouseoverRow(e)},cellMouseLeave:function(t,e,n,i){var o=t.$index;this.mouseoutRow(o)},initData:function(){this.text.forEach((function(t,e){t=Object.assign(t,{$cellEdit:!0,$index:e})}))},mouseoverRow:function(t){this.delBtn||(this.flagList(),this.$set(this.hoverList,t,!0))},mouseoutRow:function(t){this.delBtn||(this.flagList(),this.$set(this.hoverList,t,!1))},flagList:function(){this.hoverList.forEach((function(t,e){!1}))},delRow:function(t){var e=this,n=function(){var n=e.deepClone(e.text);n.splice(t,1),e.text=n};"function"==typeof this.rowDel?this.rowDel(this.text[t],n):n()},addRow:function(){var t=this,e=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};e=Object.assign(t.valueOption,e,{$index:t.textLen}),t.isCrud?t.$refs.main.rowCellAdd(e):t.isForm&&t.text.push(e)};"function"==typeof this.rowAdd?this.rowAdd(e):e()}}}),mn=Object(s.a)(fn,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:t.b()},[t.isForm?[n("div",{class:t.b("header")},[t.readonly||t.disabled||t.addBtn?t._e():n("el-button",{attrs:{size:"mini",circle:"",disabled:t.disabled,type:"primary",icon:"el-icon-plus"},on:{click:t.addRow}})],1),t._v(" "),n("div",t._l(t.text,(function(e,i){return n("div",{key:i,class:t.b("row"),on:{mouseenter:function(e){return t.cellMouseenter({$index:i})},mouseleave:function(e){return t.cellMouseLeave({$index:i})}}},[t.readonly||t.disabled||t.delBtn||!t.hoverList[i]?t._e():n("el-button",{class:t.b("menu"),attrs:{type:"danger",size:"mini",disabled:t.disabled,icon:"el-icon-delete",circle:""},on:{click:function(n){return t.delRow(e.$index)}}}),t._v(" "),n("avue-form",{key:i,ref:"main",refInFor:!0,attrs:{option:t.deepClone(t.option)},scopedSlots:t._u([{key:"_index",fn:function(i){return n("div",{},[n("span",[t._v(t._s(e.$index+1))])])}},t._l(t.columnSlot,(function(e){return{key:e,fn:function(n){return[t._t(e,null,null,Object.assign(n,{row:t.text[i]}))]}}}))],null,!0),model:{value:t.text[i],callback:function(e){t.$set(t.text,i,e)},expression:"text[index]"}})],1)})),0)]:t.isCrud?n("avue-crud",{ref:"main",attrs:{option:t.option,disabled:t.disabled,data:t.text},on:{"cell-mouse-enter":t.cellMouseenter,"cell-mouse-leave":t.cellMouseLeave,"selection-change":t.handleSelectionChange,"sortable-change":t.handleSortableChange},scopedSlots:t._u([{key:"_indexHeader",fn:function(e){return[t.addBtn||t.readonly?t._e():n("el-button",{attrs:{type:"primary",size:"mini",disabled:t.disabled,icon:"el-icon-plus",circle:""},on:{click:function(e){return t.addRow()}}})]}},{key:"_index",fn:function(e){return[t.readonly||t.disabled||t.delBtn||!t.hoverList[e.row.$index]?n("div",[t._v(t._s(e.row.$index+1))]):n("el-button",{attrs:{type:"danger",size:"mini",disabled:t.disabled,icon:"el-icon-delete",circle:""},on:{click:function(n){return t.delRow(e.row.$index)}}})]}},t._l(t.columnSlot,(function(e){return{key:t.getSlotName({prop:e},"F"),fn:function(n){return[t._t(e,null,null,n)]}}}))],null,!0)}):t._e()],2)}),[],!1,null,null,null).exports,vn=Object(i.a)({name:"queue",props:{enter:{type:String,default:"fadeInLeft"},leave:{type:String,default:"fadeOutRight"},block:{type:Boolean,default:!1},delay:{type:Number,default:0}},data:function(){return{isFixed:0,animate:[]}},mounted:function(){var t=this;this.$nextTick((function(){addEventListener("scroll",t.handleAnimate),t.handleAnimate()}))},methods:{handleAnimate:function(){var t=this;(pageYOffset||document.documentElement.scrollTop||document.body.scrollTop)+document.documentElement.clientHeight>this.$refs.queue.offsetTop?setTimeout((function(){t.animate=[t.enter,"avue-opacity--active"]}),this.delay):this.animate=["avue-opacity"]}},destroyed:function(){removeEventListener("scroll",this.handleAnimate)}}),bn=Object(s.a)(vn,(function(){var t=this.$createElement,e=this._self._c||t;return e("div",{class:[this.b(),{"avue-queue--block":this.block}]},[e("div",{ref:"queue",staticClass:"animated",class:this.animate},[this._t("default")],2)])}),[],!1,null,null,null).exports;function gn(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}var yn=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.video=e,this.mediaRecorder=null,this.chunks=[]}var e,n,i;return e=t,(n=[{key:"init",value:function(){var t=this;return new Promise((function(e,n){navigator.mediaDevices.getUserMedia({audio:!0,video:!0}).then((function(n){"srcObject"in t.video?t.video.srcObject=n:t.video.src=window.URL.createObjectURL(n),t.video.addEventListener("loadmetadata",(function(){t.video.play()})),t.mediaRecorder=new MediaRecorder(n),t.mediaRecorder.addEventListener("dataavailable",(function(e){t.chunks.push(e.data)})),e()})).catch((function(t){n(t)}))}))}},{key:"startRecord",value:function(){"inactive"===this.mediaRecorder.state&&this.mediaRecorder.start()}},{key:"stopRecord",value:function(){"recording"===this.mediaRecorder.state&&this.mediaRecorder.stop()}},{key:"isSupport",value:function(){if(navigator.mediaDevices&&navigator.mediaDevices.getUserMedia)return!0}}])&&gn(e.prototype,n),i&&gn(e,i),Object.defineProperty(e,"prototype",{writable:!1}),t}(),_n=Object(i.a)({name:"video",props:{background:{type:String},width:{type:[String,Number],default:500}},computed:{styleName:function(){return{width:this.setPx(this.width)}},imgStyleName:function(){return{width:this.setPx(this.width/2)}},borderStyleName:function(){return{width:this.setPx(this.width/15),height:this.setPx(this.width/15),borderWidth:this.setPx(5)}}},data:function(){return{videoObj:null}},mounted:function(){this.init()},methods:{init:function(){var t=this;this.videoObj=new yn(this.$refs.main),this.videoObj.init().then((function(){t.videoObj.mediaRecorder.addEventListener("stop",t.getData,!1)}))},startRecord:function(){this.videoObj.startRecord()},stopRecord:function(){this.videoObj.stopRecord()},getData:function(){var t=this,e=new Blob(this.videoObj.chunks,{type:"video/mp4"}),n=new FileReader;n.readAsDataURL(e),n.addEventListener("loadend",(function(){var e=n.result;t.$emit("data-change",e)}))}}}),xn=Object(s.a)(_n,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:t.b(),style:t.styleName},[n("div",{class:t.b("border")},[n("span",{style:t.borderStyleName}),t._v(" "),n("span",{style:t.borderStyleName}),t._v(" "),n("span",{style:t.borderStyleName}),t._v(" "),n("span",{style:t.borderStyleName})]),t._v(" "),n("img",{class:t.b("img"),style:t.imgStyleName,attrs:{src:t.background}}),t._v(" "),n("video",{ref:"main",class:t.b("main"),attrs:{autoplay:"",muted:""},domProps:{muted:!0}})])}),[],!1,null,null,null).exports,wn=Object(i.a)({name:"login",props:{value:{type:Object,default:function(){return{}}},codesrc:{type:String},option:{type:Object,default:function(){return{}}}},watch:{value:{handler:function(){this.form=this.value},deep:!0},form:{handler:function(){this.$emit("input",this.form)},deep:!0,immediate:!0}},computed:{labelWidth:function(){return this.option.labelWidth||80},time:function(){return this.option.time||60},isImg:function(){return"img"===this.codeType},isPhone:function(){return"phone"===this.codeType},codeType:function(){return this.option.codeType||"img"},width:function(){return this.option.width||"100%"},username:function(){return this.column.username||{}},password:function(){return this.column.password||{}},code:function(){return this.column.code||{}},column:function(){return this.option.column||{}},sendDisabled:function(){return!this.validatenull(this.check)}},data:function(){return{text:"鍙戦�侀獙璇佺爜",nowtime:"",check:{},flag:!1,form:{username:"",password:"",code:""}}},methods:{onSend:function(){var t=this;this.sendDisabled||this.$emit("send",(function(){t.nowtime=t.time,t.text="{{time}}s鍚庨噸鑾峰彇".replace("{{time}}",t.nowtime),t.check=setInterval((function(){t.nowtime--,0===t.nowtime?(t.text="鍙戦�侀獙璇佺爜",clearInterval(t.check),t.check=null):t.text="{{time}}s鍚庨噸鑾峰彇".replace("{{time}}",t.nowtime)}),1e3)}))},onRefresh:function(){this.$emit("refresh")},onSubmit:function(){var t=this;this.$refs.form.validate((function(e){e&&t.$emit("submit",function(){var e={};for(var n in t.form){var i=n;t[n].prop&&(i=t[n].prop),e[i]=t.form[n]}return e}())}))}}}),On=Object(s.a)(wn,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:t.b(),style:{width:t.setPx(t.width)}},[n("el-form",{ref:"form",attrs:{model:t.form,"label-suffix":":","label-width":t.setPx(t.labelWidth)}},[t.username.hide?t._e():n("el-form-item",{attrs:{label:t.username.label||"鐢ㄦ埛鍚�",rules:t.username.rules,"label-width":t.setPx(t.username.labelWidth),prop:"username"}},[n("el-tooltip",{attrs:{content:t.username.tip,disabled:void 0===t.username.tip,placement:"top-start"}},[n("el-input",{attrs:{size:"small","prefix-icon":t.username.prefixIcon||"el-icon-user",placeholder:t.username.placeholder||"璇疯緭鍏ョ敤鎴峰悕",autocomplete:t.username.autocomplete},model:{value:t.form.username,callback:function(e){t.$set(t.form,"username",e)},expression:"form.username"}})],1)],1),t._v(" "),t.password.hide?t._e():n("el-form-item",{attrs:{label:t.password.label||"瀵嗙爜",rules:t.password.rules,"label-width":t.setPx(t.password.labelWidth),prop:"password"}},[n("el-tooltip",{attrs:{content:t.password.tip,disabled:void 0===t.password.tip,placement:"top-start"}},[n("el-input",{attrs:{type:"password",size:"small","prefix-icon":t.password.prefixIcon||"el-icon-unlock",placeholder:t.password.placeholder||"璇疯緭鍏ュ瘑鐮�","show-password":"",autocomplete:t.password.autocomplete},model:{value:t.form.password,callback:function(e){t.$set(t.form,"password",e)},expression:"form.password"}})],1)],1),t._v(" "),t.code.hide?t._e():n("el-form-item",{attrs:{label:t.code.label||"楠岃瘉鐮�",rules:t.code.rules,"label-width":t.setPx(t.code.labelWidth),prop:"code"}},[n("el-tooltip",{attrs:{content:t.code.tip,disabled:void 0===t.code.tip,placement:"top-start"}},[n("el-input",{attrs:{size:"small","prefix-icon":t.code.prefixIcon||"el-icon-c-scale-to-original",placeholder:t.code.placeholder||"璇疯緭鍏ラ獙璇佺爜",autocomplete:t.code.autocomplete},model:{value:t.form.code,callback:function(e){t.$set(t.form,"code",e)},expression:"form.code"}},[n("template",{slot:"append"},[t.isPhone?n("el-button",{class:t.b("send"),attrs:{type:"primary",disabled:t.sendDisabled},on:{click:t.onSend}},[t._v(t._s(t.text))]):t._e(),t._v(" "),t.isImg?n("span",[n("img",{attrs:{src:t.codesrc,alt:"",width:"80",height:"25"},on:{click:t.onRefresh}})]):t._e()],1)],2)],1)],1),t._v(" "),n("el-form-item",[n("el-button",{class:t.b("submit"),attrs:{type:"primary"},on:{click:t.onSubmit}},[t._v("鐧诲綍")])],1)],1)],1)}),[],!1,null,null,null).exports,Cn=Object(i.a)({name:"array",mixins:[At(),Tt()],data:function(){return{text:[]}},computed:{isLimit:function(){return!this.validatenull(this.limit)&&this.textLen>=this.limit},textLen:function(){return(this.text||[]).length},isImg:function(){return"img"===this.type},isUrl:function(){return"url"===this.type}},props:{alone:Boolean,type:String,size:String,placeholder:String,readonly:Boolean,disabled:Boolean,value:[Array,String],limit:Number},methods:{add:function(t){this.text.splice(t+1,0,"")},remove:function(t){this.text.splice(t,1)},openImg:function(t){var e=this.text.map((function(t){return{thumbUrl:t,url:t}}));this.$ImagePreview(e,t)}}}),kn=Object(s.a)(Cn,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:t.b()},[t.validatenull(t.text)?n("el-button",{attrs:{type:"primary",icon:"el-icon-plus",circle:"",size:t.size,disabled:t.disabled},on:{click:function(e){return t.add()}}}):t._e(),t._v(" "),t._l(t.text,(function(e,i){return n("div",{key:i,class:t.b("item")},[n("div",{class:t.b("input")},[n("el-tooltip",{attrs:{placement:"bottom",disabled:!t.isImg&&!t.isUrl||t.validatenull(e)}},[n("div",{attrs:{slot:"content"},slot:"content"},[t.isImg?n("el-image",{staticStyle:{width:"150px"},attrs:{src:e,fit:"cover"},on:{click:function(e){return t.openImg(i)}}}):t.isUrl?n("el-link",{attrs:{type:"primary",href:e,target:t.target}},[t._v(t._s(e))]):t._e()],1),t._v(" "),n("el-input",{attrs:{size:t.size,placeholder:t.placeholder,disabled:t.disabled},model:{value:t.text[i],callback:function(e){t.$set(t.text,i,e)},expression:"text[index]"}})],1),t._v(" "),t.disabled||t.readonly||t.alone?t._e():[t.isLimit?t._e():n("el-button",{attrs:{type:"primary",icon:"el-icon-plus",circle:"",size:t.size,disabled:t.disabled},on:{click:function(e){return t.add(i)}}}),t._v(" "),n("el-button",{attrs:{type:"danger",icon:"el-icon-minus",circle:"",size:t.size,disabled:t.disabled},on:{click:function(e){return t.remove(i)}}})]],2)])}))],2)}),[],!1,null,null,null).exports,Sn=Object(i.a)({name:"text-ellipsis",props:{text:String,height:Number,width:Number,isLimitHeight:{type:Boolean,default:!0},useTooltip:{type:Boolean,default:!1},placement:String},data:function(){return{keyIndex:0,oversize:!1,isHide:!1}},watch:{isLimitHeight:function(){this.init()},text:function(){this.init()},height:function(){this.init()}},mounted:function(){this.init()},methods:{init:function(){this.oversize=!1,this.keyIndex+=1,this.$refs.more.style.display="none",this.isLimitHeight&&this.limitShow()},limitShow:function(){var t=this;this.$nextTick((function(){var e=t.$refs.text,n=t.$el,i=t.$refs.more,o=1e3;if(e)if(n.offsetHeight>t.height){i.style.display="inline-block";for(var a=t.text;n.offsetHeight>t.height&&o>0;)n.offsetHeight>3*t.height?e.innerText=a=a.substring(0,Math.floor(a.length/2)):e.innerText=a=a.substring(0,a.length-1),o--;t.$emit("hide"),t.isHide=!0}else t.$emit("show"),t.isHide=!1}))}}}),En=[kn,l,m,g,_,ft,yt,bt,kt,jt,Dt,Bt,Lt,p,Nt,Kt,Wt,Yt,qt,Jt,Zt,oe,re,le,de,he,me,be,xe,ye,Oe,Ee,$e,We,Xe,nn,an,sn,cn,hn,bn,mn,xn,ke,Object(s.a)(Sn,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:t.b(),style:{width:t.setPx(t.width,"100%")}},[t._t("before"),t._v(" "),n("el-tooltip",{attrs:{content:t.text,disabled:!(t.useTooltip&&t.isHide),placement:t.placement}},[n("span",[n("span",{key:t.keyIndex,ref:"text",class:t.b("text")},[t._v(t._s(t.text))])])]),t._v(" "),n("span",{ref:"more",class:t.b("more")},[t._t("more")],2),t._v(" "),t._t("after")],2)}),[],!1,null,null,null).exports,dn,Ve,On],jn=Object(i.a)({name:"data-tabs",data:function(){return{}},computed:{animation:function(){return this.option.animation},decimals:function(){return this.option.decimals||0},span:function(){return this.option.span||8},data:function(){return this.option.data||[]}},props:{option:{type:Object,default:function(){}}}}),$n=Object(s.a)(jn,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"avue-data-tabs"},[n("el-row",{attrs:{span:24}},t._l(t.data,(function(e,i){return n("el-col",{key:i,attrs:{md:t.span,xs:24,sm:12}},[n("div",{staticClass:"item",style:{background:e.color}},[n("a",{attrs:{href:e.href?e.href:"javascript:void(0);",target:e.target},on:{click:function(t){e.click&&e.click(e)}}},[n("div",{staticClass:"item-header"},[n("p",[t._v(t._s(e.title))]),t._v(" "),n("span",[t._v(t._s(e.subtitle))])]),t._v(" "),n("div",{staticClass:"item-body"},[n("avue-count-up",{staticClass:"h2",attrs:{decimals:e.decimals||t.decimals,animation:e.animation||t.animation,end:e.count}})],1),t._v(" "),n("div",{staticClass:"item-footer"},[n("span",[t._v(t._s(e.allcount))]),t._v(" "),n("p",[t._v(t._s(e.text))])]),t._v(" "),n("p",{staticClass:"item-tip"},[t._v(t._s(e.key))])])])])})),1)],1)}),[],!1,null,null,null).exports,Dn=Object(i.a)({name:"data-cardtext",data:function(){return{}},computed:{icon:function(){return this.option.icon},color:function(){return this.option.color||"#333"},span:function(){return this.option.span||8},data:function(){return this.option.data||[]}},props:{option:{type:Object,default:function(){}}}}),An=Object(s.a)(Dn,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"avue-data-cardText"},[n("el-row",{attrs:{span:24}},t._l(t.data,(function(e,i){return n("el-col",{key:i,attrs:{md:t.span,xs:24,sm:12}},[n("div",{staticClass:"item"},[n("a",{attrs:{href:e.href||"javascript:void(0);",target:e.target},on:{click:function(t){e.click&&e.click(e)}}},[n("div",{staticClass:"item-header"},[n("i",{class:e.icon||"el-icon-bell",style:{color:e.color||"red"}}),t._v(" "),n("a",{},[t._v(t._s(e.title))])]),t._v(" "),n("div",{staticClass:"item-content"},[t._v(t._s(e.content))]),t._v(" "),n("div",{staticClass:"item-footer"},[n("span",[t._v(t._s(e.name))]),t._v(" "),n("span",[t._v(t._s(e.date))])])])])])})),1)],1)}),[],!1,null,null,null).exports,Tn=Object(i.a)({name:"data-box",data:function(){return{}},props:{option:{type:Object,default:function(){}}},computed:{animation:function(){return this.option.animation},decimals:function(){return this.option.decimals||0},span:function(){return this.option.span||8},data:function(){return this.option.data||[]}},created:function(){},mounted:function(){},watch:{},methods:{}}),Pn=Object(s.a)(Tn,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"data-box"},[n("el-row",{attrs:{span:24}},t._l(t.data,(function(e,i){return n("el-col",{key:i,attrs:{md:t.span,xs:24,sm:12}},[n("div",{staticClass:"item"},[n("a",{attrs:{href:e.href?e.href:"javascript:void(0);",target:e.target},on:{click:function(t){e.click&&e.click(e)}}},[n("div",{staticClass:"item-icon",style:{backgroundColor:e.color}},[n("i",{class:e.icon})]),t._v(" "),n("div",{staticClass:"item-info"},[n("avue-count-up",{staticClass:"title",style:{color:e.color},attrs:{animation:e.animation||t.animation,decimals:e.decimals||t.decimals,end:e.count}}),t._v(" "),n("div",{staticClass:"info"},[t._v(t._s(e.title))])],1)])])])})),1)],1)}),[],!1,null,null,null).exports,Bn=Object(i.a)({name:"data-progress",data:function(){return{}},props:{option:{type:Object,default:function(){}}},computed:{animation:function(){return this.option.animation},decimals:function(){return this.option.decimals||0},span:function(){return this.option.span||8},data:function(){return this.option.data||[]}},created:function(){},mounted:function(){},watch:{},methods:{}}),Mn=Object(s.a)(Bn,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"data-progress"},[n("el-row",{attrs:{span:24}},t._l(t.data,(function(e,i){return n("el-col",{key:i,attrs:{md:t.span,xs:24,sm:12}},[n("div",{staticClass:"item"},[n("a",{attrs:{href:e.href?e.href:"javascript:void(0);",target:e.target},on:{click:function(t){e.click&&e.click(e)}}},[n("div",{staticClass:"item-header"},[n("avue-count-up",{staticClass:"item-count",attrs:{animation:e.animation||t.animation,decimals:e.decimals||t.decimals,end:e.count}}),t._v(" "),n("div",{staticClass:"item-title",domProps:{textContent:t._s(e.title)}})],1),t._v(" "),n("el-progress",{attrs:{"stroke-width":15,percentage:e.count,color:e.color,"show-text":!1}})],1)])])})),1)],1)}),[],!1,null,null,null).exports,Ln=Object(i.a)({name:"data-icons",data:function(){return{}},computed:{animation:function(){return this.option.animation},decimals:function(){return this.option.decimals||0},span:function(){return this.option.span||4},data:function(){return this.option.data},color:function(){return this.option.color||"rgb(63, 161, 255)"},discount:function(){return this.option.discount||!1}},props:{option:{type:Object,default:function(){}}}}),In=Object(s.a)(Ln,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"data-icons"},[n("el-row",{attrs:{span:24}},[t._l(t.data,(function(e,i){return[n("el-col",{key:i,attrs:{xs:12,sm:6,md:t.span}},[n("div",{staticClass:"item",class:[{"item--easy":t.discount}]},[n("a",{attrs:{href:e.href?e.href:"javascript:void(0);",target:e.target},on:{click:function(t){e.click&&e.click(e)}}},[n("div",{staticClass:"item-icon",style:{color:t.color}},[n("i",{class:e.icon})]),t._v(" "),n("div",{staticClass:"item-info"},[n("span",[t._v(t._s(e.title))]),t._v(" "),n("avue-count-up",{staticClass:"count",style:{color:t.color},attrs:{animation:e.animation||t.animation,decimals:e.decimals||t.decimals,end:e.count}})],1)])])])]}))],2)],1)}),[],!1,null,null,null).exports,Nn=Object(i.a)({name:"data-card",data:function(){return{}},props:{option:{type:Object,default:function(){}}},computed:{span:function(){return this.option.span||6},data:function(){return this.option.data||[]},colorText:function(){return this.option.colorText||"#fff"},bgText:function(){return this.option.bgText||"#2e323f"},borderColor:function(){return this.option.borderColor||"#2e323f"}},created:function(){},mounted:function(){},watch:{},methods:{}}),zn=Object(s.a)(Nn,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"data-card"},[n("el-row",{attrs:{span:24}},t._l(t.data,(function(e,i){return n("el-col",{key:i,attrs:{md:t.span,xs:24,sm:12}},[n("div",{staticClass:"item"},[n("a",{attrs:{href:e.href?e.href:"javascript:void(0);",target:e.target},on:{click:function(t){e.click&&e.click(e)}}},[n("img",{staticClass:"item-img",attrs:{src:e.src}}),t._v(" "),n("div",{staticClass:"item-text",style:{backgroundColor:t.bgText}},[n("h3",{style:{color:t.colorText}},[t._v(t._s(e.name))]),t._v(" "),n("p",{style:{color:t.colorText}},[t._v(t._s(e.text))])])])])])})),1)],1)}),[],!1,null,null,null).exports,Fn=Object(i.a)({name:"data-display",data:function(){return{}},computed:{animation:function(){return this.option.animation},decimals:function(){return this.option.decimals||0},span:function(){return this.option.span||6},data:function(){return this.option.data||[]},color:function(){return this.option.color||"rgb(63, 161, 255)"}},props:{option:{type:Object,default:function(){}}},created:function(){},methods:{}}),Hn=Object(s.a)(Fn,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"avue-data-display"},[n("el-row",{attrs:{span:24}},t._l(t.data,(function(e,i){return n("el-col",{key:i,attrs:{md:t.span,xs:12,sm:12}},[n("div",{staticClass:"item",style:{color:t.color}},[n("a",{attrs:{href:e.href?e.href:"javascript:void(0);",target:e.target},on:{click:function(t){e.click&&e.click(e)}}},[n("avue-count-up",{staticClass:"count",attrs:{animation:e.animation||t.animation,decimals:e.decimals||t.decimals,end:e.count}}),t._v(" "),n("span",{staticClass:"splitLine"}),t._v(" "),n("div",{staticClass:"title"},[t._v(t._s(e.title))])],1)])])})),1)],1)}),[],!1,null,null,null).exports,Kn=Object(i.a)({name:"data-imgtext",data:function(){return{}},computed:{span:function(){return this.option.span||6},data:function(){return this.option.data||[]},color:function(){return this.option.color||"rgb(63, 161, 255)"}},props:{option:{type:Object,default:function(){}}},created:function(){},methods:{}}),Rn=Object(s.a)(Kn,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"avue-data-imgtext"},[n("el-row",{attrs:{span:24}},t._l(t.data,(function(e,i){return n("el-col",{key:i,attrs:{md:t.span,xs:24,sm:12}},[n("div",{staticClass:"item",style:{color:t.color}},[n("a",{attrs:{href:e.href?e.href:"javascript:void(0);",target:e.target},on:{click:function(t){e.click&&e.click(e)}}},[n("div",{staticClass:"item-header"},[n("img",{attrs:{src:e.imgsrc,alt:""}})]),t._v(" "),n("div",{staticClass:"item-content"},[n("span",[t._v(t._s(e.title))]),t._v(" "),n("p",[t._v(t._s(e.content))])]),t._v(" "),n("div",{staticClass:"item-footer"},[n("div",{staticClass:"time"},[n("span",[t._v(t._s(e.time))])]),t._v(" "),n("div",{staticClass:"imgs"},[n("ul",t._l(e.headimg,(function(t,e){return n("li",{key:e},[n("el-tooltip",{attrs:{effect:"dark",content:t.name,placement:"top-start"}},[n("img",{attrs:{src:t.src,alt:""}})])],1)})),0)])])])])])})),1)],1)}),[],!1,null,null,null).exports,Wn=Object(i.a)({name:"data-operatext",data:function(){return{}},computed:{span:function(){return this.option.span||6},data:function(){return this.option.data||[]}},props:{option:{type:Object,default:function(){}}},created:function(){},methods:{}}),Un=Object(s.a)(Wn,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"avue-data-operatext"},[n("el-row",{attrs:{span:24}},t._l(t.data,(function(e,i){return n("el-col",{key:i,attrs:{md:t.span,xs:24,sm:12}},[n("div",{staticClass:"item"},[n("a",{attrs:{href:e.href?e.href:"javascript:void(0);"},on:{click:function(t){e.click&&e.click(e)}}},[n("div",{staticClass:"item-header",style:{backgroundColor:e.color,backgroundImage:"url("+e.colorImg+")"}},[n("span",{staticClass:"item-title"},[t._v(t._s(e.title))]),t._v(" "),n("span",{staticClass:"item-subtitle"},[t._v(t._s(e.subtitle))])]),t._v(" "),n("div",{staticClass:"item-content"},[n("div",{staticClass:"item-img"},[n("img",{attrs:{src:e.img,alt:""}})]),t._v(" "),n("div",{staticClass:"item-list"},t._l(e.list,(function(e,i){return n("div",{key:i,staticClass:"item-row"},[n("span",{staticClass:"item-label"},[t._v(t._s(e.label))]),t._v(" "),n("span",{staticClass:"item-value"},[t._v(t._s(e.value))])])})),0)])])])])})),1)],1)}),[],!1,null,null,null).exports,Vn=Object(i.a)({name:"data-rotate",data:function(){return{}},props:{option:{type:Object,default:function(){}}},computed:{animation:function(){return this.option.animation},decimals:function(){return this.option.decimals||0},span:function(){return this.option.span||8},data:function(){return this.option.data||[]}},created:function(){},mounted:function(){},watch:{},methods:{}}),Yn=Object(s.a)(Vn,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"avue-data-rotate"},[n("el-row",{attrs:{span:24}},t._l(t.data,(function(e,i){return n("el-col",{key:i,attrs:{md:t.span,xs:24,sm:12}},[n("div",{staticClass:"item",style:{backgroundColor:e.color}},[n("div",{staticClass:"item-box"},[n("avue-count-up",{staticClass:"item-count",attrs:{decimals:e.decimals||t.decimals,animation:e.animation||t.animation,end:e.count}}),t._v(" "),n("span",{staticClass:"item-title"},[t._v(t._s(e.title))]),t._v(" "),n("i",{staticClass:"item-icon",class:e.icon})],1),t._v(" "),n("a",{attrs:{href:e.href?e.href:"javascript:void(0);"},on:{click:function(t){e.click&&e.click(e)}}},[n("p",{staticClass:"item-more"},[t._v("鏇村"),n("i",{staticClass:"el-icon-arrow-right"})])])])])})),1)],1)}),[],!1,null,null,null).exports,Xn=Object(i.a)({name:"data-pay",props:{option:{type:Object,default:function(){}}},computed:{animation:function(){return this.option.animation},decimals:function(){return this.option.decimals||0},span:function(){return this.option.span||6},data:function(){return this.option.data||[]}}}),qn=Object(s.a)(Xn,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:t.b()},[n("el-row",{attrs:{span:24}},t._l(t.data,(function(e,i){return n("el-col",{key:i,attrs:{md:t.span,xs:24,sm:12}},[n("div",{staticClass:"item"},[n("div",{staticClass:"top",style:{backgroundColor:e.color}}),t._v(" "),n("div",{staticClass:"header"},[n("p",{staticClass:"title"},[t._v(t._s(e.title))]),t._v(" "),n("img",{staticClass:"img",attrs:{src:e.src,alt:""}}),t._v(" "),e.subtitle?[n("p",{staticClass:"subtitle",style:{color:e.color}},[t._v(t._s(e.subtitle))])]:t._e(),t._v(" "),e.money||e.dismoney?[n("p",{staticClass:"money",style:{color:e.color}},[n("span",[t._v("楼")]),t._v(" "),n("avue-count-up",{staticClass:"b",attrs:{decimals:e.decimals||t.decimals,animation:e.animation||t.animation,end:e.dismoney}}),t._v(" "),n("s",[t._v(t._s(e.money))]),t._v(" "),n("em",[t._v(t._s(e.tip))])],1)]:t._e(),t._v(" "),n("div",{staticClass:"line"}),t._v(" "),n("a",{staticClass:"btn",style:{backgroundColor:e.color},attrs:{href:e.href?e.href:"javascript:void(0);"},on:{click:function(t){e.click&&e.click(e)}}},[t._v(t._s(e.subtext))])],2),t._v(" "),n("div",{staticClass:"list"},t._l(e.list,(function(i,o){return n("div",{staticClass:"list-item"},[i.check?n("i",{staticClass:"list-item-icon list-item--check",style:{color:e.color}},[t._v("鈭�")]):n("i",{staticClass:"list-item-icon list-item--no"},[t._v("x")]),t._v(" "),n("a",{attrs:{href:i.href?i.href:"javascript:void(0);"}},[n("el-tooltip",{attrs:{effect:"dark",disabled:!i.tip,placement:"top"}},[n("div",{attrs:{slot:"content"},domProps:{innerHTML:t._s(i.tip)},slot:"content"}),t._v(" "),n("span",{class:{"list-item--link":i.href}},[t._v(t._s(i.title))])])],1)])})),0)])])})),1)],1)}),[],!1,null,null,null).exports,Gn=Object(i.a)({name:"data-price",data:function(){return{}},computed:{span:function(){return this.option.span||6},data:function(){return this.option.data}},props:{option:{type:Object,default:function(){}}}}),Jn=Object(s.a)(Gn,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"data-price"},[n("el-row",{attrs:{span:24}},[t._l(t.data,(function(e,i){return[n("el-col",{key:i,attrs:{xs:12,sm:6,md:t.span}},[n("div",{staticClass:"item item--active"},[n("a",{attrs:{href:e.href?e.href:"javascript:void(0);",target:e.target},on:{click:function(t){e.click&&e.click(e)}}},[n("div",{staticClass:"title"},[t._v("\n              "+t._s(e.title)+"\n            ")]),t._v(" "),n("div",{staticClass:"body"},[n("span",{staticClass:"price"},[t._v(t._s(e.price))]),t._v(" "),n("span",{staticClass:"append"},[t._v(t._s(e.append))])]),t._v(" "),n("div",{staticClass:"list"},t._l(e.list,(function(e,i){return n("p",{key:i},[t._v("\n                "+t._s(e)+"\n              ")])})),0)])])])]}))],2)],1)}),[],!1,null,null,null).exports,Qn=Object(i.a)({name:"data-panel",data:function(){return{}},computed:{decimals:function(){return this.option.decimals||0},animation:function(){return this.option.animation},span:function(){return this.option.span||6},data:function(){return this.option.data||[]}},props:{option:{type:Object,default:function(){}}},created:function(){},methods:{}}),Zn=[$n,An,Pn,Mn,In,zn,Hn,Rn,Un,Yn,qn,Jn,Object(s.a)(Qn,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"avue-data-panel"},[n("el-row",{attrs:{span:24}},t._l(t.data,(function(e,i){return n("el-col",{key:i,attrs:{md:t.span,xs:24,sm:12}},[n("a",{attrs:{href:e.href?e.href:"javascript:void(0);"},on:{click:function(t){e.click&&e.click(e)}}},[n("div",{staticClass:"item"},[n("div",{staticClass:"item-icon"},[n("i",{class:e.icon,style:{color:e.color}})]),t._v(" "),n("div",{staticClass:"item-info"},[n("div",{staticClass:"item-title"},[t._v(t._s(e.title))]),t._v(" "),n("avue-count-up",{staticClass:"item-count",attrs:{animation:e.animation||t.animation,decimals:e.decimals||t.decimals,end:e.count}})],1)])])])})),1)],1)}),[],!1,null,null,null).exports];function ti(t){return function(t){if(Array.isArray(t))return ei(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(!t)return;if("string"==typeof t)return ei(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ei(t,e)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ei(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}var ni=[].concat(ti(En),ti(Zn)),ii=n(20),oi=n.n(ii),ai={bind:function(t,e,n,i){if(0!=e.value){var o=t.querySelector(".el-dialog__header"),a=t.querySelector(".el-dialog");o.style.cursor="move";var r=a.currentStyle||window.getComputedStyle(a,null),s=a.style.width;s=s.includes("%")?+document.body.clientWidth*(+s.replace(/\%/g,"")/100):+s.replace(/\px/g,""),o.onmousedown=function(t){var e,n,i=t.clientX-o.offsetLeft,s=t.clientY-o.offsetTop;r.left.includes("%")?(e=+document.body.clientWidth*(+r.left.replace(/\%/g,"")/100),n=+document.body.clientHeight*(+r.top.replace(/\%/g,"")/100)):(e=+r.left.replace(/\px/g,""),n=+r.top.replace(/\px/g,"")),document.onmousemove=function(t){var o=t.clientX-i,r=t.clientY-s,l=o+e,c=r+n;a.style.left="".concat(l,"px"),a.style.top="".concat(c,"px")},document.onmouseup=function(t){document.onmousemove=null,document.onmouseup=null}}}}},ri=function(){var t;function e(e,n,i,o){var a=n,r=i;o&&(e.oncontextmenu=function(e){var n=e.clientX,i=e.clientY,o=document.documentElement.clientWidth,s=document.documentElement.clientHeight,l=t.offsetWidth,c=t.offsetHeight;s-i-c<0&&(i-=c),o-n-l<0&&(n-=l);var u=function e(){t.style.display="none",document.removeEventListener("click",e)},d=function(){t.style.display="block",t.style.position="fixed",t.style.zIndex=1024,t.style.top=i+"px",t.style.left=n+"px",document.addEventListener("click",u)};return r?r(a,d):d(),!1})}return{inserted:function(n,i){var o=i.value.id,a=i.value.event,r=i.value.value;(t=document.getElementById(o))&&(t.style.display="none",e(n,r,a,!0))},update:function(t,n){var i=n.value.event;e(t,n.value.value,i,!1)}}}();function si(t){return function(t){if(Array.isArray(t))return li(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(!t)return;if("string"==typeof t)return li(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return li(t,e)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function li(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}var ci={buildHeader:function(t){var e=this,n=[];this.getHeader(t,n,0,0);var i=Math.max.apply(Math,si(n.map((function(t){return t.length}))));return n.filter((function(t){return t.length<i})).forEach((function(t){return e.pushRowSpanPlaceHolder(t,i-t.length)})),n},getHeader:function(t,e,n,i){var o=0,a=e[n];a||(a=e[n]=[]),this.pushRowSpanPlaceHolder(a,i-a.length);for(var r=0;r<t.length;r++){var s=t[r];if(a.push(s.label),s.hasOwnProperty("children")&&Array.isArray(s.children)&&s.children.length>0){var l=this.getHeader(s.children,e,n+1,a.length-1);this.pushColSpanPlaceHolder(a,l-1),o+=l}else o++}return o},pushRowSpanPlaceHolder:function(t,e){for(var n=0;n<e;n++)t.push("!$ROW_SPAN_PLACEHOLDER")},pushColSpanPlaceHolder:function(t,e){for(var n=0;n<e;n++)t.push("!$COL_SPAN_PLACEHOLDER")},doMerges:function(t){for(var e=t.length,n=[],i=0;i<e;i++)for(var o=t[i],a=0,r=0;r<o.length;r++)"!$COL_SPAN_PLACEHOLDER"===o[r]?(o[r]=void 0,r+1===o.length&&n.push({s:{r:i,c:r-a-1},e:{r:i,c:r}}),a++):a>0&&r>a?(n.push({s:{r:i,c:r-a-1},e:{r:i,c:r-1}}),a=0):a=0;for(var s=t[0].length,l=0;l<s;l++)for(var c=0,u=0;u<e;u++)"!$ROW_SPAN_PLACEHOLDER"===t[u][l]?(t[u][l]=void 0,u+1===e&&n.push({s:{r:u-c,c:l},e:{r:u,c:l}}),c++):c>0&&u>c?(n.push({s:{r:u-c-1,c:l},e:{r:u-1,c:l}}),c=0):c=0;return n},aoa_to_sheet:function(t,e){for(var n={},i={s:{c:1e7,r:1e7},e:{c:0,r:0}},o=0;o!==t.length;++o)for(var a=0;a!==t[o].length;++a){i.s.r>o&&(i.s.r=o),i.s.c>a&&(i.s.c=a),i.e.r<o&&(i.e.r=o),i.e.c<a&&(i.e.c=a);var r={v:Object(D.x)(t[o][a],""),s:{font:{name:"瀹嬩綋",sz:11,color:{auto:1,rgb:"000000"},bold:!0},alignment:{wrapText:1,horizontal:"center",vertical:"center",indent:0}}};o<e&&(r.s.border={top:{style:"thin",color:{rgb:"EBEEF5"}},left:{style:"thin",color:{rgb:"EBEEF5"}},bottom:{style:"thin",color:{rgb:"EBEEF5"}},right:{style:"thin",color:{rgb:"EBEEF5"}}},r.s.fill={patternType:"solid",fgColor:{theme:3,tint:.3999755851924192,rgb:"F5F7FA"},bgColor:{theme:7,tint:.3999755851924192,rgb:"F5F7FA"}});var s=XLSX.utils.encode_cell({c:a,r:o});"number"==typeof r.v?r.t="n":"boolean"==typeof r.v?r.t="b":r.t="s",n[s]=r}return i.s.c<1e7&&(n["!ref"]=XLSX.utils.encode_range(i)),n},s2ab:function(t){for(var e=new ArrayBuffer(t.length),n=new Uint8Array(e),i=0;i!==t.length;++i)n[i]=255&t.charCodeAt(i);return e},excel:function(t){var e=this;if(window.XLSX)return new Promise((function(n,i){var o,a={prop:[]};a.header=e.buildHeader(t.columns),a.title=t.title||xt()().format("YYYY-MM-DD HH:mm:ss");!function t(e){e.forEach((function(e){e.children&&e.children instanceof Array?t(e.children):a.prop.push(e.prop)}))}(t.columns),a.data=t.data.map((function(t){return a.prop.map((function(e){var n=t[e];return Object(D.q)(n)&&(n=JSON.stringify(n)),n}))}));var r=a.header.length;(o=a.header).push.apply(o,si(a.data).concat([[]]));var s=e.doMerges(a.header),l=e.aoa_to_sheet(a.header,r);l["!merges"]=s,l["!freeze"]={xSplit:"1",ySplit:""+r,topLeftCell:"B"+(r+1),activePane:"bottomRight",state:"frozen"},l["!cols"]=[{wpx:165}];var c={SheetNames:["Sheet1"],Sheets:{}};c.Sheets.Sheet1=l;var u=XLSX.write(c,{bookType:"xlsx",bookSST:!1,type:"binary",cellStyles:!0}),d=new Blob([e.s2ab(u)],{type:"application/octet-stream"});Object(D.h)(d,a.title+".xlsx"),n()}));x.a.logs("xlsx")},xlsx:function(t){if(!window.saveAs||!window.XLSX)return x.a.logs("file-saver"),void x.a.logs("xlsx");var e=window.XLSX;return new Promise((function(n,i){var o=new FileReader;o.onload=function(t){var i=function(t){for(var e="",n=0,i=10240;n<t.byteLength/i;++n)e+=String.fromCharCode.apply(null,new Uint8Array(t.slice(n*i,n*i+i)));return e+=String.fromCharCode.apply(null,new Uint8Array(t.slice(n*i)))}(t.target.result),o=e.read(btoa(i),{type:"base64"}),a=o.SheetNames[0],r=o.Sheets[a],s=function(t){var n,i=[],o=e.utils.decode_range(t["!ref"]),a=o.s.r;for(n=o.s.c;n<=o.e.c;++n){var r=t[e.utils.encode_cell({c:n,r:a})],s="UNKNOWN "+n;r&&r.t&&(s=e.utils.format_cell(r)),i.push(s)}return i}(r),l=e.utils.sheet_to_json(r);n({header:s,results:l})},o.readAsArrayBuffer(t)}))}},ui=n(15),di=n(12);function pi(t){return(pi="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var hi=function t(e,n){if(!(this instanceof t))return new t(e,n);this.options=this.extend({noPrint:".no-print"},n),"string"==typeof e?this.dom=document.querySelector(e):(this.isDOM(e),this.dom=this.isDOM(e)?e:e.$el),this.init()};hi.prototype={init:function(){var t=this.getStyle()+this.getHtml();this.writeIframe(t)},extend:function(t,e){for(var n in e)t[n]=e[n];return t},getStyle:function(){for(var t="",e=document.querySelectorAll("style,link"),n=0;n<e.length;n++)t+=e[n].outerHTML;return t+="<style>"+(this.options.noPrint?this.options.noPrint:".no-print")+"{display:none;}</style>"},getHtml:function(){for(var t=document.querySelectorAll("input"),e=document.querySelectorAll("textarea"),n=document.querySelectorAll("select"),i=0;i<t.length;i++)"checkbox"==t[i].type||"radio"==t[i].type?1==t[i].checked?t[i].setAttribute("checked","checked"):t[i].removeAttribute("checked"):(t[i].type,t[i].setAttribute("value",t[i].value));for(var o=0;o<e.length;o++)"textarea"==e[o].type&&(e[o].innerHTML=e[o].value);for(var a=0;a<n.length;a++)if("select-one"==n[a].type){var r=n[a].children;for(var s in r)"OPTION"==r[s].tagName&&(1==r[s].selected?r[s].setAttribute("selected","selected"):r[s].removeAttribute("selected"))}return this.wrapperRefDom(this.dom).outerHTML},wrapperRefDom:function(t){var e=null,n=t;if(!this.isInBody(n))return n;for(;n;){if(e){var i=n.cloneNode(!1);i.appendChild(e),e=i}else e=n.cloneNode(!0);n=n.parentElement}return e},writeIframe:function(t){var e,n,i=document.createElement("iframe"),o=document.body.appendChild(i);i.id="myIframe",i.setAttribute("style","position:absolute;width:0;height:0;top:-10px;left:-10px;"),e=o.contentWindow||o.contentDocument,(n=o.contentDocument||o.contentWindow.document).open(),n.write(t),n.close();var a=this;i.onload=function(){a.toPrint(e),setTimeout((function(){document.body.removeChild(i)}),100)}},toPrint:function(t){try{setTimeout((function(){t.focus();try{t.document.execCommand("print",!1,null)||t.print()}catch(e){t.print()}t.close()}),10)}catch(t){console.log("err",t)}},isInBody:function(t){return t!==document.body&&document.body.contains(t)},isDOM:"object"===("undefined"==typeof HTMLElement?"undefined":pi(HTMLElement))?function(t){return t instanceof HTMLElement}:function(t){return t&&"object"===pi(t)&&1===t.nodeType&&"string"==typeof t.nodeName}};var fi=hi,mi=n(21),vi=n.n(mi).a,bi=Object(i.a)({name:"image-preview",data:function(){return{left:0,top:0,scale:1,datas:[],rotate:0,isShow:!1,index:0,isFile:!1}},computed:{styleBoxName:function(){return{marginLeft:this.setPx(this.left),marginTop:this.setPx(this.top)}},styleName:function(){return{transform:"scale(".concat(this.scale,") rotate(").concat(this.rotate,"deg)"),maxWidth:"100%",maxHeight:"100%"}},isRrrow:function(){return 1!=this.imgLen},imgLen:function(){return this.imgList.length},imgList:function(){return this.datas.map((function(t){return t.url}))}},methods:{handlePrint:function(){this.$Print("#avue-image-preview__".concat(this.index))},handlePrev:function(){this.$refs.carousel.prev(),this.index=this.$refs.carousel.activeIndex,this.stopItem()},handleNext:function(){this.$refs.carousel.next(),this.index=this.$refs.carousel.activeIndex,this.stopItem()},stopItem:function(){this.left=0,this.top=0,this.$refs.item.forEach((function(t){t.pause&&t.pause()}))},isMedia:function(t){return B.m.img.test(t.url)||B.m.video.test(t.url)},getIsVideo:function(t){var e=t.url,n=t.type;return B.m.video.test(e)||"video"==n?"video":B.m.img.test(e)||"image"==n?"img":void 0},subScale:function(){.2!=this.scale&&(this.scale=parseFloat((this.scale-.2).toFixed(2)))},addScale:function(){this.scale=parseFloat((this.scale+.2).toFixed(2))},handleChange:function(){this.scale=1,this.rotate=0},move:function(t){var e=this,n=t.clientX,i=t.clientY;document.onmousemove=function(t){var o=t.clientX-n,a=t.clientY-i;n=t.clientX,i=t.clientY,e.left=e.left+2*o,e.top=e.top+2*a},document.onmouseup=function(t){document.onmousemove=null,document.onmouseup=null}},handleClick:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];"function"==typeof this.ops.click?this.ops.click(t,e):n&&window.open(t.url)},close:function(){this.isShow=!1,"function"==typeof this.ops.beforeClose&&this.ops.beforeClose(this.datas,this.index),this.$destroy(),this.$el.remove()}}}),gi=Object(s.a)(bi,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return t.isShow?n("div",{class:t.b()},[t.ops.modal?n("div",{class:t.b("mask"),on:{click:t.close}}):t._e(),t._v(" "),n("span",{staticClass:"el-image-viewer__btn el-image-viewer__close",on:{click:t.close}},[n("i",{staticClass:"el-icon-circle-close"})]),t._v(" "),t.isRrrow?n("span",{staticClass:"el-image-viewer__btn el-image-viewer__prev",on:{click:function(e){return t.handlePrev()}}},[n("i",{staticClass:"el-icon-arrow-left"})]):t._e(),t._v(" "),t.isRrrow?n("span",{staticClass:"el-image-viewer__btn el-image-viewer__next",on:{click:function(e){return t.handleNext()}}},[n("i",{staticClass:"el-icon-arrow-right"})]):t._e(),t._v(" "),n("div",{ref:"box",class:t.b("box")},[n("el-carousel",{ref:"carousel",attrs:{"show-indicators":!1,"initial-index":t.index,"initial-swipe":t.index,interval:0,arrow:"never","indicator-position":"none",height:t.height},on:{change:t.handleChange}},t._l(t.datas,(function(e,i){return n("el-carousel-item",{key:i,nativeOn:{click:function(e){if(e.target!==e.currentTarget)return null;t.ops.closeOnClickModal&&t.close()}}},[t.getIsVideo(e)?n(t.getIsVideo(e),{directives:[{name:"else",rawName:"v-else"}],ref:"item",refInFor:!0,tag:"component",style:[t.styleName,t.styleBoxName],attrs:{id:"avue-image-preview__"+i,src:e.url,controls:"controls",ondragstart:"return false"},on:{click:function(n){return t.handleClick(e,i)},mousedown:t.move}}):n("div",{class:t.b("file"),attrs:{id:"avue-image-preview__"+i},on:{click:function(n){return t.handleClick(e,i,!0)}}},[n("span",[n("i",{staticClass:"el-icon-document"}),t._v(" "),n("p",[t._v(t._s(e.name))])])])],1)})),1)],1),t._v(" "),n("div",{staticClass:"el-image-viewer__btn el-image-viewer__actions"},[n("div",{staticClass:"el-image-viewer__actions__inner"},[n("i",{staticClass:"el-icon-zoom-out",on:{click:t.subScale}}),t._v(" "),n("i",{staticClass:"el-icon-zoom-in",on:{click:t.addScale}}),t._v(" "),n("i",{staticClass:"el-image-viewer__actions__divider"}),t._v(" "),n("i",{staticClass:"el-icon-printer",on:{click:t.handlePrint}}),t._v(" "),n("i",{staticClass:"el-image-viewer__actions__divider"}),t._v(" "),n("i",{staticClass:"el-icon-refresh-left",on:{click:function(e){t.rotate=t.rotate-90}}}),t._v(" "),n("i",{staticClass:"el-icon-refresh-right",on:{click:function(e){t.rotate=t.rotate+90}}})])])]):t._e()}),[],!1,null,null,null).exports,yi=n(8),_i=n.n(yi),xi={name:"CropperImage",components:{VueCropper:n(22).VueCropper},data:function(){return{visible:!1,previews:{},option:{}}},methods:{show:function(){this.visible=!0},changeScale:function(t){t=t||1,this.$refs.cropper.changeScale(t)},rotateLeft:function(){this.$refs.cropper.rotateLeft()},rotateRight:function(){this.$refs.cropper.rotateRight()},realTime:function(t){this.previews=t},submit:function(){var t=this;this.visible=!1,this.$refs.cropper.getCropData((function(e){var n=e;"file"===t.option.type&&(n=Object(D.d)(e,"".concat((new Date).getTime(),".").concat(t.option.outputType))),t.option.callback&&t.option.callback(n)}))},cancel:function(t){t&&t(),this.visible=!1,this.option.cancel&&this.option.cancel(),"function"==typeof this.option.beforeClose&&this.option.beforeClose(),this.$destroy(),this.$el.remove()}}},wi=Object(s.a)(xi,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("el-dialog",{staticClass:"avue-dialog avue-cropper",attrs:{visible:t.visible,"before-close":t.cancel,"close-on-press-escape":!1,"close-on-click-modal":!1,"append-to-body":"",width:"1000px"},on:{"update:visible":function(e){t.visible=e}}},[n("div",{staticClass:"cropper-content"},[n("div",{staticClass:"cropper-box"},[n("div",{staticClass:"cropper"},[n("vue-cropper",{ref:"cropper",attrs:{img:t.option.img,outputSize:t.option.outputSize,outputType:t.option.outputType,info:t.option.info,canScale:t.option.canScale,autoCrop:t.option.autoCrop,autoCropWidth:t.option.autoCropWidth,autoCropHeight:t.option.autoCropHeight,fixed:t.option.fixed,fixedNumber:t.option.fixedNumber,full:t.option.full,fixedBox:t.option.fixedBox,canMove:t.option.canMove,canMoveBox:t.option.canMoveBox,original:t.option.original,centerBox:t.option.centerBox,height:t.option.height,infoTrue:t.option.infoTrue,maxImgSize:t.option.maxImgSize,enlarge:t.option.enlarge,mode:t.option.mode},on:{realTime:t.realTime}})],1),t._v(" "),n("div",{staticClass:"footer-btn"},[n("el-button",{attrs:{size:"mini",type:"danger",icon:"el-icon-zoom-in"},on:{click:function(e){return t.changeScale(1)}}}),t._v(" "),n("el-button",{attrs:{size:"mini",type:"danger",icon:"el-icon-zoom-out"},on:{click:function(e){return t.changeScale(-1)}}}),t._v(" "),n("el-button",{attrs:{size:"mini",icon:"el-icon-back",type:"danger"},on:{click:t.rotateLeft}}),t._v(" "),n("el-button",{attrs:{size:"mini",type:"danger",icon:"el-icon-right"},on:{click:t.rotateRight}})],1)]),t._v(" "),n("div",{staticClass:"show-preview"},[n("div",{staticClass:"preview",style:t.previews.div},[n("img",{style:t.previews.img,attrs:{src:t.previews.url}})])])]),t._v(" "),n("span",{staticClass:"avue-dialog__footer"},[n("el-button",{attrs:{size:"small",type:"primary"},on:{click:t.submit}},[t._v("纭� 瀹�")]),t._v(" "),n("el-button",{attrs:{size:"small"},on:{click:function(e){return t.cancel()}}},[t._v("鍙� 娑�")])],1)])}),[],!1,null,null,null).exports,Oi={data:function(){return{opt:{},callback:null,visible:!1,dialog:{closeOnClickModal:!1},option:{submitText:"鎻愪氦",emptyText:"鍏抽棴",submitIcon:"el-icon-check",emptyIcon:"el-icon-close",column:[]},data:{}}},computed:{menuPosition:function(){return this.opt.menuPosition||"center"}},methods:{submit:function(){this.$refs.form.submit()},reset:function(){this.$refs.form.resetForm()},beforeClose:function(t){t(),this.close()},show:function(t){this.opt=t,this.callback=t.callback;var e=this.deepClone(t);["callback","option","data"].forEach((function(t){return delete e[t]})),this.dialog=Object.assign(this.dialog,e),this.option=Object.assign(this.option,t.option),this.data=t.data,this.visible=!0},close:function(){var t=this,e=function(){t.visible=!1,t.$destroy(),t.$el.remove()};"function"==typeof this.dialog.beforeClose?this.dialog.beforeClose(e):e()},handleSubmit:function(t,e){this.callback&&this.callback({data:t,close:this.close,done:e})}}},Ci=Object(s.a)(Oi,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("el-dialog",t._b({staticClass:"avue-dialog",attrs:{visible:t.visible,"destroy-on-close":"",beforeClose:t.beforeClose},on:{"update:visible":function(e){t.visible=e}}},"el-dialog",t.dialog,!1),[n("avue-form",{ref:"form",attrs:{option:Object.assign({},t.deepClone(t.option),{menuBtn:!1})},on:{submit:t.handleSubmit,"reset-change":t.close},model:{value:t.data,callback:function(e){t.data=e},expression:"data"}}),t._v(" "),this.vaildData(t.option.menuBtn,!0)?n("span",{staticClass:"avue-dialog__footer",class:"avue-dialog__footer--"+t.menuPosition},[this.vaildData(t.option.submitBtn,!0)?n("el-button",{attrs:{size:t.$AVUE.size,icon:t.option.submitIcon,type:"primary"},on:{click:t.submit}},[t._v(t._s(t.option.submitText))]):t._e(),t._v(" "),this.vaildData(t.option.emptyBtn,!0)?n("el-button",{attrs:{size:t.$AVUE.size,icon:t.option.emptyIcon},on:{click:t.reset}},[t._v(t._s(t.option.emptyText))]):t._e()],1):t._e()],1)}),[],!1,null,null,null).exports,ki=function(){this.$root={}};ki.prototype.initMounted=function(){var t;this.$root=((t=new(_i.a.extend(Ci))).vm=t.$mount(),document.body.appendChild(t.vm.$el),t.dom=t.vm.$el,t.vm)},ki.prototype.show=function(t){this.initMounted(),this.$root.show(t)};var Si={$ImagePreview:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=_i.a.extend(gi),o={datas:t,index:e,ops:Object.assign({closeOnClickModal:!1,beforeClose:null,click:null,modal:!0},n)},a=new i({data:o});return a.vm=a.$mount(),document.body.appendChild(a.vm.$el),a.vm.isShow=!0,a.dom=a.vm.$el,a.vm},$ImageCropper:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=_i.a.extend(wi),n=Object.assign({outputSize:1,outputType:"jpeg",info:!0,canScale:!0,autoCrop:!0,fixed:!1,full:!1,fixedBox:!1,canMove:!0,canMoveBox:!0,original:!1,centerBox:!1,height:!0,infoTrue:!1,enlarge:1},t),i=new e({data:{option:n}});return i.vm=i.$mount(),document.body.appendChild(i.vm.$el),i.vm.show(),i.dom=i.vm.$el,i.vm},$DialogForm:new ki,$Export:ci,$Print:fi,$Clipboard:function(t){var e=t.text;return new Promise((function(t,n){var i=document.body,o="rtl"==document.documentElement.getAttribute("dir"),a=document.createElement("textarea");a.style.fontSize="12pt",a.style.border="0",a.style.padding="0",a.style.margin="0",a.style.position="absolute",a.style[o?"right":"left"]="-9999px";var r=window.pageYOffset||document.documentElement.scrollTop;a.style.top="".concat(r,"px"),a.setAttribute("readonly",""),a.value=e,i.appendChild(a),function(t){var e;if("SELECT"===t.nodeName)t.focus(),e=t.value;else if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName){var n=t.hasAttribute("readonly");n||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),n||t.removeAttribute("readonly"),e=t.value}else{t.hasAttribute("contenteditable")&&t.focus();var i=window.getSelection(),o=document.createRange();o.selectNodeContents(t),i.removeAllRanges(),i.addRange(o),e=i.toString()}}(a);try{document.execCommand("copy"),t()}catch(t){!1,n()}}))},$Log:ui.a,$NProgress:vi,$Screenshot:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(window.html2canvas)return window.html2canvas(t,e);x.a.logs("Screenshot")},deepClone:D.e,dataURLtoFile:D.d,isJson:D.q,setPx:D.u,vaildData:D.x,sortArrys:D.v,findArray:D.j,validatenull:te.a,downFile:D.h,loadScript:D.r,watermark:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return new Be(t)},findObject:D.l,randomId:D.s},Ei={dialogDrag:ai,contextmenu:ri},ji=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};"dark"===e.theme&&(document.documentElement.className="avue-theme--dark");var n={size:e.size||"small",calcHeight:e.calcHeight||0,menuType:e.menuType||"text",canvas:Object.assign({text:"avuejs.com",fontFamily:"microsoft yahei",color:"#999",fontSize:16,opacity:100,bottom:10,right:10,ratio:1},e.canvas),qiniu:Object.assign({AK:"",SK:"",scope:"",url:"",bucket:"https://upload.qiniup.com",deadline:1},e.qiniu||{}),ali:Object.assign({region:"",endpoint:"",stsToken:"",accessKeyId:"",accessKeySecret:"",bucket:""},e.ali||{})};t.prototype.$AVUE=Object.assign(e,n),ni.forEach((function(e){t.component(e.name,e)})),Object.keys(Si).forEach((function(e){t.prototype[e]=Si[e]})),Object.keys(Ei).forEach((function(e){t.directive(e,Ei[e])})),di.a.use(e.locale),di.a.i18n(e.i18n),t.prototype.$axios=e.axios||window.axios||oi.a,window.axios=t.prototype.$axios,t.prototype.$uploadFun=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0;e=e||this;var n=["uploadPreview","uploadBefore","uploadAfter","uploadDelete","uploadError","uploadExceed"],i={};return"upload"===t.type?n.forEach((function(n){t[n]||(i[n]=e[n])})):n.forEach((function(t){i[t]=e[t]})),i}};"undefined"!=typeof window&&window.Vue&&ji(window.Vue);var $i=Object.assign({version:"2.9.12",locale:{en:{},zh:{}},install:ji},ni);e.default=$i}]).default}));
diff --git a/Source/UBCS-WEB/src/api/GetItem.js b/Source/UBCS-WEB/src/api/GetItem.js
index 5ebd527..190225d 100644
--- a/Source/UBCS-WEB/src/api/GetItem.js
+++ b/Source/UBCS-WEB/src/api/GetItem.js
@@ -90,3 +90,13 @@
     data:data
   })
 }
+// 鐢宠闆嗗洟鐮佸�兼暟鎹�
+export function applyGroupCode(params) {
+  return request({
+    url: 'api/ubcs-applyjtcodeservice/DockingPreApplyCode/applyGroupCode',
+    method: 'post',
+    params: {
+      ...params
+    }
+  })
+}
diff --git a/Source/UBCS-WEB/src/api/code/maxSerialNum.js b/Source/UBCS-WEB/src/api/code/maxSerialNum.js
new file mode 100644
index 0000000..7e9ed4e
--- /dev/null
+++ b/Source/UBCS-WEB/src/api/code/maxSerialNum.js
@@ -0,0 +1,18 @@
+import request from '@/router/axios';
+
+// 鐮佹
+export const getCodePrice = (data) => {
+  return request({
+    url: '/api/ubcs-code/ubcs-code/codeBasicSecController/getCodeRuleAndBasicSecByRuleOid',
+    method: 'get',
+    params: data
+  })
+}
+//淇濆瓨鏈�澶ф祦姘村彿
+export const saveMaxSerialNum = (data) => {
+    return request({
+      url: '/api/ubcs-code/ubcs-code/codeBasicSecController/setMaxSerialNumberForCodeRule',
+      method: 'post',
+      data: data
+    })
+  }
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/components/FormTemplate/FormTemplate.vue b/Source/UBCS-WEB/src/components/FormTemplate/FormTemplate.vue
index 5f034cb..e516be0 100644
--- a/Source/UBCS-WEB/src/components/FormTemplate/FormTemplate.vue
+++ b/Source/UBCS-WEB/src/components/FormTemplate/FormTemplate.vue
@@ -50,7 +50,7 @@
     // 榛樿绂佺敤鍏冪礌
     disabledProp: {
       type: Array,
-      default: () => ["id","lcstatus"],
+      default: () => ["id", "lcstatus"],
     },
     templateOid: {
       type: String,
@@ -80,6 +80,11 @@
       type: Object,
       default: () => ({}),
     },
+    // 涓�琛屾斁鍑犱釜琛ㄥ崟
+    trendsSpan: {
+      type: Number,
+      default: 8,
+    },
   },
   data() {
     return {
@@ -103,395 +108,6 @@
         date: "date",
         refer: "refer",
       },
-      // 鍋囨暟鎹�
-      testItems: [
-        {
-          comboxKey: null,
-          customClass: null,
-          data: null,
-          dateFormate: "",
-          defaultValue: "",
-          displayExtension: null,
-          extendAttrMap: null,
-          extendAttrString: null,
-          field: "id",
-          hidden: false,
-          keyAttr: false,
-          prefix: "",
-          readOnly: false,
-          referConfig: null,
-          required: false,
-          selectLibFlag: "",
-          showField: null,
-          suffix: "",
-          text: "浼犲�肩鐢ㄥ姛鑳�",
-          tooltips: "",
-          type: "combox",
-          unique: false,
-          verify: "",
-        },
-        {
-          customClass: null,
-          data: null,
-          dateFormate: "",
-          defaultValue: "",
-          displayExtension: null,
-          extendAttrMap: null,
-          extendAttrString: null,
-          field: "state",
-          hidden: false,
-          keyAttr: false,
-          prefix: "",
-          readOnly: true,
-          referConfig: null,
-          required: false,
-          selectLibFlag: "",
-          showField: null,
-          suffix: "",
-          text: "鎺ュ彛绂佺敤鍔熻兘",
-          tooltips: "",
-          type: "combox",
-          unique: false,
-          verify: "",
-        },
-        {
-          comboxKey: null,
-          customClass: null,
-          data: null,
-          dateFormate: "",
-          defaultValue: "",
-          displayExtension: null,
-          extendAttrMap: null,
-          extendAttrString: null,
-          field: "oldcode",
-          hidden: false,
-          keyAttr: false,
-          prefix: "el-icon-search",
-          readOnly: false,
-          referConfig: null,
-          required: false,
-          selectLibFlag: "",
-          showField: null,
-          suffix: "鏂囨湰鍚庣紑娴嬭瘯",
-          text: "鍓嶅悗缂�鍔熻兘",
-          tooltips: "",
-          type: "text",
-          unique: false,
-          verify: "",
-        },
-        {
-          comboxKey: null,
-          customClass: null,
-          data: null,
-          dateFormate: "",
-          defaultValue: "",
-          displayExtension: null,
-          extendAttrMap: null,
-          extendAttrString: null,
-          field: "materialname",
-          hidden: false,
-          keyAttr: false,
-          prefix: "",
-          readOnly: false,
-          referConfig: null,
-          required: true,
-          selectLibFlag: "",
-          showField: null,
-          suffix: "",
-          text: "姝e垯鏍¢獙鍔熻兘",
-          tooltips: "璇疯緭鍏ユ暟瀛�",
-          type: "text",
-          unique: false,
-          verify: /^[0-9]+$/g,
-        },
-        {
-          comboxKey: null,
-          customClass: null,
-          data: [
-            {
-              attributes: {},
-              key: "model_type",
-              value: "妯″瀷",
-            },
-            {
-              attributes: {},
-              key: "part_type",
-              value: "闆朵欢",
-            },
-          ],
-          dateFormate: "",
-          defaultValue: "",
-          displayExtension: null,
-          extendAttrMap: null,
-          extendAttrString: null,
-          field: "dataSelect",
-          hidden: false,
-          keyAttr: false,
-          prefix: "",
-          readOnly: false,
-          referConfig: null,
-          required: false,
-          selectLibFlag: "",
-          showField: null,
-          suffix: "",
-          text: "鐩存帴杩斿洖涓嬫媺",
-          tooltips: "",
-          type: "combox",
-          unique: false,
-          verify: "",
-        },
-        {
-          comboxKey: "formTemplateTest",
-          customClass: null,
-          data: [],
-          dateFormate: "",
-          defaultValue: "",
-          displayExtension: null,
-          extendAttrMap: null,
-          extendAttrString: null,
-          field: "dictSelect",
-          hidden: false,
-          keyAttr: false,
-          prefix: "",
-          readOnly: false,
-          referConfig: null,
-          required: false,
-          selectLibFlag: "",
-          showField: null,
-          suffix: "",
-          text: "瀛楀吀杩斿洖涓嬫媺",
-          tooltips: "",
-          type: "combox",
-          unique: false,
-          verify: "",
-        },
-        {
-          comboxKey: null,
-          customClass: null,
-          data: null,
-          dateFormate: "",
-          defaultValue: "",
-          displayExtension: null,
-          extendAttrMap: null,
-          extendAttrString: null,
-          field: "firstfl",
-          hidden: false,
-          keyAttr: false,
-          prefix: "",
-          readOnly: false,
-          referConfig: null,
-          required: false,
-          selectLibFlag: "",
-          showField: null,
-          suffix: "",
-          text: "鏁板瓧杈撳叆妗�",
-          tooltips: "",
-          type: "number",
-          unique: false,
-          verify: "",
-        },
-        {
-          comboxKey: null,
-          customClass: null,
-          data: null,
-          dateFormate: "yyyy-MM-dd HH:mm:ss",
-          defaultValue: "",
-          displayExtension: null,
-          extendAttrMap: null,
-          extendAttrString: null,
-          field: "datetime",
-          hidden: false,
-          keyAttr: false,
-          prefix: "",
-          readOnly: false,
-          referConfig: null,
-          required: false,
-          selectLibFlag: "",
-          showField: null,
-          suffix: "",
-          text: "鏃ユ湡鏃堕棿閫夋嫨鍣�",
-          tooltips: "",
-          type: "datetime",
-          unique: false,
-          verify: "",
-        },
-        {
-          comboxKey: null,
-          customClass: null,
-          data: null,
-          dateFormate: "",
-          defaultValue: "",
-          displayExtension: null,
-          extendAttrMap: null,
-          extendAttrString: null,
-          field: "time",
-          hidden: false,
-          keyAttr: false,
-          prefix: "",
-          readOnly: false,
-          referConfig: null,
-          required: false,
-          selectLibFlag: "",
-          showField: null,
-          suffix: "",
-          text: "鏃堕棿閫夋嫨鍣�",
-          tooltips: "",
-          type: "date",
-          unique: false,
-          verify: "",
-        },
-        {
-          comboxKey: null,
-          customClass: null,
-          data: null,
-          dateFormate: "",
-          defaultValue: "false",
-          displayExtension: null,
-          extendAttrMap: null,
-          extendAttrString: null,
-          field: "xiaoshouwl",
-          hidden: false,
-          keyAttr: false,
-          prefix: "",
-          readOnly: false,
-          referConfig: null,
-          required: false,
-          selectLibFlag: "",
-          showField: null,
-          suffix: "",
-          text: "寮�鍏�",
-          tooltips: "",
-          type: "truefalse",
-          unique: false,
-          verify: "",
-        },
-        {
-          comboxKey: null,
-          customClass: null,
-          data: null,
-          dateFormate: "",
-          defaultValue: "鎴戞槸榛樿鍊�",
-          displayExtension: null,
-          extendAttrMap: null,
-          extendAttrString: null,
-          field: "tuhao",
-          hidden: false,
-          keyAttr: false,
-          prefix: "",
-          readOnly: false,
-          referConfig: null,
-          required: false,
-          selectLibFlag: "",
-          showField: null,
-          suffix: "",
-          text: "榛樿鍊煎姛鑳�",
-          tooltips: "鎻愮ず",
-          type: "text",
-          unique: false,
-          verify: "",
-        },
-        {
-          comboxKey: null,
-          customClass: null,
-          data: null,
-          dateFormate: "",
-          defaultValue: "",
-          displayExtension: null,
-          extendAttrMap: null,
-          extendAttrString: null,
-          field: "xinghaoguige",
-          hidden: false,
-          keyAttr: true,
-          prefix: "",
-          readOnly: false,
-          referConfig: null,
-          required: false,
-          selectLibFlag: "",
-          showField: null,
-          suffix: "",
-          text: "灞炴�у叧閿��",
-          tooltips: "",
-          type: "text",
-          unique: false,
-          verify: "",
-        },
-        {
-          comboxKey: null,
-          customClass: null,
-          data: null,
-          dateFormate: "",
-          defaultValue: "",
-          displayExtension: null,
-          extendAttrMap: null,
-          extendAttrString: null,
-          field: "jiliangdw",
-          hidden: false,
-          keyAttr: false,
-          prefix: "",
-          readOnly: false,
-          tip: "鎴戞槸鎻愮ず鍔熻兘",
-          required: false,
-          selectLibFlag: "",
-          showField: "jiliangdwname",
-          suffix: "",
-          text: "鎻愮ず鍔熻兘",
-          tooltips: "",
-          type: "text",
-          unique: false,
-          verify: "",
-        },
-        {
-          comboxKey: null,
-          customClass: null,
-          data: null,
-          dateFormate: "",
-          defaultValue: "",
-          displayExtension: null,
-          extendAttrMap: null,
-          extendAttrString: null,
-          field: "textarea",
-          hidden: false,
-          keyAttr: false,
-          prefix: "",
-          readOnly: false,
-          referConfig: null,
-          required: false,
-          selectLibFlag: "",
-          showField: null,
-          suffix: "",
-          text: "鏂囨湰鍩�",
-          tooltips: "",
-          type: "textarea",
-          unique: false,
-          verify: "",
-        },
-        {
-          comboxKey: null,
-          customClass: null,
-          data: null,
-          dateFormate: "",
-          defaultValue: "",
-          displayExtension: null,
-          extendAttrMap: null,
-          extendAttrString: null,
-          field: "cz",
-          hidden: false,
-          keyAttr: false,
-          prefix: "",
-          readOnly: true,
-          referConfig: {},
-          required: false,
-          selectLibFlag: "",
-          showField: "depId",
-          suffix: "",
-          text: "鍙傜収",
-          tooltips: "",
-          type: "refer",
-          unique: false,
-          verify: "",
-        },
-      ],
-      trendsSpan: 8,
       defaultValue: {},
       // 琛ㄥ崟灞炴��
       attributes: [],
@@ -501,9 +117,20 @@
   mounted() {
     this.handleResize();
   },
+  computed: {
+    localTrendsSpan() {
+      if (this.trendsSpan) {
+        return this.trendsSpan;
+      } else {
+        let windowWidth = document.body.clientWidth;
+        return 24 / Math.floor(windowWidth / 500);
+      }
+    },
+  },
   methods: {
     // 娓叉煋琛ㄥ崟妯℃澘
     templateRender(formItemList) {
+      console.log(formItemList, "formItemList");
       // 鏃犻渶鍒嗙粍鏁版嵁
       let column = [];
       let group = [];
@@ -523,7 +150,8 @@
         if (
           formItem.type === "combox" &&
           formItem.comboxKey &&
-          (!Array.isArray(formItem.dicData) || formItem.dicData.length === 0) &&(!Array.isArray(formItem.data) || formItem.data.length === 0)
+          (!Array.isArray(formItem.dicData) || formItem.dicData.length === 0) &&
+          (!Array.isArray(formItem.data) || formItem.data.length === 0)
         ) {
           dictKeys.push({ dictKey: formItem.comboxKey, field: formItem.field });
         }
@@ -531,9 +159,9 @@
         if (this.disabledProp.includes(formItem.field)) {
           formItem.readOnly = true;
         }
-        if(formItem.field=='lcstatus'){
-          formItem.field=formItem.field+'_text';
-          formItem.readOnly=true;
+        if (formItem.field == "lcstatus") {
+          formItem.field = formItem.field + "_text";
+          formItem.readOnly = true;
         }
         // 璁剧疆琛ㄥ崟鏍¢獙鐨勮鍒欙紝鏂囨湰
         let message = "璇烽�夋嫨";
@@ -583,7 +211,11 @@
                   options: formItem.referConfig
                 }
               : {},
-          span: formItem.span ? formItem.span : formItem.type === "textarea" ? 24 : this.trendsSpan,
+          span: formItem.span
+            ? formItem.span
+            : formItem.type === "textarea"
+            ? 24
+            : this.localTrendsSpan,
           rules: [
             {
               required: formItem.required,
@@ -610,6 +242,7 @@
         }
       });
       this.slotColumnList = slotColumnList;
+      console.log(column, "column");
       this.$set(this.option, "column", column);
       this.$set(this.option, "group", group);
       this.updateIndex++;
@@ -653,9 +286,9 @@
     },
     // 鏍规嵁灞忓箷鍔ㄦ�侀厤缃〃鍗曞竷灞�
     handleResize() {
-      let windowWidth = document.body.clientWidth;
-      this.trendsSpan = 24 / Math.floor(windowWidth / 500);
-      this.updateIndex++;
+      // let windowWidth = document.body.clientWidth;
+      // this.trendsSpan = 24 / Math.floor(windowWidth / 500);
+      // this.updateIndex++;
     },
     // 鍓嶅悗缂�
     preOrSufFixShow(type, val) {
diff --git a/Source/UBCS-WEB/src/components/FormTemplate/index.vue b/Source/UBCS-WEB/src/components/FormTemplate/index.vue
index 8e62607..8bcb7ef 100644
--- a/Source/UBCS-WEB/src/components/FormTemplate/index.vue
+++ b/Source/UBCS-WEB/src/components/FormTemplate/index.vue
@@ -138,6 +138,9 @@
         codeclassifysec: "refer",//鍒嗙被鐮佹
         codevariablesec: "text",//鍙彉鐮佹
         coderefersec: "refer",//寮曠敤鐮佹
+        codeattrsec: "text",
+        codelevelsec: "text",
+        codedatesec: "date"
       },
       selfColumnConfig: {
         function: {
@@ -156,6 +159,7 @@
           label: "name",
           maxlength: "codeSecLength",
           data: "fixedValueVOList",
+          dateFormate: "codeDateFormatStr"
         },
         directVoluation: {
           search: true,
@@ -265,6 +269,9 @@
             "codeclassifysec",
             "codevariablesec",
             "coderefersec",
+            "codeattrsec",
+            "codelevelsec",
+            "codedatesec"
           ];
           this.secVOList = (res.data.data.secVOList || []).filter((item) =>
             typeList.includes(item.secType)
diff --git a/Source/UBCS-WEB/src/components/MasterCrud/VciMasterCrud.vue b/Source/UBCS-WEB/src/components/MasterCrud/VciMasterCrud.vue
index ed137cd..dc32f16 100644
--- a/Source/UBCS-WEB/src/components/MasterCrud/VciMasterCrud.vue
+++ b/Source/UBCS-WEB/src/components/MasterCrud/VciMasterCrud.vue
@@ -116,7 +116,7 @@
   </basic-container>
 </template>
 <script>
-import {MasterTable, TableData, FindData, addSaveCode, editSaveCode, deleteCode, upSaveCode} from "@/api/GetItem";
+import {MasterTable, TableData, FindData, addSaveCode, editSaveCode, deleteCode, upSaveCode,applyGroupCode} from "@/api/GetItem";
 import {processTS, changeStatus} from "@/api/template/setPersonnel"
 import {listCodeAttributeByClassId} from "@/api/integration/integration.js";
 import integrationTransfer from "@/views/integration/integrationTransfer";
@@ -412,10 +412,28 @@
         if (uniqueFlag === 'CODERECYCLE') return this.Recovery()
         //鍒犻櫎
         if (uniqueFlag === 'CODEDELETE') return this.enumDeleteRow()
+        //鐢宠闆嗗洟鐮佹暟鎹�
+        if (uniqueFlag === 'applyGroupCode') return this.applyGroupCode()
+        //鏇存柊闆嗗洟鐮佹暟鎹�
+        // if (uniqueFlag === 'applyGroupCode') return this.applyGroupCode()
         //  鐩镐技椤规煡璇�
         //  if(uniqueFlag === 'CODEEDIT') return this.similarHandler()
       });
     },
+    //鐢宠闆嗗洟鐮佹暟鎹�
+    applyGroupCode(){
+      if(this.selectRow.length <= 0){
+        this.$message.warning('璇烽�夋嫨涓�鏉℃暟鎹ā鏉匡紒')
+      }else {
+        // const requestData = this.selectRow.forEach(item => {
+        //   return { oids: item.oid, btmName: item.btmname };
+        // });
+        const oids = this.selectRow.map(item => item.oid).join(',');
+        applyGroupCode({ oids, btmName: this.selectRow[0].btmname }).then(res => {
+          console.log(res);
+        });
+      }
+    },
     openD() {
       this.getListCodeByClassId();
     },
diff --git a/Source/UBCS-WEB/src/components/code-dialog-page/maxSerialnumDialog.vue b/Source/UBCS-WEB/src/components/code-dialog-page/maxSerialnumDialog.vue
new file mode 100644
index 0000000..83740c1
--- /dev/null
+++ b/Source/UBCS-WEB/src/components/code-dialog-page/maxSerialnumDialog.vue
@@ -0,0 +1,308 @@
+<template>
+    <el-dialog title="鏈�澶ф祦姘村彿" width="30%" append-to-body="true" :visible.sync="dialogVisible">
+        <el-form :label-position="right" ref="ruleForm" label-width="80px" :model="formModel" :rules="rules">
+            <el-form-item label="娴佹按鍙�" prop="maxSecNum">
+                <el-input v-model="formModel.maxSecNum"></el-input>
+            </el-form-item>
+        </el-form>
+        <el-tabs v-model="activeName" type="border-card" @tab-click="handleClick">
+            <el-tab-pane label="鏈�澶ф祦姘村彿" name="codeApply">
+                <form-template v-bind="$attrs" type="add" :selfColumnType="selfColumnType" :trendsSpan="24"
+                    :selfColumnConfig="selfColumnConfig" ref="CodeApply" @getFormData="getCodeApplyFormData"
+                    @referConfigDataUpdate="referConfigDataUpdate"></form-template>
+            </el-tab-pane>
+        </el-tabs>
+        <div slot="footer" class="dialog-footer">
+            <el-button @click="cancel">鍙� 娑�</el-button>
+            <el-button type="primary" :loading="confirmLoadding" @click="comfirm">纭� 瀹�</el-button>
+        </div>
+    </el-dialog>
+</template>
+<script>
+import FormTemplate from "@/components/FormTemplate/FormTemplate";
+import { getCodePrice, saveMaxSerialNum } from "@/api/code/maxSerialNum.js"
+export default {
+    name: 'maxSerialnumDialog',
+    components: {
+        FormTemplate
+    },
+    props: {
+        // 鏄惁鎵撳紑
+        visible: {
+            typeof: Boolean,
+            default: false
+        },
+        // ruleOid
+        ruleOid: {
+            typeof: String,
+            default: ""
+        }
+    },
+    watch: {
+        visible(n) {
+            this.dialogVisible = n;
+        },
+        dialogVisible(n) {
+            this.$emit('update:visible', n)
+            if (n) this.apiGetCode()
+        },
+        selfColumnConfig: {
+            handler(newval) {
+                // console.log('selfColumnConfig', newval)
+            },
+            immediate: true,
+            deep: true
+        }
+    },
+    data() {
+        return {
+            dialogVisible: this.visible,
+            activeName: 'codePrice',
+            confirmLoadding: false,
+            codeApplyForm: {},
+            secVOList: [],
+            formModel: {
+                maxSecNum: '',
+                codeRuleOid: '',
+                secDTOList: []
+            },
+            rules: {
+                maxSecNum: [
+                    { required: true, message: '璇疯緭鍏ユ祦姘村彿', trigger: 'blur' }
+                ],
+            },
+            selfColumnType: {
+                codefixedsec: "combox",
+                codeclassifysec: "refer",
+                codevariablesec: "text",
+                codeattrsec: "text",
+                codelevelsec: "text",
+                coderefersec: "refer",
+                codedatesec: "date",
+            },
+            selfColumnConfig: {
+                function: {
+                    required: this.isRequired,
+                    dicData: this.getOptionList,
+                    type: this.getType,
+                    referConfig: this.getReferConfig,
+                    readOnly: this.getDisabled,
+                },
+                exchange: {
+                    text: "name",
+                    field: "oid",
+                    prop: "oid",
+                    showField: "name",
+                    parentClassifySecOid: "parentClassifySecOid",
+                    label: "name",
+                    maxlength: "codeSecLength",
+                    data: "fixedValueVOList",
+                    dateFormate: "codeDateFormatStr"
+                },
+                directVoluation: {
+                    search: true,
+                    props: {
+                        label: "id",
+                        value: "id",
+                    },
+                },
+            },
+        }
+    },
+    methods: {
+        // 鑾峰彇鐮佹
+        async apiGetCode() {
+            this.activeName = "codeApply";
+            const response = await getCodePrice({ ruleOid: this.ruleOid })
+            const res = response.data
+            if (res.success && res.code === 200) {
+                const typeList = [
+                    "codefixedsec",
+                    "codeclassifysec",
+                    "codevariablesec",
+                    "coderefersec",
+                    "codeattrsec",
+                    "codelevelsec",
+                    "codedatesec"
+                ];
+                this.secVOList = (res.data.secVOList || []).filter((item) =>
+                    typeList.includes(item.secType)
+                );
+                if (this.secVOList.length > 0) {
+                    // this.showCodeApply = true;
+
+                    this.$nextTick(() => {
+                        this.$refs.CodeApply.templateRender(this.secVOList);
+                    });
+                } else {
+                    // this.showCodeApply = false;
+                }
+            }
+        },
+        handleClick(tab, event) {
+            // console.log(event)
+        },
+        getCodeApplyFormData(codeApplyForm) {
+            this.codeApplyForm = codeApplyForm;
+        },
+        // 鍙栨秷
+        cancel() {
+            this.dialogVisible = false
+            this.formModel['secDTOList'] = []
+            this.formModel['codeRuleOid'] = ''
+            this.formModel['maxSecNum'] = ''
+            this.$refs.ruleForm.clearValidate('maxSecNum')
+            
+        },
+        // 纭
+        async comfirm() {
+            console.log(this.codeApplyForm)
+            const objcodekey = Object.keys(this.codeApplyForm)
+            console.log(objcodekey)
+            const filteredObj = objcodekey.reduce((acc, key) => {
+                const pattern = /[\u4e00-\u9fa5]/; // 鍖归厤涓枃瀛楃鐨勬鍒欒〃杈惧紡
+                const patterns = /\$/;
+                if (!pattern.test(key)&&!patterns.test(key)) {
+                    acc[key] = this.codeApplyForm[key];
+                }
+                return acc;
+            }, {});
+
+            const arrCode = Object.entries(filteredObj).map(([key, value]) => {
+                return {
+                    secOid: key,
+                    secValue: value
+                }
+            })
+            this.formModel['secDTOList'] = arrCode
+            this.formModel['codeRuleOid'] = this.ruleOid
+            console.log(this.formModel)
+            this.confirmLoadding = true
+            const rule = await this.$refs.CodeApply.validate()
+            this.$refs.ruleForm.validate(res => {
+                if (rule && res) {
+                    console.log(rule)
+                    saveMaxSerialNum(this.formModel).then(res => {
+                        if (res.data.success) {
+                            this.$message.success('鎿嶄綔鎴愬姛锛�');
+                            this.confirmLoadding = false
+                            this.cancel()
+                        }
+                    })
+                } else {
+                    this.confirmLoadding = false
+                }
+            })
+
+        },
+        // 鍙傜収缁勪欢鏁版嵁鍙樻洿
+        referConfigDataUpdate(data) {
+            // console.log(data)
+            const { field } = data;
+            this.secVOList = this.secVOList.map((item) => {
+                if (item.parentClassifySecOid === field) {
+                    this.$refs.CodeApply.form[item.oid] = undefined;
+                    this.$refs.CodeApply.form[item.name] = undefined;
+                }
+                return item;
+            });
+            this.$refs.CodeApply.templateRender(this.secVOList);
+        },
+        isRequired(item) {
+            return item.nullableFlag != "true";
+        },
+        getType(item) {
+            return this.selfColumnType[item.secType];
+        },
+        getDisabled(item) {
+            if (item.secType === "codeclassifysec") {
+                if (item.parentClassifySecOid) {
+                    if (!this.codeApplyForm[item.parentClassifySecOid]) {
+                        return true;
+                    } else {
+                        return false;
+                    }
+                }
+            }
+        },
+        getReferConfig(item) {
+            // console.log(item)
+            let params = {};
+            if (item.secType == "codeclassifysec") {
+                params = {
+                    isMuti: false,
+                    valueField: 'id',
+                    type: "grid",
+                    tableConfig: {
+                        limit: -1,
+                        cols: [
+                            {
+                                field: "id",
+                                title: "鑻辨枃鍚嶇О",
+                                sort: true,
+                                width: 150,
+                            },
+                            {
+                                field: "name",
+                                title: "涓枃鍚嶇О",
+                                sort: true,
+                                width: 150,
+                            },
+                            {
+                                field: "description",
+                                title: "鎻忚堪",
+                                width: 250,
+                            },
+                        ],
+                        queryColumns: [
+                            {
+                                field: "id",
+                                title: "鑻辨枃鍚嶇О",
+                            },
+                            {
+                                field: "name",
+                                title: "涓枃鍚嶇О",
+                            },
+                        ],
+                    },
+                    url: "api/ubcs-code/ubcs-code/mdmEngineController/listCodeClassifyValueBySecOid",
+                    extraParams: {
+                        classifySecOid: item.oid,
+                        parentClassifyValueOid: item.parentClassifySecOid
+                            ? this.codeApplyForm[item.parentClassifySecOid]
+                            : "",
+                    },
+                };
+            } else if (item.secType == "coderefersec") {
+                params = JSON.parse(item.referValueInfo);
+            }
+            // console.log(params)
+            return params;
+
+        },
+        getOptionList(item) {
+            if (
+                Array.isArray(item.fixedValueVOList) &&
+                item.fixedValueVOList.length > 0
+            ) {
+                const configAttr = {
+                    key: "id",
+                    value: "id",
+                };
+                const optionList = item.fixedValueVOList.map((item) => {
+                    for (const key in configAttr) {
+                        if (Object.hasOwnProperty.call(configAttr, key)) {
+                            const element = configAttr[key];
+                            item[key] = item[element];
+                        }
+                    }
+                    return item;
+                });
+                return optionList;
+            } else {
+                return [];
+            }
+        },
+    }
+}
+</script>
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/components/refer/vciWebReferDefalut.vue b/Source/UBCS-WEB/src/components/refer/vciWebReferDefalut.vue
index c1817d1..7e53e35 100644
--- a/Source/UBCS-WEB/src/components/refer/vciWebReferDefalut.vue
+++ b/Source/UBCS-WEB/src/components/refer/vciWebReferDefalut.vue
@@ -176,7 +176,6 @@
           hidden: (!this.controllerSecret)
         }];
       } else {
-        debugger;
         this.option.column = this.options.tableConfig.cols.map(item => {
           if (item.field != 'LAY_TABLE_INDEX' && item.field != 'LAY_CHECKED') {
             let formatter=item.template || item.templet;
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/.gitignore b/Source/UBCS-WEB/src/config/js-xlsx-master/.gitignore
new file mode 100644
index 0000000..18554cd
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/.gitignore
@@ -0,0 +1,27 @@
+node_modules
+misc/coverage.html
+misc/prof.js
+v8.log
+tmp
+*.txt
+*.csv
+*.dif
+*.prn
+*.slk
+*.socialcalc
+*.xls
+*.xlsb
+*.xlsm
+*.xlsx
+*.xlsm
+*.xlsb
+*.xml
+*.htm
+*.html
+*.sheetjs
+
+lab/
+test_files
+example.js
+example2.js
+.idea
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/.gitmodules b/Source/UBCS-WEB/src/config/js-xlsx-master/.gitmodules
new file mode 100644
index 0000000..bc46940
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "test_files"]
+	path = test_files
+	url = https://github.com/SheetJS/test_files
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/.jscs.json b/Source/UBCS-WEB/src/config/js-xlsx-master/.jscs.json
new file mode 100644
index 0000000..5965004
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/.jscs.json
@@ -0,0 +1,6 @@
+{
+  "requireCommaBeforeLineBreak": true,
+  "disallowTrailingWhitespace": true,
+  "disallowTrailingComma": true
+}
+
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/.jshintrc b/Source/UBCS-WEB/src/config/js-xlsx-master/.jshintrc
new file mode 100644
index 0000000..5cd205b
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/.jshintrc
@@ -0,0 +1,4 @@
+{
+	"bitwise": false,
+	"curly": false
+}
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/.npmignore b/Source/UBCS-WEB/src/config/js-xlsx-master/.npmignore
new file mode 100644
index 0000000..bd035d9
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/.npmignore
@@ -0,0 +1,35 @@
+test_files/
+tests/files/
+index.html
+misc/
+node_modules
+tmp
+*.txt
+*.csv
+*.dif
+*.prn
+*.slk
+*.socialcalc
+*.xls
+*.xlsb
+*.xlsm
+*.xlsx
+*.xml
+*.htm
+*.html
+*.sheetjs
+.gitignore
+.jshintrc
+CONTRIBUTING.md
+Makefile
+*.lst
+.npmignore
+xlsworker.js
+shim.js
+test.js
+.jscs.json
+.gitmodules
+.travis.yml
+bits/
+odsbits/
+tests/
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/.travis.yml b/Source/UBCS-WEB/src/config/js-xlsx-master/.travis.yml
new file mode 100644
index 0000000..a378c85
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/.travis.yml
@@ -0,0 +1,16 @@
+language: node_js
+node_js:
+  - "iojs"
+  - "0.11.14"
+  - "0.10"
+#  - "0.8" # commented because of npm issue with camelcase
+before_install:
+  - "npm install -g mocha"
+  - "npm install blanket"
+  - "npm install xlsjs"
+  - "npm install coveralls mocha-lcov-reporter"
+before_script:
+  - "make init"
+  - "cd test_files; make all; cd -" 
+after_success:
+  - "make coveralls-spin"
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/CONTRIBUTING.md b/Source/UBCS-WEB/src/config/js-xlsx-master/CONTRIBUTING.md
new file mode 100644
index 0000000..e9642de
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/CONTRIBUTING.md
@@ -0,0 +1,63 @@
+# Contributing
+
+The SheetJS Libraries should be free and clear to use in your projects.  In
+order to maintain that, every contributor must be vigilant.
+
+There have been many projects in the past that have been very lax regarding
+licensing, and we are of the opinion that those are ticking timebombs and that
+no commercial product should depend on them.
+
+
+# Required Reading
+
+These are pretty short reads and emphasize the importance of proper licensing:
+
+- https://github.com/kennethreitz/tablib/issues/114 (discussion of other tools)
+
+- http://www.codinghorror.com/blog/2007/04/pick-a-license-any-license.html
+
+
+# Raising Issues
+
+Issues should generally be accompanied by test files.  Since github does not
+support attachments, the best method is to send files to <sheetjs@gmail.com>
+(subject line should contain issue number or message) or to share using some
+storage service.  Unless expressly permitted, any attachments will not be
+shared or included in a test suite (although I will ask :)
+
+If sending email to a gmail account is problematic, the <dev@sheetjs.com> email
+inbox is self-hosted.
+
+# Pre-Contribution Checklist
+
+Before thinking about contributing, make sure that:
+
+- You are not, nor have ever been, an employee of Microsoft Corporation.
+
+- You have not signed any NDAs or Shared Source Agreements with Microsoft
+  Corporation or a subsidiary
+
+- You have not consulted any existing relevant codebase (if you have, please
+  take note of which codebases were consulted).
+
+If you cannot attest to each of these items, the best approach is to raise an
+issue.  If it is a particularly high-priority issue, please drop an email to
+<sheetjs@gmail.com> and it will be prioritized.
+
+
+# Intra-Contribution
+
+Keep these in mind as you work:
+
+- Your contributions are your original work.  Take note of any resources you
+  consult in the process (and be extra careful not to use unlicensed code on
+  the internet.
+
+- You are working on your own time.  Unless they explicitly grant permission,
+  your employer may be the ultimate owner of your IP
+
+# Post-Contribution
+
+Before contributions are merged, you will receive an email (at the address
+associated with the git commit) and will be asked to confirm the aforementioned
+items.  Ensure that the email addresses associated with the commits is valid.
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/LICENSE b/Source/UBCS-WEB/src/config/js-xlsx-master/LICENSE
new file mode 100644
index 0000000..f769c2c
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/LICENSE
@@ -0,0 +1,17 @@
+Copyright (C) 2012-2015  SheetJS
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+Except where noted, this license applies to any and all software programs and associated documentation files created by the Original Author and distributed with the Software:
+
+'jszip.js' is a modified version of JSZip, Copyright (c) Stuart Knightley, David Duponchel, Franz Buchinger, Ant'onio Afonso.  JSZip is dual licensed and is used according to the terms of the MIT License.
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/Makefile b/Source/UBCS-WEB/src/config/js-xlsx-master/Makefile
new file mode 100644
index 0000000..0ae4975
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/Makefile
@@ -0,0 +1,116 @@
+LIB=xlsx
+FMT=xlsx xlsm xlsb ods xls xml misc full
+REQS=jszip.js
+ADDONS=dist/cpexcel.js
+AUXTARGETS=ods.js
+
+ULIB=$(shell echo $(LIB) | tr a-z A-Z)
+DEPS=$(sort $(wildcard bits/*.js))
+TARGET=$(LIB).js
+
+.PHONY: all
+all: $(TARGET) $(AUXTARGETS)
+
+$(TARGET): $(DEPS)
+	cat $^ | tr -d '\15\32' > $@
+
+bits/01_version.js: package.json
+	echo "$(ULIB).version = '"`grep version package.json | awk '{gsub(/[^0-9a-z\.-]/,"",$$2); print $$2}'`"';" > $@
+
+bits/18_cfb.js: node_modules/cfb/dist/xlscfb.js
+	cp $^ $@
+
+.PHONY: clean
+clean:
+	rm -f $(TARGET)
+
+.PHONY: clean-data
+clean-data:
+	rm -f *.xlsx *.xlsm *.xlsb *.xls *.xml
+
+.PHONY: init
+init:
+	git submodule init
+	git submodule update
+	git submodule foreach git pull origin master
+	git submodule foreach make
+
+
+.PHONY: test mocha
+test mocha: test.js
+	mkdir -p tmp
+	mocha -R spec -t 20000
+
+.PHONY: prof
+prof:
+	cat misc/prof.js test.js > prof.js
+	node --prof prof.js
+
+TESTFMT=$(patsubst %,test_%,$(FMT))
+.PHONY: $(TESTFMT)
+$(TESTFMT): test_%:
+	FMTS=$* make test
+
+
+.PHONY: lint
+lint: $(TARGET)
+	jshint --show-non-errors $(TARGET) $(AUXTARGETS)
+	jshint --show-non-errors package.json bower.json
+	jscs $(TARGET) $(AUXTARGETS)
+
+.PHONY: test-osx
+test-osx:
+	node tests/write.js
+	open -a Numbers sheetjs.xlsx
+	open -a "Microsoft Excel" sheetjs.xlsx
+
+.PHONY: cov cov-spin
+cov: misc/coverage.html
+cov-spin:
+	make cov & bash misc/spin.sh $$!
+
+COVFMT=$(patsubst %,cov_%,$(FMT))
+.PHONY: $(COVFMT)
+$(COVFMT): cov_%:
+	FMTS=$* make cov
+
+misc/coverage.html: $(TARGET) test.js
+	mocha --require blanket -R html-cov > $@
+
+.PHONY: coveralls coveralls-spin
+coveralls:
+	mocha --require blanket --reporter mocha-lcov-reporter | ./node_modules/coveralls/bin/coveralls.js
+
+coveralls-spin:
+	make coveralls & bash misc/spin.sh $$!
+
+bower.json: misc/_bower.json package.json
+	cat $< | sed 's/_VERSION_/'`grep version package.json | awk '{gsub(/[^0-9a-z\.-]/,"",$$2); print $$2}'`'/' > $@
+
+.PHONY: dist
+dist: dist-deps $(TARGET) bower.json
+	cp $(TARGET) dist/
+	cp LICENSE dist/
+	uglifyjs $(TARGET) -o dist/$(LIB).min.js --source-map dist/$(LIB).min.map --preamble "$$(head -n 1 bits/00_header.js)"
+	misc/strip_sourcemap.sh dist/$(LIB).min.js
+	uglifyjs $(REQS) $(TARGET) -o dist/$(LIB).core.min.js --source-map dist/$(LIB).core.min.map --preamble "$$(head -n 1 bits/00_header.js)"
+	misc/strip_sourcemap.sh dist/$(LIB).core.min.js
+	uglifyjs $(REQS) $(ADDONS) $(TARGET) -o dist/$(LIB).full.min.js --source-map dist/$(LIB).full.min.map --preamble "$$(head -n 1 bits/00_header.js)"
+	misc/strip_sourcemap.sh dist/$(LIB).full.min.js
+
+.PHONY: aux
+aux: $(AUXTARGETS)
+
+.PHONY: ods
+ods: ods.js
+
+ODSDEPS=$(sort $(wildcard odsbits/*.js))
+ods.js: $(ODSDEPS)
+	cat $(ODSDEPS) | tr -d '\15\32' > $@
+	cp ods.js dist/ods.js
+
+.PHONY: dist-deps
+dist-deps: ods.js
+	cp node_modules/codepage/dist/cpexcel.full.js dist/cpexcel.js
+	cp jszip.js dist/jszip.js
+	cp ods.js dist/ods.js
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/README.md b/Source/UBCS-WEB/src/config/js-xlsx-master/README.md
new file mode 100644
index 0000000..86e448e
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/README.md
@@ -0,0 +1,705 @@
+# xlsx-style
+
+Parser and writer for various spreadsheet formats.  Pure-JS cleanroom implementation from official specifications and related documents.
+
+# About this fork
+**NOTE:** [This project](https://github.com/SheetJS/js-xlsx/tree/beta) is a fork of the original (and awesome) [SheetJS/xlsx](https://github.com/SheetJS/js-xlsx) project.
+It is extended to enable cell formats to be read from and written to .xlsx workbooks.
+The intent is to provide a temporary means of using these features in practice, and ultimately to merge this into the primary project.
+Report any issues to https://github.com/protobi/js-xlsx/issues.
+
+For those contributing to this fork:
+* `master` is the main branch, which follows the original repo to enable a future pull request.
+* `beta` branch is published to npm and bower to make this fork available for use.
+
+# Supported formats
+
+Supported read formats:
+
+- Excel 2007+ XML Formats (XLSX/XLSM)
+- Excel 2007+ Binary Format (XLSB)
+- Excel 2003-2004 XML Format (XML "SpreadsheetML")
+- Excel 97-2004 (XLS BIFF8)
+- Excel 5.0/95 (XLS BIFF5)
+- OpenDocument Spreadsheet (ODS)
+
+Supported write formats:
+
+- XLSX
+- CSV (and general DSV)
+- JSON and JS objects (various styles)
+
+Demo: <http://oss.sheetjs.com/js-xlsx>
+
+Source: <http://git.io/xlsx>
+
+## Installation
+
+With [npm](https://www.npmjs.org/package/xlsx-style):
+
+```sh
+npm install xlsx-style --save
+```
+
+In the browser:
+
+```html
+<script lang="javascript" src="dist/xlsx.core.min.js"></script>
+```
+
+With [bower](http://bower.io/search/?q=js-xlsx):
+
+```sh
+bower install js-xlsx-style#beta
+```
+
+CDNjs automatically pulls the latest version and makes all versions available at
+<http://cdnjs.com/libraries/xlsx>
+
+## Optional Modules
+
+The node version automatically requires modules for additional features.  Some
+of these modules are rather large in size and are only needed in special
+circumstances, so they do not ship with the core.  For browser use, they must
+be included directly:
+
+```html
+<!-- international support from https://github.com/sheetjs/js-codepage -->
+<script src="dist/cpexcel.js"></script>
+<!-- ODS support -->
+<script src="dist/ods.js"></script>
+```
+
+An appropriate version for each dependency is included in the dist/ directory.
+
+The complete single-file version is generated at `dist/xlsx.full.min.js`
+
+## ECMAScript 5 Compatibility
+
+Since xlsx.js uses ES5 functions like `Array#forEach`, older browsers require
+[Polyfills](http://git.io/QVh77g).  This repo and the gh-pages branch include
+[a shim](https://github.com/SheetJS/js-xlsx/blob/master/shim.js)
+
+To use the shim, add the shim before the script tag that loads xlsx.js:
+
+```html
+<script type="text/javascript" src="/path/to/shim.js"></script>
+```
+
+## Parsing Workbooks
+
+For parsing, the first step is to read the file.  This involves acquiring the
+data and feeding it into the library.  Here are a few common scenarios:
+
+- node readFile:
+
+```js
+if(typeof require !== 'undefined') XLSX = require('xlsx');
+var workbook = XLSX.readFile('test.xlsx');
+/* DO SOMETHING WITH workbook HERE */
+```
+
+- ajax (for a more complete example that works in older browsers, check the demo
+  at <http://oss.sheetjs.com/js-xlsx/ajax.html>):
+
+```js
+/* set up XMLHttpRequest */
+var url = "test_files/formula_stress_test_ajax.xlsx";
+var oReq = new XMLHttpRequest();
+
+oReq.open("GET", url, true);
+oReq.responseType = "arraybuffer";
+
+oReq.onload = function(e) {
+  var arraybuffer = oReq.response;
+
+  /* convert data to binary string */
+  var data = new Uint8Array(arraybuffer);
+  var arr = new Array();
+  for(var i = 0; i != data.length; ++i) arr[i] = String.fromCharCode(data[i]);
+  var bstr = arr.join("");
+
+  /* Call XLSX */
+  var workbook = XLSX.read(bstr, {type:"binary"});
+
+  /* DO SOMETHING WITH workbook HERE */
+}
+
+oReq.send();
+```
+
+- HTML5 drag-and-drop using readAsBinaryString:
+
+```js
+/* set up drag-and-drop event */
+function handleDrop(e) {
+  e.stopPropagation();
+  e.preventDefault();
+  var files = e.dataTransfer.files;
+  var i, f;
+  
+  for (i = 0, f = files[i]; i != files.length; ++i) {
+    var reader = new FileReader();
+    var name = f.name;
+    reader.onload = function(e) {
+      var data = e.target.result;
+
+      /* if binary string, read with type 'binary' */
+      var workbook = XLSX.read(data, {type: 'binary'});
+
+      /* DO SOMETHING WITH workbook HERE */
+    };
+    reader.readAsBinaryString(f);
+  }
+}
+drop_dom_element.addEventListener('drop', handleDrop, false);
+```
+
+- HTML5 input file element using readAsBinaryString:
+
+```js
+function handleFile(e) {
+  var files = e.target.files;
+  var i, f;
+  
+  for (i = 0, f = files[i]; i != files.length; ++i) {
+    var reader = new FileReader();
+    var name = f.name;
+    reader.onload = function(e) {
+      var data = e.target.result;
+
+      var workbook = XLSX.read(data, {type: 'binary'});
+
+      /* DO SOMETHING WITH workbook HERE */
+    };
+    reader.readAsBinaryString(f);
+  }
+}
+input_dom_element.addEventListener('change', handleFile, false);
+```
+
+## Working with the Workbook
+
+The full object format is described later in this README.
+
+This example extracts the value stored in cell A1 from the first worksheet:
+
+```js
+var first_sheet_name = workbook.SheetNames[0];
+var address_of_cell = 'A1';
+
+/* Get worksheet */
+var worksheet = workbook.Sheets[first_sheet_name];
+
+/* Find desired cell */
+var desired_cell = worksheet[address_of_cell];
+
+/* Get the value */
+var desired_value = desired_cell.v;
+```
+
+This example iterates through every nonempty of every sheet and dumps values:
+
+```js
+var sheet_name_list = workbook.SheetNames;
+
+sheet_name_list.forEach(function(y) { /* iterate through sheets */
+  var worksheet = workbook.Sheets[y];
+  for (z in worksheet) {
+    /* all keys that do not begin with "!" correspond to cell addresses */
+    if(z[0] === '!') continue;
+    console.log(y + "!" + z + "=" + JSON.stringify(worksheet[z].v));
+  }
+});
+```
+
+Complete examples:
+
+- <http://oss.sheetjs.com/js-xlsx/> HTML5 File API / Base64 Text / Web Workers
+
+Note that older versions of IE does not support HTML5 File API, so the base64
+mode is provided for testing.  On OSX you can get the base64 encoding with:
+
+```sh
+$ <target_file.xlsx base64 | pbcopy
+```
+
+- <http://oss.sheetjs.com/js-xlsx/ajax.html> XMLHttpRequest
+
+- <https://github.com/SheetJS/js-xlsx/blob/master/bin/xlsx.njs> node
+
+The node version installs a command line tool `xlsx` which can read spreadsheet
+files and output the contents in various formats.  The source is available at
+`xlsx.njs` in the bin directory.
+
+Some helper functions in `XLSX.utils` generate different views of the sheets:
+
+- `XLSX.utils.sheet_to_csv` generates CSV
+- `XLSX.utils.sheet_to_json` generates an array of objects
+- `XLSX.utils.sheet_to_formulae` generates a list of formulae
+
+## Writing Workbooks
+
+For writing, the first step is to generate output data.  The helper functions
+`write` and `writeFile` will produce the data in various formats suitable for
+dissemination.  The second step is to actual share the data with the end point.
+Assuming `workbook` is a workbook object:
+
+- nodejs write to file:
+
+```js
+/* output format determined by filename */
+XLSX.writeFile(workbook, 'out.xlsx');
+/* at this point, out.xlsx is a file that you can distribute */
+```
+
+- write to binary string (using FileSaver.js):
+
+```js
+/* bookType can be 'xlsx' or 'xlsm' or 'xlsb' */
+var wopts = { bookType:'xlsx', bookSST:false, type:'binary' };
+
+var wbout = XLSX.write(workbook,wopts);
+
+function s2ab(s) {
+  var buf = new ArrayBuffer(s.length);
+  var view = new Uint8Array(buf);
+  for (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
+  return buf;
+}
+
+/* the saveAs call downloads a file on the local machine */
+saveAs(new Blob([s2ab(wbout)],{type:""}), "test.xlsx")
+```
+
+Complete examples:
+
+- <http://sheetjs.com/demos/writexlsx.html> generates a simple file
+- <http://git.io/WEK88Q> writing an array of arrays in nodejs
+- <http://sheetjs.com/demos/table.html> exporting an HTML table
+
+## Interface
+
+`XLSX` is the exposed variable in the browser and the exported node variable
+
+`XLSX.version` is the version of the library (added by the build script).
+
+`XLSX.SSF` is an embedded version of the [format library](http://git.io/ssf).
+
+### Parsing functions
+
+`XLSX.read(data, read_opts)` attempts to parse `data`.
+
+`XLSX.readFile(filename, read_opts)` attempts to read `filename` and parse.
+
+### Writing functions
+
+`XLSX.write(wb, write_opts)` attempts to write the workbook `wb`
+
+`XLSX.writeFile(wb, filename, write_opts)` attempts to write `wb` to `filename`
+
+### Utilities
+
+Utilities are available in the `XLSX.utils` object:
+
+Exporting:
+
+- `sheet_to_json` converts a workbook object to an array of JSON objects.
+- `sheet_to_csv` generates delimiter-separated-values output
+- `sheet_to_formulae` generates a list of the formulae (with value fallbacks)
+
+Cell and cell address manipulation:
+
+- `format_cell` generates the text value for a cell (using number formats)
+- `{en,de}code_{row,col}` convert between 0-indexed rows/cols and A1 forms.
+- `{en,de}code_cell` converts cell addresses
+- `{en,de}code_range` converts cell ranges
+
+## Workbook / Worksheet / Cell Object Description
+
+js-xlsx conforms to the Common Spreadsheet Format (CSF):
+
+### General Structures
+
+Cell address objects are stored as `{c:C, r:R}` where `C` and `R` are 0-indexed
+column and row numbers, respectively.  For example, the cell address `B5` is
+represented by the object `{c:1, r:4}`.
+
+Cell range objects are stored as `{s:S, e:E}` where `S` is the first cell and
+`E` is the last cell in the range.  The ranges are inclusive.  For example, the
+range `A3:B7` is represented by the object `{s:{c:0, r:2}, e:{c:1, r:6}}`. Utils
+use the following pattern to walk each of the cells in a range:
+
+```js
+for(var R = range.s.r; R <= range.e.r; ++R) {
+  for(var C = range.s.c; C <= range.e.c; ++C) {
+    var cell_address = {c:C, r:R};
+  }
+}
+```
+
+### Cell Object
+
+| Key | Description |
+| --- | ----------- |
+| `v` | raw value (see Data Types section for more info) |
+| `w` | formatted text (if applicable) |
+| `t` | cell type: `b` Boolean, `n` Number, `e` error, `s` String, `d` Date |
+| `f` | cell formula (if applicable) |
+| `r` | rich text encoding (if applicable) |
+| `h` | HTML rendering of the rich text (if applicable) |
+| `c` | comments associated with the cell ** |
+| `z` | number format string associated with the cell (if requested) |
+| `l` | cell hyperlink object (.Target holds link, .tooltip is tooltip) |
+| `s` | the style/theme of the cell (if applicable) |
+
+Built-in export utilities (such as the CSV exporter) will use the `w` text if it
+is available.  To change a value, be sure to delete `cell.w` (or set it to
+`undefined`) before attempting to export.  The utilities will regenerate the `w`
+text from the number format (`cell.z`) and the raw value if possible.
+
+**Note**: The .z attribute is now deprecated.  Use the `.s` attribute to specify cell styles including number formats.
+To specify a number format, use `s.numFmt`, e.g. `{v: 42145.822, s: { numFmt: "m/dd/yy"}}` described below.
+
+### Data Types
+
+The raw value is stored in the `v` field, interpreted based on the `t` field.
+
+Type `b` is the Boolean type.  `v` is interpreted according to JS truth tables
+
+Type `e` is the Error type. `v` holds the number and `w` holds the common name:
+
+| Value | Error Meaning |
+| ----: | :------------ |
+|  0x00 | #NULL!        |
+|  0x07 | #DIV/0!       |
+|  0x0F | #VALUE!       |
+|  0x17 | #REF!         |
+|  0x1D | #NAME?        |
+|  0x24 | #NUM!         |
+|  0x2A | #N/A          |
+|  0x2B | #GETTING_DATA |
+
+Type `n` is the Number type. This includes all forms of data that Excel stores
+as numbers, such as dates/times and Boolean fields.  Excel exclusively uses data
+that can be fit in an IEEE754 floating point number, just like JS Number, so the
+`v` field holds the raw number.  The `w` field holds formatted text.
+
+Type `d` is the Date type, generated only when the option `cellDates` is passed.
+Since JSON does not have a natural Date type, parsers are generally expected to
+store ISO 8601 Date strings like you would get from `date.toISOString()`.  On
+the other hand, writers and exporters should be able to handle date strings and
+JS Date objects.  Note that Excel disregards the timezone modifier and treats all
+dates in the local timezone.  js-xlsx does not correct for this error.
+
+Type `s` is the String type.  `v` should be explicitly stored as a string to
+avoid possible confusion.
+
+
+### Worksheet Object
+
+Each key that does not start with `!` maps to a cell (using `A-1` notation)
+
+`worksheet[address]` returns the cell object for the specified address.
+
+Special worksheet keys (accessible as `worksheet[key]`, each starting with `!`):
+
+- `ws['!ref']`: A-1 based range representing the worksheet range. Functions that
+  work with sheets should use this parameter to determine the range.  Cells that
+  are assigned outside of the range are not processed.  In particular, when
+  writing a worksheet by hand, be sure to update the range.  For a longer
+  discussion, see <http://git.io/KIaNKQ>
+
+  Functions that handle worksheets should test for the presence of `!ref` field.
+  If the `!ref` is omitted or is not a valid range, functions are free to treat
+  the sheet as empty or attempt to guess the range.  The standard utilities that
+  ship with this library treat sheets as empty (for example, the CSV output is an
+  empty string).
+
+  When reading a worksheet with the `sheetRows` property set, the ref parameter
+  will use the restricted range.  The original range is set at `ws['!fullref']`
+
+- `ws['!cols']`: array of column properties objects.  Column widths are actually
+  stored in files in a normalized manner, measured in terms of the "Maximum
+  Digit Width" (the largest width of the rendered digits 0-9, in pixels).  When
+  parsed, the column objects store the pixel width in the `wpx` field, character
+  width in the `wch` field, and the maximum digit width in the `MDW` field.
+
+- `ws['!merges']`: array of range objects corresponding to the merged cells in
+  the worksheet.  Plaintext utilities are unaware of merge cells.  CSV export
+  will write all cells in the merge range if they exist, so be sure that only
+  the first cell (upper-left) in the range is set.
+
+- `ws['!printHeader']`:  array of row indices for repeating row headers on print, e.g. `[1:1]` to repeat just the first row.
+
+The following properties are currently used when generating an XLSX file, but not yet parsed:
+
+- `ws['!rowBreaks']`: array of row break points, e.g. `[16,32]`
+- `ws['!colBreaks']`: array of col break points, e.g. `[8,16]`
+- `ws['!pageSetup']`: `{scale: '100', orientation: 'portrait'||'landscape'}
+- `ws['!printHeader']`: array of first and last row indexes for repeat header on printing, e.g. `[1,1]` to repeat just first row
+- `ws['!freeze']`:  string cell reference for breakpoint, e.g. the following will freeze the first row and first column: 
+        {
+           xSplit: "1",
+           ySplit: "1",
+           topLeftCell: "B2",
+           activePane: "bottomRight",
+           state: "frozen"
+         }
+
+
+### Workbook Object
+
+`workbook.SheetNames` is an ordered list of the sheets in the workbook
+
+`wb.Sheets[sheetname]` returns an object representing the worksheet.
+
+`wb.Props` is an object storing the standard properties.  The following properties are currently used when
+generating an XLSX file, but not yet parsed:
+    - `title`
+    - `subject`
+    - `description`
+    - `keywords`
+    - `creator`
+
+`wb.Custprops` stores custom properties.  Since the XLS standard properties deviate from the XLSX
+standard, XLS parsing stores core properties in both places.  .
+
+
+## Parsing Options
+
+The exported `read` and `readFile` functions accept an options argument:
+
+| Option Name | Default | Description |
+| :---------- | ------: | :---------- |
+| cellFormula | true    | Save formulae to the .f field ** |
+| cellHTML    | true    | Parse rich text and save HTML to the .h field |
+| cellNF      | false   | Save number format string to the .z field |
+| cellStyles  | false   | Save style/theme info to the .s field |
+| cellDates   | false   | Store dates as type `d` (default is `n`) ** |
+| sheetStubs  | false   | Create cell objects for stub cells |
+| sheetRows   | 0       | If >0, read the first `sheetRows` rows ** |
+| bookDeps    | false   | If true, parse calculation chains |
+| bookFiles   | false   | If true, add raw files to book object ** |
+| bookProps   | false   | If true, only parse enough to get book metadata ** |
+| bookSheets  | false   | If true, only parse enough to get the sheet names |
+| bookVBA     | false   | If true, expose vbaProject.bin to `vbaraw` field ** |
+| password    | ""      | If defined and file is encrypted, use password ** |
+
+- `cellFormula` option only applies to formats that require extra processing to
+  parse formulae (XLS/XLSB).
+- Even if `cellNF` is false, formatted text will be generated and saved to `.w`
+- In some cases, sheets may be parsed even if `bookSheets` is false.
+- `bookSheets` and `bookProps` combine to give both sets of information
+- `Deps` will be an empty object if `bookDeps` is falsy
+- `bookFiles` behavior depends on file type:
+    * `keys` array (paths in the ZIP) for ZIP-based formats
+    * `files` hash (mapping paths to objects representing the files) for ZIP
+    * `cfb` object for formats using CFB containers
+- `sheetRows-1` rows will be generated when looking at the JSON object output
+  (since the header row is counted as a row when parsing the data)
+- `bookVBA` merely exposes the raw vba object.  It does not parse the data.
+- `cellDates` currently does not convert numerical dates to JS dates.
+- Currently only XOR encryption is supported.  Unsupported error will be thrown
+  for files employing other encryption methods.
+
+The defaults are enumerated in bits/84_defaults.js
+
+## Writing Options
+
+The exported `write` and `writeFile` functions accept an options argument:
+
+| Option Name | Default | Description |
+| :---------- | ------: | :---------- |
+| cellDates   | false   | Store dates as type `d` (default is `n`) |
+| bookSST     | false   | Generate Shared String Table ** |
+| bookType    | 'xlsx'  | Type of Workbook ("xlsx" or "xlsm" or "xlsb") |
+| showGridLines | true | Show gridlines on all pages  |
+| tabSelected | '1' | Initial tab selected |
+| Props       | null | Workbook properties |
+
+
+
+
+- `bookSST` is slower and more memory intensive, but has better compatibility
+  with older versions of iOS Numbers
+- `bookType = 'xlsb'` is stubbed and far from complete
+- The raw data is the only thing guaranteed to be saved.  Formulae, formatting,
+  and other niceties may not be serialized (pending CSF standardization)
+- `cellDates` only applies to XLSX output and is not guaranteed to work with
+  third-party readers.  Excel itself does not usually write cells with type `d`
+  so non-Excel tools may ignore the data or blow up in the presence of dates.
+- showGridLines and tabSelected are currently used when generating an XLSX file but not yet parse.
+- Props specifies workbook properties
+   
+
+
+
+## Cell Styles
+
+Cell styles are specified by a style object that roughly parallels the OpenXML structure.  The style object has five
+top-level attributes: `fill`, `font`, `numFmt`, `alignment`, and `border`.
+
+
+| Style Attribute | Sub Attributes | Values |
+| :-------------- | :------------- | :------------- |
+| fill            | patternType    |  `"solid"` or `"none"`
+|                 | fgColor        |  `COLOR_SPEC`
+|                 | bgColor        |  `COLOR_SPEC`
+| font            | name           |  `"Calibri"` // default
+|                 | sz             |  `"11"` // font size in points
+|                 | color          |  `COLOR_SPEC`
+|                 | bold           |  `true` or `false`
+|                 | underline      |  `true` or `false`
+|                 | italic         |  `true` or `false`
+|                 | strike         |  `true` or `false`
+|                 | outline        |  `true` or `false`
+|                 | shadow         |  `true` or `false`
+|                 | vertAlign      |  `true` or `false`
+| numFmt          |                |  `"0"`  // integer index to built in formats, see StyleBuilder.SSF property
+|                 |                |  `"0.00%"` // string matching a built-in format, see StyleBuilder.SSF
+|                 |                |  `"0.0%"`  // string specifying a custom format
+|                 |                |  `"0.00%;\\(0.00%\\);\\-;@"` // string specifying a custom format, escaping special characters
+|                 |                |  `"m/dd/yy"` // string a date format using Excel's format notation
+| alignment       | vertical       | `"bottom"` or `"center"` or `"top"`
+|                 | horizontal     | `"left"` or `"center"` or `"right"`
+|                 | wrapText       |  `true ` or ` false`
+|                 | readingOrder   |  `2` // for right-to-left
+|                 | textRotation   | Number from `0` to `180` or `255` (default is `0`)
+|                 |                |  `90` is rotated up 90 degrees
+|                 |                |  `45` is rotated up 45 degrees
+|                 |                | `135` is rotated down 45 degrees
+|                 |                | `180` is rotated down 180 degrees
+|                 |                | `255` is special,  aligned vertically
+| border          | top            | `{ style: BORDER_STYLE, color: COLOR_SPEC }`
+|                 | bottom         | `{ style: BORDER_STYLE, color: COLOR_SPEC }`
+|                 | left           | `{ style: BORDER_STYLE, color: COLOR_SPEC }`
+|                 | right          | `{ style: BORDER_STYLE, color: COLOR_SPEC }`
+|                 | diagonal       | `{ style: BORDER_STYLE, color: COLOR_SPEC }`
+|                 | diagonalUp     | `true` or `false`
+|                 | diagonalDown   | `true` or `false`
+
+**COLOR_SPEC**: Colors for `fill`, `font`, and `border` are specified as objects, either:
+* `{ auto: 1}` specifying automatic values
+* `{ rgb: "FFFFAA00" }` specifying a hex ARGB value
+* `{ theme: "1", tint: "-0.25"}` specifying an integer index to a theme color and a tint value (default 0)
+* `{ indexed: 64}` default value for `fill.bgColor`
+
+**BORDER_STYLE**: Border style is a string value which may take on one of the following values:
+ * `thin`
+ * `medium`
+ * `thick`
+ * `dotted`
+ * `hair`
+ * `dashed`
+ * `mediumDashed`
+ * `dashDot`
+ * `mediumDashDot`
+ * `dashDotDot`
+ * `mediumDashDotDot`
+ * `slantDashDot`
+
+
+Borders for merged areas are specified for each cell within the merged area.  So to apply a box border to a merged area of 3x3 cells, border styles would need to be specified for eight different cells:
+* left borders for the three cells on the left,
+* right borders for the cells on the right
+* top borders for the cells on the top
+* bottom borders for the cells on the left
+
+
+
+## Tested Environments
+
+ - NodeJS 0.8, 0.10 (latest release), 0.11.14 (unstable), io.js
+ - IE 6/7/8/9/10/11 using Base64 mode (IE10/11 using HTML5 mode)
+ - FF 18 using Base64 or HTML5 mode
+ - Chrome 24 using Base64 or HTML5 mode
+
+Tests utilize the mocha testing framework.  Travis-CI and Sauce Labs links:
+
+ - <https://travis-ci.org/SheetJS/js-xlsx> for XLSX module in nodejs
+ - <https://travis-ci.org/SheetJS/SheetJS.github.io> for XLS* modules
+ - <https://saucelabs.com/u/sheetjs> for XLS* modules using Sauce Labs
+
+## Test Files
+
+Test files are housed in [another repo](https://github.com/SheetJS/test_files).
+
+Running `make init` will refresh the `test_files` submodule and get the files.
+
+## Testing
+
+`make test` will run the node-based tests.  To run the in-browser tests, clone
+[the oss.sheetjs.com repo](https://github.com/SheetJS/SheetJS.github.io) and
+replace the xlsx.js file (then fire up the browser and go to `stress.html`):
+
+```sh
+$ cp xlsx.js ../SheetJS.github.io
+$ cd ../SheetJS.github.io
+$ simplehttpserver # or "python -mSimpleHTTPServer" or "serve"
+$ open -a Chromium.app http://localhost:8000/stress.html
+```
+
+For a much smaller test, run `make test_misc`.
+
+## Contributing
+
+Due to the precarious nature of the Open Specifications Promise, it is very
+important to ensure code is cleanroom.  Consult CONTRIBUTING.md
+
+The xlsx.js file is constructed from the files in the `bits` subdirectory. The
+build script (run `make`) will concatenate the individual bits to produce the
+script.  Before submitting a contribution, ensure that running make will produce
+the xlsx.js file exactly.  The simplest way to test is to move the script:
+
+```sh
+$ mv xlsx.js xlsx.new.js
+$ make
+$ diff xlsx.js xlsx.new.js
+```
+
+To produce the dist files, run `make dist`.  The dist files are updated in each
+version release and should not be committed between versions.
+
+## License
+
+Please consult the attached LICENSE file for details.  All rights not explicitly
+granted by the Apache 2.0 license are reserved by the Original Author.
+
+It is the opinion of the Original Author that this code conforms to the terms of
+the Microsoft Open Specifications Promise, falling under the same terms as
+OpenOffice (which is governed by the Apache License v2).  Given the vagaries of
+the promise, the Original Author makes no legal claim that in fact end users are
+protected from future actions.  It is highly recommended that, for commercial
+uses, you consult a lawyer before proceeding.
+
+## References
+
+ISO/IEC 29500:2012(E) "Information technology 鈥� Document description and processing languages 鈥� Office Open XML File Formats"
+
+OSP-covered specifications:
+
+ - [MS-XLSB]: Excel (.xlsb) Binary File Format
+ - [MS-XLSX]: Excel (.xlsx) Extensions to the Office Open XML SpreadsheetML File Format
+ - [MS-OE376]: Office Implementation Information for ECMA-376 Standards Support
+ - [MS-CFB]: Compound File Binary File Format
+ - [MS-XLS]: Excel Binary File Format (.xls) Structure Specification
+ - [MS-ODATA]: Open Data Protocol (OData)
+ - [MS-OFFCRYPTO]: Office Document Cryptography Structure
+ - [MS-OLEDS]: Object Linking and Embedding (OLE) Data Structures
+ - [MS-OLEPS]: Object Linking and Embedding (OLE) Property Set Data Structures
+ - [MS-OSHARED]: Office Common Data Types and Objects Structures
+ - [MS-OVBA]: Office VBA File Format Structure
+ - [MS-CTXLS]: Excel Custom Toolbar Binary File Format
+ - [MS-XLDM]: Spreadsheet Data Model File Format
+ - [MS-EXSPXML3]: Excel Calculation Version 2 Web Service XML Schema
+ - [XLS]: Microsoft Office Excel 97-2007 Binary File Format Specification
+
+Open Document Format for Office Applications Version 1.2 (29 September 2011)
+
+
+## Badges
+
+[![Build Status](https://travis-ci.org/SheetJS/js-xlsx.svg?branch=master)](https://travis-ci.org/SheetJS/js-xlsx)
+
+[![Coverage Status](http://img.shields.io/coveralls/SheetJS/js-xlsx/master.svg)](https://coveralls.io/r/SheetJS/js-xlsx?branch=master)
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bin/xlsx.njs b/Source/UBCS-WEB/src/config/js-xlsx-master/bin/xlsx.njs
new file mode 100644
index 0000000..a9c76b2
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bin/xlsx.njs
@@ -0,0 +1,133 @@
+#!/usr/bin/env node
+/* xlsx.js (C) 2013-2015 SheetJS -- http://sheetjs.com */
+var n = "xlsx";
+/* vim: set ts=2 ft=javascript: */
+var X = require('../');
+var fs = require('fs'), program = require('commander');
+program
+	.version(X.version)
+	.usage('[options] <file> [sheetname]')
+	.option('-f, --file <file>', 'use specified workbook')
+	.option('-s, --sheet <sheet>', 'print specified sheet (default first sheet)')
+	.option('-p, --password <pw>', 'if file is encrypted, try with specified pw')
+	.option('-l, --list-sheets', 'list sheet names and exit')
+	.option('-o, --output <file>', 'output to specified file')
+	.option('-B, --xlsb', 'emit XLSB to <sheetname> or <file>.xlsb')
+	.option('-M, --xlsm', 'emit XLSM to <sheetname> or <file>.xlsm')
+	.option('-X, --xlsx', 'emit XLSX to <sheetname> or <file>.xlsx')
+	.option('-S, --formulae', 'print formulae')
+	.option('-j, --json', 'emit formatted JSON (all fields text)')
+	.option('-J, --raw-js', 'emit raw JS object (raw numbers)')
+	.option('-F, --field-sep <sep>', 'CSV field separator', ",")
+	.option('-R, --row-sep <sep>', 'CSV row separator', "\n")
+	.option('-n, --sheet-rows <num>', 'Number of rows to process (0=all rows)')
+	.option('--sst', 'generate sst')
+	.option('--perf', 'do not generate output')
+	.option('--all', 'parse everything; XLS[XMB] write as much as possible')
+	.option('--dev', 'development mode')
+	.option('--read', 'read but do not print out contents')
+	.option('-q, --quiet', 'quiet mode');
+
+program.on('--help', function() {
+	console.log('  Default output format is CSV');
+	console.log('  Support email: dev@sheetjs.com');
+	console.log('  Web Demo: http://oss.sheetjs.com/js-'+n+'/');
+});
+
+program.parse(process.argv);
+
+/* see https://github.com/SheetJS/j/issues/4 */
+if(process.version === 'v0.10.31') {
+	var msgs = [
+		"node v0.10.31 is known to crash on OSX and Linux, refusing to proceed.",
+		"see https://github.com/SheetJS/j/issues/4 for the relevant discussion.",
+		"see https://github.com/joyent/node/issues/8208 for the relevant node issue"
+	];
+	msgs.forEach(function(m) { console.error(m); });
+	process.exit(1);
+}
+
+var filename, sheetname = '';
+if(program.args[0]) {
+	filename = program.args[0];
+	if(program.args[1]) sheetname = program.args[1];
+}
+if(program.sheet) sheetname = program.sheet;
+if(program.file) filename = program.file;
+
+if(!filename) {
+	console.error(n + ": must specify a filename");
+	process.exit(1);
+}
+
+if(!fs.existsSync(filename)) {
+	console.error(n + ": " + filename + ": No such file or directory");
+	process.exit(2);
+}
+
+var opts = {}, wb;
+if(program.listSheets) opts.bookSheets = true;
+if(program.sheetRows) opts.sheetRows = program.sheetRows;
+if(program.password) opts.password = program.password;
+if(program.xlsx || program.xlsm || program.xlsb) {
+	opts.cellNF = true;
+	if(program.output) sheetname = program.output;
+}
+else if(program.formulae);
+else opts.cellFormula = false;
+
+if(program.all) {
+	opts.cellFormula = true;
+	opts.cellNF = true;
+	opts.cellStyles = true;
+}
+
+if(program.dev) {
+	X.verbose = 2;
+	opts.WTF = true;
+	wb = X.readFile(filename, opts);
+}
+else try {
+	wb = X.readFile(filename, opts);
+} catch(e) {
+	var msg = (program.quiet) ? "" : n + ": error parsing ";
+	msg += filename + ": " + e;
+	console.error(msg);
+	process.exit(3);
+}
+if(program.read) process.exit(0);
+
+if(program.listSheets) {
+	console.log(wb.SheetNames.join("\n"));
+	process.exit(0);
+}
+
+var wopts = {WTF:opts.WTF, bookSST:program.sst};
+
+if(program.xlsx) return X.writeFile(wb, sheetname || (filename + ".xlsx"), wopts);
+if(program.xlsm) return X.writeFile(wb, sheetname || (filename + ".xlsm"), wopts);
+if(program.xlsb) return X.writeFile(wb, sheetname || (filename + ".xlsb"), wopts);
+
+var target_sheet = sheetname || '';
+if(target_sheet === '') target_sheet = wb.SheetNames[0];
+
+var ws;
+try {
+	ws = wb.Sheets[target_sheet];
+	if(!ws) throw "Sheet " + target_sheet + " cannot be found";
+} catch(e) {
+	console.error(n + ": error parsing "+filename+" "+target_sheet+": " + e);
+	process.exit(4);
+}
+
+if(program.perf) return;
+
+var oo = "";
+if(!program.quiet) console.error(target_sheet);
+if(program.formulae) oo = X.utils.get_formulae(ws).join("\n");
+else if(program.json) oo = JSON.stringify(X.utils.sheet_to_row_object_array(ws));
+else if(program.rawJs) oo = JSON.stringify(X.utils.sheet_to_row_object_array(ws,{raw:true}));
+else oo = X.utils.make_csv(ws, {FS:program.fieldSep, RS:program.rowSep});
+
+if(program.output) fs.writeFileSync(program.output, oo);
+else console.log(oo);
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/.npmignore b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/.npmignore
new file mode 100644
index 0000000..a6c7c28
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/.npmignore
@@ -0,0 +1 @@
+*.js
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/00_header.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/00_header.js
new file mode 100644
index 0000000..7b557ac
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/00_header.js
@@ -0,0 +1,6 @@
+/* xlsx.js (C) 2013-2015 SheetJS -- http://sheetjs.com */
+/* vim: set ts=2: */
+/*jshint -W041 */
+/*jshint funcscope:true, eqnull:true */
+var XLSX = {};
+(function make_xlsx(XLSX){
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/01_version.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/01_version.js
new file mode 100644
index 0000000..815ff45
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/01_version.js
@@ -0,0 +1 @@
+XLSX.version = '0.8.20';
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/02_codepage.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/02_codepage.js
new file mode 100644
index 0000000..6726a6f
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/02_codepage.js
@@ -0,0 +1,23 @@
+var current_codepage = 1200, current_cptable;
+if(typeof module !== "undefined" && typeof require !== 'undefined') {
+	if(typeof cptable === 'undefined') cptable = require('./dist/cpexcel');
+	current_cptable = cptable[current_codepage];
+}
+function reset_cp() { set_cp(1200); }
+var set_cp = function(cp) { current_codepage = cp; };
+
+function char_codes(data) { var o = []; for(var i = 0, len = data.length; i < len; ++i) o[i] = data.charCodeAt(i); return o; }
+var debom_xml = function(data) { return data; };
+
+var _getchar = function _gc1(x) { return String.fromCharCode(x); };
+if(typeof cptable !== 'undefined') {
+	set_cp = function(cp) { current_codepage = cp; current_cptable = cptable[cp]; };
+	debom_xml = function(data) {
+		if(data.charCodeAt(0) === 0xFF && data.charCodeAt(1) === 0xFE) { return cptable.utils.decode(1200, char_codes(data.substr(2))); }
+		return data;
+	};
+	_getchar = function _gc2(x) {
+		if(current_codepage === 1200) return String.fromCharCode(x);
+		return cptable.utils.decode(current_codepage, [x&255,x>>8])[0];
+	};
+}
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/04_base64.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/04_base64.js
new file mode 100644
index 0000000..cda6c0f
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/04_base64.js
@@ -0,0 +1,41 @@
+var Base64 = (function make_b64(){
+	var map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
+	return {
+		encode: function(input, utf8) {
+			var o = "";
+			var c1, c2, c3, e1, e2, e3, e4;
+			for(var i = 0; i < input.length; ) {
+				c1 = input.charCodeAt(i++);
+				c2 = input.charCodeAt(i++);
+				c3 = input.charCodeAt(i++);
+				e1 = c1 >> 2;
+				e2 = (c1 & 3) << 4 | c2 >> 4;
+				e3 = (c2 & 15) << 2 | c3 >> 6;
+				e4 = c3 & 63;
+				if (isNaN(c2)) { e3 = e4 = 64; }
+				else if (isNaN(c3)) { e4 = 64; }
+				o += map.charAt(e1) + map.charAt(e2) + map.charAt(e3) + map.charAt(e4);
+			}
+			return o;
+		},
+		decode: function b64_decode(input, utf8) {
+			var o = "";
+			var c1, c2, c3;
+			var e1, e2, e3, e4;
+			input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
+			for(var i = 0; i < input.length;) {
+				e1 = map.indexOf(input.charAt(i++));
+				e2 = map.indexOf(input.charAt(i++));
+				e3 = map.indexOf(input.charAt(i++));
+				e4 = map.indexOf(input.charAt(i++));
+				c1 = e1 << 2 | e2 >> 4;
+				c2 = (e2 & 15) << 4 | e3 >> 2;
+				c3 = (e3 & 3) << 6 | e4;
+				o += String.fromCharCode(c1);
+				if (e3 != 64) { o += String.fromCharCode(c2); }
+				if (e4 != 64) { o += String.fromCharCode(c3); }
+			}
+			return o;
+		}
+	};
+})();
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/05_buf.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/05_buf.js
new file mode 100644
index 0000000..ab3565d
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/05_buf.js
@@ -0,0 +1,16 @@
+var has_buf = (typeof Buffer !== 'undefined');
+
+function new_raw_buf(len) {
+	/* jshint -W056 */
+	return new (has_buf ? Buffer : Array)(len);
+	/* jshint +W056 */
+}
+
+function s2a(s) {
+	if(has_buf) return new Buffer(s, "binary");
+	return s.split("").map(function(x){ return x.charCodeAt(0) & 0xff; });
+}
+
+var bconcat = function(bufs) { return [].concat.apply([], bufs); };
+
+var chr0 = /\u0000/g, chr1 = /[\u0001-\u0006]/;
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/10_ssf.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/10_ssf.js
new file mode 100644
index 0000000..81135ec
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/10_ssf.js
@@ -0,0 +1,765 @@
+/* ssf.js (C) 2013-2014 SheetJS -- http://sheetjs.com */
+/*jshint -W041 */
+var SSF = {};
+var make_ssf = function make_ssf(SSF){
+SSF.version = '0.8.1';
+function _strrev(x) { var o = "", i = x.length-1; while(i>=0) o += x.charAt(i--); return o; }
+function fill(c,l) { var o = ""; while(o.length < l) o+=c; return o; }
+function pad0(v,d){var t=""+v; return t.length>=d?t:fill('0',d-t.length)+t;}
+function pad_(v,d){var t=""+v;return t.length>=d?t:fill(' ',d-t.length)+t;}
+function rpad_(v,d){var t=""+v; return t.length>=d?t:t+fill(' ',d-t.length);}
+function pad0r1(v,d){var t=""+Math.round(v); return t.length>=d?t:fill('0',d-t.length)+t;}
+function pad0r2(v,d){var t=""+v; return t.length>=d?t:fill('0',d-t.length)+t;}
+var p2_32 = Math.pow(2,32);
+function pad0r(v,d){if(v>p2_32||v<-p2_32) return pad0r1(v,d); var i = Math.round(v); return pad0r2(i,d); }
+function isgeneral(s, i) { return s.length >= 7 + i && (s.charCodeAt(i)|32) === 103 && (s.charCodeAt(i+1)|32) === 101 && (s.charCodeAt(i+2)|32) === 110 && (s.charCodeAt(i+3)|32) === 101 && (s.charCodeAt(i+4)|32) === 114 && (s.charCodeAt(i+5)|32) === 97 && (s.charCodeAt(i+6)|32) === 108; }
+/* Options */
+var opts_fmt = [
+	["date1904", 0],
+	["output", ""],
+	["WTF", false]
+];
+function fixopts(o){
+	for(var y = 0; y != opts_fmt.length; ++y) if(o[opts_fmt[y][0]]===undefined) o[opts_fmt[y][0]]=opts_fmt[y][1];
+}
+SSF.opts = opts_fmt;
+var table_fmt = {
+	0:  'General',
+	1:  '0',
+	2:  '0.00',
+	3:  '#,##0',
+	4:  '#,##0.00',
+	9:  '0%',
+	10: '0.00%',
+	11: '0.00E+00',
+	12: '# ?/?',
+	13: '# ??/??',
+	14: 'm/d/yy',
+	15: 'd-mmm-yy',
+	16: 'd-mmm',
+	17: 'mmm-yy',
+	18: 'h:mm AM/PM',
+	19: 'h:mm:ss AM/PM',
+	20: 'h:mm',
+	21: 'h:mm:ss',
+	22: 'm/d/yy h:mm',
+	37: '#,##0 ;(#,##0)',
+	38: '#,##0 ;[Red](#,##0)',
+	39: '#,##0.00;(#,##0.00)',
+	40: '#,##0.00;[Red](#,##0.00)',
+	45: 'mm:ss',
+	46: '[h]:mm:ss',
+	47: 'mmss.0',
+	48: '##0.0E+0',
+	49: '@',
+	56: '"涓婂崍/涓嬪崍 "hh"鏅�"mm"鍒�"ss"绉� "',
+	65535: 'General'
+};
+var days = [
+	['Sun', 'Sunday'],
+	['Mon', 'Monday'],
+	['Tue', 'Tuesday'],
+	['Wed', 'Wednesday'],
+	['Thu', 'Thursday'],
+	['Fri', 'Friday'],
+	['Sat', 'Saturday']
+];
+var months = [
+	['J', 'Jan', 'January'],
+	['F', 'Feb', 'February'],
+	['M', 'Mar', 'March'],
+	['A', 'Apr', 'April'],
+	['M', 'May', 'May'],
+	['J', 'Jun', 'June'],
+	['J', 'Jul', 'July'],
+	['A', 'Aug', 'August'],
+	['S', 'Sep', 'September'],
+	['O', 'Oct', 'October'],
+	['N', 'Nov', 'November'],
+	['D', 'Dec', 'December']
+];
+function frac(x, D, mixed) {
+	var sgn = x < 0 ? -1 : 1;
+	var B = x * sgn;
+	var P_2 = 0, P_1 = 1, P = 0;
+	var Q_2 = 1, Q_1 = 0, Q = 0;
+	var A = Math.floor(B);
+	while(Q_1 < D) {
+		A = Math.floor(B);
+		P = A * P_1 + P_2;
+		Q = A * Q_1 + Q_2;
+		if((B - A) < 0.0000000005) break;
+		B = 1 / (B - A);
+		P_2 = P_1; P_1 = P;
+		Q_2 = Q_1; Q_1 = Q;
+	}
+	if(Q > D) { Q = Q_1; P = P_1; }
+	if(Q > D) { Q = Q_2; P = P_2; }
+	if(!mixed) return [0, sgn * P, Q];
+	if(Q===0) throw "Unexpected state: "+P+" "+P_1+" "+P_2+" "+Q+" "+Q_1+" "+Q_2;
+	var q = Math.floor(sgn * P/Q);
+	return [q, sgn*P - q*Q, Q];
+}
+function general_fmt_int(v, opts) { return ""+v; }
+SSF._general_int = general_fmt_int;
+var general_fmt_num = (function make_general_fmt_num() {
+var gnr1 = /\.(\d*[1-9])0+$/, gnr2 = /\.0*$/, gnr4 = /\.(\d*[1-9])0+/, gnr5 = /\.0*[Ee]/, gnr6 = /(E[+-])(\d)$/;
+function gfn2(v) {
+	var w = (v<0?12:11);
+	var o = gfn5(v.toFixed(12)); if(o.length <= w) return o;
+	o = v.toPrecision(10); if(o.length <= w) return o;
+	return v.toExponential(5);
+}
+function gfn3(v) {
+	var o = v.toFixed(11).replace(gnr1,".$1");
+	if(o.length > (v<0?12:11)) o = v.toPrecision(6);
+	return o;
+}
+function gfn4(o) {
+	for(var i = 0; i != o.length; ++i) if((o.charCodeAt(i) | 0x20) === 101) return o.replace(gnr4,".$1").replace(gnr5,"E").replace("e","E").replace(gnr6,"$10$2");
+	return o;
+}
+function gfn5(o) {
+	//for(var i = 0; i != o.length; ++i) if(o.charCodeAt(i) === 46) return o.replace(gnr2,"").replace(gnr1,".$1");
+	//return o;
+	return o.indexOf(".") > -1 ? o.replace(gnr2,"").replace(gnr1,".$1") : o;
+}
+return function general_fmt_num(v, opts) {
+	var V = Math.floor(Math.log(Math.abs(v))*Math.LOG10E), o;
+	if(V >= -4 && V <= -1) o = v.toPrecision(10+V);
+	else if(Math.abs(V) <= 9) o = gfn2(v);
+	else if(V === 10) o = v.toFixed(10).substr(0,12);
+	else o = gfn3(v);
+	return gfn5(gfn4(o));
+};})();
+SSF._general_num = general_fmt_num;
+function general_fmt(v, opts) {
+	switch(typeof v) {
+		case 'string': return v;
+		case 'boolean': return v ? "TRUE" : "FALSE";
+		case 'number': return (v|0) === v ? general_fmt_int(v, opts) : general_fmt_num(v, opts);
+	}
+	throw new Error("unsupported value in General format: " + v);
+}
+SSF._general = general_fmt;
+function fix_hijri(date, o) { return 0; }
+function parse_date_code(v,opts,b2) {
+	if(v > 2958465 || v < 0) return null;
+	var date = (v|0), time = Math.floor(86400 * (v - date)), dow=0;
+	var dout=[];
+	var out={D:date, T:time, u:86400*(v-date)-time,y:0,m:0,d:0,H:0,M:0,S:0,q:0};
+	if(Math.abs(out.u) < 1e-6) out.u = 0;
+	fixopts(opts != null ? opts : (opts=[]));
+	if(opts.date1904) date += 1462;
+	if(out.u > 0.999) {
+		out.u = 0;
+		if(++time == 86400) { time = 0; ++date; }
+	}
+	if(date === 60) {dout = b2 ? [1317,10,29] : [1900,2,29]; dow=3;}
+	else if(date === 0) {dout = b2 ? [1317,8,29] : [1900,1,0]; dow=6;}
+	else {
+		if(date > 60) --date;
+		/* 1 = Jan 1 1900 */
+		var d = new Date(1900,0,1);
+		d.setDate(d.getDate() + date - 1);
+		dout = [d.getFullYear(), d.getMonth()+1,d.getDate()];
+		dow = d.getDay();
+		if(date < 60) dow = (dow + 6) % 7;
+		if(b2) dow = fix_hijri(d, dout);
+	}
+	out.y = dout[0]; out.m = dout[1]; out.d = dout[2];
+	out.S = time % 60; time = Math.floor(time / 60);
+	out.M = time % 60; time = Math.floor(time / 60);
+	out.H = time;
+	out.q = dow;
+	return out;
+}
+SSF.parse_date_code = parse_date_code;
+/*jshint -W086 */
+function write_date(type, fmt, val, ss0) {
+	var o="", ss=0, tt=0, y = val.y, out, outl = 0;
+	switch(type) {
+		case 98: /* 'b' buddhist year */
+			y = val.y + 543;
+			/* falls through */
+		case 121: /* 'y' year */
+		switch(fmt.length) {
+			case 1: case 2: out = y % 100; outl = 2; break;
+			default: out = y % 10000; outl = 4; break;
+		} break;
+		case 109: /* 'm' month */
+		switch(fmt.length) {
+			case 1: case 2: out = val.m; outl = fmt.length; break;
+			case 3: return months[val.m-1][1];
+			case 5: return months[val.m-1][0];
+			default: return months[val.m-1][2];
+		} break;
+		case 100: /* 'd' day */
+		switch(fmt.length) {
+			case 1: case 2: out = val.d; outl = fmt.length; break;
+			case 3: return days[val.q][0];
+			default: return days[val.q][1];
+		} break;
+		case 104: /* 'h' 12-hour */
+		switch(fmt.length) {
+			case 1: case 2: out = 1+(val.H+11)%12; outl = fmt.length; break;
+			default: throw 'bad hour format: ' + fmt;
+		} break;
+		case 72: /* 'H' 24-hour */
+		switch(fmt.length) {
+			case 1: case 2: out = val.H; outl = fmt.length; break;
+			default: throw 'bad hour format: ' + fmt;
+		} break;
+		case 77: /* 'M' minutes */
+		switch(fmt.length) {
+			case 1: case 2: out = val.M; outl = fmt.length; break;
+			default: throw 'bad minute format: ' + fmt;
+		} break;
+		case 115: /* 's' seconds */
+		if(val.u === 0) switch(fmt) {
+			case 's': case 'ss': return pad0(val.S, fmt.length);
+			case '.0': case '.00': case '.000':
+		}
+		switch(fmt) {
+			case 's': case 'ss': case '.0': case '.00': case '.000':
+				if(ss0 >= 2) tt = ss0 === 3 ? 1000 : 100;
+				else tt = ss0 === 1 ? 10 : 1;
+				ss = Math.round((tt)*(val.S + val.u));
+				if(ss >= 60*tt) ss = 0;
+				if(fmt === 's') return ss === 0 ? "0" : ""+ss/tt;
+				o = pad0(ss,2 + ss0);
+				if(fmt === 'ss') return o.substr(0,2);
+				return "." + o.substr(2,fmt.length-1);
+			default: throw 'bad second format: ' + fmt;
+		}
+		case 90: /* 'Z' absolute time */
+		switch(fmt) {
+			case '[h]': case '[hh]': out = val.D*24+val.H; break;
+			case '[m]': case '[mm]': out = (val.D*24+val.H)*60+val.M; break;
+			case '[s]': case '[ss]': out = ((val.D*24+val.H)*60+val.M)*60+Math.round(val.S+val.u); break;
+			default: throw 'bad abstime format: ' + fmt;
+		} outl = fmt.length === 3 ? 1 : 2; break;
+		case 101: /* 'e' era */
+			out = y; outl = 1;
+	}
+	if(outl > 0) return pad0(out, outl); else return "";
+}
+/*jshint +W086 */
+function commaify(s) {
+	if(s.length <= 3) return s;
+	var j = (s.length % 3), o = s.substr(0,j);
+	for(; j!=s.length; j+=3) o+=(o.length > 0 ? "," : "") + s.substr(j,3);
+	return o;
+}
+var write_num = (function make_write_num(){
+var pct1 = /%/g;
+function write_num_pct(type, fmt, val){
+	var sfmt = fmt.replace(pct1,""), mul = fmt.length - sfmt.length;
+	return write_num(type, sfmt, val * Math.pow(10,2*mul)) + fill("%",mul);
+}
+function write_num_cm(type, fmt, val){
+	var idx = fmt.length - 1;
+	while(fmt.charCodeAt(idx-1) === 44) --idx;
+	return write_num(type, fmt.substr(0,idx), val / Math.pow(10,3*(fmt.length-idx)));
+}
+function write_num_exp(fmt, val){
+	var o;
+	var idx = fmt.indexOf("E") - fmt.indexOf(".") - 1;
+	if(fmt.match(/^#+0.0E\+0$/)) {
+		var period = fmt.indexOf("."); if(period === -1) period=fmt.indexOf('E');
+		var ee = Math.floor(Math.log(Math.abs(val))*Math.LOG10E)%period;
+		if(ee < 0) ee += period;
+		o = (val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);
+		if(o.indexOf("e") === -1) {
+			var fakee = Math.floor(Math.log(Math.abs(val))*Math.LOG10E);
+			if(o.indexOf(".") === -1) o = o[0] + "." + o.substr(1) + "E+" + (fakee - o.length+ee);
+			else o += "E+" + (fakee - ee);
+			while(o.substr(0,2) === "0.") {
+				o = o[0] + o.substr(2,period) + "." + o.substr(2+period);
+				o = o.replace(/^0+([1-9])/,"$1").replace(/^0+\./,"0.");
+			}
+			o = o.replace(/\+-/,"-");
+		}
+		o = o.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/,function($$,$1,$2,$3) { return $1 + $2 + $3.substr(0,(period+ee)%period) + "." + $3.substr(ee) + "E"; });
+	} else o = val.toExponential(idx);
+	if(fmt.match(/E\+00$/) && o.match(/e[+-]\d$/)) o = o.substr(0,o.length-1) + "0" + o[o.length-1];
+	if(fmt.match(/E\-/) && o.match(/e\+/)) o = o.replace(/e\+/,"e");
+	return o.replace("e","E");
+}
+var frac1 = /# (\?+)( ?)\/( ?)(\d+)/;
+function write_num_f1(r, aval, sign) {
+	var den = parseInt(r[4]), rr = Math.round(aval * den), base = Math.floor(rr/den);
+	var myn = (rr - base*den), myd = den;
+	return sign + (base === 0 ? "" : ""+base) + " " + (myn === 0 ? fill(" ", r[1].length + 1 + r[4].length) : pad_(myn,r[1].length) + r[2] + "/" + r[3] + pad0(myd,r[4].length));
+}
+function write_num_f2(r, aval, sign) {
+	return sign + (aval === 0 ? "" : ""+aval) + fill(" ", r[1].length + 2 + r[4].length);
+}
+var dec1 = /^#*0*\.(0+)/;
+var closeparen = /\).*[0#]/;
+var phone = /\(###\) ###\\?-####/;
+function hashq(str) {
+	var o = "", cc;
+	for(var i = 0; i != str.length; ++i) switch((cc=str.charCodeAt(i))) {
+		case 35: break;
+		case 63: o+= " "; break;
+		case 48: o+= "0"; break;
+		default: o+= String.fromCharCode(cc);
+	}
+	return o;
+}
+function rnd(val, d) { var dd = Math.pow(10,d); return ""+(Math.round(val * dd)/dd); }
+function dec(val, d) { return Math.round((val-Math.floor(val))*Math.pow(10,d)); }
+function flr(val) { if(val < 2147483647 && val > -2147483648) return ""+(val >= 0 ? (val|0) : (val-1|0)); return ""+Math.floor(val); }
+function write_num_flt(type, fmt, val) {
+	if(type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {
+		var ffmt = fmt.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,"");
+		if(val >= 0) return write_num_flt('n', ffmt, val);
+		return '(' + write_num_flt('n', ffmt, -val) + ')';
+	}
+	if(fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm(type, fmt, val);
+	if(fmt.indexOf('%') !== -1) return write_num_pct(type, fmt, val);
+	if(fmt.indexOf('E') !== -1) return write_num_exp(fmt, val);
+	if(fmt.charCodeAt(0) === 36) return "$"+write_num_flt(type,fmt.substr(fmt[1]==' '?2:1),val);
+	var o, oo;
+	var r, ri, ff, aval = Math.abs(val), sign = val < 0 ? "-" : "";
+	if(fmt.match(/^00+$/)) return sign + pad0r(aval,fmt.length);
+	if(fmt.match(/^[#?]+$/)) {
+		o = pad0r(val,0); if(o === "0") o = "";
+		return o.length > fmt.length ? o : hashq(fmt.substr(0,fmt.length-o.length)) + o;
+	}
+	if((r = fmt.match(frac1)) !== null) return write_num_f1(r, aval, sign);
+	if(fmt.match(/^#+0+$/) !== null) return sign + pad0r(aval,fmt.length - fmt.indexOf("0"));
+	if((r = fmt.match(dec1)) !== null) {
+		o = rnd(val, r[1].length).replace(/^([^\.]+)$/,"$1."+r[1]).replace(/\.$/,"."+r[1]).replace(/\.(\d*)$/,function($$, $1) { return "." + $1 + fill("0", r[1].length-$1.length); });
+		return fmt.indexOf("0.") !== -1 ? o : o.replace(/^0\./,".");
+	}
+	fmt = fmt.replace(/^#+([0.])/, "$1");
+	if((r = fmt.match(/^(0*)\.(#*)$/)) !== null) {
+		return sign + rnd(aval, r[2].length).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,r[1].length?"0.":".");
+	}
+	if((r = fmt.match(/^#,##0(\.?)$/)) !== null) return sign + commaify(pad0r(aval,0));
+	if((r = fmt.match(/^#,##0\.([#0]*0)$/)) !== null) {
+		return val < 0 ? "-" + write_num_flt(type, fmt, -val) : commaify(""+(Math.floor(val))) + "." + pad0(dec(val, r[1].length),r[1].length);
+	}
+	if((r = fmt.match(/^#,#*,#0/)) !== null) return write_num_flt(type,fmt.replace(/^#,#*,/,""),val);
+	if((r = fmt.match(/^([0#]+)(\\?-([0#]+))+$/)) !== null) {
+		o = _strrev(write_num_flt(type, fmt.replace(/[\\-]/g,""), val));
+		ri = 0;
+		return _strrev(_strrev(fmt.replace(/\\/g,"")).replace(/[0#]/g,function(x){return ri<o.length?o[ri++]:x==='0'?'0':"";}));
+	}
+	if(fmt.match(phone) !== null) {
+		o = write_num_flt(type, "##########", val);
+		return "(" + o.substr(0,3) + ") " + o.substr(3, 3) + "-" + o.substr(6);
+	}
+	var oa = "";
+	if((r = fmt.match(/^([#0?]+)( ?)\/( ?)([#0?]+)/)) !== null) {
+		ri = Math.min(r[4].length,7);
+		ff = frac(aval, Math.pow(10,ri)-1, false);
+		o = "" + sign;
+		oa = write_num("n", r[1], ff[1]);
+		if(oa[oa.length-1] == " ") oa = oa.substr(0,oa.length-1) + "0";
+		o += oa + r[2] + "/" + r[3];
+		oa = rpad_(ff[2],ri);
+		if(oa.length < r[4].length) oa = hashq(r[4].substr(r[4].length-oa.length)) + oa;
+		o += oa;
+		return o;
+	}
+	if((r = fmt.match(/^# ([#0?]+)( ?)\/( ?)([#0?]+)/)) !== null) {
+		ri = Math.min(Math.max(r[1].length, r[4].length),7);
+		ff = frac(aval, Math.pow(10,ri)-1, true);
+		return sign + (ff[0]||(ff[1] ? "" : "0")) + " " + (ff[1] ? pad_(ff[1],ri) + r[2] + "/" + r[3] + rpad_(ff[2],ri): fill(" ", 2*ri+1 + r[2].length + r[3].length));
+	}
+	if((r = fmt.match(/^[#0?]+$/)) !== null) {
+		o = pad0r(val, 0);
+		if(fmt.length <= o.length) return o;
+		return hashq(fmt.substr(0,fmt.length-o.length)) + o;
+	}
+  if((r = fmt.match(/^([#0?]+)\.([#0]+)$/)) !== null) {
+		o = "" + val.toFixed(Math.min(r[2].length,10)).replace(/([^0])0+$/,"$1");
+		ri = o.indexOf(".");
+		var lres = fmt.indexOf(".") - ri, rres = fmt.length - o.length - lres;
+		return hashq(fmt.substr(0,lres) + o + fmt.substr(fmt.length-rres));
+	}
+	if((r = fmt.match(/^00,000\.([#0]*0)$/)) !== null) {
+		ri = dec(val, r[1].length);
+		return val < 0 ? "-" + write_num_flt(type, fmt, -val) : commaify(flr(val)).replace(/^\d,\d{3}$/,"0$&").replace(/^\d*$/,function($$) { return "00," + ($$.length < 3 ? pad0(0,3-$$.length) : "") + $$; }) + "." + pad0(ri,r[1].length);
+	}
+	switch(fmt) {
+		case "#,###": var x = commaify(pad0r(aval,0)); return x !== "0" ? sign + x : "";
+		default:
+	}
+	throw new Error("unsupported format |" + fmt + "|");
+}
+function write_num_cm2(type, fmt, val){
+	var idx = fmt.length - 1;
+	while(fmt.charCodeAt(idx-1) === 44) --idx;
+	return write_num(type, fmt.substr(0,idx), val / Math.pow(10,3*(fmt.length-idx)));
+}
+function write_num_pct2(type, fmt, val){
+	var sfmt = fmt.replace(pct1,""), mul = fmt.length - sfmt.length;
+	return write_num(type, sfmt, val * Math.pow(10,2*mul)) + fill("%",mul);
+}
+function write_num_exp2(fmt, val){
+	var o;
+	var idx = fmt.indexOf("E") - fmt.indexOf(".") - 1;
+	if(fmt.match(/^#+0.0E\+0$/)) {
+		var period = fmt.indexOf("."); if(period === -1) period=fmt.indexOf('E');
+		var ee = Math.floor(Math.log(Math.abs(val))*Math.LOG10E)%period;
+		if(ee < 0) ee += period;
+		o = (val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);
+		if(!o.match(/[Ee]/)) {
+			var fakee = Math.floor(Math.log(Math.abs(val))*Math.LOG10E);
+			if(o.indexOf(".") === -1) o = o[0] + "." + o.substr(1) + "E+" + (fakee - o.length+ee);
+			else o += "E+" + (fakee - ee);
+			o = o.replace(/\+-/,"-");
+		}
+		o = o.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/,function($$,$1,$2,$3) { return $1 + $2 + $3.substr(0,(period+ee)%period) + "." + $3.substr(ee) + "E"; });
+	} else o = val.toExponential(idx);
+	if(fmt.match(/E\+00$/) && o.match(/e[+-]\d$/)) o = o.substr(0,o.length-1) + "0" + o[o.length-1];
+	if(fmt.match(/E\-/) && o.match(/e\+/)) o = o.replace(/e\+/,"e");
+	return o.replace("e","E");
+}
+function write_num_int(type, fmt, val) {
+	if(type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {
+		var ffmt = fmt.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,"");
+		if(val >= 0) return write_num_int('n', ffmt, val);
+		return '(' + write_num_int('n', ffmt, -val) + ')';
+	}
+	if(fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm2(type, fmt, val);
+	if(fmt.indexOf('%') !== -1) return write_num_pct2(type, fmt, val);
+	if(fmt.indexOf('E') !== -1) return write_num_exp2(fmt, val);
+	if(fmt.charCodeAt(0) === 36) return "$"+write_num_int(type,fmt.substr(fmt[1]==' '?2:1),val);
+	var o;
+	var r, ri, ff, aval = Math.abs(val), sign = val < 0 ? "-" : "";
+	if(fmt.match(/^00+$/)) return sign + pad0(aval,fmt.length);
+	if(fmt.match(/^[#?]+$/)) {
+		o = (""+val); if(val === 0) o = "";
+		return o.length > fmt.length ? o : hashq(fmt.substr(0,fmt.length-o.length)) + o;
+	}
+	if((r = fmt.match(frac1)) !== null) return write_num_f2(r, aval, sign);
+	if(fmt.match(/^#+0+$/) !== null) return sign + pad0(aval,fmt.length - fmt.indexOf("0"));
+	if((r = fmt.match(dec1)) !== null) {
+		o = (""+val).replace(/^([^\.]+)$/,"$1."+r[1]).replace(/\.$/,"."+r[1]).replace(/\.(\d*)$/,function($$, $1) { return "." + $1 + fill("0", r[1].length-$1.length); });
+		return fmt.indexOf("0.") !== -1 ? o : o.replace(/^0\./,".");
+	}
+	fmt = fmt.replace(/^#+([0.])/, "$1");
+	if((r = fmt.match(/^(0*)\.(#*)$/)) !== null) {
+		return sign + (""+aval).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,r[1].length?"0.":".");
+	}
+	if((r = fmt.match(/^#,##0(\.?)$/)) !== null) return sign + commaify((""+aval));
+	if((r = fmt.match(/^#,##0\.([#0]*0)$/)) !== null) {
+		return val < 0 ? "-" + write_num_int(type, fmt, -val) : commaify((""+val)) + "." + fill('0',r[1].length);
+	}
+	if((r = fmt.match(/^#,#*,#0/)) !== null) return write_num_int(type,fmt.replace(/^#,#*,/,""),val);
+	if((r = fmt.match(/^([0#]+)(\\?-([0#]+))+$/)) !== null) {
+		o = _strrev(write_num_int(type, fmt.replace(/[\\-]/g,""), val));
+		ri = 0;
+		return _strrev(_strrev(fmt.replace(/\\/g,"")).replace(/[0#]/g,function(x){return ri<o.length?o[ri++]:x==='0'?'0':"";}));
+	}
+	if(fmt.match(phone) !== null) {
+		o = write_num_int(type, "##########", val);
+		return "(" + o.substr(0,3) + ") " + o.substr(3, 3) + "-" + o.substr(6);
+	}
+	var oa = "";
+	if((r = fmt.match(/^([#0?]+)( ?)\/( ?)([#0?]+)/)) !== null) {
+		ri = Math.min(r[4].length,7);
+		ff = frac(aval, Math.pow(10,ri)-1, false);
+		o = "" + sign;
+		oa = write_num("n", r[1], ff[1]);
+		if(oa[oa.length-1] == " ") oa = oa.substr(0,oa.length-1) + "0";
+		o += oa + r[2] + "/" + r[3];
+		oa = rpad_(ff[2],ri);
+		if(oa.length < r[4].length) oa = hashq(r[4].substr(r[4].length-oa.length)) + oa;
+		o += oa;
+		return o;
+	}
+	if((r = fmt.match(/^# ([#0?]+)( ?)\/( ?)([#0?]+)/)) !== null) {
+		ri = Math.min(Math.max(r[1].length, r[4].length),7);
+		ff = frac(aval, Math.pow(10,ri)-1, true);
+		return sign + (ff[0]||(ff[1] ? "" : "0")) + " " + (ff[1] ? pad_(ff[1],ri) + r[2] + "/" + r[3] + rpad_(ff[2],ri): fill(" ", 2*ri+1 + r[2].length + r[3].length));
+	}
+	if((r = fmt.match(/^[#0?]+$/)) !== null) {
+		o = "" + val;
+		if(fmt.length <= o.length) return o;
+		return hashq(fmt.substr(0,fmt.length-o.length)) + o;
+	}
+	if((r = fmt.match(/^([#0]+)\.([#0]+)$/)) !== null) {
+		o = "" + val.toFixed(Math.min(r[2].length,10)).replace(/([^0])0+$/,"$1");
+		ri = o.indexOf(".");
+		var lres = fmt.indexOf(".") - ri, rres = fmt.length - o.length - lres;
+		return hashq(fmt.substr(0,lres) + o + fmt.substr(fmt.length-rres));
+	}
+	if((r = fmt.match(/^00,000\.([#0]*0)$/)) !== null) {
+		return val < 0 ? "-" + write_num_int(type, fmt, -val) : commaify(""+val).replace(/^\d,\d{3}$/,"0$&").replace(/^\d*$/,function($$) { return "00," + ($$.length < 3 ? pad0(0,3-$$.length) : "") + $$; }) + "." + pad0(0,r[1].length);
+	}
+	switch(fmt) {
+		case "#,###": var x = commaify(""+aval); return x !== "0" ? sign + x : "";
+		default:
+	}
+	throw new Error("unsupported format |" + fmt + "|");
+}
+return function write_num(type, fmt, val) {
+	return (val|0) === val ? write_num_int(type, fmt, val) : write_num_flt(type, fmt, val);
+};})();
+function split_fmt(fmt) {
+	var out = [];
+	var in_str = false, cc;
+	for(var i = 0, j = 0; i < fmt.length; ++i) switch((cc=fmt.charCodeAt(i))) {
+		case 34: /* '"' */
+			in_str = !in_str; break;
+		case 95: case 42: case 92: /* '_' '*' '\\' */
+			++i; break;
+		case 59: /* ';' */
+			out[out.length] = fmt.substr(j,i-j);
+			j = i+1;
+	}
+	out[out.length] = fmt.substr(j);
+	if(in_str === true) throw new Error("Format |" + fmt + "| unterminated string ");
+	return out;
+}
+SSF._split = split_fmt;
+var abstime = /\[[HhMmSs]*\]/;
+function eval_fmt(fmt, v, opts, flen) {
+	var out = [], o = "", i = 0, c = "", lst='t', q, dt, j, cc;
+	var hr='H';
+	/* Tokenize */
+	while(i < fmt.length) {
+		switch((c = fmt[i])) {
+			case 'G': /* General */
+				if(!isgeneral(fmt, i)) throw new Error('unrecognized character ' + c + ' in ' +fmt);
+				out[out.length] = {t:'G', v:'General'}; i+=7; break;
+			case '"': /* Literal text */
+				for(o="";(cc=fmt.charCodeAt(++i)) !== 34 && i < fmt.length;) o += String.fromCharCode(cc);
+				out[out.length] = {t:'t', v:o}; ++i; break;
+			case '\\': var w = fmt[++i], t = (w === "(" || w === ")") ? w : 't';
+				out[out.length] = {t:t, v:w}; ++i; break;
+			case '_': out[out.length] = {t:'t', v:" "}; i+=2; break;
+			case '@': /* Text Placeholder */
+				out[out.length] = {t:'T', v:v}; ++i; break;
+			case 'B': case 'b':
+				if(fmt[i+1] === "1" || fmt[i+1] === "2") {
+          if(dt==null) { dt=parse_date_code(v, opts, fmt[i+1] === "2"); if(dt==null) return ""; }
+					out[out.length] = {t:'X', v:fmt.substr(i,2)}; lst = c; i+=2; break;
+				}
+				/* falls through */
+			case 'M': case 'D': case 'Y': case 'H': case 'S': case 'E':
+				c = c.toLowerCase();
+				/* falls through */
+			case 'm': case 'd': case 'y': case 'h': case 's': case 'e': case 'g':
+				if(v < 0) return "";
+				if(dt==null) { dt=parse_date_code(v, opts); if(dt==null) return ""; }
+				o = c; while(++i<fmt.length && fmt[i].toLowerCase() === c) o+=c;
+				if(c === 'm' && lst.toLowerCase() === 'h') c = 'M'; /* m = minute */
+				if(c === 'h') c = hr;
+				out[out.length] = {t:c, v:o}; lst = c; break;
+			case 'A':
+				q={t:c, v:"A"};
+				if(dt==null) dt=parse_date_code(v, opts);
+        if(fmt.substr(i, 3) === "A/P") { if(dt!=null) q.v = dt.H >= 12 ? "P" : "A"; q.t = 'T'; hr='h';i+=3;}
+        else if(fmt.substr(i,5) === "AM/PM") { if(dt!=null) q.v = dt.H >= 12 ? "PM" : "AM"; q.t = 'T'; i+=5; hr='h'; }
+				else { q.t = "t"; ++i; }
+				if(dt==null && q.t === 'T') return "";
+				out[out.length] = q; lst = c; break;
+			case '[':
+				o = c;
+				while(fmt[i++] !== ']' && i < fmt.length) o += fmt[i];
+				if(o.substr(-1) !== ']') throw 'unterminated "[" block: |' + o + '|';
+				if(o.match(abstime)) {
+					if(dt==null) { dt=parse_date_code(v, opts); if(dt==null) return ""; }
+					out[out.length] = {t:'Z', v:o.toLowerCase()};
+				} else { o=""; }
+				break;
+			/* Numbers */
+			case '.':
+				if(dt != null) {
+					o = c; while((c=fmt[++i]) === "0") o += c;
+					out[out.length] = {t:'s', v:o}; break;
+				}
+				/* falls through */
+			case '0': case '#':
+				o = c; while("0#?.,E+-%".indexOf(c=fmt[++i]) > -1 || c=='\\' && fmt[i+1] == "-" && "0#".indexOf(fmt[i+2])>-1) o += c;
+				out[out.length] = {t:'n', v:o}; break;
+			case '?':
+				o = c; while(fmt[++i] === c) o+=c;
+				q={t:c, v:o}; out[out.length] = q; lst = c; break;
+			case '*': ++i; if(fmt[i] == ' ' || fmt[i] == '*') ++i; break; // **
+			case '(': case ')': out[out.length] = {t:(flen===1?'t':c), v:c}; ++i; break;
+			case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
+				o = c; while("0123456789".indexOf(fmt[++i]) > -1) o+=fmt[i];
+				out[out.length] = {t:'D', v:o}; break;
+			case ' ': out[out.length] = {t:c, v:c}; ++i; break;
+			default:
+				if(",$-+/():!^&'~{}<>=鈧琣cfijklopqrtuvwxz".indexOf(c) === -1) throw new Error('unrecognized character ' + c + ' in ' + fmt);
+				out[out.length] = {t:'t', v:c}; ++i; break;
+		}
+	}
+	var bt = 0, ss0 = 0, ssm;
+	for(i=out.length-1, lst='t'; i >= 0; --i) {
+		switch(out[i].t) {
+			case 'h': case 'H': out[i].t = hr; lst='h'; if(bt < 1) bt = 1; break;
+			case 's':
+				if((ssm=out[i].v.match(/\.0+$/))) ss0=Math.max(ss0,ssm[0].length-1);
+				if(bt < 3) bt = 3;
+			/* falls through */
+			case 'd': case 'y': case 'M': case 'e': lst=out[i].t; break;
+			case 'm': if(lst === 's') { out[i].t = 'M'; if(bt < 2) bt = 2; } break;
+			case 'X': if(out[i].v === "B2");
+				break;
+			case 'Z':
+				if(bt < 1 && out[i].v.match(/[Hh]/)) bt = 1;
+				if(bt < 2 && out[i].v.match(/[Mm]/)) bt = 2;
+				if(bt < 3 && out[i].v.match(/[Ss]/)) bt = 3;
+		}
+	}
+	switch(bt) {
+		case 0: break;
+		case 1:
+			if(dt.u >= 0.5) { dt.u = 0; ++dt.S; }
+			if(dt.S >=  60) { dt.S = 0; ++dt.M; }
+			if(dt.M >=  60) { dt.M = 0; ++dt.H; }
+			break;
+		case 2:
+			if(dt.u >= 0.5) { dt.u = 0; ++dt.S; }
+			if(dt.S >=  60) { dt.S = 0; ++dt.M; }
+			break;
+	}
+	/* replace fields */
+	var nstr = "", jj;
+	for(i=0; i < out.length; ++i) {
+		switch(out[i].t) {
+			case 't': case 'T': case ' ': case 'D': break;
+			case 'X': out[i] = undefined; break;
+			case 'd': case 'm': case 'y': case 'h': case 'H': case 'M': case 's': case 'e': case 'b': case 'Z':
+				out[i].v = write_date(out[i].t.charCodeAt(0), out[i].v, dt, ss0);
+				out[i].t = 't'; break;
+			case 'n': case '(': case '?':
+				jj = i+1;
+				while(out[jj] != null && (
+					(c=out[jj].t) === "?" || c === "D" ||
+					(c === " " || c === "t") && out[jj+1] != null && (out[jj+1].t === '?' || out[jj+1].t === "t" && out[jj+1].v === '/') ||
+					out[i].t === '(' && (c === ' ' || c === 'n' || c === ')') ||
+					c === 't' && (out[jj].v === '/' || '$鈧�'.indexOf(out[jj].v) > -1 || out[jj].v === ' ' && out[jj+1] != null && out[jj+1].t == '?')
+				)) {
+					out[i].v += out[jj].v;
+					out[jj] = undefined; ++jj;
+				}
+				nstr += out[i].v;
+				i = jj-1; break;
+			case 'G': out[i].t = 't'; out[i].v = general_fmt(v,opts); break;
+		}
+	}
+	var vv = "", myv, ostr;
+	if(nstr.length > 0) {
+		myv = (v<0&&nstr.charCodeAt(0) === 45 ? -v : v); /* '-' */
+		ostr = write_num(nstr.charCodeAt(0) === 40 ? '(' : 'n', nstr, myv); /* '(' */
+		jj=ostr.length-1;
+		var decpt = out.length;
+		for(i=0; i < out.length; ++i) if(out[i] != null && out[i].v.indexOf(".") > -1) { decpt = i; break; }
+		var lasti=out.length;
+		if(decpt === out.length && ostr.indexOf("E") === -1) {
+			for(i=out.length-1; i>= 0;--i) {
+				if(out[i] == null || 'n?('.indexOf(out[i].t) === -1) continue;
+				if(jj>=out[i].v.length-1) { jj -= out[i].v.length; out[i].v = ostr.substr(jj+1, out[i].v.length); }
+				else if(jj < 0) out[i].v = "";
+				else { out[i].v = ostr.substr(0, jj+1); jj = -1; }
+				out[i].t = 't';
+				lasti = i;
+			}
+			if(jj>=0 && lasti<out.length) out[lasti].v = ostr.substr(0,jj+1) + out[lasti].v;
+		}
+		else if(decpt !== out.length && ostr.indexOf("E") === -1) {
+			jj = ostr.indexOf(".")-1;
+			for(i=decpt; i>= 0; --i) {
+				if(out[i] == null || 'n?('.indexOf(out[i].t) === -1) continue;
+				j=out[i].v.indexOf(".")>-1&&i===decpt?out[i].v.indexOf(".")-1:out[i].v.length-1;
+				vv = out[i].v.substr(j+1);
+				for(; j>=0; --j) {
+					if(jj>=0 && (out[i].v[j] === "0" || out[i].v[j] === "#")) vv = ostr[jj--] + vv;
+				}
+				out[i].v = vv;
+				out[i].t = 't';
+				lasti = i;
+			}
+			if(jj>=0 && lasti<out.length) out[lasti].v = ostr.substr(0,jj+1) + out[lasti].v;
+			jj = ostr.indexOf(".")+1;
+			for(i=decpt; i<out.length; ++i) {
+				if(out[i] == null || 'n?('.indexOf(out[i].t) === -1 && i !== decpt ) continue;
+				j=out[i].v.indexOf(".")>-1&&i===decpt?out[i].v.indexOf(".")+1:0;
+				vv = out[i].v.substr(0,j);
+				for(; j<out[i].v.length; ++j) {
+					if(jj<ostr.length) vv += ostr[jj++];
+				}
+				out[i].v = vv;
+				out[i].t = 't';
+				lasti = i;
+			}
+		}
+	}
+	for(i=0; i<out.length; ++i) if(out[i] != null && 'n(?'.indexOf(out[i].t)>-1) {
+		myv = (flen >1 && v < 0 && i>0 && out[i-1].v === "-" ? -v:v);
+		out[i].v = write_num(out[i].t, out[i].v, myv);
+		out[i].t = 't';
+	}
+	var retval = "";
+	for(i=0; i !== out.length; ++i) if(out[i] != null) retval += out[i].v;
+	return retval;
+}
+SSF._eval = eval_fmt;
+var cfregex = /\[[=<>]/;
+var cfregex2 = /\[([=<>]*)(-?\d+\.?\d*)\]/;
+function chkcond(v, rr) {
+	if(rr == null) return false;
+	var thresh = parseFloat(rr[2]);
+	switch(rr[1]) {
+		case "=":  if(v == thresh) return true; break;
+		case ">":  if(v >  thresh) return true; break;
+		case "<":  if(v <  thresh) return true; break;
+		case "<>": if(v != thresh) return true; break;
+		case ">=": if(v >= thresh) return true; break;
+		case "<=": if(v <= thresh) return true; break;
+	}
+	return false;
+}
+function choose_fmt(f, v) {
+	var fmt = split_fmt(f);
+	var l = fmt.length, lat = fmt[l-1].indexOf("@");
+	if(l<4 && lat>-1) --l;
+	if(fmt.length > 4) throw "cannot find right format for |" + fmt + "|";
+	if(typeof v !== "number") return [4, fmt.length === 4 || lat>-1?fmt[fmt.length-1]:"@"];
+	switch(fmt.length) {
+		case 1: fmt = lat>-1 ? ["General", "General", "General", fmt[0]] : [fmt[0], fmt[0], fmt[0], "@"]; break;
+		case 2: fmt = lat>-1 ? [fmt[0], fmt[0], fmt[0], fmt[1]] : [fmt[0], fmt[1], fmt[0], "@"]; break;
+		case 3: fmt = lat>-1 ? [fmt[0], fmt[1], fmt[0], fmt[2]] : [fmt[0], fmt[1], fmt[2], "@"]; break;
+		case 4: break;
+	}
+	var ff = v > 0 ? fmt[0] : v < 0 ? fmt[1] : fmt[2];
+	if(fmt[0].indexOf("[") === -1 && fmt[1].indexOf("[") === -1) return [l, ff];
+	if(fmt[0].match(cfregex) != null || fmt[1].match(cfregex) != null) {
+		var m1 = fmt[0].match(cfregex2);
+		var m2 = fmt[1].match(cfregex2);
+		return chkcond(v, m1) ? [l, fmt[0]] : chkcond(v, m2) ? [l, fmt[1]] : [l, fmt[m1 != null && m2 != null ? 2 : 1]];
+	}
+	return [l, ff];
+}
+function format(fmt,v,o) {
+	fixopts(o != null ? o : (o=[]));
+	var sfmt = "";
+	switch(typeof fmt) {
+		case "string": sfmt = fmt; break;
+		case "number": sfmt = (o.table != null ? o.table : table_fmt)[fmt]; break;
+	}
+	if(isgeneral(sfmt,0)) return general_fmt(v, o);
+	var f = choose_fmt(sfmt, v);
+	if(isgeneral(f[1])) return general_fmt(v, o);
+	if(v === true) v = "TRUE"; else if(v === false) v = "FALSE";
+	else if(v === "" || v == null) return "";
+	return eval_fmt(f[1], v, o, f[0]);
+}
+SSF._table = table_fmt;
+SSF.load = function load_entry(fmt, idx) { table_fmt[idx] = fmt; };
+SSF.format = format;
+SSF.get_table = function get_table() { return table_fmt; };
+SSF.load_table = function load_table(tbl) { for(var i=0; i!=0x0188; ++i) if(tbl[i] !== undefined) SSF.load(tbl[i], i); };
+};
+make_ssf(SSF);
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/11_ssfutils.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/11_ssfutils.js
new file mode 100644
index 0000000..5253ad4
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/11_ssfutils.js
@@ -0,0 +1,20 @@
+/* map from xlml named formats to SSF TODO: localize */
+var XLMLFormatMap = {
+	"General Number": "General",
+	"General Date": SSF._table[22],
+	"Long Date": "dddd, mmmm dd, yyyy",
+	"Medium Date": SSF._table[15],
+	"Short Date": SSF._table[14],
+	"Long Time": SSF._table[19],
+	"Medium Time": SSF._table[18],
+	"Short Time": SSF._table[20],
+	"Currency": '"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',
+	"Fixed": SSF._table[2],
+	"Standard": SSF._table[4],
+	"Percent": SSF._table[10],
+	"Scientific": SSF._table[11],
+	"Yes/No": '"Yes";"Yes";"No";@',
+	"True/False": '"True";"True";"False";@',
+	"On/Off": '"Yes";"Yes";"No";@'
+};
+
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/18_cfb.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/18_cfb.js
new file mode 100644
index 0000000..2bb2335
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/18_cfb.js
@@ -0,0 +1,383 @@
+var DO_NOT_EXPORT_CFB = true;
+/* cfb.js (C) 2013-2014 SheetJS -- http://sheetjs.com */
+/* vim: set ts=2: */
+/*jshint eqnull:true */
+
+/* [MS-CFB] v20130118 */
+var CFB = (function _CFB(){
+var exports = {};
+exports.version = '0.10.2';
+function parse(file) {
+var mver = 3; // major version
+var ssz = 512; // sector size
+var nmfs = 0; // number of mini FAT sectors
+var ndfs = 0; // number of DIFAT sectors
+var dir_start = 0; // first directory sector location
+var minifat_start = 0; // first mini FAT sector location
+var difat_start = 0; // first mini FAT sector location
+
+var fat_addrs = []; // locations of FAT sectors
+
+/* [MS-CFB] 2.2 Compound File Header */
+var blob = file.slice(0,512);
+prep_blob(blob, 0);
+
+/* major version */
+var mv = check_get_mver(blob);
+mver = mv[0];
+switch(mver) {
+	case 3: ssz = 512; break; case 4: ssz = 4096; break;
+	default: throw "Major Version: Expected 3 or 4 saw " + mver;
+}
+
+/* reprocess header */
+if(ssz !== 512) { blob = file.slice(0,ssz); prep_blob(blob, 28 /* blob.l */); }
+/* Save header for final object */
+var header = file.slice(0,ssz);
+
+check_shifts(blob, mver);
+
+// Number of Directory Sectors
+var nds = blob.read_shift(4, 'i');
+if(mver === 3 && nds !== 0) throw '# Directory Sectors: Expected 0 saw ' + nds;
+
+// Number of FAT Sectors
+//var nfs = blob.read_shift(4, 'i');
+blob.l += 4;
+
+// First Directory Sector Location
+dir_start = blob.read_shift(4, 'i');
+
+// Transaction Signature
+blob.l += 4;
+
+// Mini Stream Cutoff Size
+blob.chk('00100000', 'Mini Stream Cutoff Size: ');
+
+// First Mini FAT Sector Location
+minifat_start = blob.read_shift(4, 'i');
+
+// Number of Mini FAT Sectors
+nmfs = blob.read_shift(4, 'i');
+
+// First DIFAT sector location
+difat_start = blob.read_shift(4, 'i');
+
+// Number of DIFAT Sectors
+ndfs = blob.read_shift(4, 'i');
+
+// Grab FAT Sector Locations
+for(var q, j = 0; j < 109; ++j) { /* 109 = (512 - blob.l)>>>2; */
+	q = blob.read_shift(4, 'i');
+	if(q<0) break;
+	fat_addrs[j] = q;
+}
+
+/** Break the file up into sectors */
+var sectors = sectorify(file, ssz);
+
+sleuth_fat(difat_start, ndfs, sectors, ssz, fat_addrs);
+
+/** Chains */
+var sector_list = make_sector_list(sectors, dir_start, fat_addrs, ssz);
+
+sector_list[dir_start].name = "!Directory";
+if(nmfs > 0 && minifat_start !== ENDOFCHAIN) sector_list[minifat_start].name = "!MiniFAT";
+sector_list[fat_addrs[0]].name = "!FAT";
+sector_list.fat_addrs = fat_addrs;
+sector_list.ssz = ssz;
+
+/* [MS-CFB] 2.6.1 Compound File Directory Entry */
+var files = {}, Paths = [], FileIndex = [], FullPaths = [], FullPathDir = {};
+read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex);
+
+build_full_paths(FileIndex, FullPathDir, FullPaths, Paths);
+
+var root_name = Paths.shift();
+Paths.root = root_name;
+
+/* [MS-CFB] 2.6.4 (Unicode 3.0.1 case conversion) */
+var find_path = make_find_path(FullPaths, Paths, FileIndex, files, root_name);
+
+return {
+	raw: {header: header, sectors: sectors},
+	FileIndex: FileIndex,
+	FullPaths: FullPaths,
+	FullPathDir: FullPathDir,
+	find: find_path
+};
+} // parse
+
+/* [MS-CFB] 2.2 Compound File Header -- read up to major version */
+function check_get_mver(blob) {
+	// header signature 8
+	blob.chk(HEADER_SIGNATURE, 'Header Signature: ');
+
+	// clsid 16
+	blob.chk(HEADER_CLSID, 'CLSID: ');
+
+	// minor version 2
+	var mver = blob.read_shift(2, 'u');
+
+	return [blob.read_shift(2,'u'), mver];
+}
+function check_shifts(blob, mver) {
+	var shift = 0x09;
+
+	// Byte Order
+	blob.chk('feff', 'Byte Order: ');
+
+	// Sector Shift
+	switch((shift = blob.read_shift(2))) {
+		case 0x09: if(mver !== 3) throw 'MajorVersion/SectorShift Mismatch'; break;
+		case 0x0c: if(mver !== 4) throw 'MajorVersion/SectorShift Mismatch'; break;
+		default: throw 'Sector Shift: Expected 9 or 12 saw ' + shift;
+	}
+
+	// Mini Sector Shift
+	blob.chk('0600', 'Mini Sector Shift: ');
+
+	// Reserved
+	blob.chk('000000000000', 'Reserved: ');
+}
+
+/** Break the file up into sectors */
+function sectorify(file, ssz) {
+	var nsectors = Math.ceil(file.length/ssz)-1;
+	var sectors = new Array(nsectors);
+	for(var i=1; i < nsectors; ++i) sectors[i-1] = file.slice(i*ssz,(i+1)*ssz);
+	sectors[nsectors-1] = file.slice(nsectors*ssz);
+	return sectors;
+}
+
+/* [MS-CFB] 2.6.4 Red-Black Tree */
+function build_full_paths(FI, FPD, FP, Paths) {
+	var i = 0, L = 0, R = 0, C = 0, j = 0, pl = Paths.length;
+	var dad = new Array(pl), q = new Array(pl);
+
+	for(; i < pl; ++i) { dad[i]=q[i]=i; FP[i]=Paths[i]; }
+
+	for(; j < q.length; ++j) {
+		i = q[j];
+		L = FI[i].L; R = FI[i].R; C = FI[i].C;
+		if(dad[i] === i) {
+			if(L !== -1 /*NOSTREAM*/ && dad[L] !== L) dad[i] = dad[L];
+			if(R !== -1 && dad[R] !== R) dad[i] = dad[R];
+		}
+		if(C !== -1 /*NOSTREAM*/) dad[C] = i;
+		if(L !== -1) { dad[L] = dad[i]; q.push(L); }
+		if(R !== -1) { dad[R] = dad[i]; q.push(R); }
+	}
+	for(i=1; i !== pl; ++i) if(dad[i] === i) {
+		if(R !== -1 /*NOSTREAM*/ && dad[R] !== R) dad[i] = dad[R];
+		else if(L !== -1 && dad[L] !== L) dad[i] = dad[L];
+	}
+
+	for(i=1; i < pl; ++i) {
+		if(FI[i].type === 0 /* unknown */) continue;
+		j = dad[i];
+		if(j === 0) FP[i] = FP[0] + "/" + FP[i];
+		else while(j !== 0) {
+			FP[i] = FP[j] + "/" + FP[i];
+			j = dad[j];
+		}
+		dad[i] = 0;
+	}
+
+	FP[0] += "/";
+	for(i=1; i < pl; ++i) {
+		if(FI[i].type !== 2 /* stream */) FP[i] += "/";
+		FPD[FP[i]] = FI[i];
+	}
+}
+
+/* [MS-CFB] 2.6.4 */
+function make_find_path(FullPaths, Paths, FileIndex, files, root_name) {
+	var UCFullPaths = new Array(FullPaths.length);
+	var UCPaths = new Array(Paths.length), i;
+	for(i = 0; i < FullPaths.length; ++i) UCFullPaths[i] = FullPaths[i].toUpperCase().replace(chr0,'').replace(chr1,'!');
+	for(i = 0; i < Paths.length; ++i) UCPaths[i] = Paths[i].toUpperCase().replace(chr0,'').replace(chr1,'!');
+	return function find_path(path) {
+		var k;
+		if(path.charCodeAt(0) === 47 /* "/" */) { k=true; path = root_name + path; }
+		else k = path.indexOf("/") !== -1;
+		var UCPath = path.toUpperCase().replace(chr0,'').replace(chr1,'!');
+		var w = k === true ? UCFullPaths.indexOf(UCPath) : UCPaths.indexOf(UCPath);
+		if(w === -1) return null;
+		return k === true ? FileIndex[w] : files[Paths[w]];
+	};
+}
+
+/** Chase down the rest of the DIFAT chain to build a comprehensive list
+    DIFAT chains by storing the next sector number as the last 32 bytes */
+function sleuth_fat(idx, cnt, sectors, ssz, fat_addrs) {
+	var q;
+	if(idx === ENDOFCHAIN) {
+		if(cnt !== 0) throw "DIFAT chain shorter than expected";
+	} else if(idx !== -1 /*FREESECT*/) {
+		var sector = sectors[idx], m = (ssz>>>2)-1;
+		for(var i = 0; i < m; ++i) {
+			if((q = __readInt32LE(sector,i*4)) === ENDOFCHAIN) break;
+			fat_addrs.push(q);
+		}
+		sleuth_fat(__readInt32LE(sector,ssz-4),cnt - 1, sectors, ssz, fat_addrs);
+	}
+}
+
+/** Follow the linked list of sectors for a given starting point */
+function get_sector_list(sectors, start, fat_addrs, ssz, chkd) {
+	var sl = sectors.length;
+	var buf, buf_chain;
+	if(!chkd) chkd = new Array(sl);
+	var modulus = ssz - 1, j, jj;
+	buf = [];
+	buf_chain = [];
+	for(j=start; j>=0;) {
+		chkd[j] = true;
+		buf[buf.length] = j;
+		buf_chain.push(sectors[j]);
+		var addr = fat_addrs[Math.floor(j*4/ssz)];
+		jj = ((j*4) & modulus);
+		if(ssz < 4 + jj) throw "FAT boundary crossed: " + j + " 4 "+ssz;
+		j = __readInt32LE(sectors[addr], jj);
+	}
+	return {nodes: buf, data:__toBuffer([buf_chain])};
+}
+
+/** Chase down the sector linked lists */
+function make_sector_list(sectors, dir_start, fat_addrs, ssz) {
+	var sl = sectors.length, sector_list = new Array(sl);
+	var chkd = new Array(sl), buf, buf_chain;
+	var modulus = ssz - 1, i, j, k, jj;
+	for(i=0; i < sl; ++i) {
+		buf = [];
+		k = (i + dir_start); if(k >= sl) k-=sl;
+		if(chkd[k] === true) continue;
+		buf_chain = [];
+		for(j=k; j>=0;) {
+			chkd[j] = true;
+			buf[buf.length] = j;
+			buf_chain.push(sectors[j]);
+			var addr = fat_addrs[Math.floor(j*4/ssz)];
+			jj = ((j*4) & modulus);
+			if(ssz < 4 + jj) throw "FAT boundary crossed: " + j + " 4 "+ssz;
+			j = __readInt32LE(sectors[addr], jj);
+		}
+		sector_list[k] = {nodes: buf, data:__toBuffer([buf_chain])};
+	}
+	return sector_list;
+}
+
+/* [MS-CFB] 2.6.1 Compound File Directory Entry */
+function read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex) {
+	var blob;
+	var minifat_store = 0, pl = (Paths.length?2:0);
+	var sector = sector_list[dir_start].data;
+	var i = 0, namelen = 0, name, o, ctime, mtime;
+	for(; i < sector.length; i+= 128) {
+		blob = sector.slice(i, i+128);
+		prep_blob(blob, 64);
+		namelen = blob.read_shift(2);
+		if(namelen === 0) continue;
+		name = __utf16le(blob,0,namelen-pl);
+		Paths.push(name);
+		o = {
+			name:  name,
+			type:  blob.read_shift(1),
+			color: blob.read_shift(1),
+			L:     blob.read_shift(4, 'i'),
+			R:     blob.read_shift(4, 'i'),
+			C:     blob.read_shift(4, 'i'),
+			clsid: blob.read_shift(16),
+			state: blob.read_shift(4, 'i')
+		};
+		ctime = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);
+		if(ctime !== 0) {
+			o.ctime = ctime; o.ct = read_date(blob, blob.l-8);
+		}
+		mtime = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);
+		if(mtime !== 0) {
+			o.mtime = mtime; o.mt = read_date(blob, blob.l-8);
+		}
+		o.start = blob.read_shift(4, 'i');
+		o.size = blob.read_shift(4, 'i');
+		if(o.type === 5) { /* root */
+			minifat_store = o.start;
+			if(nmfs > 0 && minifat_store !== ENDOFCHAIN) sector_list[minifat_store].name = "!StreamData";
+			/*minifat_size = o.size;*/
+		} else if(o.size >= 4096 /* MSCSZ */) {
+			o.storage = 'fat';
+			if(sector_list[o.start] === undefined) sector_list[o.start] = get_sector_list(sectors, o.start, sector_list.fat_addrs, sector_list.ssz);
+			sector_list[o.start].name = o.name;
+			o.content = sector_list[o.start].data.slice(0,o.size);
+			prep_blob(o.content, 0);
+		} else {
+			o.storage = 'minifat';
+			if(minifat_store !== ENDOFCHAIN && o.start !== ENDOFCHAIN) {
+				o.content = sector_list[minifat_store].data.slice(o.start*MSSZ,o.start*MSSZ+o.size);
+				prep_blob(o.content, 0);
+			}
+		}
+		files[name] = o;
+		FileIndex.push(o);
+	}
+}
+
+function read_date(blob, offset) {
+	return new Date(( ( (__readUInt32LE(blob,offset+4)/1e7)*Math.pow(2,32)+__readUInt32LE(blob,offset)/1e7 ) - 11644473600)*1000);
+}
+
+var fs;
+function readFileSync(filename, options) {
+	if(fs === undefined) fs = require('fs');
+	return parse(fs.readFileSync(filename), options);
+}
+
+function readSync(blob, options) {
+	switch(options !== undefined && options.type !== undefined ? options.type : "base64") {
+		case "file": return readFileSync(blob, options);
+		case "base64": return parse(s2a(Base64.decode(blob)), options);
+		case "binary": return parse(s2a(blob), options);
+	}
+	return parse(blob);
+}
+
+/** CFB Constants */
+var MSSZ = 64; /* Mini Sector Size = 1<<6 */
+//var MSCSZ = 4096; /* Mini Stream Cutoff Size */
+/* 2.1 Compound File Sector Numbers and Types */
+var ENDOFCHAIN = -2;
+/* 2.2 Compound File Header */
+var HEADER_SIGNATURE = 'd0cf11e0a1b11ae1';
+var HEADER_CLSID = '00000000000000000000000000000000';
+var consts = {
+	/* 2.1 Compund File Sector Numbers and Types */
+	MAXREGSECT: -6,
+	DIFSECT: -4,
+	FATSECT: -3,
+	ENDOFCHAIN: ENDOFCHAIN,
+	FREESECT: -1,
+	/* 2.2 Compound File Header */
+	HEADER_SIGNATURE: HEADER_SIGNATURE,
+	HEADER_MINOR_VERSION: '3e00',
+	MAXREGSID: -6,
+	NOSTREAM: -1,
+	HEADER_CLSID: HEADER_CLSID,
+	/* 2.6.1 Compound File Directory Entry */
+	EntryTypes: ['unknown','storage','stream','lockbytes','property','root']
+};
+
+exports.read = readSync;
+exports.parse = parse;
+exports.utils = {
+	ReadShift: ReadShift,
+	CheckField: CheckField,
+	prep_blob: prep_blob,
+	bconcat: bconcat,
+	consts: consts
+};
+
+return exports;
+})();
+
+if(typeof require !== 'undefined' && typeof module !== 'undefined' && typeof DO_NOT_EXPORT_CFB === 'undefined') { module.exports = CFB; }
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/20_jsutils.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/20_jsutils.js
new file mode 100644
index 0000000..bff609c
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/20_jsutils.js
@@ -0,0 +1,44 @@
+function isval(x) { return x !== undefined && x !== null; }
+
+function keys(o) { return Object.keys(o); }
+
+function evert_key(obj, key) {
+	var o = [], K = keys(obj);
+	for(var i = 0; i !== K.length; ++i) o[obj[K[i]][key]] = K[i];
+	return o;
+}
+
+function evert(obj) {
+	var o = [], K = keys(obj);
+	for(var i = 0; i !== K.length; ++i) o[obj[K[i]]] = K[i];
+	return o;
+}
+
+function evert_num(obj) {
+	var o = [], K = keys(obj);
+	for(var i = 0; i !== K.length; ++i) o[obj[K[i]]] = parseInt(K[i],10);
+	return o;
+}
+
+function evert_arr(obj) {
+	var o = [], K = keys(obj);
+	for(var i = 0; i !== K.length; ++i) {
+		if(o[obj[K[i]]] == null) o[obj[K[i]]] = [];
+		o[obj[K[i]]].push(K[i]);
+	}
+	return o;
+}
+
+/* TODO: date1904 logic */
+function datenum(v, date1904) {
+	if(date1904) v+=1462;
+	var epoch = Date.parse(v);
+	return (epoch + 2209161600000) / (24 * 60 * 60 * 1000);
+}
+
+function cc2str(arr) {
+	var o = "";
+	for(var i = 0; i != arr.length; ++i) o += String.fromCharCode(arr[i]);
+	return o;
+}
+
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/21_ziputils.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/21_ziputils.js
new file mode 100644
index 0000000..c0c195a
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/21_ziputils.js
@@ -0,0 +1,49 @@
+function getdata(data) {
+	if(!data) return null;
+	if(data.name.substr(-4) === ".bin") {
+		if(data.data) return char_codes(data.data);
+		if(data.asNodeBuffer && has_buf) return data.asNodeBuffer();
+		if(data._data && data._data.getContent) return Array.prototype.slice.call(data._data.getContent());
+	} else {
+		if(data.data) return data.name.substr(-4) !== ".bin" ? debom_xml(data.data) : char_codes(data.data);
+		if(data.asNodeBuffer && has_buf) return debom_xml(data.asNodeBuffer().toString('binary'));
+		if(data.asBinary) return debom_xml(data.asBinary());
+		if(data._data && data._data.getContent) return debom_xml(cc2str(Array.prototype.slice.call(data._data.getContent(),0)));
+	}
+	return null;
+}
+
+function safegetzipfile(zip, file) {
+	var f = file; if(zip.files[f]) return zip.files[f];
+
+	var lowerCaseFiles = {};
+	for (var key in zip.files) {
+		lowerCaseFiles[key.toLowerCase()] = zip.files[key];
+	}
+
+	f = file.toLowerCase(); if(lowerCaseFiles[f]) return lowerCaseFiles[f];
+	f = f.replace(/\//g,'\\'); if(lowerCaseFiles[f]) return lowerCaseFiles[f];
+	return null;
+}
+
+function getzipfile(zip, file) {
+	var o = safegetzipfile(zip, file);
+	if(o == null) throw new Error("Cannot find file " + file + " in zip");
+	return o;
+}
+
+function getzipdata(zip, file, safe) {
+	if(!safe) return getdata(getzipfile(zip, file));
+	if(!file) return null;
+	try { return getzipdata(zip, file); } catch(e) { return null; }
+}
+
+var _fs, jszip;
+if(typeof JSZip !== 'undefined') jszip = JSZip;
+if (typeof exports !== 'undefined') {
+	if (typeof module !== 'undefined' && module.exports) {
+		if(has_buf && typeof jszip === 'undefined') jszip = require('js'+'zip');
+		if(typeof jszip === 'undefined') jszip = require('./js'+'zip').JSZip;
+		_fs = require('f'+'s');
+	}
+}
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/22_xmlutils.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/22_xmlutils.js
new file mode 100644
index 0000000..e36bf18
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/22_xmlutils.js
@@ -0,0 +1,171 @@
+var attregexg=/([\w:]+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:'))/g;
+var tagregex=/<[^>]*>/g;
+var nsregex=/<\w*:/, nsregex2 = /<(\/?)\w+:/;
+function parsexmltag(tag, skip_root) {
+	var z = [];
+	var eq = 0, c = 0;
+	for(; eq !== tag.length; ++eq) if((c = tag.charCodeAt(eq)) === 32 || c === 10 || c === 13) break;
+	if(!skip_root) z[0] = tag.substr(0, eq);
+	if(eq === tag.length) return z;
+	var m = tag.match(attregexg), j=0, w="", v="", i=0, q="", cc="";
+	if(m) for(i = 0; i != m.length; ++i) {
+		cc = m[i];
+		for(c=0; c != cc.length; ++c) if(cc.charCodeAt(c) === 61) break;
+		q = cc.substr(0,c); v = cc.substring(c+2, cc.length-1);
+		for(j=0;j!=q.length;++j) if(q.charCodeAt(j) === 58) break;
+		if(j===q.length) z[q] = v;
+		else z[(j===5 && q.substr(0,5)==="xmlns"?"xmlns":"")+q.substr(j+1)] = v;
+	}
+	return z;
+}
+function strip_ns(x) { return x.replace(nsregex2, "<$1"); }
+
+var encodings = {
+	'&quot;': '"',
+	'&apos;': "'",
+	'&gt;': '>',
+	'&lt;': '<',
+	'&amp;': '&'
+};
+var rencoding = evert(encodings);
+var rencstr = "&<>'\"".split("");
+
+// TODO: CP remap (need to read file version to determine OS)
+var unescapexml = (function() {
+	var encregex = /&[a-z]*;/g, coderegex = /_x([\da-fA-F]+)_/g;
+	return function unescapexml(text){
+		var s = text + '';
+		return s.replace(encregex, function($$) { return encodings[$$]; }).replace(coderegex,function(m,c) {return String.fromCharCode(parseInt(c,16));});
+	};
+})();
+
+var decregex=/[&<>'"]/g, charegex = /[\u0000-\u0008\u000b-\u001f]/g;
+function escapexml(text){
+	var s = text + '';
+	return s.replace(decregex, function(y) { return rencoding[y]; }).replace(charegex,function(s) { return "_x" + ("000"+s.charCodeAt(0).toString(16)).substr(-4) + "_";});
+}
+
+/* TODO: handle codepages */
+var xlml_fixstr = (function() {
+	var entregex = /&#(\d+);/g;
+	function entrepl($$,$1) { return String.fromCharCode(parseInt($1,10)); }
+	return function xlml_fixstr(str) { return str.replace(entregex,entrepl); };
+})();
+
+function parsexmlbool(value, tag) {
+	switch(value) {
+		case '1': case 'true': case 'TRUE': return true;
+		/* case '0': case 'false': case 'FALSE':*/
+		default: return false;
+	}
+}
+
+var utf8read = function utf8reada(orig) {
+	var out = "", i = 0, c = 0, d = 0, e = 0, f = 0, w = 0;
+	while (i < orig.length) {
+		c = orig.charCodeAt(i++);
+		if (c < 128) { out += String.fromCharCode(c); continue; }
+		d = orig.charCodeAt(i++);
+		if (c>191 && c<224) { out += String.fromCharCode(((c & 31) << 6) | (d & 63)); continue; }
+		e = orig.charCodeAt(i++);
+		if (c < 240) { out += String.fromCharCode(((c & 15) << 12) | ((d & 63) << 6) | (e & 63)); continue; }
+		f = orig.charCodeAt(i++);
+		w = (((c & 7) << 18) | ((d & 63) << 12) | ((e & 63) << 6) | (f & 63))-65536;
+		out += String.fromCharCode(0xD800 + ((w>>>10)&1023));
+		out += String.fromCharCode(0xDC00 + (w&1023));
+	}
+	return out;
+};
+
+
+if(has_buf) {
+	var utf8readb = function utf8readb(data) {
+		var out = new Buffer(2*data.length), w, i, j = 1, k = 0, ww=0, c;
+		for(i = 0; i < data.length; i+=j) {
+			j = 1;
+			if((c=data.charCodeAt(i)) < 128) w = c;
+			else if(c < 224) { w = (c&31)*64+(data.charCodeAt(i+1)&63); j=2; }
+			else if(c < 240) { w=(c&15)*4096+(data.charCodeAt(i+1)&63)*64+(data.charCodeAt(i+2)&63); j=3; }
+			else { j = 4;
+				w = (c & 7)*262144+(data.charCodeAt(i+1)&63)*4096+(data.charCodeAt(i+2)&63)*64+(data.charCodeAt(i+3)&63);
+				w -= 65536; ww = 0xD800 + ((w>>>10)&1023); w = 0xDC00 + (w&1023);
+			}
+			if(ww !== 0) { out[k++] = ww&255; out[k++] = ww>>>8; ww = 0; }
+			out[k++] = w%256; out[k++] = w>>>8;
+		}
+		out.length = k;
+		return out.toString('ucs2');
+	};
+	var corpus = "foo bar baz\u00e2\u0098\u0083\u00f0\u009f\u008d\u00a3";
+	if(utf8read(corpus) == utf8readb(corpus)) utf8read = utf8readb;
+	var utf8readc = function utf8readc(data) { return Buffer(data, 'binary').toString('utf8'); };
+	if(utf8read(corpus) == utf8readc(corpus)) utf8read = utf8readc;
+}
+
+// matches <foo>...</foo> extracts content
+var matchtag = (function() {
+	var mtcache = {};
+	return function matchtag(f,g) {
+		var t = f+"|"+g;
+		if(mtcache[t] !== undefined) return mtcache[t];
+		return (mtcache[t] = new RegExp('<(?:\\w+:)?'+f+'(?: xml:space="preserve")?(?:[^>]*)>([^\u2603]*)</(?:\\w+:)?'+f+'>',(g||"")));
+	};
+})();
+
+var vtregex = (function(){ var vt_cache = {};
+	return function vt_regex(bt) {
+		if(vt_cache[bt] !== undefined) return vt_cache[bt];
+		return (vt_cache[bt] = new RegExp("<vt:" + bt + ">(.*?)</vt:" + bt + ">", 'g') );
+};})();
+var vtvregex = /<\/?vt:variant>/g, vtmregex = /<vt:([^>]*)>(.*)</;
+function parseVector(data) {
+	var h = parsexmltag(data);
+
+	var matches = data.match(vtregex(h.baseType))||[];
+	if(matches.length != h.size) throw "unexpected vector length " + matches.length + " != " + h.size;
+	var res = [];
+	matches.forEach(function(x) {
+		var v = x.replace(vtvregex,"").match(vtmregex);
+		res.push({v:v[2], t:v[1]});
+	});
+	return res;
+}
+
+var wtregex = /(^\s|\s$|\n)/;
+function writetag(f,g) {return '<' + f + (g.match(wtregex)?' xml:space="preserve"' : "") + '>' + g + '</' + f + '>';}
+
+function wxt_helper(h) { return keys(h).map(function(k) { return " " + k + '="' + h[k] + '"';}).join(""); }
+function writextag(f,g,h) { return '<' + f + (isval(h) ? wxt_helper(h) : "") + (isval(g) ? (g.match(wtregex)?' xml:space="preserve"' : "") + '>' + g + '</' + f : "/") + '>';}
+
+function write_w3cdtf(d, t) { try { return d.toISOString().replace(/\.\d*/,""); } catch(e) { if(t) throw e; } }
+
+function write_vt(s) {
+	switch(typeof s) {
+		case 'string': return writextag('vt:lpwstr', s);
+		case 'number': return writextag((s|0)==s?'vt:i4':'vt:r8', String(s));
+		case 'boolean': return writextag('vt:bool',s?'true':'false');
+	}
+	if(s instanceof Date) return writextag('vt:filetime', write_w3cdtf(s));
+	throw new Error("Unable to serialize " + s);
+}
+
+var XML_HEADER = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\r\n';
+var XMLNS = {
+	'dc': 'http://purl.org/dc/elements/1.1/',
+	'dcterms': 'http://purl.org/dc/terms/',
+	'dcmitype': 'http://purl.org/dc/dcmitype/',
+	'mx': 'http://schemas.microsoft.com/office/mac/excel/2008/main',
+	'r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',
+	'sjs': 'http://schemas.openxmlformats.org/package/2006/sheetjs/core-properties',
+	'vt': 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes',
+	'xsi': 'http://www.w3.org/2001/XMLSchema-instance',
+	'xsd': 'http://www.w3.org/2001/XMLSchema'
+};
+
+XMLNS.main = [
+	'http://schemas.openxmlformats.org/spreadsheetml/2006/main',
+	'http://purl.oclc.org/ooxml/spreadsheetml/main',
+	'http://schemas.microsoft.com/office/excel/2006/main',
+	'http://schemas.microsoft.com/office/excel/2006/2'
+];
+
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/23_binutils.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/23_binutils.js
new file mode 100644
index 0000000..cb862dc
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/23_binutils.js
@@ -0,0 +1,167 @@
+function readIEEE754(buf, idx, isLE, nl, ml) {
+	if(isLE === undefined) isLE = true;
+	if(!nl) nl = 8;
+	if(!ml && nl === 8) ml = 52;
+	var e, m, el = nl * 8 - ml - 1, eMax = (1 << el) - 1, eBias = eMax >> 1;
+	var bits = -7, d = isLE ? -1 : 1, i = isLE ? (nl - 1) : 0, s = buf[idx + i];
+
+	i += d;
+	e = s & ((1 << (-bits)) - 1); s >>>= (-bits); bits += el;
+	for (; bits > 0; e = e * 256 + buf[idx + i], i += d, bits -= 8);
+	m = e & ((1 << (-bits)) - 1); e >>>= (-bits); bits += ml;
+	for (; bits > 0; m = m * 256 + buf[idx + i], i += d, bits -= 8);
+	if (e === eMax) return m ? NaN : ((s ? -1 : 1) * Infinity);
+	else if (e === 0) e = 1 - eBias;
+	else { m = m + Math.pow(2, ml); e = e - eBias; }
+	return (s ? -1 : 1) * m * Math.pow(2, e - ml);
+}
+
+var __toBuffer, ___toBuffer;
+__toBuffer = ___toBuffer = function toBuffer_(bufs) { var x = []; for(var i = 0; i < bufs[0].length; ++i) { x.push.apply(x, bufs[0][i]); } return x; };
+var __utf16le, ___utf16le;
+__utf16le = ___utf16le = function utf16le_(b,s,e) { var ss=[]; for(var i=s; i<e; i+=2) ss.push(String.fromCharCode(__readUInt16LE(b,i))); return ss.join(""); };
+var __hexlify, ___hexlify;
+__hexlify = ___hexlify = function hexlify_(b,s,l) { return b.slice(s,(s+l)).map(function(x){return (x<16?"0":"") + x.toString(16);}).join(""); };
+var __utf8, ___utf8;
+__utf8 = ___utf8 = function(b,s,e) { var ss=[]; for(var i=s; i<e; i++) ss.push(String.fromCharCode(__readUInt8(b,i))); return ss.join(""); };
+var __lpstr, ___lpstr;
+__lpstr = ___lpstr = function lpstr_(b,i) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : "";};
+var __lpwstr, ___lpwstr;
+__lpwstr = ___lpwstr = function lpwstr_(b,i) { var len = 2*__readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : "";};
+var __double, ___double;
+__double = ___double = function(b, idx) { return readIEEE754(b, idx);};
+
+var is_buf = function is_buf_a(a) { return Array.isArray(a); };
+if(has_buf) {
+	__utf16le = function utf16le_b(b,s,e) { if(!Buffer.isBuffer(b)) return ___utf16le(b,s,e); return b.toString('utf16le',s,e); };
+	__hexlify = function(b,s,l) { return Buffer.isBuffer(b) ? b.toString('hex',s,s+l) : ___hexlify(b,s,l); };
+	__lpstr = function lpstr_b(b,i) { if(!Buffer.isBuffer(b)) return ___lpstr(b, i); var len = b.readUInt32LE(i); return len > 0 ? b.toString('utf8',i+4,i+4+len-1) : "";};
+	__lpwstr = function lpwstr_b(b,i) { if(!Buffer.isBuffer(b)) return ___lpwstr(b, i); var len = 2*b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len-1);};
+	__utf8 = function utf8_b(s,e) { return this.toString('utf8',s,e); };
+	__toBuffer = function(bufs) { return (bufs[0].length > 0 && Buffer.isBuffer(bufs[0][0])) ? Buffer.concat(bufs[0]) : ___toBuffer(bufs);};
+	bconcat = function(bufs) { return Buffer.isBuffer(bufs[0]) ? Buffer.concat(bufs) : [].concat.apply([], bufs); };
+	__double = function double_(b,i) { if(Buffer.isBuffer(b)) return b.readDoubleLE(i); return ___double(b,i); };
+	is_buf = function is_buf_b(a) { return Buffer.isBuffer(a) || Array.isArray(a); };
+}
+
+/* from js-xls */
+if(typeof cptable !== 'undefined') {
+	__utf16le = function(b,s,e) { return cptable.utils.decode(1200, b.slice(s,e)); };
+	__utf8 = function(b,s,e) { return cptable.utils.decode(65001, b.slice(s,e)); };
+	__lpstr = function(b,i) { var len = __readUInt32LE(b,i); return len > 0 ? cptable.utils.decode(current_codepage, b.slice(i+4, i+4+len-1)) : "";};
+	__lpwstr = function(b,i) { var len = 2*__readUInt32LE(b,i); return len > 0 ? cptable.utils.decode(1200, b.slice(i+4,i+4+len-1)) : "";};
+}
+
+var __readUInt8 = function(b, idx) { return b[idx]; };
+var __readUInt16LE = function(b, idx) { return b[idx+1]*(1<<8)+b[idx]; };
+var __readInt16LE = function(b, idx) { var u = b[idx+1]*(1<<8)+b[idx]; return (u < 0x8000) ? u : (0xffff - u + 1) * -1; };
+var __readUInt32LE = function(b, idx) { return b[idx+3]*(1<<24)+(b[idx+2]<<16)+(b[idx+1]<<8)+b[idx]; };
+var __readInt32LE = function(b, idx) { return (b[idx+3]<<24)|(b[idx+2]<<16)|(b[idx+1]<<8)|b[idx]; };
+
+var ___unhexlify = function(s) { return s.match(/../g).map(function(x) { return parseInt(x,16);}); };
+var __unhexlify = typeof Buffer !== "undefined" ? function(s) { return Buffer.isBuffer(s) ? new Buffer(s, 'hex') : ___unhexlify(s); } : ___unhexlify;
+
+function ReadShift(size, t) {
+	var o="", oI, oR, oo=[], w, vv, i, loc;
+	switch(t) {
+		case 'dbcs':
+			loc = this.l;
+			if(has_buf && Buffer.isBuffer(this)) o = this.slice(this.l, this.l+2*size).toString("utf16le");
+			else for(i = 0; i != size; ++i) { o+=String.fromCharCode(__readUInt16LE(this, loc)); loc+=2; }
+			size *= 2;
+			break;
+
+		case 'utf8': o = __utf8(this, this.l, this.l + size); break;
+		case 'utf16le': size *= 2; o = __utf16le(this, this.l, this.l + size); break;
+
+		/* [MS-OLEDS] 2.1.4 LengthPrefixedAnsiString */
+		case 'lpstr': o = __lpstr(this, this.l); size = 5 + o.length; break;
+		/* [MS-OLEDS] 2.1.5 LengthPrefixedUnicodeString */
+		case 'lpwstr': o = __lpwstr(this, this.l); size = 5 + o.length; if(o[o.length-1] == '\u0000') size += 2; break;
+
+		case 'cstr': size = 0; o = "";
+			while((w=__readUInt8(this, this.l + size++))!==0) oo.push(_getchar(w));
+			o = oo.join(""); break;
+		case 'wstr': size = 0; o = "";
+			while((w=__readUInt16LE(this,this.l +size))!==0){oo.push(_getchar(w));size+=2;}
+			size+=2; o = oo.join(""); break;
+
+		/* sbcs and dbcs support continue records in the SST way TODO codepages */
+		case 'dbcs-cont': o = ""; loc = this.l;
+			for(i = 0; i != size; ++i) {
+				if(this.lens && this.lens.indexOf(loc) !== -1) {
+					w = __readUInt8(this, loc);
+					this.l = loc + 1;
+					vv = ReadShift.call(this, size-i, w ? 'dbcs-cont' : 'sbcs-cont');
+					return oo.join("") + vv;
+				}
+				oo.push(_getchar(__readUInt16LE(this, loc)));
+				loc+=2;
+			} o = oo.join(""); size *= 2; break;
+
+		case 'sbcs-cont': o = ""; loc = this.l;
+			for(i = 0; i != size; ++i) {
+				if(this.lens && this.lens.indexOf(loc) !== -1) {
+					w = __readUInt8(this, loc);
+					this.l = loc + 1;
+					vv = ReadShift.call(this, size-i, w ? 'dbcs-cont' : 'sbcs-cont');
+					return oo.join("") + vv;
+				}
+				oo.push(_getchar(__readUInt8(this, loc)));
+				loc+=1;
+			} o = oo.join(""); break;
+
+		default:
+	switch(size) {
+		case 1: oI = __readUInt8(this, this.l); this.l++; return oI;
+		case 2: oI = (t === 'i' ? __readInt16LE : __readUInt16LE)(this, this.l); this.l += 2; return oI;
+		case 4:
+			if(t === 'i' || (this[this.l+3] & 0x80)===0) { oI = __readInt32LE(this, this.l); this.l += 4; return oI; }
+			else { oR = __readUInt32LE(this, this.l); this.l += 4; return oR; } break;
+		case 8: if(t === 'f') { oR = __double(this, this.l); this.l += 8; return oR; }
+		/* falls through */
+		case 16: o = __hexlify(this, this.l, size); break;
+	}}
+	this.l+=size; return o;
+}
+
+function WriteShift(t, val, f) {
+	var size, i;
+	if(f === 'dbcs') {
+		for(i = 0; i != val.length; ++i) this.writeUInt16LE(val.charCodeAt(i), this.l + 2 * i);
+		size = 2 * val.length;
+	} else switch(t) {
+		case  1: size = 1; this[this.l] = val&255; break;
+		case  3: size = 3; this[this.l+2] = val & 255; val >>>= 8; this[this.l+1] = val&255; val >>>= 8; this[this.l] = val&255; break;
+		case  4: size = 4; this.writeUInt32LE(val, this.l); break;
+		case  8: size = 8; if(f === 'f') { this.writeDoubleLE(val, this.l); break; }
+		/* falls through */
+		case 16: break;
+		case -4: size = 4; this.writeInt32LE(val, this.l); break;
+	}
+	this.l += size; return this;
+}
+
+function CheckField(hexstr, fld) {
+	var m = __hexlify(this,this.l,hexstr.length>>1);
+	if(m !== hexstr) throw fld + 'Expected ' + hexstr + ' saw ' + m;
+	this.l += hexstr.length>>1;
+}
+
+function prep_blob(blob, pos) {
+	blob.l = pos;
+	blob.read_shift = ReadShift;
+	blob.chk = CheckField;
+	blob.write_shift = WriteShift;
+}
+
+function parsenoop(blob, length) { blob.l += length; }
+
+function writenoop(blob, length) { blob.l += length; }
+
+function new_buf(sz) {
+	var o = new_raw_buf(sz);
+	prep_blob(o, 0);
+	return o;
+}
+
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/24_hoppers.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/24_hoppers.js
new file mode 100644
index 0000000..773362c
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/24_hoppers.js
@@ -0,0 +1,66 @@
+/* [MS-XLSB] 2.1.4 Record */
+function recordhopper(data, cb, opts) {
+	var tmpbyte, cntbyte, length;
+	prep_blob(data, data.l || 0);
+	while(data.l < data.length) {
+		var RT = data.read_shift(1);
+		if(RT & 0x80) RT = (RT & 0x7F) + ((data.read_shift(1) & 0x7F)<<7);
+		var R = XLSBRecordEnum[RT] || XLSBRecordEnum[0xFFFF];
+		tmpbyte = data.read_shift(1);
+		length = tmpbyte & 0x7F;
+		for(cntbyte = 1; cntbyte <4 && (tmpbyte & 0x80); ++cntbyte) length += ((tmpbyte = data.read_shift(1)) & 0x7F)<<(7*cntbyte);
+		var d = R.f(data, length, opts);
+		if(cb(d, R, RT)) return;
+	}
+}
+
+/* control buffer usage for fixed-length buffers */
+function buf_array() {
+	var bufs = [], blksz = 2048;
+	var newblk = function ba_newblk(sz) {
+		var o = new_buf(sz);
+		prep_blob(o, 0);
+		return o;
+	};
+
+	var curbuf = newblk(blksz);
+
+	var endbuf = function ba_endbuf() {
+		curbuf.length = curbuf.l;
+		if(curbuf.length > 0) bufs.push(curbuf);
+		curbuf = null;
+	};
+
+	var next = function ba_next(sz) {
+		if(sz < curbuf.length - curbuf.l) return curbuf;
+		endbuf();
+		return (curbuf = newblk(Math.max(sz+1, blksz)));
+	};
+
+	var end = function ba_end() {
+		endbuf();
+		return __toBuffer([bufs]);
+	};
+
+	var push = function ba_push(buf) { endbuf(); curbuf = buf; next(blksz); };
+
+	return { next:next, push:push, end:end, _bufs:bufs };
+}
+
+function write_record(ba, type, payload, length) {
+	var t = evert_RE[type], l;
+	if(!length) length = XLSBRecordEnum[t].p || (payload||[]).length || 0;
+	l = 1 + (t >= 0x80 ? 1 : 0) + 1 + length;
+	if(length >= 0x80) ++l; if(length >= 0x4000) ++l; if(length >= 0x200000) ++l;
+	var o = ba.next(l);
+	if(t <= 0x7F) o.write_shift(1, t);
+	else {
+		o.write_shift(1, (t & 0x7F) + 0x80);
+		o.write_shift(1, (t >> 7));
+	}
+	for(var i = 0; i != 4; ++i) {
+		if(length >= 0x80) { o.write_shift(1, (length & 0x7F)+0x80); length >>= 7; }
+		else { o.write_shift(1, length); break; }
+	}
+	if(length > 0 && is_buf(payload)) ba.push(payload);
+}
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/25_cellutils.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/25_cellutils.js
new file mode 100644
index 0000000..8ae765b
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/25_cellutils.js
@@ -0,0 +1,21 @@
+/* XLS ranges enforced */
+function shift_cell_xls(cell, tgt) {
+	if(tgt.s) {
+		if(cell.cRel) cell.c += tgt.s.c;
+		if(cell.rRel) cell.r += tgt.s.r;
+	} else {
+		cell.c += tgt.c;
+		cell.r += tgt.r;
+	}
+	cell.cRel = cell.rRel = 0;
+	while(cell.c >= 0x100) cell.c -= 0x100;
+	while(cell.r >= 0x10000) cell.r -= 0x10000;
+	return cell;
+}
+
+function shift_range_xls(cell, range) {
+	cell.s = shift_cell_xls(cell.s, range.s);
+	cell.e = shift_cell_xls(cell.e, range.s);
+	return cell;
+}
+
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/26_crypto.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/26_crypto.js
new file mode 100644
index 0000000..db36131
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/26_crypto.js
@@ -0,0 +1,35 @@
+var OFFCRYPTO = {};
+var make_offcrypto = function(O, _crypto) {
+	var crypto;
+	if(typeof _crypto !== 'undefined') crypto = _crypto;
+	else if(typeof require !== 'undefined') {
+		try { crypto = require('cry'+'pto'); }
+		catch(e) { crypto = null; }
+	}
+
+	O.rc4 = function(key, data) {
+		var S = new Array(256);
+		var c = 0, i = 0, j = 0, t = 0;
+		for(i = 0; i != 256; ++i) S[i] = i;
+		for(i = 0; i != 256; ++i) {
+			j = (j + S[i] + (key[i%key.length]).charCodeAt(0))&255;
+			t = S[i]; S[i] = S[j]; S[j] = t;
+		}
+		i = j = 0; out = Buffer(data.length);
+		for(c = 0; c != data.length; ++c) {
+			i = (i + 1)&255;
+			j = (j + S[i])%256;
+			t = S[i]; S[i] = S[j]; S[j] = t;
+			out[c] = (data[c] ^ S[(S[i]+S[j])&255]);
+		}
+		return out;
+	};
+
+	if(crypto) {
+		O.md5 = function(hex) { return crypto.createHash('md5').update(hex).digest('hex'); };
+	} else {
+		O.md5 = function(hex) { throw "unimplemented"; };
+	}
+};
+make_offcrypto(OFFCRYPTO, typeof crypto !== "undefined" ? crypto : undefined);
+
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/28_binstructs.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/28_binstructs.js
new file mode 100644
index 0000000..33f5b86
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/28_binstructs.js
@@ -0,0 +1,160 @@
+
+/* [MS-XLSB] 2.5.143 */
+function parse_StrRun(data, length) {
+	return { ich: data.read_shift(2), ifnt: data.read_shift(2) };
+}
+
+/* [MS-XLSB] 2.1.7.121 */
+function parse_RichStr(data, length) {
+	var start = data.l;
+	var flags = data.read_shift(1);
+	var str = parse_XLWideString(data);
+	var rgsStrRun = [];
+	var z = { t: str, h: str };
+	if((flags & 1) !== 0) { /* fRichStr */
+		/* TODO: formatted string */
+		var dwSizeStrRun = data.read_shift(4);
+		for(var i = 0; i != dwSizeStrRun; ++i) rgsStrRun.push(parse_StrRun(data));
+		z.r = rgsStrRun;
+	}
+	else z.r = "<t>" + escapexml(str) + "</t>";
+	if((flags & 2) !== 0) { /* fExtStr */
+		/* TODO: phonetic string */
+	}
+	data.l = start + length;
+	return z;
+}
+function write_RichStr(str, o) {
+	/* TODO: formatted string */
+	if(o == null) o = new_buf(5+2*str.t.length);
+	o.write_shift(1,0);
+	write_XLWideString(str.t, o);
+	return o;
+}
+
+/* [MS-XLSB] 2.5.9 */
+function parse_XLSBCell(data) {
+	var col = data.read_shift(4);
+	var iStyleRef = data.read_shift(2);
+	iStyleRef += data.read_shift(1) <<16;
+	var fPhShow = data.read_shift(1);
+	return { c:col, iStyleRef: iStyleRef };
+}
+function write_XLSBCell(cell, o) {
+	if(o == null) o = new_buf(8);
+	o.write_shift(-4, cell.c);
+	o.write_shift(3, cell.iStyleRef === undefined ? cell.iStyleRef : cell.s);
+	o.write_shift(1, 0); /* fPhShow */
+	return o;
+}
+
+
+/* [MS-XLSB] 2.5.21 */
+function parse_XLSBCodeName (data, length) { return parse_XLWideString(data, length); }
+
+/* [MS-XLSB] 2.5.166 */
+function parse_XLNullableWideString(data) {
+	var cchCharacters = data.read_shift(4);
+	return cchCharacters === 0 || cchCharacters === 0xFFFFFFFF ? "" : data.read_shift(cchCharacters, 'dbcs');
+}
+function write_XLNullableWideString(data, o) {
+	if(!o) o = new_buf(127);
+	o.write_shift(4, data.length > 0 ? data.length : 0xFFFFFFFF);
+	if(data.length > 0) o.write_shift(0, data, 'dbcs');
+	return o;
+}
+
+/* [MS-XLSB] 2.5.168 */
+function parse_XLWideString(data) {
+	var cchCharacters = data.read_shift(4);
+	return cchCharacters === 0 ? "" : data.read_shift(cchCharacters, 'dbcs');
+}
+function write_XLWideString(data, o) {
+	if(o == null) o = new_buf(4+2*data.length);
+	o.write_shift(4, data.length);
+	if(data.length > 0) o.write_shift(0, data, 'dbcs');
+	return o;
+}
+
+/* [MS-XLSB] 2.5.114 */
+var parse_RelID = parse_XLNullableWideString;
+var write_RelID = write_XLNullableWideString;
+
+
+/* [MS-XLSB] 2.5.122 */
+/* [MS-XLS] 2.5.217 */
+function parse_RkNumber(data) {
+	var b = data.slice(data.l, data.l+4);
+	var fX100 = b[0] & 1, fInt = b[0] & 2;
+	data.l+=4;
+	b[0] &= 0xFC; // b[0] &= ~3;
+	var RK = fInt === 0 ? __double([0,0,0,0,b[0],b[1],b[2],b[3]],0) : __readInt32LE(b,0)>>2;
+	return fX100 ? RK/100 : RK;
+}
+
+/* [MS-XLSB] 2.5.153 */
+function parse_UncheckedRfX(data) {
+	var cell = {s: {}, e: {}};
+	cell.s.r = data.read_shift(4);
+	cell.e.r = data.read_shift(4);
+	cell.s.c = data.read_shift(4);
+	cell.e.c = data.read_shift(4);
+	return cell;
+}
+
+function write_UncheckedRfX(r, o) {
+	if(!o) o = new_buf(16);
+	o.write_shift(4, r.s.r);
+	o.write_shift(4, r.e.r);
+	o.write_shift(4, r.s.c);
+	o.write_shift(4, r.e.c);
+	return o;
+}
+
+/* [MS-XLSB] 2.5.171 */
+/* [MS-XLS] 2.5.342 */
+function parse_Xnum(data, length) { return data.read_shift(8, 'f'); }
+function write_Xnum(data, o) { return (o || new_buf(8)).write_shift(8, 'f', data); }
+
+/* [MS-XLSB] 2.5.198.2 */
+var BErr = {
+	0x00: "#NULL!",
+	0x07: "#DIV/0!",
+	0x0F: "#VALUE!",
+	0x17: "#REF!",
+	0x1D: "#NAME?",
+	0x24: "#NUM!",
+	0x2A: "#N/A",
+	0x2B: "#GETTING_DATA",
+	0xFF: "#WTF?"
+};
+var RBErr = evert_num(BErr);
+
+/* [MS-XLSB] 2.4.321 BrtColor */
+function parse_BrtColor(data, length) {
+	var out = {};
+	var d = data.read_shift(1);
+	out.fValidRGB = d & 1;
+	out.xColorType = d >>> 1;
+	out.index = data.read_shift(1);
+	out.nTintAndShade = data.read_shift(2, 'i');
+	out.bRed   = data.read_shift(1);
+	out.bGreen = data.read_shift(1);
+	out.bBlue  = data.read_shift(1);
+	out.bAlpha = data.read_shift(1);
+}
+
+/* [MS-XLSB] 2.5.52 */
+function parse_FontFlags(data, length) {
+	var d = data.read_shift(1);
+	data.l++;
+	var out = {
+		fItalic: d & 0x2,
+		fStrikeout: d & 0x8,
+		fOutline: d & 0x10,
+		fShadow: d & 0x20,
+		fCondense: d & 0x40,
+		fExtend: d & 0x80
+	};
+	return out;
+}
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/29_xlsenum.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/29_xlsenum.js
new file mode 100644
index 0000000..f9fc64e
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/29_xlsenum.js
@@ -0,0 +1,265 @@
+/* [MS-OLEPS] 2.2 PropertyType */
+{
+	var VT_EMPTY    = 0x0000;
+	var VT_NULL     = 0x0001;
+	var VT_I2       = 0x0002;
+	var VT_I4       = 0x0003;
+	var VT_R4       = 0x0004;
+	var VT_R8       = 0x0005;
+	var VT_CY       = 0x0006;
+	var VT_DATE     = 0x0007;
+	var VT_BSTR     = 0x0008;
+	var VT_ERROR    = 0x000A;
+	var VT_BOOL     = 0x000B;
+	var VT_VARIANT  = 0x000C;
+	var VT_DECIMAL  = 0x000E;
+	var VT_I1       = 0x0010;
+	var VT_UI1      = 0x0011;
+	var VT_UI2      = 0x0012;
+	var VT_UI4      = 0x0013;
+	var VT_I8       = 0x0014;
+	var VT_UI8      = 0x0015;
+	var VT_INT      = 0x0016;
+	var VT_UINT     = 0x0017;
+	var VT_LPSTR    = 0x001E;
+	var VT_LPWSTR   = 0x001F;
+	var VT_FILETIME = 0x0040;
+	var VT_BLOB     = 0x0041;
+	var VT_STREAM   = 0x0042;
+	var VT_STORAGE  = 0x0043;
+	var VT_STREAMED_Object  = 0x0044;
+	var VT_STORED_Object    = 0x0045;
+	var VT_BLOB_Object      = 0x0046;
+	var VT_CF       = 0x0047;
+	var VT_CLSID    = 0x0048;
+	var VT_VERSIONED_STREAM = 0x0049;
+	var VT_VECTOR   = 0x1000;
+	var VT_ARRAY    = 0x2000;
+
+	var VT_STRING   = 0x0050; // 2.3.3.1.11 VtString
+	var VT_USTR     = 0x0051; // 2.3.3.1.12 VtUnalignedString
+	var VT_CUSTOM   = [VT_STRING, VT_USTR];
+}
+
+/* [MS-OSHARED] 2.3.3.2.2.1 Document Summary Information PIDDSI */
+var DocSummaryPIDDSI = {
+	0x01: { n: 'CodePage', t: VT_I2 },
+	0x02: { n: 'Category', t: VT_STRING },
+	0x03: { n: 'PresentationFormat', t: VT_STRING },
+	0x04: { n: 'ByteCount', t: VT_I4 },
+	0x05: { n: 'LineCount', t: VT_I4 },
+	0x06: { n: 'ParagraphCount', t: VT_I4 },
+	0x07: { n: 'SlideCount', t: VT_I4 },
+	0x08: { n: 'NoteCount', t: VT_I4 },
+	0x09: { n: 'HiddenCount', t: VT_I4 },
+	0x0a: { n: 'MultimediaClipCount', t: VT_I4 },
+	0x0b: { n: 'Scale', t: VT_BOOL },
+	0x0c: { n: 'HeadingPair', t: VT_VECTOR | VT_VARIANT },
+	0x0d: { n: 'DocParts', t: VT_VECTOR | VT_LPSTR },
+	0x0e: { n: 'Manager', t: VT_STRING },
+	0x0f: { n: 'Company', t: VT_STRING },
+	0x10: { n: 'LinksDirty', t: VT_BOOL },
+	0x11: { n: 'CharacterCount', t: VT_I4 },
+	0x13: { n: 'SharedDoc', t: VT_BOOL },
+	0x16: { n: 'HLinksChanged', t: VT_BOOL },
+	0x17: { n: 'AppVersion', t: VT_I4, p: 'version' },
+	0x1A: { n: 'ContentType', t: VT_STRING },
+	0x1B: { n: 'ContentStatus', t: VT_STRING },
+	0x1C: { n: 'Language', t: VT_STRING },
+	0x1D: { n: 'Version', t: VT_STRING },
+	0xFF: {}
+};
+
+/* [MS-OSHARED] 2.3.3.2.1.1 Summary Information Property Set PIDSI */
+var SummaryPIDSI = {
+	0x01: { n: 'CodePage', t: VT_I2 },
+	0x02: { n: 'Title', t: VT_STRING },
+	0x03: { n: 'Subject', t: VT_STRING },
+	0x04: { n: 'Author', t: VT_STRING },
+	0x05: { n: 'Keywords', t: VT_STRING },
+	0x06: { n: 'Comments', t: VT_STRING },
+	0x07: { n: 'Template', t: VT_STRING },
+	0x08: { n: 'LastAuthor', t: VT_STRING },
+	0x09: { n: 'RevNumber', t: VT_STRING },
+	0x0A: { n: 'EditTime', t: VT_FILETIME },
+	0x0B: { n: 'LastPrinted', t: VT_FILETIME },
+	0x0C: { n: 'CreatedDate', t: VT_FILETIME },
+	0x0D: { n: 'ModifiedDate', t: VT_FILETIME },
+	0x0E: { n: 'PageCount', t: VT_I4 },
+	0x0F: { n: 'WordCount', t: VT_I4 },
+	0x10: { n: 'CharCount', t: VT_I4 },
+	0x11: { n: 'Thumbnail', t: VT_CF },
+	0x12: { n: 'ApplicationName', t: VT_LPSTR },
+	0x13: { n: 'DocumentSecurity', t: VT_I4 },
+	0xFF: {}
+};
+
+/* [MS-OLEPS] 2.18 */
+var SpecialProperties = {
+	0x80000000: { n: 'Locale', t: VT_UI4 },
+	0x80000003: { n: 'Behavior', t: VT_UI4 },
+	0x72627262: {}
+};
+
+(function() {
+	for(var y in SpecialProperties) if(SpecialProperties.hasOwnProperty(y))
+	DocSummaryPIDDSI[y] = SummaryPIDSI[y] = SpecialProperties[y];
+})();
+
+/* [MS-XLS] 2.4.63 Country/Region codes */
+var CountryEnum = {
+	0x0001: "US", // United States
+	0x0002: "CA", // Canada
+	0x0003: "", // Latin America (except Brazil)
+	0x0007: "RU", // Russia
+	0x0014: "EG", // Egypt
+	0x001E: "GR", // Greece
+	0x001F: "NL", // Netherlands
+	0x0020: "BE", // Belgium
+	0x0021: "FR", // France
+	0x0022: "ES", // Spain
+	0x0024: "HU", // Hungary
+	0x0027: "IT", // Italy
+	0x0029: "CH", // Switzerland
+	0x002B: "AT", // Austria
+	0x002C: "GB", // United Kingdom
+	0x002D: "DK", // Denmark
+	0x002E: "SE", // Sweden
+	0x002F: "NO", // Norway
+	0x0030: "PL", // Poland
+	0x0031: "DE", // Germany
+	0x0034: "MX", // Mexico
+	0x0037: "BR", // Brazil
+	0x003d: "AU", // Australia
+	0x0040: "NZ", // New Zealand
+	0x0042: "TH", // Thailand
+	0x0051: "JP", // Japan
+	0x0052: "KR", // Korea
+	0x0054: "VN", // Viet Nam
+	0x0056: "CN", // China
+	0x005A: "TR", // Turkey
+	0x0069: "JS", // Ramastan
+	0x00D5: "DZ", // Algeria
+	0x00D8: "MA", // Morocco
+	0x00DA: "LY", // Libya
+	0x015F: "PT", // Portugal
+	0x0162: "IS", // Iceland
+	0x0166: "FI", // Finland
+	0x01A4: "CZ", // Czech Republic
+	0x0376: "TW", // Taiwan
+	0x03C1: "LB", // Lebanon
+	0x03C2: "JO", // Jordan
+	0x03C3: "SY", // Syria
+	0x03C4: "IQ", // Iraq
+	0x03C5: "KW", // Kuwait
+	0x03C6: "SA", // Saudi Arabia
+	0x03CB: "AE", // United Arab Emirates
+	0x03CC: "IL", // Israel
+	0x03CE: "QA", // Qatar
+	0x03D5: "IR", // Iran
+	0xFFFF: "US"  // United States
+};
+
+/* [MS-XLS] 2.5.127 */
+var XLSFillPattern = [
+	null,
+	'solid',
+	'mediumGray',
+	'darkGray',
+	'lightGray',
+	'darkHorizontal',
+	'darkVertical',
+	'darkDown',
+	'darkUp',
+	'darkGrid',
+	'darkTrellis',
+	'lightHorizontal',
+	'lightVertical',
+	'lightDown',
+	'lightUp',
+	'lightGrid',
+	'lightTrellis',
+	'gray125',
+	'gray0625'
+];
+
+function rgbify(arr) { return arr.map(function(x) { return [(x>>16)&255,(x>>8)&255,x&255]; }); }
+
+/* [MS-XLS] 2.5.161 */
+var XLSIcv = rgbify([
+	/* Color Constants */
+	0x000000,
+	0xFFFFFF,
+	0xFF0000,
+	0x00FF00,
+	0x0000FF,
+	0xFFFF00,
+	0xFF00FF,
+	0x00FFFF,
+
+	/* Defaults */
+	0x000000,
+	0xFFFFFF,
+	0xFF0000,
+	0x00FF00,
+	0x0000FF,
+	0xFFFF00,
+	0xFF00FF,
+	0x00FFFF,
+
+	0x800000,
+	0x008000,
+	0x000080,
+	0x808000,
+	0x800080,
+	0x008080,
+	0xC0C0C0,
+	0x808080,
+	0x9999FF,
+	0x993366,
+	0xFFFFCC,
+	0xCCFFFF,
+	0x660066,
+	0xFF8080,
+	0x0066CC,
+	0xCCCCFF,
+
+	0x000080,
+	0xFF00FF,
+	0xFFFF00,
+	0x00FFFF,
+	0x800080,
+	0x800000,
+	0x008080,
+	0x0000FF,
+	0x00CCFF,
+	0xCCFFFF,
+	0xCCFFCC,
+	0xFFFF99,
+	0x99CCFF,
+	0xFF99CC,
+	0xCC99FF,
+	0xFFCC99,
+
+	0x3366FF,
+	0x33CCCC,
+	0x99CC00,
+	0xFFCC00,
+	0xFF9900,
+	0xFF6600,
+	0x666699,
+	0x969696,
+	0x003366,
+	0x339966,
+	0x003300,
+	0x333300,
+	0x993300,
+	0x993366,
+	0x333399,
+	0x333333,
+
+	/* Sheet */
+	0xFFFFFF,
+	0x000000
+]);
+
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/30_ctype.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/30_ctype.js
new file mode 100644
index 0000000..183c717
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/30_ctype.js
@@ -0,0 +1,254 @@
+/* Parts enumerated in OPC spec, MS-XLSB and MS-XLSX */
+/* 12.3 Part Summary <SpreadsheetML> */
+/* 14.2 Part Summary <DrawingML> */
+/* [MS-XLSX] 2.1 Part Enumerations */
+/* [MS-XLSB] 2.1.7 Part Enumeration */
+var ct2type = {
+	/* Workbook */
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": "workbooks",
+
+	/* Worksheet */
+	"application/vnd.ms-excel.binIndexWs": "TODO", /* Binary Index */
+
+	/* Chartsheet */
+	"application/vnd.ms-excel.chartsheet": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": "TODO",
+
+	/* Dialogsheet */
+	"application/vnd.ms-excel.dialogsheet": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": "TODO",
+
+	/* Macrosheet */
+	"application/vnd.ms-excel.macrosheet": "TODO",
+	"application/vnd.ms-excel.macrosheet+xml": "TODO",
+	"application/vnd.ms-excel.intlmacrosheet": "TODO",
+	"application/vnd.ms-excel.binIndexMs": "TODO", /* Binary Index */
+
+	/* File Properties */
+	"application/vnd.openxmlformats-package.core-properties+xml": "coreprops",
+	"application/vnd.openxmlformats-officedocument.custom-properties+xml": "custprops",
+	"application/vnd.openxmlformats-officedocument.extended-properties+xml": "extprops",
+
+	/* Custom Data Properties */
+	"application/vnd.openxmlformats-officedocument.customXmlProperties+xml": "TODO",
+
+	/* Comments */
+	"application/vnd.ms-excel.comments": "comments",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": "comments",
+
+	/* PivotTable */
+	"application/vnd.ms-excel.pivotTable": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml": "TODO",
+
+	/* Calculation Chain */
+	"application/vnd.ms-excel.calcChain": "calcchains",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml": "calcchains",
+
+	/* Printer Settings */
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings": "TODO",
+
+	/* ActiveX */
+	"application/vnd.ms-office.activeX": "TODO",
+	"application/vnd.ms-office.activeX+xml": "TODO",
+
+	/* Custom Toolbars */
+	"application/vnd.ms-excel.attachedToolbars": "TODO",
+
+	/* External Data Connections */
+	"application/vnd.ms-excel.connections": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": "TODO",
+
+	/* External Links */
+	"application/vnd.ms-excel.externalLink": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml": "TODO",
+
+	/* Metadata */
+	"application/vnd.ms-excel.sheetMetadata": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml": "TODO",
+
+	/* PivotCache */
+	"application/vnd.ms-excel.pivotCacheDefinition": "TODO",
+	"application/vnd.ms-excel.pivotCacheRecords": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml": "TODO",
+
+	/* Query Table */
+	"application/vnd.ms-excel.queryTable": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml": "TODO",
+
+	/* Shared Workbook */
+	"application/vnd.ms-excel.userNames": "TODO",
+	"application/vnd.ms-excel.revisionHeaders": "TODO",
+	"application/vnd.ms-excel.revisionLog": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml": "TODO",
+
+	/* Single Cell Table */
+	"application/vnd.ms-excel.tableSingleCells": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml": "TODO",
+
+	/* Slicer */
+	"application/vnd.ms-excel.slicer": "TODO",
+	"application/vnd.ms-excel.slicerCache": "TODO",
+	"application/vnd.ms-excel.slicer+xml": "TODO",
+	"application/vnd.ms-excel.slicerCache+xml": "TODO",
+
+	/* Sort Map */
+	"application/vnd.ms-excel.wsSortMap": "TODO",
+
+	/* Table */
+	"application/vnd.ms-excel.table": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": "TODO",
+
+	/* Themes */
+	"application/vnd.openxmlformats-officedocument.theme+xml": "themes",
+
+	/* Timeline */
+	"application/vnd.ms-excel.Timeline+xml": "TODO", /* verify */
+	"application/vnd.ms-excel.TimelineCache+xml": "TODO", /* verify */
+
+	/* VBA */
+	"application/vnd.ms-office.vbaProject": "vba",
+	"application/vnd.ms-office.vbaProjectSignature": "vba",
+
+	/* Volatile Dependencies */
+	"application/vnd.ms-office.volatileDependencies": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml": "TODO",
+
+	/* Control Properties */
+	"application/vnd.ms-excel.controlproperties+xml": "TODO",
+
+	/* Data Model */
+	"application/vnd.openxmlformats-officedocument.model+data": "TODO",
+
+	/* Survey */
+	"application/vnd.ms-excel.Survey+xml": "TODO",
+
+	/* Drawing */
+	"application/vnd.openxmlformats-officedocument.drawing+xml": "TODO",
+	"application/vnd.openxmlformats-officedocument.drawingml.chart+xml": "TODO",
+	"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": "TODO",
+	"application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml": "TODO",
+	"application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml": "TODO",
+	"application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml": "TODO",
+	"application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml": "TODO",
+
+	/* VML */
+	"application/vnd.openxmlformats-officedocument.vmlDrawing": "TODO",
+
+	"application/vnd.openxmlformats-package.relationships+xml": "rels",
+	"application/vnd.openxmlformats-officedocument.oleObject": "TODO",
+
+	"sheet": "js"
+};
+
+var CT_LIST = (function(){
+	var o = {
+		workbooks: {
+			xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml",
+			xlsm: "application/vnd.ms-excel.sheet.macroEnabled.main+xml",
+			xlsb: "application/vnd.ms-excel.sheet.binary.macroEnabled.main",
+			xltx: "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml"
+		},
+		strs: { /* Shared Strings */
+			xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml",
+			xlsb: "application/vnd.ms-excel.sharedStrings"
+		},
+		sheets: {
+			xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml",
+			xlsb: "application/vnd.ms-excel.worksheet"
+		},
+		styles: {/* Styles */
+			xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml",
+			xlsb: "application/vnd.ms-excel.styles"
+		}
+	};
+	keys(o).forEach(function(k) { if(!o[k].xlsm) o[k].xlsm = o[k].xlsx; });
+	keys(o).forEach(function(k){ keys(o[k]).forEach(function(v) { ct2type[o[k][v]] = k; }); });
+	return o;
+})();
+
+var type2ct = evert_arr(ct2type);
+
+XMLNS.CT = 'http://schemas.openxmlformats.org/package/2006/content-types';
+
+function parse_ct(data, opts) {
+	var ctext = {};
+	if(!data || !data.match) return data;
+	var ct = { workbooks: [], sheets: [], calcchains: [], themes: [], styles: [],
+		coreprops: [], extprops: [], custprops: [], strs:[], comments: [], vba: [],
+		TODO:[], rels:[], xmlns: "" };
+	(data.match(tagregex)||[]).forEach(function(x) {
+		var y = parsexmltag(x);
+		switch(y[0].replace(nsregex,"<")) {
+			case '<?xml': break;
+			case '<Types': ct.xmlns = y['xmlns' + (y[0].match(/<(\w+):/)||["",""])[1] ]; break;
+			case '<Default': ctext[y.Extension] = y.ContentType; break;
+			case '<Override':
+				if(ct[ct2type[y.ContentType]] !== undefined) ct[ct2type[y.ContentType]].push(y.PartName);
+				else if(opts.WTF) console.error(y);
+				break;
+		}
+	});
+	if(ct.xmlns !== XMLNS.CT) throw new Error("Unknown Namespace: " + ct.xmlns);
+	ct.calcchain = ct.calcchains.length > 0 ? ct.calcchains[0] : "";
+	ct.sst = ct.strs.length > 0 ? ct.strs[0] : "";
+	ct.style = ct.styles.length > 0 ? ct.styles[0] : "";
+	ct.defaults = ctext;
+	delete ct.calcchains;
+	return ct;
+}
+
+var CTYPE_XML_ROOT = writextag('Types', null, {
+	'xmlns': XMLNS.CT,
+	'xmlns:xsd': XMLNS.xsd,
+	'xmlns:xsi': XMLNS.xsi
+});
+
+var CTYPE_DEFAULTS = [
+	['xml', 'application/xml'],
+	['bin', 'application/vnd.ms-excel.sheet.binary.macroEnabled.main'],
+	['rels', type2ct.rels[0]]
+].map(function(x) {
+	return writextag('Default', null, {'Extension':x[0], 'ContentType': x[1]});
+});
+
+function write_ct(ct, opts) {
+	var o = [], v;
+	o[o.length] = (XML_HEADER);
+	o[o.length] = (CTYPE_XML_ROOT);
+	o = o.concat(CTYPE_DEFAULTS);
+	var f1 = function(w) {
+		if(ct[w] && ct[w].length > 0) {
+			v = ct[w][0];
+			o[o.length] = (writextag('Override', null, {
+				'PartName': (v[0] == '/' ? "":"/") + v,
+				'ContentType': CT_LIST[w][opts.bookType || 'xlsx']
+			}));
+		}
+	};
+	var f2 = function(w) {
+		ct[w].forEach(function(v) {
+			o[o.length] = (writextag('Override', null, {
+				'PartName': (v[0] == '/' ? "":"/") + v,
+				'ContentType': CT_LIST[w][opts.bookType || 'xlsx']
+			}));
+		});
+	};
+	var f3 = function(t) {
+		(ct[t]||[]).forEach(function(v) {
+			o[o.length] = (writextag('Override', null, {
+				'PartName': (v[0] == '/' ? "":"/") + v,
+				'ContentType': type2ct[t][0]
+			}));
+		});
+	};
+	f1('workbooks');
+	f2('sheets');
+	f3('themes');
+	['strs', 'styles'].forEach(f1);
+	['coreprops', 'extprops', 'custprops'].forEach(f3);
+	if(o.length>2){ o[o.length] = ('</Types>'); o[1]=o[1].replace("/>",">"); }
+	return o.join("");
+}
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/31_rels.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/31_rels.js
new file mode 100644
index 0000000..12ac36f
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/31_rels.js
@@ -0,0 +1,61 @@
+/* 9.3.2 OPC Relationships Markup */
+var RELS = {
+	WB: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",
+	SHEET: "http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument"
+};
+
+function parse_rels(data, currentFilePath) {
+	if (!data) return data;
+	if (currentFilePath.charAt(0) !== '/') {
+		currentFilePath = '/'+currentFilePath;
+	}
+	var rels = {};
+	var hash = {};
+	var resolveRelativePathIntoAbsolute = function (to) {
+		var toksFrom = currentFilePath.split('/');
+		toksFrom.pop(); // folder path
+		var toksTo = to.split('/');
+		var reversed = [];
+		while (toksTo.length !== 0) {
+			var tokTo = toksTo.shift();
+			if (tokTo === '..') {
+				toksFrom.pop();
+			} else if (tokTo !== '.') {
+				toksFrom.push(tokTo);
+			}
+		}
+		return toksFrom.join('/');
+	};
+
+	data.match(tagregex).forEach(function(x) {
+		var y = parsexmltag(x);
+		/* 9.3.2.2 OPC_Relationships */
+		if (y[0] === '<Relationship') {
+			var rel = {}; rel.Type = y.Type; rel.Target = y.Target; rel.Id = y.Id; rel.TargetMode = y.TargetMode;
+			var canonictarget = y.TargetMode === 'External' ? y.Target : resolveRelativePathIntoAbsolute(y.Target);
+			rels[canonictarget] = rel;
+			hash[y.Id] = rel;
+		}
+	});
+	rels["!id"] = hash;
+	return rels;
+}
+
+XMLNS.RELS = 'http://schemas.openxmlformats.org/package/2006/relationships';
+
+var RELS_ROOT = writextag('Relationships', null, {
+	//'xmlns:ns0': XMLNS.RELS,
+	'xmlns': XMLNS.RELS
+});
+
+/* TODO */
+function write_rels(rels) {
+	var o = [];
+	o[o.length] = (XML_HEADER);
+	o[o.length] = (RELS_ROOT);
+	keys(rels['!id']).forEach(function(rid) { var rel = rels['!id'][rid];
+		o[o.length] = (writextag('Relationship', null, rel));
+	});
+	if(o.length>2){ o[o.length] = ('</Relationships>'); o[1]=o[1].replace("/>",">"); }
+	return o.join("");
+}
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/33_coreprops.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/33_coreprops.js
new file mode 100644
index 0000000..6ea7d82
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/33_coreprops.js
@@ -0,0 +1,79 @@
+/* ECMA-376 Part II 11.1 Core Properties Part */
+/* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */
+var CORE_PROPS = [
+	["cp:category", "Category"],
+	["cp:contentStatus", "ContentStatus"],
+	["cp:keywords", "Keywords"],
+	["cp:lastModifiedBy", "LastAuthor"],
+	["cp:lastPrinted", "LastPrinted"],
+	["cp:revision", "RevNumber"],
+	["cp:version", "Version"],
+	["dc:creator", "Author"],
+	["dc:description", "Comments"],
+	["dc:identifier", "Identifier"],
+	["dc:language", "Language"],
+	["dc:subject", "Subject"],
+	["dc:title", "Title"],
+	["dcterms:created", "CreatedDate", 'date'],
+	["dcterms:modified", "ModifiedDate", 'date']
+];
+
+XMLNS.CORE_PROPS = "http://schemas.openxmlformats.org/package/2006/metadata/core-properties";
+RELS.CORE_PROPS  = 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties';
+
+var CORE_PROPS_REGEX = (function() {
+	var r = new Array(CORE_PROPS.length);
+	for(var i = 0; i < CORE_PROPS.length; ++i) {
+		var f = CORE_PROPS[i];
+		var g = "(?:"+ f[0].substr(0,f[0].indexOf(":")) +":)"+ f[0].substr(f[0].indexOf(":")+1);
+		r[i] = new RegExp("<" + g + "[^>]*>(.*)<\/" + g + ">");
+	}
+	return r;
+})();
+
+function parse_core_props(data) {
+	var p = {};
+
+	for(var i = 0; i < CORE_PROPS.length; ++i) {
+		var f = CORE_PROPS[i], cur = data.match(CORE_PROPS_REGEX[i]);
+		if(cur != null && cur.length > 0) p[f[1]] = cur[1];
+		if(f[2] === 'date' && p[f[1]]) p[f[1]] = new Date(p[f[1]]);
+	}
+
+	return p;
+}
+
+var CORE_PROPS_XML_ROOT = writextag('cp:coreProperties', null, {
+	//'xmlns': XMLNS.CORE_PROPS,
+	'xmlns:cp': XMLNS.CORE_PROPS,
+	'xmlns:dc': XMLNS.dc,
+	'xmlns:dcterms': XMLNS.dcterms,
+	'xmlns:dcmitype': XMLNS.dcmitype,
+	'xmlns:xsi': XMLNS.xsi
+});
+
+function cp_doit(f, g, h, o, p) {
+	if(p[f] != null || g == null || g === "") return;
+	p[f] = g;
+	o[o.length] = (h ? writextag(f,g,h) : writetag(f,g));
+}
+
+function write_core_props(cp, opts) {
+	var o = [XML_HEADER, CORE_PROPS_XML_ROOT], p = {};
+  if (opts && opts.Props) {
+    if (opts.Props.title) o[o.length]       = '<dc:title>'       + opts.Props.title        + '</dc:title>';
+    if (opts.Props.subject) o[o.length]     = '<dc:subject>'     + opts.Props.subject      + '</dc:subject>';
+    if (opts.Props.creator) o[o.length]     = '<dc:creator>'     + opts.Props.creator      + '</dc:creator>';
+    if (opts.Props.keywords) o[o.length]    = '<cp:keywords>'    + opts.Props.keywords      + '</cp:keywords>';
+    if (opts.Props.description) o[o.length] = '<dc:description>' + opts.Props.description  + '</dc:description>';
+  }
+  if(cp) {
+
+    if(cp.CreatedDate != null) cp_doit("dcterms:created", typeof cp.CreatedDate === "string" ? cp.CreatedDate : write_w3cdtf(cp.CreatedDate, opts.WTF), {"xsi:type":"dcterms:W3CDTF"}, o, p);
+    if(cp.ModifiedDate != null) cp_doit("dcterms:modified", typeof cp.ModifiedDate === "string" ? cp.ModifiedDate : write_w3cdtf(cp.ModifiedDate, opts.WTF), {"xsi:type":"dcterms:W3CDTF"}, o, p);
+
+  	for(var i = 0; i != CORE_PROPS.length; ++i) { var f = CORE_PROPS[i]; cp_doit(f[0], cp[f[1]], null, o, p); }
+  }
+  if(o.length>2){ o[o.length] = ('</cp:coreProperties>'); o[1]=o[1].replace("/>",">"); }
+  return o.join("");
+}
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/34_extprops.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/34_extprops.js
new file mode 100644
index 0000000..23ec968
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/34_extprops.js
@@ -0,0 +1,76 @@
+/* 15.2.12.3 Extended File Properties Part */
+/* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */
+var EXT_PROPS = [
+	["Application", "Application", "string"],
+	["AppVersion", "AppVersion", "string"],
+	["Company", "Company", "string"],
+	["DocSecurity", "DocSecurity", "string"],
+	["Manager", "Manager", "string"],
+	["HyperlinksChanged", "HyperlinksChanged", "bool"],
+	["SharedDoc", "SharedDoc", "bool"],
+	["LinksUpToDate", "LinksUpToDate", "bool"],
+	["ScaleCrop", "ScaleCrop", "bool"],
+	["HeadingPairs", "HeadingPairs", "raw"],
+	["TitlesOfParts", "TitlesOfParts", "raw"]
+];
+
+XMLNS.EXT_PROPS = "http://schemas.openxmlformats.org/officeDocument/2006/extended-properties";
+RELS.EXT_PROPS  = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties';
+
+function parse_ext_props(data, p) {
+	var q = {}; if(!p) p = {};
+
+	EXT_PROPS.forEach(function(f) {
+		switch(f[2]) {
+			case "string": p[f[1]] = (data.match(matchtag(f[0]))||[])[1]; break;
+			case "bool": p[f[1]] = (data.match(matchtag(f[0]))||[])[1] === "true"; break;
+			case "raw":
+				var cur = data.match(new RegExp("<" + f[0] + "[^>]*>(.*)<\/" + f[0] + ">"));
+				if(cur && cur.length > 0) q[f[1]] = cur[1];
+				break;
+		}
+	});
+
+	if(q.HeadingPairs && q.TitlesOfParts) {
+		var v = parseVector(q.HeadingPairs);
+		var j = 0, widx = 0;
+		for(var i = 0; i !== v.length; ++i) {
+			switch(v[i].v) {
+				case "Worksheets": widx = j; p.Worksheets = +(v[++i].v); break;
+				case "Named Ranges": ++i; break; // TODO: Handle Named Ranges
+			}
+		}
+		var parts = parseVector(q.TitlesOfParts).map(function(x) { return utf8read(x.v); });
+		p.SheetNames = parts.slice(widx, widx + p.Worksheets);
+	}
+	return p;
+}
+
+var EXT_PROPS_XML_ROOT = writextag('Properties', null, {
+	'xmlns': XMLNS.EXT_PROPS,
+	'xmlns:vt': XMLNS.vt
+});
+
+function write_ext_props(cp, opts) {
+	var o = [], p = {}, W = writextag;
+	if(!cp) cp = {};
+	cp.Application = "SheetJS";
+	o[o.length] = (XML_HEADER);
+	o[o.length] = (EXT_PROPS_XML_ROOT);
+
+	EXT_PROPS.forEach(function(f) {
+		if(cp[f[1]] === undefined) return;
+		var v;
+		switch(f[2]) {
+			case 'string': v = cp[f[1]]; break;
+			case 'bool': v = cp[f[1]] ? 'true' : 'false'; break;
+		}
+		if(v !== undefined) o[o.length] = (W(f[0], v));
+	});
+
+	/* TODO: HeadingPairs, TitlesOfParts */
+	o[o.length] = (W('HeadingPairs', W('vt:vector', W('vt:variant', '<vt:lpstr>Worksheets</vt:lpstr>')+W('vt:variant', W('vt:i4', String(cp.Worksheets))), {size:2, baseType:"variant"})));
+	o[o.length] = (W('TitlesOfParts', W('vt:vector', cp.SheetNames.map(function(s) { return "<vt:lpstr>" + s + "</vt:lpstr>"; }).join(""), {size: cp.Worksheets, baseType:"lpstr"})));
+	if(o.length>2){ o[o.length] = ('</Properties>'); o[1]=o[1].replace("/>",">"); }
+	return o.join("");
+}
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/35_custprops.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/35_custprops.js
new file mode 100644
index 0000000..5bbb3f2
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/35_custprops.js
@@ -0,0 +1,70 @@
+/* 15.2.12.2 Custom File Properties Part */
+XMLNS.CUST_PROPS = "http://schemas.openxmlformats.org/officeDocument/2006/custom-properties";
+RELS.CUST_PROPS  = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties';
+
+var custregex = /<[^>]+>[^<]*/g;
+function parse_cust_props(data, opts) {
+	var p = {}, name;
+	var m = data.match(custregex);
+	if(m) for(var i = 0; i != m.length; ++i) {
+		var x = m[i], y = parsexmltag(x);
+		switch(y[0]) {
+			case '<?xml': break;
+			case '<Properties':
+				if(y.xmlns !== XMLNS.CUST_PROPS) throw "unrecognized xmlns " + y.xmlns;
+				if(y.xmlnsvt && y.xmlnsvt !== XMLNS.vt) throw "unrecognized vt " + y.xmlnsvt;
+				break;
+			case '<property': name = y.name; break;
+			case '</property>': name = null; break;
+			default: if (x.indexOf('<vt:') === 0) {
+				var toks = x.split('>');
+				var type = toks[0].substring(4), text = toks[1];
+				/* 22.4.2.32 (CT_Variant). Omit the binary types from 22.4 (Variant Types) */
+				switch(type) {
+					case 'lpstr': case 'lpwstr': case 'bstr': case 'lpwstr':
+						p[name] = unescapexml(text);
+						break;
+					case 'bool':
+						p[name] = parsexmlbool(text, '<vt:bool>');
+						break;
+					case 'i1': case 'i2': case 'i4': case 'i8': case 'int': case 'uint':
+						p[name] = parseInt(text, 10);
+						break;
+					case 'r4': case 'r8': case 'decimal':
+						p[name] = parseFloat(text);
+						break;
+					case 'filetime': case 'date':
+						p[name] = new Date(text);
+						break;
+					case 'cy': case 'error':
+						p[name] = unescapexml(text);
+						break;
+					default:
+						if(typeof console !== 'undefined') console.warn('Unexpected', x, type, toks);
+				}
+			} else if(x.substr(0,2) === "</") {
+			} else if(opts.WTF) throw new Error(x);
+		}
+	}
+	return p;
+}
+
+var CUST_PROPS_XML_ROOT = writextag('Properties', null, {
+	'xmlns': XMLNS.CUST_PROPS,
+	'xmlns:vt': XMLNS.vt
+});
+
+function write_cust_props(cp, opts) {
+	var o = [XML_HEADER, CUST_PROPS_XML_ROOT];
+	if(!cp) return o.join("");
+	var pid = 1;
+	keys(cp).forEach(function custprop(k) { ++pid;
+		o[o.length] = (writextag('property', write_vt(cp[k]), {
+			'fmtid': '{D5CDD505-2E9C-101B-9397-08002B2CF9AE}',
+			'pid': pid,
+			'name': k
+		}));
+	});
+	if(o.length>2){ o[o.length] = '</Properties>'; o[1]=o[1].replace("/>",">"); }
+	return o.join("");
+}
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/36_xlsprops.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/36_xlsprops.js
new file mode 100644
index 0000000..215b737
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/36_xlsprops.js
@@ -0,0 +1,8 @@
+function xlml_set_prop(Props, tag, val) {
+	/* TODO: Normalize the properties */
+	switch(tag) {
+		case 'Description': tag = 'Comments'; break;
+	}
+	Props[tag] = val;
+}
+
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/38_xlstypes.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/38_xlstypes.js
new file mode 100644
index 0000000..7744cc2
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/38_xlstypes.js
@@ -0,0 +1,440 @@
+/* [MS-DTYP] 2.3.3 FILETIME */
+/* [MS-OLEDS] 2.1.3 FILETIME (Packet Version) */
+/* [MS-OLEPS] 2.8 FILETIME (Packet Version) */
+function parse_FILETIME(blob) {
+	var dwLowDateTime = blob.read_shift(4), dwHighDateTime = blob.read_shift(4);
+	return new Date(((dwHighDateTime/1e7*Math.pow(2,32) + dwLowDateTime/1e7) - 11644473600)*1000).toISOString().replace(/\.000/,"");
+}
+
+/* [MS-OSHARED] 2.3.3.1.4 Lpstr */
+function parse_lpstr(blob, type, pad) {
+	var str = blob.read_shift(0, 'lpstr');
+	if(pad) blob.l += (4 - ((str.length+1) & 3)) & 3;
+	return str;
+}
+
+/* [MS-OSHARED] 2.3.3.1.6 Lpwstr */
+function parse_lpwstr(blob, type, pad) {
+	var str = blob.read_shift(0, 'lpwstr');
+	if(pad) blob.l += (4 - ((str.length+1) & 3)) & 3;
+	return str;
+}
+
+
+/* [MS-OSHARED] 2.3.3.1.11 VtString */
+/* [MS-OSHARED] 2.3.3.1.12 VtUnalignedString */
+function parse_VtStringBase(blob, stringType, pad) {
+	if(stringType === 0x1F /*VT_LPWSTR*/) return parse_lpwstr(blob);
+	return parse_lpstr(blob, stringType, pad);
+}
+
+function parse_VtString(blob, t, pad) { return parse_VtStringBase(blob, t, pad === false ? 0: 4); }
+function parse_VtUnalignedString(blob, t) { if(!t) throw new Error("dafuq?"); return parse_VtStringBase(blob, t, 0); }
+
+/* [MS-OSHARED] 2.3.3.1.9 VtVecUnalignedLpstrValue */
+function parse_VtVecUnalignedLpstrValue(blob) {
+	var length = blob.read_shift(4);
+	var ret = [];
+	for(var i = 0; i != length; ++i) ret[i] = blob.read_shift(0, 'lpstr');
+	return ret;
+}
+
+/* [MS-OSHARED] 2.3.3.1.10 VtVecUnalignedLpstr */
+function parse_VtVecUnalignedLpstr(blob) {
+	return parse_VtVecUnalignedLpstrValue(blob);
+}
+
+/* [MS-OSHARED] 2.3.3.1.13 VtHeadingPair */
+function parse_VtHeadingPair(blob) {
+	var headingString = parse_TypedPropertyValue(blob, VT_USTR);
+	var headerParts = parse_TypedPropertyValue(blob, VT_I4);
+	return [headingString, headerParts];
+}
+
+/* [MS-OSHARED] 2.3.3.1.14 VtVecHeadingPairValue */
+function parse_VtVecHeadingPairValue(blob) {
+	var cElements = blob.read_shift(4);
+	var out = [];
+	for(var i = 0; i != cElements / 2; ++i) out.push(parse_VtHeadingPair(blob));
+	return out;
+}
+
+/* [MS-OSHARED] 2.3.3.1.15 VtVecHeadingPair */
+function parse_VtVecHeadingPair(blob) {
+	// NOTE: When invoked, wType & padding were already consumed
+	return parse_VtVecHeadingPairValue(blob);
+}
+
+/* [MS-OLEPS] 2.18.1 Dictionary (uses 2.17, 2.16) */
+function parse_dictionary(blob,CodePage) {
+	var cnt = blob.read_shift(4);
+	var dict = {};
+	for(var j = 0; j != cnt; ++j) {
+		var pid = blob.read_shift(4);
+		var len = blob.read_shift(4);
+		dict[pid] = blob.read_shift(len, (CodePage === 0x4B0 ?'utf16le':'utf8')).replace(chr0,'').replace(chr1,'!');
+	}
+	if(blob.l & 3) blob.l = (blob.l>>2+1)<<2;
+	return dict;
+}
+
+/* [MS-OLEPS] 2.9 BLOB */
+function parse_BLOB(blob) {
+	var size = blob.read_shift(4);
+	var bytes = blob.slice(blob.l,blob.l+size);
+	if(size & 3 > 0) blob.l += (4 - (size & 3)) & 3;
+	return bytes;
+}
+
+/* [MS-OLEPS] 2.11 ClipboardData */
+function parse_ClipboardData(blob) {
+	// TODO
+	var o = {};
+	o.Size = blob.read_shift(4);
+	//o.Format = blob.read_shift(4);
+	blob.l += o.Size;
+	return o;
+}
+
+/* [MS-OLEPS] 2.14 Vector and Array Property Types */
+function parse_VtVector(blob, cb) {
+	/* [MS-OLEPS] 2.14.2 VectorHeader */
+/*	var Length = blob.read_shift(4);
+	var o = [];
+	for(var i = 0; i != Length; ++i) {
+		o.push(cb(blob));
+	}
+	return o;*/
+}
+
+/* [MS-OLEPS] 2.15 TypedPropertyValue */
+function parse_TypedPropertyValue(blob, type, _opts) {
+	var t = blob.read_shift(2), ret, opts = _opts||{};
+	blob.l += 2;
+	if(type !== VT_VARIANT)
+	if(t !== type && VT_CUSTOM.indexOf(type)===-1) throw new Error('Expected type ' + type + ' saw ' + t);
+	switch(type === VT_VARIANT ? t : type) {
+		case 0x02 /*VT_I2*/: ret = blob.read_shift(2, 'i'); if(!opts.raw) blob.l += 2; return ret;
+		case 0x03 /*VT_I4*/: ret = blob.read_shift(4, 'i'); return ret;
+		case 0x0B /*VT_BOOL*/: return blob.read_shift(4) !== 0x0;
+		case 0x13 /*VT_UI4*/: ret = blob.read_shift(4); return ret;
+		case 0x1E /*VT_LPSTR*/: return parse_lpstr(blob, t, 4).replace(chr0,'');
+		case 0x1F /*VT_LPWSTR*/: return parse_lpwstr(blob);
+		case 0x40 /*VT_FILETIME*/: return parse_FILETIME(blob);
+		case 0x41 /*VT_BLOB*/: return parse_BLOB(blob);
+		case 0x47 /*VT_CF*/: return parse_ClipboardData(blob);
+		case 0x50 /*VT_STRING*/: return parse_VtString(blob, t, !opts.raw && 4).replace(chr0,'');
+		case 0x51 /*VT_USTR*/: return parse_VtUnalignedString(blob, t, 4).replace(chr0,'');
+		case 0x100C /*VT_VECTOR|VT_VARIANT*/: return parse_VtVecHeadingPair(blob);
+		case 0x101E /*VT_LPSTR*/: return parse_VtVecUnalignedLpstr(blob);
+		default: throw new Error("TypedPropertyValue unrecognized type " + type + " " + t);
+	}
+}
+/* [MS-OLEPS] 2.14.2 VectorHeader */
+/*function parse_VTVectorVariant(blob) {
+	var Length = blob.read_shift(4);
+
+	if(Length & 1 !== 0) throw new Error("VectorHeader Length=" + Length + " must be even");
+	var o = [];
+	for(var i = 0; i != Length; ++i) {
+		o.push(parse_TypedPropertyValue(blob, VT_VARIANT));
+	}
+	return o;
+}*/
+
+/* [MS-OLEPS] 2.20 PropertySet */
+function parse_PropertySet(blob, PIDSI) {
+	var start_addr = blob.l;
+	var size = blob.read_shift(4);
+	var NumProps = blob.read_shift(4);
+	var Props = [], i = 0;
+	var CodePage = 0;
+	var Dictionary = -1, DictObj;
+	for(i = 0; i != NumProps; ++i) {
+		var PropID = blob.read_shift(4);
+		var Offset = blob.read_shift(4);
+		Props[i] = [PropID, Offset + start_addr];
+	}
+	var PropH = {};
+	for(i = 0; i != NumProps; ++i) {
+		if(blob.l !== Props[i][1]) {
+			var fail = true;
+			if(i>0 && PIDSI) switch(PIDSI[Props[i-1][0]].t) {
+				case 0x02 /*VT_I2*/: if(blob.l +2 === Props[i][1]) { blob.l+=2; fail = false; } break;
+				case 0x50 /*VT_STRING*/: if(blob.l <= Props[i][1]) { blob.l=Props[i][1]; fail = false; } break;
+				case 0x100C /*VT_VECTOR|VT_VARIANT*/: if(blob.l <= Props[i][1]) { blob.l=Props[i][1]; fail = false; } break;
+			}
+			if(!PIDSI && blob.l <= Props[i][1]) { fail=false; blob.l = Props[i][1]; }
+			if(fail) throw new Error("Read Error: Expected address " + Props[i][1] + ' at ' + blob.l + ' :' + i);
+		}
+		if(PIDSI) {
+			var piddsi = PIDSI[Props[i][0]];
+			PropH[piddsi.n] = parse_TypedPropertyValue(blob, piddsi.t, {raw:true});
+			if(piddsi.p === 'version') PropH[piddsi.n] = String(PropH[piddsi.n] >> 16) + "." + String(PropH[piddsi.n] & 0xFFFF);
+			if(piddsi.n == "CodePage") switch(PropH[piddsi.n]) {
+				case 0: PropH[piddsi.n] = 1252;
+					/* falls through */
+				case 10000: // OSX Roman
+				case 1252: // Windows Latin
+
+				case 874: // SB Windows Thai
+				case 1250: // SB Windows Central Europe
+				case 1251: // SB Windows Cyrillic
+				case 1253: // SB Windows Greek
+				case 1254: // SB Windows Turkish
+				case 1255: // SB Windows Hebrew
+				case 1256: // SB Windows Arabic
+				case 1257: // SB Windows Baltic
+				case 1258: // SB Windows Vietnam
+
+				case 932: // DB Windows Japanese Shift-JIS
+				case 936: // DB Windows Simplified Chinese GBK
+				case 949: // DB Windows Korean
+				case 950: // DB Windows Traditional Chinese Big5
+
+				case 1200: // UTF16LE
+				case 1201: // UTF16BE
+				case 65000: case -536: // UTF-7
+				case 65001: case -535: // UTF-8
+					set_cp(CodePage = PropH[piddsi.n]); break;
+				default: throw new Error("Unsupported CodePage: " + PropH[piddsi.n]);
+			}
+		} else {
+			if(Props[i][0] === 0x1) {
+				CodePage = PropH.CodePage = parse_TypedPropertyValue(blob, VT_I2);
+				set_cp(CodePage);
+				if(Dictionary !== -1) {
+					var oldpos = blob.l;
+					blob.l = Props[Dictionary][1];
+					DictObj = parse_dictionary(blob,CodePage);
+					blob.l = oldpos;
+				}
+			} else if(Props[i][0] === 0) {
+				if(CodePage === 0) { Dictionary = i; blob.l = Props[i+1][1]; continue; }
+				DictObj = parse_dictionary(blob,CodePage);
+			} else {
+				var name = DictObj[Props[i][0]];
+				var val;
+				/* [MS-OSHARED] 2.3.3.2.3.1.2 + PROPVARIANT */
+				switch(blob[blob.l]) {
+					case 0x41 /*VT_BLOB*/: blob.l += 4; val = parse_BLOB(blob); break;
+					case 0x1E /*VT_LPSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]); break;
+					case 0x1F /*VT_LPWSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]); break;
+					case 0x03 /*VT_I4*/: blob.l += 4; val = blob.read_shift(4, 'i'); break;
+					case 0x13 /*VT_UI4*/: blob.l += 4; val = blob.read_shift(4); break;
+					case 0x05 /*VT_R8*/: blob.l += 4; val = blob.read_shift(8, 'f'); break;
+					case 0x0B /*VT_BOOL*/: blob.l += 4; val = parsebool(blob, 4); break;
+					case 0x40 /*VT_FILETIME*/: blob.l += 4; val = new Date(parse_FILETIME(blob)); break;
+					default: throw new Error("unparsed value: " + blob[blob.l]);
+				}
+				PropH[name] = val;
+			}
+		}
+	}
+	blob.l = start_addr + size; /* step ahead to skip padding */
+	return PropH;
+}
+
+/* [MS-OLEPS] 2.21 PropertySetStream */
+function parse_PropertySetStream(file, PIDSI) {
+	var blob = file.content;
+	prep_blob(blob, 0);
+
+	var NumSets, FMTID0, FMTID1, Offset0, Offset1;
+	blob.chk('feff', 'Byte Order: ');
+
+	var vers = blob.read_shift(2); // TODO: check version
+	var SystemIdentifier = blob.read_shift(4);
+	blob.chk(CFB.utils.consts.HEADER_CLSID, 'CLSID: ');
+	NumSets = blob.read_shift(4);
+	if(NumSets !== 1 && NumSets !== 2) throw "Unrecognized #Sets: " + NumSets;
+	FMTID0 = blob.read_shift(16); Offset0 = blob.read_shift(4);
+
+	if(NumSets === 1 && Offset0 !== blob.l) throw "Length mismatch";
+	else if(NumSets === 2) { FMTID1 = blob.read_shift(16); Offset1 = blob.read_shift(4); }
+	var PSet0 = parse_PropertySet(blob, PIDSI);
+
+	var rval = { SystemIdentifier: SystemIdentifier };
+	for(var y in PSet0) rval[y] = PSet0[y];
+	//rval.blob = blob;
+	rval.FMTID = FMTID0;
+	//rval.PSet0 = PSet0;
+	if(NumSets === 1) return rval;
+	if(blob.l !== Offset1) throw "Length mismatch 2: " + blob.l + " !== " + Offset1;
+	var PSet1;
+	try { PSet1 = parse_PropertySet(blob, null); } catch(e) { }
+	for(y in PSet1) rval[y] = PSet1[y];
+	rval.FMTID = [FMTID0, FMTID1]; // TODO: verify FMTID0/1
+	return rval;
+}
+
+
+function parsenoop2(blob, length) { blob.read_shift(length); return null; }
+
+function parslurp(blob, length, cb) {
+	var arr = [], target = blob.l + length;
+	while(blob.l < target) arr.push(cb(blob, target - blob.l));
+	if(target !== blob.l) throw new Error("Slurp error");
+	return arr;
+}
+
+function parslurp2(blob, length, cb) {
+	var arr = [], target = blob.l + length, len = blob.read_shift(2);
+	while(len-- !== 0) arr.push(cb(blob, target - blob.l));
+	if(target !== blob.l) throw new Error("Slurp error");
+	return arr;
+}
+
+function parsebool(blob, length) { return blob.read_shift(length) === 0x1; }
+
+function parseuint16(blob) { return blob.read_shift(2, 'u'); }
+function parseuint16a(blob, length) { return parslurp(blob,length,parseuint16);}
+
+/* --- 2.5 Structures --- */
+
+/* [MS-XLS] 2.5.14 Boolean */
+var parse_Boolean = parsebool;
+
+/* [MS-XLS] 2.5.10 Bes (boolean or error) */
+function parse_Bes(blob) {
+	var v = blob.read_shift(1), t = blob.read_shift(1);
+	return t === 0x01 ? v : v === 0x01;
+}
+
+/* [MS-XLS] 2.5.240 ShortXLUnicodeString */
+function parse_ShortXLUnicodeString(blob, length, opts) {
+	var cch = blob.read_shift(1);
+	var width = 1, encoding = 'sbcs-cont';
+	var cp = current_codepage;
+	if(opts && opts.biff >= 8) current_codepage = 1200;
+	if(opts === undefined || opts.biff !== 5) {
+		var fHighByte = blob.read_shift(1);
+		if(fHighByte) { width = 2; encoding = 'dbcs-cont'; }
+	}
+	var o = cch ? blob.read_shift(cch, encoding) : "";
+	current_codepage = cp;
+	return o;
+}
+
+/* 2.5.293 XLUnicodeRichExtendedString */
+function parse_XLUnicodeRichExtendedString(blob) {
+	var cp = current_codepage;
+	current_codepage = 1200;
+	var cch = blob.read_shift(2), flags = blob.read_shift(1);
+	var fHighByte = flags & 0x1, fExtSt = flags & 0x4, fRichSt = flags & 0x8;
+	var width = 1 + (flags & 0x1); // 0x0 -> utf8, 0x1 -> dbcs
+	var cRun, cbExtRst;
+	var z = {};
+	if(fRichSt) cRun = blob.read_shift(2);
+	if(fExtSt) cbExtRst = blob.read_shift(4);
+	var encoding = (flags & 0x1) ? 'dbcs-cont' : 'sbcs-cont';
+	var msg = cch === 0 ? "" : blob.read_shift(cch, encoding);
+	if(fRichSt) blob.l += 4 * cRun; //TODO: parse this
+	if(fExtSt) blob.l += cbExtRst; //TODO: parse this
+	z.t = msg;
+	if(!fRichSt) { z.raw = "<t>" + z.t + "</t>"; z.r = z.t; }
+	current_codepage = cp;
+	return z;
+}
+
+/* 2.5.296 XLUnicodeStringNoCch */
+function parse_XLUnicodeStringNoCch(blob, cch, opts) {
+	var retval;
+	var fHighByte = blob.read_shift(1);
+	if(fHighByte===0) { retval = blob.read_shift(cch, 'sbcs-cont'); }
+	else { retval = blob.read_shift(cch, 'dbcs-cont'); }
+	return retval;
+}
+
+/* 2.5.294 XLUnicodeString */
+function parse_XLUnicodeString(blob, length, opts) {
+	var cch = blob.read_shift(opts !== undefined && opts.biff > 0 && opts.biff < 8 ? 1 : 2);
+	if(cch === 0) { blob.l++; return ""; }
+	return parse_XLUnicodeStringNoCch(blob, cch, opts);
+}
+/* BIFF5 override */
+function parse_XLUnicodeString2(blob, length, opts) {
+	if(opts.biff !== 5 && opts.biff !== 2) return parse_XLUnicodeString(blob, length, opts);
+	var cch = blob.read_shift(1);
+	if(cch === 0) { blob.l++; return ""; }
+	return blob.read_shift(cch, 'sbcs-cont');
+}
+
+/* [MS-XLS] 2.5.61 ControlInfo */
+var parse_ControlInfo = parsenoop;
+
+/* [MS-OSHARED] 2.3.7.6 URLMoniker TODO: flags */
+var parse_URLMoniker = function(blob, length) {
+	var len = blob.read_shift(4), start = blob.l;
+	var extra = false;
+	if(len > 24) {
+		/* look ahead */
+		blob.l += len - 24;
+		if(blob.read_shift(16) === "795881f43b1d7f48af2c825dc4852763") extra = true;
+		blob.l = start;
+	}
+	var url = blob.read_shift((extra?len-24:len)>>1, 'utf16le').replace(chr0,"");
+	if(extra) blob.l += 24;
+	return url;
+};
+
+/* [MS-OSHARED] 2.3.7.8 FileMoniker TODO: all fields */
+var parse_FileMoniker = function(blob, length) {
+	var cAnti = blob.read_shift(2);
+	var ansiLength = blob.read_shift(4);
+	var ansiPath = blob.read_shift(ansiLength, 'cstr');
+	var endServer = blob.read_shift(2);
+	var versionNumber = blob.read_shift(2);
+	var cbUnicodePathSize = blob.read_shift(4);
+	if(cbUnicodePathSize === 0) return ansiPath.replace(/\\/g,"/");
+	var cbUnicodePathBytes = blob.read_shift(4);
+	var usKeyValue = blob.read_shift(2);
+	var unicodePath = blob.read_shift(cbUnicodePathBytes>>1, 'utf16le').replace(chr0,"");
+	return unicodePath;
+};
+
+/* [MS-OSHARED] 2.3.7.2 HyperlinkMoniker TODO: all the monikers */
+var parse_HyperlinkMoniker = function(blob, length) {
+	var clsid = blob.read_shift(16); length -= 16;
+	switch(clsid) {
+		case "e0c9ea79f9bace118c8200aa004ba90b": return parse_URLMoniker(blob, length);
+		case "0303000000000000c000000000000046": return parse_FileMoniker(blob, length);
+		default: throw "unsupported moniker " + clsid;
+	}
+};
+
+/* [MS-OSHARED] 2.3.7.9 HyperlinkString */
+var parse_HyperlinkString = function(blob, length) {
+	var len = blob.read_shift(4);
+	var o = blob.read_shift(len, 'utf16le').replace(chr0, "");
+	return o;
+};
+
+/* [MS-OSHARED] 2.3.7.1 Hyperlink Object TODO: unify params with XLSX */
+var parse_Hyperlink = function(blob, length) {
+	var end = blob.l + length;
+	var sVer = blob.read_shift(4);
+	if(sVer !== 2) throw new Error("Unrecognized streamVersion: " + sVer);
+	var flags = blob.read_shift(2);
+	blob.l += 2;
+	var displayName, targetFrameName, moniker, oleMoniker, location, guid, fileTime;
+	if(flags & 0x0010) displayName = parse_HyperlinkString(blob, end - blob.l);
+	if(flags & 0x0080) targetFrameName = parse_HyperlinkString(blob, end - blob.l);
+	if((flags & 0x0101) === 0x0101) moniker = parse_HyperlinkString(blob, end - blob.l);
+	if((flags & 0x0101) === 0x0001) oleMoniker = parse_HyperlinkMoniker(blob, end - blob.l);
+	if(flags & 0x0008) location = parse_HyperlinkString(blob, end - blob.l);
+	if(flags & 0x0020) guid = blob.read_shift(16);
+	if(flags & 0x0040) fileTime = parse_FILETIME(blob, 8);
+	blob.l = end;
+	var target = (targetFrameName||moniker||oleMoniker);
+	if(location) target+="#"+location;
+	return {Target: target};
+};
+
+/* 2.5.178 LongRGBA */
+function parse_LongRGBA(blob, length) { var r = blob.read_shift(1), g = blob.read_shift(1), b = blob.read_shift(1), a = blob.read_shift(1); return [r,g,b,a]; }
+
+/* 2.5.177 LongRGB */
+function parse_LongRGB(blob, length) { var x = parse_LongRGBA(blob, length); x[3] = 0; return x; }
+
+
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/39_xlsbiff.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/39_xlsbiff.js
new file mode 100644
index 0000000..153b7a4
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/39_xlsbiff.js
@@ -0,0 +1,917 @@
+/* --- MS-XLS --- */
+
+/* 2.5.19 */
+function parse_XLSCell(blob, length) {
+	var rw = blob.read_shift(2); // 0-indexed
+	var col = blob.read_shift(2);
+	var ixfe = blob.read_shift(2);
+	return {r:rw, c:col, ixfe:ixfe};
+}
+
+/* 2.5.134 */
+function parse_frtHeader(blob) {
+	var rt = blob.read_shift(2);
+	var flags = blob.read_shift(2); // TODO: parse these flags
+	blob.l += 8;
+	return {type: rt, flags: flags};
+}
+
+
+
+function parse_OptXLUnicodeString(blob, length, opts) { return length === 0 ? "" : parse_XLUnicodeString2(blob, length, opts); }
+
+/* 2.5.158 */
+var HIDEOBJENUM = ['SHOWALL', 'SHOWPLACEHOLDER', 'HIDEALL'];
+var parse_HideObjEnum = parseuint16;
+
+/* 2.5.344 */
+function parse_XTI(blob, length) {
+	var iSupBook = blob.read_shift(2), itabFirst = blob.read_shift(2,'i'), itabLast = blob.read_shift(2,'i');
+	return [iSupBook, itabFirst, itabLast];
+}
+
+/* 2.5.218 */
+function parse_RkRec(blob, length) {
+	var ixfe = blob.read_shift(2);
+	var RK = parse_RkNumber(blob);
+	//console.log("::", ixfe, RK,";;");
+	return [ixfe, RK];
+}
+
+/* 2.5.1 */
+function parse_AddinUdf(blob, length) {
+	blob.l += 4; length -= 4;
+	var l = blob.l + length;
+	var udfName = parse_ShortXLUnicodeString(blob, length);
+	var cb = blob.read_shift(2);
+	l -= blob.l;
+	if(cb !== l) throw "Malformed AddinUdf: padding = " + l + " != " + cb;
+	blob.l += cb;
+	return udfName;
+}
+
+/* 2.5.209 TODO: Check sizes */
+function parse_Ref8U(blob, length) {
+	var rwFirst = blob.read_shift(2);
+	var rwLast = blob.read_shift(2);
+	var colFirst = blob.read_shift(2);
+	var colLast = blob.read_shift(2);
+	return {s:{c:colFirst, r:rwFirst}, e:{c:colLast,r:rwLast}};
+}
+
+/* 2.5.211 */
+function parse_RefU(blob, length) {
+	var rwFirst = blob.read_shift(2);
+	var rwLast = blob.read_shift(2);
+	var colFirst = blob.read_shift(1);
+	var colLast = blob.read_shift(1);
+	return {s:{c:colFirst, r:rwFirst}, e:{c:colLast,r:rwLast}};
+}
+
+/* 2.5.207 */
+var parse_Ref = parse_RefU;
+
+/* 2.5.143 */
+function parse_FtCmo(blob, length) {
+	blob.l += 4;
+	var ot = blob.read_shift(2);
+	var id = blob.read_shift(2);
+	var flags = blob.read_shift(2);
+	blob.l+=12;
+	return [id, ot, flags];
+}
+
+/* 2.5.149 */
+function parse_FtNts(blob, length) {
+	var out = {};
+	blob.l += 4;
+	blob.l += 16; // GUID TODO
+	out.fSharedNote = blob.read_shift(2);
+	blob.l += 4;
+	return out;
+}
+
+/* 2.5.142 */
+function parse_FtCf(blob, length) {
+	var out = {};
+	blob.l += 4;
+	blob.cf = blob.read_shift(2);
+	return out;
+}
+
+/* 2.5.140 - 2.5.154 and friends */
+var FtTab = {
+	0x15: parse_FtCmo,
+	0x13: parsenoop,                                /* FtLbsData */
+	0x12: function(blob, length) { blob.l += 12; }, /* FtCblsData */
+	0x11: function(blob, length) { blob.l += 8; },  /* FtRboData */
+	0x10: parsenoop,                                /* FtEdoData */
+	0x0F: parsenoop,                                /* FtGboData */
+	0x0D: parse_FtNts,                              /* FtNts */
+	0x0C: function(blob, length) { blob.l += 24; }, /* FtSbs */
+	0x0B: function(blob, length) { blob.l += 10; }, /* FtRbo */
+	0x0A: function(blob, length) { blob.l += 16; }, /* FtCbls */
+	0x09: parsenoop,                                /* FtPictFmla */
+	0x08: function(blob, length) { blob.l += 6; },  /* FtPioGrbit */
+	0x07: parse_FtCf,                               /* FtCf */
+	0x06: function(blob, length) { blob.l += 6; },  /* FtGmo */
+	0x04: parsenoop,                                /* FtMacro */
+	0x00: function(blob, length) { blob.l += 4; }   /* FtEnding */
+};
+function parse_FtArray(blob, length, ot) {
+	var s = blob.l;
+	var fts = [];
+	while(blob.l < s + length) {
+		var ft = blob.read_shift(2);
+		blob.l-=2;
+		try {
+			fts.push(FtTab[ft](blob, s + length - blob.l));
+		} catch(e) { blob.l = s + length; return fts; }
+	}
+	if(blob.l != s + length) blob.l = s + length; //throw "bad Object Ft-sequence";
+	return fts;
+}
+
+/* 2.5.129 */
+var parse_FontIndex = parseuint16;
+
+/* --- 2.4 Records --- */
+
+/* 2.4.21 */
+function parse_BOF(blob, length) {
+	var o = {};
+	o.BIFFVer = blob.read_shift(2); length -= 2;
+	switch(o.BIFFVer) {
+		case 0x0600: /* BIFF8 */
+		case 0x0500: /* BIFF5 */
+		case 0x0002: case 0x0007: /* BIFF2 */
+			break;
+		default: throw "Unexpected BIFF Ver " + o.BIFFVer;
+	}
+	blob.read_shift(length);
+	return o;
+}
+
+
+/* 2.4.146 */
+function parse_InterfaceHdr(blob, length) {
+	if(length === 0) return 0x04b0;
+	var q;
+	if((q=blob.read_shift(2))!==0x04b0) throw 'InterfaceHdr codePage ' + q;
+	return 0x04b0;
+}
+
+
+/* 2.4.349 */
+function parse_WriteAccess(blob, length, opts) {
+	if(opts.enc) { blob.l += length; return ""; }
+	var l = blob.l;
+	// TODO: make sure XLUnicodeString doesnt overrun
+	var UserName = parse_XLUnicodeString(blob, 0, opts);
+	blob.read_shift(length + l - blob.l);
+	return UserName;
+}
+
+/* 2.4.28 */
+function parse_BoundSheet8(blob, length, opts) {
+	var pos = blob.read_shift(4);
+	var hidden = blob.read_shift(1) >> 6;
+	var dt = blob.read_shift(1);
+	switch(dt) {
+		case 0: dt = 'Worksheet'; break;
+		case 1: dt = 'Macrosheet'; break;
+		case 2: dt = 'Chartsheet'; break;
+		case 6: dt = 'VBAModule'; break;
+	}
+	var name = parse_ShortXLUnicodeString(blob, 0, opts);
+	if(name.length === 0) name = "Sheet1";
+	return { pos:pos, hs:hidden, dt:dt, name:name };
+}
+
+/* 2.4.265 TODO */
+function parse_SST(blob, length) {
+	var cnt = blob.read_shift(4);
+	var ucnt = blob.read_shift(4);
+	var strs = [];
+	for(var i = 0; i != ucnt; ++i) {
+		strs.push(parse_XLUnicodeRichExtendedString(blob));
+	}
+	strs.Count = cnt; strs.Unique = ucnt;
+	return strs;
+}
+
+/* 2.4.107 */
+function parse_ExtSST(blob, length) {
+	var extsst = {};
+	extsst.dsst = blob.read_shift(2);
+	blob.l += length-2;
+	return extsst;
+}
+
+
+/* 2.4.221 TODO*/
+function parse_Row(blob, length) {
+	var rw = blob.read_shift(2), col = blob.read_shift(2), Col = blob.read_shift(2), rht = blob.read_shift(2);
+	blob.read_shift(4); // reserved(2), unused(2)
+	var flags = blob.read_shift(1); // various flags
+	blob.read_shift(1); // reserved
+	blob.read_shift(2); //ixfe, other flags
+	return {r:rw, c:col, cnt:Col-col};
+}
+
+
+/* 2.4.125 */
+function parse_ForceFullCalculation(blob, length) {
+	var header = parse_frtHeader(blob);
+	if(header.type != 0x08A3) throw "Invalid Future Record " + header.type;
+	var fullcalc = blob.read_shift(4);
+	return fullcalc !== 0x0;
+}
+
+
+var parse_CompressPictures = parsenoop2; /* 2.4.55 Not interesting */
+
+
+
+/* 2.4.215 rt */
+function parse_RecalcId(blob, length) {
+	blob.read_shift(2);
+	return blob.read_shift(4);
+}
+
+/* 2.4.87 */
+function parse_DefaultRowHeight (blob, length) {
+	var f = blob.read_shift(2), miyRw;
+	miyRw = blob.read_shift(2); // flags & 0x02 -> hidden, else empty
+	var fl = {Unsynced:f&1,DyZero:(f&2)>>1,ExAsc:(f&4)>>2,ExDsc:(f&8)>>3};
+	return [fl, miyRw];
+}
+
+/* 2.4.345 TODO */
+function parse_Window1(blob, length) {
+	var xWn = blob.read_shift(2), yWn = blob.read_shift(2), dxWn = blob.read_shift(2), dyWn = blob.read_shift(2);
+	var flags = blob.read_shift(2), iTabCur = blob.read_shift(2), iTabFirst = blob.read_shift(2);
+	var ctabSel = blob.read_shift(2), wTabRatio = blob.read_shift(2);
+	return { Pos: [xWn, yWn], Dim: [dxWn, dyWn], Flags: flags, CurTab: iTabCur,
+		FirstTab: iTabFirst, Selected: ctabSel, TabRatio: wTabRatio };
+}
+
+/* 2.4.122 TODO */
+function parse_Font(blob, length, opts) {
+	blob.l += 14;
+	var name = parse_ShortXLUnicodeString(blob, 0, opts);
+	return name;
+}
+
+/* 2.4.149 */
+function parse_LabelSst(blob, length) {
+	var cell = parse_XLSCell(blob);
+	cell.isst = blob.read_shift(4);
+	return cell;
+}
+
+/* 2.4.148 */
+function parse_Label(blob, length, opts) {
+	var cell = parse_XLSCell(blob, 6);
+	var str = parse_XLUnicodeString(blob, length-6, opts);
+	cell.val = str;
+	return cell;
+}
+
+/* 2.4.126 Number Formats */
+function parse_Format(blob, length, opts) {
+	var ifmt = blob.read_shift(2);
+	var fmtstr = parse_XLUnicodeString2(blob, 0, opts);
+	return [ifmt, fmtstr];
+}
+
+/* 2.4.90 */
+function parse_Dimensions(blob, length) {
+	var w = length === 10 ? 2 : 4;
+	var r = blob.read_shift(w), R = blob.read_shift(w),
+	    c = blob.read_shift(2), C = blob.read_shift(2);
+	blob.l += 2;
+	return {s: {r:r, c:c}, e: {r:R, c:C}};
+}
+
+/* 2.4.220 */
+function parse_RK(blob, length) {
+	var rw = blob.read_shift(2), col = blob.read_shift(2);
+	var rkrec = parse_RkRec(blob);
+	return {r:rw, c:col, ixfe:rkrec[0], rknum:rkrec[1]};
+}
+
+/* 2.4.175 */
+function parse_MulRk(blob, length) {
+	var target = blob.l + length - 2;
+	var rw = blob.read_shift(2), col = blob.read_shift(2);
+	var rkrecs = [];
+	while(blob.l < target) rkrecs.push(parse_RkRec(blob));
+	if(blob.l !== target) throw "MulRK read error";
+	var lastcol = blob.read_shift(2);
+	if(rkrecs.length != lastcol - col + 1) throw "MulRK length mismatch";
+	return {r:rw, c:col, C:lastcol, rkrec:rkrecs};
+}
+
+/* 2.5.20 2.5.249 TODO */
+function parse_CellStyleXF(blob, length, style) {
+	var o = {};
+	var a = blob.read_shift(4), b = blob.read_shift(4);
+	var c = blob.read_shift(4), d = blob.read_shift(2);
+	o.patternType = XLSFillPattern[c >> 26];
+	o.icvFore = d & 0x7F;
+	o.icvBack = (d >> 7) & 0x7F;
+	return o;
+}
+function parse_CellXF(blob, length) {return parse_CellStyleXF(blob,length,0);}
+function parse_StyleXF(blob, length) {return parse_CellStyleXF(blob,length,1);}
+
+/* 2.4.353 TODO: actually do this right */
+function parse_XF(blob, length) {
+	var o = {};
+	o.ifnt = blob.read_shift(2); o.ifmt = blob.read_shift(2); o.flags = blob.read_shift(2);
+	o.fStyle = (o.flags >> 2) & 0x01;
+	length -= 6;
+	o.data = parse_CellStyleXF(blob, length, o.fStyle);
+	return o;
+}
+
+/* 2.4.134 */
+function parse_Guts(blob, length) {
+	blob.l += 4;
+	var out = [blob.read_shift(2), blob.read_shift(2)];
+	if(out[0] !== 0) out[0]--;
+	if(out[1] !== 0) out[1]--;
+	if(out[0] > 7 || out[1] > 7) throw "Bad Gutters: " + out;
+	return out;
+}
+
+/* 2.4.24 */
+function parse_BoolErr(blob, length) {
+	var cell = parse_XLSCell(blob, 6);
+	var val = parse_Bes(blob, 2);
+	cell.val = val;
+	cell.t = (val === true || val === false) ? 'b' : 'e';
+	return cell;
+}
+
+/* 2.4.180 Number */
+function parse_Number(blob, length) {
+	var cell = parse_XLSCell(blob, 6);
+	var xnum = parse_Xnum(blob, 8);
+	cell.val = xnum;
+	return cell;
+}
+
+var parse_XLHeaderFooter = parse_OptXLUnicodeString; // TODO: parse 2.4.136
+
+/* 2.4.271 */
+function parse_SupBook(blob, length, opts) {
+	var end = blob.l + length;
+	var ctab = blob.read_shift(2);
+	var cch = blob.read_shift(2);
+	var virtPath;
+	if(cch >=0x01 && cch <=0xff) virtPath = parse_XLUnicodeStringNoCch(blob, cch);
+	var rgst = blob.read_shift(end - blob.l);
+	opts.sbcch = cch;
+	return [cch, ctab, virtPath, rgst];
+}
+
+/* 2.4.105 TODO */
+function parse_ExternName(blob, length, opts) {
+	var flags = blob.read_shift(2);
+	var body;
+	var o = {
+		fBuiltIn: flags & 0x01,
+		fWantAdvise: (flags >>> 1) & 0x01,
+		fWantPict: (flags >>> 2) & 0x01,
+		fOle: (flags >>> 3) & 0x01,
+		fOleLink: (flags >>> 4) & 0x01,
+		cf: (flags >>> 5) & 0x3FF,
+		fIcon: flags >>> 15 & 0x01
+	};
+	if(opts.sbcch === 0x3A01) body = parse_AddinUdf(blob, length-2);
+	//else throw new Error("unsupported SupBook cch: " + opts.sbcch);
+	o.body = body || blob.read_shift(length-2);
+	return o;
+}
+
+/* 2.4.150 TODO */
+function parse_Lbl(blob, length, opts) {
+	if(opts.biff < 8) return parse_Label(blob, length, opts);
+	var target = blob.l + length;
+	var flags = blob.read_shift(2);
+	var chKey = blob.read_shift(1);
+	var cch = blob.read_shift(1);
+	var cce = blob.read_shift(2);
+	blob.l += 2;
+	var itab = blob.read_shift(2);
+	blob.l += 4;
+	var name = parse_XLUnicodeStringNoCch(blob, cch, opts);
+	var rgce = parse_NameParsedFormula(blob, target - blob.l, opts, cce);
+	return {
+		chKey: chKey,
+		Name: name,
+		rgce: rgce
+	};
+}
+
+/* 2.4.106 TODO: verify supbook manipulation */
+function parse_ExternSheet(blob, length, opts) {
+	if(opts.biff < 8) return parse_ShortXLUnicodeString(blob, length, opts);
+	var o = parslurp2(blob,length,parse_XTI);
+	var oo = [];
+	if(opts.sbcch === 0x0401) {
+		for(var i = 0; i != o.length; ++i) oo.push(opts.snames[o[i][1]]);
+		return oo;
+	}
+	else return o;
+}
+
+/* 2.4.260 */
+function parse_ShrFmla(blob, length, opts) {
+	var ref = parse_RefU(blob, 6);
+	blob.l++;
+	var cUse = blob.read_shift(1);
+	length -= 8;
+	return [parse_SharedParsedFormula(blob, length, opts), cUse];
+}
+
+/* 2.4.4 TODO */
+function parse_Array(blob, length, opts) {
+	var ref = parse_Ref(blob, 6);
+	blob.l += 6; length -= 12; /* TODO: fAlwaysCalc */
+	return [ref, parse_ArrayParsedFormula(blob, length, opts, ref)];
+}
+
+/* 2.4.173 */
+function parse_MTRSettings(blob, length) {
+	var fMTREnabled = blob.read_shift(4) !== 0x00;
+	var fUserSetThreadCount = blob.read_shift(4) !== 0x00;
+	var cUserThreadCount = blob.read_shift(4);
+	return [fMTREnabled, fUserSetThreadCount, cUserThreadCount];
+}
+
+/* 2.5.186 TODO: BIFF5 */
+function parse_NoteSh(blob, length, opts) {
+	if(opts.biff < 8) return;
+	var row = blob.read_shift(2), col = blob.read_shift(2);
+	var flags = blob.read_shift(2), idObj = blob.read_shift(2);
+	var stAuthor = parse_XLUnicodeString2(blob, 0, opts);
+	if(opts.biff < 8) blob.read_shift(1);
+	return [{r:row,c:col}, stAuthor, idObj, flags];
+}
+
+/* 2.4.179 */
+function parse_Note(blob, length, opts) {
+	/* TODO: Support revisions */
+	return parse_NoteSh(blob, length, opts);
+}
+
+/* 2.4.168 */
+function parse_MergeCells(blob, length) {
+	var merges = [];
+	var cmcs = blob.read_shift(2);
+	while (cmcs--) merges.push(parse_Ref8U(blob,length));
+	return merges;
+}
+
+/* 2.4.181 TODO: parse all the things! */
+function parse_Obj(blob, length) {
+	var cmo = parse_FtCmo(blob, 22); // id, ot, flags
+	var fts = parse_FtArray(blob, length-22, cmo[1]);
+	return { cmo: cmo, ft:fts };
+}
+
+/* 2.4.329 TODO: parse properly */
+function parse_TxO(blob, length, opts) {
+	var s = blob.l;
+try {
+	blob.l += 4;
+	var ot = (opts.lastobj||{cmo:[0,0]}).cmo[1];
+	var controlInfo;
+	if([0,5,7,11,12,14].indexOf(ot) == -1) blob.l += 6;
+	else controlInfo = parse_ControlInfo(blob, 6, opts);
+	var cchText = blob.read_shift(2);
+	var cbRuns = blob.read_shift(2);
+	var ifntEmpty = parse_FontIndex(blob, 2);
+	var len = blob.read_shift(2);
+	blob.l += len;
+	//var fmla = parse_ObjFmla(blob, s + length - blob.l);
+
+	var texts = "";
+	for(var i = 1; i < blob.lens.length-1; ++i) {
+		if(blob.l-s != blob.lens[i]) throw "TxO: bad continue record";
+		var hdr = blob[blob.l];
+		var t = parse_XLUnicodeStringNoCch(blob, blob.lens[i+1]-blob.lens[i]-1);
+		texts += t;
+		if(texts.length >= (hdr ? cchText : 2*cchText)) break;
+	}
+	if(texts.length !== cchText && texts.length !== cchText*2) {
+		throw "cchText: " + cchText + " != " + texts.length;
+	}
+
+	blob.l = s + length;
+	/* 2.5.272 TxORuns */
+//	var rgTxoRuns = [];
+//	for(var j = 0; j != cbRuns/8-1; ++j) blob.l += 8;
+//	var cchText2 = blob.read_shift(2);
+//	if(cchText2 !== cchText) throw "TxOLastRun mismatch: " + cchText2 + " " + cchText;
+//	blob.l += 6;
+//	if(s + length != blob.l) throw "TxO " + (s + length) + ", at " + blob.l;
+	return { t: texts };
+} catch(e) { blob.l = s + length; return { t: texts||"" }; }
+}
+
+/* 2.4.140 */
+var parse_HLink = function(blob, length) {
+	var ref = parse_Ref8U(blob, 8);
+	blob.l += 16; /* CLSID */
+	var hlink = parse_Hyperlink(blob, length-24);
+	return [ref, hlink];
+};
+
+/* 2.4.141 */
+var parse_HLinkTooltip = function(blob, length) {
+	var end = blob.l + length;
+	blob.read_shift(2);
+	var ref = parse_Ref8U(blob, 8);
+	var wzTooltip = blob.read_shift((length-10)/2, 'dbcs-cont');
+	wzTooltip = wzTooltip.replace(chr0,"");
+	return [ref, wzTooltip];
+};
+
+/* 2.4.63 */
+function parse_Country(blob, length) {
+	var o = [], d;
+	d = blob.read_shift(2); o[0] = CountryEnum[d] || d;
+	d = blob.read_shift(2); o[1] = CountryEnum[d] || d;
+	return o;
+}
+
+/* 2.4.50 ClrtClient */
+function parse_ClrtClient(blob, length) {
+	var ccv = blob.read_shift(2);
+	var o = [];
+	while(ccv-->0) o.push(parse_LongRGB(blob, 8));
+	return o;
+}
+
+/* 2.4.188 */
+function parse_Palette(blob, length) {
+	var ccv = blob.read_shift(2);
+	var o = [];
+	while(ccv-->0) o.push(parse_LongRGB(blob, 8));
+	return o;
+}
+
+/* 2.4.354 */
+function parse_XFCRC(blob, length) {
+	blob.l += 2;
+	var o = {cxfs:0, crc:0};
+	o.cxfs = blob.read_shift(2);
+	o.crc = blob.read_shift(4);
+	return o;
+}
+
+
+var parse_Style = parsenoop;
+var parse_StyleExt = parsenoop;
+
+var parse_ColInfo = parsenoop;
+
+var parse_Window2 = parsenoop;
+
+
+var parse_Backup = parsebool; /* 2.4.14 */
+var parse_Blank = parse_XLSCell; /* 2.4.20 Just the cell */
+var parse_BottomMargin = parse_Xnum; /* 2.4.27 */
+var parse_BuiltInFnGroupCount = parseuint16; /* 2.4.30 0x0E or 0x10 but excel 2011 generates 0x11? */
+var parse_CalcCount = parseuint16; /* 2.4.31 #Iterations */
+var parse_CalcDelta = parse_Xnum; /* 2.4.32 */
+var parse_CalcIter = parsebool;  /* 2.4.33 1=iterative calc */
+var parse_CalcMode = parseuint16; /* 2.4.34 0=manual, 1=auto (def), 2=table */
+var parse_CalcPrecision = parsebool; /* 2.4.35 */
+var parse_CalcRefMode = parsenoop2; /* 2.4.36 */
+var parse_CalcSaveRecalc = parsebool; /* 2.4.37 */
+var parse_CodePage = parseuint16; /* 2.4.52 */
+var parse_Compat12 = parsebool; /* 2.4.54 true = no compatibility check */
+var parse_Date1904 = parsebool; /* 2.4.77 - 1=1904,0=1900 */
+var parse_DefColWidth = parseuint16; /* 2.4.89 */
+var parse_DSF = parsenoop2; /* 2.4.94 -- MUST be ignored */
+var parse_EntExU2 = parsenoop2; /* 2.4.102 -- Explicitly says to ignore */
+var parse_EOF = parsenoop2; /* 2.4.103 */
+var parse_Excel9File = parsenoop2; /* 2.4.104 -- Optional and unused */
+var parse_FeatHdr = parsenoop2; /* 2.4.112 */
+var parse_FontX = parseuint16; /* 2.4.123 */
+var parse_Footer = parse_XLHeaderFooter; /* 2.4.124 */
+var parse_GridSet = parseuint16; /* 2.4.132, =1 */
+var parse_HCenter = parsebool; /* 2.4.135 sheet centered horizontal on print */
+var parse_Header = parse_XLHeaderFooter; /* 2.4.136 */
+var parse_HideObj = parse_HideObjEnum; /* 2.4.139 */
+var parse_InterfaceEnd = parsenoop2; /* 2.4.145 -- noop */
+var parse_LeftMargin = parse_Xnum; /* 2.4.151 */
+var parse_Mms = parsenoop2; /* 2.4.169 -- Explicitly says to ignore */
+var parse_ObjProtect = parsebool; /* 2.4.183 -- must be 1 if present */
+var parse_Password = parseuint16; /* 2.4.191 */
+var parse_PrintGrid = parsebool; /* 2.4.202 */
+var parse_PrintRowCol = parsebool; /* 2.4.203 */
+var parse_PrintSize = parseuint16; /* 2.4.204 0:3 */
+var parse_Prot4Rev = parsebool; /* 2.4.205 */
+var parse_Prot4RevPass = parseuint16; /* 2.4.206 */
+var parse_Protect = parsebool; /* 2.4.207 */
+var parse_RefreshAll = parsebool; /* 2.4.217 -- must be 0 if not template */
+var parse_RightMargin = parse_Xnum; /* 2.4.219 */
+var parse_RRTabId = parseuint16a; /* 2.4.241 */
+var parse_ScenarioProtect = parsebool; /* 2.4.245 */
+var parse_Scl = parseuint16a; /* 2.4.247 num, den */
+var parse_String = parse_XLUnicodeString; /* 2.4.268 */
+var parse_SxBool = parsebool; /* 2.4.274 */
+var parse_TopMargin = parse_Xnum; /* 2.4.328 */
+var parse_UsesELFs = parsebool; /* 2.4.337 -- should be 0 */
+var parse_VCenter = parsebool; /* 2.4.342 */
+var parse_WinProtect = parsebool; /* 2.4.347 */
+var parse_WriteProtect = parsenoop; /* 2.4.350 empty record */
+
+
+/* ---- */
+var parse_VerticalPageBreaks = parsenoop;
+var parse_HorizontalPageBreaks = parsenoop;
+var parse_Selection = parsenoop;
+var parse_Continue = parsenoop;
+var parse_Pane = parsenoop;
+var parse_Pls = parsenoop;
+var parse_DCon = parsenoop;
+var parse_DConRef = parsenoop;
+var parse_DConName = parsenoop;
+var parse_XCT = parsenoop;
+var parse_CRN = parsenoop;
+var parse_FileSharing = parsenoop;
+var parse_Uncalced = parsenoop;
+var parse_Template = parsenoop;
+var parse_Intl = parsenoop;
+var parse_WsBool = parsenoop;
+var parse_Sort = parsenoop;
+var parse_Sync = parsenoop;
+var parse_LPr = parsenoop;
+var parse_DxGCol = parsenoop;
+var parse_FnGroupName = parsenoop;
+var parse_FilterMode = parsenoop;
+var parse_AutoFilterInfo = parsenoop;
+var parse_AutoFilter = parsenoop;
+var parse_Setup = parsenoop;
+var parse_ScenMan = parsenoop;
+var parse_SCENARIO = parsenoop;
+var parse_SxView = parsenoop;
+var parse_Sxvd = parsenoop;
+var parse_SXVI = parsenoop;
+var parse_SxIvd = parsenoop;
+var parse_SXLI = parsenoop;
+var parse_SXPI = parsenoop;
+var parse_DocRoute = parsenoop;
+var parse_RecipName = parsenoop;
+var parse_MulBlank = parsenoop;
+var parse_SXDI = parsenoop;
+var parse_SXDB = parsenoop;
+var parse_SXFDB = parsenoop;
+var parse_SXDBB = parsenoop;
+var parse_SXNum = parsenoop;
+var parse_SxErr = parsenoop;
+var parse_SXInt = parsenoop;
+var parse_SXString = parsenoop;
+var parse_SXDtr = parsenoop;
+var parse_SxNil = parsenoop;
+var parse_SXTbl = parsenoop;
+var parse_SXTBRGIITM = parsenoop;
+var parse_SxTbpg = parsenoop;
+var parse_ObProj = parsenoop;
+var parse_SXStreamID = parsenoop;
+var parse_DBCell = parsenoop;
+var parse_SXRng = parsenoop;
+var parse_SxIsxoper = parsenoop;
+var parse_BookBool = parsenoop;
+var parse_DbOrParamQry = parsenoop;
+var parse_OleObjectSize = parsenoop;
+var parse_SXVS = parsenoop;
+var parse_BkHim = parsenoop;
+var parse_MsoDrawingGroup = parsenoop;
+var parse_MsoDrawing = parsenoop;
+var parse_MsoDrawingSelection = parsenoop;
+var parse_PhoneticInfo = parsenoop;
+var parse_SxRule = parsenoop;
+var parse_SXEx = parsenoop;
+var parse_SxFilt = parsenoop;
+var parse_SxDXF = parsenoop;
+var parse_SxItm = parsenoop;
+var parse_SxName = parsenoop;
+var parse_SxSelect = parsenoop;
+var parse_SXPair = parsenoop;
+var parse_SxFmla = parsenoop;
+var parse_SxFormat = parsenoop;
+var parse_SXVDEx = parsenoop;
+var parse_SXFormula = parsenoop;
+var parse_SXDBEx = parsenoop;
+var parse_RRDInsDel = parsenoop;
+var parse_RRDHead = parsenoop;
+var parse_RRDChgCell = parsenoop;
+var parse_RRDRenSheet = parsenoop;
+var parse_RRSort = parsenoop;
+var parse_RRDMove = parsenoop;
+var parse_RRFormat = parsenoop;
+var parse_RRAutoFmt = parsenoop;
+var parse_RRInsertSh = parsenoop;
+var parse_RRDMoveBegin = parsenoop;
+var parse_RRDMoveEnd = parsenoop;
+var parse_RRDInsDelBegin = parsenoop;
+var parse_RRDInsDelEnd = parsenoop;
+var parse_RRDConflict = parsenoop;
+var parse_RRDDefName = parsenoop;
+var parse_RRDRstEtxp = parsenoop;
+var parse_LRng = parsenoop;
+var parse_CUsr = parsenoop;
+var parse_CbUsr = parsenoop;
+var parse_UsrInfo = parsenoop;
+var parse_UsrExcl = parsenoop;
+var parse_FileLock = parsenoop;
+var parse_RRDInfo = parsenoop;
+var parse_BCUsrs = parsenoop;
+var parse_UsrChk = parsenoop;
+var parse_UserBView = parsenoop;
+var parse_UserSViewBegin = parsenoop; // overloaded
+var parse_UserSViewEnd = parsenoop;
+var parse_RRDUserView = parsenoop;
+var parse_Qsi = parsenoop;
+var parse_CondFmt = parsenoop;
+var parse_CF = parsenoop;
+var parse_DVal = parsenoop;
+var parse_DConBin = parsenoop;
+var parse_Lel = parsenoop;
+var parse_XLSCodeName = parse_XLUnicodeString;
+var parse_SXFDBType = parsenoop;
+var parse_ObNoMacros = parsenoop;
+var parse_Dv = parsenoop;
+var parse_Index = parsenoop;
+var parse_Table = parsenoop;
+var parse_BigName = parsenoop;
+var parse_ContinueBigName = parsenoop;
+var parse_WebPub = parsenoop;
+var parse_QsiSXTag = parsenoop;
+var parse_DBQueryExt = parsenoop;
+var parse_ExtString = parsenoop;
+var parse_TxtQry = parsenoop;
+var parse_Qsir = parsenoop;
+var parse_Qsif = parsenoop;
+var parse_RRDTQSIF = parsenoop;
+var parse_OleDbConn = parsenoop;
+var parse_WOpt = parsenoop;
+var parse_SXViewEx = parsenoop;
+var parse_SXTH = parsenoop;
+var parse_SXPIEx = parsenoop;
+var parse_SXVDTEx = parsenoop;
+var parse_SXViewEx9 = parsenoop;
+var parse_ContinueFrt = parsenoop;
+var parse_RealTimeData = parsenoop;
+var parse_ChartFrtInfo = parsenoop;
+var parse_FrtWrapper = parsenoop;
+var parse_StartBlock = parsenoop;
+var parse_EndBlock = parsenoop;
+var parse_StartObject = parsenoop;
+var parse_EndObject = parsenoop;
+var parse_CatLab = parsenoop;
+var parse_YMult = parsenoop;
+var parse_SXViewLink = parsenoop;
+var parse_PivotChartBits = parsenoop;
+var parse_FrtFontList = parsenoop;
+var parse_SheetExt = parsenoop;
+var parse_BookExt = parsenoop;
+var parse_SXAddl = parsenoop;
+var parse_CrErr = parsenoop;
+var parse_HFPicture = parsenoop;
+var parse_Feat = parsenoop;
+var parse_DataLabExt = parsenoop;
+var parse_DataLabExtContents = parsenoop;
+var parse_CellWatch = parsenoop;
+var parse_FeatHdr11 = parsenoop;
+var parse_Feature11 = parsenoop;
+var parse_DropDownObjIds = parsenoop;
+var parse_ContinueFrt11 = parsenoop;
+var parse_DConn = parsenoop;
+var parse_List12 = parsenoop;
+var parse_Feature12 = parsenoop;
+var parse_CondFmt12 = parsenoop;
+var parse_CF12 = parsenoop;
+var parse_CFEx = parsenoop;
+var parse_AutoFilter12 = parsenoop;
+var parse_ContinueFrt12 = parsenoop;
+var parse_MDTInfo = parsenoop;
+var parse_MDXStr = parsenoop;
+var parse_MDXTuple = parsenoop;
+var parse_MDXSet = parsenoop;
+var parse_MDXProp = parsenoop;
+var parse_MDXKPI = parsenoop;
+var parse_MDB = parsenoop;
+var parse_PLV = parsenoop;
+var parse_DXF = parsenoop;
+var parse_TableStyles = parsenoop;
+var parse_TableStyle = parsenoop;
+var parse_TableStyleElement = parsenoop;
+var parse_NamePublish = parsenoop;
+var parse_NameCmt = parsenoop;
+var parse_SortData = parsenoop;
+var parse_GUIDTypeLib = parsenoop;
+var parse_FnGrp12 = parsenoop;
+var parse_NameFnGrp12 = parsenoop;
+var parse_HeaderFooter = parsenoop;
+var parse_CrtLayout12 = parsenoop;
+var parse_CrtMlFrt = parsenoop;
+var parse_CrtMlFrtContinue = parsenoop;
+var parse_ShapePropsStream = parsenoop;
+var parse_TextPropsStream = parsenoop;
+var parse_RichTextStream = parsenoop;
+var parse_CrtLayout12A = parsenoop;
+var parse_Units = parsenoop;
+var parse_Chart = parsenoop;
+var parse_Series = parsenoop;
+var parse_DataFormat = parsenoop;
+var parse_LineFormat = parsenoop;
+var parse_MarkerFormat = parsenoop;
+var parse_AreaFormat = parsenoop;
+var parse_PieFormat = parsenoop;
+var parse_AttachedLabel = parsenoop;
+var parse_SeriesText = parsenoop;
+var parse_ChartFormat = parsenoop;
+var parse_Legend = parsenoop;
+var parse_SeriesList = parsenoop;
+var parse_Bar = parsenoop;
+var parse_Line = parsenoop;
+var parse_Pie = parsenoop;
+var parse_Area = parsenoop;
+var parse_Scatter = parsenoop;
+var parse_CrtLine = parsenoop;
+var parse_Axis = parsenoop;
+var parse_Tick = parsenoop;
+var parse_ValueRange = parsenoop;
+var parse_CatSerRange = parsenoop;
+var parse_AxisLine = parsenoop;
+var parse_CrtLink = parsenoop;
+var parse_DefaultText = parsenoop;
+var parse_Text = parsenoop;
+var parse_ObjectLink = parsenoop;
+var parse_Frame = parsenoop;
+var parse_Begin = parsenoop;
+var parse_End = parsenoop;
+var parse_PlotArea = parsenoop;
+var parse_Chart3d = parsenoop;
+var parse_PicF = parsenoop;
+var parse_DropBar = parsenoop;
+var parse_Radar = parsenoop;
+var parse_Surf = parsenoop;
+var parse_RadarArea = parsenoop;
+var parse_AxisParent = parsenoop;
+var parse_LegendException = parsenoop;
+var parse_ShtProps = parsenoop;
+var parse_SerToCrt = parsenoop;
+var parse_AxesUsed = parsenoop;
+var parse_SBaseRef = parsenoop;
+var parse_SerParent = parsenoop;
+var parse_SerAuxTrend = parsenoop;
+var parse_IFmtRecord = parsenoop;
+var parse_Pos = parsenoop;
+var parse_AlRuns = parsenoop;
+var parse_BRAI = parsenoop;
+var parse_SerAuxErrBar = parsenoop;
+var parse_SerFmt = parsenoop;
+var parse_Chart3DBarShape = parsenoop;
+var parse_Fbi = parsenoop;
+var parse_BopPop = parsenoop;
+var parse_AxcExt = parsenoop;
+var parse_Dat = parsenoop;
+var parse_PlotGrowth = parsenoop;
+var parse_SIIndex = parsenoop;
+var parse_GelFrame = parsenoop;
+var parse_BopPopCustom = parsenoop;
+var parse_Fbi2 = parsenoop;
+
+/* --- Specific to versions before BIFF8 --- */
+function parse_BIFF5String(blob) {
+	var len = blob.read_shift(1);
+	return blob.read_shift(len, 'sbcs-cont');
+}
+
+/* BIFF2_??? where ??? is the name from [XLS] */
+function parse_BIFF2STR(blob, length, opts) {
+	var cell = parse_XLSCell(blob, 6);
+	++blob.l;
+	var str = parse_XLUnicodeString2(blob, length-7, opts);
+	cell.val = str;
+	return cell;
+}
+
+function parse_BIFF2NUM(blob, length, opts) {
+	var cell = parse_XLSCell(blob, 6);
+	++blob.l;
+	var num = parse_Xnum(blob, 8);
+	cell.val = num;
+	return cell;
+}
+
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/42_sstxml.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/42_sstxml.js
new file mode 100644
index 0000000..d67e14d
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/42_sstxml.js
@@ -0,0 +1,204 @@
+/* 18.4.1 charset to codepage mapping */
+var CS2CP = {
+	0:    1252, /* ANSI */
+	1:   65001, /* DEFAULT */
+	2:   65001, /* SYMBOL */
+	77:  10000, /* MAC */
+	128:   932, /* SHIFTJIS */
+	129:   949, /* HANGUL */
+	130:  1361, /* JOHAB */
+	134:   936, /* GB2312 */
+	136:   950, /* CHINESEBIG5 */
+	161:  1253, /* GREEK */
+	162:  1254, /* TURKISH */
+	163:  1258, /* VIETNAMESE */
+	177:  1255, /* HEBREW */
+	178:  1256, /* ARABIC */
+	186:  1257, /* BALTIC */
+	204:  1251, /* RUSSIAN */
+	222:   874, /* THAI */
+	238:  1250, /* EASTEUROPE */
+	255:  1252, /* OEM */
+	69:   6969  /* MISC */
+};
+
+/* Parse a list of <r> tags */
+var parse_rs = (function parse_rs_factory() {
+	var tregex = matchtag("t"), rpregex = matchtag("rPr"), rregex = /<r>/g, rend = /<\/r>/, nlregex = /\r\n/g;
+	/* 18.4.7 rPr CT_RPrElt */
+	var parse_rpr = function parse_rpr(rpr, intro, outro) {
+		var font = {}, cp = 65001;
+		var m = rpr.match(tagregex), i = 0;
+		if(m) for(;i!=m.length; ++i) {
+			var y = parsexmltag(m[i]);
+			switch(y[0]) {
+				/* 18.8.12 condense CT_BooleanProperty */
+				/* ** not required . */
+				case '<condense': break;
+				/* 18.8.17 extend CT_BooleanProperty */
+				/* ** not required . */
+				case '<extend': break;
+				/* 18.8.36 shadow CT_BooleanProperty */
+				/* ** not required . */
+				case '<shadow':
+					/* falls through */
+				case '<shadow/>': break;
+
+				/* 18.4.1 charset CT_IntProperty TODO */
+				case '<charset':
+					if(y.val == '1') break;
+					cp = CS2CP[parseInt(y.val, 10)];
+					break;
+
+				/* 18.4.2 outline CT_BooleanProperty TODO */
+				case '<outline':
+					/* falls through */
+				case '<outline/>': break;
+
+				/* 18.4.5 rFont CT_FontName */
+				case '<rFont': font.name = y.val; break;
+
+				/* 18.4.11 sz CT_FontSize */
+				case '<sz': font.sz = y.val; break;
+
+				/* 18.4.10 strike CT_BooleanProperty */
+				case '<strike':
+					if(!y.val) break;
+					/* falls through */
+				case '<strike/>': font.strike = 1; break;
+				case '</strike>': break;
+
+				/* 18.4.13 u CT_UnderlineProperty */
+				case '<u':
+					if(!y.val) break;
+					/* falls through */
+				case '<u/>': font.u = 1; break;
+				case '</u>': break;
+
+				/* 18.8.2 b */
+				case '<b':
+					if(!y.val) break;
+					/* falls through */
+				case '<b/>': font.b = 1; break;
+				case '</b>': break;
+
+				/* 18.8.26 i */
+				case '<i':
+					if(!y.val) break;
+					/* falls through */
+				case '<i/>': font.i = 1; break;
+				case '</i>': break;
+
+				/* 18.3.1.15 color CT_Color TODO: tint, theme, auto, indexed */
+				case '<color':
+					if(y.rgb) font.color = y.rgb.substr(2,6);
+					break;
+
+				/* 18.8.18 family ST_FontFamily */
+				case '<family': font.family = y.val; break;
+
+				/* 18.4.14 vertAlign CT_VerticalAlignFontProperty TODO */
+				case '<vertAlign': break;
+
+				/* 18.8.35 scheme CT_FontScheme TODO */
+				case '<scheme': break;
+
+				default:
+					if(y[0].charCodeAt(1) !== 47) throw 'Unrecognized rich format ' + y[0];
+			}
+		}
+		/* TODO: These should be generated styles, not inline */
+		var style = [];
+		if(font.b) style.push("font-weight: bold;");
+		if(font.i) style.push("font-style: italic;");
+		intro.push('<span style="' + style.join("") + '">');
+		outro.push("</span>");
+		return cp;
+	};
+
+	/* 18.4.4 r CT_RElt */
+	function parse_r(r) {
+		var terms = [[],"",[]];
+		/* 18.4.12 t ST_Xstring */
+		var t = r.match(tregex), cp = 65001;
+		if(!isval(t)) return "";
+		terms[1] = t[1];
+
+		var rpr = r.match(rpregex);
+		if(isval(rpr)) cp = parse_rpr(rpr[1], terms[0], terms[2]);
+
+		return terms[0].join("") + terms[1].replace(nlregex,'<br/>') + terms[2].join("");
+	}
+	return function parse_rs(rs) {
+		return rs.replace(rregex,"").split(rend).map(parse_r).join("");
+	};
+})();
+
+/* 18.4.8 si CT_Rst */
+var sitregex = /<t[^>]*>([^<]*)<\/t>/g, sirregex = /<r>/;
+function parse_si(x, opts) {
+	var html = opts ? opts.cellHTML : true;
+	var z = {};
+	if(!x) return null;
+	var y;
+	/* 18.4.12 t ST_Xstring (Plaintext String) */
+	if(x.charCodeAt(1) === 116) {
+		z.t = utf8read(unescapexml(x.substr(x.indexOf(">")+1).split(/<\/t>/)[0]));
+		z.r = x;
+		if(html) z.h = z.t;
+	}
+	/* 18.4.4 r CT_RElt (Rich Text Run) */
+	else if((y = x.match(sirregex))) {
+		z.r = x;
+		z.t = utf8read(unescapexml(x.match(sitregex).join("").replace(tagregex,"")));
+		if(html) z.h = parse_rs(x);
+	}
+	/* 18.4.3 phoneticPr CT_PhoneticPr (TODO: needed for Asian support) */
+	/* 18.4.6 rPh CT_PhoneticRun (TODO: needed for Asian support) */
+	return z;
+}
+
+/* 18.4 Shared String Table */
+var sstr0 = /<sst([^>]*)>([\s\S]*)<\/sst>/;
+var sstr1 = /<(?:si|sstItem)>/g;
+var sstr2 = /<\/(?:si|sstItem)>/;
+function parse_sst_xml(data, opts) {
+	var s = [], ss;
+	/* 18.4.9 sst CT_Sst */
+	var sst = data.match(sstr0);
+	if(isval(sst)) {
+		ss = sst[2].replace(sstr1,"").split(sstr2);
+		for(var i = 0; i != ss.length; ++i) {
+			var o = parse_si(ss[i], opts);
+			if(o != null) s[s.length] = o;
+		}
+		sst = parsexmltag(sst[1]); s.Count = sst.count; s.Unique = sst.uniqueCount;
+	}
+	return s;
+}
+
+RELS.SST = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings";
+var straywsregex = /^\s|\s$|[\t\n\r]/;
+function write_sst_xml(sst, opts) {
+	if(!opts.bookSST) return "";
+	var o = [XML_HEADER];
+	o[o.length] = (writextag('sst', null, {
+		xmlns: XMLNS.main[0],
+		count: sst.Count,
+		uniqueCount: sst.Unique
+	}));
+	for(var i = 0; i != sst.length; ++i) { if(sst[i] == null) continue;
+		var s = sst[i];
+		var sitag = "<si>";
+		if(s.r) sitag += s.r;
+		else {
+			sitag += "<t";
+			if(s.t.match(straywsregex)) sitag += ' xml:space="preserve"';
+			sitag += ">" + escapexml(s.t) + "</t>";
+		}
+		sitag += "</si>";
+		o[o.length] = (sitag);
+	}
+	if(o.length>2){ o[o.length] = ('</sst>'); o[1]=o[1].replace("/>",">"); }
+	return o.join("");
+}
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/43_sstbin.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/43_sstbin.js
new file mode 100644
index 0000000..f303ade
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/43_sstbin.js
@@ -0,0 +1,39 @@
+/* [MS-XLSB] 2.4.219 BrtBeginSst */
+function parse_BrtBeginSst(data, length) {
+	return [data.read_shift(4), data.read_shift(4)];
+}
+
+/* [MS-XLSB] 2.1.7.45 Shared Strings */
+function parse_sst_bin(data, opts) {
+	var s = [];
+	var pass = false;
+	recordhopper(data, function hopper_sst(val, R, RT) {
+		switch(R.n) {
+			case 'BrtBeginSst': s.Count = val[0]; s.Unique = val[1]; break;
+			case 'BrtSSTItem': s.push(val); break;
+			case 'BrtEndSst': return true;
+			/* TODO: produce a test case with a future record */
+			case 'BrtFRTBegin': pass = true; break;
+			case 'BrtFRTEnd': pass = false; break;
+			default: if(!pass || opts.WTF) throw new Error("Unexpected record " + RT + " " + R.n);
+		}
+	});
+	return s;
+}
+
+function write_BrtBeginSst(sst, o) {
+	if(!o) o = new_buf(8);
+	o.write_shift(4, sst.Count);
+	o.write_shift(4, sst.Unique);
+	return o;
+}
+
+var write_BrtSSTItem = write_RichStr;
+
+function write_sst_bin(sst, opts) {
+	var ba = buf_array();
+	write_record(ba, "BrtBeginSst", write_BrtBeginSst(sst));
+	for(var i = 0; i < sst.length; ++i) write_record(ba, "BrtSSTItem", write_BrtSSTItem(sst[i]));
+	write_record(ba, "BrtEndSst");
+	return ba.end();
+}
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/44_offcrypto.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/44_offcrypto.js
new file mode 100644
index 0000000..48d920e
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/44_offcrypto.js
@@ -0,0 +1,180 @@
+function _JS2ANSI(str) { if(typeof cptable !== 'undefined') return cptable.utils.encode(1252, str); return str.split("").map(function(x) { return x.charCodeAt(0); }); }
+
+/* [MS-OFFCRYPTO] 2.1.4 Version */
+function parse_Version(blob, length) {
+	var o = {};
+	o.Major = blob.read_shift(2);
+	o.Minor = blob.read_shift(2);
+	return o;
+}
+/* [MS-OFFCRYPTO] 2.3.2 Encryption Header */
+function parse_EncryptionHeader(blob, length) {
+	var o = {};
+	o.Flags = blob.read_shift(4);
+
+	// Check if SizeExtra is 0x00000000
+	var tmp = blob.read_shift(4);
+	if(tmp !== 0) throw 'Unrecognized SizeExtra: ' + tmp;
+
+	o.AlgID = blob.read_shift(4);
+	switch(o.AlgID) {
+		case 0: case 0x6801: case 0x660E: case 0x660F: case 0x6610: break;
+		default: throw 'Unrecognized encryption algorithm: ' + o.AlgID;
+	}
+	parsenoop(blob, length-12);
+	return o;
+}
+
+/* [MS-OFFCRYPTO] 2.3.3 Encryption Verifier */
+function parse_EncryptionVerifier(blob, length) {
+	return parsenoop(blob, length);
+}
+/* [MS-OFFCRYPTO] 2.3.5.1 RC4 CryptoAPI Encryption Header */
+function parse_RC4CryptoHeader(blob, length) {
+	var o = {};
+	var vers = o.EncryptionVersionInfo = parse_Version(blob, 4); length -= 4;
+	if(vers.Minor != 2) throw 'unrecognized minor version code: ' + vers.Minor;
+	if(vers.Major > 4 || vers.Major < 2) throw 'unrecognized major version code: ' + vers.Major;
+	o.Flags = blob.read_shift(4); length -= 4;
+	var sz = blob.read_shift(4); length -= 4;
+	o.EncryptionHeader = parse_EncryptionHeader(blob, sz); length -= sz;
+	o.EncryptionVerifier = parse_EncryptionVerifier(blob, length);
+	return o;
+}
+/* [MS-OFFCRYPTO] 2.3.6.1 RC4 Encryption Header */
+function parse_RC4Header(blob, length) {
+	var o = {};
+	var vers = o.EncryptionVersionInfo = parse_Version(blob, 4); length -= 4;
+	if(vers.Major != 1 || vers.Minor != 1) throw 'unrecognized version code ' + vers.Major + ' : ' + vers.Minor;
+	o.Salt = blob.read_shift(16);
+	o.EncryptedVerifier = blob.read_shift(16);
+	o.EncryptedVerifierHash = blob.read_shift(16);
+	return o;
+}
+
+/* [MS-OFFCRYPTO] 2.3.7.1 Binary Document Password Verifier Derivation */
+function crypto_CreatePasswordVerifier_Method1(Password) {
+	var Verifier = 0x0000, PasswordArray;
+	var PasswordDecoded = _JS2ANSI(Password);
+	var len = PasswordDecoded.length + 1, i, PasswordByte;
+	var Intermediate1, Intermediate2, Intermediate3;
+	PasswordArray = new_raw_buf(len);
+	PasswordArray[0] = PasswordDecoded.length;
+	for(i = 1; i != len; ++i) PasswordArray[i] = PasswordDecoded[i-1];
+	for(i = len-1; i >= 0; --i) {
+		PasswordByte = PasswordArray[i];
+		Intermediate1 = ((Verifier & 0x4000) === 0x0000) ? 0 : 1;
+		Intermediate2 = (Verifier << 1) & 0x7FFF;
+		Intermediate3 = Intermediate1 | Intermediate2;
+		Verifier = Intermediate3 ^ PasswordByte;
+	}
+	return Verifier ^ 0xCE4B;
+}
+
+/* [MS-OFFCRYPTO] 2.3.7.2 Binary Document XOR Array Initialization */
+var crypto_CreateXorArray_Method1 = (function() {
+	var PadArray = [0xBB, 0xFF, 0xFF, 0xBA, 0xFF, 0xFF, 0xB9, 0x80, 0x00, 0xBE, 0x0F, 0x00, 0xBF, 0x0F, 0x00];
+	var InitialCode = [0xE1F0, 0x1D0F, 0xCC9C, 0x84C0, 0x110C, 0x0E10, 0xF1CE, 0x313E, 0x1872, 0xE139, 0xD40F, 0x84F9, 0x280C, 0xA96A, 0x4EC3];
+	var XorMatrix = [0xAEFC, 0x4DD9, 0x9BB2, 0x2745, 0x4E8A, 0x9D14, 0x2A09, 0x7B61, 0xF6C2, 0xFDA5, 0xEB6B, 0xC6F7, 0x9DCF, 0x2BBF, 0x4563, 0x8AC6, 0x05AD, 0x0B5A, 0x16B4, 0x2D68, 0x5AD0, 0x0375, 0x06EA, 0x0DD4, 0x1BA8, 0x3750, 0x6EA0, 0xDD40, 0xD849, 0xA0B3, 0x5147, 0xA28E, 0x553D, 0xAA7A, 0x44D5, 0x6F45, 0xDE8A, 0xAD35, 0x4A4B, 0x9496, 0x390D, 0x721A, 0xEB23, 0xC667, 0x9CEF, 0x29FF, 0x53FE, 0xA7FC, 0x5FD9, 0x47D3, 0x8FA6, 0x0F6D, 0x1EDA, 0x3DB4, 0x7B68, 0xF6D0, 0xB861, 0x60E3, 0xC1C6, 0x93AD, 0x377B, 0x6EF6, 0xDDEC, 0x45A0, 0x8B40, 0x06A1, 0x0D42, 0x1A84, 0x3508, 0x6A10, 0xAA51, 0x4483, 0x8906, 0x022D, 0x045A, 0x08B4, 0x1168, 0x76B4, 0xED68, 0xCAF1, 0x85C3, 0x1BA7, 0x374E, 0x6E9C, 0x3730, 0x6E60, 0xDCC0, 0xA9A1, 0x4363, 0x86C6, 0x1DAD, 0x3331, 0x6662, 0xCCC4, 0x89A9, 0x0373, 0x06E6, 0x0DCC, 0x1021, 0x2042, 0x4084, 0x8108, 0x1231, 0x2462, 0x48C4];
+	var Ror = function(Byte) { return ((Byte/2) | (Byte*128)) & 0xFF; };
+	var XorRor = function(byte1, byte2) { return Ror(byte1 ^ byte2); };
+	var CreateXorKey_Method1 = function(Password) {
+		var XorKey = InitialCode[Password.length - 1];
+		var CurrentElement = 0x68;
+		for(var i = Password.length-1; i >= 0; --i) {
+			var Char = Password[i];
+			for(var j = 0; j != 7; ++j) {
+				if(Char & 0x40) XorKey ^= XorMatrix[CurrentElement];
+				Char *= 2; --CurrentElement;
+			}
+		}
+		return XorKey;
+	};
+	return function(password) {
+		var Password = _JS2ANSI(password);
+		var XorKey = CreateXorKey_Method1(Password);
+		var Index = Password.length;
+		var ObfuscationArray = new_raw_buf(16);
+		for(var i = 0; i != 16; ++i) ObfuscationArray[i] = 0x00;
+		var Temp, PasswordLastChar, PadIndex;
+		if((Index & 1) === 1) {
+			Temp = XorKey >> 8;
+			ObfuscationArray[Index] = XorRor(PadArray[0], Temp);
+			--Index;
+			Temp = XorKey & 0xFF;
+			PasswordLastChar = Password[Password.length - 1];
+			ObfuscationArray[Index] = XorRor(PasswordLastChar, Temp);
+		}
+		while(Index > 0) {
+			--Index;
+			Temp = XorKey >> 8;
+			ObfuscationArray[Index] = XorRor(Password[Index], Temp);
+			--Index;
+			Temp = XorKey & 0xFF;
+			ObfuscationArray[Index] = XorRor(Password[Index], Temp);
+		}
+		Index = 15;
+		PadIndex = 15 - Password.length;
+		while(PadIndex > 0) {
+			Temp = XorKey >> 8;
+			ObfuscationArray[Index] = XorRor(PadArray[PadIndex], Temp);
+			--Index;
+			--PadIndex;
+			Temp = XorKey & 0xFF;
+			ObfuscationArray[Index] = XorRor(Password[Index], Temp);
+			--Index;
+			--PadIndex;
+		}
+		return ObfuscationArray;
+	};
+})();
+
+/* [MS-OFFCRYPTO] 2.3.7.3 Binary Document XOR Data Transformation Method 1 */
+var crypto_DecryptData_Method1 = function(password, Data, XorArrayIndex, XorArray, O) {
+	/* If XorArray is set, use it; if O is not set, make changes in-place */
+	if(!O) O = Data;
+	if(!XorArray) XorArray = crypto_CreateXorArray_Method1(password);
+	var Index, Value;
+	for(Index = 0; Index != Data.length; ++Index) {
+		Value = Data[Index];
+		Value ^= XorArray[XorArrayIndex];
+		Value = ((Value>>5) | (Value<<3)) & 0xFF;
+		O[Index] = Value;
+		++XorArrayIndex;
+	}
+	return [O, XorArrayIndex, XorArray];
+};
+
+var crypto_MakeXorDecryptor = function(password) {
+	var XorArrayIndex = 0, XorArray = crypto_CreateXorArray_Method1(password);
+	return function(Data) {
+		var O = crypto_DecryptData_Method1(null, Data, XorArrayIndex, XorArray);
+		XorArrayIndex = O[1];
+		return O[0];
+	};
+};
+
+/* 2.5.343 */
+function parse_XORObfuscation(blob, length, opts, out) {
+	var o = { key: parseuint16(blob), verificationBytes: parseuint16(blob) };
+	if(opts.password) o.verifier = crypto_CreatePasswordVerifier_Method1(opts.password);
+	out.valid = o.verificationBytes === o.verifier;
+	if(out.valid) out.insitu_decrypt = crypto_MakeXorDecryptor(opts.password);
+	return o;
+}
+
+/* 2.4.117 */
+function parse_FilePassHeader(blob, length, oo) {
+	var o = oo || {}; o.Info = blob.read_shift(2); blob.l -= 2;
+	if(o.Info === 1) o.Data = parse_RC4Header(blob, length);
+	else o.Data = parse_RC4CryptoHeader(blob, length);
+	return o;
+}
+function parse_FilePass(blob, length, opts) {
+	var o = { Type: blob.read_shift(2) }; /* wEncryptionType */
+	if(o.Type) parse_FilePassHeader(blob, length-2, o);
+	else parse_XORObfuscation(blob, length-2, opts, o);
+	return o;
+}
+
+
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/45_styutils.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/45_styutils.js
new file mode 100644
index 0000000..99c9908
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/45_styutils.js
@@ -0,0 +1,85 @@
+function hex2RGB(h) {
+	var o = h.substr(h[0]==="#"?1:0,6);
+	return [parseInt(o.substr(0,2),16),parseInt(o.substr(2,2),16),parseInt(o.substr(4,2),16)];
+}
+function rgb2Hex(rgb) {
+	for(var i=0,o=1; i!=3; ++i) o = o*256 + (rgb[i]>255?255:rgb[i]<0?0:rgb[i]);
+	return o.toString(16).toUpperCase().substr(1);
+}
+
+function rgb2HSL(rgb) {
+	var R = rgb[0]/255, G = rgb[1]/255, B=rgb[2]/255;
+	var M = Math.max(R, G, B), m = Math.min(R, G, B), C = M - m;
+	if(C === 0) return [0, 0, R];
+
+	var H6 = 0, S = 0, L2 = (M + m);
+	S = C / (L2 > 1 ? 2 - L2 : L2);
+	switch(M){
+		case R: H6 = ((G - B) / C + 6)%6; break;
+		case G: H6 = ((B - R) / C + 2); break;
+		case B: H6 = ((R - G) / C + 4); break;
+	}
+	return [H6 / 6, S, L2 / 2];
+}
+
+function hsl2RGB(hsl){
+	var H = hsl[0], S = hsl[1], L = hsl[2];
+	var C = S * 2 * (L < 0.5 ? L : 1 - L), m = L - C/2;
+	var rgb = [m,m,m], h6 = 6*H;
+
+	var X;
+	if(S !== 0) switch(h6|0) {
+		case 0: case 6: X = C * h6; rgb[0] += C; rgb[1] += X; break;
+		case 1: X = C * (2 - h6);   rgb[0] += X; rgb[1] += C; break;
+		case 2: X = C * (h6 - 2);   rgb[1] += C; rgb[2] += X; break;
+		case 3: X = C * (4 - h6);   rgb[1] += X; rgb[2] += C; break;
+		case 4: X = C * (h6 - 4);   rgb[2] += C; rgb[0] += X; break;
+		case 5: X = C * (6 - h6);   rgb[2] += X; rgb[0] += C; break;
+	}
+	for(var i = 0; i != 3; ++i) rgb[i] = Math.round(rgb[i]*255);
+	return rgb;
+}
+
+/* 18.8.3 bgColor tint algorithm */
+function rgb_tint(hex, tint) {
+	if(tint == 0) return hex;
+	var hsl = rgb2HSL(hex2RGB(hex));
+	if (tint < 0) hsl[2] = hsl[2] * (1 + tint);
+	else hsl[2] = 1 - (1 - hsl[2]) * (1 - tint);
+  var rev =rgb2Hex(hsl2RGB(hsl))
+	return rev;
+}
+
+/* 18.3.1.13 width calculations */
+var DEF_MDW = 7, MAX_MDW = 15, MIN_MDW = 1, MDW = DEF_MDW;
+function width2px(width) { return (( width + ((128/MDW)|0)/256 )* MDW )|0; }
+function px2char(px) { return (((px - 5)/MDW * 100 + 0.5)|0)/100; }
+function char2width(chr) { return (((chr * MDW + 5)/MDW*256)|0)/256; }
+function cycle_width(collw) { return char2width(px2char(width2px(collw))); }
+function find_mdw(collw, coll) {
+	if(cycle_width(collw) != collw) {
+		for(MDW=DEF_MDW; MDW>MIN_MDW; --MDW) if(cycle_width(collw) === collw) break;
+		if(MDW === MIN_MDW) for(MDW=DEF_MDW+1; MDW<MAX_MDW; ++MDW) if(cycle_width(collw) === collw) break;
+		if(MDW === MAX_MDW) MDW = DEF_MDW;
+	}
+}
+
+/* [MS-EXSPXML3] 2.4.54 ST_enmPattern */
+var XLMLPatternTypeMap = {
+	"None": "none",
+	"Solid": "solid",
+	"Gray50": "mediumGray",
+	"Gray75": "darkGray",
+	"Gray25": "lightGray",
+	"HorzStripe": "darkHorizontal",
+	"VertStripe": "darkVertical",
+	"ReverseDiagStripe": "darkDown",
+	"DiagStripe": "darkUp",
+	"DiagCross": "darkGrid",
+	"ThickDiagCross": "darkTrellis",
+	"ThinHorzStripe": "lightHorizontal",
+	"ThinVertStripe": "lightVertical",
+	"ThinReverseDiagStripe": "lightDown",
+	"ThinHorzCross": "lightGrid"
+};
+
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/46_stycommon.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/46_stycommon.js
new file mode 100644
index 0000000..861fe79
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/46_stycommon.js
@@ -0,0 +1,4 @@
+var styles = {}; // shared styles
+
+var themes = {}; // shared themes
+
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/47_styxml.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/47_styxml.js
new file mode 100644
index 0000000..f7af92c
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/47_styxml.js
@@ -0,0 +1,400 @@
+/* 18.8.21 fills CT_Fills */
+function parse_fills(t, opts) {
+  styles.Fills = [];
+  var fill = {};
+  t[0].match(tagregex).forEach(function (x) {
+    var y = parsexmltag(x);
+    switch (y[0]) {
+      case '<fills':
+      case '<fills>':
+      case '</fills>':
+        break;
+
+      /* 18.8.20 fill CT_Fill */
+      case '<fill>':
+        break;
+      case '</fill>':
+        styles.Fills.push(fill);
+        fill = {};
+        break;
+
+      /* 18.8.32 patternFill CT_PatternFill */
+      case '<patternFill':
+        if (y.patternType) fill.patternType = y.patternType;
+        break;
+      case '<patternFill/>':
+      case '</patternFill>':
+        break;
+
+      /* 18.8.3 bgColor CT_Color */
+      case '<bgColor':
+        if (!fill.bgColor) fill.bgColor = {};
+        if (y.indexed) fill.bgColor.indexed = parseInt(y.indexed, 10);
+        if (y.theme) fill.bgColor.theme = parseInt(y.theme, 10);
+        if (y.tint) fill.bgColor.tint = parseFloat(y.tint);
+
+
+        if (y.theme && themes.themeElements && themes.themeElements.clrScheme) {
+          fill.bgColor.rgb = rgb_tint(themes.themeElements.clrScheme[fill.bgColor.theme].rgb, fill.bgColor.tint || 0);
+          if (opts.WTF) fill.bgColor.raw_rgb = rgb_tint(themes.themeElements.clrScheme[fill.bgColor.theme].rgb,0);
+        }
+        /* Excel uses ARGB strings */
+        if (y.rgb) fill.bgColor.rgb = y.rgb;//.substring(y.rgb.length - 6);
+        break;
+      case '<bgColor/>':
+      case '</bgColor>':
+        break;
+
+      /* 18.8.19 fgColor CT_Color */
+      case '<fgColor':
+        if (!fill.fgColor) fill.fgColor = {};
+        if (y.theme) fill.fgColor.theme = parseInt(y.theme, 10);
+        if (y.tint) fill.fgColor.tint = parseFloat(y.tint);
+
+        if (y.theme && themes.themeElements && themes.themeElements.clrScheme) {
+          fill.fgColor.rgb = rgb_tint(themes.themeElements.clrScheme[fill.fgColor.theme].rgb, fill.fgColor.tint || 0);
+          if (opts.WTF) fill.fgColor.raw_rgb = rgb_tint(themes.themeElements.clrScheme[fill.fgColor.theme].rgb,0);
+        }
+
+        /* Excel uses ARGB strings */
+        if (y.rgb) fill.fgColor.rgb = y.rgb;//.substring(y.rgb.length - 6);
+        break;
+      case '<fgColor/>':
+      case '</fgColor>':
+        break;
+
+      default:
+        if (opts.WTF) throw 'unrecognized ' + y[0] + ' in fills';
+    }
+  });
+}
+
+function parse_fonts(t, opts) {
+  styles.Fonts = [];
+  var font = {};
+  t[0].match(tagregex).forEach(function (x) {
+    var y = parsexmltag(x);
+    switch (y[0]) {
+
+      case '<fonts':
+      case  '<fonts>':
+      case '</fonts>':
+        break;
+      case '<font':
+        break;
+      case '</font>':
+        styles.Fonts.push(font);
+        ;
+        font = {};
+        break;
+
+      case '<name':
+        if (y.val) font.name = y.val;
+        break;
+      case '<name/>':
+      case '</name>':
+        break;
+
+
+      case '<b/>':
+        font.bold = true;
+        break;
+      case '<u/>':
+        font.underline = true;
+        break;
+      case '<i/>':
+        font.italic = true;
+        break;
+      case '<strike/>':
+        font.strike = true;
+        break;
+      case '<outline/>':
+        font.outline = true;
+        break;
+      case '<shadow/>':
+        font.shadow = true;
+        break;
+
+
+      case '<sz':
+        if (y.val) font.sz = y.val;
+        break;
+      case '<sz/>':
+      case '</sz>':
+        break;
+
+      case '<vertAlign':
+        if (y.val) font.vertAlign = y.val;
+        break;
+      case '<vertAlign/>':
+      case '</vertAlign>':
+        break;
+
+
+      case '<color':
+        if (!font.color) font.color = {};
+        if (y.theme) font.color.theme = y.theme;
+        if (y.tint) font.color.tint = y.tint;
+        if (y.theme && themes.themeElements && themes.themeElements.clrScheme) {
+          font.color.rgb = rgb_tint(themes.themeElements.clrScheme[font.color.theme].rgb, font.color.tint || 0);
+        }
+        if (y.rgb) font.color.rgb = y.rgb;
+        break;
+      case '<color/>':
+      case '</color>':
+        break;
+    }
+  });
+}
+
+function parse_borders(t, opts) {
+  styles.Borders = [];
+  var border = {}, sub_border = {};
+  t[0].match(tagregex).forEach(function (x) {
+    var y = parsexmltag(x);
+    switch (y[0]) {
+      case '<borders':
+      case  '<borders>':
+      case '</borders>':
+        break;
+      case '<border':
+      case '<border>':
+        border = {};
+        if (y.diagonalUp) { border.diagonalUp = y.diagonalUp; }
+        if (y.diagonalDown) { border.diagonalDown = y.diagonalDown; }
+        styles.Borders.push(border);
+
+        break;
+        break;
+      case '</border>':
+        break;
+
+      case '<left':
+        sub_border = border.left = {};
+        if (y.style) {
+          sub_border.style = y.style;
+        }
+        break;
+      case '<right':
+        sub_border = border.right = {};
+        if (y.style) {
+          sub_border.style = y.style;
+        }
+        break;
+      case '<top':
+        sub_border = border.top = {};
+        if (y.style) {
+          sub_border.style = y.style;
+        }
+        break;
+      case '<bottom':
+        sub_border = border.bottom = {};
+        if (y.style) {
+          sub_border.style = y.style;
+        }
+        break;
+      case '<diagonal':
+        sub_border = border.diagonal = {};
+        if (y.style) {
+          sub_border.style = y.style;
+        }
+        break;
+
+      case '<color':
+        sub_border.color = {};
+        if (y.theme) sub_border.color.theme = y.theme;
+        if (y.theme && themes.themeElements && themes.themeElements.clrScheme) {
+          sub_border.color.rgb = rgb_tint(themes.themeElements.clrScheme[sub_border.color.theme].rgb, sub_border.color.tint || 0);
+        }
+
+        if (y.tint) sub_border.color.tint = y.tint;
+        if (y.rgb) sub_border.color.rgb = y.rgb;
+        if (y.auto) sub_border.color.auto = y.auto;
+        break;
+      case '<name/>':
+      case '</name>':
+        break;
+      default:
+        break;
+    }
+  });
+
+}
+
+/* 18.8.31 numFmts CT_NumFmts */
+function parse_numFmts(t, opts) {
+  styles.NumberFmt = [];
+  var k = keys(SSF._table);
+  for (var i = 0; i < k.length; ++i) styles.NumberFmt[k[i]] = SSF._table[k[i]];
+  var m = t[0].match(tagregex);
+  for (i = 0; i < m.length; ++i) {
+    var y = parsexmltag(m[i]);
+    switch (y[0]) {
+      case '<numFmts':
+      case '</numFmts>':
+      case '<numFmts/>':
+      case '<numFmts>':
+        break;
+      case '<numFmt':
+      {
+        var f = unescapexml(utf8read(y.formatCode)), j = parseInt(y.numFmtId, 10);
+        styles.NumberFmt[j] = f;
+        if (j > 0) SSF.load(f, j);
+      }
+        break;
+      default:
+        if (opts.WTF) throw 'unrecognized ' + y[0] + ' in numFmts';
+    }
+  }
+}
+
+function write_numFmts(NF, opts) {
+  var o = ["<numFmts>"];
+  [
+    [5, 8],
+    [23, 26],
+    [41, 44],
+    [63, 66],
+    [164, 392]
+  ].forEach(function (r) {
+    for (var i = r[0]; i <= r[1]; ++i) if (NF[i] !== undefined) o[o.length] = (writextag('numFmt', null, {numFmtId: i, formatCode: escapexml(NF[i])}));
+  });
+  if (o.length === 1) return "";
+  o[o.length] = ("</numFmts>");
+  o[0] = writextag('numFmts', null, { count: o.length - 2 }).replace("/>", ">");
+  return o.join("");
+}
+
+/* 18.8.10 cellXfs CT_CellXfs */
+function parse_cellXfs(t, opts) {
+  styles.CellXf = [];
+  var xf;
+  t[0].match(tagregex).forEach(function (x) {
+    var y = parsexmltag(x);
+    switch (y[0]) {
+      case '<cellXfs':
+      case '<cellXfs>':
+      case '<cellXfs/>':
+      case '</cellXfs>':
+        break;
+
+      /* 18.8.45 xf CT_Xf */
+      case '<xf':
+          xf = y;
+          delete xf[0];
+        delete y[0];
+        if (xf.numFmtId) xf.numFmtId = parseInt(xf.numFmtId, 10);
+        if (xf.fillId) xf.fillId = parseInt(xf.fillId, 10);
+        styles.CellXf.push(xf);
+        break;
+      case '</xf>':
+        break;
+
+      /* 18.8.1 alignment CT_CellAlignment */
+      case '<alignment':
+      case '<alignment/>':
+        var alignment = {}
+          if (y.vertical) { alignment.vertical = y.vertical;}
+          if (y.horizontal) { alignment.horizontal = y.horizontal;}
+          if (y.textRotation != undefined) { alignment.textRotation = y.textRotation; }
+          if (y.indent) { alignment.indent = y.indent; }
+          if (y.wrapText) { alignment.wrapText = y.wrapText; }
+          xf.alignment = alignment;
+
+        break;
+
+      /* 18.8.33 protection CT_CellProtection */
+      case '<protection':
+      case '</protection>':
+      case '<protection/>':
+        break;
+
+      case '<extLst':
+      case '</extLst>':
+        break;
+      case '<ext':
+        break;
+      default:
+        if (opts.WTF) throw 'unrecognized ' + y[0] + ' in cellXfs';
+    }
+  });
+}
+
+function write_cellXfs(cellXfs) {
+  var o = [];
+  o[o.length] = (writextag('cellXfs', null));
+  cellXfs.forEach(function (c) {
+    o[o.length] = (writextag('xf', null, c));
+  });
+  o[o.length] = ("</cellXfs>");
+  if (o.length === 2) return "";
+  o[0] = writextag('cellXfs', null, {count: o.length - 2}).replace("/>", ">");
+  return o.join("");
+}
+
+/* 18.8 Styles CT_Stylesheet*/
+var parse_sty_xml = (function make_pstyx() {
+  var numFmtRegex = /<numFmts([^>]*)>.*<\/numFmts>/;
+  var cellXfRegex = /<cellXfs([^>]*)>.*<\/cellXfs>/;
+  var fillsRegex = /<fills([^>]*)>.*<\/fills>/;
+  var bordersRegex = /<borders([^>]*)>.*<\/borders>/;
+
+  return function parse_sty_xml(data, opts) {
+    /* 18.8.39 styleSheet CT_Stylesheet */
+    var t;
+
+    /* numFmts CT_NumFmts ? */
+    if ((t = data.match(numFmtRegex))) parse_numFmts(t, opts);
+
+    /* fonts CT_Fonts ? */
+    if ((t = data.match(/<fonts([^>]*)>.*<\/fonts>/))) parse_fonts(t, opts)
+
+    /* fills CT_Fills */
+    if ((t = data.match(fillsRegex))) parse_fills(t, opts);
+
+    /* borders CT_Borders ? */
+    if ((t = data.match(bordersRegex))) parse_borders(t, opts);
+    /* cellStyleXfs CT_CellStyleXfs ? */
+
+    /* cellXfs CT_CellXfs ? */
+    if ((t = data.match(cellXfRegex))) parse_cellXfs(t, opts);
+
+    /* dxfs CT_Dxfs ? */
+    /* tableStyles CT_TableStyles ? */
+    /* colors CT_Colors ? */
+    /* extLst CT_ExtensionList ? */
+
+    return styles;
+  };
+})();
+
+var STYLES_XML_ROOT = writextag('styleSheet', null, {
+  'xmlns': XMLNS.main[0],
+  'xmlns:vt': XMLNS.vt
+});
+
+RELS.STY = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles";
+
+function write_sty_xml(wb, opts) {
+
+  if (typeof style_builder != 'undefined' && typeof 'require' != 'undefined') {
+    return style_builder.toXml();
+  }
+
+  var o = [XML_HEADER, STYLES_XML_ROOT], w;
+  if ((w = write_numFmts(wb.SSF)) != null) o[o.length] = w;
+  o[o.length] = ('<fonts count="1"><font><sz val="12"/><color theme="1"/><name val="Calibri"/><family val="2"/><scheme val="minor"/></font></fonts>');
+  o[o.length] = ('<fills count="2"><fill><patternFill patternType="none"/></fill><fill><patternFill patternType="gray125"/></fill></fills>');
+  o[o.length] = ('<borders count="1"><border><left/><right/><top/><bottom/><diagonal/></border></borders>');
+  o[o.length] = ('<cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0"/></cellStyleXfs>');
+  if ((w = write_cellXfs(opts.cellXfs))) o[o.length] = (w);
+  o[o.length] = ('<cellStyles count="1"><cellStyle name="Normal" xfId="0" builtinId="0"/></cellStyles>');
+  o[o.length] = ('<dxfs count="0"/>');
+  o[o.length] = ('<tableStyles count="0" defaultTableStyle="TableStyleMedium9" defaultPivotStyle="PivotStyleMedium4"/>');
+
+  if (o.length > 2) {
+    o[o.length] = ('</styleSheet>');
+    o[1] = o[1].replace("/>", ">");
+  }
+  return o.join("");
+}
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/48_stybin.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/48_stybin.js
new file mode 100644
index 0000000..9df1b93
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/48_stybin.js
@@ -0,0 +1,133 @@
+/* [MS-XLSB] 2.4.651 BrtFmt */
+function parse_BrtFmt(data, length) {
+	var ifmt = data.read_shift(2);
+	var stFmtCode = parse_XLWideString(data,length-2);
+	return [ifmt, stFmtCode];
+}
+
+/* [MS-XLSB] 2.4.653 BrtFont TODO */
+function parse_BrtFont(data, length) {
+	var out = {flags:{}};
+	out.dyHeight = data.read_shift(2);
+	out.grbit = parse_FontFlags(data, 2);
+	out.bls = data.read_shift(2);
+	out.sss = data.read_shift(2);
+	out.uls = data.read_shift(1);
+	out.bFamily = data.read_shift(1);
+	out.bCharSet = data.read_shift(1);
+	data.l++;
+	out.brtColor = parse_BrtColor(data, 8);
+	out.bFontScheme = data.read_shift(1);
+	out.name = parse_XLWideString(data, length - 21);
+
+	out.flags.Bold = out.bls === 0x02BC;
+	out.flags.Italic = out.grbit.fItalic;
+	out.flags.Strikeout = out.grbit.fStrikeout;
+	out.flags.Outline = out.grbit.fOutline;
+	out.flags.Shadow = out.grbit.fShadow;
+	out.flags.Condense = out.grbit.fCondense;
+	out.flags.Extend = out.grbit.fExtend;
+	out.flags.Sub = out.sss & 0x2;
+	out.flags.Sup = out.sss & 0x1;
+	return out;
+}
+
+/* [MS-XLSB] 2.4.816 BrtXF */
+function parse_BrtXF(data, length) {
+	var ixfeParent = data.read_shift(2);
+	var ifmt = data.read_shift(2);
+	parsenoop(data, length-4);
+	return {ixfe:ixfeParent, ifmt:ifmt };
+}
+
+/* [MS-XLSB] 2.1.7.50 Styles */
+function parse_sty_bin(data, opts) {
+	styles.NumberFmt = [];
+	for(var y in SSF._table) styles.NumberFmt[y] = SSF._table[y];
+
+	styles.CellXf = [];
+	var state = ""; /* TODO: this should be a stack */
+	var pass = false;
+	recordhopper(data, function hopper_sty(val, R, RT) {
+		switch(R.n) {
+			case 'BrtFmt':
+				styles.NumberFmt[val[0]] = val[1]; SSF.load(val[1], val[0]);
+				break;
+			case 'BrtFont': break; /* TODO */
+			case 'BrtKnownFonts': break; /* TODO */
+			case 'BrtFill': break; /* TODO */
+			case 'BrtBorder': break; /* TODO */
+			case 'BrtXF':
+				if(state === "CELLXFS") {
+					styles.CellXf.push(val);
+				}
+				break; /* TODO */
+			case 'BrtStyle': break; /* TODO */
+			case 'BrtDXF': break; /* TODO */
+			case 'BrtMRUColor': break; /* TODO */
+			case 'BrtIndexedColor': break; /* TODO */
+			case 'BrtBeginStyleSheet': break;
+			case 'BrtEndStyleSheet': break;
+			case 'BrtBeginTableStyle': break;
+			case 'BrtTableStyleElement': break;
+			case 'BrtEndTableStyle': break;
+			case 'BrtBeginFmts': state = "FMTS"; break;
+			case 'BrtEndFmts': state = ""; break;
+			case 'BrtBeginFonts': state = "FONTS"; break;
+			case 'BrtEndFonts': state = ""; break;
+			case 'BrtACBegin': state = "ACFONTS"; break;
+			case 'BrtACEnd': state = ""; break;
+			case 'BrtBeginFills': state = "FILLS"; break;
+			case 'BrtEndFills': state = ""; break;
+			case 'BrtBeginBorders': state = "BORDERS"; break;
+			case 'BrtEndBorders': state = ""; break;
+			case 'BrtBeginCellStyleXFs': state = "CELLSTYLEXFS"; break;
+			case 'BrtEndCellStyleXFs': state = ""; break;
+			case 'BrtBeginCellXFs': state = "CELLXFS"; break;
+			case 'BrtEndCellXFs': state = ""; break;
+			case 'BrtBeginStyles': state = "STYLES"; break;
+			case 'BrtEndStyles': state = ""; break;
+			case 'BrtBeginDXFs': state = "DXFS"; break;
+			case 'BrtEndDXFs': state = ""; break;
+			case 'BrtBeginTableStyles': state = "TABLESTYLES"; break;
+			case 'BrtEndTableStyles': state = ""; break;
+			case 'BrtBeginColorPalette': state = "COLORPALETTE"; break;
+			case 'BrtEndColorPalette': state = ""; break;
+			case 'BrtBeginIndexedColors': state = "INDEXEDCOLORS"; break;
+			case 'BrtEndIndexedColors': state = ""; break;
+			case 'BrtBeginMRUColors': state = "MRUCOLORS"; break;
+			case 'BrtEndMRUColors': state = ""; break;
+			case 'BrtFRTBegin': pass = true; break;
+			case 'BrtFRTEnd': pass = false; break;
+			case 'BrtBeginStyleSheetExt14': break;
+			case 'BrtBeginSlicerStyles': break;
+			case 'BrtEndSlicerStyles': break;
+			case 'BrtBeginTimelineStylesheetExt15': break;
+			case 'BrtEndTimelineStylesheetExt15': break;
+			case 'BrtBeginTimelineStyles': break;
+			case 'BrtEndTimelineStyles': break;
+			case 'BrtEndStyleSheetExt14': break;
+			default: if(!pass || opts.WTF) throw new Error("Unexpected record " + RT + " " + R.n);
+		}
+	});
+	return styles;
+}
+
+/* [MS-XLSB] 2.1.7.50 Styles */
+function write_sty_bin(data, opts) {
+	var ba = buf_array();
+	write_record(ba, "BrtBeginStyleSheet");
+	/* [FMTS] */
+	/* [FONTS] */
+	/* [FILLS] */
+	/* [BORDERS] */
+	/* CELLSTYLEXFS */
+	/* CELLXFS*/
+	/* STYLES */
+	/* DXFS */
+	/* TABLESTYLES */
+	/* [COLORPALETTE] */
+	/* FRTSTYLESHEET*/
+	write_record(ba, "BrtEndStyleSheet");
+	return ba.end();
+}
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/49_theme.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/49_theme.js
new file mode 100644
index 0000000..7131e77
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/49_theme.js
@@ -0,0 +1,116 @@
+RELS.THEME = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme";
+
+/* 20.1.6.2 clrScheme CT_ColorScheme */
+function parse_clrScheme(t, opts) {
+	themes.themeElements.clrScheme = [];
+	var color = {};
+	t[0].match(tagregex).forEach(function(x) {
+		var y = parsexmltag(x);
+		switch(y[0]) {
+			case '<a:clrScheme': case '</a:clrScheme>': break;
+
+			/* 20.1.2.3.32 srgbClr CT_SRgbColor */
+			case '<a:srgbClr': color.rgb = y.val; break;
+
+			/* 20.1.2.3.33 sysClr CT_SystemColor */
+			case '<a:sysClr': color.rgb = y.lastClr; break;
+
+			/* 20.1.4.1.9 dk1 (Dark 1) */
+			case '<a:dk1>':
+			case '</a:dk1>':
+			/* 20.1.4.1.10 dk2 (Dark 2) */
+			case '<a:dk2>':
+			case '</a:dk2>':
+			/* 20.1.4.1.22 lt1 (Light 1) */
+			case '<a:lt1>':
+			case '</a:lt1>':
+			/* 20.1.4.1.23 lt2 (Light 2) */
+			case '<a:lt2>':
+			case '</a:lt2>':
+			/* 20.1.4.1.1 accent1 (Accent 1) */
+			case '<a:accent1>':
+			case '</a:accent1>':
+			/* 20.1.4.1.2 accent2 (Accent 2) */
+			case '<a:accent2>':
+			case '</a:accent2>':
+			/* 20.1.4.1.3 accent3 (Accent 3) */
+			case '<a:accent3>':
+			case '</a:accent3>':
+			/* 20.1.4.1.4 accent4 (Accent 4) */
+			case '<a:accent4>':
+			case '</a:accent4>':
+			/* 20.1.4.1.5 accent5 (Accent 5) */
+			case '<a:accent5>':
+			case '</a:accent5>':
+			/* 20.1.4.1.6 accent6 (Accent 6) */
+			case '<a:accent6>':
+			case '</a:accent6>':
+			/* 20.1.4.1.19 hlink (Hyperlink) */
+			case '<a:hlink>':
+			case '</a:hlink>':
+			/* 20.1.4.1.15 folHlink (Followed Hyperlink) */
+			case '<a:folHlink>':
+			case '</a:folHlink>':
+				if (y[0][1] === '/') {
+					themes.themeElements.clrScheme.push(color);
+					color = {};
+				} else {
+					color.name = y[0].substring(3, y[0].length - 1);
+				}
+				break;
+
+			default: if(opts.WTF) throw 'unrecognized ' + y[0] + ' in clrScheme';
+		}
+	});
+}
+
+/* 20.1.4.1.18 fontScheme CT_FontScheme */
+function parse_fontScheme(t, opts) { }
+
+/* 20.1.4.1.15 fmtScheme CT_StyleMatrix */
+function parse_fmtScheme(t, opts) { }
+
+var clrsregex = /<a:clrScheme([^>]*)>[^\u2603]*<\/a:clrScheme>/;
+var fntsregex = /<a:fontScheme([^>]*)>[^\u2603]*<\/a:fontScheme>/;
+var fmtsregex = /<a:fmtScheme([^>]*)>[^\u2603]*<\/a:fmtScheme>/;
+
+/* 20.1.6.10 themeElements CT_BaseStyles */
+function parse_themeElements(data, opts) {
+	themes.themeElements = {};
+
+	var t;
+
+	[
+		/* clrScheme CT_ColorScheme */
+		['clrScheme', clrsregex, parse_clrScheme],
+		/* fontScheme CT_FontScheme */
+		['fontScheme', fntsregex, parse_fontScheme],
+		/* fmtScheme CT_StyleMatrix */
+		['fmtScheme', fmtsregex, parse_fmtScheme]
+	].forEach(function(m) {
+		if(!(t=data.match(m[1]))) throw m[0] + ' not found in themeElements';
+		m[2](t, opts);
+	});
+}
+
+var themeltregex = /<a:themeElements([^>]*)>[^\u2603]*<\/a:themeElements>/;
+
+/* 14.2.7 Theme Part */
+function parse_theme_xml(data, opts) {
+	/* 20.1.6.9 theme CT_OfficeStyleSheet */
+	if(!data || data.length === 0) return themes;
+
+	var t;
+
+	/* themeElements CT_BaseStyles */
+	if(!(t=data.match(themeltregex))) throw 'themeElements not found in theme';
+	parse_themeElements(t[0], opts);
+
+	return themes;
+}
+
+//function write_theme() { return '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n<a:theme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="Office Theme"><a:themeElements><a:clrScheme name="Office"><a:dk1><a:sysClr val="windowText" lastClr="000000"/></a:dk1><a:lt1><a:sysClr val="window" lastClr="FFFFFF"/></a:lt1><a:dk2><a:srgbClr val="1F497D"/></a:dk2><a:lt2><a:srgbClr val="EEECE1"/></a:lt2><a:accent1><a:srgbClr val="4F81BD"/></a:accent1><a:accent2><a:srgbClr val="C0504D"/></a:accent2><a:accent3><a:srgbClr val="9BBB59"/></a:accent3><a:accent4><a:srgbClr val="8064A2"/></a:accent4><a:accent5><a:srgbClr val="4BACC6"/></a:accent5><a:accent6><a:srgbClr val="F79646"/></a:accent6><a:hlink><a:srgbClr val="0000FF"/></a:hlink><a:folHlink><a:srgbClr val="800080"/></a:folHlink></a:clrScheme><a:fontScheme name="Office"><a:majorFont><a:latin typeface="Cambria"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Jpan" typeface="锛汲 锛般偞銈枫儍銈�"/><a:font script="Hang" typeface="毵戩潃 瓿犽敃"/><a:font script="Hans" typeface="瀹嬩綋"/><a:font script="Hant" typeface="鏂扮窗鏄庨珨"/><a:font script="Arab" typeface="Times New Roman"/><a:font script="Hebr" typeface="Times New Roman"/><a:font script="Thai" typeface="Tahoma"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="MoolBoran"/><a:font script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Times New Roman"/><a:font script="Uigh" typeface="Microsoft Uighur"/><a:font script="Geor" typeface="Sylfaen"/></a:majorFont><a:minorFont><a:latin typeface="Calibri"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Jpan" typeface="锛汲 锛般偞銈枫儍銈�"/><a:font script="Hang" typeface="毵戩潃 瓿犽敃"/><a:font script="Hans" typeface="瀹嬩綋"/><a:font script="Hant" typeface="鏂扮窗鏄庨珨"/><a:font script="Arab" typeface="Arial"/><a:font script="Hebr" typeface="Arial"/><a:font script="Thai" typeface="Tahoma"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="DaunPenh"/><a:font script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Arial"/><a:font script="Uigh" typeface="Microsoft Uighur"/><a:font script="Geor" typeface="Sylfaen"/></a:minorFont></a:fontScheme><a:fmtScheme name="Office"><a:fillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="50000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="35000"><a:schemeClr val="phClr"><a:tint val="37000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:tint val="15000"/><a:satMod val="350000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="16200000" scaled="1"/></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="100000"/><a:shade val="100000"/><a:satMod val="130000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:tint val="50000"/><a:shade val="100000"/><a:satMod val="350000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="16200000" scaled="0"/></a:gradFill></a:fillStyleLst><a:lnStyleLst><a:ln w="9525" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"><a:shade val="95000"/><a:satMod val="105000"/></a:schemeClr></a:solidFill><a:prstDash val="solid"/></a:ln><a:ln w="25400" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln><a:ln w="38100" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln></a:lnStyleLst><a:effectStyleLst><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="20000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="38000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw></a:effectLst><a:scene3d><a:camera prst="orthographicFront"><a:rot lat="0" lon="0" rev="0"/></a:camera><a:lightRig rig="threePt" dir="t"><a:rot lat="0" lon="0" rev="1200000"/></a:lightRig></a:scene3d><a:sp3d><a:bevelT w="63500" h="25400"/></a:sp3d></a:effectStyle></a:effectStyleLst><a:bgFillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="40000"/><a:satMod val="350000"/></a:schemeClr></a:gs><a:gs pos="40000"><a:schemeClr val="phClr"><a:tint val="45000"/><a:shade val="99000"/><a:satMod val="350000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="20000"/><a:satMod val="255000"/></a:schemeClr></a:gs></a:gsLst><a:path path="circle"><a:fillToRect l="50000" t="-80000" r="50000" b="180000"/></a:path></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="80000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="30000"/><a:satMod val="200000"/></a:schemeClr></a:gs></a:gsLst><a:path path="circle"><a:fillToRect l="50000" t="50000" r="50000" b="50000"/></a:path></a:gradFill></a:bgFillStyleLst></a:fmtScheme></a:themeElements><a:objectDefaults><a:spDef><a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx="1"><a:schemeClr val="accent1"/></a:lnRef><a:fillRef idx="3"><a:schemeClr val="accent1"/></a:fillRef><a:effectRef idx="2"><a:schemeClr val="accent1"/></a:effectRef><a:fontRef idx="minor"><a:schemeClr val="lt1"/></a:fontRef></a:style></a:spDef><a:lnDef><a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx="2"><a:schemeClr val="accent1"/></a:lnRef><a:fillRef idx="0"><a:schemeClr val="accent1"/></a:fillRef><a:effectRef idx="1"><a:schemeClr val="accent1"/></a:effectRef><a:fontRef idx="minor"><a:schemeClr val="tx1"/></a:fontRef></a:style></a:lnDef></a:objectDefaults><a:extraClrSchemeLst/></a:theme>'; }
+function write_theme(opts) {
+  if (opts.themeXml) { return opts.themeXml; }
+  return '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n<a:theme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="Office Theme"><a:themeElements><a:clrScheme name="Office"><a:dk1><a:sysClr val="windowText" lastClr="000000"/></a:dk1><a:lt1><a:sysClr val="window" lastClr="FFFFFF"/></a:lt1><a:dk2><a:srgbClr val="1F497D"/></a:dk2><a:lt2><a:srgbClr val="EEECE1"/></a:lt2><a:accent1><a:srgbClr val="4F81BD"/></a:accent1><a:accent2><a:srgbClr val="C0504D"/></a:accent2><a:accent3><a:srgbClr val="9BBB59"/></a:accent3><a:accent4><a:srgbClr val="8064A2"/></a:accent4><a:accent5><a:srgbClr val="4BACC6"/></a:accent5><a:accent6><a:srgbClr val="F79646"/></a:accent6><a:hlink><a:srgbClr val="0000FF"/></a:hlink><a:folHlink><a:srgbClr val="800080"/></a:folHlink></a:clrScheme><a:fontScheme name="Office"><a:majorFont><a:latin typeface="Cambria"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Jpan" typeface="锛汲 锛般偞銈枫儍銈�"/><a:font script="Hang" typeface="毵戩潃 瓿犽敃"/><a:font script="Hans" typeface="瀹嬩綋"/><a:font script="Hant" typeface="鏂扮窗鏄庨珨"/><a:font script="Arab" typeface="Times New Roman"/><a:font script="Hebr" typeface="Times New Roman"/><a:font script="Thai" typeface="Tahoma"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="MoolBoran"/><a:font script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Times New Roman"/><a:font script="Uigh" typeface="Microsoft Uighur"/><a:font script="Geor" typeface="Sylfaen"/></a:majorFont><a:minorFont><a:latin typeface="Calibri"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Jpan" typeface="锛汲 锛般偞銈枫儍銈�"/><a:font script="Hang" typeface="毵戩潃 瓿犽敃"/><a:font script="Hans" typeface="瀹嬩綋"/><a:font script="Hant" typeface="鏂扮窗鏄庨珨"/><a:font script="Arab" typeface="Arial"/><a:font script="Hebr" typeface="Arial"/><a:font script="Thai" typeface="Tahoma"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="DaunPenh"/><a:font script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Arial"/><a:font script="Uigh" typeface="Microsoft Uighur"/><a:font script="Geor" typeface="Sylfaen"/></a:minorFont></a:fontScheme><a:fmtScheme name="Office"><a:fillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="50000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="35000"><a:schemeClr val="phClr"><a:tint val="37000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:tint val="15000"/><a:satMod val="350000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="16200000" scaled="1"/></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="100000"/><a:shade val="100000"/><a:satMod val="130000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:tint val="50000"/><a:shade val="100000"/><a:satMod val="350000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="16200000" scaled="0"/></a:gradFill></a:fillStyleLst><a:lnStyleLst><a:ln w="9525" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"><a:shade val="95000"/><a:satMod val="105000"/></a:schemeClr></a:solidFill><a:prstDash val="solid"/></a:ln><a:ln w="25400" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln><a:ln w="38100" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln></a:lnStyleLst><a:effectStyleLst><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="20000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="38000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw></a:effectLst><a:scene3d><a:camera prst="orthographicFront"><a:rot lat="0" lon="0" rev="0"/></a:camera><a:lightRig rig="threePt" dir="t"><a:rot lat="0" lon="0" rev="1200000"/></a:lightRig></a:scene3d><a:sp3d><a:bevelT w="63500" h="25400"/></a:sp3d></a:effectStyle></a:effectStyleLst><a:bgFillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="40000"/><a:satMod val="350000"/></a:schemeClr></a:gs><a:gs pos="40000"><a:schemeClr val="phClr"><a:tint val="45000"/><a:shade val="99000"/><a:satMod val="350000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="20000"/><a:satMod val="255000"/></a:schemeClr></a:gs></a:gsLst><a:path path="circle"><a:fillToRect l="50000" t="-80000" r="50000" b="180000"/></a:path></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="80000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="30000"/><a:satMod val="200000"/></a:schemeClr></a:gs></a:gsLst><a:path path="circle"><a:fillToRect l="50000" t="50000" r="50000" b="50000"/></a:path></a:gradFill></a:bgFillStyleLst></a:fmtScheme></a:themeElements><a:objectDefaults><a:spDef><a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx="1"><a:schemeClr val="accent1"/></a:lnRef><a:fillRef idx="3"><a:schemeClr val="accent1"/></a:fillRef><a:effectRef idx="2"><a:schemeClr val="accent1"/></a:effectRef><a:fontRef idx="minor"><a:schemeClr val="lt1"/></a:fontRef></a:style></a:spDef><a:lnDef><a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx="2"><a:schemeClr val="accent1"/></a:lnRef><a:fillRef idx="0"><a:schemeClr val="accent1"/></a:fillRef><a:effectRef idx="1"><a:schemeClr val="accent1"/></a:effectRef><a:fontRef idx="minor"><a:schemeClr val="tx1"/></a:fontRef></a:style></a:lnDef></a:objectDefaults><a:extraClrSchemeLst/></a:theme>';
+}
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/50_styxls.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/50_styxls.js
new file mode 100644
index 0000000..32804ea
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/50_styxls.js
@@ -0,0 +1,78 @@
+/* [MS-XLS] 2.4.326 TODO: payload is a zip file */
+function parse_Theme(blob, length) {
+	var dwThemeVersion = blob.read_shift(4);
+	if(dwThemeVersion === 124226) return;
+	blob.l += length-4;
+}
+
+/* 2.5.49 */
+function parse_ColorTheme(blob, length) { return blob.read_shift(4); }
+
+/* 2.5.155 */
+function parse_FullColorExt(blob, length) {
+	var o = {};
+	o.xclrType = blob.read_shift(2);
+	o.nTintShade = blob.read_shift(2);
+	switch(o.xclrType) {
+		case 0: blob.l += 4; break;
+		case 1: o.xclrValue = parse_IcvXF(blob, 4); break;
+		case 2: o.xclrValue = parse_LongRGBA(blob, 4); break;
+		case 3: o.xclrValue = parse_ColorTheme(blob, 4); break;
+		case 4: blob.l += 4; break;
+	}
+	blob.l += 8;
+	return o;
+}
+
+/* 2.5.164 TODO: read 7 bits*/
+function parse_IcvXF(blob, length) {
+	return parsenoop(blob, length);
+}
+
+/* 2.5.280 */
+function parse_XFExtGradient(blob, length) {
+	return parsenoop(blob, length);
+}
+
+/* 2.5.108 */
+function parse_ExtProp(blob, length) {
+	var extType = blob.read_shift(2);
+	var cb = blob.read_shift(2);
+	var o = [extType];
+	switch(extType) {
+		case 0x04: case 0x05: case 0x07: case 0x08:
+		case 0x09: case 0x0A: case 0x0B: case 0x0D:
+			o[1] = parse_FullColorExt(blob, cb); break;
+		case 0x06: o[1] = parse_XFExtGradient(blob, cb); break;
+		case 0x0E: case 0x0F: o[1] = blob.read_shift(cb === 5 ? 1 : 2); break;
+		default: throw new Error("Unrecognized ExtProp type: " + extType + " " + cb);
+	}
+	return o;
+}
+
+/* 2.4.355 */
+function parse_XFExt(blob, length) {
+	var end = blob.l + length;
+	blob.l += 2;
+	var ixfe = blob.read_shift(2);
+	blob.l += 2;
+	var cexts = blob.read_shift(2);
+	var ext = [];
+	while(cexts-- > 0) ext.push(parse_ExtProp(blob, end-blob.l));
+	return {ixfe:ixfe, ext:ext};
+}
+
+/* xf is an XF, see parse_XFExt for xfext */
+function update_xfext(xf, xfext) {
+	xfext.forEach(function(xfe) {
+		switch(xfe[0]) { /* 2.5.108 extPropData */
+			case 0x04: break; /* foreground color */
+			case 0x05: break; /* background color */
+			case 0x07: case 0x08: case 0x09: case 0x0a: break;
+			case 0x0d: break; /* text color */
+			case 0x0e: break; /* font scheme */
+			default: throw "bafuq" + xfe[0].toString(16);
+		}
+	});
+}
+
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/52_ccxml.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/52_ccxml.js
new file mode 100644
index 0000000..0150de8
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/52_ccxml.js
@@ -0,0 +1,18 @@
+/* 18.6 Calculation Chain */
+function parse_cc_xml(data, opts) {
+	var d = [];
+	var l = 0, i = 1;
+	(data.match(tagregex)||[]).forEach(function(x) {
+		var y = parsexmltag(x);
+		switch(y[0]) {
+			case '<?xml': break;
+			/* 18.6.2  calcChain CT_CalcChain 1 */
+			case '<calcChain': case '<calcChain>': case '</calcChain>': break;
+			/* 18.6.1  c CT_CalcCell 1 */
+			case '<c': delete y[0]; if(y.i) i = y.i; else y.i = i; d.push(y); break;
+		}
+	});
+	return d;
+}
+
+function write_cc_xml(data, opts) { }
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/53_ccbin.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/53_ccbin.js
new file mode 100644
index 0000000..50cd79a
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/53_ccbin.js
@@ -0,0 +1,30 @@
+/* [MS-XLSB] 2.6.4.1 */
+function parse_BrtCalcChainItem$(data, length) {
+	var out = {};
+	out.i = data.read_shift(4);
+	var cell = {};
+	cell.r = data.read_shift(4);
+	cell.c = data.read_shift(4);
+	out.r = encode_cell(cell);
+	var flags = data.read_shift(1);
+	if(flags & 0x2) out.l = '1';
+	if(flags & 0x8) out.a = '1';
+	return out;
+}
+
+/* 18.6 Calculation Chain */
+function parse_cc_bin(data, opts) {
+	var out = [];
+	var pass = false;
+	recordhopper(data, function hopper_cc(val, R, RT) {
+		switch(R.n) {
+			case 'BrtCalcChainItem$': out.push(val); break;
+			case 'BrtBeginCalcChain$': break;
+			case 'BrtEndCalcChain$': break;
+			default: if(!pass || opts.WTF) throw new Error("Unexpected record " + RT + " " + R.n);
+		}
+	});
+	return out;
+}
+
+function write_cc_bin(data, opts) { }
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/56_cmntcommon.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/56_cmntcommon.js
new file mode 100644
index 0000000..c0f8ce4
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/56_cmntcommon.js
@@ -0,0 +1,42 @@
+
+function parse_comments(zip, dirComments, sheets, sheetRels, opts) {
+	for(var i = 0; i != dirComments.length; ++i) {
+		var canonicalpath=dirComments[i];
+		var comments=parse_cmnt(getzipdata(zip, canonicalpath.replace(/^\//,''), true), canonicalpath, opts);
+		if(!comments || !comments.length) continue;
+		// find the sheets targeted by these comments
+		var sheetNames = keys(sheets);
+		for(var j = 0; j != sheetNames.length; ++j) {
+			var sheetName = sheetNames[j];
+			var rels = sheetRels[sheetName];
+			if(rels) {
+				var rel = rels[canonicalpath];
+				if(rel) insertCommentsIntoSheet(sheetName, sheets[sheetName], comments);
+			}
+		}
+	}
+}
+
+function insertCommentsIntoSheet(sheetName, sheet, comments) {
+	comments.forEach(function(comment) {
+		var cell = sheet[comment.ref];
+		if (!cell) {
+			cell = {};
+			sheet[comment.ref] = cell;
+			var range = safe_decode_range(sheet["!ref"]||"BDWGO1000001:A1");
+			var thisCell = decode_cell(comment.ref);
+			if(range.s.r > thisCell.r) range.s.r = thisCell.r;
+			if(range.e.r < thisCell.r) range.e.r = thisCell.r;
+			if(range.s.c > thisCell.c) range.s.c = thisCell.c;
+			if(range.e.c < thisCell.c) range.e.c = thisCell.c;
+			var encoded = encode_range(range);
+			if (encoded !== sheet["!ref"]) sheet["!ref"] = encoded;
+		}
+
+		if (!cell.c) cell.c = [];
+		var o = {a: comment.author, t: comment.t, r: comment.r};
+		if(comment.h) o.h = comment.h;
+		cell.c.push(o);
+	});
+}
+
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/57_cmntxml.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/57_cmntxml.js
new file mode 100644
index 0000000..fdd3337
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/57_cmntxml.js
@@ -0,0 +1,27 @@
+/* 18.7.3 CT_Comment */
+function parse_comments_xml(data, opts) {
+	if(data.match(/<(?:\w+:)?comments *\/>/)) return [];
+	var authors = [];
+	var commentList = [];
+	data.match(/<(?:\w+:)?authors>([^\u2603]*)<\/(?:\w+:)?authors>/)[1].split(/<\/\w*:?author>/).forEach(function(x) {
+		if(x === "" || x.trim() === "") return;
+		authors.push(x.match(/<(?:\w+:)?author[^>]*>(.*)/)[1]);
+	});
+	(data.match(/<(?:\w+:)?commentList>([^\u2603]*)<\/(?:\w+:)?commentList>/)||["",""])[1].split(/<\/\w*:?comment>/).forEach(function(x, index) {
+		if(x === "" || x.trim() === "") return;
+		var y = parsexmltag(x.match(/<(?:\w+:)?comment[^>]*>/)[0]);
+		var comment = { author: y.authorId && authors[y.authorId] ? authors[y.authorId] : undefined, ref: y.ref, guid: y.guid };
+		var cell = decode_cell(y.ref);
+		if(opts.sheetRows && opts.sheetRows <= cell.r) return;
+		var textMatch = x.match(/<text>([^\u2603]*)<\/text>/);
+		if (!textMatch || !textMatch[1]) return; // a comment may contain an empty text tag.
+		var rt = parse_si(textMatch[1]);
+		comment.r = rt.r;
+		comment.t = rt.t;
+		if(opts.cellHTML) comment.h = rt.h;
+		commentList.push(comment);
+	});
+	return commentList;
+}
+
+function write_comments_xml(data, opts) { }
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/58_cmntbin.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/58_cmntbin.js
new file mode 100644
index 0000000..51579f2
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/58_cmntbin.js
@@ -0,0 +1,46 @@
+/* [MS-XLSB] 2.4.28 BrtBeginComment */
+function parse_BrtBeginComment(data, length) {
+	var out = {};
+	out.iauthor = data.read_shift(4);
+	var rfx = parse_UncheckedRfX(data, 16);
+	out.rfx = rfx.s;
+	out.ref = encode_cell(rfx.s);
+	data.l += 16; /*var guid = parse_GUID(data); */
+	return out;
+}
+
+/* [MS-XLSB] 2.4.324 BrtCommentAuthor */
+var parse_BrtCommentAuthor = parse_XLWideString;
+
+/* [MS-XLSB] 2.4.325 BrtCommentText */
+var parse_BrtCommentText = parse_RichStr;
+
+/* [MS-XLSB] 2.1.7.8 Comments */
+function parse_comments_bin(data, opts) {
+	var out = [];
+	var authors = [];
+	var c = {};
+	var pass = false;
+	recordhopper(data, function hopper_cmnt(val, R, RT) {
+		switch(R.n) {
+			case 'BrtCommentAuthor': authors.push(val); break;
+			case 'BrtBeginComment': c = val; break;
+			case 'BrtCommentText': c.t = val.t; c.h = val.h; c.r = val.r; break;
+			case 'BrtEndComment':
+				c.author = authors[c.iauthor];
+				delete c.iauthor;
+				if(opts.sheetRows && opts.sheetRows <= c.rfx.r) break;
+				delete c.rfx; out.push(c); break;
+			case 'BrtBeginComments': break;
+			case 'BrtEndComments': break;
+			case 'BrtBeginCommentAuthors': break;
+			case 'BrtEndCommentAuthors': break;
+			case 'BrtBeginCommentList': break;
+			case 'BrtEndCommentList': break;
+			default: if(!pass || opts.WTF) throw new Error("Unexpected record " + RT + " " + R.n);
+		}
+	});
+	return out;
+}
+
+function write_comments_bin(data, opts) { }
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/61_fcommon.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/61_fcommon.js
new file mode 100644
index 0000000..08a9754
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/61_fcommon.js
@@ -0,0 +1,17 @@
+/* TODO: it will be useful to parse the function str */
+var rc_to_a1 = (function(){
+	var rcregex = /(^|[^A-Za-z])R(\[?)(-?\d+|)\]?C(\[?)(-?\d+|)\]?/g;
+	var rcbase;
+	function rcfunc($$,$1,$2,$3,$4,$5) {
+		var R = $3.length>0?parseInt($3,10)|0:0, C = $5.length>0?parseInt($5,10)|0:0;
+		if(C<0 && $4.length === 0) C=0;
+		if($4.length > 0) C += rcbase.c;
+		if($2.length > 0) R += rcbase.r;
+		return $1 + encode_col(C) + encode_row(R);
+	}
+	return function rc_to_a1(fstr, base) {
+		rcbase = base;
+		return fstr.replace(rcregex, rcfunc);
+	};
+})();
+
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/62_fxls.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/62_fxls.js
new file mode 100644
index 0000000..45c9d0e
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/62_fxls.js
@@ -0,0 +1,803 @@
+/* --- formula references point to MS-XLS --- */
+/* Small helpers */
+function parseread(l) { return function(blob, length) { blob.l+=l; return; }; }
+function parseread1(blob, length) { blob.l+=1; return; }
+
+/* Rgce Helpers */
+
+/* 2.5.51 */
+function parse_ColRelU(blob, length) {
+	var c = blob.read_shift(2);
+	return [c & 0x3FFF, (c >> 14) & 1, (c >> 15) & 1];
+}
+
+/* 2.5.198.105 */
+function parse_RgceArea(blob, length) {
+	var r=blob.read_shift(2), R=blob.read_shift(2);
+	var c=parse_ColRelU(blob, 2);
+	var C=parse_ColRelU(blob, 2);
+	return { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} };
+}
+
+/* 2.5.198.105 TODO */
+function parse_RgceAreaRel(blob, length) {
+	var r=blob.read_shift(2), R=blob.read_shift(2);
+	var c=parse_ColRelU(blob, 2);
+	var C=parse_ColRelU(blob, 2);
+	return { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} };
+}
+
+/* 2.5.198.109 */
+function parse_RgceLoc(blob, length) {
+	var r = blob.read_shift(2);
+	var c = parse_ColRelU(blob, 2);
+	return {r:r, c:c[0], cRel:c[1], rRel:c[2]};
+}
+
+/* 2.5.198.111 */
+function parse_RgceLocRel(blob, length) {
+	var r = blob.read_shift(2);
+	var cl = blob.read_shift(2);
+	var cRel = (cl & 0x8000) >> 15, rRel = (cl & 0x4000) >> 14;
+	cl &= 0x3FFF;
+	if(cRel !== 0) while(cl >= 0x100) cl -= 0x100;
+	return {r:r,c:cl,cRel:cRel,rRel:rRel};
+}
+
+/* Ptg Tokens */
+
+/* 2.5.198.27 */
+function parse_PtgArea(blob, length) {
+	var type = (blob[blob.l++] & 0x60) >> 5;
+	var area = parse_RgceArea(blob, 8);
+	return [type, area];
+}
+
+/* 2.5.198.28 */
+function parse_PtgArea3d(blob, length) {
+	var type = (blob[blob.l++] & 0x60) >> 5;
+	var ixti = blob.read_shift(2);
+	var area = parse_RgceArea(blob, 8);
+	return [type, ixti, area];
+}
+
+/* 2.5.198.29 */
+function parse_PtgAreaErr(blob, length) {
+	var type = (blob[blob.l++] & 0x60) >> 5;
+	blob.l += 8;
+	return [type];
+}
+/* 2.5.198.30 */
+function parse_PtgAreaErr3d(blob, length) {
+	var type = (blob[blob.l++] & 0x60) >> 5;
+	var ixti = blob.read_shift(2);
+	blob.l += 8;
+	return [type, ixti];
+}
+
+/* 2.5.198.31 */
+function parse_PtgAreaN(blob, length) {
+	var type = (blob[blob.l++] & 0x60) >> 5;
+	var area = parse_RgceAreaRel(blob, 8);
+	return [type, area];
+}
+
+/* 2.5.198.32 -- ignore this and look in PtgExtraArray for shape + values */
+function parse_PtgArray(blob, length) {
+	var type = (blob[blob.l++] & 0x60) >> 5;
+	blob.l += 7;
+	return [type];
+}
+
+/* 2.5.198.33 */
+function parse_PtgAttrBaxcel(blob, length) {
+	var bitSemi = blob[blob.l+1] & 0x01; /* 1 = volatile */
+	var bitBaxcel = 1;
+	blob.l += 4;
+	return [bitSemi, bitBaxcel];
+}
+
+/* 2.5.198.34 */
+function parse_PtgAttrChoose(blob, length) {
+	blob.l +=2;
+	var offset = blob.read_shift(2);
+	var o = [];
+	/* offset is 1 less than the number of elements */
+	for(var i = 0; i <= offset; ++i) o.push(blob.read_shift(2));
+	return o;
+}
+
+/* 2.5.198.35 */
+function parse_PtgAttrGoto(blob, length) {
+	var bitGoto = (blob[blob.l+1] & 0xFF) ? 1 : 0;
+	blob.l += 2;
+	return [bitGoto, blob.read_shift(2)];
+}
+
+/* 2.5.198.36 */
+function parse_PtgAttrIf(blob, length) {
+	var bitIf = (blob[blob.l+1] & 0xFF) ? 1 : 0;
+	blob.l += 2;
+	return [bitIf, blob.read_shift(2)];
+}
+
+/* 2.5.198.37 */
+function parse_PtgAttrSemi(blob, length) {
+	var bitSemi = (blob[blob.l+1] & 0xFF) ? 1 : 0;
+	blob.l += 4;
+	return [bitSemi];
+}
+
+/* 2.5.198.40 (used by PtgAttrSpace and PtgAttrSpaceSemi) */
+function parse_PtgAttrSpaceType(blob, length) {
+	var type = blob.read_shift(1), cch = blob.read_shift(1);
+	return [type, cch];
+}
+
+/* 2.5.198.38 */
+function parse_PtgAttrSpace(blob, length) {
+	blob.read_shift(2);
+	return parse_PtgAttrSpaceType(blob, 2);
+}
+
+/* 2.5.198.39 */
+function parse_PtgAttrSpaceSemi(blob, length) {
+	blob.read_shift(2);
+	return parse_PtgAttrSpaceType(blob, 2);
+}
+
+/* 2.5.198.84 TODO */
+function parse_PtgRef(blob, length) {
+	var ptg = blob[blob.l] & 0x1F;
+	var type = (blob[blob.l] & 0x60)>>5;
+	blob.l += 1;
+	var loc = parse_RgceLoc(blob,4);
+	return [type, loc];
+}
+
+/* 2.5.198.88 TODO */
+function parse_PtgRefN(blob, length) {
+	var ptg = blob[blob.l] & 0x1F;
+	var type = (blob[blob.l] & 0x60)>>5;
+	blob.l += 1;
+	var loc = parse_RgceLocRel(blob,4);
+	return [type, loc];
+}
+
+/* 2.5.198.85 TODO */
+function parse_PtgRef3d(blob, length) {
+	var ptg = blob[blob.l] & 0x1F;
+	var type = (blob[blob.l] & 0x60)>>5;
+	blob.l += 1;
+	var ixti = blob.read_shift(2); // XtiIndex
+	var loc = parse_RgceLoc(blob,4);
+	return [type, ixti, loc];
+}
+
+
+/* 2.5.198.62 TODO */
+function parse_PtgFunc(blob, length) {
+	var ptg = blob[blob.l] & 0x1F;
+	var type = (blob[blob.l] & 0x60)>>5;
+	blob.l += 1;
+	var iftab = blob.read_shift(2);
+	return [FtabArgc[iftab], Ftab[iftab]];
+}
+/* 2.5.198.63 TODO */
+function parse_PtgFuncVar(blob, length) {
+	blob.l++;
+	var cparams = blob.read_shift(1), tab = parsetab(blob);
+	return [cparams, (tab[0] === 0 ? Ftab : Cetab)[tab[1]]];
+}
+
+function parsetab(blob, length) {
+	return [blob[blob.l+1]>>7, blob.read_shift(2) & 0x7FFF];
+}
+
+/* 2.5.198.41 */
+var parse_PtgAttrSum = parseread(4);
+/* 2.5.198.43 */
+var parse_PtgConcat = parseread1;
+
+/* 2.5.198.58 */
+function parse_PtgExp(blob, length) {
+	blob.l++;
+	var row = blob.read_shift(2);
+	var col = blob.read_shift(2);
+	return [row, col];
+}
+
+/* 2.5.198.57 */
+function parse_PtgErr(blob, length) { blob.l++; return BErr[blob.read_shift(1)]; }
+
+/* 2.5.198.66 TODO */
+function parse_PtgInt(blob, length) { blob.l++; return blob.read_shift(2); }
+
+/* 2.5.198.42 */
+function parse_PtgBool(blob, length) { blob.l++; return blob.read_shift(1)!==0;}
+
+/* 2.5.198.79 */
+function parse_PtgNum(blob, length) { blob.l++; return parse_Xnum(blob, 8); }
+
+/* 2.5.198.89 */
+function parse_PtgStr(blob, length) { blob.l++; return parse_ShortXLUnicodeString(blob); }
+
+/* 2.5.192.112 + 2.5.192.11{3,4,5,6,7} */
+function parse_SerAr(blob) {
+	var val = [];
+	switch((val[0] = blob.read_shift(1))) {
+		/* 2.5.192.113 */
+		case 0x04: /* SerBool -- boolean */
+			val[1] = parsebool(blob, 1) ? 'TRUE' : 'FALSE';
+			blob.l += 7; break;
+		/* 2.5.192.114 */
+		case 0x10: /* SerErr -- error */
+			val[1] = BErr[blob[blob.l]];
+			blob.l += 8; break;
+		/* 2.5.192.115 */
+		case 0x00: /* SerNil -- honestly, I'm not sure how to reproduce this */
+			blob.l += 8; break;
+		/* 2.5.192.116 */
+		case 0x01: /* SerNum -- Xnum */
+			val[1] = parse_Xnum(blob, 8); break;
+		/* 2.5.192.117 */
+		case 0x02: /* SerStr -- XLUnicodeString (<256 chars) */
+			val[1] = parse_XLUnicodeString(blob); break;
+		// default: throw "Bad SerAr: " + val[0]; /* Unreachable */
+	}
+	return val;
+}
+
+/* 2.5.198.61 */
+function parse_PtgExtraMem(blob, cce) {
+	var count = blob.read_shift(2);
+	var out = [];
+	for(var i = 0; i != count; ++i) out.push(parse_Ref8U(blob, 8));
+	return out;
+}
+
+/* 2.5.198.59 */
+function parse_PtgExtraArray(blob) {
+	var cols = 1 + blob.read_shift(1); //DColByteU
+	var rows = 1 + blob.read_shift(2); //DRw
+	for(var i = 0, o=[]; i != rows && (o[i] = []); ++i)
+		for(var j = 0; j != cols; ++j) o[i][j] = parse_SerAr(blob);
+	return o;
+}
+
+/* 2.5.198.76 */
+function parse_PtgName(blob, length) {
+	var type = (blob.read_shift(1) >>> 5) & 0x03;
+	var nameindex = blob.read_shift(4);
+	return [type, 0, nameindex];
+}
+
+/* 2.5.198.77 */
+function parse_PtgNameX(blob, length) {
+	var type = (blob.read_shift(1) >>> 5) & 0x03;
+	var ixti = blob.read_shift(2); // XtiIndex
+	var nameindex = blob.read_shift(4);
+	return [type, ixti, nameindex];
+}
+
+/* 2.5.198.70 */
+function parse_PtgMemArea(blob, length) {
+	var type = (blob.read_shift(1) >>> 5) & 0x03;
+	blob.l += 4;
+	var cce = blob.read_shift(2);
+	return [type, cce];
+}
+
+/* 2.5.198.72 */
+function parse_PtgMemFunc(blob, length) {
+	var type = (blob.read_shift(1) >>> 5) & 0x03;
+	var cce = blob.read_shift(2);
+	return [type, cce];
+}
+
+
+/* 2.5.198.86 */
+function parse_PtgRefErr(blob, length) {
+	var type = (blob.read_shift(1) >>> 5) & 0x03;
+	blob.l += 4;
+	return [type];
+}
+
+/* 2.5.198.26 */
+var parse_PtgAdd = parseread1;
+/* 2.5.198.45 */
+var parse_PtgDiv = parseread1;
+/* 2.5.198.56 */
+var parse_PtgEq = parseread1;
+/* 2.5.198.64 */
+var parse_PtgGe = parseread1;
+/* 2.5.198.65 */
+var parse_PtgGt = parseread1;
+/* 2.5.198.67 */
+var parse_PtgIsect = parseread1;
+/* 2.5.198.68 */
+var parse_PtgLe = parseread1;
+/* 2.5.198.69 */
+var parse_PtgLt = parseread1;
+/* 2.5.198.74 */
+var parse_PtgMissArg = parseread1;
+/* 2.5.198.75 */
+var parse_PtgMul = parseread1;
+/* 2.5.198.78 */
+var parse_PtgNe = parseread1;
+/* 2.5.198.80 */
+var parse_PtgParen = parseread1;
+/* 2.5.198.81 */
+var parse_PtgPercent = parseread1;
+/* 2.5.198.82 */
+var parse_PtgPower = parseread1;
+/* 2.5.198.83 */
+var parse_PtgRange = parseread1;
+/* 2.5.198.90 */
+var parse_PtgSub = parseread1;
+/* 2.5.198.93 */
+var parse_PtgUminus = parseread1;
+/* 2.5.198.94 */
+var parse_PtgUnion = parseread1;
+/* 2.5.198.95 */
+var parse_PtgUplus = parseread1;
+
+/* 2.5.198.71 */
+var parse_PtgMemErr = parsenoop;
+/* 2.5.198.73 */
+var parse_PtgMemNoMem = parsenoop;
+/* 2.5.198.87 */
+var parse_PtgRefErr3d = parsenoop;
+/* 2.5.198.92 */
+var parse_PtgTbl = parsenoop;
+
+/* 2.5.198.25 */
+var PtgTypes = {
+	0x01: { n:'PtgExp', f:parse_PtgExp },
+	0x02: { n:'PtgTbl', f:parse_PtgTbl },
+	0x03: { n:'PtgAdd', f:parse_PtgAdd },
+	0x04: { n:'PtgSub', f:parse_PtgSub },
+	0x05: { n:'PtgMul', f:parse_PtgMul },
+	0x06: { n:'PtgDiv', f:parse_PtgDiv },
+	0x07: { n:'PtgPower', f:parse_PtgPower },
+	0x08: { n:'PtgConcat', f:parse_PtgConcat },
+	0x09: { n:'PtgLt', f:parse_PtgLt },
+	0x0A: { n:'PtgLe', f:parse_PtgLe },
+	0x0B: { n:'PtgEq', f:parse_PtgEq },
+	0x0C: { n:'PtgGe', f:parse_PtgGe },
+	0x0D: { n:'PtgGt', f:parse_PtgGt },
+	0x0E: { n:'PtgNe', f:parse_PtgNe },
+	0x0F: { n:'PtgIsect', f:parse_PtgIsect },
+	0x10: { n:'PtgUnion', f:parse_PtgUnion },
+	0x11: { n:'PtgRange', f:parse_PtgRange },
+	0x12: { n:'PtgUplus', f:parse_PtgUplus },
+	0x13: { n:'PtgUminus', f:parse_PtgUminus },
+	0x14: { n:'PtgPercent', f:parse_PtgPercent },
+	0x15: { n:'PtgParen', f:parse_PtgParen },
+	0x16: { n:'PtgMissArg', f:parse_PtgMissArg },
+	0x17: { n:'PtgStr', f:parse_PtgStr },
+	0x1C: { n:'PtgErr', f:parse_PtgErr },
+	0x1D: { n:'PtgBool', f:parse_PtgBool },
+	0x1E: { n:'PtgInt', f:parse_PtgInt },
+	0x1F: { n:'PtgNum', f:parse_PtgNum },
+	0x20: { n:'PtgArray', f:parse_PtgArray },
+	0x21: { n:'PtgFunc', f:parse_PtgFunc },
+	0x22: { n:'PtgFuncVar', f:parse_PtgFuncVar },
+	0x23: { n:'PtgName', f:parse_PtgName },
+	0x24: { n:'PtgRef', f:parse_PtgRef },
+	0x25: { n:'PtgArea', f:parse_PtgArea },
+	0x26: { n:'PtgMemArea', f:parse_PtgMemArea },
+	0x27: { n:'PtgMemErr', f:parse_PtgMemErr },
+	0x28: { n:'PtgMemNoMem', f:parse_PtgMemNoMem },
+	0x29: { n:'PtgMemFunc', f:parse_PtgMemFunc },
+	0x2A: { n:'PtgRefErr', f:parse_PtgRefErr },
+	0x2B: { n:'PtgAreaErr', f:parse_PtgAreaErr },
+	0x2C: { n:'PtgRefN', f:parse_PtgRefN },
+	0x2D: { n:'PtgAreaN', f:parse_PtgAreaN },
+	0x39: { n:'PtgNameX', f:parse_PtgNameX },
+	0x3A: { n:'PtgRef3d', f:parse_PtgRef3d },
+	0x3B: { n:'PtgArea3d', f:parse_PtgArea3d },
+	0x3C: { n:'PtgRefErr3d', f:parse_PtgRefErr3d },
+	0x3D: { n:'PtgAreaErr3d', f:parse_PtgAreaErr3d },
+	0xFF: {}
+};
+/* These are duplicated in the PtgTypes table */
+var PtgDupes = {
+	0x40: 0x20, 0x60: 0x20,
+	0x41: 0x21, 0x61: 0x21,
+	0x42: 0x22, 0x62: 0x22,
+	0x43: 0x23, 0x63: 0x23,
+	0x44: 0x24, 0x64: 0x24,
+	0x45: 0x25, 0x65: 0x25,
+	0x46: 0x26, 0x66: 0x26,
+	0x47: 0x27, 0x67: 0x27,
+	0x48: 0x28, 0x68: 0x28,
+	0x49: 0x29, 0x69: 0x29,
+	0x4A: 0x2A, 0x6A: 0x2A,
+	0x4B: 0x2B, 0x6B: 0x2B,
+	0x4C: 0x2C, 0x6C: 0x2C,
+	0x4D: 0x2D, 0x6D: 0x2D,
+	0x59: 0x39, 0x79: 0x39,
+	0x5A: 0x3A, 0x7A: 0x3A,
+	0x5B: 0x3B, 0x7B: 0x3B,
+	0x5C: 0x3C, 0x7C: 0x3C,
+	0x5D: 0x3D, 0x7D: 0x3D
+};
+(function(){for(var y in PtgDupes) PtgTypes[y] = PtgTypes[PtgDupes[y]];})();
+
+var Ptg18 = {};
+var Ptg19 = {
+	0x01: { n:'PtgAttrSemi', f:parse_PtgAttrSemi },
+	0x02: { n:'PtgAttrIf', f:parse_PtgAttrIf },
+	0x04: { n:'PtgAttrChoose', f:parse_PtgAttrChoose },
+	0x08: { n:'PtgAttrGoto', f:parse_PtgAttrGoto },
+	0x10: { n:'PtgAttrSum', f:parse_PtgAttrSum },
+	0x20: { n:'PtgAttrBaxcel', f:parse_PtgAttrBaxcel },
+	0x40: { n:'PtgAttrSpace', f:parse_PtgAttrSpace },
+	0x41: { n:'PtgAttrSpaceSemi', f:parse_PtgAttrSpaceSemi },
+	0xFF: {}
+};
+
+/* 2.4.127 TODO */
+function parse_Formula(blob, length, opts) {
+	var cell = parse_XLSCell(blob, 6);
+	var val = parse_FormulaValue(blob,8);
+	var flags = blob.read_shift(1);
+	blob.read_shift(1);
+	var chn = blob.read_shift(4);
+	var cbf = "";
+	if(opts.biff === 5) blob.l += length-20;
+	else cbf = parse_XLSCellParsedFormula(blob, length-20, opts);
+	return {cell:cell, val:val[0], formula:cbf, shared: (flags >> 3) & 1, tt:val[1]};
+}
+
+/* 2.5.133 TODO: how to emit empty strings? */
+function parse_FormulaValue(blob) {
+	var b;
+	if(__readUInt16LE(blob,blob.l + 6) !== 0xFFFF) return [parse_Xnum(blob),'n'];
+	switch(blob[blob.l]) {
+		case 0x00: blob.l += 8; return ["String", 's'];
+		case 0x01: b = blob[blob.l+2] === 0x1; blob.l += 8; return [b,'b'];
+		case 0x02: b = blob[blob.l+2]; blob.l += 8; return [b,'e'];
+		case 0x03: blob.l += 8; return ["",'s'];
+	}
+}
+
+/* 2.5.198.103 */
+function parse_RgbExtra(blob, length, rgce, opts) {
+	if(opts.biff < 8) return parsenoop(blob, length);
+	var target = blob.l + length;
+	var o = [];
+	for(var i = 0; i !== rgce.length; ++i) {
+		switch(rgce[i][0]) {
+			case 'PtgArray': /* PtgArray -> PtgExtraArray */
+				rgce[i][1] = parse_PtgExtraArray(blob);
+				o.push(rgce[i][1]);
+				break;
+			case 'PtgMemArea': /* PtgMemArea -> PtgExtraMem */
+				rgce[i][2] = parse_PtgExtraMem(blob, rgce[i][1]);
+				o.push(rgce[i][2]);
+				break;
+			default: break;
+		}
+	}
+	length = target - blob.l;
+	if(length !== 0) o.push(parsenoop(blob, length));
+	return o;
+}
+
+/* 2.5.198.21 */
+function parse_NameParsedFormula(blob, length, opts, cce) {
+	var target = blob.l + length;
+	var rgce = parse_Rgce(blob, cce);
+	var rgcb;
+	if(target !== blob.l) rgcb = parse_RgbExtra(blob, target - blob.l, rgce, opts);
+	return [rgce, rgcb];
+}
+
+/* 2.5.198.3 TODO */
+function parse_XLSCellParsedFormula(blob, length, opts) {
+	var target = blob.l + length;
+	var rgcb, cce = blob.read_shift(2); // length of rgce
+	if(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];
+	var rgce = parse_Rgce(blob, cce);
+	if(length !== cce + 2) rgcb = parse_RgbExtra(blob, length - cce - 2, rgce, opts);
+	return [rgce, rgcb];
+}
+
+/* 2.5.198.118 TODO */
+function parse_SharedParsedFormula(blob, length, opts) {
+	var target = blob.l + length;
+	var rgcb, cce = blob.read_shift(2); // length of rgce
+	var rgce = parse_Rgce(blob, cce);
+	if(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];
+	if(length !== cce + 2) rgcb = parse_RgbExtra(blob, target - cce - 2, rgce, opts);
+	return [rgce, rgcb];
+}
+
+/* 2.5.198.1 TODO */
+function parse_ArrayParsedFormula(blob, length, opts, ref) {
+	var target = blob.l + length;
+	var rgcb, cce = blob.read_shift(2); // length of rgce
+	if(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];
+	var rgce = parse_Rgce(blob, cce);
+	if(length !== cce + 2) rgcb = parse_RgbExtra(blob, target - cce - 2, rgce, opts);
+	return [rgce, rgcb];
+}
+
+/* 2.5.198.104 */
+function parse_Rgce(blob, length) {
+	var target = blob.l + length;
+	var R, id, ptgs = [];
+	while(target != blob.l) {
+		length = target - blob.l;
+		id = blob[blob.l];
+		R = PtgTypes[id];
+		//console.log("ptg", id, R)
+		if(id === 0x18 || id === 0x19) {
+			id = blob[blob.l + 1];
+			R = (id === 0x18 ? Ptg18 : Ptg19)[id];
+		}
+		if(!R || !R.f) { ptgs.push(parsenoop(blob, length)); }
+		else { ptgs.push([R.n, R.f(blob, length)]); }
+	}
+	return ptgs;
+}
+
+function mapper(x) { return x.map(function f2(y) { return y[1];}).join(",");}
+
+/* 2.2.2 + Magic TODO */
+function stringify_formula(formula, range, cell, supbooks, opts) {
+	if(opts !== undefined && opts.biff === 5) return "BIFF5??";
+	var _range = range !== undefined ? range : {s:{c:0, r:0}};
+	var stack = [], e1, e2, type, c, ixti, nameidx, r;
+	if(!formula[0] || !formula[0][0]) return "";
+	//console.log("--",cell,formula[0])
+	for(var ff = 0, fflen = formula[0].length; ff < fflen; ++ff) {
+		var f = formula[0][ff];
+		//console.log("++",f, stack)
+		switch(f[0]) {
+		/* 2.2.2.1 Unary Operator Tokens */
+			/* 2.5.198.93 */
+			case 'PtgUminus': stack.push("-" + stack.pop()); break;
+			/* 2.5.198.95 */
+			case 'PtgUplus': stack.push("+" + stack.pop()); break;
+			/* 2.5.198.81 */
+			case 'PtgPercent': stack.push(stack.pop() + "%"); break;
+
+		/* 2.2.2.1 Binary Value Operator Token */
+			/* 2.5.198.26 */
+			case 'PtgAdd':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+"+"+e1);
+				break;
+			/* 2.5.198.90 */
+			case 'PtgSub':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+"-"+e1);
+				break;
+			/* 2.5.198.75 */
+			case 'PtgMul':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+"*"+e1);
+				break;
+			/* 2.5.198.45 */
+			case 'PtgDiv':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+"/"+e1);
+				break;
+			/* 2.5.198.82 */
+			case 'PtgPower':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+"^"+e1);
+				break;
+			/* 2.5.198.43 */
+			case 'PtgConcat':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+"&"+e1);
+				break;
+			/* 2.5.198.69 */
+			case 'PtgLt':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+"<"+e1);
+				break;
+			/* 2.5.198.68 */
+			case 'PtgLe':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+"<="+e1);
+				break;
+			/* 2.5.198.56 */
+			case 'PtgEq':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+"="+e1);
+				break;
+			/* 2.5.198.64 */
+			case 'PtgGe':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+">="+e1);
+				break;
+			/* 2.5.198.65 */
+			case 'PtgGt':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+">"+e1);
+				break;
+			/* 2.5.198.78 */
+			case 'PtgNe':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+"<>"+e1);
+				break;
+
+		/* 2.2.2.1 Binary Reference Operator Token */
+			/* 2.5.198.67 */
+			case 'PtgIsect':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+" "+e1);
+				break;
+			case 'PtgUnion':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+","+e1);
+				break;
+			case 'PtgRange': break;
+
+		/* 2.2.2.3 Control Tokens "can be ignored" */
+			/* 2.5.198.34 */
+			case 'PtgAttrChoose': break;
+			/* 2.5.198.35 */
+			case 'PtgAttrGoto': break;
+			/* 2.5.198.36 */
+			case 'PtgAttrIf': break;
+
+
+			/* 2.5.198.84 */
+			case 'PtgRef':
+				type = f[1][0]; c = shift_cell_xls(decode_cell(encode_cell(f[1][1])), _range);
+				stack.push(encode_cell(c));
+				break;
+			/* 2.5.198.88 */
+			case 'PtgRefN':
+				type = f[1][0]; c = shift_cell_xls(decode_cell(encode_cell(f[1][1])), cell);
+				stack.push(encode_cell(c));
+				break;
+			case 'PtgRef3d': // TODO: lots of stuff
+				type = f[1][0]; ixti = f[1][1]; c = shift_cell_xls(f[1][2], _range);
+				stack.push(supbooks[1][ixti+1]+"!"+encode_cell(c));
+				break;
+
+		/* Function Call */
+			/* 2.5.198.62 */
+			case 'PtgFunc':
+			/* 2.5.198.63 */
+			case 'PtgFuncVar':
+				/* f[1] = [argc, func] */
+				var argc = f[1][0], func = f[1][1];
+				if(!argc) argc = 0;
+				var args = stack.slice(-argc);
+				stack.length -= argc;
+				if(func === 'User') func = args.shift();
+				stack.push(func + "(" + args.join(",") + ")");
+				break;
+
+			/* 2.5.198.42 */
+			case 'PtgBool': stack.push(f[1] ? "TRUE" : "FALSE"); break;
+			/* 2.5.198.66 */
+			case 'PtgInt': stack.push(f[1]); break;
+			/* 2.5.198.79 TODO: precision? */
+			case 'PtgNum': stack.push(String(f[1])); break;
+			/* 2.5.198.89 */
+			case 'PtgStr': stack.push('"' + f[1] + '"'); break;
+			/* 2.5.198.57 */
+			case 'PtgErr': stack.push(f[1]); break;
+			/* 2.5.198.27 TODO: fixed points */
+			case 'PtgArea':
+				type = f[1][0]; r = shift_range_xls(f[1][1], _range);
+				stack.push(encode_range(r));
+				break;
+			/* 2.5.198.28 */
+			case 'PtgArea3d': // TODO: lots of stuff
+				type = f[1][0]; ixti = f[1][1]; r = f[1][2];
+				stack.push(supbooks[1][ixti+1]+"!"+encode_range(r));
+				break;
+			/* 2.5.198.41 */
+			case 'PtgAttrSum':
+				stack.push("SUM(" + stack.pop() + ")");
+				break;
+
+		/* Expression Prefixes */
+			/* 2.5.198.37 */
+			case 'PtgAttrSemi': break;
+
+			/* 2.5.97.60 TODO: do something different for revisions */
+			case 'PtgName':
+				/* f[1] = type, 0, nameindex */
+				nameidx = f[1][2];
+				var lbl = supbooks[0][nameidx];
+				var name = lbl.Name;
+				if(name in XLSXFutureFunctions) name = XLSXFutureFunctions[name];
+				stack.push(name);
+				break;
+
+			/* 2.5.97.61 TODO: do something different for revisions */
+			case 'PtgNameX':
+				/* f[1] = type, ixti, nameindex */
+				var bookidx = f[1][1]; nameidx = f[1][2]; var externbook;
+				/* TODO: Properly handle missing values */
+				if(supbooks[bookidx+1]) externbook = supbooks[bookidx+1][nameidx];
+				else if(supbooks[bookidx-1]) externbook = supbooks[bookidx-1][nameidx];
+				if(!externbook) externbook = {body: "??NAMEX??"};
+				stack.push(externbook.body);
+				break;
+
+		/* 2.2.2.4 Display Tokens */
+			/* 2.5.198.80 */
+			case 'PtgParen': stack.push('(' + stack.pop() + ')'); break;
+
+			/* 2.5.198.86 */
+			case 'PtgRefErr': stack.push('#REF!'); break;
+
+		/* */
+			/* 2.5.198.58 TODO */
+			case 'PtgExp':
+				c = {c:f[1][1],r:f[1][0]};
+				var q = {c: cell.c, r:cell.r};
+				if(supbooks.sharedf[encode_cell(c)]) {
+					var parsedf = (supbooks.sharedf[encode_cell(c)]);
+					stack.push(stringify_formula(parsedf, _range, q, supbooks, opts));
+				}
+				else {
+					var fnd = false;
+					for(e1=0;e1!=supbooks.arrayf.length; ++e1) {
+						/* TODO: should be something like range_has */
+						e2 = supbooks.arrayf[e1];
+						if(c.c < e2[0].s.c || c.c > e2[0].e.c) continue;
+						if(c.r < e2[0].s.r || c.r > e2[0].e.r) continue;
+						stack.push(stringify_formula(e2[1], _range, q, supbooks, opts));
+					}
+					if(!fnd) stack.push(f[1]);
+				}
+				break;
+
+			/* 2.5.198.32 TODO */
+			case 'PtgArray':
+				stack.push("{" + f[1].map(mapper).join(";") + "}");
+				break;
+
+		/* 2.2.2.5 Mem Tokens */
+			/* 2.5.198.70 TODO: confirm this is a non-display */
+			case 'PtgMemArea':
+				//stack.push("(" + f[2].map(encode_range).join(",") + ")");
+				break;
+
+			/* 2.5.198.38 TODO */
+			case 'PtgAttrSpace': break;
+
+			/* 2.5.198.92 TODO */
+			case 'PtgTbl': break;
+
+			/* 2.5.198.71 */
+			case 'PtgMemErr': break;
+
+			/* 2.5.198.74 */
+			case 'PtgMissArg':
+				stack.push("");
+				break;
+
+			/* 2.5.198.29 TODO */
+			case 'PtgAreaErr': break;
+
+			/* 2.5.198.31 TODO */
+			case 'PtgAreaN': stack.push(""); break;
+
+			/* 2.5.198.87 TODO */
+			case 'PtgRefErr3d': break;
+
+			/* 2.5.198.72 TODO */
+			case 'PtgMemFunc': break;
+
+			default: throw 'Unrecognized Formula Token: ' + f;
+		}
+		//console.log("::",f, stack)
+	}
+	//console.log("--",stack);
+	return stack[0];
+}
+
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/63_fbin.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/63_fbin.js
new file mode 100644
index 0000000..a3244a7
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/63_fbin.js
@@ -0,0 +1,5 @@
+/* [MS-XLSB] 2.5.97.4 CellParsedFormula TODO: use similar logic to js-xls */
+function parse_XLSBCellParsedFormula(data, length) {
+	var cce = data.read_shift(4);
+	return parsenoop(data, length-4);
+}
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/64_ftab.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/64_ftab.js
new file mode 100644
index 0000000..50e344b
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/64_ftab.js
@@ -0,0 +1,1090 @@
+/* [MS-XLS] 2.5.198.44 */
+var PtgDataType = {
+	0x1: "REFERENCE", // reference to range
+	0x2: "VALUE", // single value
+	0x3: "ARRAY" // array of values
+};
+
+/* [MS-XLS] 2.5.198.4 */
+var Cetab = {
+	0x0000: 'BEEP',
+	0x0001: 'OPEN',
+	0x0002: 'OPEN.LINKS',
+	0x0003: 'CLOSE.ALL',
+	0x0004: 'SAVE',
+	0x0005: 'SAVE.AS',
+	0x0006: 'FILE.DELETE',
+	0x0007: 'PAGE.SETUP',
+	0x0008: 'PRINT',
+	0x0009: 'PRINTER.SETUP',
+	0x000A: 'QUIT',
+	0x000B: 'NEW.WINDOW',
+	0x000C: 'ARRANGE.ALL',
+	0x000D: 'WINDOW.SIZE',
+	0x000E: 'WINDOW.MOVE',
+	0x000F: 'FULL',
+	0x0010: 'CLOSE',
+	0x0011: 'RUN',
+	0x0016: 'SET.PRINT.AREA',
+	0x0017: 'SET.PRINT.TITLES',
+	0x0018: 'SET.PAGE.BREAK',
+	0x0019: 'REMOVE.PAGE.BREAK',
+	0x001A: 'FONT',
+	0x001B: 'DISPLAY',
+	0x001C: 'PROTECT.DOCUMENT',
+	0x001D: 'PRECISION',
+	0x001E: 'A1.R1C1',
+	0x001F: 'CALCULATE.NOW',
+	0x0020: 'CALCULATION',
+	0x0022: 'DATA.FIND',
+	0x0023: 'EXTRACT',
+	0x0024: 'DATA.DELETE',
+	0x0025: 'SET.DATABASE',
+	0x0026: 'SET.CRITERIA',
+	0x0027: 'SORT',
+	0x0028: 'DATA.SERIES',
+	0x0029: 'TABLE',
+	0x002A: 'FORMAT.NUMBER',
+	0x002B: 'ALIGNMENT',
+	0x002C: 'STYLE',
+	0x002D: 'BORDER',
+	0x002E: 'CELL.PROTECTION',
+	0x002F: 'COLUMN.WIDTH',
+	0x0030: 'UNDO',
+	0x0031: 'CUT',
+	0x0032: 'COPY',
+	0x0033: 'PASTE',
+	0x0034: 'CLEAR',
+	0x0035: 'PASTE.SPECIAL',
+	0x0036: 'EDIT.DELETE',
+	0x0037: 'INSERT',
+	0x0038: 'FILL.RIGHT',
+	0x0039: 'FILL.DOWN',
+	0x003D: 'DEFINE.NAME',
+	0x003E: 'CREATE.NAMES',
+	0x003F: 'FORMULA.GOTO',
+	0x0040: 'FORMULA.FIND',
+	0x0041: 'SELECT.LAST.CELL',
+	0x0042: 'SHOW.ACTIVE.CELL',
+	0x0043: 'GALLERY.AREA',
+	0x0044: 'GALLERY.BAR',
+	0x0045: 'GALLERY.COLUMN',
+	0x0046: 'GALLERY.LINE',
+	0x0047: 'GALLERY.PIE',
+	0x0048: 'GALLERY.SCATTER',
+	0x0049: 'COMBINATION',
+	0x004A: 'PREFERRED',
+	0x004B: 'ADD.OVERLAY',
+	0x004C: 'GRIDLINES',
+	0x004D: 'SET.PREFERRED',
+	0x004E: 'AXES',
+	0x004F: 'LEGEND',
+	0x0050: 'ATTACH.TEXT',
+	0x0051: 'ADD.ARROW',
+	0x0052: 'SELECT.CHART',
+	0x0053: 'SELECT.PLOT.AREA',
+	0x0054: 'PATTERNS',
+	0x0055: 'MAIN.CHART',
+	0x0056: 'OVERLAY',
+	0x0057: 'SCALE',
+	0x0058: 'FORMAT.LEGEND',
+	0x0059: 'FORMAT.TEXT',
+	0x005A: 'EDIT.REPEAT',
+	0x005B: 'PARSE',
+	0x005C: 'JUSTIFY',
+	0x005D: 'HIDE',
+	0x005E: 'UNHIDE',
+	0x005F: 'WORKSPACE',
+	0x0060: 'FORMULA',
+	0x0061: 'FORMULA.FILL',
+	0x0062: 'FORMULA.ARRAY',
+	0x0063: 'DATA.FIND.NEXT',
+	0x0064: 'DATA.FIND.PREV',
+	0x0065: 'FORMULA.FIND.NEXT',
+	0x0066: 'FORMULA.FIND.PREV',
+	0x0067: 'ACTIVATE',
+	0x0068: 'ACTIVATE.NEXT',
+	0x0069: 'ACTIVATE.PREV',
+	0x006A: 'UNLOCKED.NEXT',
+	0x006B: 'UNLOCKED.PREV',
+	0x006C: 'COPY.PICTURE',
+	0x006D: 'SELECT',
+	0x006E: 'DELETE.NAME',
+	0x006F: 'DELETE.FORMAT',
+	0x0070: 'VLINE',
+	0x0071: 'HLINE',
+	0x0072: 'VPAGE',
+	0x0073: 'HPAGE',
+	0x0074: 'VSCROLL',
+	0x0075: 'HSCROLL',
+	0x0076: 'ALERT',
+	0x0077: 'NEW',
+	0x0078: 'CANCEL.COPY',
+	0x0079: 'SHOW.CLIPBOARD',
+	0x007A: 'MESSAGE',
+	0x007C: 'PASTE.LINK',
+	0x007D: 'APP.ACTIVATE',
+	0x007E: 'DELETE.ARROW',
+	0x007F: 'ROW.HEIGHT',
+	0x0080: 'FORMAT.MOVE',
+	0x0081: 'FORMAT.SIZE',
+	0x0082: 'FORMULA.REPLACE',
+	0x0083: 'SEND.KEYS',
+	0x0084: 'SELECT.SPECIAL',
+	0x0085: 'APPLY.NAMES',
+	0x0086: 'REPLACE.FONT',
+	0x0087: 'FREEZE.PANES',
+	0x0088: 'SHOW.INFO',
+	0x0089: 'SPLIT',
+	0x008A: 'ON.WINDOW',
+	0x008B: 'ON.DATA',
+	0x008C: 'DISABLE.INPUT',
+	0x008E: 'OUTLINE',
+	0x008F: 'LIST.NAMES',
+	0x0090: 'FILE.CLOSE',
+	0x0091: 'SAVE.WORKBOOK',
+	0x0092: 'DATA.FORM',
+	0x0093: 'COPY.CHART',
+	0x0094: 'ON.TIME',
+	0x0095: 'WAIT',
+	0x0096: 'FORMAT.FONT',
+	0x0097: 'FILL.UP',
+	0x0098: 'FILL.LEFT',
+	0x0099: 'DELETE.OVERLAY',
+	0x009B: 'SHORT.MENUS',
+	0x009F: 'SET.UPDATE.STATUS',
+	0x00A1: 'COLOR.PALETTE',
+	0x00A2: 'DELETE.STYLE',
+	0x00A3: 'WINDOW.RESTORE',
+	0x00A4: 'WINDOW.MAXIMIZE',
+	0x00A6: 'CHANGE.LINK',
+	0x00A7: 'CALCULATE.DOCUMENT',
+	0x00A8: 'ON.KEY',
+	0x00A9: 'APP.RESTORE',
+	0x00AA: 'APP.MOVE',
+	0x00AB: 'APP.SIZE',
+	0x00AC: 'APP.MINIMIZE',
+	0x00AD: 'APP.MAXIMIZE',
+	0x00AE: 'BRING.TO.FRONT',
+	0x00AF: 'SEND.TO.BACK',
+	0x00B9: 'MAIN.CHART.TYPE',
+	0x00BA: 'OVERLAY.CHART.TYPE',
+	0x00BB: 'SELECT.END',
+	0x00BC: 'OPEN.MAIL',
+	0x00BD: 'SEND.MAIL',
+	0x00BE: 'STANDARD.FONT',
+	0x00BF: 'CONSOLIDATE',
+	0x00C0: 'SORT.SPECIAL',
+	0x00C1: 'GALLERY.3D.AREA',
+	0x00C2: 'GALLERY.3D.COLUMN',
+	0x00C3: 'GALLERY.3D.LINE',
+	0x00C4: 'GALLERY.3D.PIE',
+	0x00C5: 'VIEW.3D',
+	0x00C6: 'GOAL.SEEK',
+	0x00C7: 'WORKGROUP',
+	0x00C8: 'FILL.GROUP',
+	0x00C9: 'UPDATE.LINK',
+	0x00CA: 'PROMOTE',
+	0x00CB: 'DEMOTE',
+	0x00CC: 'SHOW.DETAIL',
+	0x00CE: 'UNGROUP',
+	0x00CF: 'OBJECT.PROPERTIES',
+	0x00D0: 'SAVE.NEW.OBJECT',
+	0x00D1: 'SHARE',
+	0x00D2: 'SHARE.NAME',
+	0x00D3: 'DUPLICATE',
+	0x00D4: 'APPLY.STYLE',
+	0x00D5: 'ASSIGN.TO.OBJECT',
+	0x00D6: 'OBJECT.PROTECTION',
+	0x00D7: 'HIDE.OBJECT',
+	0x00D8: 'SET.EXTRACT',
+	0x00D9: 'CREATE.PUBLISHER',
+	0x00DA: 'SUBSCRIBE.TO',
+	0x00DB: 'ATTRIBUTES',
+	0x00DC: 'SHOW.TOOLBAR',
+	0x00DE: 'PRINT.PREVIEW',
+	0x00DF: 'EDIT.COLOR',
+	0x00E0: 'SHOW.LEVELS',
+	0x00E1: 'FORMAT.MAIN',
+	0x00E2: 'FORMAT.OVERLAY',
+	0x00E3: 'ON.RECALC',
+	0x00E4: 'EDIT.SERIES',
+	0x00E5: 'DEFINE.STYLE',
+	0x00F0: 'LINE.PRINT',
+	0x00F3: 'ENTER.DATA',
+	0x00F9: 'GALLERY.RADAR',
+	0x00FA: 'MERGE.STYLES',
+	0x00FB: 'EDITION.OPTIONS',
+	0x00FC: 'PASTE.PICTURE',
+	0x00FD: 'PASTE.PICTURE.LINK',
+	0x00FE: 'SPELLING',
+	0x0100: 'ZOOM',
+	0x0103: 'INSERT.OBJECT',
+	0x0104: 'WINDOW.MINIMIZE',
+	0x0109: 'SOUND.NOTE',
+	0x010A: 'SOUND.PLAY',
+	0x010B: 'FORMAT.SHAPE',
+	0x010C: 'EXTEND.POLYGON',
+	0x010D: 'FORMAT.AUTO',
+	0x0110: 'GALLERY.3D.BAR',
+	0x0111: 'GALLERY.3D.SURFACE',
+	0x0112: 'FILL.AUTO',
+	0x0114: 'CUSTOMIZE.TOOLBAR',
+	0x0115: 'ADD.TOOL',
+	0x0116: 'EDIT.OBJECT',
+	0x0117: 'ON.DOUBLECLICK',
+	0x0118: 'ON.ENTRY',
+	0x0119: 'WORKBOOK.ADD',
+	0x011A: 'WORKBOOK.MOVE',
+	0x011B: 'WORKBOOK.COPY',
+	0x011C: 'WORKBOOK.OPTIONS',
+	0x011D: 'SAVE.WORKSPACE',
+	0x0120: 'CHART.WIZARD',
+	0x0121: 'DELETE.TOOL',
+	0x0122: 'MOVE.TOOL',
+	0x0123: 'WORKBOOK.SELECT',
+	0x0124: 'WORKBOOK.ACTIVATE',
+	0x0125: 'ASSIGN.TO.TOOL',
+	0x0127: 'COPY.TOOL',
+	0x0128: 'RESET.TOOL',
+	0x0129: 'CONSTRAIN.NUMERIC',
+	0x012A: 'PASTE.TOOL',
+	0x012E: 'WORKBOOK.NEW',
+	0x0131: 'SCENARIO.CELLS',
+	0x0132: 'SCENARIO.DELETE',
+	0x0133: 'SCENARIO.ADD',
+	0x0134: 'SCENARIO.EDIT',
+	0x0135: 'SCENARIO.SHOW',
+	0x0136: 'SCENARIO.SHOW.NEXT',
+	0x0137: 'SCENARIO.SUMMARY',
+	0x0138: 'PIVOT.TABLE.WIZARD',
+	0x0139: 'PIVOT.FIELD.PROPERTIES',
+	0x013A: 'PIVOT.FIELD',
+	0x013B: 'PIVOT.ITEM',
+	0x013C: 'PIVOT.ADD.FIELDS',
+	0x013E: 'OPTIONS.CALCULATION',
+	0x013F: 'OPTIONS.EDIT',
+	0x0140: 'OPTIONS.VIEW',
+	0x0141: 'ADDIN.MANAGER',
+	0x0142: 'MENU.EDITOR',
+	0x0143: 'ATTACH.TOOLBARS',
+	0x0144: 'VBAActivate',
+	0x0145: 'OPTIONS.CHART',
+	0x0148: 'VBA.INSERT.FILE',
+	0x014A: 'VBA.PROCEDURE.DEFINITION',
+	0x0150: 'ROUTING.SLIP',
+	0x0152: 'ROUTE.DOCUMENT',
+	0x0153: 'MAIL.LOGON',
+	0x0156: 'INSERT.PICTURE',
+	0x0157: 'EDIT.TOOL',
+	0x0158: 'GALLERY.DOUGHNUT',
+	0x015E: 'CHART.TREND',
+	0x0160: 'PIVOT.ITEM.PROPERTIES',
+	0x0162: 'WORKBOOK.INSERT',
+	0x0163: 'OPTIONS.TRANSITION',
+	0x0164: 'OPTIONS.GENERAL',
+	0x0172: 'FILTER.ADVANCED',
+	0x0175: 'MAIL.ADD.MAILER',
+	0x0176: 'MAIL.DELETE.MAILER',
+	0x0177: 'MAIL.REPLY',
+	0x0178: 'MAIL.REPLY.ALL',
+	0x0179: 'MAIL.FORWARD',
+	0x017A: 'MAIL.NEXT.LETTER',
+	0x017B: 'DATA.LABEL',
+	0x017C: 'INSERT.TITLE',
+	0x017D: 'FONT.PROPERTIES',
+	0x017E: 'MACRO.OPTIONS',
+	0x017F: 'WORKBOOK.HIDE',
+	0x0180: 'WORKBOOK.UNHIDE',
+	0x0181: 'WORKBOOK.DELETE',
+	0x0182: 'WORKBOOK.NAME',
+	0x0184: 'GALLERY.CUSTOM',
+	0x0186: 'ADD.CHART.AUTOFORMAT',
+	0x0187: 'DELETE.CHART.AUTOFORMAT',
+	0x0188: 'CHART.ADD.DATA',
+	0x0189: 'AUTO.OUTLINE',
+	0x018A: 'TAB.ORDER',
+	0x018B: 'SHOW.DIALOG',
+	0x018C: 'SELECT.ALL',
+	0x018D: 'UNGROUP.SHEETS',
+	0x018E: 'SUBTOTAL.CREATE',
+	0x018F: 'SUBTOTAL.REMOVE',
+	0x0190: 'RENAME.OBJECT',
+	0x019C: 'WORKBOOK.SCROLL',
+	0x019D: 'WORKBOOK.NEXT',
+	0x019E: 'WORKBOOK.PREV',
+	0x019F: 'WORKBOOK.TAB.SPLIT',
+	0x01A0: 'FULL.SCREEN',
+	0x01A1: 'WORKBOOK.PROTECT',
+	0x01A4: 'SCROLLBAR.PROPERTIES',
+	0x01A5: 'PIVOT.SHOW.PAGES',
+	0x01A6: 'TEXT.TO.COLUMNS',
+	0x01A7: 'FORMAT.CHARTTYPE',
+	0x01A8: 'LINK.FORMAT',
+	0x01A9: 'TRACER.DISPLAY',
+	0x01AE: 'TRACER.NAVIGATE',
+	0x01AF: 'TRACER.CLEAR',
+	0x01B0: 'TRACER.ERROR',
+	0x01B1: 'PIVOT.FIELD.GROUP',
+	0x01B2: 'PIVOT.FIELD.UNGROUP',
+	0x01B3: 'CHECKBOX.PROPERTIES',
+	0x01B4: 'LABEL.PROPERTIES',
+	0x01B5: 'LISTBOX.PROPERTIES',
+	0x01B6: 'EDITBOX.PROPERTIES',
+	0x01B7: 'PIVOT.REFRESH',
+	0x01B8: 'LINK.COMBO',
+	0x01B9: 'OPEN.TEXT',
+	0x01BA: 'HIDE.DIALOG',
+	0x01BB: 'SET.DIALOG.FOCUS',
+	0x01BC: 'ENABLE.OBJECT',
+	0x01BD: 'PUSHBUTTON.PROPERTIES',
+	0x01BE: 'SET.DIALOG.DEFAULT',
+	0x01BF: 'FILTER',
+	0x01C0: 'FILTER.SHOW.ALL',
+	0x01C1: 'CLEAR.OUTLINE',
+	0x01C2: 'FUNCTION.WIZARD',
+	0x01C3: 'ADD.LIST.ITEM',
+	0x01C4: 'SET.LIST.ITEM',
+	0x01C5: 'REMOVE.LIST.ITEM',
+	0x01C6: 'SELECT.LIST.ITEM',
+	0x01C7: 'SET.CONTROL.VALUE',
+	0x01C8: 'SAVE.COPY.AS',
+	0x01CA: 'OPTIONS.LISTS.ADD',
+	0x01CB: 'OPTIONS.LISTS.DELETE',
+	0x01CC: 'SERIES.AXES',
+	0x01CD: 'SERIES.X',
+	0x01CE: 'SERIES.Y',
+	0x01CF: 'ERRORBAR.X',
+	0x01D0: 'ERRORBAR.Y',
+	0x01D1: 'FORMAT.CHART',
+	0x01D2: 'SERIES.ORDER',
+	0x01D3: 'MAIL.LOGOFF',
+	0x01D4: 'CLEAR.ROUTING.SLIP',
+	0x01D5: 'APP.ACTIVATE.MICROSOFT',
+	0x01D6: 'MAIL.EDIT.MAILER',
+	0x01D7: 'ON.SHEET',
+	0x01D8: 'STANDARD.WIDTH',
+	0x01D9: 'SCENARIO.MERGE',
+	0x01DA: 'SUMMARY.INFO',
+	0x01DB: 'FIND.FILE',
+	0x01DC: 'ACTIVE.CELL.FONT',
+	0x01DD: 'ENABLE.TIPWIZARD',
+	0x01DE: 'VBA.MAKE.ADDIN',
+	0x01E0: 'INSERTDATATABLE',
+	0x01E1: 'WORKGROUP.OPTIONS',
+	0x01E2: 'MAIL.SEND.MAILER',
+	0x01E5: 'AUTOCORRECT',
+	0x01E9: 'POST.DOCUMENT',
+	0x01EB: 'PICKLIST',
+	0x01ED: 'VIEW.SHOW',
+	0x01EE: 'VIEW.DEFINE',
+	0x01EF: 'VIEW.DELETE',
+	0x01FD: 'SHEET.BACKGROUND',
+	0x01FE: 'INSERT.MAP.OBJECT',
+	0x01FF: 'OPTIONS.MENONO',
+	0x0205: 'MSOCHECKS',
+	0x0206: 'NORMAL',
+	0x0207: 'LAYOUT',
+	0x0208: 'RM.PRINT.AREA',
+	0x0209: 'CLEAR.PRINT.AREA',
+	0x020A: 'ADD.PRINT.AREA',
+	0x020B: 'MOVE.BRK',
+	0x0221: 'HIDECURR.NOTE',
+	0x0222: 'HIDEALL.NOTES',
+	0x0223: 'DELETE.NOTE',
+	0x0224: 'TRAVERSE.NOTES',
+	0x0225: 'ACTIVATE.NOTES',
+	0x026C: 'PROTECT.REVISIONS',
+	0x026D: 'UNPROTECT.REVISIONS',
+	0x0287: 'OPTIONS.ME',
+	0x028D: 'WEB.PUBLISH',
+	0x029B: 'NEWWEBQUERY',
+	0x02A1: 'PIVOT.TABLE.CHART',
+	0x02F1: 'OPTIONS.SAVE',
+	0x02F3: 'OPTIONS.SPELL',
+	0x0328: 'HIDEALL.INKANNOTS'
+};
+
+/* [MS-XLS] 2.5.198.17 */
+var Ftab = {
+	0x0000: 'COUNT',
+	0x0001: 'IF',
+	0x0002: 'ISNA',
+	0x0003: 'ISERROR',
+	0x0004: 'SUM',
+	0x0005: 'AVERAGE',
+	0x0006: 'MIN',
+	0x0007: 'MAX',
+	0x0008: 'ROW',
+	0x0009: 'COLUMN',
+	0x000A: 'NA',
+	0x000B: 'NPV',
+	0x000C: 'STDEV',
+	0x000D: 'DOLLAR',
+	0x000E: 'FIXED',
+	0x000F: 'SIN',
+	0x0010: 'COS',
+	0x0011: 'TAN',
+	0x0012: 'ATAN',
+	0x0013: 'PI',
+	0x0014: 'SQRT',
+	0x0015: 'EXP',
+	0x0016: 'LN',
+	0x0017: 'LOG10',
+	0x0018: 'ABS',
+	0x0019: 'INT',
+	0x001A: 'SIGN',
+	0x001B: 'ROUND',
+	0x001C: 'LOOKUP',
+	0x001D: 'INDEX',
+	0x001E: 'REPT',
+	0x001F: 'MID',
+	0x0020: 'LEN',
+	0x0021: 'VALUE',
+	0x0022: 'TRUE',
+	0x0023: 'FALSE',
+	0x0024: 'AND',
+	0x0025: 'OR',
+	0x0026: 'NOT',
+	0x0027: 'MOD',
+	0x0028: 'DCOUNT',
+	0x0029: 'DSUM',
+	0x002A: 'DAVERAGE',
+	0x002B: 'DMIN',
+	0x002C: 'DMAX',
+	0x002D: 'DSTDEV',
+	0x002E: 'VAR',
+	0x002F: 'DVAR',
+	0x0030: 'TEXT',
+	0x0031: 'LINEST',
+	0x0032: 'TREND',
+	0x0033: 'LOGEST',
+	0x0034: 'GROWTH',
+	0x0035: 'GOTO',
+	0x0036: 'HALT',
+	0x0037: 'RETURN',
+	0x0038: 'PV',
+	0x0039: 'FV',
+	0x003A: 'NPER',
+	0x003B: 'PMT',
+	0x003C: 'RATE',
+	0x003D: 'MIRR',
+	0x003E: 'IRR',
+	0x003F: 'RAND',
+	0x0040: 'MATCH',
+	0x0041: 'DATE',
+	0x0042: 'TIME',
+	0x0043: 'DAY',
+	0x0044: 'MONTH',
+	0x0045: 'YEAR',
+	0x0046: 'WEEKDAY',
+	0x0047: 'HOUR',
+	0x0048: 'MINUTE',
+	0x0049: 'SECOND',
+	0x004A: 'NOW',
+	0x004B: 'AREAS',
+	0x004C: 'ROWS',
+	0x004D: 'COLUMNS',
+	0x004E: 'OFFSET',
+	0x004F: 'ABSREF',
+	0x0050: 'RELREF',
+	0x0051: 'ARGUMENT',
+	0x0052: 'SEARCH',
+	0x0053: 'TRANSPOSE',
+	0x0054: 'ERROR',
+	0x0055: 'STEP',
+	0x0056: 'TYPE',
+	0x0057: 'ECHO',
+	0x0058: 'SET.NAME',
+	0x0059: 'CALLER',
+	0x005A: 'DEREF',
+	0x005B: 'WINDOWS',
+	0x005C: 'SERIES',
+	0x005D: 'DOCUMENTS',
+	0x005E: 'ACTIVE.CELL',
+	0x005F: 'SELECTION',
+	0x0060: 'RESULT',
+	0x0061: 'ATAN2',
+	0x0062: 'ASIN',
+	0x0063: 'ACOS',
+	0x0064: 'CHOOSE',
+	0x0065: 'HLOOKUP',
+	0x0066: 'VLOOKUP',
+	0x0067: 'LINKS',
+	0x0068: 'INPUT',
+	0x0069: 'ISREF',
+	0x006A: 'GET.FORMULA',
+	0x006B: 'GET.NAME',
+	0x006C: 'SET.VALUE',
+	0x006D: 'LOG',
+	0x006E: 'EXEC',
+	0x006F: 'CHAR',
+	0x0070: 'LOWER',
+	0x0071: 'UPPER',
+	0x0072: 'PROPER',
+	0x0073: 'LEFT',
+	0x0074: 'RIGHT',
+	0x0075: 'EXACT',
+	0x0076: 'TRIM',
+	0x0077: 'REPLACE',
+	0x0078: 'SUBSTITUTE',
+	0x0079: 'CODE',
+	0x007A: 'NAMES',
+	0x007B: 'DIRECTORY',
+	0x007C: 'FIND',
+	0x007D: 'CELL',
+	0x007E: 'ISERR',
+	0x007F: 'ISTEXT',
+	0x0080: 'ISNUMBER',
+	0x0081: 'ISBLANK',
+	0x0082: 'T',
+	0x0083: 'N',
+	0x0084: 'FOPEN',
+	0x0085: 'FCLOSE',
+	0x0086: 'FSIZE',
+	0x0087: 'FREADLN',
+	0x0088: 'FREAD',
+	0x0089: 'FWRITELN',
+	0x008A: 'FWRITE',
+	0x008B: 'FPOS',
+	0x008C: 'DATEVALUE',
+	0x008D: 'TIMEVALUE',
+	0x008E: 'SLN',
+	0x008F: 'SYD',
+	0x0090: 'DDB',
+	0x0091: 'GET.DEF',
+	0x0092: 'REFTEXT',
+	0x0093: 'TEXTREF',
+	0x0094: 'INDIRECT',
+	0x0095: 'REGISTER',
+	0x0096: 'CALL',
+	0x0097: 'ADD.BAR',
+	0x0098: 'ADD.MENU',
+	0x0099: 'ADD.COMMAND',
+	0x009A: 'ENABLE.COMMAND',
+	0x009B: 'CHECK.COMMAND',
+	0x009C: 'RENAME.COMMAND',
+	0x009D: 'SHOW.BAR',
+	0x009E: 'DELETE.MENU',
+	0x009F: 'DELETE.COMMAND',
+	0x00A0: 'GET.CHART.ITEM',
+	0x00A1: 'DIALOG.BOX',
+	0x00A2: 'CLEAN',
+	0x00A3: 'MDETERM',
+	0x00A4: 'MINVERSE',
+	0x00A5: 'MMULT',
+	0x00A6: 'FILES',
+	0x00A7: 'IPMT',
+	0x00A8: 'PPMT',
+	0x00A9: 'COUNTA',
+	0x00AA: 'CANCEL.KEY',
+	0x00AB: 'FOR',
+	0x00AC: 'WHILE',
+	0x00AD: 'BREAK',
+	0x00AE: 'NEXT',
+	0x00AF: 'INITIATE',
+	0x00B0: 'REQUEST',
+	0x00B1: 'POKE',
+	0x00B2: 'EXECUTE',
+	0x00B3: 'TERMINATE',
+	0x00B4: 'RESTART',
+	0x00B5: 'HELP',
+	0x00B6: 'GET.BAR',
+	0x00B7: 'PRODUCT',
+	0x00B8: 'FACT',
+	0x00B9: 'GET.CELL',
+	0x00BA: 'GET.WORKSPACE',
+	0x00BB: 'GET.WINDOW',
+	0x00BC: 'GET.DOCUMENT',
+	0x00BD: 'DPRODUCT',
+	0x00BE: 'ISNONTEXT',
+	0x00BF: 'GET.NOTE',
+	0x00C0: 'NOTE',
+	0x00C1: 'STDEVP',
+	0x00C2: 'VARP',
+	0x00C3: 'DSTDEVP',
+	0x00C4: 'DVARP',
+	0x00C5: 'TRUNC',
+	0x00C6: 'ISLOGICAL',
+	0x00C7: 'DCOUNTA',
+	0x00C8: 'DELETE.BAR',
+	0x00C9: 'UNREGISTER',
+	0x00CC: 'USDOLLAR',
+	0x00CD: 'FINDB',
+	0x00CE: 'SEARCHB',
+	0x00CF: 'REPLACEB',
+	0x00D0: 'LEFTB',
+	0x00D1: 'RIGHTB',
+	0x00D2: 'MIDB',
+	0x00D3: 'LENB',
+	0x00D4: 'ROUNDUP',
+	0x00D5: 'ROUNDDOWN',
+	0x00D6: 'ASC',
+	0x00D7: 'DBCS',
+	0x00D8: 'RANK',
+	0x00DB: 'ADDRESS',
+	0x00DC: 'DAYS360',
+	0x00DD: 'TODAY',
+	0x00DE: 'VDB',
+	0x00DF: 'ELSE',
+	0x00E0: 'ELSE.IF',
+	0x00E1: 'END.IF',
+	0x00E2: 'FOR.CELL',
+	0x00E3: 'MEDIAN',
+	0x00E4: 'SUMPRODUCT',
+	0x00E5: 'SINH',
+	0x00E6: 'COSH',
+	0x00E7: 'TANH',
+	0x00E8: 'ASINH',
+	0x00E9: 'ACOSH',
+	0x00EA: 'ATANH',
+	0x00EB: 'DGET',
+	0x00EC: 'CREATE.OBJECT',
+	0x00ED: 'VOLATILE',
+	0x00EE: 'LAST.ERROR',
+	0x00EF: 'CUSTOM.UNDO',
+	0x00F0: 'CUSTOM.REPEAT',
+	0x00F1: 'FORMULA.CONVERT',
+	0x00F2: 'GET.LINK.INFO',
+	0x00F3: 'TEXT.BOX',
+	0x00F4: 'INFO',
+	0x00F5: 'GROUP',
+	0x00F6: 'GET.OBJECT',
+	0x00F7: 'DB',
+	0x00F8: 'PAUSE',
+	0x00FB: 'RESUME',
+	0x00FC: 'FREQUENCY',
+	0x00FD: 'ADD.TOOLBAR',
+	0x00FE: 'DELETE.TOOLBAR',
+	0x00FF: 'User',
+	0x0100: 'RESET.TOOLBAR',
+	0x0101: 'EVALUATE',
+	0x0102: 'GET.TOOLBAR',
+	0x0103: 'GET.TOOL',
+	0x0104: 'SPELLING.CHECK',
+	0x0105: 'ERROR.TYPE',
+	0x0106: 'APP.TITLE',
+	0x0107: 'WINDOW.TITLE',
+	0x0108: 'SAVE.TOOLBAR',
+	0x0109: 'ENABLE.TOOL',
+	0x010A: 'PRESS.TOOL',
+	0x010B: 'REGISTER.ID',
+	0x010C: 'GET.WORKBOOK',
+	0x010D: 'AVEDEV',
+	0x010E: 'BETADIST',
+	0x010F: 'GAMMALN',
+	0x0110: 'BETAINV',
+	0x0111: 'BINOMDIST',
+	0x0112: 'CHIDIST',
+	0x0113: 'CHIINV',
+	0x0114: 'COMBIN',
+	0x0115: 'CONFIDENCE',
+	0x0116: 'CRITBINOM',
+	0x0117: 'EVEN',
+	0x0118: 'EXPONDIST',
+	0x0119: 'FDIST',
+	0x011A: 'FINV',
+	0x011B: 'FISHER',
+	0x011C: 'FISHERINV',
+	0x011D: 'FLOOR',
+	0x011E: 'GAMMADIST',
+	0x011F: 'GAMMAINV',
+	0x0120: 'CEILING',
+	0x0121: 'HYPGEOMDIST',
+	0x0122: 'LOGNORMDIST',
+	0x0123: 'LOGINV',
+	0x0124: 'NEGBINOMDIST',
+	0x0125: 'NORMDIST',
+	0x0126: 'NORMSDIST',
+	0x0127: 'NORMINV',
+	0x0128: 'NORMSINV',
+	0x0129: 'STANDARDIZE',
+	0x012A: 'ODD',
+	0x012B: 'PERMUT',
+	0x012C: 'POISSON',
+	0x012D: 'TDIST',
+	0x012E: 'WEIBULL',
+	0x012F: 'SUMXMY2',
+	0x0130: 'SUMX2MY2',
+	0x0131: 'SUMX2PY2',
+	0x0132: 'CHITEST',
+	0x0133: 'CORREL',
+	0x0134: 'COVAR',
+	0x0135: 'FORECAST',
+	0x0136: 'FTEST',
+	0x0137: 'INTERCEPT',
+	0x0138: 'PEARSON',
+	0x0139: 'RSQ',
+	0x013A: 'STEYX',
+	0x013B: 'SLOPE',
+	0x013C: 'TTEST',
+	0x013D: 'PROB',
+	0x013E: 'DEVSQ',
+	0x013F: 'GEOMEAN',
+	0x0140: 'HARMEAN',
+	0x0141: 'SUMSQ',
+	0x0142: 'KURT',
+	0x0143: 'SKEW',
+	0x0144: 'ZTEST',
+	0x0145: 'LARGE',
+	0x0146: 'SMALL',
+	0x0147: 'QUARTILE',
+	0x0148: 'PERCENTILE',
+	0x0149: 'PERCENTRANK',
+	0x014A: 'MODE',
+	0x014B: 'TRIMMEAN',
+	0x014C: 'TINV',
+	0x014E: 'MOVIE.COMMAND',
+	0x014F: 'GET.MOVIE',
+	0x0150: 'CONCATENATE',
+	0x0151: 'POWER',
+	0x0152: 'PIVOT.ADD.DATA',
+	0x0153: 'GET.PIVOT.TABLE',
+	0x0154: 'GET.PIVOT.FIELD',
+	0x0155: 'GET.PIVOT.ITEM',
+	0x0156: 'RADIANS',
+	0x0157: 'DEGREES',
+	0x0158: 'SUBTOTAL',
+	0x0159: 'SUMIF',
+	0x015A: 'COUNTIF',
+	0x015B: 'COUNTBLANK',
+	0x015C: 'SCENARIO.GET',
+	0x015D: 'OPTIONS.LISTS.GET',
+	0x015E: 'ISPMT',
+	0x015F: 'DATEDIF',
+	0x0160: 'DATESTRING',
+	0x0161: 'NUMBERSTRING',
+	0x0162: 'ROMAN',
+	0x0163: 'OPEN.DIALOG',
+	0x0164: 'SAVE.DIALOG',
+	0x0165: 'VIEW.GET',
+	0x0166: 'GETPIVOTDATA',
+	0x0167: 'HYPERLINK',
+	0x0168: 'PHONETIC',
+	0x0169: 'AVERAGEA',
+	0x016A: 'MAXA',
+	0x016B: 'MINA',
+	0x016C: 'STDEVPA',
+	0x016D: 'VARPA',
+	0x016E: 'STDEVA',
+	0x016F: 'VARA',
+	0x0170: 'BAHTTEXT',
+	0x0171: 'THAIDAYOFWEEK',
+	0x0172: 'THAIDIGIT',
+	0x0173: 'THAIMONTHOFYEAR',
+	0x0174: 'THAINUMSOUND',
+	0x0175: 'THAINUMSTRING',
+	0x0176: 'THAISTRINGLENGTH',
+	0x0177: 'ISTHAIDIGIT',
+	0x0178: 'ROUNDBAHTDOWN',
+	0x0179: 'ROUNDBAHTUP',
+	0x017A: 'THAIYEAR',
+	0x017B: 'RTD'
+};
+var FtabArgc = {
+	0x0002: 1, /* ISNA */
+	0x0003: 1, /* ISERROR */
+	0x000F: 1, /* SIN */
+	0x0010: 1, /* COS */
+	0x0011: 1, /* TAN */
+	0x0012: 1, /* ATAN */
+	0x0014: 1, /* SQRT */
+	0x0015: 1, /* EXP */
+	0x0016: 1, /* LN */
+	0x0017: 1, /* LOG10 */
+	0x0018: 1, /* ABS */
+	0x0019: 1, /* INT */
+	0x001A: 1, /* SIGN */
+	0x001B: 2, /* ROUND */
+	0x001E: 2, /* REPT */
+	0x001F: 3, /* MID */
+	0x0020: 1, /* LEN */
+	0x0021: 1, /* VALUE */
+	0x0026: 1, /* NOT */
+	0x0027: 2, /* MOD */
+	0x0028: 3, /* DCOUNT */
+	0x0029: 3, /* DSUM */
+	0x002A: 3, /* DAVERAGE */
+	0x002B: 3, /* DMIN */
+	0x002C: 3, /* DMAX */
+	0x002D: 3, /* DSTDEV */
+	0x002F: 3, /* DVAR */
+	0x0030: 2, /* TEXT */
+	0x0035: 1, /* GOTO */
+	0x003D: 3, /* MIRR */
+	0x0041: 3, /* DATE */
+	0x0042: 3, /* TIME */
+	0x0043: 1, /* DAY */
+	0x0044: 1, /* MONTH */
+	0x0045: 1, /* YEAR */
+	0x0047: 1, /* HOUR */
+	0x0048: 1, /* MINUTE */
+	0x0049: 1, /* SECOND */
+	0x004B: 1, /* AREAS */
+	0x004C: 1, /* ROWS */
+	0x004D: 1, /* COLUMNS */
+	0x004F: 2, /* ABSREF */
+	0x0050: 2, /* RELREF */
+	0x0053: 1, /* TRANSPOSE */
+	0x0056: 1, /* TYPE */
+	0x005A: 1, /* DEREF */
+	0x0061: 2, /* ATAN2 */
+	0x0062: 1, /* ASIN */
+	0x0063: 1, /* ACOS */
+	0x0069: 1, /* ISREF */
+	0x006F: 1, /* CHAR */
+	0x0070: 1, /* LOWER */
+	0x0071: 1, /* UPPER */
+	0x0072: 1, /* PROPER */
+	0x0075: 2, /* EXACT */
+	0x0076: 1, /* TRIM */
+	0x0077: 4, /* REPLACE */
+	0x0079: 1, /* CODE */
+	0x007E: 1, /* ISERR */
+	0x007F: 1, /* ISTEXT */
+	0x0080: 1, /* ISNUMBER */
+	0x0081: 1, /* ISBLANK */
+	0x0082: 1, /* T */
+	0x0083: 1, /* N */
+	0x0085: 1, /* FCLOSE */
+	0x0086: 1, /* FSIZE */
+	0x0087: 1, /* FREADLN */
+	0x0088: 2, /* FREAD */
+	0x0089: 2, /* FWRITELN */
+	0x008A: 2, /* FWRITE */
+	0x008C: 1, /* DATEVALUE */
+	0x008D: 1, /* TIMEVALUE */
+	0x008E: 3, /* SLN */
+	0x008F: 4, /* SYD */
+	0x00A2: 1, /* CLEAN */
+	0x00A3: 1, /* MDETERM */
+	0x00A4: 1, /* MINVERSE */
+	0x00A5: 2, /* MMULT */
+	0x00AC: 1, /* WHILE */
+	0x00AF: 2, /* INITIATE */
+	0x00B0: 2, /* REQUEST */
+	0x00B1: 3, /* POKE */
+	0x00B2: 2, /* EXECUTE */
+	0x00B3: 1, /* TERMINATE */
+	0x00B8: 1, /* FACT */
+	0x00BD: 3, /* DPRODUCT */
+	0x00BE: 1, /* ISNONTEXT */
+	0x00C3: 3, /* DSTDEVP */
+	0x00C4: 3, /* DVARP */
+	0x00C6: 1, /* ISLOGICAL */
+	0x00C7: 3, /* DCOUNTA */
+	0x00C9: 1, /* UNREGISTER */
+	0x00CF: 4, /* REPLACEB */
+	0x00D2: 3, /* MIDB */
+	0x00D3: 1, /* LENB */
+	0x00D4: 2, /* ROUNDUP */
+	0x00D5: 2, /* ROUNDDOWN */
+	0x00D6: 1, /* ASC */
+	0x00D7: 1, /* DBCS */
+	0x00E5: 1, /* SINH */
+	0x00E6: 1, /* COSH */
+	0x00E7: 1, /* TANH */
+	0x00E8: 1, /* ASINH */
+	0x00E9: 1, /* ACOSH */
+	0x00EA: 1, /* ATANH */
+	0x00EB: 3, /* DGET */
+	0x00F4: 1, /* INFO */
+	0x00FC: 2, /* FREQUENCY */
+	0x0101: 1, /* EVALUATE */
+	0x0105: 1, /* ERROR.TYPE */
+	0x010F: 1, /* GAMMALN */
+	0x0111: 4, /* BINOMDIST */
+	0x0112: 2, /* CHIDIST */
+	0x0113: 2, /* CHIINV */
+	0x0114: 2, /* COMBIN */
+	0x0115: 3, /* CONFIDENCE */
+	0x0116: 3, /* CRITBINOM */
+	0x0117: 1, /* EVEN */
+	0x0118: 3, /* EXPONDIST */
+	0x0119: 3, /* FDIST */
+	0x011A: 3, /* FINV */
+	0x011B: 1, /* FISHER */
+	0x011C: 1, /* FISHERINV */
+	0x011D: 2, /* FLOOR */
+	0x011E: 4, /* GAMMADIST */
+	0x011F: 3, /* GAMMAINV */
+	0x0120: 2, /* CEILING */
+	0x0121: 4, /* HYPGEOMDIST */
+	0x0122: 3, /* LOGNORMDIST */
+	0x0123: 3, /* LOGINV */
+	0x0124: 3, /* NEGBINOMDIST */
+	0x0125: 4, /* NORMDIST */
+	0x0126: 1, /* NORMSDIST */
+	0x0127: 3, /* NORMINV */
+	0x0128: 1, /* NORMSINV */
+	0x0129: 3, /* STANDARDIZE */
+	0x012A: 1, /* ODD */
+	0x012B: 2, /* PERMUT */
+	0x012C: 3, /* POISSON */
+	0x012D: 3, /* TDIST */
+	0x012E: 4, /* WEIBULL */
+	0x012F: 2, /* SUMXMY2 */
+	0x0130: 2, /* SUMX2MY2 */
+	0x0131: 2, /* SUMX2PY2 */
+	0x0132: 2, /* CHITEST */
+	0x0133: 2, /* CORREL */
+	0x0134: 2, /* COVAR */
+	0x0135: 3, /* FORECAST */
+	0x0136: 2, /* FTEST */
+	0x0137: 2, /* INTERCEPT */
+	0x0138: 2, /* PEARSON */
+	0x0139: 2, /* RSQ */
+	0x013A: 2, /* STEYX */
+	0x013B: 2, /* SLOPE */
+	0x013C: 4, /* TTEST */
+	0x0145: 2, /* LARGE */
+	0x0146: 2, /* SMALL */
+	0x0147: 2, /* QUARTILE */
+	0x0148: 2, /* PERCENTILE */
+	0x014B: 2, /* TRIMMEAN */
+	0x014C: 2, /* TINV */
+	0x0151: 2, /* POWER */
+	0x0156: 1, /* RADIANS */
+	0x0157: 1, /* DEGREES */
+	0x015A: 2, /* COUNTIF */
+	0x015B: 1, /* COUNTBLANK */
+	0x015E: 4, /* ISPMT */
+	0x015F: 3, /* DATEDIF */
+	0x0160: 1, /* DATESTRING */
+	0x0161: 2, /* NUMBERSTRING */
+	0x0168: 1, /* PHONETIC */
+	0x0170: 1, /* BAHTTEXT */
+	0x0171: 1, /* THAIDAYOFWEEK */
+	0x0172: 1, /* THAIDIGIT */
+	0x0173: 1, /* THAIMONTHOFYEAR */
+	0x0174: 1, /* THAINUMSOUND */
+	0x0175: 1, /* THAINUMSTRING */
+	0x0176: 1, /* THAISTRINGLENGTH */
+	0x0177: 1, /* ISTHAIDIGIT */
+	0x0178: 1, /* ROUNDBAHTDOWN */
+	0x0179: 1, /* ROUNDBAHTUP */
+	0x017A: 1, /* THAIYEAR */
+	0xFFFF: 0
+};
+/* [MS-XLSX] 2.2.3 Functions */
+var XLSXFutureFunctions = {
+	"_xlfn.ACOT": "ACOT",
+	"_xlfn.ACOTH": "ACOTH",
+	"_xlfn.AGGREGATE": "AGGREGATE",
+	"_xlfn.ARABIC": "ARABIC",
+	"_xlfn.AVERAGEIF": "AVERAGEIF",
+	"_xlfn.AVERAGEIFS": "AVERAGEIFS",
+	"_xlfn.BASE": "BASE",
+	"_xlfn.BETA.DIST": "BETA.DIST",
+	"_xlfn.BETA.INV": "BETA.INV",
+	"_xlfn.BINOM.DIST": "BINOM.DIST",
+	"_xlfn.BINOM.DIST.RANGE": "BINOM.DIST.RANGE",
+	"_xlfn.BINOM.INV": "BINOM.INV",
+	"_xlfn.BITAND": "BITAND",
+	"_xlfn.BITLSHIFT": "BITLSHIFT",
+	"_xlfn.BITOR": "BITOR",
+	"_xlfn.BITRSHIFT": "BITRSHIFT",
+	"_xlfn.BITXOR": "BITXOR",
+	"_xlfn.CEILING.MATH": "CEILING.MATH",
+	"_xlfn.CEILING.PRECISE": "CEILING.PRECISE",
+	"_xlfn.CHISQ.DIST": "CHISQ.DIST",
+	"_xlfn.CHISQ.DIST.RT": "CHISQ.DIST.RT",
+	"_xlfn.CHISQ.INV": "CHISQ.INV",
+	"_xlfn.CHISQ.INV.RT": "CHISQ.INV.RT",
+	"_xlfn.CHISQ.TEST": "CHISQ.TEST",
+	"_xlfn.COMBINA": "COMBINA",
+	"_xlfn.CONFIDENCE.NORM": "CONFIDENCE.NORM",
+	"_xlfn.CONFIDENCE.T": "CONFIDENCE.T",
+	"_xlfn.COT": "COT",
+	"_xlfn.COTH": "COTH",
+	"_xlfn.COUNTIFS": "COUNTIFS",
+	"_xlfn.COVARIANCE.P": "COVARIANCE.P",
+	"_xlfn.COVARIANCE.S": "COVARIANCE.S",
+	"_xlfn.CSC": "CSC",
+	"_xlfn.CSCH": "CSCH",
+	"_xlfn.DAYS": "DAYS",
+	"_xlfn.DECIMAL": "DECIMAL",
+	"_xlfn.ECMA.CEILING": "ECMA.CEILING",
+	"_xlfn.ERF.PRECISE": "ERF.PRECISE",
+	"_xlfn.ERFC.PRECISE": "ERFC.PRECISE",
+	"_xlfn.EXPON.DIST": "EXPON.DIST",
+	"_xlfn.F.DIST": "F.DIST",
+	"_xlfn.F.DIST.RT": "F.DIST.RT",
+	"_xlfn.F.INV": "F.INV",
+	"_xlfn.F.INV.RT": "F.INV.RT",
+	"_xlfn.F.TEST": "F.TEST",
+	"_xlfn.FILTERXML": "FILTERXML",
+	"_xlfn.FLOOR.MATH": "FLOOR.MATH",
+	"_xlfn.FLOOR.PRECISE": "FLOOR.PRECISE",
+	"_xlfn.FORMULATEXT": "FORMULATEXT",
+	"_xlfn.GAMMA": "GAMMA",
+	"_xlfn.GAMMA.DIST": "GAMMA.DIST",
+	"_xlfn.GAMMA.INV": "GAMMA.INV",
+	"_xlfn.GAMMALN.PRECISE": "GAMMALN.PRECISE",
+	"_xlfn.GAUSS": "GAUSS",
+	"_xlfn.HYPGEOM.DIST": "HYPGEOM.DIST",
+	"_xlfn.IFNA": "IFNA",
+	"_xlfn.IFERROR": "IFERROR",
+	"_xlfn.IMCOSH": "IMCOSH",
+	"_xlfn.IMCOT": "IMCOT",
+	"_xlfn.IMCSC": "IMCSC",
+	"_xlfn.IMCSCH": "IMCSCH",
+	"_xlfn.IMSEC": "IMSEC",
+	"_xlfn.IMSECH": "IMSECH",
+	"_xlfn.IMSINH": "IMSINH",
+	"_xlfn.IMTAN": "IMTAN",
+	"_xlfn.ISFORMULA": "ISFORMULA",
+	"_xlfn.ISO.CEILING": "ISO.CEILING",
+	"_xlfn.ISOWEEKNUM": "ISOWEEKNUM",
+	"_xlfn.LOGNORM.DIST": "LOGNORM.DIST",
+	"_xlfn.LOGNORM.INV": "LOGNORM.INV",
+	"_xlfn.MODE.MULT": "MODE.MULT",
+	"_xlfn.MODE.SNGL": "MODE.SNGL",
+	"_xlfn.MUNIT": "MUNIT",
+	"_xlfn.NEGBINOM.DIST": "NEGBINOM.DIST",
+	"_xlfn.NETWORKDAYS.INTL": "NETWORKDAYS.INTL",
+	"_xlfn.NIGBINOM": "NIGBINOM",
+	"_xlfn.NORM.DIST": "NORM.DIST",
+	"_xlfn.NORM.INV": "NORM.INV",
+	"_xlfn.NORM.S.DIST": "NORM.S.DIST",
+	"_xlfn.NORM.S.INV": "NORM.S.INV",
+	"_xlfn.NUMBERVALUE": "NUMBERVALUE",
+	"_xlfn.PDURATION": "PDURATION",
+	"_xlfn.PERCENTILE.EXC": "PERCENTILE.EXC",
+	"_xlfn.PERCENTILE.INC": "PERCENTILE.INC",
+	"_xlfn.PERCENTRANK.EXC": "PERCENTRANK.EXC",
+	"_xlfn.PERCENTRANK.INC": "PERCENTRANK.INC",
+	"_xlfn.PERMUTATIONA": "PERMUTATIONA",
+	"_xlfn.PHI": "PHI",
+	"_xlfn.POISSON.DIST": "POISSON.DIST",
+	"_xlfn.QUARTILE.EXC": "QUARTILE.EXC",
+	"_xlfn.QUARTILE.INC": "QUARTILE.INC",
+	"_xlfn.QUERYSTRING": "QUERYSTRING",
+	"_xlfn.RANK.AVG": "RANK.AVG",
+	"_xlfn.RANK.EQ": "RANK.EQ",
+	"_xlfn.RRI": "RRI",
+	"_xlfn.SEC": "SEC",
+	"_xlfn.SECH": "SECH",
+	"_xlfn.SHEET": "SHEET",
+	"_xlfn.SHEETS": "SHEETS",
+	"_xlfn.SKEW.P": "SKEW.P",
+	"_xlfn.STDEV.P": "STDEV.P",
+	"_xlfn.STDEV.S": "STDEV.S",
+	"_xlfn.SUMIFS": "SUMIFS",
+	"_xlfn.T.DIST": "T.DIST",
+	"_xlfn.T.DIST.2T": "T.DIST.2T",
+	"_xlfn.T.DIST.RT": "T.DIST.RT",
+	"_xlfn.T.INV": "T.INV",
+	"_xlfn.T.INV.2T": "T.INV.2T",
+	"_xlfn.T.TEST": "T.TEST",
+	"_xlfn.UNICHAR": "UNICHAR",
+	"_xlfn.UNICODE": "UNICODE",
+	"_xlfn.VAR.P": "VAR.P",
+	"_xlfn.VAR.S": "VAR.S",
+	"_xlfn.WEBSERVICE": "WEBSERVICE",
+	"_xlfn.WEIBULL.DIST": "WEIBULL.DIST",
+	"_xlfn.WORKDAY.INTL": "WORKDAY.INTL",
+	"_xlfn.XOR": "XOR",
+	"_xlfn.Z.TEST": "Z.TEST"
+};
+
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/66_wscommon.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/66_wscommon.js
new file mode 100644
index 0000000..d58e7ab
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/66_wscommon.js
@@ -0,0 +1,84 @@
+var strs = {}; // shared strings
+var _ssfopts = {}; // spreadsheet formatting options
+
+RELS.WS = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet";
+
+function get_sst_id(sst, str) {
+	for(var i = 0, len = sst.length; i < len; ++i) if(sst[i].t === str) { sst.Count ++; return i; }
+	sst[len] = {t:str}; sst.Count ++; sst.Unique ++; return len;
+}
+
+function get_cell_style(styles, cell, opts) {
+  if (typeof style_builder != 'undefined') {
+    if (/^\d+$/.exec(cell.s)) { return cell.s}  // if its already an integer index, let it be
+    if (cell.s && (cell.s == +cell.s)) { return cell.s}  // if its already an integer index, let it be
+    var s = cell.s || {};
+    if (cell.z) s.numFmt = cell.z;
+    return style_builder.addStyle(s);
+  }
+  else {
+    var z = opts.revssf[cell.z != null ? cell.z : "General"];
+    for(var i = 0, len = styles.length; i != len; ++i) if(styles[i].numFmtId === z) return i;
+    styles[len] = {
+      numFmtId:z,
+      fontId:0,
+      fillId:0,
+      borderId:0,
+      xfId:0,
+      applyNumberFormat:1
+    };
+    return len;
+  }
+}
+
+function get_cell_style_csf(cellXf) {
+
+  if (cellXf) {
+
+    var s = {}
+
+    if (typeof cellXf.numFmtId != undefined)  {
+      s.numFmt = SSF._table[cellXf.numFmtId];
+    }
+
+    if(cellXf.fillId)  {
+      s.fill =  styles.Fills[cellXf.fillId];
+    }
+
+    if (cellXf.fontId) {
+      s.font = styles.Fonts[cellXf.fontId];
+    }
+    if (cellXf.borderId) {
+      s.border = styles.Borders[cellXf.borderId];
+    }
+    if (cellXf.applyAlignment==1) {
+      s.alignment = cellXf.alignment;
+    }
+
+
+    return JSON.parse(JSON.stringify(s));
+  }
+  return null;
+}
+
+function safe_format(p, fmtid, fillid, opts) {
+	try {
+		if(p.t === 'e') p.w = p.w || BErr[p.v];
+		else if(fmtid === 0) {
+			if(p.t === 'n') {
+				if((p.v|0) === p.v) p.w = SSF._general_int(p.v,_ssfopts);
+				else p.w = SSF._general_num(p.v,_ssfopts);
+			}
+			else if(p.t === 'd') {
+				var dd = datenum(p.v);
+				if((dd|0) === dd) p.w = SSF._general_int(dd,_ssfopts);
+				else p.w = SSF._general_num(dd,_ssfopts);
+			}
+			else if(p.v === undefined) return "";
+			else p.w = SSF._general(p.v,_ssfopts);
+		}
+		else if(p.t === 'd') p.w = SSF.format(fmtid,datenum(p.v),_ssfopts);
+		else p.w = SSF.format(fmtid,p.v,_ssfopts);
+		if(opts.cellNF) p.z = SSF._table[fmtid];
+	} catch(e) { if(opts.WTF) throw e; }
+}
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/67_wsxml.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/67_wsxml.js
new file mode 100644
index 0000000..e0e489b
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/67_wsxml.js
@@ -0,0 +1,433 @@
+function parse_ws_xml_dim(ws, s) {
+  var d = safe_decode_range(s);
+  if (d.s.r <= d.e.r && d.s.c <= d.e.c && d.s.r >= 0 && d.s.c >= 0) ws["!ref"] = encode_range(d);
+}
+var mergecregex = /<mergeCell ref="[A-Z0-9:]+"\s*\/>/g;
+var sheetdataregex = /<(?:\w+:)?sheetData>([^\u2603]*)<\/(?:\w+:)?sheetData>/;
+var hlinkregex = /<hyperlink[^>]*\/>/g;
+var dimregex = /"(\w*:\w*)"/;
+var colregex = /<col[^>]*\/>/g;
+/* 18.3 Worksheets */
+function parse_ws_xml(data, opts, rels) {
+  if (!data) return data;
+  /* 18.3.1.99 worksheet CT_Worksheet */
+  var s = {};
+
+  /* 18.3.1.35 dimension CT_SheetDimension ? */
+  var ridx = data.indexOf("<dimension");
+  if (ridx > 0) {
+    var ref = data.substr(ridx, 50).match(dimregex);
+    if (ref != null) parse_ws_xml_dim(s, ref[1]);
+  }
+
+  /* 18.3.1.55 mergeCells CT_MergeCells */
+  var mergecells = [];
+  if (data.indexOf("</mergeCells>") !== -1) {
+    var merges = data.match(mergecregex);
+    for (ridx = 0; ridx != merges.length; ++ridx)
+      mergecells[ridx] = safe_decode_range(merges[ridx].substr(merges[ridx].indexOf("\"") + 1));
+  }
+
+  /* 18.3.1.17 cols CT_Cols */
+  var columns = [];
+  if (opts.cellStyles && data.indexOf("</cols>") !== -1) {
+    /* 18.3.1.13 col CT_Col */
+    var cols = data.match(colregex);
+    parse_ws_xml_cols(columns, cols);
+  }
+
+  var refguess = {s: {r: 1000000, c: 1000000}, e: {r: 0, c: 0}};
+
+  /* 18.3.1.80 sheetData CT_SheetData ? */
+  var mtch = data.match(sheetdataregex);
+  if (mtch) parse_ws_xml_data(mtch[1], s, opts, refguess);
+
+  /* 18.3.1.48 hyperlinks CT_Hyperlinks */
+  if (data.indexOf("</hyperlinks>") !== -1) parse_ws_xml_hlinks(s, data.match(hlinkregex), rels);
+
+  if (!s["!ref"] && refguess.e.c >= refguess.s.c && refguess.e.r >= refguess.s.r) s["!ref"] = encode_range(refguess);
+  if (opts.sheetRows > 0 && s["!ref"]) {
+    var tmpref = safe_decode_range(s["!ref"]);
+    if (opts.sheetRows < +tmpref.e.r) {
+      tmpref.e.r = opts.sheetRows - 1;
+      if (tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;
+      if (tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;
+      if (tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;
+      if (tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;
+      s["!fullref"] = s["!ref"];
+      s["!ref"] = encode_range(tmpref);
+    }
+  }
+  if (mergecells.length > 0) s["!merges"] = mergecells;
+  if (columns.length > 0) s["!cols"] = columns;
+  return s;
+}
+
+function write_ws_xml_merges(merges) {
+  if (merges.length == 0) return "";
+  var o = '<mergeCells count="' + merges.length + '">';
+  for (var i = 0; i != merges.length; ++i) o += '<mergeCell ref="' + encode_range(merges[i]) + '"/>';
+  return o + '</mergeCells>';
+}
+
+function write_ws_xml_pagesetup(setup) {
+  var pageSetup = writextag('pageSetup', null, {
+    scale: setup.scale || '100',
+    orientation: setup.orientation || 'portrait',
+    horizontalDpi: setup.horizontalDpi || '4294967292',
+    verticalDpi: setup.verticalDpi || '4294967292'
+  })
+  return pageSetup;
+}
+
+
+function parse_ws_xml_hlinks(s, data, rels) {
+  for (var i = 0; i != data.length; ++i) {
+    var val = parsexmltag(data[i], true);
+    if (!val.ref) return;
+    var rel = rels ? rels['!id'][val.id] : null;
+    if (rel) {
+      val.Target = rel.Target;
+      if (val.location) val.Target += "#" + val.location;
+      val.Rel = rel;
+    } else {
+      val.Target = val.location;
+      rel = {Target: val.location, TargetMode: 'Internal'};
+      val.Rel = rel;
+    }
+    var rng = safe_decode_range(val.ref);
+    for (var R = rng.s.r; R <= rng.e.r; ++R) for (var C = rng.s.c; C <= rng.e.c; ++C) {
+      var addr = encode_cell({c: C, r: R});
+      if (!s[addr]) s[addr] = {t: "stub", v: undefined};
+      s[addr].l = val;
+    }
+  }
+}
+
+function parse_ws_xml_cols(columns, cols) {
+  var seencol = false;
+  for (var coli = 0; coli != cols.length; ++coli) {
+    var coll = parsexmltag(cols[coli], true);
+    var colm = parseInt(coll.min, 10) - 1, colM = parseInt(coll.max, 10) - 1;
+    delete coll.min;
+    delete coll.max;
+    if (!seencol && coll.width) {
+      seencol = true;
+      find_mdw(+coll.width, coll);
+    }
+    if (coll.width) {
+      coll.wpx = width2px(+coll.width);
+      coll.wch = px2char(coll.wpx);
+      coll.MDW = MDW;
+    }
+    while (colm <= colM) columns[colm++] = coll;
+  }
+}
+
+function write_ws_xml_cols(ws, cols) {
+  var o = ["<cols>"], col, width;
+  for (var i = 0; i != cols.length; ++i) {
+    if (!(col = cols[i])) continue;
+    var p = {min: i + 1, max: i + 1};
+    /* wch (chars), wpx (pixels) */
+    width = -1;
+    if (col.wpx) width = px2char(col.wpx);
+    else if (col.wch) width = col.wch;
+    if (width > -1) {
+      p.width = char2width(width);
+      p.customWidth = 1;
+    }
+    o[o.length] = (writextag('col', null, p));
+  }
+  o[o.length] = "</cols>";
+  return o.join("");
+}
+
+function write_ws_xml_cell(cell, ref, ws, opts, idx, wb) {
+  if (cell.v === undefined && cell.s === undefined) return "";
+  var vv = "";
+  var oldt = cell.t, oldv = cell.v;
+  switch (cell.t) {
+    case 'b':
+      vv = cell.v ? "1" : "0";
+      break;
+    case 'n':
+      vv = '' + cell.v;
+      break;
+    case 'e':
+      vv = BErr[cell.v];
+      break;
+    case 'd':
+      if (opts.cellDates) vv = new Date(cell.v).toISOString();
+      else {
+        cell.t = 'n';
+        vv = '' + (cell.v = datenum(cell.v));
+        if (typeof cell.z === 'undefined') cell.z = SSF._table[14];
+      }
+      break;
+    default:
+      vv = cell.v;
+      break;
+  }
+  var v = writetag('v', escapexml(vv)), o = {r: ref};
+  /* TODO: cell style */
+  var os = get_cell_style(opts.cellXfs, cell, opts);
+  if (os !== 0) o.s = os;
+  switch (cell.t) {
+    case 'n':
+      break;
+    case 'd':
+      o.t = "d";
+      break;
+    case 'b':
+      o.t = "b";
+      break;
+    case 'e':
+      o.t = "e";
+      break;
+    default:
+      if (opts.bookSST) {
+        v = writetag('v', '' + get_sst_id(opts.Strings, cell.v));
+        o.t = "s";
+        break;
+      }
+      o.t = "str";
+      break;
+  }
+  if (cell.t != oldt) {
+    cell.t = oldt;
+    cell.v = oldv;
+  }
+  return writextag('c', v, o);
+}
+
+var parse_ws_xml_data = (function parse_ws_xml_data_factory() {
+  var cellregex = /<(?:\w+:)?c[ >]/, rowregex = /<\/(?:\w+:)?row>/;
+  var rregex = /r=["']([^"']*)["']/, isregex = /<is>([\S\s]*?)<\/is>/;
+  var match_v = matchtag("v"), match_f = matchtag("f");
+
+  return function parse_ws_xml_data(sdata, s, opts, guess) {
+    var ri = 0, x = "", cells = [], cref = [], idx = 0, i = 0, cc = 0, d = "", p;
+    var tag, tagr = 0, tagc = 0;
+    var sstr;
+    var fmtid = 0, fillid = 0, do_format = Array.isArray(styles.CellXf), cf;
+    for (var marr = sdata.split(rowregex), mt = 0, marrlen = marr.length; mt != marrlen; ++mt) {
+      x = marr[mt].trim();
+      var xlen = x.length;
+      if (xlen === 0) continue;
+
+      /* 18.3.1.73 row CT_Row */
+      for (ri = 0; ri < xlen; ++ri) if (x.charCodeAt(ri) === 62) break;
+      ++ri;
+      tag = parsexmltag(x.substr(0, ri), true);
+      /* SpreadSheetGear uses implicit r/c */
+      tagr = typeof tag.r !== 'undefined' ? parseInt(tag.r, 10) : tagr + 1;
+      tagc = -1;
+      if (opts.sheetRows && opts.sheetRows < tagr) continue;
+      if (guess.s.r > tagr - 1) guess.s.r = tagr - 1;
+      if (guess.e.r < tagr - 1) guess.e.r = tagr - 1;
+
+      /* 18.3.1.4 c CT_Cell */
+      cells = x.substr(ri).split(cellregex);
+      for (ri = typeof tag.r === 'undefined' ? 0 : 1; ri != cells.length; ++ri) {
+        x = cells[ri].trim();
+        if (x.length === 0) continue;
+        cref = x.match(rregex);
+        idx = ri;
+        i = 0;
+        cc = 0;
+        x = "<c " + (x.substr(0, 1) == "<" ? ">" : "") + x;
+        if (cref !== null && cref.length === 2) {
+          idx = 0;
+          d = cref[1];
+          for (i = 0; i != d.length; ++i) {
+            if ((cc = d.charCodeAt(i) - 64) < 1 || cc > 26) break;
+            idx = 26 * idx + cc;
+          }
+          --idx;
+          tagc = idx;
+        } else ++tagc;
+        for (i = 0; i != x.length; ++i) if (x.charCodeAt(i) === 62) break;
+        ++i;
+        tag = parsexmltag(x.substr(0, i), true);
+        if (!tag.r) tag.r = utils.encode_cell({r: tagr - 1, c: tagc});
+        d = x.substr(i);
+        p = {t: ""};
+
+        if ((cref = d.match(match_v)) !== null && cref[1] !== '') p.v = unescapexml(cref[1]);
+        if (opts.cellFormula && (cref = d.match(match_f)) !== null) p.f = unescapexml(cref[1]);
+
+        /* SCHEMA IS ACTUALLY INCORRECT HERE.  IF A CELL HAS NO T, EMIT "" */
+        if (tag.t === undefined && tag.s === undefined && p.v === undefined) {
+          if (!opts.sheetStubs) continue;
+          p.t = "stub";
+        }
+        else p.t = tag.t || "n";
+        if (guess.s.c > idx) guess.s.c = idx;
+        if (guess.e.c < idx) guess.e.c = idx;
+        /* 18.18.11 t ST_CellType */
+        switch (p.t) {
+          case 'n':
+            p.v = parseFloat(p.v);
+            if (isNaN(p.v)) p.v = "" // we don't want NaN if p.v is null
+            break;
+          case 's':
+            // if (!p.hasOwnProperty('v')) continue;
+            sstr = strs[parseInt(p.v, 10)];
+            p.v = sstr.t;
+            p.r = sstr.r;
+            if (opts.cellHTML) p.h = sstr.h;
+            break;
+          case 'str':
+            p.t = "s";
+            p.v = (p.v != null) ? utf8read(p.v) : '';
+            if (opts.cellHTML) p.h = p.v;
+            break;
+          case 'inlineStr':
+            cref = d.match(isregex);
+            p.t = 's';
+            if (cref !== null) {
+              sstr = parse_si(cref[1]);
+              p.v = sstr.t;
+            } else p.v = "";
+            break; // inline string
+          case 'b':
+            p.v = parsexmlbool(p.v);
+            break;
+          case 'd':
+            if (!opts.cellDates) {
+              p.v = datenum(p.v);
+              p.t = 'n';
+            }
+            break;
+            /* error string in .v, number in .v */
+          case 'e':
+            p.w = p.v;
+            p.v = RBErr[p.v];
+            break;
+        }
+        /* formatting */
+        fmtid = fillid = 0;
+        if (do_format && tag.s !== undefined) {
+          cf = styles.CellXf[tag.s];
+          if (opts.cellStyles) {
+            p.s = get_cell_style_csf(cf)
+          }
+          if (cf != null) {
+            if (cf.numFmtId != null) fmtid = cf.numFmtId;
+            if (opts.cellStyles && cf.fillId != null) fillid = cf.fillId;
+          }
+        }
+        safe_format(p, fmtid, fillid, opts);
+        s[tag.r] = p;
+      }
+    }
+  };
+})();
+
+function write_ws_xml_data(ws, opts, idx, wb) {
+  var o = [], r = [], range = safe_decode_range(ws['!ref']), cell, ref, rr = "", cols = [], R, C;
+  for (C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);
+  for (R = range.s.r; R <= range.e.r; ++R) {
+    r = [];
+    rr = encode_row(R);
+    for (C = range.s.c; C <= range.e.c; ++C) {
+      ref = cols[C] + rr;
+      if (ws[ref] === undefined) continue;
+      if ((cell = write_ws_xml_cell(ws[ref], ref, ws, opts, idx, wb)) != null) r.push(cell);
+    }
+    if (r.length > 0) o[o.length] = (writextag('row', r.join(""), {r: rr}));
+  }
+  return o.join("");
+}
+
+var WS_XML_ROOT = writextag('worksheet', null, {
+  'xmlns': XMLNS.main[0],
+  'xmlns:r': XMLNS.r
+});
+
+function write_ws_xml(idx, opts, wb) {
+  var o = [XML_HEADER, WS_XML_ROOT];
+  var s = wb.SheetNames[idx], sidx = 0, rdata = "";
+  var ws = wb.Sheets[s];
+  if (ws === undefined) ws = {};
+  var ref = ws['!ref'];
+  if (ref === undefined) ref = 'A1';
+  o[o.length] = (writextag('dimension', null, {'ref': ref}));
+
+  var kids = [];
+  if (ws['!freeze']) {
+    var pane = '';
+    pane = writextag('pane', null, ws['!freeze'])
+    kids.push(pane)
+
+    var selection = writextag('selection', null, {
+      pane: "topLeft"
+    })
+    kids.push(selection)
+
+    var selection = writextag('selection', null, {
+      pane: "bottomLeft"
+    })
+    kids.push(selection)
+
+    var selection = writextag('selection', null, {
+      pane: "bottomRight",
+      activeCell: ws['!freeze'],
+      sqref: ws['!freeze']
+    })
+    kids.push(selection)
+  }
+
+
+//<selection pane="bottomRight" activeCell="A4" sqref="A4"/>
+
+  var sheetView = writextag('sheetView', kids.join('') || undefined, {
+    showGridLines: opts.showGridLines == false ? '0' : '1',
+    tabSelected: opts.tabSelected === undefined ? '0' : opts.tabSelected,  // see issue #26, need to set WorkbookViews if this is set
+    workbookViewId: opts.workbookViewId === undefined ? '0' : opts.workbookViewId
+  });
+  o[o.length] = writextag('sheetViews', sheetView);
+
+  if (ws['!cols'] !== undefined && ws['!cols'].length > 0) o[o.length] = (write_ws_xml_cols(ws, ws['!cols']));
+  o[sidx = o.length] = '<sheetData/>';
+  if (ws['!ref'] !== undefined) {
+    rdata = write_ws_xml_data(ws, opts, idx, wb);
+    if (rdata.length > 0) o[o.length] = (rdata);
+  }
+  if (o.length > sidx + 1) {
+    o[o.length] = ('</sheetData>');
+    o[sidx] = o[sidx].replace("/>", ">");
+  }
+
+  if (ws['!merges'] !== undefined && ws['!merges'].length > 0) o[o.length] = (write_ws_xml_merges(ws['!merges']));
+
+  if (ws['!pageSetup'] !== undefined) o[o.length] = write_ws_xml_pagesetup(ws['!pageSetup']);
+  if (ws['!rowBreaks'] !== undefined) o[o.length] = write_ws_xml_row_breaks(ws['!rowBreaks']);
+  if (ws['!colBreaks'] !== undefined) o[o.length] = write_ws_xml_col_breaks(ws['!colBreaks']);
+
+  if (o.length > 2) {
+    o[o.length] = ('</worksheet>');
+    o[1] = o[1].replace("/>", ">");
+  }
+  return o.join("");
+}
+
+function write_ws_xml_row_breaks(breaks) {
+  var brk = [];
+  for (var i = 0; i < breaks.length; i++) {
+    var thisBreak = '' + (breaks[i]);
+    var nextBreak = '' + (breaks[i + 1] || '16383');
+    brk.push(writextag('brk', null, {id: thisBreak, max: nextBreak, man: '1'}))
+  }
+  return writextag('rowBreaks', brk.join(' '), {count: brk.length, manualBreakCount: brk.length})
+}
+function write_ws_xml_col_breaks(breaks) {
+  var brk = [];
+  for (var i = 0; i < breaks.length; i++) {
+    var thisBreak = '' + (breaks[i]);
+    var nextBreak = '' + (breaks[i + 1] || '1048575');
+    brk.push(writextag('brk', null, {id: thisBreak, max: nextBreak, man: '1'}))
+  }
+  return writextag('colBreaks', brk.join(' '), {count: brk.length, manualBreakCount: brk.length})
+}
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/68_wsbin.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/68_wsbin.js
new file mode 100644
index 0000000..fd5f1e0
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/68_wsbin.js
@@ -0,0 +1,439 @@
+
+/* [MS-XLSB] 2.4.718 BrtRowHdr */
+function parse_BrtRowHdr(data, length) {
+	var z = [];
+	z.r = data.read_shift(4);
+	data.l += length-4;
+	return z;
+}
+
+/* [MS-XLSB] 2.4.812 BrtWsDim */
+var parse_BrtWsDim = parse_UncheckedRfX;
+var write_BrtWsDim = write_UncheckedRfX;
+
+/* [MS-XLSB] 2.4.815 BrtWsProp */
+function parse_BrtWsProp(data, length) {
+	var z = {};
+	/* TODO: pull flags */
+	data.l += 19;
+	z.name = parse_XLSBCodeName(data, length - 19);
+	return z;
+}
+
+/* [MS-XLSB] 2.4.303 BrtCellBlank */
+function parse_BrtCellBlank(data, length) {
+	var cell = parse_XLSBCell(data);
+	return [cell];
+}
+function write_BrtCellBlank(cell, val, o) {
+	if(o == null) o = new_buf(8);
+	return write_XLSBCell(val, o);
+}
+
+
+/* [MS-XLSB] 2.4.304 BrtCellBool */
+function parse_BrtCellBool(data, length) {
+	var cell = parse_XLSBCell(data);
+	var fBool = data.read_shift(1);
+	return [cell, fBool, 'b'];
+}
+
+/* [MS-XLSB] 2.4.305 BrtCellError */
+function parse_BrtCellError(data, length) {
+	var cell = parse_XLSBCell(data);
+	var fBool = data.read_shift(1);
+	return [cell, fBool, 'e'];
+}
+
+/* [MS-XLSB] 2.4.308 BrtCellIsst */
+function parse_BrtCellIsst(data, length) {
+	var cell = parse_XLSBCell(data);
+	var isst = data.read_shift(4);
+	return [cell, isst, 's'];
+}
+
+/* [MS-XLSB] 2.4.310 BrtCellReal */
+function parse_BrtCellReal(data, length) {
+	var cell = parse_XLSBCell(data);
+	var value = parse_Xnum(data);
+	return [cell, value, 'n'];
+}
+
+/* [MS-XLSB] 2.4.311 BrtCellRk */
+function parse_BrtCellRk(data, length) {
+	var cell = parse_XLSBCell(data);
+	var value = parse_RkNumber(data);
+	return [cell, value, 'n'];
+}
+
+/* [MS-XLSB] 2.4.314 BrtCellSt */
+function parse_BrtCellSt(data, length) {
+	var cell = parse_XLSBCell(data);
+	var value = parse_XLWideString(data);
+	return [cell, value, 'str'];
+}
+
+/* [MS-XLSB] 2.4.647 BrtFmlaBool */
+function parse_BrtFmlaBool(data, length, opts) {
+	var cell = parse_XLSBCell(data);
+	var value = data.read_shift(1);
+	var o = [cell, value, 'b'];
+	if(opts.cellFormula) {
+		var formula = parse_XLSBCellParsedFormula(data, length-9);
+		o[3] = ""; /* TODO */
+	}
+	else data.l += length-9;
+	return o;
+}
+
+/* [MS-XLSB] 2.4.648 BrtFmlaError */
+function parse_BrtFmlaError(data, length, opts) {
+	var cell = parse_XLSBCell(data);
+	var value = data.read_shift(1);
+	var o = [cell, value, 'e'];
+	if(opts.cellFormula) {
+		var formula = parse_XLSBCellParsedFormula(data, length-9);
+		o[3] = ""; /* TODO */
+	}
+	else data.l += length-9;
+	return o;
+}
+
+/* [MS-XLSB] 2.4.649 BrtFmlaNum */
+function parse_BrtFmlaNum(data, length, opts) {
+	var cell = parse_XLSBCell(data);
+	var value = parse_Xnum(data);
+	var o = [cell, value, 'n'];
+	if(opts.cellFormula) {
+		var formula = parse_XLSBCellParsedFormula(data, length - 16);
+		o[3] = ""; /* TODO */
+	}
+	else data.l += length-16;
+	return o;
+}
+
+/* [MS-XLSB] 2.4.650 BrtFmlaString */
+function parse_BrtFmlaString(data, length, opts) {
+	var start = data.l;
+	var cell = parse_XLSBCell(data);
+	var value = parse_XLWideString(data);
+	var o = [cell, value, 'str'];
+	if(opts.cellFormula) {
+		var formula = parse_XLSBCellParsedFormula(data, start + length - data.l);
+	}
+	else data.l = start + length;
+	return o;
+}
+
+/* [MS-XLSB] 2.4.676 BrtMergeCell */
+var parse_BrtMergeCell = parse_UncheckedRfX;
+
+/* [MS-XLSB] 2.4.656 BrtHLink */
+function parse_BrtHLink(data, length, opts) {
+	var end = data.l + length;
+	var rfx = parse_UncheckedRfX(data, 16);
+	var relId = parse_XLNullableWideString(data);
+	var loc = parse_XLWideString(data);
+	var tooltip = parse_XLWideString(data);
+	var display = parse_XLWideString(data);
+	data.l = end;
+	return {rfx:rfx, relId:relId, loc:loc, tooltip:tooltip, display:display};
+}
+
+/* [MS-XLSB] 2.1.7.61 Worksheet */
+function parse_ws_bin(data, opts, rels) {
+	if(!data) return data;
+	if(!rels) rels = {'!id':{}};
+	var s = {};
+
+	var ref;
+	var refguess = {s: {r:1000000, c:1000000}, e: {r:0, c:0} };
+
+	var pass = false, end = false;
+	var row, p, cf, R, C, addr, sstr, rr;
+	var mergecells = [];
+	recordhopper(data, function ws_parse(val, R) {
+		if(end) return;
+		switch(R.n) {
+			case 'BrtWsDim': ref = val; break;
+			case 'BrtRowHdr':
+				row = val;
+				if(opts.sheetRows && opts.sheetRows <= row.r) end=true;
+				rr = encode_row(row.r);
+				break;
+
+			case 'BrtFmlaBool':
+			case 'BrtFmlaError':
+			case 'BrtFmlaNum':
+			case 'BrtFmlaString':
+			case 'BrtCellBool':
+			case 'BrtCellError':
+			case 'BrtCellIsst':
+			case 'BrtCellReal':
+			case 'BrtCellRk':
+			case 'BrtCellSt':
+				p = {t:val[2]};
+				switch(val[2]) {
+					case 'n': p.v = val[1]; break;
+					case 's': sstr = strs[val[1]]; p.v = sstr.t; p.r = sstr.r; break;
+					case 'b': p.v = val[1] ? true : false; break;
+					case 'e': p.v = val[1]; p.w = BErr[p.v]; break;
+					case 'str': p.t = 's'; p.v = utf8read(val[1]); break;
+				}
+				if(opts.cellFormula && val.length > 3) p.f = val[3];
+				if((cf = styles.CellXf[val[0].iStyleRef])) safe_format(p,cf.ifmt,null,opts);
+				s[encode_col(C=val[0].c) + rr] = p;
+				if(refguess.s.r > row.r) refguess.s.r = row.r;
+				if(refguess.s.c > C) refguess.s.c = C;
+				if(refguess.e.r < row.r) refguess.e.r = row.r;
+				if(refguess.e.c < C) refguess.e.c = C;
+				break;
+
+			case 'BrtCellBlank': if(!opts.sheetStubs) break;
+				p = {t:'s',v:undefined};
+				s[encode_col(C=val[0].c) + rr] = p;
+				if(refguess.s.r > row.r) refguess.s.r = row.r;
+				if(refguess.s.c > C) refguess.s.c = C;
+				if(refguess.e.r < row.r) refguess.e.r = row.r;
+				if(refguess.e.c < C) refguess.e.c = C;
+				break;
+
+			/* Merge Cells */
+			case 'BrtBeginMergeCells': break;
+			case 'BrtEndMergeCells': break;
+			case 'BrtMergeCell': mergecells.push(val); break;
+
+			case 'BrtHLink':
+				var rel = rels['!id'][val.relId];
+				if(rel) {
+					val.Target = rel.Target;
+					if(val.loc) val.Target += "#"+val.loc;
+					val.Rel = rel;
+				}
+				for(R=val.rfx.s.r;R<=val.rfx.e.r;++R) for(C=val.rfx.s.c;C<=val.rfx.e.c;++C) {
+					addr = encode_cell({c:C,r:R});
+					if(!s[addr]) s[addr] = {t:'s',v:undefined};
+					s[addr].l = val;
+				}
+				break;
+
+			case 'BrtArrFmla': break; // TODO
+			case 'BrtShrFmla': break; // TODO
+			case 'BrtBeginSheet': break;
+			case 'BrtWsProp': break; // TODO
+			case 'BrtSheetCalcProp': break; // TODO
+			case 'BrtBeginWsViews': break; // TODO
+			case 'BrtBeginWsView': break; // TODO
+			case 'BrtPane': break; // TODO
+			case 'BrtSel': break; // TODO
+			case 'BrtEndWsView': break; // TODO
+			case 'BrtEndWsViews': break; // TODO
+			case 'BrtACBegin': break; // TODO
+			case 'BrtRwDescent': break; // TODO
+			case 'BrtACEnd': break; // TODO
+			case 'BrtWsFmtInfoEx14': break; // TODO
+			case 'BrtWsFmtInfo': break; // TODO
+			case 'BrtBeginColInfos': break; // TODO
+			case 'BrtColInfo': break; // TODO
+			case 'BrtEndColInfos': break; // TODO
+			case 'BrtBeginSheetData': break; // TODO
+			case 'BrtEndSheetData': break; // TODO
+			case 'BrtSheetProtection': break; // TODO
+			case 'BrtPrintOptions': break; // TODO
+			case 'BrtMargins': break; // TODO
+			case 'BrtPageSetup': break; // TODO
+			case 'BrtFRTBegin': pass = true; break;
+			case 'BrtFRTEnd': pass = false; break;
+			case 'BrtEndSheet': break; // TODO
+			case 'BrtDrawing': break; // TODO
+			case 'BrtLegacyDrawing': break; // TODO
+			case 'BrtLegacyDrawingHF': break; // TODO
+			case 'BrtPhoneticInfo': break; // TODO
+			case 'BrtBeginHeaderFooter': break; // TODO
+			case 'BrtEndHeaderFooter': break; // TODO
+			case 'BrtBrk': break; // TODO
+			case 'BrtBeginRwBrk': break; // TODO
+			case 'BrtEndRwBrk': break; // TODO
+			case 'BrtBeginColBrk': break; // TODO
+			case 'BrtEndColBrk': break; // TODO
+			case 'BrtBeginUserShViews': break; // TODO
+			case 'BrtBeginUserShView': break; // TODO
+			case 'BrtEndUserShView': break; // TODO
+			case 'BrtEndUserShViews': break; // TODO
+			case 'BrtBkHim': break; // TODO
+			case 'BrtBeginOleObjects': break; // TODO
+			case 'BrtOleObject': break; // TODO
+			case 'BrtEndOleObjects': break; // TODO
+			case 'BrtBeginListParts': break; // TODO
+			case 'BrtListPart': break; // TODO
+			case 'BrtEndListParts': break; // TODO
+			case 'BrtBeginSortState': break; // TODO
+			case 'BrtBeginSortCond': break; // TODO
+			case 'BrtEndSortCond': break; // TODO
+			case 'BrtEndSortState': break; // TODO
+			case 'BrtBeginConditionalFormatting': break; // TODO
+			case 'BrtEndConditionalFormatting': break; // TODO
+			case 'BrtBeginCFRule': break; // TODO
+			case 'BrtEndCFRule': break; // TODO
+			case 'BrtBeginDVals': break; // TODO
+			case 'BrtDVal': break; // TODO
+			case 'BrtEndDVals': break; // TODO
+			case 'BrtRangeProtection': break; // TODO
+			case 'BrtBeginDCon': break; // TODO
+			case 'BrtEndDCon': break; // TODO
+			case 'BrtBeginDRefs': break;
+			case 'BrtDRef': break;
+			case 'BrtEndDRefs': break;
+
+			/* ActiveX */
+			case 'BrtBeginActiveXControls': break;
+			case 'BrtActiveX': break;
+			case 'BrtEndActiveXControls': break;
+
+			/* AutoFilter */
+			case 'BrtBeginAFilter': break;
+			case 'BrtEndAFilter': break;
+			case 'BrtBeginFilterColumn': break;
+			case 'BrtBeginFilters': break;
+			case 'BrtFilter': break;
+			case 'BrtEndFilters': break;
+			case 'BrtEndFilterColumn': break;
+			case 'BrtDynamicFilter': break;
+			case 'BrtTop10Filter': break;
+			case 'BrtBeginCustomFilters': break;
+			case 'BrtCustomFilter': break;
+			case 'BrtEndCustomFilters': break;
+
+			/* Smart Tags */
+			case 'BrtBeginSmartTags': break;
+			case 'BrtBeginCellSmartTags': break;
+			case 'BrtBeginCellSmartTag': break;
+			case 'BrtCellSmartTagProperty': break;
+			case 'BrtEndCellSmartTag': break;
+			case 'BrtEndCellSmartTags': break;
+			case 'BrtEndSmartTags': break;
+
+			/* Cell Watch */
+			case 'BrtBeginCellWatches': break;
+			case 'BrtCellWatch': break;
+			case 'BrtEndCellWatches': break;
+
+			/* Table */
+			case 'BrtTable': break;
+
+			/* Ignore Cell Errors */
+			case 'BrtBeginCellIgnoreECs': break;
+			case 'BrtCellIgnoreEC': break;
+			case 'BrtEndCellIgnoreECs': break;
+
+			default: if(!pass || opts.WTF) throw new Error("Unexpected record " + R.n);
+		}
+	}, opts);
+	if(!s["!ref"] && (refguess.s.r < 1000000 || ref.e.r > 0 || ref.e.c > 0 || ref.s.r > 0 || ref.s.c > 0)) s["!ref"] = encode_range(ref);
+	if(opts.sheetRows && s["!ref"]) {
+		var tmpref = safe_decode_range(s["!ref"]);
+		if(opts.sheetRows < +tmpref.e.r) {
+			tmpref.e.r = opts.sheetRows - 1;
+			if(tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;
+			if(tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;
+			if(tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;
+			if(tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;
+			s["!fullref"] = s["!ref"];
+			s["!ref"] = encode_range(tmpref);
+		}
+	}
+	if(mergecells.length > 0) s["!merges"] = mergecells;
+	return s;
+}
+
+/* TODO: something useful -- this is a stub */
+function write_ws_bin_cell(ba, cell, R, C, opts) {
+	if(cell.v === undefined) return "";
+	var vv = "";
+	switch(cell.t) {
+		case 'b': vv = cell.v ? "1" : "0"; break;
+		case 'n': case 'e': vv = ''+cell.v; break;
+		default: vv = cell.v; break;
+	}
+	var o = {r:R, c:C};
+	/* TODO: cell style */
+	o.s = get_cell_style(opts.cellXfs, cell, opts);
+	switch(cell.t) {
+		case 's': case 'str':
+			if(opts.bookSST) {
+				vv = get_sst_id(opts.Strings, cell.v);
+				o.t = "s"; break;
+			}
+			o.t = "str"; break;
+		case 'n': break;
+		case 'b': o.t = "b"; break;
+		case 'e': o.t = "e"; break;
+	}
+	write_record(ba, "BrtCellBlank", write_BrtCellBlank(cell, o));
+}
+
+function write_CELLTABLE(ba, ws, idx, opts, wb) {
+	var range = safe_decode_range(ws['!ref'] || "A1"), ref, rr = "", cols = [];
+	write_record(ba, 'BrtBeginSheetData');
+	for(var R = range.s.r; R <= range.e.r; ++R) {
+		rr = encode_row(R);
+		/* [ACCELLTABLE] */
+		/* BrtRowHdr */
+		for(var C = range.s.c; C <= range.e.c; ++C) {
+			/* *16384CELL */
+			if(R === range.s.r) cols[C] = encode_col(C);
+			ref = cols[C] + rr;
+			if(!ws[ref]) continue;
+			/* write cell */
+			write_ws_bin_cell(ba, ws[ref], R, C, opts);
+		}
+	}
+	write_record(ba, 'BrtEndSheetData');
+}
+
+function write_ws_bin(idx, opts, wb) {
+	var ba = buf_array();
+	var s = wb.SheetNames[idx], ws = wb.Sheets[s] || {};
+	var r = safe_decode_range(ws['!ref'] || "A1");
+	write_record(ba, "BrtBeginSheet");
+	/* [BrtWsProp] */
+	write_record(ba, "BrtWsDim", write_BrtWsDim(r));
+	/* [WSVIEWS2] */
+	/* [WSFMTINFO] */
+	/* *COLINFOS */
+	write_CELLTABLE(ba, ws, idx, opts, wb);
+	/* [BrtSheetCalcProp] */
+	/* [[BrtSheetProtectionIso] BrtSheetProtection] */
+	/* *([BrtRangeProtectionIso] BrtRangeProtection) */
+	/* [SCENMAN] */
+	/* [AUTOFILTER] */
+	/* [SORTSTATE] */
+	/* [DCON] */
+	/* [USERSHVIEWS] */
+	/* [MERGECELLS] */
+	/* [BrtPhoneticInfo] */
+	/* *CONDITIONALFORMATTING */
+	/* [DVALS] */
+	/* *BrtHLink */
+	/* [BrtPrintOptions] */
+	/* [BrtMargins] */
+	/* [BrtPageSetup] */
+	/* [HEADERFOOTER] */
+	/* [RWBRK] */
+	/* [COLBRK] */
+	/* *BrtBigName */
+	/* [CELLWATCHES] */
+	/* [IGNOREECS] */
+	/* [SMARTTAGS] */
+	/* [BrtDrawing] */
+	/* [BrtLegacyDrawing] */
+	/* [BrtLegacyDrawingHF] */
+	/* [BrtBkHim] */
+	/* [OLEOBJECTS] */
+	/* [ACTIVEXCONTROLS] */
+	/* [WEBPUBITEMS] */
+	/* [LISTPARTS] */
+	/* FRTWORKSHEET */
+	write_record(ba, "BrtEndSheet");
+	return ba.end();
+}
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/76_wbcommon.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/76_wbcommon.js
new file mode 100644
index 0000000..a70ddc0
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/76_wbcommon.js
@@ -0,0 +1,100 @@
+/* 18.2.28 (CT_WorkbookProtection) Defaults */
+var WBPropsDef = [
+	['allowRefreshQuery', '0'],
+	['autoCompressPictures', '1'],
+	['backupFile', '0'],
+	['checkCompatibility', '0'],
+	['codeName', ''],
+	['date1904', '0'],
+	['dateCompatibility', '1'],
+	//['defaultThemeVersion', '0'],
+	['filterPrivacy', '0'],
+	['hidePivotFieldList', '0'],
+	['promptedSolutions', '0'],
+	['publishItems', '0'],
+	['refreshAllConnections', false],
+	['saveExternalLinkValues', '1'],
+	['showBorderUnselectedTables', '1'],
+	['showInkAnnotation', '1'],
+	['showObjects', 'all'],
+	['showPivotChartFilter', '0']
+	//['updateLinks', 'userSet']
+];
+
+/* 18.2.30 (CT_BookView) Defaults */
+var WBViewDef = [
+	['activeTab', '0'],
+	['autoFilterDateGrouping', '1'],
+	['firstSheet', '0'],
+	['minimized', '0'],
+	['showHorizontalScroll', '1'],
+	['showSheetTabs', '1'],
+	['showVerticalScroll', '1'],
+	['tabRatio', '600'],
+	['visibility', 'visible']
+	//window{Height,Width}, {x,y}Window
+];
+
+/* 18.2.19 (CT_Sheet) Defaults */
+var SheetDef = [
+	['state', 'visible']
+];
+
+/* 18.2.2  (CT_CalcPr) Defaults */
+var CalcPrDef = [
+	['calcCompleted', 'true'],
+	['calcMode', 'auto'],
+	['calcOnSave', 'true'],
+	['concurrentCalc', 'true'],
+	['fullCalcOnLoad', 'false'],
+	['fullPrecision', 'true'],
+	['iterate', 'false'],
+	['iterateCount', '100'],
+	['iterateDelta', '0.001'],
+	['refMode', 'A1']
+];
+
+/* 18.2.3 (CT_CustomWorkbookView) Defaults */
+var CustomWBViewDef = [
+	['autoUpdate', 'false'],
+	['changesSavedWin', 'false'],
+	['includeHiddenRowCol', 'true'],
+	['includePrintSettings', 'true'],
+	['maximized', 'false'],
+	['minimized', 'false'],
+	['onlySync', 'false'],
+	['personalView', 'false'],
+	['showComments', 'commIndicator'],
+	['showFormulaBar', 'true'],
+	['showHorizontalScroll', 'true'],
+	['showObjects', 'all'],
+	['showSheetTabs', 'true'],
+	['showStatusbar', 'true'],
+	['showVerticalScroll', 'true'],
+	['tabRatio', '600'],
+	['xWindow', '0'],
+	['yWindow', '0']
+];
+
+function push_defaults_array(target, defaults) {
+	for(var j = 0; j != target.length; ++j) { var w = target[j];
+		for(var i=0; i != defaults.length; ++i) { var z = defaults[i];
+			if(w[z[0]] == null) w[z[0]] = z[1];
+		}
+	}
+}
+function push_defaults(target, defaults) {
+	for(var i = 0; i != defaults.length; ++i) { var z = defaults[i];
+		if(target[z[0]] == null) target[z[0]] = z[1];
+	}
+}
+
+function parse_wb_defaults(wb) {
+	push_defaults(wb.WBProps, WBPropsDef);
+	push_defaults(wb.CalcPr, CalcPrDef);
+
+	push_defaults_array(wb.WBView, WBViewDef);
+	push_defaults_array(wb.Sheets, SheetDef);
+
+	_ssfopts.date1904 = parsexmlbool(wb.WBProps.date1904, 'date1904');
+}
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/77_wbxml.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/77_wbxml.js
new file mode 100644
index 0000000..54f30ad
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/77_wbxml.js
@@ -0,0 +1,181 @@
+/* 18.2 Workbook */
+var wbnsregex = /<\w+:workbook/;
+function parse_wb_xml(data, opts) {
+	var wb = { AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, xmlns: "" };
+	var pass = false, xmlns = "xmlns";
+	data.match(tagregex).forEach(function xml_wb(x) {
+		var y = parsexmltag(x);
+		switch(strip_ns(y[0])) {
+			case '<?xml': break;
+
+			/* 18.2.27 workbook CT_Workbook 1 */
+			case '<workbook':
+				if(x.match(wbnsregex)) xmlns = "xmlns" + x.match(/<(\w+):/)[1];
+				wb.xmlns = y[xmlns];
+				break;
+			case '</workbook>': break;
+
+			/* 18.2.13 fileVersion CT_FileVersion ? */
+			case '<fileVersion': delete y[0]; wb.AppVersion = y; break;
+			case '<fileVersion/>': break;
+
+			/* 18.2.12 fileSharing CT_FileSharing ? */
+			case '<fileSharing': case '<fileSharing/>': break;
+
+			/* 18.2.28 workbookPr CT_WorkbookPr ? */
+			case '<workbookPr': delete y[0]; wb.WBProps = y; break;
+			case '<workbookPr/>': delete y[0]; wb.WBProps = y; break;
+
+			/* 18.2.29 workbookProtection CT_WorkbookProtection ? */
+			case '<workbookProtection': break;
+			case '<workbookProtection/>': break;
+
+			/* 18.2.1  bookViews CT_BookViews ? */
+			case '<bookViews>': case '</bookViews>': break;
+			/* 18.2.30   workbookView CT_BookView + */
+			case '<workbookView': delete y[0]; wb.WBView.push(y); break;
+
+			/* 18.2.20 sheets CT_Sheets 1 */
+			case '<sheets>': case '</sheets>': break; // aggregate sheet
+			/* 18.2.19   sheet CT_Sheet + */
+			case '<sheet': delete y[0]; y.name = utf8read(y.name); wb.Sheets.push(y); break;
+
+			/* 18.2.15 functionGroups CT_FunctionGroups ? */
+			case '<functionGroups': case '<functionGroups/>': break;
+			/* 18.2.14   functionGroup CT_FunctionGroup + */
+			case '<functionGroup': break;
+
+			/* 18.2.9  externalReferences CT_ExternalReferences ? */
+			case '<externalReferences': case '</externalReferences>': case '<externalReferences>': break;
+			/* 18.2.8    externalReference CT_ExternalReference + */
+			case '<externalReference': break;
+
+			/* 18.2.6  definedNames CT_DefinedNames ? */
+			case '<definedNames/>': break;
+			case '<definedNames>': case '<definedNames': pass=true; break;
+			case '</definedNames>': pass=false; break;
+			/* 18.2.5    definedName CT_DefinedName + */
+			case '<definedName': case '<definedName/>': case '</definedName>': break;
+
+			/* 18.2.2  calcPr CT_CalcPr ? */
+			case '<calcPr': delete y[0]; wb.CalcPr = y; break;
+			case '<calcPr/>': delete y[0]; wb.CalcPr = y; break;
+
+			/* 18.2.16 oleSize CT_OleSize ? (ref required) */
+			case '<oleSize': break;
+
+			/* 18.2.4  customWorkbookViews CT_CustomWorkbookViews ? */
+			case '<customWorkbookViews>': case '</customWorkbookViews>': case '<customWorkbookViews': break;
+			/* 18.2.3    customWorkbookView CT_CustomWorkbookView + */
+			case '<customWorkbookView': case '</customWorkbookView>': break;
+
+			/* 18.2.18 pivotCaches CT_PivotCaches ? */
+			case '<pivotCaches>': case '</pivotCaches>': case '<pivotCaches': break;
+			/* 18.2.17 pivotCache CT_PivotCache ? */
+			case '<pivotCache': break;
+
+			/* 18.2.21 smartTagPr CT_SmartTagPr ? */
+			case '<smartTagPr': case '<smartTagPr/>': break;
+
+			/* 18.2.23 smartTagTypes CT_SmartTagTypes ? */
+			case '<smartTagTypes': case '<smartTagTypes>': case '</smartTagTypes>': break;
+			/* 18.2.22   smartTagType CT_SmartTagType ? */
+			case '<smartTagType': break;
+
+			/* 18.2.24 webPublishing CT_WebPublishing ? */
+			case '<webPublishing': case '<webPublishing/>': break;
+
+			/* 18.2.11 fileRecoveryPr CT_FileRecoveryPr ? */
+			case '<fileRecoveryPr': case '<fileRecoveryPr/>': break;
+
+			/* 18.2.26 webPublishObjects CT_WebPublishObjects ? */
+			case '<webPublishObjects>': case '<webPublishObjects': case '</webPublishObjects>': break;
+			/* 18.2.25 webPublishObject CT_WebPublishObject ? */
+			case '<webPublishObject': break;
+
+			/* 18.2.10 extLst CT_ExtensionList ? */
+			case '<extLst>': case '</extLst>': case '<extLst/>': break;
+			/* 18.2.7    ext CT_Extension + */
+			case '<ext': pass=true; break; //TODO: check with versions of excel
+			case '</ext>': pass=false; break;
+
+			/* Others */
+			case '<ArchID': break;
+			case '<AlternateContent': pass=true; break;
+			case '</AlternateContent>': pass=false; break;
+
+			default: if(!pass && opts.WTF) throw 'unrecognized ' + y[0] + ' in workbook';
+		}
+	});
+	if(XMLNS.main.indexOf(wb.xmlns) === -1) throw new Error("Unknown Namespace: " + wb.xmlns);
+
+	parse_wb_defaults(wb);
+
+	return wb;
+}
+
+var WB_XML_ROOT = writextag('workbook', null, {
+	'xmlns': XMLNS.main[0],
+	//'xmlns:mx': XMLNS.mx,
+	//'xmlns:s': XMLNS.main[0],
+	'xmlns:r': XMLNS.r
+});
+
+function safe1904(wb) {
+	/* TODO: store date1904 somewhere else */
+	try { return parsexmlbool(wb.Workbook.WBProps.date1904) ? "true" : "false"; } catch(e) { return "false"; }
+}
+
+function write_wb_xml(wb, opts) {
+	var o = [XML_HEADER];
+	o[o.length] = WB_XML_ROOT;
+	o[o.length] = (writextag('workbookPr', null, {date1904:safe1904(wb)}));
+	o[o.length] = "<sheets>";
+	for(var i = 0; i != wb.SheetNames.length; ++i)
+		o[o.length] = (writextag('sheet',null,{name:wb.SheetNames[i].substr(0,31), sheetId:""+(i+1), "r:id":"rId"+(i+1)}));
+	o[o.length] = "</sheets>";
+
+  var hasPrintHeaders = false;
+  for(var i = 0; i != wb.SheetNames.length; ++i) {
+    var sheetName = wb.SheetNames[i];
+    var sheet = wb.Sheets[sheetName]
+    if (sheet['!printHeader']) {
+      if (sheet['!printHeader'].length !== 2) {
+        throw "!printHeaders must be an array of length 2: "+sheet['!printHeader'];
+
+      }
+      hasPrintHeaders = true;
+    }
+
+  }
+
+  if (hasPrintHeaders) {
+    o[o.length] = '<definedNames>';
+    for(var i = 0; i != wb.SheetNames.length; ++i) {
+      var sheetName = wb.SheetNames[i];
+      var sheet = wb.Sheets[sheetName]
+      if (sheet['!printHeader'] || sheet['!printColumns']) {
+          var printHeader = sheet['!printHeader'];
+          var printColumns = sheet['!printColumns'];
+
+        //Sheet1!$A:$C,Sheet1!$1:$1
+        var range = "";
+
+        if (printColumns)  range += ("'" + sheetName + "'!")  + ("$" + printColumns[0] + ":$" + printColumns[1]);
+        if (printColumns && printHeader)  range += ","
+        if (printHeader) range += ("'" + sheetName + "'!" ) +  ("$" + printHeader[0] + ":$" + printHeader[1]);
+
+        console.log("-----------------------------")
+        console.log(range)
+        o[o.length] = (writextag('definedName', range, {
+          "name":"_xlnm.Print_Titles",
+          localSheetId : ''+i
+        }))
+      }
+    }
+    o[o.length] = '</definedNames>';
+  }
+
+	if(o.length>2){ o[o.length] = '</workbook>'; o[1]=o[1].replace("/>",">"); }
+	return o.join("");
+}
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/78_wbbin.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/78_wbbin.js
new file mode 100644
index 0000000..8edf347
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/78_wbbin.js
@@ -0,0 +1,181 @@
+/* [MS-XLSB] 2.4.301 BrtBundleSh */
+function parse_BrtBundleSh(data, length) {
+	var z = {};
+	z.hsState = data.read_shift(4); //ST_SheetState
+	z.iTabID = data.read_shift(4);
+	z.strRelID = parse_RelID(data,length-8);
+	z.name = parse_XLWideString(data);
+	return z;
+}
+function write_BrtBundleSh(data, o) {
+	if(!o) o = new_buf(127);
+	o.write_shift(4, data.hsState);
+	o.write_shift(4, data.iTabID);
+	write_RelID(data.strRelID, o);
+	write_XLWideString(data.name.substr(0,31), o);
+	return o;
+}
+
+/* [MS-XLSB] 2.4.807 BrtWbProp */
+function parse_BrtWbProp(data, length) {
+	data.read_shift(4);
+	var dwThemeVersion = data.read_shift(4);
+	var strName = (length > 8) ? parse_XLWideString(data) : "";
+	return [dwThemeVersion, strName];
+}
+function write_BrtWbProp(data, o) {
+	if(!o) o = new_buf(8);
+	o.write_shift(4, 0);
+	o.write_shift(4, 0);
+	return o;
+}
+
+function parse_BrtFRTArchID$(data, length) {
+	var o = {};
+	data.read_shift(4);
+	o.ArchID = data.read_shift(4);
+	data.l += length - 8;
+	return o;
+}
+
+/* [MS-XLSB] 2.1.7.60 Workbook */
+function parse_wb_bin(data, opts) {
+	var wb = { AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, xmlns: "" };
+	var pass = false, z;
+
+	recordhopper(data, function hopper_wb(val, R) {
+		switch(R.n) {
+			case 'BrtBundleSh': wb.Sheets.push(val); break;
+
+			case 'BrtBeginBook': break;
+			case 'BrtFileVersion': break;
+			case 'BrtWbProp': break;
+			case 'BrtACBegin': break;
+			case 'BrtAbsPath15': break;
+			case 'BrtACEnd': break;
+			case 'BrtWbFactoid': break;
+			/*case 'BrtBookProtectionIso': break;*/
+			case 'BrtBookProtection': break;
+			case 'BrtBeginBookViews': break;
+			case 'BrtBookView': break;
+			case 'BrtEndBookViews': break;
+			case 'BrtBeginBundleShs': break;
+			case 'BrtEndBundleShs': break;
+			case 'BrtBeginFnGroup': break;
+			case 'BrtEndFnGroup': break;
+			case 'BrtBeginExternals': break;
+			case 'BrtSupSelf': break;
+			case 'BrtSupBookSrc': break;
+			case 'BrtExternSheet': break;
+			case 'BrtEndExternals': break;
+			case 'BrtName': break;
+			case 'BrtCalcProp': break;
+			case 'BrtUserBookView': break;
+			case 'BrtBeginPivotCacheIDs': break;
+			case 'BrtBeginPivotCacheID': break;
+			case 'BrtEndPivotCacheID': break;
+			case 'BrtEndPivotCacheIDs': break;
+			case 'BrtWebOpt': break;
+			case 'BrtFileRecover': break;
+			case 'BrtFileSharing': break;
+			/*case 'BrtBeginWebPubItems': break;
+			case 'BrtBeginWebPubItem': break;
+			case 'BrtEndWebPubItem': break;
+			case 'BrtEndWebPubItems': break;*/
+
+			/* Smart Tags */
+			case 'BrtBeginSmartTagTypes': break;
+			case 'BrtSmartTagType': break;
+			case 'BrtEndSmartTagTypes': break;
+
+			case 'BrtFRTBegin': pass = true; break;
+			case 'BrtFRTArchID$': break;
+			case 'BrtWorkBookPr15': break;
+			case 'BrtFRTEnd': pass = false; break;
+			case 'BrtEndBook': break;
+			default: if(!pass || opts.WTF) throw new Error("Unexpected record " + R.n);
+		}
+	});
+
+	parse_wb_defaults(wb);
+
+	return wb;
+}
+
+/* [MS-XLSB] 2.1.7.60 Workbook */
+function write_BUNDLESHS(ba, wb, opts) {
+	write_record(ba, "BrtBeginBundleShs");
+	for(var idx = 0; idx != wb.SheetNames.length; ++idx) {
+		var d = { hsState: 0, iTabID: idx+1, strRelID: 'rId' + (idx+1), name: wb.SheetNames[idx] };
+		write_record(ba, "BrtBundleSh", write_BrtBundleSh(d));
+	}
+	write_record(ba, "BrtEndBundleShs");
+}
+
+/* [MS-XLSB] 2.4.643 BrtFileVersion */
+function write_BrtFileVersion(data, o) {
+	if(!o) o = new_buf(127);
+	for(var i = 0; i != 4; ++i) o.write_shift(4, 0);
+	write_XLWideString("SheetJS", o);
+	write_XLWideString(XLSX.version, o);
+	write_XLWideString(XLSX.version, o);
+	write_XLWideString("7262", o);
+	o.length = o.l;
+	return o;
+}
+
+/* [MS-XLSB] 2.1.7.60 Workbook */
+function write_BOOKVIEWS(ba, wb, opts) {
+	write_record(ba, "BrtBeginBookViews");
+	/* 1*(BrtBookView *FRT) */
+	write_record(ba, "BrtEndBookViews");
+}
+
+/* [MS-XLSB] 2.4.302 BrtCalcProp */
+function write_BrtCalcProp(data, o) {
+	if(!o) o = new_buf(26);
+	o.write_shift(4,0); /* force recalc */
+	o.write_shift(4,1);
+	o.write_shift(4,0);
+	write_Xnum(0, o);
+	o.write_shift(-4, 1023);
+	o.write_shift(1, 0x33);
+	o.write_shift(1, 0x00);
+	return o;
+}
+
+function write_BrtFileRecover(data, o) {
+	if(!o) o = new_buf(1);
+	o.write_shift(1,0);
+	return o;
+}
+
+/* [MS-XLSB] 2.1.7.60 Workbook */
+function write_wb_bin(wb, opts) {
+	var ba = buf_array();
+	write_record(ba, "BrtBeginBook");
+	write_record(ba, "BrtFileVersion", write_BrtFileVersion());
+	/* [[BrtFileSharingIso] BrtFileSharing] */
+	write_record(ba, "BrtWbProp", write_BrtWbProp());
+	/* [ACABSPATH] */
+	/* [[BrtBookProtectionIso] BrtBookProtection] */
+	write_BOOKVIEWS(ba, wb, opts);
+	write_BUNDLESHS(ba, wb, opts);
+	/* [FNGROUP] */
+	/* [EXTERNALS] */
+	/* *BrtName */
+	write_record(ba, "BrtCalcProp", write_BrtCalcProp());
+	/* [BrtOleSize] */
+	/* *(BrtUserBookView *FRT) */
+	/* [PIVOTCACHEIDS] */
+	/* [BrtWbFactoid] */
+	/* [SMARTTAGTYPES] */
+	/* [BrtWebOpt] */
+	write_record(ba, "BrtFileRecover", write_BrtFileRecover());
+	/* [WEBPUBITEMS] */
+	/* [CRERRS] */
+	/* FRTWORKBOOK */
+	write_record(ba, "BrtEndBook");
+
+	return ba.end();
+}
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/79_xmlbin.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/79_xmlbin.js
new file mode 100644
index 0000000..77d1e78
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/79_xmlbin.js
@@ -0,0 +1,52 @@
+function parse_wb(data, name, opts) {
+	return (name.substr(-4)===".bin" ? parse_wb_bin : parse_wb_xml)(data, opts);
+}
+
+function parse_ws(data, name, opts, rels) {
+	return (name.substr(-4)===".bin" ? parse_ws_bin : parse_ws_xml)(data, opts, rels);
+}
+
+function parse_sty(data, name, opts) {
+	return (name.substr(-4)===".bin" ? parse_sty_bin : parse_sty_xml)(data, opts);
+}
+
+function parse_theme(data, name, opts) {
+	return parse_theme_xml(data, opts);
+}
+
+function parse_sst(data, name, opts) {
+	return (name.substr(-4)===".bin" ? parse_sst_bin : parse_sst_xml)(data, opts);
+}
+
+function parse_cmnt(data, name, opts) {
+	return (name.substr(-4)===".bin" ? parse_comments_bin : parse_comments_xml)(data, opts);
+}
+
+function parse_cc(data, name, opts) {
+	return (name.substr(-4)===".bin" ? parse_cc_bin : parse_cc_xml)(data, opts);
+}
+
+function write_wb(wb, name, opts) {
+	return (name.substr(-4)===".bin" ? write_wb_bin : write_wb_xml)(wb, opts);
+}
+
+function write_ws(data, name, opts, wb) {
+	return (name.substr(-4)===".bin" ? write_ws_bin : write_ws_xml)(data, opts, wb);
+}
+
+function write_sty(data, name, opts) {
+	return (name.substr(-4)===".bin" ? write_sty_bin : write_sty_xml)(data, opts);
+}
+
+function write_sst(data, name, opts) {
+	return (name.substr(-4)===".bin" ? write_sst_bin : write_sst_xml)(data, opts);
+}
+/*
+function write_cmnt(data, name, opts) {
+	return (name.substr(-4)===".bin" ? write_comments_bin : write_comments_xml)(data, opts);
+}
+
+function write_cc(data, name, opts) {
+	return (name.substr(-4)===".bin" ? write_cc_bin : write_cc_xml)(data, opts);
+}
+*/
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/80_xlml.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/80_xlml.js
new file mode 100644
index 0000000..f9fef28
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/80_xlml.js
@@ -0,0 +1,699 @@
+var attregexg2=/([\w:]+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:'))/g;
+var attregex2=/([\w:]+)=((?:")(?:[^"]*)(?:")|(?:')(?:[^']*)(?:'))/;
+var _chr = function(c) { return String.fromCharCode(c); };
+function xlml_parsexmltag(tag, skip_root) {
+	var words = tag.split(/\s+/);
+	var z = []; if(!skip_root) z[0] = words[0];
+	if(words.length === 1) return z;
+	var m = tag.match(attregexg2), y, j, w, i;
+	if(m) for(i = 0; i != m.length; ++i) {
+		y = m[i].match(attregex2);
+		if((j=y[1].indexOf(":")) === -1) z[y[1]] = y[2].substr(1,y[2].length-2);
+		else {
+			if(y[1].substr(0,6) === "xmlns:") w = "xmlns"+y[1].substr(6);
+			else w = y[1].substr(j+1);
+			z[w] = y[2].substr(1,y[2].length-2);
+		}
+	}
+	return z;
+}
+function xlml_parsexmltagobj(tag) {
+	var words = tag.split(/\s+/);
+	var z = {};
+	if(words.length === 1) return z;
+	var m = tag.match(attregexg2), y, j, w, i;
+	if(m) for(i = 0; i != m.length; ++i) {
+		y = m[i].match(attregex2);
+		if((j=y[1].indexOf(":")) === -1) z[y[1]] = y[2].substr(1,y[2].length-2);
+		else {
+			if(y[1].substr(0,6) === "xmlns:") w = "xmlns"+y[1].substr(6);
+			else w = y[1].substr(j+1);
+			z[w] = y[2].substr(1,y[2].length-2);
+		}
+	}
+	return z;
+}
+
+// ----
+
+function xlml_format(format, value) {
+	var fmt = XLMLFormatMap[format] || unescapexml(format);
+	if(fmt === "General") return SSF._general(value);
+	return SSF.format(fmt, value);
+}
+
+function xlml_set_custprop(Custprops, Rn, cp, val) {
+	switch((cp[0].match(/dt:dt="([\w.]+)"/)||["",""])[1]) {
+		case "boolean": val = parsexmlbool(val); break;
+		case "i2": case "int": val = parseInt(val, 10); break;
+		case "r4": case "float": val = parseFloat(val); break;
+		case "date": case "dateTime.tz": val = new Date(val); break;
+		case "i8": case "string": case "fixed": case "uuid": case "bin.base64": break;
+		default: throw "bad custprop:" + cp[0];
+	}
+	Custprops[unescapexml(Rn[3])] = val;
+}
+
+function safe_format_xlml(cell, nf, o) {
+	try {
+		if(cell.t === 'e') { cell.w = cell.w || BErr[cell.v]; }
+		else if(nf === "General") {
+			if(cell.t === 'n') {
+				if((cell.v|0) === cell.v) cell.w = SSF._general_int(cell.v);
+				else cell.w = SSF._general_num(cell.v);
+			}
+			else cell.w = SSF._general(cell.v);
+		}
+		else cell.w = xlml_format(nf||"General", cell.v);
+		if(o.cellNF) cell.z = XLMLFormatMap[nf]||nf||"General";
+	} catch(e) { if(o.WTF) throw e; }
+}
+
+function process_style_xlml(styles, stag, opts) {
+	if(opts.cellStyles) {
+		if(stag.Interior) {
+			var I = stag.Interior;
+			if(I.Pattern) I.patternType = XLMLPatternTypeMap[I.Pattern] || I.Pattern;
+		}
+	}
+	styles[stag.ID] = stag;
+}
+
+/* TODO: there must exist some form of OSP-blessed spec */
+function parse_xlml_data(xml, ss, data, cell, base, styles, csty, row, o) {
+	var nf = "General", sid = cell.StyleID, S = {}; o = o || {};
+	var interiors = [];
+	if(sid === undefined && row) sid = row.StyleID;
+	if(sid === undefined && csty) sid = csty.StyleID;
+	while(styles[sid] !== undefined) {
+		if(styles[sid].nf) nf = styles[sid].nf;
+		if(styles[sid].Interior) interiors.push(styles[sid].Interior);
+		if(!styles[sid].Parent) break;
+		sid = styles[sid].Parent;
+	}
+	switch(data.Type) {
+		case 'Boolean':
+			cell.t = 'b';
+			cell.v = parsexmlbool(xml);
+			break;
+		case 'String':
+			cell.t = 's'; cell.r = xlml_fixstr(unescapexml(xml));
+			cell.v = xml.indexOf("<") > -1 ? ss : cell.r;
+			break;
+		case 'DateTime':
+			cell.v = (Date.parse(xml) - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);
+			if(cell.v !== cell.v) cell.v = unescapexml(xml);
+			else if(cell.v >= 1 && cell.v<60) cell.v = cell.v -1;
+			if(!nf || nf == "General") nf = "yyyy-mm-dd";
+			/* falls through */
+		case 'Number':
+			if(cell.v === undefined) cell.v=+xml;
+			if(!cell.t) cell.t = 'n';
+			break;
+		case 'Error': cell.t = 'e'; cell.v = RBErr[xml]; cell.w = xml; break;
+		default: cell.t = 's'; cell.v = xlml_fixstr(ss); break;
+	}
+	safe_format_xlml(cell, nf, o);
+	if(o.cellFormula != null && cell.Formula) {
+		cell.f = rc_to_a1(unescapexml(cell.Formula), base);
+		cell.Formula = undefined;
+	}
+	if(o.cellStyles) {
+		interiors.forEach(function(x) {
+			if(!S.patternType && x.patternType) S.patternType = x.patternType;
+		});
+		cell.s = S;
+	}
+	cell.ixfe = cell.StyleID !== undefined ? cell.StyleID : 'Default';
+}
+
+function xlml_clean_comment(comment) {
+	comment.t = comment.v;
+	comment.v = comment.w = comment.ixfe = undefined;
+}
+
+function xlml_normalize(d) {
+	if(has_buf && Buffer.isBuffer(d)) return d.toString('utf8');
+	if(typeof d === 'string') return d;
+	throw "badf";
+}
+
+/* TODO: Everything */
+var xlmlregex = /<(\/?)([a-z0-9]*:|)(\w+)[^>]*>/mg;
+function parse_xlml_xml(d, opts) {
+	var str = xlml_normalize(d);
+	var Rn;
+	var state = [], tmp;
+	var sheets = {}, sheetnames = [], cursheet = {}, sheetname = "";
+	var table = {}, cell = {}, row = {}, dtag, didx;
+	var c = 0, r = 0;
+	var refguess = {s: {r:1000000, c:1000000}, e: {r:0, c:0} };
+	var styles = {}, stag = {};
+	var ss = "", fidx = 0;
+	var mergecells = [];
+	var Props = {}, Custprops = {}, pidx = 0, cp = {};
+	var comments = [], comment = {};
+	var cstys = [], csty;
+	xlmlregex.lastIndex = 0;
+	while((Rn = xlmlregex.exec(str))) switch(Rn[3]) {
+		case 'Data':
+			if(state[state.length-1][1]) break;
+			if(Rn[1]==='/') parse_xlml_data(str.slice(didx, Rn.index), ss, dtag, state[state.length-1][0]=="Comment"?comment:cell, {c:c,r:r}, styles, cstys[c], row, opts);
+			else { ss = ""; dtag = xlml_parsexmltag(Rn[0]); didx = Rn.index + Rn[0].length; }
+			break;
+		case 'Cell':
+			if(Rn[1]==='/'){
+				if(comments.length > 0) cell.c = comments;
+				if((!opts.sheetRows || opts.sheetRows > r) && cell.v !== undefined) cursheet[encode_col(c) + encode_row(r)] = cell;
+				if(cell.HRef) {
+					cell.l = {Target:cell.HRef, tooltip:cell.HRefScreenTip};
+					cell.HRef = cell.HRefScreenTip = undefined;
+				}
+				if(cell.MergeAcross || cell.MergeDown) {
+					var cc = c + (parseInt(cell.MergeAcross,10)|0);
+					var rr = r + (parseInt(cell.MergeDown,10)|0);
+					mergecells.push({s:{c:c,r:r},e:{c:cc,r:rr}});
+				}
+				++c;
+				if(cell.MergeAcross) c += +cell.MergeAcross;
+			} else {
+				cell = xlml_parsexmltagobj(Rn[0]);
+				if(cell.Index) c = +cell.Index - 1;
+				if(c < refguess.s.c) refguess.s.c = c;
+				if(c > refguess.e.c) refguess.e.c = c;
+				if(Rn[0].substr(-2) === "/>") ++c;
+				comments = [];
+			}
+			break;
+		case 'Row':
+			if(Rn[1]==='/' || Rn[0].substr(-2) === "/>") {
+				if(r < refguess.s.r) refguess.s.r = r;
+				if(r > refguess.e.r) refguess.e.r = r;
+				if(Rn[0].substr(-2) === "/>") {
+					row = xlml_parsexmltag(Rn[0]);
+					if(row.Index) r = +row.Index - 1;
+				}
+				c = 0; ++r;
+			} else {
+				row = xlml_parsexmltag(Rn[0]);
+				if(row.Index) r = +row.Index - 1;
+			}
+			break;
+		case 'Worksheet': /* TODO: read range from FullRows/FullColumns */
+			if(Rn[1]==='/'){
+				if((tmp=state.pop())[0]!==Rn[3]) throw "Bad state: "+tmp;
+				sheetnames.push(sheetname);
+				if(refguess.s.r <= refguess.e.r && refguess.s.c <= refguess.e.c) cursheet["!ref"] = encode_range(refguess);
+				if(mergecells.length) cursheet["!merges"] = mergecells;
+				sheets[sheetname] = cursheet;
+			} else {
+				refguess = {s: {r:1000000, c:1000000}, e: {r:0, c:0} };
+				r = c = 0;
+				state.push([Rn[3], false]);
+				tmp = xlml_parsexmltag(Rn[0]);
+				sheetname = tmp.Name;
+				cursheet = {};
+				mergecells = [];
+			}
+			break;
+		case 'Table':
+			if(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw "Bad state: "+tmp;}
+			else if(Rn[0].slice(-2) == "/>") break;
+			else {
+				table = xlml_parsexmltag(Rn[0]);
+				state.push([Rn[3], false]);
+				cstys = [];
+			}
+			break;
+
+		case 'Style':
+			if(Rn[1]==='/') process_style_xlml(styles, stag, opts);
+			else stag = xlml_parsexmltag(Rn[0]);
+			break;
+
+		case 'NumberFormat':
+			stag.nf = xlml_parsexmltag(Rn[0]).Format || "General";
+			break;
+
+		case 'Column':
+			if(state[state.length-1][0] !== 'Table') break;
+			csty = xlml_parsexmltag(Rn[0]);
+			cstys[(csty.Index-1||cstys.length)] = csty;
+			for(var i = 0; i < +csty.Span; ++i) cstys[cstys.length] = csty;
+			break;
+
+		case 'NamedRange': break;
+		case 'NamedCell': break;
+		case 'B': break;
+		case 'I': break;
+		case 'U': break;
+		case 'S': break;
+		case 'Sub': break;
+		case 'Sup': break;
+		case 'Span': break;
+		case 'Border': break;
+		case 'Alignment': break;
+		case 'Borders': break;
+		case 'Font':
+			if(Rn[0].substr(-2) === "/>") break;
+			else if(Rn[1]==="/") ss += str.slice(fidx, Rn.index);
+			else fidx = Rn.index + Rn[0].length;
+			break;
+		case 'Interior':
+			if(!opts.cellStyles) break;
+			stag.Interior = xlml_parsexmltag(Rn[0]);
+			break;
+		case 'Protection': break;
+
+		case 'Author':
+		case 'Title':
+		case 'Description':
+		case 'Created':
+		case 'Keywords':
+		case 'Subject':
+		case 'Category':
+		case 'Company':
+		case 'LastAuthor':
+		case 'LastSaved':
+		case 'LastPrinted':
+		case 'Version':
+		case 'Revision':
+		case 'TotalTime':
+		case 'HyperlinkBase':
+		case 'Manager':
+			if(Rn[0].substr(-2) === "/>") break;
+			else if(Rn[1]==="/") xlml_set_prop(Props, Rn[3], str.slice(pidx, Rn.index));
+			else pidx = Rn.index + Rn[0].length;
+			break;
+		case 'Paragraphs': break;
+
+		case 'Styles':
+		case 'Workbook':
+			if(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw "Bad state: "+tmp;}
+			else state.push([Rn[3], false]);
+			break;
+
+		case 'Comment':
+			if(Rn[1]==='/'){
+				if((tmp=state.pop())[0]!==Rn[3]) throw "Bad state: "+tmp;
+				xlml_clean_comment(comment);
+				comments.push(comment);
+			} else {
+				state.push([Rn[3], false]);
+				tmp = xlml_parsexmltag(Rn[0]);
+				comment = {a:tmp.Author};
+			}
+			break;
+
+		case 'Name': break;
+
+		case 'ComponentOptions':
+		case 'DocumentProperties':
+		case 'CustomDocumentProperties':
+		case 'OfficeDocumentSettings':
+		case 'PivotTable':
+		case 'PivotCache':
+		case 'Names':
+		case 'MapInfo':
+		case 'PageBreaks':
+		case 'QueryTable':
+		case 'DataValidation':
+		case 'AutoFilter':
+		case 'Sorting':
+		case 'Schema':
+		case 'data':
+		case 'ConditionalFormatting':
+		case 'SmartTagType':
+		case 'SmartTags':
+		case 'ExcelWorkbook':
+		case 'WorkbookOptions':
+		case 'WorksheetOptions':
+			if(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw "Bad state: "+tmp;}
+			else if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);
+			break;
+
+		default:
+			var seen = true;
+			switch(state[state.length-1][0]) {
+				/* OfficeDocumentSettings */
+				case 'OfficeDocumentSettings': switch(Rn[3]) {
+					case 'AllowPNG': break;
+					case 'RemovePersonalInformation': break;
+					case 'DownloadComponents': break;
+					case 'LocationOfComponents': break;
+					case 'Colors': break;
+					case 'Color': break;
+					case 'Index': break;
+					case 'RGB': break;
+					case 'PixelsPerInch': break;
+					case 'TargetScreenSize': break;
+					case 'ReadOnlyRecommended': break;
+					default: seen = false;
+				} break;
+
+				/* ComponentOptions */
+				case 'ComponentOptions': switch(Rn[3]) {
+					case 'Toolbar': break;
+					case 'HideOfficeLogo': break;
+					case 'SpreadsheetAutoFit': break;
+					case 'Label': break;
+					case 'Caption': break;
+					case 'MaxHeight': break;
+					case 'MaxWidth': break;
+					case 'NextSheetNumber': break;
+					default: seen = false;
+				} break;
+
+				/* ExcelWorkbook */
+				case 'ExcelWorkbook': switch(Rn[3]) {
+					case 'WindowHeight': break;
+					case 'WindowWidth': break;
+					case 'WindowTopX': break;
+					case 'WindowTopY': break;
+					case 'TabRatio': break;
+					case 'ProtectStructure': break;
+					case 'ProtectWindows': break;
+					case 'ActiveSheet': break;
+					case 'DisplayInkNotes': break;
+					case 'FirstVisibleSheet': break;
+					case 'SupBook': break;
+					case 'SheetName': break;
+					case 'SheetIndex': break;
+					case 'SheetIndexFirst': break;
+					case 'SheetIndexLast': break;
+					case 'Dll': break;
+					case 'AcceptLabelsInFormulas': break;
+					case 'DoNotSaveLinkValues': break;
+					case 'Date1904': break;
+					case 'Iteration': break;
+					case 'MaxIterations': break;
+					case 'MaxChange': break;
+					case 'Path': break;
+					case 'Xct': break;
+					case 'Count': break;
+					case 'SelectedSheets': break;
+					case 'Calculation': break;
+					case 'Uncalced': break;
+					case 'StartupPrompt': break;
+					case 'Crn': break;
+					case 'ExternName': break;
+					case 'Formula': break;
+					case 'ColFirst': break;
+					case 'ColLast': break;
+					case 'WantAdvise': break;
+					case 'Boolean': break;
+					case 'Error': break;
+					case 'Text': break;
+					case 'OLE': break;
+					case 'NoAutoRecover': break;
+					case 'PublishObjects': break;
+					case 'DoNotCalculateBeforeSave': break;
+					case 'Number': break;
+					case 'RefModeR1C1': break;
+					case 'EmbedSaveSmartTags': break;
+					default: seen = false;
+				} break;
+
+				/* WorkbookOptions */
+				case 'WorkbookOptions': switch(Rn[3]) {
+					case 'OWCVersion': break;
+					case 'Height': break;
+					case 'Width': break;
+					default: seen = false;
+				} break;
+
+				/* WorksheetOptions */
+				case 'WorksheetOptions': switch(Rn[3]) {
+					case 'Unsynced': break;
+					case 'Visible': break;
+					case 'Print': break;
+					case 'Panes': break;
+					case 'Scale': break;
+					case 'Pane': break;
+					case 'Number': break;
+					case 'Layout': break;
+					case 'Header': break;
+					case 'Footer': break;
+					case 'PageSetup': break;
+					case 'PageMargins': break;
+					case 'Selected': break;
+					case 'ProtectObjects': break;
+					case 'EnableSelection': break;
+					case 'ProtectScenarios': break;
+					case 'ValidPrinterInfo': break;
+					case 'HorizontalResolution': break;
+					case 'VerticalResolution': break;
+					case 'NumberofCopies': break;
+					case 'ActiveRow': break;
+					case 'ActiveCol': break;
+					case 'ActivePane': break;
+					case 'TopRowVisible': break;
+					case 'TopRowBottomPane': break;
+					case 'LeftColumnVisible': break;
+					case 'LeftColumnRightPane': break;
+					case 'FitToPage': break;
+					case 'RangeSelection': break;
+					case 'PaperSizeIndex': break;
+					case 'PageLayoutZoom': break;
+					case 'PageBreakZoom': break;
+					case 'FilterOn': break;
+					case 'DoNotDisplayGridlines': break;
+					case 'SplitHorizontal': break;
+					case 'SplitVertical': break;
+					case 'FreezePanes': break;
+					case 'FrozenNoSplit': break;
+					case 'FitWidth': break;
+					case 'FitHeight': break;
+					case 'CommentsLayout': break;
+					case 'Zoom': break;
+					case 'LeftToRight': break;
+					case 'Gridlines': break;
+					case 'AllowSort': break;
+					case 'AllowFilter': break;
+					case 'AllowInsertRows': break;
+					case 'AllowDeleteRows': break;
+					case 'AllowInsertCols': break;
+					case 'AllowDeleteCols': break;
+					case 'AllowInsertHyperlinks': break;
+					case 'AllowFormatCells': break;
+					case 'AllowSizeCols': break;
+					case 'AllowSizeRows': break;
+					case 'NoSummaryRowsBelowDetail': break;
+					case 'TabColorIndex': break;
+					case 'DoNotDisplayHeadings': break;
+					case 'ShowPageLayoutZoom': break;
+					case 'NoSummaryColumnsRightDetail': break;
+					case 'BlackAndWhite': break;
+					case 'DoNotDisplayZeros': break;
+					case 'DisplayPageBreak': break;
+					case 'RowColHeadings': break;
+					case 'DoNotDisplayOutline': break;
+					case 'NoOrientation': break;
+					case 'AllowUsePivotTables': break;
+					case 'ZeroHeight': break;
+					case 'ViewableRange': break;
+					case 'Selection': break;
+					case 'ProtectContents': break;
+					default: seen = false;
+				} break;
+
+				/* PivotTable */
+				case 'PivotTable': case 'PivotCache': switch(Rn[3]) {
+					case 'ImmediateItemsOnDrop': break;
+					case 'ShowPageMultipleItemLabel': break;
+					case 'CompactRowIndent': break;
+					case 'Location': break;
+					case 'PivotField': break;
+					case 'Orientation': break;
+					case 'LayoutForm': break;
+					case 'LayoutSubtotalLocation': break;
+					case 'LayoutCompactRow': break;
+					case 'Position': break;
+					case 'PivotItem': break;
+					case 'DataType': break;
+					case 'DataField': break;
+					case 'SourceName': break;
+					case 'ParentField': break;
+					case 'PTLineItems': break;
+					case 'PTLineItem': break;
+					case 'CountOfSameItems': break;
+					case 'Item': break;
+					case 'ItemType': break;
+					case 'PTSource': break;
+					case 'CacheIndex': break;
+					case 'ConsolidationReference': break;
+					case 'FileName': break;
+					case 'Reference': break;
+					case 'NoColumnGrand': break;
+					case 'NoRowGrand': break;
+					case 'BlankLineAfterItems': break;
+					case 'Hidden': break;
+					case 'Subtotal': break;
+					case 'BaseField': break;
+					case 'MapChildItems': break;
+					case 'Function': break;
+					case 'RefreshOnFileOpen': break;
+					case 'PrintSetTitles': break;
+					case 'MergeLabels': break;
+					case 'DefaultVersion': break;
+					case 'RefreshName': break;
+					case 'RefreshDate': break;
+					case 'RefreshDateCopy': break;
+					case 'VersionLastRefresh': break;
+					case 'VersionLastUpdate': break;
+					case 'VersionUpdateableMin': break;
+					case 'VersionRefreshableMin': break;
+					case 'Calculation': break;
+					default: seen = false;
+				} break;
+
+				/* PageBreaks */
+				case 'PageBreaks': switch(Rn[3]) {
+					case 'ColBreaks': break;
+					case 'ColBreak': break;
+					case 'RowBreaks': break;
+					case 'RowBreak': break;
+					case 'ColStart': break;
+					case 'ColEnd': break;
+					case 'RowEnd': break;
+					default: seen = false;
+				} break;
+
+				/* AutoFilter */
+				case 'AutoFilter': switch(Rn[3]) {
+					case 'AutoFilterColumn': break;
+					case 'AutoFilterCondition': break;
+					case 'AutoFilterAnd': break;
+					case 'AutoFilterOr': break;
+					default: seen = false;
+				} break;
+
+				/* QueryTable */
+				case 'QueryTable': switch(Rn[3]) {
+					case 'Id': break;
+					case 'AutoFormatFont': break;
+					case 'AutoFormatPattern': break;
+					case 'QuerySource': break;
+					case 'QueryType': break;
+					case 'EnableRedirections': break;
+					case 'RefreshedInXl9': break;
+					case 'URLString': break;
+					case 'HTMLTables': break;
+					case 'Connection': break;
+					case 'CommandText': break;
+					case 'RefreshInfo': break;
+					case 'NoTitles': break;
+					case 'NextId': break;
+					case 'ColumnInfo': break;
+					case 'OverwriteCells': break;
+					case 'DoNotPromptForFile': break;
+					case 'TextWizardSettings': break;
+					case 'Source': break;
+					case 'Number': break;
+					case 'Decimal': break;
+					case 'ThousandSeparator': break;
+					case 'TrailingMinusNumbers': break;
+					case 'FormatSettings': break;
+					case 'FieldType': break;
+					case 'Delimiters': break;
+					case 'Tab': break;
+					case 'Comma': break;
+					case 'AutoFormatName': break;
+					case 'VersionLastEdit': break;
+					case 'VersionLastRefresh': break;
+					default: seen = false;
+				} break;
+
+				/* Sorting */
+				case 'Sorting':
+				/* ConditionalFormatting */
+				case 'ConditionalFormatting':
+				/* DataValidation */
+				case 'DataValidation': switch(Rn[3]) {
+					case 'Range': break;
+					case 'Type': break;
+					case 'Min': break;
+					case 'Max': break;
+					case 'Sort': break;
+					case 'Descending': break;
+					case 'Order': break;
+					case 'CaseSensitive': break;
+					case 'Value': break;
+					case 'ErrorStyle': break;
+					case 'ErrorMessage': break;
+					case 'ErrorTitle': break;
+					case 'CellRangeList': break;
+					case 'InputMessage': break;
+					case 'InputTitle': break;
+					case 'ComboHide': break;
+					case 'InputHide': break;
+					case 'Condition': break;
+					case 'Qualifier': break;
+					case 'UseBlank': break;
+					case 'Value1': break;
+					case 'Value2': break;
+					case 'Format': break;
+					default: seen = false;
+				} break;
+
+				/* MapInfo (schema) */
+				case 'MapInfo': case 'Schema': case 'data': switch(Rn[3]) {
+					case 'Map': break;
+					case 'Entry': break;
+					case 'Range': break;
+					case 'XPath': break;
+					case 'Field': break;
+					case 'XSDType': break;
+					case 'FilterOn': break;
+					case 'Aggregate': break;
+					case 'ElementType': break;
+					case 'AttributeType': break;
+				/* These are from xsd (XML Schema Definition) */
+					case 'schema':
+					case 'element':
+					case 'complexType':
+					case 'datatype':
+					case 'all':
+					case 'attribute':
+					case 'extends': break;
+
+					case 'row': break;
+					default: seen = false;
+				} break;
+
+				/* SmartTags (can be anything) */
+				case 'SmartTags': break;
+
+				default: seen = false; break;
+			}
+			if(seen) break;
+			/* CustomDocumentProperties */
+			if(!state[state.length-1][1]) throw 'Unrecognized tag: ' + Rn[3] + "|" + state.join("|");
+			if(state[state.length-1][0]==='CustomDocumentProperties') {
+				if(Rn[0].substr(-2) === "/>") break;
+				else if(Rn[1]==="/") xlml_set_custprop(Custprops, Rn, cp, str.slice(pidx, Rn.index));
+				else { cp = Rn; pidx = Rn.index + Rn[0].length; }
+				break;
+			}
+			if(opts.WTF) throw 'Unrecognized tag: ' + Rn[3] + "|" + state.join("|");
+	}
+	var out = {};
+	if(!opts.bookSheets && !opts.bookProps) out.Sheets = sheets;
+	out.SheetNames = sheetnames;
+	out.SSF = SSF.get_table();
+	out.Props = Props;
+	out.Custprops = Custprops;
+	return out;
+}
+
+function parse_xlml(data, opts) {
+	fix_read_opts(opts=opts||{});
+	switch(opts.type||"base64") {
+		case "base64": return parse_xlml_xml(Base64.decode(data), opts);
+		case "binary": case "buffer": case "file": return parse_xlml_xml(data, opts);
+		case "array": return parse_xlml_xml(data.map(_chr).join(""), opts);
+	}
+}
+
+function write_xlml(wb, opts) { }
+
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/81_xls.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/81_xls.js
new file mode 100644
index 0000000..3cd779a
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/81_xls.js
@@ -0,0 +1,675 @@
+/* [MS-OLEDS] 2.3.8 CompObjStream */
+function parse_compobj(obj) {
+	var v = {};
+	var o = obj.content;
+
+	/* [MS-OLEDS] 2.3.7 CompObjHeader -- All fields MUST be ignored */
+	var l = 28, m;
+	m = __lpstr(o, l);
+	l += 4 + __readUInt32LE(o,l);
+	v.UserType = m;
+
+	/* [MS-OLEDS] 2.3.1 ClipboardFormatOrAnsiString */
+	m = __readUInt32LE(o,l); l+= 4;
+	switch(m) {
+		case 0x00000000: break;
+		case 0xffffffff: case 0xfffffffe: l+=4; break;
+		default:
+			if(m > 0x190) throw new Error("Unsupported Clipboard: " + m.toString(16));
+			l += m;
+	}
+
+	m = __lpstr(o, l); l += m.length === 0 ? 0 : 5 + m.length; v.Reserved1 = m;
+
+	if((m = __readUInt32LE(o,l)) !== 0x71b2e9f4) return v;
+	throw "Unsupported Unicode Extension";
+}
+
+/* 2.4.58 Continue logic */
+function slurp(R, blob, length, opts) {
+	var l = length;
+	var bufs = [];
+	var d = blob.slice(blob.l,blob.l+l);
+	if(opts && opts.enc && opts.enc.insitu_decrypt) switch(R.n) {
+	case 'BOF': case 'FilePass': case 'FileLock': case 'InterfaceHdr': case 'RRDInfo': case 'RRDHead': case 'UsrExcl': break;
+	default:
+		if(d.length === 0) break;
+		opts.enc.insitu_decrypt(d);
+	}
+	bufs.push(d);
+	blob.l += l;
+	var next = (XLSRecordEnum[__readUInt16LE(blob,blob.l)]);
+	while(next != null && next.n === 'Continue') {
+		l = __readUInt16LE(blob,blob.l+2);
+		bufs.push(blob.slice(blob.l+4,blob.l+4+l));
+		blob.l += 4+l;
+		next = (XLSRecordEnum[__readUInt16LE(blob, blob.l)]);
+	}
+	var b = bconcat(bufs);
+	prep_blob(b, 0);
+	var ll = 0; b.lens = [];
+	for(var j = 0; j < bufs.length; ++j) { b.lens.push(ll); ll += bufs[j].length; }
+	return R.f(b, b.length, opts);
+}
+
+function safe_format_xf(p, opts, date1904) {
+	if(!p.XF) return;
+	try {
+		var fmtid = p.XF.ifmt||0;
+		if(p.t === 'e') { p.w = p.w || BErr[p.v]; }
+		else if(fmtid === 0) {
+			if(p.t === 'n') {
+				if((p.v|0) === p.v) p.w = SSF._general_int(p.v);
+				else p.w = SSF._general_num(p.v);
+			}
+			else p.w = SSF._general(p.v);
+		}
+		else p.w = SSF.format(fmtid,p.v, {date1904:date1904||false});
+		if(opts.cellNF) p.z = SSF._table[fmtid];
+	} catch(e) { if(opts.WTF) throw e; }
+}
+
+function make_cell(val, ixfe, t) {
+	return {v:val, ixfe:ixfe, t:t};
+}
+
+// 2.3.2
+function parse_workbook(blob, options) {
+	var wb = {opts:{}};
+	var Sheets = {};
+	var out = {};
+	var Directory = {};
+	var found_sheet = false;
+	var range = {};
+	var last_formula = null;
+	var sst = [];
+	var cur_sheet = "";
+	var Preamble = {};
+	var lastcell, last_cell, cc, cmnt, rng, rngC, rngR;
+	var shared_formulae = {};
+	var array_formulae = []; /* TODO: something more clever */
+	var temp_val;
+	var country;
+	var cell_valid = true;
+	var XFs = []; /* XF records */
+	var palette = [];
+	var get_rgb = function getrgb(icv) {
+		if(icv < 8) return XLSIcv[icv];
+		if(icv < 64) return palette[icv-8] || XLSIcv[icv];
+		return XLSIcv[icv];
+	};
+	var process_cell_style = function pcs(cell, line) {
+		var xfd = line.XF.data;
+		if(!xfd || !xfd.patternType) return;
+		line.s = {};
+		line.s.patternType = xfd.patternType;
+		var t;
+		if((t = rgb2Hex(get_rgb(xfd.icvFore)))) { line.s.fgColor = {rgb:t}; }
+		if((t = rgb2Hex(get_rgb(xfd.icvBack)))) { line.s.bgColor = {rgb:t}; }
+	};
+	var addcell = function addcell(cell, line, options) {
+		if(!cell_valid) return;
+		if(options.cellStyles && line.XF && line.XF.data) process_cell_style(cell, line);
+		lastcell = cell;
+		last_cell = encode_cell(cell);
+		if(range.s) {
+			if(cell.r < range.s.r) range.s.r = cell.r;
+			if(cell.c < range.s.c) range.s.c = cell.c;
+		}
+		if(range.e) {
+			if(cell.r + 1 > range.e.r) range.e.r = cell.r + 1;
+			if(cell.c + 1 > range.e.c) range.e.c = cell.c + 1;
+		}
+		if(options.sheetRows && lastcell.r >= options.sheetRows) cell_valid = false;
+		else out[last_cell] = line;
+	};
+	var opts = {
+		enc: false, // encrypted
+		sbcch: 0, // cch in the preceding SupBook
+		snames: [], // sheetnames
+		sharedf: shared_formulae, // shared formulae by address
+		arrayf: array_formulae, // array formulae array
+		rrtabid: [], // RRTabId
+		lastuser: "", // Last User from WriteAccess
+		biff: 8, // BIFF version
+		codepage: 0, // CP from CodePage record
+		winlocked: 0, // fLockWn from WinProtect
+		wtf: false
+	};
+	if(options.password) opts.password = options.password;
+	var mergecells = [];
+	var objects = [];
+	var supbooks = [[]]; // 1-indexed, will hold extern names
+	var sbc = 0, sbci = 0, sbcli = 0;
+	supbooks.SheetNames = opts.snames;
+	supbooks.sharedf = opts.sharedf;
+	supbooks.arrayf = opts.arrayf;
+	var last_Rn = '';
+	var file_depth = 0; /* TODO: make a real stack */
+
+	/* explicit override for some broken writers */
+	opts.codepage = 1200;
+	set_cp(1200);
+
+	while(blob.l < blob.length - 1) {
+		var s = blob.l;
+		var RecordType = blob.read_shift(2);
+		if(RecordType === 0 && last_Rn === 'EOF') break;
+		var length = (blob.l === blob.length ? 0 : blob.read_shift(2)), y;
+		var R = XLSRecordEnum[RecordType];
+		if(R && R.f) {
+			if(options.bookSheets) {
+				if(last_Rn === 'BoundSheet8' && R.n !== 'BoundSheet8') break;
+			}
+			last_Rn = R.n;
+			if(R.r === 2 || R.r == 12) {
+				var rt = blob.read_shift(2); length -= 2;
+				if(!opts.enc && rt !== RecordType) throw "rt mismatch";
+				if(R.r == 12){ blob.l += 10; length -= 10; } // skip FRT
+			}
+			//console.error(R,blob.l,length,blob.length);
+			var val;
+			if(R.n === 'EOF') val = R.f(blob, length, opts);
+			else val = slurp(R, blob, length, opts);
+			var Rn = R.n;
+			/* BIFF5 overrides */
+			if(opts.biff === 5 || opts.biff === 2) switch(Rn) {
+				case 'Lbl': Rn = 'Label'; break;
+			}
+			/* nested switch statements to workaround V8 128 limit */
+			switch(Rn) {
+				/* Workbook Options */
+				case 'Date1904': wb.opts.Date1904 = val; break;
+				case 'WriteProtect': wb.opts.WriteProtect = true; break;
+				case 'FilePass':
+					if(!opts.enc) blob.l = 0;
+					opts.enc = val;
+					if(opts.WTF) console.error(val);
+					if(!options.password) throw new Error("File is password-protected");
+					if(val.Type !== 0) throw new Error("Encryption scheme unsupported");
+					if(!val.valid) throw new Error("Password is incorrect");
+					break;
+				case 'WriteAccess': opts.lastuser = val; break;
+				case 'FileSharing': break; //TODO
+				case 'CodePage':
+					/* overrides based on test cases */
+					if(val === 0x5212) val = 1200;
+					else if(val === 0x8001) val = 1252;
+					opts.codepage = val;
+					set_cp(val);
+					break;
+				case 'RRTabId': opts.rrtabid = val; break;
+				case 'WinProtect': opts.winlocked = val; break;
+				case 'Template': break; // TODO
+				case 'RefreshAll': wb.opts.RefreshAll = val; break;
+				case 'BookBool': break; // TODO
+				case 'UsesELFs': /* if(val) console.error("Unsupported ELFs"); */ break;
+				case 'MTRSettings': {
+					if(val[0] && val[1]) throw "Unsupported threads: " + val;
+				} break; // TODO: actually support threads
+				case 'CalcCount': wb.opts.CalcCount = val; break;
+				case 'CalcDelta': wb.opts.CalcDelta = val; break;
+				case 'CalcIter': wb.opts.CalcIter = val; break;
+				case 'CalcMode': wb.opts.CalcMode = val; break;
+				case 'CalcPrecision': wb.opts.CalcPrecision = val; break;
+				case 'CalcSaveRecalc': wb.opts.CalcSaveRecalc = val; break;
+				case 'CalcRefMode': opts.CalcRefMode = val; break; // TODO: implement R1C1
+				case 'Uncalced': break;
+				case 'ForceFullCalculation': wb.opts.FullCalc = val; break;
+				case 'WsBool': break; // TODO
+				case 'XF': XFs.push(val); break;
+				case 'ExtSST': break; // TODO
+				case 'BookExt': break; // TODO
+				case 'RichTextStream': break;
+				case 'BkHim': break;
+
+				case 'SupBook': supbooks[++sbc] = [val]; sbci = 0; break;
+				case 'ExternName': supbooks[sbc][++sbci] = val; break;
+				case 'Index': break; // TODO
+				case 'Lbl': supbooks[0][++sbcli] = val; break;
+				case 'ExternSheet': supbooks[sbc] = supbooks[sbc].concat(val); sbci += val.length; break;
+
+				case 'Protect': out["!protect"] = val; break; /* for sheet or book */
+				case 'Password': if(val !== 0 && opts.WTF) console.error("Password verifier: " + val); break;
+				case 'Prot4Rev': case 'Prot4RevPass': break; /*TODO: Revision Control*/
+
+				case 'BoundSheet8': {
+					Directory[val.pos] = val;
+					opts.snames.push(val.name);
+				} break;
+				case 'EOF': {
+					if(--file_depth) break;
+					if(range.e) {
+						out["!range"] = range;
+						if(range.e.r > 0 && range.e.c > 0) {
+							range.e.r--; range.e.c--;
+							out["!ref"] = encode_range(range);
+							range.e.r++; range.e.c++;
+						}
+						if(mergecells.length > 0) out["!merges"] = mergecells;
+						if(objects.length > 0) out["!objects"] = objects;
+					}
+					if(cur_sheet === "") Preamble = out; else Sheets[cur_sheet] = out;
+					out = {};
+				} break;
+				case 'BOF': {
+					if(opts.biff !== 8);
+					else if(val.BIFFVer === 0x0500) opts.biff = 5;
+					else if(val.BIFFVer === 0x0002) opts.biff = 2;
+					else if(val.BIFFVer === 0x0007) opts.biff = 2;
+					if(file_depth++) break;
+					cell_valid = true;
+					out = {};
+					if(opts.biff === 2) {
+						if(cur_sheet === "") cur_sheet = "Sheet1";
+						range = {s:{r:0,c:0},e:{r:0,c:0}};
+					}
+					else cur_sheet = (Directory[s] || {name:""}).name;
+					mergecells = [];
+					objects = [];
+				} break;
+				case 'Number': case 'BIFF2NUM': {
+					temp_val = {ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.val, t:'n'};
+					if(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904);
+					addcell({c:val.c, r:val.r}, temp_val, options);
+				} break;
+				case 'BoolErr': {
+					temp_val = {ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.val, t:val.t};
+					if(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904);
+					addcell({c:val.c, r:val.r}, temp_val, options);
+				} break;
+				case 'RK': {
+					temp_val = {ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.rknum, t:'n'};
+					if(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904);
+					addcell({c:val.c, r:val.r}, temp_val, options);
+				} break;
+				case 'MulRk': {
+					for(var j = val.c; j <= val.C; ++j) {
+						var ixfe = val.rkrec[j-val.c][0];
+						temp_val= {ixfe:ixfe, XF:XFs[ixfe], v:val.rkrec[j-val.c][1], t:'n'};
+						if(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904);
+						addcell({c:j, r:val.r}, temp_val, options);
+					}
+				} break;
+				case 'Formula': {
+					switch(val.val) {
+						case 'String': last_formula = val; break;
+						case 'Array Formula': throw "Array Formula unsupported";
+						default:
+							temp_val = {v:val.val, ixfe:val.cell.ixfe, t:val.tt};
+							temp_val.XF = XFs[temp_val.ixfe];
+							if(options.cellFormula) temp_val.f = "="+stringify_formula(val.formula,range,val.cell,supbooks, opts);
+							if(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904);
+							addcell(val.cell, temp_val, options);
+							last_formula = val;
+					}
+				} break;
+				case 'String': {
+					if(last_formula) {
+						last_formula.val = val;
+						temp_val = {v:last_formula.val, ixfe:last_formula.cell.ixfe, t:'s'};
+						temp_val.XF = XFs[temp_val.ixfe];
+						if(options.cellFormula) temp_val.f = "="+stringify_formula(last_formula.formula, range, last_formula.cell, supbooks, opts);
+						if(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904);
+						addcell(last_formula.cell, temp_val, options);
+						last_formula = null;
+					}
+				} break;
+				case 'Array': {
+					array_formulae.push(val);
+				} break;
+				case 'ShrFmla': {
+					if(!cell_valid) break;
+					//if(options.cellFormula) out[last_cell].f = stringify_formula(val[0], range, lastcell, supbooks, opts);
+					/* TODO: capture range */
+					shared_formulae[encode_cell(last_formula.cell)]= val[0];
+				} break;
+				case 'LabelSst':
+					//temp_val={v:sst[val.isst].t, ixfe:val.ixfe, t:'s'};
+					temp_val=make_cell(sst[val.isst].t, val.ixfe, 's');
+					temp_val.XF = XFs[temp_val.ixfe];
+					if(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904);
+					addcell({c:val.c, r:val.r}, temp_val, options);
+					break;
+				case 'Label': case 'BIFF2STR':
+					/* Some writers erroneously write Label */
+					temp_val=make_cell(val.val, val.ixfe, 's');
+					temp_val.XF = XFs[temp_val.ixfe];
+					if(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904);
+					addcell({c:val.c, r:val.r}, temp_val, options);
+					break;
+				case 'Dimensions': {
+					if(file_depth === 1) range = val; /* TODO: stack */
+				} break;
+				case 'SST': {
+					sst = val;
+				} break;
+				case 'Format': { /* val = [id, fmt] */
+					SSF.load(val[1], val[0]);
+				} break;
+
+				case 'MergeCells': mergecells = mergecells.concat(val); break;
+
+				case 'Obj': objects[val.cmo[0]] = opts.lastobj = val; break;
+				case 'TxO': opts.lastobj.TxO = val; break;
+
+				case 'HLink': {
+					for(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)
+						for(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC)
+							if(out[encode_cell({c:rngC,r:rngR})])
+								out[encode_cell({c:rngC,r:rngR})].l = val[1];
+				} break;
+				case 'HLinkTooltip': {
+					for(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)
+						for(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC)
+							if(out[encode_cell({c:rngC,r:rngR})])
+								out[encode_cell({c:rngC,r:rngR})].l.tooltip = val[1];
+				} break;
+
+				/* Comments */
+				case 'Note': {
+					if(opts.biff <= 5 && opts.biff >= 2) break; /* TODO: BIFF5 */
+					cc = out[encode_cell(val[0])];
+					var noteobj = objects[val[2]];
+					if(!cc) break;
+					if(!cc.c) cc.c = [];
+					cmnt = {a:val[1],t:noteobj.TxO.t};
+					cc.c.push(cmnt);
+				} break;
+
+				default: switch(R.n) { /* nested */
+				case 'ClrtClient': break;
+				case 'XFExt': update_xfext(XFs[val.ixfe], val.ext); break;
+
+				case 'NameCmt': break;
+				case 'Header': break; // TODO
+				case 'Footer': break; // TODO
+				case 'HCenter': break; // TODO
+				case 'VCenter': break; // TODO
+				case 'Pls': break; // TODO
+				case 'Setup': break; // TODO
+				case 'DefColWidth': break; // TODO
+				case 'GCW': break;
+				case 'LHRecord': break;
+				case 'ColInfo': break; // TODO
+				case 'Row': break; // TODO
+				case 'DBCell': break; // TODO
+				case 'MulBlank': break; // TODO
+				case 'EntExU2': break; // TODO
+				case 'SxView': break; // TODO
+				case 'Sxvd': break; // TODO
+				case 'SXVI': break; // TODO
+				case 'SXVDEx': break; // TODO
+				case 'SxIvd': break; // TODO
+				case 'SXDI': break; // TODO
+				case 'SXLI': break; // TODO
+				case 'SXEx': break; // TODO
+				case 'QsiSXTag': break; // TODO
+				case 'Selection': break;
+				case 'Feat': break;
+				case 'FeatHdr': case 'FeatHdr11': break;
+				case 'Feature11': case 'Feature12': case 'List12': break;
+				case 'Blank': break;
+				case 'Country': country = val; break;
+				case 'RecalcId': break;
+				case 'DefaultRowHeight': case 'DxGCol': break; // TODO: htmlify
+				case 'Fbi': case 'Fbi2': case 'GelFrame': break;
+				case 'Font': break; // TODO
+				case 'XFCRC': break; // TODO
+				case 'Style': break; // TODO
+				case 'StyleExt': break; // TODO
+				case 'Palette': palette = val; break; // TODO
+				case 'Theme': break; // TODO
+				/* Protection */
+				case 'ScenarioProtect': break;
+				case 'ObjProtect': break;
+
+				/* Conditional Formatting */
+				case 'CondFmt12': break;
+
+				/* Table */
+				case 'Table': break; // TODO
+				case 'TableStyles': break; // TODO
+				case 'TableStyle': break; // TODO
+				case 'TableStyleElement': break; // TODO
+
+				/* PivotTable */
+				case 'SXStreamID': break; // TODO
+				case 'SXVS': break; // TODO
+				case 'DConRef': break; // TODO
+				case 'SXAddl': break; // TODO
+				case 'DConBin': break; // TODO
+				case 'DConName': break; // TODO
+				case 'SXPI': break; // TODO
+				case 'SxFormat': break; // TODO
+				case 'SxSelect': break; // TODO
+				case 'SxRule': break; // TODO
+				case 'SxFilt': break; // TODO
+				case 'SxItm': break; // TODO
+				case 'SxDXF': break; // TODO
+
+				/* Scenario Manager */
+				case 'ScenMan': break;
+
+				/* Data Consolidation */
+				case 'DCon': break;
+
+				/* Watched Cell */
+				case 'CellWatch': break;
+
+				/* Print Settings */
+				case 'PrintRowCol': break;
+				case 'PrintGrid': break;
+				case 'PrintSize': break;
+
+				case 'XCT': break;
+				case 'CRN': break;
+
+				case 'Scl': {
+					//console.log("Zoom Level:", val[0]/val[1],val);
+				} break;
+				case 'SheetExt': {
+
+				} break;
+				case 'SheetExtOptional': {
+
+				} break;
+
+				/* VBA */
+				case 'ObNoMacros': {
+
+				} break;
+				case 'ObProj': {
+
+				} break;
+				case 'CodeName': {
+
+				} break;
+				case 'GUIDTypeLib': {
+
+				} break;
+
+				case 'WOpt': break; // TODO: WTF?
+				case 'PhoneticInfo': break;
+
+				case 'OleObjectSize': break;
+
+				/* Differential Formatting */
+				case 'DXF': case 'DXFN': case 'DXFN12': case 'DXFN12List': case 'DXFN12NoCB': break;
+
+				/* Data Validation */
+				case 'Dv': case 'DVal': break;
+
+				/* Data Series */
+				case 'BRAI': case 'Series': case 'SeriesText': break;
+
+				/* Data Connection */
+				case 'DConn': break;
+				case 'DbOrParamQry': break;
+				case 'DBQueryExt': break;
+
+				/* Formatting */
+				case 'IFmtRecord': break;
+				case 'CondFmt': case 'CF': case 'CF12': case 'CFEx': break;
+
+				/* Explicitly Ignored */
+				case 'Excel9File': break;
+				case 'Units': break;
+				case 'InterfaceHdr': case 'Mms': case 'InterfaceEnd': case 'DSF': case 'BuiltInFnGroupCount':
+				/* View Stuff */
+				case 'Window1': case 'Window2': case 'HideObj': case 'GridSet': case 'Guts':
+				case 'UserBView': case 'UserSViewBegin': case 'UserSViewEnd':
+				case 'Pane': break;
+				default: switch(R.n) { /* nested */
+				/* Chart */
+				case 'Dat':
+				case 'Begin': case 'End':
+				case 'StartBlock': case 'EndBlock':
+				case 'Frame': case 'Area':
+				case 'Axis': case 'AxisLine': case 'Tick': break;
+				case 'AxesUsed':
+				case 'CrtLayout12': case 'CrtLayout12A': case 'CrtLink': case 'CrtLine': case 'CrtMlFrt': case 'CrtMlFrtContinue': break;
+				case 'LineFormat': case 'AreaFormat':
+				case 'Chart': case 'Chart3d': case 'Chart3DBarShape': case 'ChartFormat': case 'ChartFrtInfo': break;
+				case 'PlotArea': case 'PlotGrowth': break;
+				case 'SeriesList': case 'SerParent': case 'SerAuxTrend': break;
+				case 'DataFormat': case 'SerToCrt': case 'FontX': break;
+				case 'CatSerRange': case 'AxcExt': case 'SerFmt': break;
+				case 'ShtProps': break;
+				case 'DefaultText': case 'Text': case 'CatLab': break;
+				case 'DataLabExtContents': break;
+				case 'Legend': case 'LegendException': break;
+				case 'Pie': case 'Scatter': break;
+				case 'PieFormat': case 'MarkerFormat': break;
+				case 'StartObject': case 'EndObject': break;
+				case 'AlRuns': case 'ObjectLink': break;
+				case 'SIIndex': break;
+				case 'AttachedLabel': case 'YMult': break;
+
+				/* Chart Group */
+				case 'Line': case 'Bar': break;
+				case 'Surf': break;
+
+				/* Axis Group */
+				case 'AxisParent': break;
+				case 'Pos': break;
+				case 'ValueRange': break;
+
+				/* Pivot Chart */
+				case 'SXViewEx9': break; // TODO
+				case 'SXViewLink': break;
+				case 'PivotChartBits': break;
+				case 'SBaseRef': break;
+				case 'TextPropsStream': break;
+
+				/* Chart Misc */
+				case 'LnExt': break;
+				case 'MkrExt': break;
+				case 'CrtCoopt': break;
+
+				/* Query Table */
+				case 'Qsi': case 'Qsif': case 'Qsir': case 'QsiSXTag': break;
+				case 'TxtQry': break;
+
+				/* Filter */
+				case 'FilterMode': break;
+				case 'AutoFilter': case 'AutoFilterInfo': break;
+				case 'AutoFilter12': break;
+				case 'DropDownObjIds': break;
+				case 'Sort': break;
+				case 'SortData': break;
+
+				/* Drawing */
+				case 'ShapePropsStream': break;
+				case 'MsoDrawing': case 'MsoDrawingGroup': case 'MsoDrawingSelection': break;
+				case 'ImData': break;
+				/* Pub Stuff */
+				case 'WebPub': case 'AutoWebPub':
+
+				/* Print Stuff */
+				case 'RightMargin': case 'LeftMargin': case 'TopMargin': case 'BottomMargin':
+				case 'HeaderFooter': case 'HFPicture': case 'PLV':
+				case 'HorizontalPageBreaks': case 'VerticalPageBreaks':
+				/* Behavioral */
+				case 'Backup': case 'CompressPictures': case 'Compat12': break;
+
+				/* Should not Happen */
+				case 'Continue': case 'ContinueFrt12': break;
+
+				/* Future Records */
+				case 'FrtFontList': case 'FrtWrapper': break;
+
+				/* BIFF5 records */
+				case 'ExternCount': break;
+				case 'RString': break;
+				case 'TabIdConf': case 'Radar': case 'RadarArea': case 'DropBar': case 'Intl': case 'CoordList': case 'SerAuxErrBar': break;
+
+				default: switch(R.n) { /* nested */
+				/* Miscellaneous */
+				case 'SCENARIO': case 'DConBin': case 'PicF': case 'DataLabExt':
+				case 'Lel': case 'BopPop': case 'BopPopCustom': case 'RealTimeData':
+				case 'Name': break;
+				default: if(options.WTF) throw 'Unrecognized Record ' + R.n;
+			}}}}
+		} else blob.l += length;
+	}
+	var sheetnamesraw = opts.biff === 2 ? ['Sheet1'] : Object.keys(Directory).sort(function(a,b) { return Number(a) - Number(b); }).map(function(x){return Directory[x].name;});
+	var sheetnames = sheetnamesraw.slice();
+	wb.Directory=sheetnamesraw;
+	wb.SheetNames=sheetnamesraw;
+	if(!options.bookSheets) wb.Sheets=Sheets;
+	wb.Preamble=Preamble;
+	wb.Strings = sst;
+	wb.SSF = SSF.get_table();
+	if(opts.enc) wb.Encryption = opts.enc;
+	wb.Metadata = {};
+	if(country !== undefined) wb.Metadata.Country = country;
+	return wb;
+}
+
+function parse_xlscfb(cfb, options) {
+if(!options) options = {};
+fix_read_opts(options);
+reset_cp();
+var CompObj, Summary, Workbook;
+if(cfb.find) {
+	CompObj = cfb.find('!CompObj');
+	Summary = cfb.find('!SummaryInformation');
+	Workbook = cfb.find('/Workbook');
+} else {
+	prep_blob(cfb, 0);
+	Workbook = {content: cfb};
+}
+
+if(!Workbook) Workbook = cfb.find('/Book');
+var CompObjP, SummaryP, WorkbookP;
+
+if(CompObj) CompObjP = parse_compobj(CompObj);
+if(options.bookProps && !options.bookSheets) WorkbookP = {};
+else {
+	if(Workbook) WorkbookP = parse_workbook(Workbook.content, options, !!Workbook.find);
+	else throw new Error("Cannot find Workbook stream");
+}
+
+if(cfb.find) parse_props(cfb);
+
+var props = {};
+for(var y in cfb.Summary) props[y] = cfb.Summary[y];
+for(y in cfb.DocSummary) props[y] = cfb.DocSummary[y];
+WorkbookP.Props = WorkbookP.Custprops = props; /* TODO: split up properties */
+if(options.bookFiles) WorkbookP.cfb = cfb;
+WorkbookP.CompObjP = CompObjP;
+return WorkbookP;
+}
+
+/* TODO: WTF */
+function parse_props(cfb) {
+	/* [MS-OSHARED] 2.3.3.2.2 Document Summary Information Property Set */
+	var DSI = cfb.find('!DocumentSummaryInformation');
+	if(DSI) try { cfb.DocSummary = parse_PropertySetStream(DSI, DocSummaryPIDDSI); } catch(e) {}
+
+	/* [MS-OSHARED] 2.3.3.2.1 Summary Information Property Set*/
+	var SI = cfb.find('!SummaryInformation');
+	if(SI) try { cfb.Summary = parse_PropertySetStream(SI, SummaryPIDSI); } catch(e) {}
+}
+
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/82_parsetab.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/82_parsetab.js
new file mode 100644
index 0000000..fba9b77
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/82_parsetab.js
@@ -0,0 +1,1230 @@
+/* [MS-XLSB] 2.3 Record Enumeration */
+var XLSBRecordEnum = {
+	0x0000: { n:"BrtRowHdr", f:parse_BrtRowHdr },
+	0x0001: { n:"BrtCellBlank", f:parse_BrtCellBlank },
+	0x0002: { n:"BrtCellRk", f:parse_BrtCellRk },
+	0x0003: { n:"BrtCellError", f:parse_BrtCellError },
+	0x0004: { n:"BrtCellBool", f:parse_BrtCellBool },
+	0x0005: { n:"BrtCellReal", f:parse_BrtCellReal },
+	0x0006: { n:"BrtCellSt", f:parse_BrtCellSt },
+	0x0007: { n:"BrtCellIsst", f:parse_BrtCellIsst },
+	0x0008: { n:"BrtFmlaString", f:parse_BrtFmlaString },
+	0x0009: { n:"BrtFmlaNum", f:parse_BrtFmlaNum },
+	0x000A: { n:"BrtFmlaBool", f:parse_BrtFmlaBool },
+	0x000B: { n:"BrtFmlaError", f:parse_BrtFmlaError },
+	0x0010: { n:"BrtFRTArchID$", f:parse_BrtFRTArchID$ },
+	0x0013: { n:"BrtSSTItem", f:parse_RichStr },
+	0x0014: { n:"BrtPCDIMissing", f:parsenoop },
+	0x0015: { n:"BrtPCDINumber", f:parsenoop },
+	0x0016: { n:"BrtPCDIBoolean", f:parsenoop },
+	0x0017: { n:"BrtPCDIError", f:parsenoop },
+	0x0018: { n:"BrtPCDIString", f:parsenoop },
+	0x0019: { n:"BrtPCDIDatetime", f:parsenoop },
+	0x001A: { n:"BrtPCDIIndex", f:parsenoop },
+	0x001B: { n:"BrtPCDIAMissing", f:parsenoop },
+	0x001C: { n:"BrtPCDIANumber", f:parsenoop },
+	0x001D: { n:"BrtPCDIABoolean", f:parsenoop },
+	0x001E: { n:"BrtPCDIAError", f:parsenoop },
+	0x001F: { n:"BrtPCDIAString", f:parsenoop },
+	0x0020: { n:"BrtPCDIADatetime", f:parsenoop },
+	0x0021: { n:"BrtPCRRecord", f:parsenoop },
+	0x0022: { n:"BrtPCRRecordDt", f:parsenoop },
+	0x0023: { n:"BrtFRTBegin", f:parsenoop },
+	0x0024: { n:"BrtFRTEnd", f:parsenoop },
+	0x0025: { n:"BrtACBegin", f:parsenoop },
+	0x0026: { n:"BrtACEnd", f:parsenoop },
+	0x0027: { n:"BrtName", f:parsenoop },
+	0x0028: { n:"BrtIndexRowBlock", f:parsenoop },
+	0x002A: { n:"BrtIndexBlock", f:parsenoop },
+	0x002B: { n:"BrtFont", f:parse_BrtFont },
+	0x002C: { n:"BrtFmt", f:parse_BrtFmt },
+	0x002D: { n:"BrtFill", f:parsenoop },
+	0x002E: { n:"BrtBorder", f:parsenoop },
+	0x002F: { n:"BrtXF", f:parse_BrtXF },
+	0x0030: { n:"BrtStyle", f:parsenoop },
+	0x0031: { n:"BrtCellMeta", f:parsenoop },
+	0x0032: { n:"BrtValueMeta", f:parsenoop },
+	0x0033: { n:"BrtMdb", f:parsenoop },
+	0x0034: { n:"BrtBeginFmd", f:parsenoop },
+	0x0035: { n:"BrtEndFmd", f:parsenoop },
+	0x0036: { n:"BrtBeginMdx", f:parsenoop },
+	0x0037: { n:"BrtEndMdx", f:parsenoop },
+	0x0038: { n:"BrtBeginMdxTuple", f:parsenoop },
+	0x0039: { n:"BrtEndMdxTuple", f:parsenoop },
+	0x003A: { n:"BrtMdxMbrIstr", f:parsenoop },
+	0x003B: { n:"BrtStr", f:parsenoop },
+	0x003C: { n:"BrtColInfo", f:parsenoop },
+	0x003E: { n:"BrtCellRString", f:parsenoop },
+	0x003F: { n:"BrtCalcChainItem$", f:parse_BrtCalcChainItem$ },
+	0x0040: { n:"BrtDVal", f:parsenoop },
+	0x0041: { n:"BrtSxvcellNum", f:parsenoop },
+	0x0042: { n:"BrtSxvcellStr", f:parsenoop },
+	0x0043: { n:"BrtSxvcellBool", f:parsenoop },
+	0x0044: { n:"BrtSxvcellErr", f:parsenoop },
+	0x0045: { n:"BrtSxvcellDate", f:parsenoop },
+	0x0046: { n:"BrtSxvcellNil", f:parsenoop },
+	0x0080: { n:"BrtFileVersion", f:parsenoop },
+	0x0081: { n:"BrtBeginSheet", f:parsenoop },
+	0x0082: { n:"BrtEndSheet", f:parsenoop },
+	0x0083: { n:"BrtBeginBook", f:parsenoop, p:0 },
+	0x0084: { n:"BrtEndBook", f:parsenoop },
+	0x0085: { n:"BrtBeginWsViews", f:parsenoop },
+	0x0086: { n:"BrtEndWsViews", f:parsenoop },
+	0x0087: { n:"BrtBeginBookViews", f:parsenoop },
+	0x0088: { n:"BrtEndBookViews", f:parsenoop },
+	0x0089: { n:"BrtBeginWsView", f:parsenoop },
+	0x008A: { n:"BrtEndWsView", f:parsenoop },
+	0x008B: { n:"BrtBeginCsViews", f:parsenoop },
+	0x008C: { n:"BrtEndCsViews", f:parsenoop },
+	0x008D: { n:"BrtBeginCsView", f:parsenoop },
+	0x008E: { n:"BrtEndCsView", f:parsenoop },
+	0x008F: { n:"BrtBeginBundleShs", f:parsenoop },
+	0x0090: { n:"BrtEndBundleShs", f:parsenoop },
+	0x0091: { n:"BrtBeginSheetData", f:parsenoop },
+	0x0092: { n:"BrtEndSheetData", f:parsenoop },
+	0x0093: { n:"BrtWsProp", f:parse_BrtWsProp },
+	0x0094: { n:"BrtWsDim", f:parse_BrtWsDim, p:16 },
+	0x0097: { n:"BrtPane", f:parsenoop },
+	0x0098: { n:"BrtSel", f:parsenoop },
+	0x0099: { n:"BrtWbProp", f:parse_BrtWbProp },
+	0x009A: { n:"BrtWbFactoid", f:parsenoop },
+	0x009B: { n:"BrtFileRecover", f:parsenoop },
+	0x009C: { n:"BrtBundleSh", f:parse_BrtBundleSh },
+	0x009D: { n:"BrtCalcProp", f:parsenoop },
+	0x009E: { n:"BrtBookView", f:parsenoop },
+	0x009F: { n:"BrtBeginSst", f:parse_BrtBeginSst },
+	0x00A0: { n:"BrtEndSst", f:parsenoop },
+	0x00A1: { n:"BrtBeginAFilter", f:parsenoop },
+	0x00A2: { n:"BrtEndAFilter", f:parsenoop },
+	0x00A3: { n:"BrtBeginFilterColumn", f:parsenoop },
+	0x00A4: { n:"BrtEndFilterColumn", f:parsenoop },
+	0x00A5: { n:"BrtBeginFilters", f:parsenoop },
+	0x00A6: { n:"BrtEndFilters", f:parsenoop },
+	0x00A7: { n:"BrtFilter", f:parsenoop },
+	0x00A8: { n:"BrtColorFilter", f:parsenoop },
+	0x00A9: { n:"BrtIconFilter", f:parsenoop },
+	0x00AA: { n:"BrtTop10Filter", f:parsenoop },
+	0x00AB: { n:"BrtDynamicFilter", f:parsenoop },
+	0x00AC: { n:"BrtBeginCustomFilters", f:parsenoop },
+	0x00AD: { n:"BrtEndCustomFilters", f:parsenoop },
+	0x00AE: { n:"BrtCustomFilter", f:parsenoop },
+	0x00AF: { n:"BrtAFilterDateGroupItem", f:parsenoop },
+	0x00B0: { n:"BrtMergeCell", f:parse_BrtMergeCell },
+	0x00B1: { n:"BrtBeginMergeCells", f:parsenoop },
+	0x00B2: { n:"BrtEndMergeCells", f:parsenoop },
+	0x00B3: { n:"BrtBeginPivotCacheDef", f:parsenoop },
+	0x00B4: { n:"BrtEndPivotCacheDef", f:parsenoop },
+	0x00B5: { n:"BrtBeginPCDFields", f:parsenoop },
+	0x00B6: { n:"BrtEndPCDFields", f:parsenoop },
+	0x00B7: { n:"BrtBeginPCDField", f:parsenoop },
+	0x00B8: { n:"BrtEndPCDField", f:parsenoop },
+	0x00B9: { n:"BrtBeginPCDSource", f:parsenoop },
+	0x00BA: { n:"BrtEndPCDSource", f:parsenoop },
+	0x00BB: { n:"BrtBeginPCDSRange", f:parsenoop },
+	0x00BC: { n:"BrtEndPCDSRange", f:parsenoop },
+	0x00BD: { n:"BrtBeginPCDFAtbl", f:parsenoop },
+	0x00BE: { n:"BrtEndPCDFAtbl", f:parsenoop },
+	0x00BF: { n:"BrtBeginPCDIRun", f:parsenoop },
+	0x00C0: { n:"BrtEndPCDIRun", f:parsenoop },
+	0x00C1: { n:"BrtBeginPivotCacheRecords", f:parsenoop },
+	0x00C2: { n:"BrtEndPivotCacheRecords", f:parsenoop },
+	0x00C3: { n:"BrtBeginPCDHierarchies", f:parsenoop },
+	0x00C4: { n:"BrtEndPCDHierarchies", f:parsenoop },
+	0x00C5: { n:"BrtBeginPCDHierarchy", f:parsenoop },
+	0x00C6: { n:"BrtEndPCDHierarchy", f:parsenoop },
+	0x00C7: { n:"BrtBeginPCDHFieldsUsage", f:parsenoop },
+	0x00C8: { n:"BrtEndPCDHFieldsUsage", f:parsenoop },
+	0x00C9: { n:"BrtBeginExtConnection", f:parsenoop },
+	0x00CA: { n:"BrtEndExtConnection", f:parsenoop },
+	0x00CB: { n:"BrtBeginECDbProps", f:parsenoop },
+	0x00CC: { n:"BrtEndECDbProps", f:parsenoop },
+	0x00CD: { n:"BrtBeginECOlapProps", f:parsenoop },
+	0x00CE: { n:"BrtEndECOlapProps", f:parsenoop },
+	0x00CF: { n:"BrtBeginPCDSConsol", f:parsenoop },
+	0x00D0: { n:"BrtEndPCDSConsol", f:parsenoop },
+	0x00D1: { n:"BrtBeginPCDSCPages", f:parsenoop },
+	0x00D2: { n:"BrtEndPCDSCPages", f:parsenoop },
+	0x00D3: { n:"BrtBeginPCDSCPage", f:parsenoop },
+	0x00D4: { n:"BrtEndPCDSCPage", f:parsenoop },
+	0x00D5: { n:"BrtBeginPCDSCPItem", f:parsenoop },
+	0x00D6: { n:"BrtEndPCDSCPItem", f:parsenoop },
+	0x00D7: { n:"BrtBeginPCDSCSets", f:parsenoop },
+	0x00D8: { n:"BrtEndPCDSCSets", f:parsenoop },
+	0x00D9: { n:"BrtBeginPCDSCSet", f:parsenoop },
+	0x00DA: { n:"BrtEndPCDSCSet", f:parsenoop },
+	0x00DB: { n:"BrtBeginPCDFGroup", f:parsenoop },
+	0x00DC: { n:"BrtEndPCDFGroup", f:parsenoop },
+	0x00DD: { n:"BrtBeginPCDFGItems", f:parsenoop },
+	0x00DE: { n:"BrtEndPCDFGItems", f:parsenoop },
+	0x00DF: { n:"BrtBeginPCDFGRange", f:parsenoop },
+	0x00E0: { n:"BrtEndPCDFGRange", f:parsenoop },
+	0x00E1: { n:"BrtBeginPCDFGDiscrete", f:parsenoop },
+	0x00E2: { n:"BrtEndPCDFGDiscrete", f:parsenoop },
+	0x00E3: { n:"BrtBeginPCDSDTupleCache", f:parsenoop },
+	0x00E4: { n:"BrtEndPCDSDTupleCache", f:parsenoop },
+	0x00E5: { n:"BrtBeginPCDSDTCEntries", f:parsenoop },
+	0x00E6: { n:"BrtEndPCDSDTCEntries", f:parsenoop },
+	0x00E7: { n:"BrtBeginPCDSDTCEMembers", f:parsenoop },
+	0x00E8: { n:"BrtEndPCDSDTCEMembers", f:parsenoop },
+	0x00E9: { n:"BrtBeginPCDSDTCEMember", f:parsenoop },
+	0x00EA: { n:"BrtEndPCDSDTCEMember", f:parsenoop },
+	0x00EB: { n:"BrtBeginPCDSDTCQueries", f:parsenoop },
+	0x00EC: { n:"BrtEndPCDSDTCQueries", f:parsenoop },
+	0x00ED: { n:"BrtBeginPCDSDTCQuery", f:parsenoop },
+	0x00EE: { n:"BrtEndPCDSDTCQuery", f:parsenoop },
+	0x00EF: { n:"BrtBeginPCDSDTCSets", f:parsenoop },
+	0x00F0: { n:"BrtEndPCDSDTCSets", f:parsenoop },
+	0x00F1: { n:"BrtBeginPCDSDTCSet", f:parsenoop },
+	0x00F2: { n:"BrtEndPCDSDTCSet", f:parsenoop },
+	0x00F3: { n:"BrtBeginPCDCalcItems", f:parsenoop },
+	0x00F4: { n:"BrtEndPCDCalcItems", f:parsenoop },
+	0x00F5: { n:"BrtBeginPCDCalcItem", f:parsenoop },
+	0x00F6: { n:"BrtEndPCDCalcItem", f:parsenoop },
+	0x00F7: { n:"BrtBeginPRule", f:parsenoop },
+	0x00F8: { n:"BrtEndPRule", f:parsenoop },
+	0x00F9: { n:"BrtBeginPRFilters", f:parsenoop },
+	0x00FA: { n:"BrtEndPRFilters", f:parsenoop },
+	0x00FB: { n:"BrtBeginPRFilter", f:parsenoop },
+	0x00FC: { n:"BrtEndPRFilter", f:parsenoop },
+	0x00FD: { n:"BrtBeginPNames", f:parsenoop },
+	0x00FE: { n:"BrtEndPNames", f:parsenoop },
+	0x00FF: { n:"BrtBeginPName", f:parsenoop },
+	0x0100: { n:"BrtEndPName", f:parsenoop },
+	0x0101: { n:"BrtBeginPNPairs", f:parsenoop },
+	0x0102: { n:"BrtEndPNPairs", f:parsenoop },
+	0x0103: { n:"BrtBeginPNPair", f:parsenoop },
+	0x0104: { n:"BrtEndPNPair", f:parsenoop },
+	0x0105: { n:"BrtBeginECWebProps", f:parsenoop },
+	0x0106: { n:"BrtEndECWebProps", f:parsenoop },
+	0x0107: { n:"BrtBeginEcWpTables", f:parsenoop },
+	0x0108: { n:"BrtEndECWPTables", f:parsenoop },
+	0x0109: { n:"BrtBeginECParams", f:parsenoop },
+	0x010A: { n:"BrtEndECParams", f:parsenoop },
+	0x010B: { n:"BrtBeginECParam", f:parsenoop },
+	0x010C: { n:"BrtEndECParam", f:parsenoop },
+	0x010D: { n:"BrtBeginPCDKPIs", f:parsenoop },
+	0x010E: { n:"BrtEndPCDKPIs", f:parsenoop },
+	0x010F: { n:"BrtBeginPCDKPI", f:parsenoop },
+	0x0110: { n:"BrtEndPCDKPI", f:parsenoop },
+	0x0111: { n:"BrtBeginDims", f:parsenoop },
+	0x0112: { n:"BrtEndDims", f:parsenoop },
+	0x0113: { n:"BrtBeginDim", f:parsenoop },
+	0x0114: { n:"BrtEndDim", f:parsenoop },
+	0x0115: { n:"BrtIndexPartEnd", f:parsenoop },
+	0x0116: { n:"BrtBeginStyleSheet", f:parsenoop },
+	0x0117: { n:"BrtEndStyleSheet", f:parsenoop },
+	0x0118: { n:"BrtBeginSXView", f:parsenoop },
+	0x0119: { n:"BrtEndSXVI", f:parsenoop },
+	0x011A: { n:"BrtBeginSXVI", f:parsenoop },
+	0x011B: { n:"BrtBeginSXVIs", f:parsenoop },
+	0x011C: { n:"BrtEndSXVIs", f:parsenoop },
+	0x011D: { n:"BrtBeginSXVD", f:parsenoop },
+	0x011E: { n:"BrtEndSXVD", f:parsenoop },
+	0x011F: { n:"BrtBeginSXVDs", f:parsenoop },
+	0x0120: { n:"BrtEndSXVDs", f:parsenoop },
+	0x0121: { n:"BrtBeginSXPI", f:parsenoop },
+	0x0122: { n:"BrtEndSXPI", f:parsenoop },
+	0x0123: { n:"BrtBeginSXPIs", f:parsenoop },
+	0x0124: { n:"BrtEndSXPIs", f:parsenoop },
+	0x0125: { n:"BrtBeginSXDI", f:parsenoop },
+	0x0126: { n:"BrtEndSXDI", f:parsenoop },
+	0x0127: { n:"BrtBeginSXDIs", f:parsenoop },
+	0x0128: { n:"BrtEndSXDIs", f:parsenoop },
+	0x0129: { n:"BrtBeginSXLI", f:parsenoop },
+	0x012A: { n:"BrtEndSXLI", f:parsenoop },
+	0x012B: { n:"BrtBeginSXLIRws", f:parsenoop },
+	0x012C: { n:"BrtEndSXLIRws", f:parsenoop },
+	0x012D: { n:"BrtBeginSXLICols", f:parsenoop },
+	0x012E: { n:"BrtEndSXLICols", f:parsenoop },
+	0x012F: { n:"BrtBeginSXFormat", f:parsenoop },
+	0x0130: { n:"BrtEndSXFormat", f:parsenoop },
+	0x0131: { n:"BrtBeginSXFormats", f:parsenoop },
+	0x0132: { n:"BrtEndSxFormats", f:parsenoop },
+	0x0133: { n:"BrtBeginSxSelect", f:parsenoop },
+	0x0134: { n:"BrtEndSxSelect", f:parsenoop },
+	0x0135: { n:"BrtBeginISXVDRws", f:parsenoop },
+	0x0136: { n:"BrtEndISXVDRws", f:parsenoop },
+	0x0137: { n:"BrtBeginISXVDCols", f:parsenoop },
+	0x0138: { n:"BrtEndISXVDCols", f:parsenoop },
+	0x0139: { n:"BrtEndSXLocation", f:parsenoop },
+	0x013A: { n:"BrtBeginSXLocation", f:parsenoop },
+	0x013B: { n:"BrtEndSXView", f:parsenoop },
+	0x013C: { n:"BrtBeginSXTHs", f:parsenoop },
+	0x013D: { n:"BrtEndSXTHs", f:parsenoop },
+	0x013E: { n:"BrtBeginSXTH", f:parsenoop },
+	0x013F: { n:"BrtEndSXTH", f:parsenoop },
+	0x0140: { n:"BrtBeginISXTHRws", f:parsenoop },
+	0x0141: { n:"BrtEndISXTHRws", f:parsenoop },
+	0x0142: { n:"BrtBeginISXTHCols", f:parsenoop },
+	0x0143: { n:"BrtEndISXTHCols", f:parsenoop },
+	0x0144: { n:"BrtBeginSXTDMPS", f:parsenoop },
+	0x0145: { n:"BrtEndSXTDMPs", f:parsenoop },
+	0x0146: { n:"BrtBeginSXTDMP", f:parsenoop },
+	0x0147: { n:"BrtEndSXTDMP", f:parsenoop },
+	0x0148: { n:"BrtBeginSXTHItems", f:parsenoop },
+	0x0149: { n:"BrtEndSXTHItems", f:parsenoop },
+	0x014A: { n:"BrtBeginSXTHItem", f:parsenoop },
+	0x014B: { n:"BrtEndSXTHItem", f:parsenoop },
+	0x014C: { n:"BrtBeginMetadata", f:parsenoop },
+	0x014D: { n:"BrtEndMetadata", f:parsenoop },
+	0x014E: { n:"BrtBeginEsmdtinfo", f:parsenoop },
+	0x014F: { n:"BrtMdtinfo", f:parsenoop },
+	0x0150: { n:"BrtEndEsmdtinfo", f:parsenoop },
+	0x0151: { n:"BrtBeginEsmdb", f:parsenoop },
+	0x0152: { n:"BrtEndEsmdb", f:parsenoop },
+	0x0153: { n:"BrtBeginEsfmd", f:parsenoop },
+	0x0154: { n:"BrtEndEsfmd", f:parsenoop },
+	0x0155: { n:"BrtBeginSingleCells", f:parsenoop },
+	0x0156: { n:"BrtEndSingleCells", f:parsenoop },
+	0x0157: { n:"BrtBeginList", f:parsenoop },
+	0x0158: { n:"BrtEndList", f:parsenoop },
+	0x0159: { n:"BrtBeginListCols", f:parsenoop },
+	0x015A: { n:"BrtEndListCols", f:parsenoop },
+	0x015B: { n:"BrtBeginListCol", f:parsenoop },
+	0x015C: { n:"BrtEndListCol", f:parsenoop },
+	0x015D: { n:"BrtBeginListXmlCPr", f:parsenoop },
+	0x015E: { n:"BrtEndListXmlCPr", f:parsenoop },
+	0x015F: { n:"BrtListCCFmla", f:parsenoop },
+	0x0160: { n:"BrtListTrFmla", f:parsenoop },
+	0x0161: { n:"BrtBeginExternals", f:parsenoop },
+	0x0162: { n:"BrtEndExternals", f:parsenoop },
+	0x0163: { n:"BrtSupBookSrc", f:parsenoop },
+	0x0165: { n:"BrtSupSelf", f:parsenoop },
+	0x0166: { n:"BrtSupSame", f:parsenoop },
+	0x0167: { n:"BrtSupTabs", f:parsenoop },
+	0x0168: { n:"BrtBeginSupBook", f:parsenoop },
+	0x0169: { n:"BrtPlaceholderName", f:parsenoop },
+	0x016A: { n:"BrtExternSheet", f:parsenoop },
+	0x016B: { n:"BrtExternTableStart", f:parsenoop },
+	0x016C: { n:"BrtExternTableEnd", f:parsenoop },
+	0x016E: { n:"BrtExternRowHdr", f:parsenoop },
+	0x016F: { n:"BrtExternCellBlank", f:parsenoop },
+	0x0170: { n:"BrtExternCellReal", f:parsenoop },
+	0x0171: { n:"BrtExternCellBool", f:parsenoop },
+	0x0172: { n:"BrtExternCellError", f:parsenoop },
+	0x0173: { n:"BrtExternCellString", f:parsenoop },
+	0x0174: { n:"BrtBeginEsmdx", f:parsenoop },
+	0x0175: { n:"BrtEndEsmdx", f:parsenoop },
+	0x0176: { n:"BrtBeginMdxSet", f:parsenoop },
+	0x0177: { n:"BrtEndMdxSet", f:parsenoop },
+	0x0178: { n:"BrtBeginMdxMbrProp", f:parsenoop },
+	0x0179: { n:"BrtEndMdxMbrProp", f:parsenoop },
+	0x017A: { n:"BrtBeginMdxKPI", f:parsenoop },
+	0x017B: { n:"BrtEndMdxKPI", f:parsenoop },
+	0x017C: { n:"BrtBeginEsstr", f:parsenoop },
+	0x017D: { n:"BrtEndEsstr", f:parsenoop },
+	0x017E: { n:"BrtBeginPRFItem", f:parsenoop },
+	0x017F: { n:"BrtEndPRFItem", f:parsenoop },
+	0x0180: { n:"BrtBeginPivotCacheIDs", f:parsenoop },
+	0x0181: { n:"BrtEndPivotCacheIDs", f:parsenoop },
+	0x0182: { n:"BrtBeginPivotCacheID", f:parsenoop },
+	0x0183: { n:"BrtEndPivotCacheID", f:parsenoop },
+	0x0184: { n:"BrtBeginISXVIs", f:parsenoop },
+	0x0185: { n:"BrtEndISXVIs", f:parsenoop },
+	0x0186: { n:"BrtBeginColInfos", f:parsenoop },
+	0x0187: { n:"BrtEndColInfos", f:parsenoop },
+	0x0188: { n:"BrtBeginRwBrk", f:parsenoop },
+	0x0189: { n:"BrtEndRwBrk", f:parsenoop },
+	0x018A: { n:"BrtBeginColBrk", f:parsenoop },
+	0x018B: { n:"BrtEndColBrk", f:parsenoop },
+	0x018C: { n:"BrtBrk", f:parsenoop },
+	0x018D: { n:"BrtUserBookView", f:parsenoop },
+	0x018E: { n:"BrtInfo", f:parsenoop },
+	0x018F: { n:"BrtCUsr", f:parsenoop },
+	0x0190: { n:"BrtUsr", f:parsenoop },
+	0x0191: { n:"BrtBeginUsers", f:parsenoop },
+	0x0193: { n:"BrtEOF", f:parsenoop },
+	0x0194: { n:"BrtUCR", f:parsenoop },
+	0x0195: { n:"BrtRRInsDel", f:parsenoop },
+	0x0196: { n:"BrtRREndInsDel", f:parsenoop },
+	0x0197: { n:"BrtRRMove", f:parsenoop },
+	0x0198: { n:"BrtRREndMove", f:parsenoop },
+	0x0199: { n:"BrtRRChgCell", f:parsenoop },
+	0x019A: { n:"BrtRREndChgCell", f:parsenoop },
+	0x019B: { n:"BrtRRHeader", f:parsenoop },
+	0x019C: { n:"BrtRRUserView", f:parsenoop },
+	0x019D: { n:"BrtRRRenSheet", f:parsenoop },
+	0x019E: { n:"BrtRRInsertSh", f:parsenoop },
+	0x019F: { n:"BrtRRDefName", f:parsenoop },
+	0x01A0: { n:"BrtRRNote", f:parsenoop },
+	0x01A1: { n:"BrtRRConflict", f:parsenoop },
+	0x01A2: { n:"BrtRRTQSIF", f:parsenoop },
+	0x01A3: { n:"BrtRRFormat", f:parsenoop },
+	0x01A4: { n:"BrtRREndFormat", f:parsenoop },
+	0x01A5: { n:"BrtRRAutoFmt", f:parsenoop },
+	0x01A6: { n:"BrtBeginUserShViews", f:parsenoop },
+	0x01A7: { n:"BrtBeginUserShView", f:parsenoop },
+	0x01A8: { n:"BrtEndUserShView", f:parsenoop },
+	0x01A9: { n:"BrtEndUserShViews", f:parsenoop },
+	0x01AA: { n:"BrtArrFmla", f:parsenoop },
+	0x01AB: { n:"BrtShrFmla", f:parsenoop },
+	0x01AC: { n:"BrtTable", f:parsenoop },
+	0x01AD: { n:"BrtBeginExtConnections", f:parsenoop },
+	0x01AE: { n:"BrtEndExtConnections", f:parsenoop },
+	0x01AF: { n:"BrtBeginPCDCalcMems", f:parsenoop },
+	0x01B0: { n:"BrtEndPCDCalcMems", f:parsenoop },
+	0x01B1: { n:"BrtBeginPCDCalcMem", f:parsenoop },
+	0x01B2: { n:"BrtEndPCDCalcMem", f:parsenoop },
+	0x01B3: { n:"BrtBeginPCDHGLevels", f:parsenoop },
+	0x01B4: { n:"BrtEndPCDHGLevels", f:parsenoop },
+	0x01B5: { n:"BrtBeginPCDHGLevel", f:parsenoop },
+	0x01B6: { n:"BrtEndPCDHGLevel", f:parsenoop },
+	0x01B7: { n:"BrtBeginPCDHGLGroups", f:parsenoop },
+	0x01B8: { n:"BrtEndPCDHGLGroups", f:parsenoop },
+	0x01B9: { n:"BrtBeginPCDHGLGroup", f:parsenoop },
+	0x01BA: { n:"BrtEndPCDHGLGroup", f:parsenoop },
+	0x01BB: { n:"BrtBeginPCDHGLGMembers", f:parsenoop },
+	0x01BC: { n:"BrtEndPCDHGLGMembers", f:parsenoop },
+	0x01BD: { n:"BrtBeginPCDHGLGMember", f:parsenoop },
+	0x01BE: { n:"BrtEndPCDHGLGMember", f:parsenoop },
+	0x01BF: { n:"BrtBeginQSI", f:parsenoop },
+	0x01C0: { n:"BrtEndQSI", f:parsenoop },
+	0x01C1: { n:"BrtBeginQSIR", f:parsenoop },
+	0x01C2: { n:"BrtEndQSIR", f:parsenoop },
+	0x01C3: { n:"BrtBeginDeletedNames", f:parsenoop },
+	0x01C4: { n:"BrtEndDeletedNames", f:parsenoop },
+	0x01C5: { n:"BrtBeginDeletedName", f:parsenoop },
+	0x01C6: { n:"BrtEndDeletedName", f:parsenoop },
+	0x01C7: { n:"BrtBeginQSIFs", f:parsenoop },
+	0x01C8: { n:"BrtEndQSIFs", f:parsenoop },
+	0x01C9: { n:"BrtBeginQSIF", f:parsenoop },
+	0x01CA: { n:"BrtEndQSIF", f:parsenoop },
+	0x01CB: { n:"BrtBeginAutoSortScope", f:parsenoop },
+	0x01CC: { n:"BrtEndAutoSortScope", f:parsenoop },
+	0x01CD: { n:"BrtBeginConditionalFormatting", f:parsenoop },
+	0x01CE: { n:"BrtEndConditionalFormatting", f:parsenoop },
+	0x01CF: { n:"BrtBeginCFRule", f:parsenoop },
+	0x01D0: { n:"BrtEndCFRule", f:parsenoop },
+	0x01D1: { n:"BrtBeginIconSet", f:parsenoop },
+	0x01D2: { n:"BrtEndIconSet", f:parsenoop },
+	0x01D3: { n:"BrtBeginDatabar", f:parsenoop },
+	0x01D4: { n:"BrtEndDatabar", f:parsenoop },
+	0x01D5: { n:"BrtBeginColorScale", f:parsenoop },
+	0x01D6: { n:"BrtEndColorScale", f:parsenoop },
+	0x01D7: { n:"BrtCFVO", f:parsenoop },
+	0x01D8: { n:"BrtExternValueMeta", f:parsenoop },
+	0x01D9: { n:"BrtBeginColorPalette", f:parsenoop },
+	0x01DA: { n:"BrtEndColorPalette", f:parsenoop },
+	0x01DB: { n:"BrtIndexedColor", f:parsenoop },
+	0x01DC: { n:"BrtMargins", f:parsenoop },
+	0x01DD: { n:"BrtPrintOptions", f:parsenoop },
+	0x01DE: { n:"BrtPageSetup", f:parsenoop },
+	0x01DF: { n:"BrtBeginHeaderFooter", f:parsenoop },
+	0x01E0: { n:"BrtEndHeaderFooter", f:parsenoop },
+	0x01E1: { n:"BrtBeginSXCrtFormat", f:parsenoop },
+	0x01E2: { n:"BrtEndSXCrtFormat", f:parsenoop },
+	0x01E3: { n:"BrtBeginSXCrtFormats", f:parsenoop },
+	0x01E4: { n:"BrtEndSXCrtFormats", f:parsenoop },
+	0x01E5: { n:"BrtWsFmtInfo", f:parsenoop },
+	0x01E6: { n:"BrtBeginMgs", f:parsenoop },
+	0x01E7: { n:"BrtEndMGs", f:parsenoop },
+	0x01E8: { n:"BrtBeginMGMaps", f:parsenoop },
+	0x01E9: { n:"BrtEndMGMaps", f:parsenoop },
+	0x01EA: { n:"BrtBeginMG", f:parsenoop },
+	0x01EB: { n:"BrtEndMG", f:parsenoop },
+	0x01EC: { n:"BrtBeginMap", f:parsenoop },
+	0x01ED: { n:"BrtEndMap", f:parsenoop },
+	0x01EE: { n:"BrtHLink", f:parse_BrtHLink },
+	0x01EF: { n:"BrtBeginDCon", f:parsenoop },
+	0x01F0: { n:"BrtEndDCon", f:parsenoop },
+	0x01F1: { n:"BrtBeginDRefs", f:parsenoop },
+	0x01F2: { n:"BrtEndDRefs", f:parsenoop },
+	0x01F3: { n:"BrtDRef", f:parsenoop },
+	0x01F4: { n:"BrtBeginScenMan", f:parsenoop },
+	0x01F5: { n:"BrtEndScenMan", f:parsenoop },
+	0x01F6: { n:"BrtBeginSct", f:parsenoop },
+	0x01F7: { n:"BrtEndSct", f:parsenoop },
+	0x01F8: { n:"BrtSlc", f:parsenoop },
+	0x01F9: { n:"BrtBeginDXFs", f:parsenoop },
+	0x01FA: { n:"BrtEndDXFs", f:parsenoop },
+	0x01FB: { n:"BrtDXF", f:parsenoop },
+	0x01FC: { n:"BrtBeginTableStyles", f:parsenoop },
+	0x01FD: { n:"BrtEndTableStyles", f:parsenoop },
+	0x01FE: { n:"BrtBeginTableStyle", f:parsenoop },
+	0x01FF: { n:"BrtEndTableStyle", f:parsenoop },
+	0x0200: { n:"BrtTableStyleElement", f:parsenoop },
+	0x0201: { n:"BrtTableStyleClient", f:parsenoop },
+	0x0202: { n:"BrtBeginVolDeps", f:parsenoop },
+	0x0203: { n:"BrtEndVolDeps", f:parsenoop },
+	0x0204: { n:"BrtBeginVolType", f:parsenoop },
+	0x0205: { n:"BrtEndVolType", f:parsenoop },
+	0x0206: { n:"BrtBeginVolMain", f:parsenoop },
+	0x0207: { n:"BrtEndVolMain", f:parsenoop },
+	0x0208: { n:"BrtBeginVolTopic", f:parsenoop },
+	0x0209: { n:"BrtEndVolTopic", f:parsenoop },
+	0x020A: { n:"BrtVolSubtopic", f:parsenoop },
+	0x020B: { n:"BrtVolRef", f:parsenoop },
+	0x020C: { n:"BrtVolNum", f:parsenoop },
+	0x020D: { n:"BrtVolErr", f:parsenoop },
+	0x020E: { n:"BrtVolStr", f:parsenoop },
+	0x020F: { n:"BrtVolBool", f:parsenoop },
+	0x0210: { n:"BrtBeginCalcChain$", f:parsenoop },
+	0x0211: { n:"BrtEndCalcChain$", f:parsenoop },
+	0x0212: { n:"BrtBeginSortState", f:parsenoop },
+	0x0213: { n:"BrtEndSortState", f:parsenoop },
+	0x0214: { n:"BrtBeginSortCond", f:parsenoop },
+	0x0215: { n:"BrtEndSortCond", f:parsenoop },
+	0x0216: { n:"BrtBookProtection", f:parsenoop },
+	0x0217: { n:"BrtSheetProtection", f:parsenoop },
+	0x0218: { n:"BrtRangeProtection", f:parsenoop },
+	0x0219: { n:"BrtPhoneticInfo", f:parsenoop },
+	0x021A: { n:"BrtBeginECTxtWiz", f:parsenoop },
+	0x021B: { n:"BrtEndECTxtWiz", f:parsenoop },
+	0x021C: { n:"BrtBeginECTWFldInfoLst", f:parsenoop },
+	0x021D: { n:"BrtEndECTWFldInfoLst", f:parsenoop },
+	0x021E: { n:"BrtBeginECTwFldInfo", f:parsenoop },
+	0x0224: { n:"BrtFileSharing", f:parsenoop },
+	0x0225: { n:"BrtOleSize", f:parsenoop },
+	0x0226: { n:"BrtDrawing", f:parsenoop },
+	0x0227: { n:"BrtLegacyDrawing", f:parsenoop },
+	0x0228: { n:"BrtLegacyDrawingHF", f:parsenoop },
+	0x0229: { n:"BrtWebOpt", f:parsenoop },
+	0x022A: { n:"BrtBeginWebPubItems", f:parsenoop },
+	0x022B: { n:"BrtEndWebPubItems", f:parsenoop },
+	0x022C: { n:"BrtBeginWebPubItem", f:parsenoop },
+	0x022D: { n:"BrtEndWebPubItem", f:parsenoop },
+	0x022E: { n:"BrtBeginSXCondFmt", f:parsenoop },
+	0x022F: { n:"BrtEndSXCondFmt", f:parsenoop },
+	0x0230: { n:"BrtBeginSXCondFmts", f:parsenoop },
+	0x0231: { n:"BrtEndSXCondFmts", f:parsenoop },
+	0x0232: { n:"BrtBkHim", f:parsenoop },
+	0x0234: { n:"BrtColor", f:parsenoop },
+	0x0235: { n:"BrtBeginIndexedColors", f:parsenoop },
+	0x0236: { n:"BrtEndIndexedColors", f:parsenoop },
+	0x0239: { n:"BrtBeginMRUColors", f:parsenoop },
+	0x023A: { n:"BrtEndMRUColors", f:parsenoop },
+	0x023C: { n:"BrtMRUColor", f:parsenoop },
+	0x023D: { n:"BrtBeginDVals", f:parsenoop },
+	0x023E: { n:"BrtEndDVals", f:parsenoop },
+	0x0241: { n:"BrtSupNameStart", f:parsenoop },
+	0x0242: { n:"BrtSupNameValueStart", f:parsenoop },
+	0x0243: { n:"BrtSupNameValueEnd", f:parsenoop },
+	0x0244: { n:"BrtSupNameNum", f:parsenoop },
+	0x0245: { n:"BrtSupNameErr", f:parsenoop },
+	0x0246: { n:"BrtSupNameSt", f:parsenoop },
+	0x0247: { n:"BrtSupNameNil", f:parsenoop },
+	0x0248: { n:"BrtSupNameBool", f:parsenoop },
+	0x0249: { n:"BrtSupNameFmla", f:parsenoop },
+	0x024A: { n:"BrtSupNameBits", f:parsenoop },
+	0x024B: { n:"BrtSupNameEnd", f:parsenoop },
+	0x024C: { n:"BrtEndSupBook", f:parsenoop },
+	0x024D: { n:"BrtCellSmartTagProperty", f:parsenoop },
+	0x024E: { n:"BrtBeginCellSmartTag", f:parsenoop },
+	0x024F: { n:"BrtEndCellSmartTag", f:parsenoop },
+	0x0250: { n:"BrtBeginCellSmartTags", f:parsenoop },
+	0x0251: { n:"BrtEndCellSmartTags", f:parsenoop },
+	0x0252: { n:"BrtBeginSmartTags", f:parsenoop },
+	0x0253: { n:"BrtEndSmartTags", f:parsenoop },
+	0x0254: { n:"BrtSmartTagType", f:parsenoop },
+	0x0255: { n:"BrtBeginSmartTagTypes", f:parsenoop },
+	0x0256: { n:"BrtEndSmartTagTypes", f:parsenoop },
+	0x0257: { n:"BrtBeginSXFilters", f:parsenoop },
+	0x0258: { n:"BrtEndSXFilters", f:parsenoop },
+	0x0259: { n:"BrtBeginSXFILTER", f:parsenoop },
+	0x025A: { n:"BrtEndSXFilter", f:parsenoop },
+	0x025B: { n:"BrtBeginFills", f:parsenoop },
+	0x025C: { n:"BrtEndFills", f:parsenoop },
+	0x025D: { n:"BrtBeginCellWatches", f:parsenoop },
+	0x025E: { n:"BrtEndCellWatches", f:parsenoop },
+	0x025F: { n:"BrtCellWatch", f:parsenoop },
+	0x0260: { n:"BrtBeginCRErrs", f:parsenoop },
+	0x0261: { n:"BrtEndCRErrs", f:parsenoop },
+	0x0262: { n:"BrtCrashRecErr", f:parsenoop },
+	0x0263: { n:"BrtBeginFonts", f:parsenoop },
+	0x0264: { n:"BrtEndFonts", f:parsenoop },
+	0x0265: { n:"BrtBeginBorders", f:parsenoop },
+	0x0266: { n:"BrtEndBorders", f:parsenoop },
+	0x0267: { n:"BrtBeginFmts", f:parsenoop },
+	0x0268: { n:"BrtEndFmts", f:parsenoop },
+	0x0269: { n:"BrtBeginCellXFs", f:parsenoop },
+	0x026A: { n:"BrtEndCellXFs", f:parsenoop },
+	0x026B: { n:"BrtBeginStyles", f:parsenoop },
+	0x026C: { n:"BrtEndStyles", f:parsenoop },
+	0x0271: { n:"BrtBigName", f:parsenoop },
+	0x0272: { n:"BrtBeginCellStyleXFs", f:parsenoop },
+	0x0273: { n:"BrtEndCellStyleXFs", f:parsenoop },
+	0x0274: { n:"BrtBeginComments", f:parsenoop },
+	0x0275: { n:"BrtEndComments", f:parsenoop },
+	0x0276: { n:"BrtBeginCommentAuthors", f:parsenoop },
+	0x0277: { n:"BrtEndCommentAuthors", f:parsenoop },
+	0x0278: { n:"BrtCommentAuthor", f:parse_BrtCommentAuthor },
+	0x0279: { n:"BrtBeginCommentList", f:parsenoop },
+	0x027A: { n:"BrtEndCommentList", f:parsenoop },
+	0x027B: { n:"BrtBeginComment", f:parse_BrtBeginComment},
+	0x027C: { n:"BrtEndComment", f:parsenoop },
+	0x027D: { n:"BrtCommentText", f:parse_BrtCommentText },
+	0x027E: { n:"BrtBeginOleObjects", f:parsenoop },
+	0x027F: { n:"BrtOleObject", f:parsenoop },
+	0x0280: { n:"BrtEndOleObjects", f:parsenoop },
+	0x0281: { n:"BrtBeginSxrules", f:parsenoop },
+	0x0282: { n:"BrtEndSxRules", f:parsenoop },
+	0x0283: { n:"BrtBeginActiveXControls", f:parsenoop },
+	0x0284: { n:"BrtActiveX", f:parsenoop },
+	0x0285: { n:"BrtEndActiveXControls", f:parsenoop },
+	0x0286: { n:"BrtBeginPCDSDTCEMembersSortBy", f:parsenoop },
+	0x0288: { n:"BrtBeginCellIgnoreECs", f:parsenoop },
+	0x0289: { n:"BrtCellIgnoreEC", f:parsenoop },
+	0x028A: { n:"BrtEndCellIgnoreECs", f:parsenoop },
+	0x028B: { n:"BrtCsProp", f:parsenoop },
+	0x028C: { n:"BrtCsPageSetup", f:parsenoop },
+	0x028D: { n:"BrtBeginUserCsViews", f:parsenoop },
+	0x028E: { n:"BrtEndUserCsViews", f:parsenoop },
+	0x028F: { n:"BrtBeginUserCsView", f:parsenoop },
+	0x0290: { n:"BrtEndUserCsView", f:parsenoop },
+	0x0291: { n:"BrtBeginPcdSFCIEntries", f:parsenoop },
+	0x0292: { n:"BrtEndPCDSFCIEntries", f:parsenoop },
+	0x0293: { n:"BrtPCDSFCIEntry", f:parsenoop },
+	0x0294: { n:"BrtBeginListParts", f:parsenoop },
+	0x0295: { n:"BrtListPart", f:parsenoop },
+	0x0296: { n:"BrtEndListParts", f:parsenoop },
+	0x0297: { n:"BrtSheetCalcProp", f:parsenoop },
+	0x0298: { n:"BrtBeginFnGroup", f:parsenoop },
+	0x0299: { n:"BrtFnGroup", f:parsenoop },
+	0x029A: { n:"BrtEndFnGroup", f:parsenoop },
+	0x029B: { n:"BrtSupAddin", f:parsenoop },
+	0x029C: { n:"BrtSXTDMPOrder", f:parsenoop },
+	0x029D: { n:"BrtCsProtection", f:parsenoop },
+	0x029F: { n:"BrtBeginWsSortMap", f:parsenoop },
+	0x02A0: { n:"BrtEndWsSortMap", f:parsenoop },
+	0x02A1: { n:"BrtBeginRRSort", f:parsenoop },
+	0x02A2: { n:"BrtEndRRSort", f:parsenoop },
+	0x02A3: { n:"BrtRRSortItem", f:parsenoop },
+	0x02A4: { n:"BrtFileSharingIso", f:parsenoop },
+	0x02A5: { n:"BrtBookProtectionIso", f:parsenoop },
+	0x02A6: { n:"BrtSheetProtectionIso", f:parsenoop },
+	0x02A7: { n:"BrtCsProtectionIso", f:parsenoop },
+	0x02A8: { n:"BrtRangeProtectionIso", f:parsenoop },
+	0x0400: { n:"BrtRwDescent", f:parsenoop },
+	0x0401: { n:"BrtKnownFonts", f:parsenoop },
+	0x0402: { n:"BrtBeginSXTupleSet", f:parsenoop },
+	0x0403: { n:"BrtEndSXTupleSet", f:parsenoop },
+	0x0404: { n:"BrtBeginSXTupleSetHeader", f:parsenoop },
+	0x0405: { n:"BrtEndSXTupleSetHeader", f:parsenoop },
+	0x0406: { n:"BrtSXTupleSetHeaderItem", f:parsenoop },
+	0x0407: { n:"BrtBeginSXTupleSetData", f:parsenoop },
+	0x0408: { n:"BrtEndSXTupleSetData", f:parsenoop },
+	0x0409: { n:"BrtBeginSXTupleSetRow", f:parsenoop },
+	0x040A: { n:"BrtEndSXTupleSetRow", f:parsenoop },
+	0x040B: { n:"BrtSXTupleSetRowItem", f:parsenoop },
+	0x040C: { n:"BrtNameExt", f:parsenoop },
+	0x040D: { n:"BrtPCDH14", f:parsenoop },
+	0x040E: { n:"BrtBeginPCDCalcMem14", f:parsenoop },
+	0x040F: { n:"BrtEndPCDCalcMem14", f:parsenoop },
+	0x0410: { n:"BrtSXTH14", f:parsenoop },
+	0x0411: { n:"BrtBeginSparklineGroup", f:parsenoop },
+	0x0412: { n:"BrtEndSparklineGroup", f:parsenoop },
+	0x0413: { n:"BrtSparkline", f:parsenoop },
+	0x0414: { n:"BrtSXDI14", f:parsenoop },
+	0x0415: { n:"BrtWsFmtInfoEx14", f:parsenoop },
+	0x0416: { n:"BrtBeginConditionalFormatting14", f:parsenoop },
+	0x0417: { n:"BrtEndConditionalFormatting14", f:parsenoop },
+	0x0418: { n:"BrtBeginCFRule14", f:parsenoop },
+	0x0419: { n:"BrtEndCFRule14", f:parsenoop },
+	0x041A: { n:"BrtCFVO14", f:parsenoop },
+	0x041B: { n:"BrtBeginDatabar14", f:parsenoop },
+	0x041C: { n:"BrtBeginIconSet14", f:parsenoop },
+	0x041D: { n:"BrtDVal14", f:parsenoop },
+	0x041E: { n:"BrtBeginDVals14", f:parsenoop },
+	0x041F: { n:"BrtColor14", f:parsenoop },
+	0x0420: { n:"BrtBeginSparklines", f:parsenoop },
+	0x0421: { n:"BrtEndSparklines", f:parsenoop },
+	0x0422: { n:"BrtBeginSparklineGroups", f:parsenoop },
+	0x0423: { n:"BrtEndSparklineGroups", f:parsenoop },
+	0x0425: { n:"BrtSXVD14", f:parsenoop },
+	0x0426: { n:"BrtBeginSxview14", f:parsenoop },
+	0x0427: { n:"BrtEndSxview14", f:parsenoop },
+	0x042A: { n:"BrtBeginPCD14", f:parsenoop },
+	0x042B: { n:"BrtEndPCD14", f:parsenoop },
+	0x042C: { n:"BrtBeginExtConn14", f:parsenoop },
+	0x042D: { n:"BrtEndExtConn14", f:parsenoop },
+	0x042E: { n:"BrtBeginSlicerCacheIDs", f:parsenoop },
+	0x042F: { n:"BrtEndSlicerCacheIDs", f:parsenoop },
+	0x0430: { n:"BrtBeginSlicerCacheID", f:parsenoop },
+	0x0431: { n:"BrtEndSlicerCacheID", f:parsenoop },
+	0x0433: { n:"BrtBeginSlicerCache", f:parsenoop },
+	0x0434: { n:"BrtEndSlicerCache", f:parsenoop },
+	0x0435: { n:"BrtBeginSlicerCacheDef", f:parsenoop },
+	0x0436: { n:"BrtEndSlicerCacheDef", f:parsenoop },
+	0x0437: { n:"BrtBeginSlicersEx", f:parsenoop },
+	0x0438: { n:"BrtEndSlicersEx", f:parsenoop },
+	0x0439: { n:"BrtBeginSlicerEx", f:parsenoop },
+	0x043A: { n:"BrtEndSlicerEx", f:parsenoop },
+	0x043B: { n:"BrtBeginSlicer", f:parsenoop },
+	0x043C: { n:"BrtEndSlicer", f:parsenoop },
+	0x043D: { n:"BrtSlicerCachePivotTables", f:parsenoop },
+	0x043E: { n:"BrtBeginSlicerCacheOlapImpl", f:parsenoop },
+	0x043F: { n:"BrtEndSlicerCacheOlapImpl", f:parsenoop },
+	0x0440: { n:"BrtBeginSlicerCacheLevelsData", f:parsenoop },
+	0x0441: { n:"BrtEndSlicerCacheLevelsData", f:parsenoop },
+	0x0442: { n:"BrtBeginSlicerCacheLevelData", f:parsenoop },
+	0x0443: { n:"BrtEndSlicerCacheLevelData", f:parsenoop },
+	0x0444: { n:"BrtBeginSlicerCacheSiRanges", f:parsenoop },
+	0x0445: { n:"BrtEndSlicerCacheSiRanges", f:parsenoop },
+	0x0446: { n:"BrtBeginSlicerCacheSiRange", f:parsenoop },
+	0x0447: { n:"BrtEndSlicerCacheSiRange", f:parsenoop },
+	0x0448: { n:"BrtSlicerCacheOlapItem", f:parsenoop },
+	0x0449: { n:"BrtBeginSlicerCacheSelections", f:parsenoop },
+	0x044A: { n:"BrtSlicerCacheSelection", f:parsenoop },
+	0x044B: { n:"BrtEndSlicerCacheSelections", f:parsenoop },
+	0x044C: { n:"BrtBeginSlicerCacheNative", f:parsenoop },
+	0x044D: { n:"BrtEndSlicerCacheNative", f:parsenoop },
+	0x044E: { n:"BrtSlicerCacheNativeItem", f:parsenoop },
+	0x044F: { n:"BrtRangeProtection14", f:parsenoop },
+	0x0450: { n:"BrtRangeProtectionIso14", f:parsenoop },
+	0x0451: { n:"BrtCellIgnoreEC14", f:parsenoop },
+	0x0457: { n:"BrtList14", f:parsenoop },
+	0x0458: { n:"BrtCFIcon", f:parsenoop },
+	0x0459: { n:"BrtBeginSlicerCachesPivotCacheIDs", f:parsenoop },
+	0x045A: { n:"BrtEndSlicerCachesPivotCacheIDs", f:parsenoop },
+	0x045B: { n:"BrtBeginSlicers", f:parsenoop },
+	0x045C: { n:"BrtEndSlicers", f:parsenoop },
+	0x045D: { n:"BrtWbProp14", f:parsenoop },
+	0x045E: { n:"BrtBeginSXEdit", f:parsenoop },
+	0x045F: { n:"BrtEndSXEdit", f:parsenoop },
+	0x0460: { n:"BrtBeginSXEdits", f:parsenoop },
+	0x0461: { n:"BrtEndSXEdits", f:parsenoop },
+	0x0462: { n:"BrtBeginSXChange", f:parsenoop },
+	0x0463: { n:"BrtEndSXChange", f:parsenoop },
+	0x0464: { n:"BrtBeginSXChanges", f:parsenoop },
+	0x0465: { n:"BrtEndSXChanges", f:parsenoop },
+	0x0466: { n:"BrtSXTupleItems", f:parsenoop },
+	0x0468: { n:"BrtBeginSlicerStyle", f:parsenoop },
+	0x0469: { n:"BrtEndSlicerStyle", f:parsenoop },
+	0x046A: { n:"BrtSlicerStyleElement", f:parsenoop },
+	0x046B: { n:"BrtBeginStyleSheetExt14", f:parsenoop },
+	0x046C: { n:"BrtEndStyleSheetExt14", f:parsenoop },
+	0x046D: { n:"BrtBeginSlicerCachesPivotCacheID", f:parsenoop },
+	0x046E: { n:"BrtEndSlicerCachesPivotCacheID", f:parsenoop },
+	0x046F: { n:"BrtBeginConditionalFormattings", f:parsenoop },
+	0x0470: { n:"BrtEndConditionalFormattings", f:parsenoop },
+	0x0471: { n:"BrtBeginPCDCalcMemExt", f:parsenoop },
+	0x0472: { n:"BrtEndPCDCalcMemExt", f:parsenoop },
+	0x0473: { n:"BrtBeginPCDCalcMemsExt", f:parsenoop },
+	0x0474: { n:"BrtEndPCDCalcMemsExt", f:parsenoop },
+	0x0475: { n:"BrtPCDField14", f:parsenoop },
+	0x0476: { n:"BrtBeginSlicerStyles", f:parsenoop },
+	0x0477: { n:"BrtEndSlicerStyles", f:parsenoop },
+	0x0478: { n:"BrtBeginSlicerStyleElements", f:parsenoop },
+	0x0479: { n:"BrtEndSlicerStyleElements", f:parsenoop },
+	0x047A: { n:"BrtCFRuleExt", f:parsenoop },
+	0x047B: { n:"BrtBeginSXCondFmt14", f:parsenoop },
+	0x047C: { n:"BrtEndSXCondFmt14", f:parsenoop },
+	0x047D: { n:"BrtBeginSXCondFmts14", f:parsenoop },
+	0x047E: { n:"BrtEndSXCondFmts14", f:parsenoop },
+	0x0480: { n:"BrtBeginSortCond14", f:parsenoop },
+	0x0481: { n:"BrtEndSortCond14", f:parsenoop },
+	0x0482: { n:"BrtEndDVals14", f:parsenoop },
+	0x0483: { n:"BrtEndIconSet14", f:parsenoop },
+	0x0484: { n:"BrtEndDatabar14", f:parsenoop },
+	0x0485: { n:"BrtBeginColorScale14", f:parsenoop },
+	0x0486: { n:"BrtEndColorScale14", f:parsenoop },
+	0x0487: { n:"BrtBeginSxrules14", f:parsenoop },
+	0x0488: { n:"BrtEndSxrules14", f:parsenoop },
+	0x0489: { n:"BrtBeginPRule14", f:parsenoop },
+	0x048A: { n:"BrtEndPRule14", f:parsenoop },
+	0x048B: { n:"BrtBeginPRFilters14", f:parsenoop },
+	0x048C: { n:"BrtEndPRFilters14", f:parsenoop },
+	0x048D: { n:"BrtBeginPRFilter14", f:parsenoop },
+	0x048E: { n:"BrtEndPRFilter14", f:parsenoop },
+	0x048F: { n:"BrtBeginPRFItem14", f:parsenoop },
+	0x0490: { n:"BrtEndPRFItem14", f:parsenoop },
+	0x0491: { n:"BrtBeginCellIgnoreECs14", f:parsenoop },
+	0x0492: { n:"BrtEndCellIgnoreECs14", f:parsenoop },
+	0x0493: { n:"BrtDxf14", f:parsenoop },
+	0x0494: { n:"BrtBeginDxF14s", f:parsenoop },
+	0x0495: { n:"BrtEndDxf14s", f:parsenoop },
+	0x0499: { n:"BrtFilter14", f:parsenoop },
+	0x049A: { n:"BrtBeginCustomFilters14", f:parsenoop },
+	0x049C: { n:"BrtCustomFilter14", f:parsenoop },
+	0x049D: { n:"BrtIconFilter14", f:parsenoop },
+	0x049E: { n:"BrtPivotCacheConnectionName", f:parsenoop },
+	0x0800: { n:"BrtBeginDecoupledPivotCacheIDs", f:parsenoop },
+	0x0801: { n:"BrtEndDecoupledPivotCacheIDs", f:parsenoop },
+	0x0802: { n:"BrtDecoupledPivotCacheID", f:parsenoop },
+	0x0803: { n:"BrtBeginPivotTableRefs", f:parsenoop },
+	0x0804: { n:"BrtEndPivotTableRefs", f:parsenoop },
+	0x0805: { n:"BrtPivotTableRef", f:parsenoop },
+	0x0806: { n:"BrtSlicerCacheBookPivotTables", f:parsenoop },
+	0x0807: { n:"BrtBeginSxvcells", f:parsenoop },
+	0x0808: { n:"BrtEndSxvcells", f:parsenoop },
+	0x0809: { n:"BrtBeginSxRow", f:parsenoop },
+	0x080A: { n:"BrtEndSxRow", f:parsenoop },
+	0x080C: { n:"BrtPcdCalcMem15", f:parsenoop },
+	0x0813: { n:"BrtQsi15", f:parsenoop },
+	0x0814: { n:"BrtBeginWebExtensions", f:parsenoop },
+	0x0815: { n:"BrtEndWebExtensions", f:parsenoop },
+	0x0816: { n:"BrtWebExtension", f:parsenoop },
+	0x0817: { n:"BrtAbsPath15", f:parsenoop },
+	0x0818: { n:"BrtBeginPivotTableUISettings", f:parsenoop },
+	0x0819: { n:"BrtEndPivotTableUISettings", f:parsenoop },
+	0x081B: { n:"BrtTableSlicerCacheIDs", f:parsenoop },
+	0x081C: { n:"BrtTableSlicerCacheID", f:parsenoop },
+	0x081D: { n:"BrtBeginTableSlicerCache", f:parsenoop },
+	0x081E: { n:"BrtEndTableSlicerCache", f:parsenoop },
+	0x081F: { n:"BrtSxFilter15", f:parsenoop },
+	0x0820: { n:"BrtBeginTimelineCachePivotCacheIDs", f:parsenoop },
+	0x0821: { n:"BrtEndTimelineCachePivotCacheIDs", f:parsenoop },
+	0x0822: { n:"BrtTimelineCachePivotCacheID", f:parsenoop },
+	0x0823: { n:"BrtBeginTimelineCacheIDs", f:parsenoop },
+	0x0824: { n:"BrtEndTimelineCacheIDs", f:parsenoop },
+	0x0825: { n:"BrtBeginTimelineCacheID", f:parsenoop },
+	0x0826: { n:"BrtEndTimelineCacheID", f:parsenoop },
+	0x0827: { n:"BrtBeginTimelinesEx", f:parsenoop },
+	0x0828: { n:"BrtEndTimelinesEx", f:parsenoop },
+	0x0829: { n:"BrtBeginTimelineEx", f:parsenoop },
+	0x082A: { n:"BrtEndTimelineEx", f:parsenoop },
+	0x082B: { n:"BrtWorkBookPr15", f:parsenoop },
+	0x082C: { n:"BrtPCDH15", f:parsenoop },
+	0x082D: { n:"BrtBeginTimelineStyle", f:parsenoop },
+	0x082E: { n:"BrtEndTimelineStyle", f:parsenoop },
+	0x082F: { n:"BrtTimelineStyleElement", f:parsenoop },
+	0x0830: { n:"BrtBeginTimelineStylesheetExt15", f:parsenoop },
+	0x0831: { n:"BrtEndTimelineStylesheetExt15", f:parsenoop },
+	0x0832: { n:"BrtBeginTimelineStyles", f:parsenoop },
+	0x0833: { n:"BrtEndTimelineStyles", f:parsenoop },
+	0x0834: { n:"BrtBeginTimelineStyleElements", f:parsenoop },
+	0x0835: { n:"BrtEndTimelineStyleElements", f:parsenoop },
+	0x0836: { n:"BrtDxf15", f:parsenoop },
+	0x0837: { n:"BrtBeginDxfs15", f:parsenoop },
+	0x0838: { n:"brtEndDxfs15", f:parsenoop },
+	0x0839: { n:"BrtSlicerCacheHideItemsWithNoData", f:parsenoop },
+	0x083A: { n:"BrtBeginItemUniqueNames", f:parsenoop },
+	0x083B: { n:"BrtEndItemUniqueNames", f:parsenoop },
+	0x083C: { n:"BrtItemUniqueName", f:parsenoop },
+	0x083D: { n:"BrtBeginExtConn15", f:parsenoop },
+	0x083E: { n:"BrtEndExtConn15", f:parsenoop },
+	0x083F: { n:"BrtBeginOledbPr15", f:parsenoop },
+	0x0840: { n:"BrtEndOledbPr15", f:parsenoop },
+	0x0841: { n:"BrtBeginDataFeedPr15", f:parsenoop },
+	0x0842: { n:"BrtEndDataFeedPr15", f:parsenoop },
+	0x0843: { n:"BrtTextPr15", f:parsenoop },
+	0x0844: { n:"BrtRangePr15", f:parsenoop },
+	0x0845: { n:"BrtDbCommand15", f:parsenoop },
+	0x0846: { n:"BrtBeginDbTables15", f:parsenoop },
+	0x0847: { n:"BrtEndDbTables15", f:parsenoop },
+	0x0848: { n:"BrtDbTable15", f:parsenoop },
+	0x0849: { n:"BrtBeginDataModel", f:parsenoop },
+	0x084A: { n:"BrtEndDataModel", f:parsenoop },
+	0x084B: { n:"BrtBeginModelTables", f:parsenoop },
+	0x084C: { n:"BrtEndModelTables", f:parsenoop },
+	0x084D: { n:"BrtModelTable", f:parsenoop },
+	0x084E: { n:"BrtBeginModelRelationships", f:parsenoop },
+	0x084F: { n:"BrtEndModelRelationships", f:parsenoop },
+	0x0850: { n:"BrtModelRelationship", f:parsenoop },
+	0x0851: { n:"BrtBeginECTxtWiz15", f:parsenoop },
+	0x0852: { n:"BrtEndECTxtWiz15", f:parsenoop },
+	0x0853: { n:"BrtBeginECTWFldInfoLst15", f:parsenoop },
+	0x0854: { n:"BrtEndECTWFldInfoLst15", f:parsenoop },
+	0x0855: { n:"BrtBeginECTWFldInfo15", f:parsenoop },
+	0x0856: { n:"BrtFieldListActiveItem", f:parsenoop },
+	0x0857: { n:"BrtPivotCacheIdVersion", f:parsenoop },
+	0x0858: { n:"BrtSXDI15", f:parsenoop },
+	0xFFFF: { n:"", f:parsenoop }
+};
+
+var evert_RE = evert_key(XLSBRecordEnum, 'n');
+
+/* [MS-XLS] 2.3 Record Enumeration */
+var XLSRecordEnum = {
+	0x0003: { n:"BIFF2NUM", f:parse_BIFF2NUM },
+	0x0004: { n:"BIFF2STR", f:parse_BIFF2STR },
+	0x0006: { n:"Formula", f:parse_Formula },
+	0x0009: { n:'BOF', f:parse_BOF },
+	0x000a: { n:'EOF', f:parse_EOF },
+	0x000c: { n:"CalcCount", f:parse_CalcCount },
+	0x000d: { n:"CalcMode", f:parse_CalcMode },
+	0x000e: { n:"CalcPrecision", f:parse_CalcPrecision },
+	0x000f: { n:"CalcRefMode", f:parse_CalcRefMode },
+	0x0010: { n:"CalcDelta", f:parse_CalcDelta },
+	0x0011: { n:"CalcIter", f:parse_CalcIter },
+	0x0012: { n:"Protect", f:parse_Protect },
+	0x0013: { n:"Password", f:parse_Password },
+	0x0014: { n:"Header", f:parse_Header },
+	0x0015: { n:"Footer", f:parse_Footer },
+	0x0017: { n:"ExternSheet", f:parse_ExternSheet },
+	0x0018: { n:"Lbl", f:parse_Lbl },
+	0x0019: { n:"WinProtect", f:parse_WinProtect },
+	0x001a: { n:"VerticalPageBreaks", f:parse_VerticalPageBreaks },
+	0x001b: { n:"HorizontalPageBreaks", f:parse_HorizontalPageBreaks },
+	0x001c: { n:"Note", f:parse_Note },
+	0x001d: { n:"Selection", f:parse_Selection },
+	0x0022: { n:"Date1904", f:parse_Date1904 },
+	0x0023: { n:"ExternName", f:parse_ExternName },
+	0x0026: { n:"LeftMargin", f:parse_LeftMargin },
+	0x0027: { n:"RightMargin", f:parse_RightMargin },
+	0x0028: { n:"TopMargin", f:parse_TopMargin },
+	0x0029: { n:"BottomMargin", f:parse_BottomMargin },
+	0x002a: { n:"PrintRowCol", f:parse_PrintRowCol },
+	0x002b: { n:"PrintGrid", f:parse_PrintGrid },
+	0x002f: { n:"FilePass", f:parse_FilePass },
+	0x0031: { n:"Font", f:parse_Font },
+	0x0033: { n:"PrintSize", f:parse_PrintSize },
+	0x003c: { n:"Continue", f:parse_Continue },
+	0x003d: { n:"Window1", f:parse_Window1 },
+	0x0040: { n:"Backup", f:parse_Backup },
+	0x0041: { n:"Pane", f:parse_Pane },
+	0x0042: { n:'CodePage', f:parse_CodePage },
+	0x004d: { n:"Pls", f:parse_Pls },
+	0x0050: { n:"DCon", f:parse_DCon },
+	0x0051: { n:"DConRef", f:parse_DConRef },
+	0x0052: { n:"DConName", f:parse_DConName },
+	0x0055: { n:"DefColWidth", f:parse_DefColWidth },
+	0x0059: { n:"XCT", f:parse_XCT },
+	0x005a: { n:"CRN", f:parse_CRN },
+	0x005b: { n:"FileSharing", f:parse_FileSharing },
+	0x005c: { n:'WriteAccess', f:parse_WriteAccess },
+	0x005d: { n:"Obj", f:parse_Obj },
+	0x005e: { n:"Uncalced", f:parse_Uncalced },
+	0x005f: { n:"CalcSaveRecalc", f:parse_CalcSaveRecalc },
+	0x0060: { n:"Template", f:parse_Template },
+	0x0061: { n:"Intl", f:parse_Intl },
+	0x0063: { n:"ObjProtect", f:parse_ObjProtect },
+	0x007d: { n:"ColInfo", f:parse_ColInfo },
+	0x0080: { n:"Guts", f:parse_Guts },
+	0x0081: { n:"WsBool", f:parse_WsBool },
+	0x0082: { n:"GridSet", f:parse_GridSet },
+	0x0083: { n:"HCenter", f:parse_HCenter },
+	0x0084: { n:"VCenter", f:parse_VCenter },
+	0x0085: { n:'BoundSheet8', f:parse_BoundSheet8 },
+	0x0086: { n:"WriteProtect", f:parse_WriteProtect },
+	0x008c: { n:"Country", f:parse_Country },
+	0x008d: { n:"HideObj", f:parse_HideObj },
+	0x0090: { n:"Sort", f:parse_Sort },
+	0x0092: { n:"Palette", f:parse_Palette },
+	0x0097: { n:"Sync", f:parse_Sync },
+	0x0098: { n:"LPr", f:parse_LPr },
+	0x0099: { n:"DxGCol", f:parse_DxGCol },
+	0x009a: { n:"FnGroupName", f:parse_FnGroupName },
+	0x009b: { n:"FilterMode", f:parse_FilterMode },
+	0x009c: { n:"BuiltInFnGroupCount", f:parse_BuiltInFnGroupCount },
+	0x009d: { n:"AutoFilterInfo", f:parse_AutoFilterInfo },
+	0x009e: { n:"AutoFilter", f:parse_AutoFilter },
+	0x00a0: { n:"Scl", f:parse_Scl },
+	0x00a1: { n:"Setup", f:parse_Setup },
+	0x00ae: { n:"ScenMan", f:parse_ScenMan },
+	0x00af: { n:"SCENARIO", f:parse_SCENARIO },
+	0x00b0: { n:"SxView", f:parse_SxView },
+	0x00b1: { n:"Sxvd", f:parse_Sxvd },
+	0x00b2: { n:"SXVI", f:parse_SXVI },
+	0x00b4: { n:"SxIvd", f:parse_SxIvd },
+	0x00b5: { n:"SXLI", f:parse_SXLI },
+	0x00b6: { n:"SXPI", f:parse_SXPI },
+	0x00b8: { n:"DocRoute", f:parse_DocRoute },
+	0x00b9: { n:"RecipName", f:parse_RecipName },
+	0x00bd: { n:"MulRk", f:parse_MulRk },
+	0x00be: { n:"MulBlank", f:parse_MulBlank },
+	0x00c1: { n:'Mms', f:parse_Mms },
+	0x00c5: { n:"SXDI", f:parse_SXDI },
+	0x00c6: { n:"SXDB", f:parse_SXDB },
+	0x00c7: { n:"SXFDB", f:parse_SXFDB },
+	0x00c8: { n:"SXDBB", f:parse_SXDBB },
+	0x00c9: { n:"SXNum", f:parse_SXNum },
+	0x00ca: { n:"SxBool", f:parse_SxBool },
+	0x00cb: { n:"SxErr", f:parse_SxErr },
+	0x00cc: { n:"SXInt", f:parse_SXInt },
+	0x00cd: { n:"SXString", f:parse_SXString },
+	0x00ce: { n:"SXDtr", f:parse_SXDtr },
+	0x00cf: { n:"SxNil", f:parse_SxNil },
+	0x00d0: { n:"SXTbl", f:parse_SXTbl },
+	0x00d1: { n:"SXTBRGIITM", f:parse_SXTBRGIITM },
+	0x00d2: { n:"SxTbpg", f:parse_SxTbpg },
+	0x00d3: { n:"ObProj", f:parse_ObProj },
+	0x00d5: { n:"SXStreamID", f:parse_SXStreamID },
+	0x00d7: { n:"DBCell", f:parse_DBCell },
+	0x00d8: { n:"SXRng", f:parse_SXRng },
+	0x00d9: { n:"SxIsxoper", f:parse_SxIsxoper },
+	0x00da: { n:"BookBool", f:parse_BookBool },
+	0x00dc: { n:"DbOrParamQry", f:parse_DbOrParamQry },
+	0x00dd: { n:"ScenarioProtect", f:parse_ScenarioProtect },
+	0x00de: { n:"OleObjectSize", f:parse_OleObjectSize },
+	0x00e0: { n:"XF", f:parse_XF },
+	0x00e1: { n:'InterfaceHdr', f:parse_InterfaceHdr },
+	0x00e2: { n:'InterfaceEnd', f:parse_InterfaceEnd },
+	0x00e3: { n:"SXVS", f:parse_SXVS },
+	0x00e5: { n:"MergeCells", f:parse_MergeCells },
+	0x00e9: { n:"BkHim", f:parse_BkHim },
+	0x00eb: { n:"MsoDrawingGroup", f:parse_MsoDrawingGroup },
+	0x00ec: { n:"MsoDrawing", f:parse_MsoDrawing },
+	0x00ed: { n:"MsoDrawingSelection", f:parse_MsoDrawingSelection },
+	0x00ef: { n:"PhoneticInfo", f:parse_PhoneticInfo },
+	0x00f0: { n:"SxRule", f:parse_SxRule },
+	0x00f1: { n:"SXEx", f:parse_SXEx },
+	0x00f2: { n:"SxFilt", f:parse_SxFilt },
+	0x00f4: { n:"SxDXF", f:parse_SxDXF },
+	0x00f5: { n:"SxItm", f:parse_SxItm },
+	0x00f6: { n:"SxName", f:parse_SxName },
+	0x00f7: { n:"SxSelect", f:parse_SxSelect },
+	0x00f8: { n:"SXPair", f:parse_SXPair },
+	0x00f9: { n:"SxFmla", f:parse_SxFmla },
+	0x00fb: { n:"SxFormat", f:parse_SxFormat },
+	0x00fc: { n:"SST", f:parse_SST },
+	0x00fd: { n:"LabelSst", f:parse_LabelSst },
+	0x00ff: { n:"ExtSST", f:parse_ExtSST },
+	0x0100: { n:"SXVDEx", f:parse_SXVDEx },
+	0x0103: { n:"SXFormula", f:parse_SXFormula },
+	0x0122: { n:"SXDBEx", f:parse_SXDBEx },
+	0x0137: { n:"RRDInsDel", f:parse_RRDInsDel },
+	0x0138: { n:"RRDHead", f:parse_RRDHead },
+	0x013b: { n:"RRDChgCell", f:parse_RRDChgCell },
+	0x013d: { n:"RRTabId", f:parse_RRTabId },
+	0x013e: { n:"RRDRenSheet", f:parse_RRDRenSheet },
+	0x013f: { n:"RRSort", f:parse_RRSort },
+	0x0140: { n:"RRDMove", f:parse_RRDMove },
+	0x014a: { n:"RRFormat", f:parse_RRFormat },
+	0x014b: { n:"RRAutoFmt", f:parse_RRAutoFmt },
+	0x014d: { n:"RRInsertSh", f:parse_RRInsertSh },
+	0x014e: { n:"RRDMoveBegin", f:parse_RRDMoveBegin },
+	0x014f: { n:"RRDMoveEnd", f:parse_RRDMoveEnd },
+	0x0150: { n:"RRDInsDelBegin", f:parse_RRDInsDelBegin },
+	0x0151: { n:"RRDInsDelEnd", f:parse_RRDInsDelEnd },
+	0x0152: { n:"RRDConflict", f:parse_RRDConflict },
+	0x0153: { n:"RRDDefName", f:parse_RRDDefName },
+	0x0154: { n:"RRDRstEtxp", f:parse_RRDRstEtxp },
+	0x015f: { n:"LRng", f:parse_LRng },
+	0x0160: { n:"UsesELFs", f:parse_UsesELFs },
+	0x0161: { n:"DSF", f:parse_DSF },
+	0x0191: { n:"CUsr", f:parse_CUsr },
+	0x0192: { n:"CbUsr", f:parse_CbUsr },
+	0x0193: { n:"UsrInfo", f:parse_UsrInfo },
+	0x0194: { n:"UsrExcl", f:parse_UsrExcl },
+	0x0195: { n:"FileLock", f:parse_FileLock },
+	0x0196: { n:"RRDInfo", f:parse_RRDInfo },
+	0x0197: { n:"BCUsrs", f:parse_BCUsrs },
+	0x0198: { n:"UsrChk", f:parse_UsrChk },
+	0x01a9: { n:"UserBView", f:parse_UserBView },
+	0x01aa: { n:"UserSViewBegin", f:parse_UserSViewBegin },
+	0x01ab: { n:"UserSViewEnd", f:parse_UserSViewEnd },
+	0x01ac: { n:"RRDUserView", f:parse_RRDUserView },
+	0x01ad: { n:"Qsi", f:parse_Qsi },
+	0x01ae: { n:"SupBook", f:parse_SupBook },
+	0x01af: { n:"Prot4Rev", f:parse_Prot4Rev },
+	0x01b0: { n:"CondFmt", f:parse_CondFmt },
+	0x01b1: { n:"CF", f:parse_CF },
+	0x01b2: { n:"DVal", f:parse_DVal },
+	0x01b5: { n:"DConBin", f:parse_DConBin },
+	0x01b6: { n:"TxO", f:parse_TxO },
+	0x01b7: { n:"RefreshAll", f:parse_RefreshAll },
+	0x01b8: { n:"HLink", f:parse_HLink },
+	0x01b9: { n:"Lel", f:parse_Lel },
+	0x01ba: { n:"CodeName", f:parse_XLSCodeName },
+	0x01bb: { n:"SXFDBType", f:parse_SXFDBType },
+	0x01bc: { n:"Prot4RevPass", f:parse_Prot4RevPass },
+	0x01bd: { n:"ObNoMacros", f:parse_ObNoMacros },
+	0x01be: { n:"Dv", f:parse_Dv },
+	0x01c0: { n:"Excel9File", f:parse_Excel9File },
+	0x01c1: { n:"RecalcId", f:parse_RecalcId, r:2},
+	0x01c2: { n:"EntExU2", f:parse_EntExU2 },
+	0x0200: { n:"Dimensions", f:parse_Dimensions },
+	0x0201: { n:"Blank", f:parse_Blank },
+	0x0203: { n:"Number", f:parse_Number },
+	0x0204: { n:"Label", f:parse_Label },
+	0x0205: { n:"BoolErr", f:parse_BoolErr },
+	0x0207: { n:"String", f:parse_String },
+	0x0208: { n:'Row', f:parse_Row },
+	0x020b: { n:"Index", f:parse_Index },
+	0x0221: { n:"Array", f:parse_Array },
+	0x0225: { n:"DefaultRowHeight", f:parse_DefaultRowHeight },
+	0x0236: { n:"Table", f:parse_Table },
+	0x023e: { n:"Window2", f:parse_Window2 },
+	0x027e: { n:"RK", f:parse_RK },
+	0x0293: { n:"Style", f:parse_Style },
+	0x0418: { n:"BigName", f:parse_BigName },
+	0x041e: { n:"Format", f:parse_Format },
+	0x043c: { n:"ContinueBigName", f:parse_ContinueBigName },
+	0x04bc: { n:"ShrFmla", f:parse_ShrFmla },
+	0x0800: { n:"HLinkTooltip", f:parse_HLinkTooltip },
+	0x0801: { n:"WebPub", f:parse_WebPub },
+	0x0802: { n:"QsiSXTag", f:parse_QsiSXTag },
+	0x0803: { n:"DBQueryExt", f:parse_DBQueryExt },
+	0x0804: { n:"ExtString", f:parse_ExtString },
+	0x0805: { n:"TxtQry", f:parse_TxtQry },
+	0x0806: { n:"Qsir", f:parse_Qsir },
+	0x0807: { n:"Qsif", f:parse_Qsif },
+	0x0808: { n:"RRDTQSIF", f:parse_RRDTQSIF },
+	0x0809: { n:'BOF', f:parse_BOF },
+	0x080a: { n:"OleDbConn", f:parse_OleDbConn },
+	0x080b: { n:"WOpt", f:parse_WOpt },
+	0x080c: { n:"SXViewEx", f:parse_SXViewEx },
+	0x080d: { n:"SXTH", f:parse_SXTH },
+	0x080e: { n:"SXPIEx", f:parse_SXPIEx },
+	0x080f: { n:"SXVDTEx", f:parse_SXVDTEx },
+	0x0810: { n:"SXViewEx9", f:parse_SXViewEx9 },
+	0x0812: { n:"ContinueFrt", f:parse_ContinueFrt },
+	0x0813: { n:"RealTimeData", f:parse_RealTimeData },
+	0x0850: { n:"ChartFrtInfo", f:parse_ChartFrtInfo },
+	0x0851: { n:"FrtWrapper", f:parse_FrtWrapper },
+	0x0852: { n:"StartBlock", f:parse_StartBlock },
+	0x0853: { n:"EndBlock", f:parse_EndBlock },
+	0x0854: { n:"StartObject", f:parse_StartObject },
+	0x0855: { n:"EndObject", f:parse_EndObject },
+	0x0856: { n:"CatLab", f:parse_CatLab },
+	0x0857: { n:"YMult", f:parse_YMult },
+	0x0858: { n:"SXViewLink", f:parse_SXViewLink },
+	0x0859: { n:"PivotChartBits", f:parse_PivotChartBits },
+	0x085a: { n:"FrtFontList", f:parse_FrtFontList },
+	0x0862: { n:"SheetExt", f:parse_SheetExt },
+	0x0863: { n:"BookExt", f:parse_BookExt, r:12},
+	0x0864: { n:"SXAddl", f:parse_SXAddl },
+	0x0865: { n:"CrErr", f:parse_CrErr },
+	0x0866: { n:"HFPicture", f:parse_HFPicture },
+	0x0867: { n:'FeatHdr', f:parse_FeatHdr },
+	0x0868: { n:"Feat", f:parse_Feat },
+	0x086a: { n:"DataLabExt", f:parse_DataLabExt },
+	0x086b: { n:"DataLabExtContents", f:parse_DataLabExtContents },
+	0x086c: { n:"CellWatch", f:parse_CellWatch },
+	0x0871: { n:"FeatHdr11", f:parse_FeatHdr11 },
+	0x0872: { n:"Feature11", f:parse_Feature11 },
+	0x0874: { n:"DropDownObjIds", f:parse_DropDownObjIds },
+	0x0875: { n:"ContinueFrt11", f:parse_ContinueFrt11 },
+	0x0876: { n:"DConn", f:parse_DConn },
+	0x0877: { n:"List12", f:parse_List12 },
+	0x0878: { n:"Feature12", f:parse_Feature12 },
+	0x0879: { n:"CondFmt12", f:parse_CondFmt12 },
+	0x087a: { n:"CF12", f:parse_CF12 },
+	0x087b: { n:"CFEx", f:parse_CFEx },
+	0x087c: { n:"XFCRC", f:parse_XFCRC, r:12 },
+	0x087d: { n:"XFExt", f:parse_XFExt, r:12 },
+	0x087e: { n:"AutoFilter12", f:parse_AutoFilter12 },
+	0x087f: { n:"ContinueFrt12", f:parse_ContinueFrt12 },
+	0x0884: { n:"MDTInfo", f:parse_MDTInfo },
+	0x0885: { n:"MDXStr", f:parse_MDXStr },
+	0x0886: { n:"MDXTuple", f:parse_MDXTuple },
+	0x0887: { n:"MDXSet", f:parse_MDXSet },
+	0x0888: { n:"MDXProp", f:parse_MDXProp },
+	0x0889: { n:"MDXKPI", f:parse_MDXKPI },
+	0x088a: { n:"MDB", f:parse_MDB },
+	0x088b: { n:"PLV", f:parse_PLV },
+	0x088c: { n:"Compat12", f:parse_Compat12, r:12 },
+	0x088d: { n:"DXF", f:parse_DXF },
+	0x088e: { n:"TableStyles", f:parse_TableStyles, r:12 },
+	0x088f: { n:"TableStyle", f:parse_TableStyle },
+	0x0890: { n:"TableStyleElement", f:parse_TableStyleElement },
+	0x0892: { n:"StyleExt", f:parse_StyleExt },
+	0x0893: { n:"NamePublish", f:parse_NamePublish },
+	0x0894: { n:"NameCmt", f:parse_NameCmt },
+	0x0895: { n:"SortData", f:parse_SortData },
+	0x0896: { n:"Theme", f:parse_Theme, r:12 },
+	0x0897: { n:"GUIDTypeLib", f:parse_GUIDTypeLib },
+	0x0898: { n:"FnGrp12", f:parse_FnGrp12 },
+	0x0899: { n:"NameFnGrp12", f:parse_NameFnGrp12 },
+	0x089a: { n:"MTRSettings", f:parse_MTRSettings, r:12 },
+	0x089b: { n:"CompressPictures", f:parse_CompressPictures },
+	0x089c: { n:"HeaderFooter", f:parse_HeaderFooter },
+	0x089d: { n:"CrtLayout12", f:parse_CrtLayout12 },
+	0x089e: { n:"CrtMlFrt", f:parse_CrtMlFrt },
+	0x089f: { n:"CrtMlFrtContinue", f:parse_CrtMlFrtContinue },
+	0x08a3: { n:"ForceFullCalculation", f:parse_ForceFullCalculation },
+	0x08a4: { n:"ShapePropsStream", f:parse_ShapePropsStream },
+	0x08a5: { n:"TextPropsStream", f:parse_TextPropsStream },
+	0x08a6: { n:"RichTextStream", f:parse_RichTextStream },
+	0x08a7: { n:"CrtLayout12A", f:parse_CrtLayout12A },
+	0x1001: { n:"Units", f:parse_Units },
+	0x1002: { n:"Chart", f:parse_Chart },
+	0x1003: { n:"Series", f:parse_Series },
+	0x1006: { n:"DataFormat", f:parse_DataFormat },
+	0x1007: { n:"LineFormat", f:parse_LineFormat },
+	0x1009: { n:"MarkerFormat", f:parse_MarkerFormat },
+	0x100a: { n:"AreaFormat", f:parse_AreaFormat },
+	0x100b: { n:"PieFormat", f:parse_PieFormat },
+	0x100c: { n:"AttachedLabel", f:parse_AttachedLabel },
+	0x100d: { n:"SeriesText", f:parse_SeriesText },
+	0x1014: { n:"ChartFormat", f:parse_ChartFormat },
+	0x1015: { n:"Legend", f:parse_Legend },
+	0x1016: { n:"SeriesList", f:parse_SeriesList },
+	0x1017: { n:"Bar", f:parse_Bar },
+	0x1018: { n:"Line", f:parse_Line },
+	0x1019: { n:"Pie", f:parse_Pie },
+	0x101a: { n:"Area", f:parse_Area },
+	0x101b: { n:"Scatter", f:parse_Scatter },
+	0x101c: { n:"CrtLine", f:parse_CrtLine },
+	0x101d: { n:"Axis", f:parse_Axis },
+	0x101e: { n:"Tick", f:parse_Tick },
+	0x101f: { n:"ValueRange", f:parse_ValueRange },
+	0x1020: { n:"CatSerRange", f:parse_CatSerRange },
+	0x1021: { n:"AxisLine", f:parse_AxisLine },
+	0x1022: { n:"CrtLink", f:parse_CrtLink },
+	0x1024: { n:"DefaultText", f:parse_DefaultText },
+	0x1025: { n:"Text", f:parse_Text },
+	0x1026: { n:"FontX", f:parse_FontX },
+	0x1027: { n:"ObjectLink", f:parse_ObjectLink },
+	0x1032: { n:"Frame", f:parse_Frame },
+	0x1033: { n:"Begin", f:parse_Begin },
+	0x1034: { n:"End", f:parse_End },
+	0x1035: { n:"PlotArea", f:parse_PlotArea },
+	0x103a: { n:"Chart3d", f:parse_Chart3d },
+	0x103c: { n:"PicF", f:parse_PicF },
+	0x103d: { n:"DropBar", f:parse_DropBar },
+	0x103e: { n:"Radar", f:parse_Radar },
+	0x103f: { n:"Surf", f:parse_Surf },
+	0x1040: { n:"RadarArea", f:parse_RadarArea },
+	0x1041: { n:"AxisParent", f:parse_AxisParent },
+	0x1043: { n:"LegendException", f:parse_LegendException },
+	0x1044: { n:"ShtProps", f:parse_ShtProps },
+	0x1045: { n:"SerToCrt", f:parse_SerToCrt },
+	0x1046: { n:"AxesUsed", f:parse_AxesUsed },
+	0x1048: { n:"SBaseRef", f:parse_SBaseRef },
+	0x104a: { n:"SerParent", f:parse_SerParent },
+	0x104b: { n:"SerAuxTrend", f:parse_SerAuxTrend },
+	0x104e: { n:"IFmtRecord", f:parse_IFmtRecord },
+	0x104f: { n:"Pos", f:parse_Pos },
+	0x1050: { n:"AlRuns", f:parse_AlRuns },
+	0x1051: { n:"BRAI", f:parse_BRAI },
+	0x105b: { n:"SerAuxErrBar", f:parse_SerAuxErrBar },
+	0x105c: { n:"ClrtClient", f:parse_ClrtClient },
+	0x105d: { n:"SerFmt", f:parse_SerFmt },
+	0x105f: { n:"Chart3DBarShape", f:parse_Chart3DBarShape },
+	0x1060: { n:"Fbi", f:parse_Fbi },
+	0x1061: { n:"BopPop", f:parse_BopPop },
+	0x1062: { n:"AxcExt", f:parse_AxcExt },
+	0x1063: { n:"Dat", f:parse_Dat },
+	0x1064: { n:"PlotGrowth", f:parse_PlotGrowth },
+	0x1065: { n:"SIIndex", f:parse_SIIndex },
+	0x1066: { n:"GelFrame", f:parse_GelFrame },
+	0x1067: { n:"BopPopCustom", f:parse_BopPopCustom },
+	0x1068: { n:"Fbi2", f:parse_Fbi2 },
+
+	/* These are specified in an older version of the spec */
+	0x0016: { n:"ExternCount", f:parsenoop },
+	0x007e: { n:"RK", f:parsenoop }, /* Not necessarily same as 0x027e */
+	0x007f: { n:"ImData", f:parsenoop },
+	0x0087: { n:"Addin", f:parsenoop },
+	0x0088: { n:"Edg", f:parsenoop },
+	0x0089: { n:"Pub", f:parsenoop },
+	0x0091: { n:"Sub", f:parsenoop },
+	0x0094: { n:"LHRecord", f:parsenoop },
+	0x0095: { n:"LHNGraph", f:parsenoop },
+	0x0096: { n:"Sound", f:parsenoop },
+	0x00a9: { n:"CoordList", f:parsenoop },
+	0x00ab: { n:"GCW", f:parsenoop },
+	0x00bc: { n:"ShrFmla", f:parsenoop }, /* Not necessarily same as 0x04bc */
+	0x00c2: { n:"AddMenu", f:parsenoop },
+	0x00c3: { n:"DelMenu", f:parsenoop },
+	0x00d6: { n:"RString", f:parsenoop },
+	0x00df: { n:"UDDesc", f:parsenoop },
+	0x00ea: { n:"TabIdConf", f:parsenoop },
+	0x0162: { n:"XL5Modify", f:parsenoop },
+	0x01a5: { n:"FileSharing2", f:parsenoop },
+	0x0218: { n:"Name", f:parsenoop },
+	0x0223: { n:"ExternName", f:parse_ExternName },
+	0x0231: { n:"Font", f:parsenoop },
+	0x0406: { n:"Formula", f:parse_Formula },
+	0x086d: { n:"FeatInfo", f:parsenoop },
+	0x0873: { n:"FeatInfo11", f:parsenoop },
+	0x0881: { n:"SXAddl12", f:parsenoop },
+	0x08c0: { n:"AutoWebPub", f:parsenoop },
+	0x08c1: { n:"ListObj", f:parsenoop },
+	0x08c2: { n:"ListField", f:parsenoop },
+	0x08c3: { n:"ListDV", f:parsenoop },
+	0x08c4: { n:"ListCondFmt", f:parsenoop },
+	0x08c5: { n:"ListCF", f:parsenoop },
+	0x08c6: { n:"FMQry", f:parsenoop },
+	0x08c7: { n:"FMSQry", f:parsenoop },
+	0x08c8: { n:"PLV", f:parsenoop }, /* supposedly PLV for Excel 11 */
+	0x08c9: { n:"LnExt", f:parsenoop },
+	0x08ca: { n:"MkrExt", f:parsenoop },
+	0x08cb: { n:"CrtCoopt", f:parsenoop },
+
+	0x0000: {}
+};
+
+
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/83_parseods.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/83_parseods.js
new file mode 100644
index 0000000..cc2c71c
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/83_parseods.js
@@ -0,0 +1,6 @@
+/* Helper function to call out to ODS parser */
+function parse_ods(zip, opts) {
+	if(typeof module !== "undefined" && typeof require !== 'undefined' && typeof ODS === 'undefined') ODS = require('./od' + 's');
+	if(typeof ODS === 'undefined' || !ODS.parse_ods) throw new Error("Unsupported ODS");
+	return ODS.parse_ods(zip, opts);
+}
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/84_defaults.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/84_defaults.js
new file mode 100644
index 0000000..4b811ba
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/84_defaults.js
@@ -0,0 +1,40 @@
+function fix_opts_func(defaults) {
+	return function fix_opts(opts) {
+		for(var i = 0; i != defaults.length; ++i) {
+			var d = defaults[i];
+			if(opts[d[0]] === undefined) opts[d[0]] = d[1];
+			if(d[2] === 'n') opts[d[0]] = Number(opts[d[0]]);
+		}
+	};
+}
+
+var fix_read_opts = fix_opts_func([
+	['cellNF', false], /* emit cell number format string as .z */
+	['cellHTML', true], /* emit html string as .h */
+	['cellFormula', true], /* emit formulae as .f */
+	['cellStyles', false], /* emits style/theme as .s */
+	['cellDates', false], /* emit date cells with type `d` */
+
+	['sheetStubs', false], /* emit empty cells */
+	['sheetRows', 0, 'n'], /* read n rows (0 = read all rows) */
+
+	['bookDeps', false], /* parse calculation chains */
+	['bookSheets', false], /* only try to get sheet names (no Sheets) */
+	['bookProps', false], /* only try to get properties (no Sheets) */
+	['bookFiles', false], /* include raw file structure (keys, files, cfb) */
+	['bookVBA', false], /* include vba raw data (vbaraw) */
+
+	['password',''], /* password */
+	['WTF', false] /* WTF mode (throws errors) */
+]);
+
+
+var fix_write_opts = fix_opts_func([
+	['cellDates', false], /* write date cells with type `d` */
+
+	['bookSST', false], /* Generate Shared String Table */
+
+	['bookType', 'xlsx'], /* Type of workbook (xlsx/m/b) */
+
+	['WTF', false] /* WTF mode (throws errors) */
+]);
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/85_parsezip.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/85_parsezip.js
new file mode 100644
index 0000000..47258e2
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/85_parsezip.js
@@ -0,0 +1,142 @@
+function safe_parse_wbrels(wbrels, sheets) {
+	if(!wbrels) return 0;
+	try {
+		wbrels = sheets.map(function pwbr(w) { return [w.name, wbrels['!id'][w.id].Target]; });
+	} catch(e) { return null; }
+	return !wbrels || wbrels.length === 0 ? null : wbrels;
+}
+
+function safe_parse_ws(zip, path, relsPath, sheet, sheetRels, sheets, opts) {
+	try {
+		sheetRels[sheet]=parse_rels(getzipdata(zip, relsPath, true), path);
+		sheets[sheet]=parse_ws(getzipdata(zip, path),path,opts,sheetRels[sheet]);
+	} catch(e) { if(opts.WTF) throw e; }
+}
+
+var nodirs = function nodirs(x){return x.substr(-1) != '/';};
+function parse_zip(zip, opts) {
+	make_ssf(SSF);
+	opts = opts || {};
+	fix_read_opts(opts);
+	reset_cp();
+
+	/* OpenDocument Part 3 Section 2.2.1 OpenDocument Package */
+	if(safegetzipfile(zip, 'META-INF/manifest.xml')) return parse_ods(zip, opts);
+
+	var entries = keys(zip.files).filter(nodirs).sort();
+	var dir = parse_ct(getzipdata(zip, '[Content_Types].xml'), opts);
+	var xlsb = false;
+	var sheets, binname;
+	if(dir.workbooks.length === 0) {
+		binname = "xl/workbook.xml";
+		if(getzipdata(zip,binname, true)) dir.workbooks.push(binname);
+	}
+	if(dir.workbooks.length === 0) {
+		binname = "xl/workbook.bin";
+		if(!getzipfile(zip,binname,true)) throw new Error("Could not find workbook");
+		dir.workbooks.push(binname);
+		xlsb = true;
+	}
+	if(dir.workbooks[0].substr(-3) == "bin") xlsb = true;
+	if(xlsb) set_cp(1200);
+
+	if(!opts.bookSheets && !opts.bookProps) {
+		strs = [];
+		if(dir.sst) strs=parse_sst(getzipdata(zip, dir.sst.replace(/^\//,'')), dir.sst, opts);
+
+    // parse themes before styles so that we can reliably decode theme/tint into rgb when parsing styles
+    themes = {};
+    if(opts.cellStyles && dir.themes.length) themes = parse_theme(getzipdata(zip, dir.themes[0].replace(/^\//,''), true),dir.themes[0], opts);
+
+    styles = {};
+		if(dir.style) styles = parse_sty(getzipdata(zip, dir.style.replace(/^\//,'')),dir.style, opts);
+
+	}
+
+	var wb = parse_wb(getzipdata(zip, dir.workbooks[0].replace(/^\//,'')), dir.workbooks[0], opts);
+
+	var props = {}, propdata = "";
+
+	if(dir.coreprops.length !== 0) {
+		propdata = getzipdata(zip, dir.coreprops[0].replace(/^\//,''), true);
+		if(propdata) props = parse_core_props(propdata);
+		if(dir.extprops.length !== 0) {
+			propdata = getzipdata(zip, dir.extprops[0].replace(/^\//,''), true);
+			if(propdata) parse_ext_props(propdata, props);
+		}
+	}
+
+	var custprops = {};
+	if(!opts.bookSheets || opts.bookProps) {
+		if (dir.custprops.length !== 0) {
+			propdata = getzipdata(zip, dir.custprops[0].replace(/^\//,''), true);
+			if(propdata) custprops = parse_cust_props(propdata, opts);
+		}
+	}
+
+	var out = {};
+	if(opts.bookSheets || opts.bookProps) {
+		if(props.Worksheets && props.SheetNames.length > 0) sheets=props.SheetNames;
+		else if(wb.Sheets) sheets = wb.Sheets.map(function pluck(x){ return x.name; });
+		if(opts.bookProps) { out.Props = props; out.Custprops = custprops; }
+		if(typeof sheets !== 'undefined') out.SheetNames = sheets;
+		if(opts.bookSheets ? out.SheetNames : opts.bookProps) return out;
+	}
+	sheets = {};
+
+	var deps = {};
+	if(opts.bookDeps && dir.calcchain) deps=parse_cc(getzipdata(zip, dir.calcchain.replace(/^\//,'')),dir.calcchain,opts);
+
+	var i=0;
+	var sheetRels = {};
+	var path, relsPath;
+	if(!props.Worksheets) {
+		var wbsheets = wb.Sheets;
+		props.Worksheets = wbsheets.length;
+		props.SheetNames = [];
+		for(var j = 0; j != wbsheets.length; ++j) {
+			props.SheetNames[j] = wbsheets[j].name;
+		}
+	}
+
+	var wbext = xlsb ? "bin" : "xml";
+	var wbrelsfile = 'xl/_rels/workbook.' + wbext + '.rels';
+	var wbrels = parse_rels(getzipdata(zip, wbrelsfile, true), wbrelsfile);
+	if(wbrels) wbrels = safe_parse_wbrels(wbrels, wb.Sheets);
+	/* Numbers iOS hack */
+	var nmode = (getzipdata(zip,"xl/worksheets/sheet.xml",true))?1:0;
+	for(i = 0; i != props.Worksheets; ++i) {
+		if(wbrels) path = 'xl/' + (wbrels[i][1]).replace(/[\/]?xl\//, "");
+		else {
+			path = 'xl/worksheets/sheet'+(i+1-nmode)+"." + wbext;
+			path = path.replace(/sheet0\./,"sheet.");
+		}
+		relsPath = path.replace(/^(.*)(\/)([^\/]*)$/, "$1/_rels/$3.rels");
+		safe_parse_ws(zip, path, relsPath, props.SheetNames[i], sheetRels, sheets, opts);
+	}
+
+	if(dir.comments) parse_comments(zip, dir.comments, sheets, sheetRels, opts);
+
+	out = {
+		Directory: dir,
+		Workbook: wb,
+		Props: props,
+		Custprops: custprops,
+		Deps: deps,
+		Sheets: sheets,
+		SheetNames: props.SheetNames,
+		Strings: strs,
+		Styles: styles,
+		Themes: themes,
+		SSF: SSF.get_table()
+	};
+	if(opts.bookFiles) {
+		out.keys = entries;
+		out.files = zip.files;
+	}
+	if(opts.bookVBA) {
+		if(dir.vba.length > 0) out.vbaraw = getzipdata(zip,dir.vba[0],true);
+		else if(dir.defaults.bin === 'application/vnd.ms-office.vbaProject') out.vbaraw = getzipdata(zip,'xl/vbaProject.bin',true);
+	}
+	return out;
+}
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/86_writezip.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/86_writezip.js
new file mode 100644
index 0000000..a2f2840
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/86_writezip.js
@@ -0,0 +1,90 @@
+function add_rels(rels, rId, f, type, relobj) {
+	if(!relobj) relobj = {};
+	if(!rels['!id']) rels['!id'] = {};
+	relobj.Id = 'rId' + rId;
+	relobj.Type = type;
+	relobj.Target = f;
+	if(rels['!id'][relobj.Id]) throw new Error("Cannot rewrite rId " + rId);
+	rels['!id'][relobj.Id] = relobj;
+	rels[('/' + relobj.Target).replace("//","/")] = relobj;
+}
+
+function write_zip(wb, opts) {
+	if(wb && !wb.SSF) {
+		wb.SSF = SSF.get_table();
+	}
+	if(wb && wb.SSF) {
+		make_ssf(SSF); SSF.load_table(wb.SSF);
+		opts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;
+	}
+	opts.rels = {}; opts.wbrels = {};
+	opts.Strings = []; opts.Strings.Count = 0; opts.Strings.Unique = 0;
+	var wbext = opts.bookType == "xlsb" ? "bin" : "xml";
+	var ct = { workbooks: [], sheets: [], calcchains: [], themes: [], styles: [],
+		coreprops: [], extprops: [], custprops: [], strs:[], comments: [], vba: [],
+		TODO:[], rels:[], xmlns: "" };
+	fix_write_opts(opts = opts || {});
+	var zip = new jszip();
+	var f = "", rId = 0;
+
+	opts.cellXfs = [];
+	get_cell_style(opts.cellXfs, {}, {revssf:{"General":0}});
+
+	f = "docProps/core.xml";
+	zip.file(f, write_core_props(wb.Props, opts));
+	ct.coreprops.push(f);
+	add_rels(opts.rels, 2, f, RELS.CORE_PROPS);
+
+	f = "docProps/app.xml";
+	if(!wb.Props) wb.Props = {};
+	wb.Props.SheetNames = wb.SheetNames;
+	wb.Props.Worksheets = wb.SheetNames.length;
+	zip.file(f, write_ext_props(wb.Props, opts));
+	ct.extprops.push(f);
+	add_rels(opts.rels, 3, f, RELS.EXT_PROPS);
+
+	if(wb.Custprops !== wb.Props && keys(wb.Custprops||{}).length > 0) {
+		f = "docProps/custom.xml";
+		zip.file(f, write_cust_props(wb.Custprops, opts));
+		ct.custprops.push(f);
+		add_rels(opts.rels, 4, f, RELS.CUST_PROPS);
+	}
+
+	f = "xl/workbook." + wbext;
+	zip.file(f, write_wb(wb, f, opts));
+	ct.workbooks.push(f);
+	add_rels(opts.rels, 1, f, RELS.WB);
+
+	for(rId=1;rId <= wb.SheetNames.length; ++rId) {
+		f = "xl/worksheets/sheet" + rId + "." + wbext;
+		zip.file(f, write_ws(rId-1, f, opts, wb));
+		ct.sheets.push(f);
+		add_rels(opts.wbrels, rId, "worksheets/sheet" + rId + "." + wbext, RELS.WS);
+	}
+
+	if(opts.Strings != null && opts.Strings.length > 0) {
+		f = "xl/sharedStrings." + wbext;
+		zip.file(f, write_sst(opts.Strings, f, opts));
+		ct.strs.push(f);
+		add_rels(opts.wbrels, ++rId, "sharedStrings." + wbext, RELS.SST);
+	}
+
+	/* TODO: something more intelligent with themes */
+
+	f = "xl/theme/theme1.xml";
+  zip.file(f, write_theme(opts));
+	ct.themes.push(f);
+	add_rels(opts.wbrels, ++rId, "theme/theme1.xml", RELS.THEME);
+
+	/* TODO: something more intelligent with styles */
+
+	f = "xl/styles." + wbext;
+	zip.file(f, write_sty(wb, f, opts));
+	ct.styles.push(f);
+	add_rels(opts.wbrels, ++rId, "styles." + wbext, RELS.STY);
+
+	zip.file("[Content_Types].xml", write_ct(ct, opts));
+	zip.file('_rels/.rels', write_rels(opts.rels));
+	zip.file('xl/_rels/workbook.' + wbext + '.rels', write_rels(opts.wbrels));
+	return zip;
+}
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/87_read.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/87_read.js
new file mode 100644
index 0000000..251a2fc
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/87_read.js
@@ -0,0 +1,48 @@
+function firstbyte(f,o) {
+	switch((o||{}).type || "base64") {
+		case 'buffer': return f[0];
+		case 'base64': return Base64.decode(f.substr(0,12)).charCodeAt(0);
+		case 'binary': return f.charCodeAt(0);
+		case 'array': return f[0];
+		default: throw new Error("Unrecognized type " + o.type);
+	}
+}
+
+function read_zip(data, opts) {
+	var zip, d = data;
+	var o = opts||{};
+	if(!o.type) o.type = (has_buf && Buffer.isBuffer(data)) ? "buffer" : "base64";
+	switch(o.type) {
+		case "base64": zip = new jszip(d, { base64:true }); break;
+		case "binary": case "array": zip = new jszip(d, { base64:false }); break;
+		case "buffer": zip = new jszip(d); break;
+		case "file": zip=new jszip(d=_fs.readFileSync(data)); break;
+		default: throw new Error("Unrecognized type " + o.type);
+	}
+	return parse_zip(zip, o);
+}
+
+function readSync(data, opts) {
+	var zip, d = data, isfile = false, n;
+	var o = opts||{};
+	if(!o.type) o.type = (has_buf && Buffer.isBuffer(data)) ? "buffer" : "base64";
+	if(o.type == "file") { isfile = true; o.type = "buffer"; d = _fs.readFileSync(data); }
+	switch((n = firstbyte(d, o))) {
+		case 0xD0:
+			if(isfile) o.type = "file";
+			return parse_xlscfb(CFB.read(data, o), o);
+		case 0x09: return parse_xlscfb(s2a(o.type === 'base64' ? Base64.decode(data) : data), o);
+		case 0x3C: return parse_xlml(d, o);
+		case 0x50:
+			if(isfile) o.type = "file";
+			return read_zip(data, opts);
+		default: throw new Error("Unsupported file " + n);
+	}
+}
+
+function readFileSync(data, opts) {
+	var o = opts||{}; o.type = 'file'
+  var wb = readSync(data, o);
+  wb.FILENAME = data;
+	return wb;
+}
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/88_write.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/88_write.js
new file mode 100644
index 0000000..d0a2ec1
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/88_write.js
@@ -0,0 +1,37 @@
+function write_zip_type(wb, opts) {
+	var o = opts||{};
+  style_builder  = new StyleBuilder(opts);
+
+  var z = write_zip(wb, o);
+	switch(o.type) {
+		case "base64": return z.generate({type:"base64"});
+		case "binary": return z.generate({type:"string"});
+		case "buffer": return z.generate({type:"nodebuffer"});
+		case "file": return _fs.writeFileSync(o.file, z.generate({type:"nodebuffer"}));
+		default: throw new Error("Unrecognized type " + o.type);
+	}
+}
+
+function writeSync(wb, opts) {
+	var o = opts||{};
+	switch(o.bookType) {
+		case 'xml': return write_xlml(wb, o);
+		default: return write_zip_type(wb, o);
+	}
+}
+
+function writeFileSync(wb, filename, opts) {
+	var o = opts||{}; o.type = 'file';
+
+	o.file = filename;
+	switch(o.file.substr(-5).toLowerCase()) {
+		case '.xlsx': o.bookType = 'xlsx'; break;
+		case '.xlsm': o.bookType = 'xlsm'; break;
+		case '.xlsb': o.bookType = 'xlsb'; break;
+	default: switch(o.file.substr(-4).toLowerCase()) {
+		case '.xls': o.bookType = 'xls'; break;
+		case '.xml': o.bookType = 'xml'; break;
+	}}
+	return writeSync(wb, o);
+}
+
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/90_utils.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/90_utils.js
new file mode 100644
index 0000000..2e706da
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/90_utils.js
@@ -0,0 +1,207 @@
+function decode_row(rowstr) { return parseInt(unfix_row(rowstr),10) - 1; }
+function encode_row(row) { return "" + (row + 1); }
+function fix_row(cstr) { return cstr.replace(/([A-Z]|^)(\d+)$/,"$1$$$2"); }
+function unfix_row(cstr) { return cstr.replace(/\$(\d+)$/,"$1"); }
+
+function decode_col(colstr) { var c = unfix_col(colstr), d = 0, i = 0; for(; i !== c.length; ++i) d = 26*d + c.charCodeAt(i) - 64; return d - 1; }
+function encode_col(col) { var s=""; for(++col; col; col=Math.floor((col-1)/26)) s = String.fromCharCode(((col-1)%26) + 65) + s; return s; }
+function fix_col(cstr) { return cstr.replace(/^([A-Z])/,"$$$1"); }
+function unfix_col(cstr) { return cstr.replace(/^\$([A-Z])/,"$1"); }
+
+function split_cell(cstr) { return cstr.replace(/(\$?[A-Z]*)(\$?\d*)/,"$1,$2").split(","); }
+function decode_cell(cstr) { var splt = split_cell(cstr); return { c:decode_col(splt[0]), r:decode_row(splt[1]) }; }
+function encode_cell(cell) { return encode_col(cell.c) + encode_row(cell.r); }
+function fix_cell(cstr) { return fix_col(fix_row(cstr)); }
+function unfix_cell(cstr) { return unfix_col(unfix_row(cstr)); }
+function decode_range(range) { var x =range.split(":").map(decode_cell); return {s:x[0],e:x[x.length-1]}; }
+function encode_range(cs,ce) {
+	if(ce === undefined || typeof ce === 'number') return encode_range(cs.s, cs.e);
+	if(typeof cs !== 'string') cs = encode_cell(cs); if(typeof ce !== 'string') ce = encode_cell(ce);
+	return cs == ce ? cs : cs + ":" + ce;
+}
+
+function safe_decode_range(range) {
+	var o = {s:{c:0,r:0},e:{c:0,r:0}};
+	var idx = 0, i = 0, cc = 0;
+	var len = range.length;
+	for(idx = 0; i < len; ++i) {
+		if((cc=range.charCodeAt(i)-64) < 1 || cc > 26) break;
+		idx = 26*idx + cc;
+	}
+	o.s.c = --idx;
+
+	for(idx = 0; i < len; ++i) {
+		if((cc=range.charCodeAt(i)-48) < 0 || cc > 9) break;
+		idx = 10*idx + cc;
+	}
+	o.s.r = --idx;
+
+	if(i === len || range.charCodeAt(++i) === 58) { o.e.c=o.s.c; o.e.r=o.s.r; return o; }
+
+	for(idx = 0; i != len; ++i) {
+		if((cc=range.charCodeAt(i)-64) < 1 || cc > 26) break;
+		idx = 26*idx + cc;
+	}
+	o.e.c = --idx;
+
+	for(idx = 0; i != len; ++i) {
+		if((cc=range.charCodeAt(i)-48) < 0 || cc > 9) break;
+		idx = 10*idx + cc;
+	}
+	o.e.r = --idx;
+	return o;
+}
+
+function safe_format_cell(cell, v) {
+	if(cell.z !== undefined) try { return (cell.w = SSF.format(cell.z, v)); } catch(e) { }
+	if(!cell.XF) return v;
+	try { return (cell.w = SSF.format(cell.XF.ifmt||0, v)); } catch(e) { return ''+v; }
+}
+
+function format_cell(cell, v) {
+	if(cell == null || cell.t == null) return "";
+	if(cell.w !== undefined) return cell.w;
+	if(v === undefined) return safe_format_cell(cell, cell.v);
+	return safe_format_cell(cell, v);
+}
+
+function sheet_to_json(sheet, opts){
+	var val, row, range, header = 0, offset = 1, r, hdr = [], isempty, R, C, v;
+	var o = opts != null ? opts : {};
+	var raw = o.raw;
+	if(sheet == null || sheet["!ref"] == null) return [];
+	range = o.range !== undefined ? o.range : sheet["!ref"];
+	if(o.header === 1) header = 1;
+	else if(o.header === "A") header = 2;
+	else if(Array.isArray(o.header)) header = 3;
+	switch(typeof range) {
+		case 'string': r = safe_decode_range(range); break;
+		case 'number': r = safe_decode_range(sheet["!ref"]); r.s.r = range; break;
+		default: r = range;
+	}
+	if(header > 0) offset = 0;
+	var rr = encode_row(r.s.r);
+	var cols = new Array(r.e.c-r.s.c+1);
+	var out = new Array(r.e.r-r.s.r-offset+1);
+	var outi = 0;
+	for(C = r.s.c; C <= r.e.c; ++C) {
+		cols[C] = encode_col(C);
+		val = sheet[cols[C] + rr];
+		switch(header) {
+			case 1: hdr[C] = C; break;
+			case 2: hdr[C] = cols[C]; break;
+			case 3: hdr[C] = o.header[C - r.s.c]; break;
+			default:
+				if(val === undefined) continue;
+				hdr[C] = format_cell(val);
+		}
+	}
+
+	for (R = r.s.r + offset; R <= r.e.r; ++R) {
+		rr = encode_row(R);
+		isempty = true;
+		if(header === 1) row = [];
+		else {
+			row = {};
+			if(Object.defineProperty) Object.defineProperty(row, '__rowNum__', {value:R, enumerable:false});
+			else row.__rowNum__ = R;
+		}
+		for (C = r.s.c; C <= r.e.c; ++C) {
+			val = sheet[cols[C] + rr];
+			if(val === undefined || val.t === undefined) continue;
+			v = val.v;
+			switch(val.t){
+				case 'e': continue;
+				case 's': break;
+				case 'b': case 'n': break;
+				default: throw 'unrecognized type ' + val.t;
+			}
+			if(v !== undefined) {
+				row[hdr[C]] = raw ? v : format_cell(val,v);
+				isempty = false;
+			}
+		}
+		if(isempty === false || header === 1) out[outi++] = row;
+	}
+	out.length = outi;
+	return out;
+}
+
+function sheet_to_row_object_array(sheet, opts) { return sheet_to_json(sheet, opts != null ? opts : {}); }
+
+function sheet_to_csv(sheet, opts) {
+	var out = "", txt = "", qreg = /"/g;
+	var o = opts == null ? {} : opts;
+	if(sheet == null || sheet["!ref"] == null) return "";
+	var r = safe_decode_range(sheet["!ref"]);
+	var FS = o.FS !== undefined ? o.FS : ",", fs = FS.charCodeAt(0);
+	var RS = o.RS !== undefined ? o.RS : "\n", rs = RS.charCodeAt(0);
+	var row = "", rr = "", cols = [];
+	var i = 0, cc = 0, val;
+	var R = 0, C = 0;
+	for(C = r.s.c; C <= r.e.c; ++C) cols[C] = encode_col(C);
+	for(R = r.s.r; R <= r.e.r; ++R) {
+		row = "";
+		rr = encode_row(R);
+		for(C = r.s.c; C <= r.e.c; ++C) {
+			val = sheet[cols[C] + rr];
+			txt = val !== undefined ? ''+format_cell(val) : "";
+			for(i = 0, cc = 0; i !== txt.length; ++i) if((cc = txt.charCodeAt(i)) === fs || cc === rs || cc === 34) {
+				txt = "\"" + txt.replace(qreg, '""') + "\""; break; }
+			row += (C === r.s.c ? "" : FS) + txt;
+		}
+		out += row + RS;
+	}
+	return out;
+}
+var make_csv = sheet_to_csv;
+
+function sheet_to_formulae(sheet) {
+	var cmds, y = "", x, val="";
+	if(sheet == null || sheet["!ref"] == null) return "";
+	var r = safe_decode_range(sheet['!ref']), rr = "", cols = [], C;
+	cmds = new Array((r.e.r-r.s.r+1)*(r.e.c-r.s.c+1));
+	var i = 0;
+	for(C = r.s.c; C <= r.e.c; ++C) cols[C] = encode_col(C);
+	for(var R = r.s.r; R <= r.e.r; ++R) {
+		rr = encode_row(R);
+		for(C = r.s.c; C <= r.e.c; ++C) {
+			y = cols[C] + rr;
+			x = sheet[y];
+			val = "";
+			if(x === undefined) continue;
+			if(x.f != null) val = x.f;
+			else if(x.w !== undefined) val = "'" + x.w;
+			else if(x.v === undefined) continue;
+			else val = ""+x.v;
+			cmds[i++] = y + "=" + val;
+		}
+	}
+	cmds.length = i;
+	return cmds;
+}
+
+var utils = {
+	encode_col: encode_col,
+	encode_row: encode_row,
+	encode_cell: encode_cell,
+	encode_range: encode_range,
+	decode_col: decode_col,
+	decode_row: decode_row,
+	split_cell: split_cell,
+	decode_cell: decode_cell,
+	decode_range: decode_range,
+	format_cell: format_cell,
+	get_formulae: sheet_to_formulae,
+	make_csv: sheet_to_csv,
+	make_json: sheet_to_json,
+	make_formulae: sheet_to_formulae,
+	sheet_to_csv: sheet_to_csv,
+	sheet_to_json: sheet_to_json,
+	sheet_to_formulae: sheet_to_formulae,
+	sheet_to_row_object_array: sheet_to_row_object_array
+};
+
+
+
+
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/91_xmlbuilder.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/91_xmlbuilder.js
new file mode 100644
index 0000000..86d5dd1
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/91_xmlbuilder.js
@@ -0,0 +1,88 @@
+/////////////////////////////////////////////////////////////////////////////////////////////////////
+var XmlNode = (function () {
+  function XmlNode(tagName, attributes, children) {
+
+    if (!(this instanceof XmlNode)) {
+      return new XmlNode(tagName, attributes, children);
+    }
+    this.tagName = tagName;
+    this._attributes = attributes || {};
+    this._children = children || [];
+    this._prefix = '';
+    return this;
+  }
+
+  XmlNode.prototype.createElement = function () {
+    return new XmlNode(arguments)
+  }
+
+  XmlNode.prototype.children = function() {
+    return this._children;
+  }
+
+  XmlNode.prototype.append = function (node) {
+    this._children.push(node);
+    return this;
+  }
+
+  XmlNode.prototype.prefix = function (prefix) {
+    if (arguments.length==0) { return this._prefix;}
+    this._prefix = prefix;
+    return this;
+  }
+
+  XmlNode.prototype.attr = function (attr, value) {
+    if (value == undefined) {
+      delete this._attributes[attr];
+      return this;
+    }
+    if (arguments.length == 0) {
+      return this._attributes;
+    }
+    else if (typeof attr == 'string' && arguments.length == 1) {
+      return this._attributes.attr[attr];
+    }
+    if (typeof attr == 'object' && arguments.length == 1) {
+      for (var key in attr) {
+        this._attributes[key] = attr[key];
+      }
+    }
+    else if (arguments.length == 2 && typeof attr == 'string') {
+      this._attributes[attr] = value;
+    }
+    return this;
+  }
+
+  var APOS = "'"; QUOTE = '"'
+  var ESCAPED_QUOTE = {  }
+  ESCAPED_QUOTE[QUOTE] = '&quot;'
+  ESCAPED_QUOTE[APOS] = '&apos;'
+
+  XmlNode.prototype.escapeAttributeValue = function(att_value) {
+    return '"' + att_value.replace(/\"/g,'&quot;') + '"';// TODO Extend with four other codes
+
+  }
+
+  XmlNode.prototype.toXml = function (node) {
+    if (!node) node = this;
+    var xml = node._prefix;
+    xml += '<' + node.tagName;
+    if (node._attributes) {
+      for (var key in node._attributes) {
+        xml += ' ' + key + '=' + this.escapeAttributeValue(''+node._attributes[key]) + ''
+      }
+    }
+    if (node._children && node._children.length > 0) {
+      xml += ">";
+      for (var i = 0; i < node._children.length; i++) {
+        xml += this.toXml(node._children[i]);
+      }
+      xml += '</' + node.tagName + '>';
+    }
+    else {
+      xml += '/>';
+    }
+    return xml;
+  }
+  return XmlNode;
+})();
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/92_stylebuilder.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/92_stylebuilder.js
new file mode 100644
index 0000000..efb4b90
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/92_stylebuilder.js
@@ -0,0 +1,378 @@
+/////////////////////////////////////////////////////////////////////////////////////////////////////
+
+  var StyleBuilder = function (options) {
+
+    var customNumFmtId = 164;
+
+
+
+    var table_fmt = {
+      0:  'General',
+      1:  '0',
+      2:  '0.00',
+      3:  '#,##0',
+      4:  '#,##0.00',
+      9:  '0%',
+      10: '0.00%',
+      11: '0.00E+00',
+      12: '# ?/?',
+      13: '# ??/??',
+      14: 'm/d/yy',
+      15: 'd-mmm-yy',
+      16: 'd-mmm',
+      17: 'mmm-yy',
+      18: 'h:mm AM/PM',
+      19: 'h:mm:ss AM/PM',
+      20: 'h:mm',
+      21: 'h:mm:ss',
+      22: 'm/d/yy h:mm',
+      37: '#,##0 ;(#,##0)',
+      38: '#,##0 ;[Red](#,##0)',
+      39: '#,##0.00;(#,##0.00)',
+      40: '#,##0.00;[Red](#,##0.00)',
+      45: 'mm:ss',
+      46: '[h]:mm:ss',
+      47: 'mmss.0',
+      48: '##0.0E+0',
+      49: '@',
+      56: '"涓婂崍/涓嬪崍 "hh"鏅�"mm"鍒�"ss"绉� "'    };
+    var fmt_table = {};
+
+    for (var idx in table_fmt) {
+      fmt_table[table_fmt[idx]] = idx;
+    }
+
+
+    // cache style specs to avoid excessive duplication
+    _hashIndex = {};
+    _listIndex = [];
+
+    return {
+
+      initialize: function (options) {
+
+        this.$fonts = XmlNode('fonts').attr('count',0).attr("x14ac:knownFonts","1");
+        this.$fills = XmlNode('fills').attr('count',0);
+        this.$borders = XmlNode('borders').attr('count',0);
+        this.$numFmts = XmlNode('numFmts').attr('count',0);
+        this.$cellStyleXfs = XmlNode('cellStyleXfs');
+        this.$xf = XmlNode('xf')
+            .attr('numFmtId', 0)
+            .attr('fontId', 0)
+            .attr('fillId', 0)
+            .attr('borderId', 0);
+
+        this.$cellXfs = XmlNode('cellXfs').attr('count',0);
+        this.$cellStyles = XmlNode('cellStyles')
+            .append(XmlNode('cellStyle')
+                .attr('name', 'Normal')
+                .attr('xfId',0)
+                .attr('builtinId',0)
+            );
+        this.$dxfs = XmlNode('dxfs').attr('count', "0");
+        this.$tableStyles = XmlNode('tableStyles')
+            .attr('count','0')
+            .attr('defaultTableStyle','TableStyleMedium9')
+            .attr('defaultPivotStyle','PivotStyleMedium4')
+
+
+        this.$styles = XmlNode('styleSheet')
+            .attr('xmlns:mc','http://schemas.openxmlformats.org/markup-compatibility/2006')
+            .attr('xmlns:x14ac','http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac')
+            .attr('xmlns','http://schemas.openxmlformats.org/spreadsheetml/2006/main')
+            .attr('mc:Ignorable','x14ac')
+            .prefix('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>')
+            .append(this.$numFmts)
+            .append(this.$fonts)
+            .append(this.$fills)
+            .append(this.$borders)
+            .append(this.$cellStyleXfs.append(this.$xf))
+            .append(this.$cellXfs)
+            .append(this.$cellStyles)
+            .append(this.$dxfs)
+            .append(this.$tableStyles);
+
+
+        // need to specify styles at index 0 and 1.
+        // the second style MUST be gray125 for some reason
+
+        var defaultStyle = options.defaultCellStyle || {};
+        if (!defaultStyle.font) defaultStyle.font = {name: 'Calibri', sz: '12'};
+        if (!defaultStyle.font.name) defaultStyle.font.name = 'Calibri';
+        if (!defaultStyle.font.sz) defaultStyle.font.sz = 11;
+        if (!defaultStyle.fill) defaultStyle.fill = {  patternType: "none", fgColor: {}};
+        if (!defaultStyle.border) defaultStyle.border = {};
+        if (!defaultStyle.numFmt) defaultStyle.numFmt = 0;
+
+        this.defaultStyle = defaultStyle;
+
+        var gray125Style = JSON.parse(JSON.stringify(defaultStyle));
+        gray125Style.fill = {patternType: "gray125", fgColor: { }}
+
+        this.addStyles([defaultStyle, gray125Style]);
+        return this;
+      },
+
+      // create a style entry and returns an integer index that can be used in the cell .s property
+      // these format of this object follows the emerging Common Spreadsheet Format
+      addStyle: function (attributes) {
+
+        var hashKey = JSON.stringify(attributes);
+        var index = _hashIndex[hashKey];
+        if (index == undefined) {
+
+          index = this._addXf(attributes); //_listIndex.push(attributes) -1;
+          _hashIndex[hashKey] = index;
+        }
+        else {
+          index = _hashIndex[hashKey];
+        }
+        return index;
+      },
+
+      // create style entries and returns array of integer indexes that can be used in cell .s property
+      addStyles: function (styles) {
+        var self = this;
+        return styles.map(function (style) {
+          return self.addStyle(style);
+        })
+      },
+
+      _duckTypeStyle: function(attributes) {
+
+        if (typeof attributes == 'object' && (attributes.patternFill || attributes.fgColor)) {
+          return {fill: attributes }; // this must be read via XLSX.parseFile(...)
+        }
+        else if (attributes.font || attributes.numFmt || attributes.border || attributes.fill) {
+          return attributes;
+        }
+        else {
+          return this._getStyleCSS(attributes)
+        }
+      },
+
+      _getStyleCSS: function(css) {
+        return css; //TODO
+      },
+
+      // Create an <xf> record for the style as well as corresponding <font>, <fill>, <border>, <numfmts>
+      // Right now this is simple and creates a <font>, <fill>, <border>, <numfmts> for every <xf>
+      // We could perhaps get fancier and avoid duplicating  auxiliary entries as Excel presumably intended, but bother.
+      _addXf: function (attributes) {
+
+
+        var fontId = this._addFont(attributes.font);
+        var fillId = this._addFill(attributes.fill);
+        var borderId = this._addBorder(attributes.border);
+        var numFmtId = this._addNumFmt(attributes.numFmt);
+
+        var $xf = XmlNode('xf')
+            .attr("numFmtId", numFmtId)
+            .attr("fontId", fontId)
+            .attr("fillId", fillId)
+            .attr("borderId", borderId)
+            .attr("xfId", "0");
+
+        if (fontId > 0) {
+          $xf.attr('applyFont', "1");
+        }
+        if (fillId > 0) {
+          $xf.attr('applyFill', "1");
+        }
+        if (borderId > 0) {
+          $xf.attr('applyBorder', "1");
+        }
+        if (numFmtId > 0) {
+          $xf.attr('applyNumberFormat', "1");
+        }
+
+        if (attributes.alignment) {
+          var $alignment = XmlNode('alignment');
+          if (attributes.alignment.horizontal) { $alignment.attr('horizontal', attributes.alignment.horizontal);}
+          if (attributes.alignment.vertical)  { $alignment.attr('vertical', attributes.alignment.vertical);}
+          if (attributes.alignment.indent)  { $alignment.attr('indent', attributes.alignment.indent);}
+          if (attributes.alignment.readingOrder)  { $alignment.attr('readingOrder', attributes.alignment.readingOrder);}
+          if (attributes.alignment.wrapText)  { $alignment.attr('wrapText', attributes.alignment.wrapText);}
+          if (attributes.alignment.textRotation!=undefined)  { $alignment.attr('textRotation', attributes.alignment.textRotation);}
+
+          $xf.append($alignment).attr('applyAlignment',1)
+
+        }
+        this.$cellXfs.append($xf);
+        var count = +this.$cellXfs.children().length;
+
+        this.$cellXfs.attr('count', count);
+        return count - 1;
+      },
+
+      _addFont: function (attributes) {
+
+        if (!attributes) {  return 0; }
+
+        var $font = XmlNode('font')
+            .append(XmlNode('sz').attr('val', attributes.sz || this.defaultStyle.font.sz))
+            .append(XmlNode('name').attr('val', attributes.name || this.defaultStyle.font.name))
+
+        if (attributes.bold) $font.append(XmlNode('b'));
+        if (attributes.underline)  $font.append(XmlNode('u'));
+        if (attributes.italic)  $font.append(XmlNode('i'));
+        if (attributes.strike)  $font.append(XmlNode('strike'));
+        if (attributes.outline)  $font.append(XmlNode('outline'));
+        if (attributes.shadow)  $font.append(XmlNode('shadow'));
+
+        if (attributes.vertAlign) {
+          $font.append(XmlNode('vertAlign').attr('val', attributes.vertAlign))
+        }
+
+
+        if (attributes.color) {
+          if (attributes.color.theme) {
+            $font.append(XmlNode('color').attr('theme', attributes.color.theme))
+
+            if (attributes.color.tint) { //tint only if theme
+              $font.append(XmlNode('tint').attr('theme', attributes.color.tint))
+            }
+
+          } else if (attributes.color.rgb) { // not both rgb and theme
+            $font.append(XmlNode('color').attr('rgb', attributes.color.rgb))
+          }
+        }
+
+        this.$fonts.append($font);
+
+        var count = this.$fonts.children().length;
+        this.$fonts.attr('count', count);
+        return count - 1;
+      },
+
+        _addNumFmt: function (numFmt) {
+        if (!numFmt) { return 0; }
+
+        if (typeof numFmt == 'string') {
+          var numFmtIdx = fmt_table[numFmt];
+          if (numFmtIdx >= 0) {
+            return numFmtIdx; // we found a match against built in formats
+          }
+        }
+
+        if (/^[0-9]+$/.exec(numFmt)) {
+          return numFmt; // we're matching an integer against some known code
+        }
+        numFmt = numFmt
+            .replace(/&/g, '&amp;')
+            .replace(/</g, '&lt;')
+            .replace(/>/g, '&gt;')
+            .replace(/"/g, '&quot;')
+            .replace(/'/g, '&apos;');
+
+        var $numFmt = XmlNode('numFmt')
+            .attr('numFmtId', (++customNumFmtId))
+            .attr('formatCode', numFmt);
+
+        this.$numFmts.append($numFmt);
+
+        var count = this.$numFmts.children().length;
+        this.$numFmts.attr('count', count);
+        return customNumFmtId ;
+      },
+
+      _addFill: function (attributes) {
+
+        if (!attributes) { return 0; }
+
+        var $patternFill = XmlNode('patternFill')
+            .attr('patternType', attributes.patternType || 'solid');
+
+        if (attributes.fgColor) {
+          var $fgColor = XmlNode('fgColor');
+
+          //Excel doesn't like it when we set both rgb and theme+tint, but xlsx.parseFile() sets both
+          //var $fgColor = createElement('<fgColor/>', null, null, {xmlMode: true}).attr(attributes.fgColor)
+          if (attributes.fgColor.rgb) {
+
+            if (attributes.fgColor.rgb.length == 6) {
+              attributes.fgColor.rgb = "FF" + attributes.fgColor.rgb /// add alpha to an RGB as Excel expects aRGB
+            }
+
+            $fgColor.attr('rgb', attributes.fgColor.rgb);
+            $patternFill.append($fgColor);
+          }
+          else if (attributes.fgColor.theme) {
+            $fgColor.attr('theme', attributes.fgColor.theme);
+            if (attributes.fgColor.tint) {
+              $fgColor.attr('tint', attributes.fgColor.tint);
+            }
+            $patternFill.append($fgColor);
+          }
+
+          if (!attributes.bgColor) {
+            attributes.bgColor = { "indexed": "64"}
+          }
+        }
+
+        if (attributes.bgColor) {
+          var $bgColor = XmlNode('bgColor').attr(attributes.bgColor);
+          $patternFill.append($bgColor);
+        }
+
+        var $fill = XmlNode('fill')
+            .append($patternFill);
+
+        this.$fills.append($fill);
+
+        var count = this.$fills.children().length;
+        this.$fills.attr('count', count);
+        return count - 1;
+      },
+
+      _getSubBorder: function(direction, spec) {
+
+        var $direction = XmlNode(direction);
+        if (spec){
+          if (spec.style) $direction.attr('style', spec.style);
+          if (spec.color) {
+            var $color = XmlNode('color');
+            if (spec.color.auto) {
+              $color.attr('auto', spec.color.auto);
+            }
+            else if (spec.color.rgb) {
+              $color.attr('rgb', spec.color.rgb);
+            }
+            else if (spec.color.theme || spec.color.tint) {
+              $color.attr('theme', spec.color.theme || "1");
+              $color.attr('tint', spec.color.tint || "0");
+            }
+            $direction.append($color)
+          }
+        }
+        return $direction;
+      },
+
+      _addBorder: function (attributes) {
+        if (!attributes) { return 0; }
+
+        var self = this;
+
+        var $border = XmlNode('border')
+            .attr("diagonalUp",attributes.diagonalUp)
+            .attr("diagonalDown",attributes.diagonalDown);
+
+        var directions = ["left","right","top","bottom","diagonal"];
+
+        directions.forEach(function(direction) {
+          $border.append(self._getSubBorder(direction, attributes[direction]))
+        });
+        this.$borders.append($border);
+
+        var count = this.$borders.children().length;
+        this.$borders.attr('count', count);
+        return count -1;
+      },
+
+      toXml: function () {
+        return this.$styles.toXml();
+      }
+    }.initialize(options||{});
+  }
+
+
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/98_exports.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/98_exports.js
new file mode 100644
index 0000000..df1acd6
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/98_exports.js
@@ -0,0 +1,11 @@
+XLSX.parse_xlscfb = parse_xlscfb;
+XLSX.parse_zip = parse_zip;
+XLSX.read = readSync; //xlsread
+XLSX.readFile = readFileSync; //readFile
+XLSX.readFileSync = readFileSync;
+XLSX.write = writeSync;
+XLSX.writeFile = writeFileSync;
+XLSX.writeFileSync = writeFileSync;
+XLSX.utils = utils;
+XLSX.CFB = CFB;
+XLSX.SSF = SSF;
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bits/99_footer.js b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/99_footer.js
new file mode 100644
index 0000000..50e5f5e
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bits/99_footer.js
@@ -0,0 +1,2 @@
+})(typeof exports !== 'undefined' ? exports : XLSX);
+var XLS = XLSX;
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/bower.json b/Source/UBCS-WEB/src/config/js-xlsx-master/bower.json
new file mode 100644
index 0000000..0effed1
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/bower.json
@@ -0,0 +1,23 @@
+{
+  "name": "js-xlsx",
+  "homepage": "https://github.com/SheetJS/js-xlsx",
+  "main": "dist/xlsx.js",
+  "version": "0.8.20",
+  "ignore": [
+    "bin",
+    "bits",
+    "misc",
+    "**/.*"
+  ],
+  "keywords": [
+    "excel",
+    "xls",
+    "xml",
+    "xlsx",
+    "xlsm",
+    "xlsb",
+    "ods",
+    "js-xls",
+    "js-xlsx"
+  ]
+}
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/cell_style_simple.json b/Source/UBCS-WEB/src/config/js-xlsx-master/cell_style_simple.json
new file mode 100644
index 0000000..0529fd5
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/cell_style_simple.json
@@ -0,0 +1,1773 @@
+{
+    "!ref": "A1:J10",
+    "A1": {
+        "t": "n",
+        "v": 1,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "darkHorizontal",
+                "fgColor": {
+                    "theme": 9,
+                    "tint": -0.249977111117893
+                },
+                "bgColor": {
+                    "theme": 5,
+                    "tint": 0.3999755851924192
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "1",
+        "z": "General"
+    },
+    "B1": {
+        "t": "n",
+        "v": 2,
+        "f": "A1+1",
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "darkHorizontal",
+                "fgColor": {
+                    "theme": 9,
+                    "tint": -0.249977111117893
+                },
+                "bgColor": {
+                    "theme": 5,
+                    "tint": 0.3999755851924192
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "2",
+        "z": "General"
+    },
+    "C1": {
+        "t": "n",
+        "v": 3,
+        "f": "B1+1",
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "darkHorizontal",
+                "fgColor": {
+                    "theme": 9,
+                    "tint": -0.249977111117893
+                },
+                "bgColor": {
+                    "theme": 5,
+                    "tint": 0.3999755851924192
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "3",
+        "z": "General"
+    },
+    "D1": {
+        "t": "n",
+        "v": 4,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "darkHorizontal",
+                "fgColor": {
+                    "theme": 9,
+                    "tint": -0.249977111117893
+                },
+                "bgColor": {
+                    "theme": 5,
+                    "tint": 0.3999755851924192
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "4",
+        "z": "General"
+    },
+    "E1": {
+        "t": "n",
+        "v": 5,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "lightDown",
+                "fgColor": {
+                    "theme": 4,
+                    "tint": -0.249977111117893
+                },
+                "bgColor": {
+                    "theme": 7,
+                    "tint": -0.249977111117893
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "5",
+        "z": "General"
+    },
+    "F1": {
+        "t": "n",
+        "v": 6,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "darkHorizontal",
+                "fgColor": {
+                    "theme": 9,
+                    "tint": -0.249977111117893
+                },
+                "bgColor": {
+                    "theme": 5,
+                    "tint": 0.3999755851924192
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "6",
+        "z": "General"
+    },
+    "G1": {
+        "t": "n",
+        "v": 7,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "darkHorizontal",
+                "fgColor": {
+                    "theme": 9,
+                    "tint": -0.249977111117893
+                },
+                "bgColor": {
+                    "theme": 5,
+                    "tint": 0.3999755851924192
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "7",
+        "z": "General"
+    },
+    "H1": {
+        "t": "n",
+        "v": 8,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "lightGrid",
+                "fgColor": {
+                    "theme": 4
+                },
+                "bgColor": {
+                    "theme": 2,
+                    "tint": -0.749992370372631
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "8",
+        "z": "General"
+    },
+    "I1": {
+        "t": "n",
+        "v": 9,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "lightGrid",
+                "fgColor": {
+                    "theme": 4
+                },
+                "bgColor": {
+                    "theme": 2,
+                    "tint": -0.749992370372631
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "9",
+        "z": "General"
+    },
+    "J1": {
+        "t": "n",
+        "v": 10,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "lightGrid",
+                "fgColor": {
+                    "theme": 4
+                },
+                "bgColor": {
+                    "theme": 2,
+                    "tint": -0.749992370372631
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "10",
+        "z": "General"
+    },
+    "A2": {
+        "t": "n",
+        "v": 2,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "darkUp",
+                "fgColor": {
+                    "theme": 3,
+                    "tint": -0.249977111117893
+                },
+                "bgColor": {
+                    "theme": 7,
+                    "tint": 0.3999755851924192
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "2",
+        "z": "General"
+    },
+    "B2": {
+        "t": "n",
+        "v": 3,
+        "f": "A2+1",
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "darkUp",
+                "fgColor": {
+                    "theme": 3,
+                    "tint": -0.249977111117893
+                },
+                "bgColor": {
+                    "theme": 7,
+                    "tint": 0.3999755851924192
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "3",
+        "z": "General"
+    },
+    "C2": {
+        "t": "n",
+        "v": 4,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "darkUp",
+                "fgColor": {
+                    "theme": 3,
+                    "tint": -0.249977111117893
+                },
+                "bgColor": {
+                    "theme": 7,
+                    "tint": 0.3999755851924192
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "4",
+        "z": "General"
+    },
+    "D2": {
+        "t": "n",
+        "v": 5,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "darkUp",
+                "fgColor": {
+                    "theme": 3,
+                    "tint": -0.249977111117893
+                },
+                "bgColor": {
+                    "theme": 7,
+                    "tint": 0.3999755851924192
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "5",
+        "z": "General"
+    },
+    "E2": {
+        "t": "n",
+        "v": 6,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "lightDown",
+                "fgColor": {
+                    "theme": 4,
+                    "tint": -0.249977111117893
+                },
+                "bgColor": {
+                    "theme": 7,
+                    "tint": -0.249977111117893
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "6",
+        "z": "General"
+    },
+    "F2": {
+        "t": "n",
+        "v": 7,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "darkUp",
+                "fgColor": {
+                    "theme": 3,
+                    "tint": -0.249977111117893
+                },
+                "bgColor": {
+                    "theme": 7,
+                    "tint": 0.3999755851924192
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "7",
+        "z": "General"
+    },
+    "G2": {
+        "t": "n",
+        "v": 8,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "darkUp",
+                "fgColor": {
+                    "theme": 3,
+                    "tint": -0.249977111117893
+                },
+                "bgColor": {
+                    "theme": 7,
+                    "tint": 0.3999755851924192
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "8",
+        "z": "General"
+    },
+    "H2": {
+        "t": "n",
+        "v": 9,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "lightGrid",
+                "fgColor": {
+                    "theme": 4
+                },
+                "bgColor": {
+                    "theme": 2,
+                    "tint": -0.749992370372631
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "9",
+        "z": "General"
+    },
+    "I2": {
+        "t": "n",
+        "v": 10,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "lightGrid",
+                "fgColor": {
+                    "theme": 4
+                },
+                "bgColor": {
+                    "theme": 2,
+                    "tint": -0.749992370372631
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "10",
+        "z": "General"
+    },
+    "J2": {
+        "t": "n",
+        "v": 11,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "lightGrid",
+                "fgColor": {
+                    "theme": 4
+                },
+                "bgColor": {
+                    "theme": 2,
+                    "tint": -0.749992370372631
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "11",
+        "z": "General"
+    },
+    "A3": {
+        "t": "n",
+        "v": 3,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "darkGray",
+                "fgColor": {
+                    "theme": 3
+                },
+                "bgColor": {
+                    "theme": 1
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "3",
+        "z": "General"
+    },
+    "B3": {
+        "t": "n",
+        "v": 4,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "lightGray",
+                "fgColor": {
+                    "theme": 6,
+                    "tint": 0.3999755851924192
+                },
+                "bgColor": {
+                    "theme": 2,
+                    "tint": -0.499984740745262
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "4",
+        "z": "General"
+    },
+    "C3": {
+        "t": "n",
+        "v": 5,
+        "w": "5",
+        "z": "General"
+    },
+    "D3": {
+        "t": "n",
+        "v": 6,
+        "w": "6",
+        "z": "General"
+    },
+    "E3": {
+        "t": "n",
+        "v": 7,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "lightDown",
+                "fgColor": {
+                    "theme": 4,
+                    "tint": -0.249977111117893
+                },
+                "bgColor": {
+                    "theme": 7,
+                    "tint": -0.249977111117893
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "7",
+        "z": "General"
+    },
+    "F3": {
+        "t": "n",
+        "v": 8,
+        "w": "8",
+        "z": "General"
+    },
+    "G3": {
+        "t": "n",
+        "v": 9,
+        "w": "9",
+        "z": "General"
+    },
+    "H3": {
+        "t": "n",
+        "v": 10,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "lightGrid",
+                "fgColor": {
+                    "theme": 4
+                },
+                "bgColor": {
+                    "theme": 2,
+                    "tint": -0.749992370372631
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "10",
+        "z": "General"
+    },
+    "I3": {
+        "t": "n",
+        "v": 11,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "lightGrid",
+                "fgColor": {
+                    "theme": 4
+                },
+                "bgColor": {
+                    "theme": 2,
+                    "tint": -0.749992370372631
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "11",
+        "z": "General"
+    },
+    "J3": {
+        "t": "n",
+        "v": 12,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "lightGrid",
+                "fgColor": {
+                    "theme": 4
+                },
+                "bgColor": {
+                    "theme": 2,
+                    "tint": -0.749992370372631
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "12",
+        "z": "General"
+    },
+    "A4": {
+        "t": "n",
+        "v": 4,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "darkGray",
+                "fgColor": {
+                    "theme": 3
+                },
+                "bgColor": {
+                    "theme": 1
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "4",
+        "z": "General"
+    },
+    "B4": {
+        "t": "n",
+        "v": 5,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "lightGray",
+                "fgColor": {
+                    "theme": 6,
+                    "tint": 0.3999755851924192
+                },
+                "bgColor": {
+                    "theme": 2,
+                    "tint": -0.499984740745262
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "5",
+        "z": "General"
+    },
+    "C4": {
+        "t": "n",
+        "v": 6,
+        "w": "6",
+        "z": "General"
+    },
+    "D4": {
+        "t": "n",
+        "v": 7,
+        "w": "7",
+        "z": "General"
+    },
+    "E4": {
+        "t": "n",
+        "v": 8,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "lightDown",
+                "fgColor": {
+                    "theme": 4,
+                    "tint": -0.249977111117893
+                },
+                "bgColor": {
+                    "theme": 7,
+                    "tint": -0.249977111117893
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "8",
+        "z": "General"
+    },
+    "F4": {
+        "t": "n",
+        "v": 9,
+        "w": "9",
+        "z": "General"
+    },
+    "G4": {
+        "t": "n",
+        "v": 10,
+        "w": "10",
+        "z": "General"
+    },
+    "H4": {
+        "t": "n",
+        "v": 11,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "lightGrid",
+                "fgColor": {
+                    "theme": 4
+                },
+                "bgColor": {
+                    "theme": 2,
+                    "tint": -0.749992370372631
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "11",
+        "z": "General"
+    },
+    "I4": {
+        "t": "n",
+        "v": 12,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "lightGrid",
+                "fgColor": {
+                    "theme": 4
+                },
+                "bgColor": {
+                    "theme": 2,
+                    "tint": -0.749992370372631
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "12",
+        "z": "General"
+    },
+    "J4": {
+        "t": "n",
+        "v": 13,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "lightGrid",
+                "fgColor": {
+                    "theme": 4
+                },
+                "bgColor": {
+                    "theme": 2,
+                    "tint": -0.749992370372631
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "13",
+        "z": "General"
+    },
+    "A5": {
+        "t": "n",
+        "v": 5,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "darkGray",
+                "fgColor": {
+                    "theme": 3
+                },
+                "bgColor": {
+                    "theme": 1
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "5",
+        "z": "General"
+    },
+    "B5": {
+        "t": "n",
+        "v": 6,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "lightGray",
+                "fgColor": {
+                    "theme": 6,
+                    "tint": 0.3999755851924192
+                },
+                "bgColor": {
+                    "theme": 2,
+                    "tint": -0.499984740745262
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "6",
+        "z": "General"
+    },
+    "C5": {
+        "t": "n",
+        "v": 7,
+        "w": "7",
+        "z": "General"
+    },
+    "D5": {
+        "t": "n",
+        "v": 8,
+        "w": "8",
+        "z": "General"
+    },
+    "E5": {
+        "t": "n",
+        "v": 9,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "lightDown",
+                "fgColor": {
+                    "theme": 4,
+                    "tint": -0.249977111117893
+                },
+                "bgColor": {
+                    "theme": 7,
+                    "tint": -0.249977111117893
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "9",
+        "z": "General"
+    },
+    "F5": {
+        "t": "n",
+        "v": 10,
+        "w": "10",
+        "z": "General"
+    },
+    "G5": {
+        "t": "n",
+        "v": 11,
+        "w": "11",
+        "z": "General"
+    },
+    "H5": {
+        "t": "n",
+        "v": 12,
+        "w": "12",
+        "z": "General"
+    },
+    "I5": {
+        "t": "n",
+        "v": 13,
+        "w": "13",
+        "z": "General"
+    },
+    "J5": {
+        "t": "n",
+        "v": 14,
+        "w": "14",
+        "z": "General"
+    },
+    "A6": {
+        "t": "n",
+        "v": 6,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "darkGray",
+                "fgColor": {
+                    "theme": 3
+                },
+                "bgColor": {
+                    "theme": 1
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "6",
+        "z": "General"
+    },
+    "B6": {
+        "t": "n",
+        "v": 7,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "lightGray",
+                "fgColor": {
+                    "theme": 6,
+                    "tint": 0.3999755851924192
+                },
+                "bgColor": {
+                    "theme": 2,
+                    "tint": -0.499984740745262
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "7",
+        "z": "General"
+    },
+    "C6": {
+        "t": "n",
+        "v": 8,
+        "w": "8",
+        "z": "General"
+    },
+    "D6": {
+        "t": "n",
+        "v": 9,
+        "w": "9",
+        "z": "General"
+    },
+    "E6": {
+        "t": "n",
+        "v": 10,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "lightDown",
+                "fgColor": {
+                    "theme": 4,
+                    "tint": -0.249977111117893
+                },
+                "bgColor": {
+                    "theme": 7,
+                    "tint": -0.249977111117893
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "10",
+        "z": "General"
+    },
+    "F6": {
+        "t": "n",
+        "v": 11,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "lightGrid",
+                "fgColor": {
+                    "theme": 6,
+                    "tint": -0.249977111117893
+                },
+                "bgColor": {
+                    "theme": 9,
+                    "tint": -0.249977111117893
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "11",
+        "z": "General"
+    },
+    "G6": {
+        "t": "n",
+        "v": 12,
+        "w": "12",
+        "z": "General"
+    },
+    "H6": {
+        "t": "n",
+        "v": 13,
+        "w": "13",
+        "z": "General"
+    },
+    "I6": {
+        "t": "n",
+        "v": 14,
+        "w": "14",
+        "z": "General"
+    },
+    "J6": {
+        "t": "n",
+        "v": 15,
+        "w": "15",
+        "z": "General"
+    },
+    "A7": {
+        "t": "n",
+        "v": 7,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "darkGray",
+                "fgColor": {
+                    "theme": 3
+                },
+                "bgColor": {
+                    "theme": 1
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "7",
+        "z": "General"
+    },
+    "B7": {
+        "t": "n",
+        "v": 8,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "lightGray",
+                "fgColor": {
+                    "theme": 6,
+                    "tint": 0.3999755851924192
+                },
+                "bgColor": {
+                    "theme": 2,
+                    "tint": -0.499984740745262
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "8",
+        "z": "General"
+    },
+    "C7": {
+        "t": "n",
+        "v": 9,
+        "w": "9",
+        "z": "General"
+    },
+    "D7": {
+        "t": "n",
+        "v": 10,
+        "w": "10",
+        "z": "General"
+    },
+    "E7": {
+        "t": "n",
+        "v": 11,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "lightDown",
+                "fgColor": {
+                    "theme": 4,
+                    "tint": -0.249977111117893
+                },
+                "bgColor": {
+                    "theme": 7,
+                    "tint": -0.249977111117893
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "11",
+        "z": "General"
+    },
+    "F7": {
+        "t": "n",
+        "v": 12,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "lightGrid",
+                "fgColor": {
+                    "theme": 6,
+                    "tint": -0.249977111117893
+                },
+                "bgColor": {
+                    "theme": 9,
+                    "tint": -0.249977111117893
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "12",
+        "z": "General"
+    },
+    "G7": {
+        "t": "n",
+        "v": 13,
+        "w": "13",
+        "z": "General"
+    },
+    "H7": {
+        "t": "n",
+        "v": 14,
+        "w": "14",
+        "z": "General"
+    },
+    "I7": {
+        "t": "n",
+        "v": 15,
+        "w": "15",
+        "z": "General"
+    },
+    "J7": {
+        "t": "n",
+        "v": 16,
+        "w": "16",
+        "z": "General"
+    },
+    "A8": {
+        "t": "n",
+        "v": 8,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "darkGray",
+                "fgColor": {
+                    "theme": 3
+                },
+                "bgColor": {
+                    "theme": 1
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "8",
+        "z": "General"
+    },
+    "B8": {
+        "t": "n",
+        "v": 9,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "lightGray",
+                "fgColor": {
+                    "theme": 6,
+                    "tint": 0.3999755851924192
+                },
+                "bgColor": {
+                    "theme": 2,
+                    "tint": -0.499984740745262
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "9",
+        "z": "General"
+    },
+    "C8": {
+        "t": "n",
+        "v": 10,
+        "w": "10",
+        "z": "General"
+    },
+    "D8": {
+        "t": "n",
+        "v": 11,
+        "w": "11",
+        "z": "General"
+    },
+    "E8": {
+        "t": "n",
+        "v": 12,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "lightDown",
+                "fgColor": {
+                    "theme": 4,
+                    "tint": -0.249977111117893
+                },
+                "bgColor": {
+                    "theme": 7,
+                    "tint": -0.249977111117893
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "12",
+        "z": "General"
+    },
+    "F8": {
+        "t": "n",
+        "v": 13,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "lightGrid",
+                "fgColor": {
+                    "theme": 6,
+                    "tint": -0.249977111117893
+                },
+                "bgColor": {
+                    "theme": 9,
+                    "tint": -0.249977111117893
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "13",
+        "z": "General"
+    },
+    "G8": {
+        "t": "n",
+        "v": 14,
+        "w": "14",
+        "z": "General"
+    },
+    "H8": {
+        "t": "n",
+        "v": 15,
+        "w": "15",
+        "z": "General"
+    },
+    "I8": {
+        "t": "n",
+        "v": 16,
+        "w": "16",
+        "z": "General"
+    },
+    "J8": {
+        "t": "n",
+        "v": 17,
+        "w": "17",
+        "z": "General"
+    },
+    "A9": {
+        "t": "n",
+        "v": 9,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "darkGray",
+                "fgColor": {
+                    "theme": 3
+                },
+                "bgColor": {
+                    "theme": 1
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "9",
+        "z": "General"
+    },
+    "B9": {
+        "t": "n",
+        "v": 10,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "lightGray",
+                "fgColor": {
+                    "theme": 6,
+                    "tint": 0.3999755851924192
+                },
+                "bgColor": {
+                    "theme": 2,
+                    "tint": -0.499984740745262
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "10",
+        "z": "General"
+    },
+    "C9": {
+        "t": "n",
+        "v": 11,
+        "w": "11",
+        "z": "General"
+    },
+    "D9": {
+        "t": "n",
+        "v": 12,
+        "w": "12",
+        "z": "General"
+    },
+    "E9": {
+        "t": "n",
+        "v": 13,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "lightDown",
+                "fgColor": {
+                    "theme": 4,
+                    "tint": -0.249977111117893
+                },
+                "bgColor": {
+                    "theme": 7,
+                    "tint": -0.249977111117893
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "13",
+        "z": "General"
+    },
+    "F9": {
+        "t": "n",
+        "v": 14,
+        "w": "14",
+        "z": "General"
+    },
+    "G9": {
+        "t": "n",
+        "v": 15,
+        "w": "15",
+        "z": "General"
+    },
+    "H9": {
+        "t": "n",
+        "v": 16,
+        "w": "16",
+        "z": "General"
+    },
+    "I9": {
+        "t": "n",
+        "v": 17,
+        "w": "17",
+        "z": "General"
+    },
+    "J9": {
+        "t": "n",
+        "v": 18,
+        "w": "18",
+        "z": "General"
+    },
+    "A10": {
+        "t": "n",
+        "v": 10,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "darkGray",
+                "fgColor": {
+                    "theme": 3
+                },
+                "bgColor": {
+                    "theme": 1
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "10",
+        "z": "General"
+    },
+    "B10": {
+        "t": "n",
+        "v": 11,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "lightGray",
+                "fgColor": {
+                    "theme": 6,
+                    "tint": 0.3999755851924192
+                },
+                "bgColor": {
+                    "theme": 2,
+                    "tint": -0.499984740745262
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "11",
+        "z": "General"
+    },
+    "C10": {
+        "t": "n",
+        "v": 12,
+        "w": "12",
+        "z": "General"
+    },
+    "D10": {
+        "t": "n",
+        "v": 13,
+        "w": "13",
+        "z": "General"
+    },
+    "E10": {
+        "t": "n",
+        "v": 14,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "lightDown",
+                "fgColor": {
+                    "theme": 4,
+                    "tint": -0.249977111117893
+                },
+                "bgColor": {
+                    "theme": 7,
+                    "tint": -0.249977111117893
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "14",
+        "z": "General"
+    },
+    "F10": {
+        "t": "n",
+        "v": 15,
+        "w": "15",
+        "z": "General"
+    },
+    "G10": {
+        "t": "n",
+        "v": 16,
+        "w": "16",
+        "z": "General"
+    },
+    "H10": {
+        "t": "n",
+        "v": 17,
+        "s": {
+            "numFmt": "General",
+            "fill": {
+                "patternType": "lightVertical",
+                "fgColor": {
+                    "theme": 3,
+                    "tint": 0.3999755851924192
+                },
+                "bgColor": {
+                    "theme": 7,
+                    "tint": 0.3999755851924192
+                }
+            },
+            "font": {
+                "sz": "12",
+                "color": {
+                    "theme": "1"
+                },
+                "name": "Calibri"
+            },
+            "border": {}
+        },
+        "w": "17",
+        "z": "General"
+    },
+    "I10": {
+        "t": "n",
+        "v": 18,
+        "w": "18",
+        "z": "General"
+    },
+    "J10": {
+        "t": "n",
+        "v": 19,
+        "w": "19",
+        "z": "General"
+    },
+    "!cols": [
+        [],
+        [],
+        null,
+        null,
+        []
+    ]
+}
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/color.js b/Source/UBCS-WEB/src/config/js-xlsx-master/color.js
new file mode 100644
index 0000000..a4d04a5
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/color.js
@@ -0,0 +1,86 @@
+function hex2RGB(h) {
+	var o = h.substr(h[0]==="#"?1:0,6);
+        var R = o.substr(0,2);
+        var G = o.substr(2,2);
+        var B = o.substr(4,2);
+	return [parseInt(R,16),parseInt(G,16),parseInt(B,16)];
+}
+function rgb2Hex(rgb) {
+	for(var i=0,o=1; i!=3; ++i) o = o*256 + (rgb[i]>255?255:rgb[i]<0?0:rgb[i]);
+	return o.toString(16).toUpperCase().substr(1);
+}
+
+function rgb2HSL(rgb) {
+	var R = rgb[0]/255, G = rgb[1]/255, B=rgb[2]/255;
+	var M = Math.max(R, G, B), m = Math.min(R, G, B), C = M - m;
+	if(C === 0) return [0, 0, R];
+
+	var H6 = 0, S = 0, L2 = (M + m);
+	S = C / (L2 > 1 ? 2 - L2 : L2);
+	switch(M){
+		case R: H6 = ((G - B) / C + 6)%6; break;
+		case G: H6 = ((B - R) / C + 2); break;
+		case B: H6 = ((R - G) / C + 4); break;
+	}
+	return [H6 / 6, S, L2 / 2];
+}
+
+function hsl2RGB(hsl){
+	var H = hsl[0], S = hsl[1], L = hsl[2];
+	var C = S * 2 * (L < 0.5 ? L : 1 - L), m = L - C/2;
+	var rgb = [m,m,m], h6 = 6*H;
+
+	var X;
+	if(S !== 0) switch(h6|0) {
+		case 0: case 6: X = C * h6; rgb[0] += C; rgb[1] += X; break;
+		case 1: X = C * (2 - h6);   rgb[0] += X; rgb[1] += C; break;
+		case 2: X = C * (h6 - 2);   rgb[1] += C; rgb[2] += X; break;
+		case 3: X = C * (4 - h6);   rgb[1] += X; rgb[2] += C; break;
+		case 4: X = C * (h6 - 4);   rgb[2] += C; rgb[0] += X; break;
+		case 5: X = C * (6 - h6);   rgb[2] += X; rgb[0] += C; break;
+	}
+	for(var i = 0; i != 3; ++i) rgb[i] = Math.round(rgb[i]*255);
+	return rgb;
+}
+/* 18.8.3 bgColor tint algorithm */
+function rgb_tint(hex, tint) {
+	if(tint === 0) return hex;
+	var hsl = rgb2HSL(hex2RGB(hex));
+	if (tint < 0) hsl[2] = hsl[2] * (1 + tint);
+	else hsl[2] = 1 - (1 - hsl[2]) * (1 - tint);
+	return rgb2Hex(hsl2RGB(hsl));
+}
+
+ var exp = [
+      { patternType: 'darkHorizontal',
+        fgColor: { theme: 9, "tint":-0.249977111117893, rgb: 'F79646' },
+        bgColor: { theme: 5, "tint":0.3999755851924192, rgb: 'C0504D' } },
+      { patternType: 'darkUp',
+        fgColor: { theme: 3, "tint":-0.249977111117893, rgb: 'EEECE1' },
+        bgColor: { theme: 7, "tint":0.3999755851924192, rgb: '8064A2' } },
+      { patternType: 'darkGray',
+        fgColor: { theme: 3, rgb: 'EEECE1' },
+        bgColor: { theme: 1, rgb: 'FFFFFF' } },
+      { patternType: 'lightGray',
+        fgColor: { theme: 6, "tint":0.3999755851924192, rgb: '9BBB59' },
+        bgColor: { theme: 2, "tint":-0.499984740745262, rgb: '1F497D' } },
+      { patternType: 'lightDown',
+        fgColor: { theme: 4, rgb: '4F81BD' },
+        bgColor: { theme: 7, rgb: '8064A2' } },
+      { patternType: 'lightGrid',
+        fgColor: { theme: 6, "tint":-0.249977111117893, rgb: '9BBB59' },
+        bgColor: { theme: 9, "tint":-0.249977111117893, rgb: 'F79646' } },
+      { patternType: 'lightGrid',
+        fgColor: { theme: 4, rgb: '4F81BD' },
+        bgColor: { theme: 2, "tint":-0.749992370372631, rgb: '1F497D' } },
+      { patternType: 'lightVertical',
+        fgColor: { theme: 3, "tint":0.3999755851924192, rgb: 'EEECE1' },
+        bgColor: { theme: 7, "tint":0.3999755851924192, rgb: '8064A2' } }
+    ];
+ var map = [];
+ exp.forEach(function(e) {
+    e.fgColor.new =  rgb_tint( e.fgColor.rgb,  e.fgColor.tint || 0); 
+console.log(e.fgColor.rgb, e.fgColor.new);
+    e.bgColor.new =  rgb_tint( e.bgColor.rgb,  e.bgColor.tint || 0); 
+console.log(e.bgColor.rgb, e.bgColor.new);
+ });
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/dist/LICENSE b/Source/UBCS-WEB/src/config/js-xlsx-master/dist/LICENSE
new file mode 100644
index 0000000..f769c2c
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/dist/LICENSE
@@ -0,0 +1,17 @@
+Copyright (C) 2012-2015  SheetJS
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+Except where noted, this license applies to any and all software programs and associated documentation files created by the Original Author and distributed with the Software:
+
+'jszip.js' is a modified version of JSZip, Copyright (c) Stuart Knightley, David Duponchel, Franz Buchinger, Ant'onio Afonso.  JSZip is dual licensed and is used according to the terms of the MIT License.
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/dist/cpexcel.js b/Source/UBCS-WEB/src/config/js-xlsx-master/dist/cpexcel.js
new file mode 100644
index 0000000..f821c7a
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/dist/cpexcel.js
@@ -0,0 +1,1324 @@
+/* cpexcel.js (C) 2013-2014 SheetJS -- http://sheetjs.com */
+/*jshint -W100 */
+var cptable = {version:"1.3.7"};
+cptable[874] = (function(){ var d = "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~鈧拷锟斤拷锟解�︼拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鈥樷�欌�溾�濃�⑩�撯�旓拷锟斤拷锟斤拷锟斤拷锟铰犩竵喔傕竷喔勦竻喔嗋竾喔堗笁喔娻笅喔屶笉喔庎笍喔愢笐喔掄笓喔斷笗喔栢笚喔樴笝喔氞笡喔溹笣喔炧笩喔犩浮喔⑧福喔む弗喔︵抚喔ㄠ俯喔斧喔腑喔腐喔班副喔侧赋喔脆傅喔多阜喔膏腹喔猴拷锟斤拷锟洁缚喙�喙佮箓喙冟箘喙呧箚喙囙箞喙夃箠喙嬥箤喙嵿箮喙忇箰喙戉箳喙撪箶喙曕箹喙椸箻喙權箽喙涳拷锟斤拷锟�", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d[i]] = i; D[i] = d.charAt(i); } return {"enc": e, "dec": D }; })();
+cptable[932] = (function(){ var d = [], e = {}, D = [], j;
+D[0] = "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤健锝剑锝わ渐锝︼涧锝僵锝将锝江锝蒋锝帮奖锝诧匠锝达降锝讹椒锝革焦锝猴交锝硷浇锝撅娇锞�锞侊緜锞冿緞锞咃締锞囷緢锞夛緤锞嬶緦锞嶏編锞忥緪锞戯緬锞擄緮锞曪緰锞楋緲锞欙練锞涳緶锞濓緸锞燂拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");
+for(j = 0; j != D[0].length; ++j) if(D[0][j].charCodeAt(0) !== 0xFFFD) { e[D[0][j]] = 0 + j; d[0 + j] = D[0][j];}
+D[129] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷銆�銆併�傦紝锛庛兓锛氾紱锛燂紒銈涖倻麓锝�篓锛撅浚锛裤兘銉俱倽銈炪�冧粷銆呫�嗐�囥兗鈥曗�愶紡锛硷綖鈭ワ綔鈥︹�モ�樷�欌�溾�濓紙锛夈�斻�曪蓟锛斤經锝濄�堛�夈�娿�嬨�屻�嶃�庛�忋�愩�戯紜锛嵚泵楋拷梅锛濃墵锛滐紴鈮︹墽鈭炩埓鈾傗檧掳鈥测�斥剝锟ワ紕锟狅俊锛咃純锛嗭紛锛犅р槅鈽呪棆鈼忊棊鈼団梿鈻♀枲鈻斥柌鈻解柤鈥汇�掆啋鈫愨啈鈫撱�擄拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鈭堚垕鈯嗏妵鈯傗妰鈭埄锟斤拷锟斤拷锟斤拷锟斤拷鈭р埁锟⑩噿鈬斺垁鈭冿拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鈭犫姤鈱掆垈鈭団墶鈮掆壀鈮垰鈭解垵鈭碘埆鈭拷锟斤拷锟斤拷锟斤拷鈩�扳櫙鈾櫔鈥犫�÷讹拷锟斤拷锟解棷锟斤拷锟�".split("");
+for(j = 0; j != D[129].length; ++j) if(D[129][j].charCodeAt(0) !== 0xFFFD) { e[D[129][j]] = 33024 + j; d[33024 + j] = D[129][j];}
+D[130] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤紣锛戯紥锛擄紨锛曪紪锛楋紭锛欙拷锟斤拷锟斤拷锟斤拷锛★饥锛o激锛ワ鸡锛э绩锛╋吉锛棘锛籍锛及锛憋疾锛筹即锛碉级锛凤几锛癸己锟斤拷锟斤拷锟斤拷锟斤絹锝傦絻锝勶絽锝嗭絿锝堬綁锝婏綃锝岋綅锝庯綇锝愶綉锝掞綋锝旓綍锝栵綏锝橈綑锝氾拷锟斤拷锟姐亖銇傘亙銇勩亝銇嗐亣銇堛亯銇娿亱銇屻亶銇庛亸銇愩亼銇掋亾銇斻仌銇栥仐銇樸仚銇氥仜銇溿仢銇炪仧銇犮仭銇€仯銇ゃ仴銇︺仹銇ㄣ仼銇伀銇伃銇伅銇般伇銇层伋銇淬伒銇躲伔銇搞伖銇恒伝銇笺伣銇俱伩銈�銈併倐銈冦倓銈呫倖銈囥倛銈夈倞銈嬨倢銈嶃値銈忋倫銈戙倰銈擄拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");
+for(j = 0; j != D[130].length; ++j) if(D[130][j].charCodeAt(0) !== 0xFFFD) { e[D[130][j]] = 33280 + j; d[33280 + j] = D[130][j];}
+D[131] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷銈°偄銈c偆銈ャ偊銈с偍銈┿偑銈偓銈偖銈偘銈便偛銈炽偞銈点偠銈枫偢銈广偤銈汇偧銈姐偩銈裤儉銉併儌銉冦儎銉呫儐銉囥儓銉夈儕銉嬨儗銉嶃儙銉忋儛銉戙儝銉撱償銉曘儢銉椼儤銉欍儦銉涖儨銉濄優銉燂拷銉犮儭銉€儯銉ゃ儱銉︺儳銉ㄣ儵銉儷銉儹銉儻銉般儽銉层兂銉淬兊銉讹拷锟斤拷锟斤拷锟斤拷锟轿懳捨撐斘曃栁椢樜櫸毼浳溛澪炍熚犖∥Nのノξㄎ╋拷锟斤拷锟斤拷锟斤拷锟轿蔽参澄次滴段肺肝刮何晃嘉轿疚肯�蟻蟽蟿蠀蠁蠂蠄蠅锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");
+for(j = 0; j != D[131].length; ++j) if(D[131][j].charCodeAt(0) !== 0xFFFD) { e[D[131][j]] = 33536 + j; d[33536 + j] = D[131][j];}
+D[132] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷袗袘袙袚袛袝衼袞袟袠袡袣袥袦袧袨袩袪小孝校肖啸笑效楔些歇蝎鞋协挟携锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟叫靶毙残承葱笛懶缎沸感剐盒恍夹斤拷芯锌褉褋褌褍褎褏褑褔褕褖褗褘褜褝褞褟锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟解攢鈹傗攲鈹愨敇鈹斺敎鈹敜鈹粹敿鈹佲攦鈹忊敁鈹涒敆鈹b敵鈹敾鈺嬧敔鈹敤鈹封斂鈹濃敯鈹モ敻鈺傦拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷".split("");
+for(j = 0; j != D[132].length; ++j) if(D[132][j].charCodeAt(0) !== 0xFFFD) { e[D[132][j]] = 33792 + j; d[33792 + j] = D[132][j];}
+D[135] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鈶犫憽鈶⑩懀鈶も懃鈶︹懅鈶ㄢ懇鈶懌鈶懎鈶懐鈶扳懕鈶测懗鈪犫叀鈪⑩叄鈪も叆鈪︹収鈪ㄢ叐锟姐崏銓斻將銔嶃寴銓с寖銓躲崙銔椼實銓︺專銓崐銓汇帨銕濄帪銕庛帍銖勩帯锟斤拷锟斤拷锟斤拷锟斤拷銔伙拷銆濄�熲剸銖嶁劇銑ゃ姤銑︺姧銑ㄣ埍銏层埞銔俱嵔銔尖墥鈮♀埆鈭垜鈭氣姤鈭犫垷鈯库埖鈭┾埅锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");
+for(j = 0; j != D[135].length; ++j) if(D[135][j].charCodeAt(0) !== 0xFFFD) { e[D[135][j]] = 34560 + j; d[34560 + j] = D[135][j];}
+D[136] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟戒簻鍞栧▋闃垮搥鎰涙尐濮堕�㈣懙鑼滅鎮彙娓ユ棴钁﹁姦榀垫鍦ф枴鎵卞疀濮愯櫥椋寸耽缍鹃畮鎴栫矡琚峰畨搴垫寜鏆楁闂囬瀺鏉忎互浼婁綅渚濆亯鍥插し濮斿▉灏夋儫鎰忔叞鏄撴鐐虹晱鐣扮Щ缍矾鑳冭悗琛h瑐閬曢伜鍖讳簳浜ュ煙鑲查儊纾竴澹辨孩閫哥ú鑼ㄨ妺榘厑鍗板捊鍝″洜濮诲紩椋叉帆鑳よ敪锟斤拷锟�".split("");
+for(j = 0; j != D[136].length; ++j) if(D[136][j].charCodeAt(0) !== 0xFFFD) { e[D[136][j]] = 34816 + j; d[34816 + j] = D[136][j];}
+D[137] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷闄㈤櫚闅犻熁鍚嬪彸瀹囩儚缇借總闆ㄥ嵂榈滅涓戠鑷兼甫鍢樺攧娆濊敋榘诲Д鍘╂郸鐡滈枏鍣備簯閬嬮洸鑽忛鍙″柖瀣板奖鏄犳洺鏍勬案娉虫穿鐟涚泩绌庨牬鑻辫瑭犻嫮娑茬柅鐩婇鎮﹁瑏瓒婇柌姒庡幁鍐嗭拷鍦掑牥濂勫寤舵�ㄦ帺鎻存部婕旂値鐒旂厵鐕曠尶绺佽壎鑻戣枟閬犻墰榇涘々鏂兼睔鐢ュ嚬澶ゥ寰�蹇滄娂鏃烘í娆ф鐜嬬縼瑗栭船榇庨粍宀℃矕鑽诲剟灞嬫喍鑷嗘《鐗′箼淇哄嵏鎭╂俯绌忛煶涓嬪寲浠綍浼戒尽浣冲姞鍙槈澶忓珌瀹跺绉戞殗鏋滄灦姝屾渤鐏弬绂嶇绋肩畤鑺辫嫑鑼勮嵎鑿彄铦﹁鍢╄波杩﹂亷闇炶殜淇勫敞鎴戠墮鐢昏嚗鑺借浘璩�闆呴椐曚粙浼氳В鍥炲澹婂换蹇�倲鎭㈡噽鎴掓嫄鏀癸拷锟斤拷".split("");
+for(j = 0; j != D[137].length; ++j) if(D[137][j].charCodeAt(0) !== 0xFFFD) { e[D[137][j]] = 35072 + j; d[35072 + j] = D[137][j];}
+D[138] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷榄佹櫐姊版捣鐏扮晫鐨嗙档鑺ヨ煿闁嬮殠璨濆嚤鍔惧鍜冲宕栨叏姒傛动纰嶈搵琛楄┎閹ч娴Θ铔欏灒鏌胯泿閳庡妰鍤囧悇寤撴嫛鎾规牸鏍告鐛茬⒑绌瑙掕但杓冮儹闁i殧闈╁宀虫ソ椤嶉鎺涚瑺妯拷姗挎⒍榘嶆綗鍓插枬鎭版嫭娲绘竾婊戣憶瑜愯絼涓旈肮鍙舵妯洪瀯鏍厹绔冭挷閲滈帉鍣涢川鏍㈣寘钀辩播鍒堣媴鐡︿咕渚冨啝瀵掑垔鍕樺嫥宸诲枤鍫Е瀹屽畼瀵涘共骞规偅鎰熸叄鎲炬彌鏁㈡煈妗撴:娆炬瓝姹楁饥婢楁絽鐠扮敇鐩g湅绔跨绨$珐缂剁堪鑲濊墻鑾炶Τ璜岃搏閭勯憫闁撻枒闁㈤櫏闊撻え鑸樹父鍚哺宸岀帺鐧岀溂宀╃揩璐嬮泚闋戦椤樹紒浼庡嵄鍠滃櫒鍩哄瀣夊瘎宀愬笇骞惧繉鎻満鏃楁棦鏈熸妫勶拷锟斤拷".split("");
+for(j = 0; j != D[138].length; ++j) if(D[138][j].charCodeAt(0) !== 0xFFFD) { e[D[138][j]] = 35328 + j; d[35328 + j] = D[138][j];}
+D[139] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷姗熷赴姣呮皸姹界暱绁堝绋�绱�寰借瑷樿泊璧疯粚杓濋"楱庨浜�鍋藉剙濡撳疁鎴妧鎿鐘犵枒绁囩京锜昏璀版幀鑿婇灎鍚夊悆鍠姗樿┌鐮ф澋榛嶅嵈瀹㈣剼铏愰�嗕笜涔呬粐浼戝強鍚稿寮撴�ユ晳锟芥溄姹傛辈娉g伕鐞冪┒绐瑘绱氱尘绲︽棫鐗涘幓灞呭法鎷掓嫚鎸欐笭铏氳ū璺濋嫺婕佺Ζ榄氫酣浜含渚涗緺鍍戝厙绔跺叡鍑跺崝鍖″嵖鍙柆澧冨场寮峰綂鎬亹鎭専鏁欐娉佺媯鐙煰鑳歌剠鑸堣晭閮烽彙闊块椹氫话鍑濆碍鏆佹キ灞�鏇叉サ鐜夋绮佸儏鍕ゅ潎宸鹃對鏂ゆ娆界惔绂佺绛嬬穵鑺硅弻琛胯璎硅繎閲戝悷閵�涔濆�跺彞鍖虹嫍鐜栫煩鑻﹁函椐嗛椐掑叿鎰氳櫈鍠扮┖鍋跺瘬閬囬殔涓叉珱閲у睉灞堬拷锟斤拷".split("");
+for(j = 0; j != D[139].length; ++j) if(D[139][j].charCodeAt(0) !== 0xFFFD) { e[D[139][j]] = 35584 + j; d[35584 + j] = D[139][j];}
+D[140] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鎺樼獰娌撻澊杞$鐔婇殘绮傛牀绻版閸嫴鍚涜柅瑷撶兢杌嶉儭鍗﹁绁佷總鍌惧垜鍏勫晸鍦彧鍨嬪褰㈠緞鎭垫叾鎱ф啯鎺叉惡鏁櫙妗傛笓鐣︾ń绯荤祵缍欑箣缃寧鑽婅泹瑷堣璀﹁唤闋氶稄鑺歌繋榀拷鍔囨垷鎾冩縺闅欐鍌戞瑺姹烘綌绌寸祼琛�瑷f湀浠跺�瑰�﹀仴鍏煎埜鍓e枾鍦忓爡瀚屽缓鎲叉嚫鎷虫嵅妞滄ī鐗界姮鐚爺纭倒鐪岃偐瑕嬭瑱璩㈣粧閬i嵉闄洪楱撻垢鍏冨師鍘冲够寮︽笡婧愮巹鐝剧祪鑸疯█璜洪檺涔庡�嬪彜鍛煎浐濮戝宸卞韩寮ф埜鏁呮灟婀栫嫄绯婅⒋鑲¤儭鑿拌檸瑾囪法閳烽泧椤ч紦浜斾簰浼嶅崍鍛夊惥濞緦寰℃偀姊ф獛鐟氱瑾炶璀烽啇涔為瘔浜や郊渚�欏�栧厜鍏姛鍔瑰嬀鍘氬彛鍚戯拷锟斤拷".split("");
+for(j = 0; j != D[140].length; ++j) if(D[140][j].charCodeAt(0) !== 0xFFFD) { e[D[140][j]] = 35840 + j; d[35840 + j] = D[140][j];}
+D[141] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍚庡枆鍧戝灑濂藉瓟瀛濆畯宸ュ阀宸峰垢搴冨簹搴峰紭鎭掓厡鎶楁嫎鎺ф敾鏄傛檭鏇存澀鏍℃妲嬫睙娲旦娓簼鐢茬殗纭绯犵磪绱樼禐缍辫�曡�冭偗鑲辫厰鑶忚埅鑽掕琛¤瑳璨㈣臣閮婇叺閴辩牽閶奸枻闄嶏拷闋呴楂橀椿鍓涘姭鍙峰悎澹曟嫹婵犺豹杞熼汗鍏嬪埢鍛婂浗绌�閰烽禒榛掔崉婕夎叞鐢戝拷鎯氶鐙涜炯姝ら爟浠婂洶鍧ゅ⒕濠氭仺鎳囨槒鏄嗘牴姊辨贩鐥曠春鑹瓊浜涗綈鍙夊攩宓乏宸熁娌欑懗鐮傝閹栬鍧愬骇鎸偟鍌啀鏈�鍝夊濡诲褰╂墠鎺℃牻姝虫笀鐏介噰鐘�鐮曠牔绁枎绱拌彍瑁佽級闅涘墹鍦ㄦ潗缃病鍐村潅闃牶姒婅偞鍜插磶鍩肩榉轰綔鍓婂拫鎼炬槰鏈旀煹绐勭瓥绱㈤尟妗滈绗瑰寵鍐婂埛锟斤拷锟�".split("");
+for(j = 0; j != D[141].length; ++j) if(D[141][j].charCodeAt(0) !== 0xFFFD) { e[D[141][j]] = 36096 + j; d[36096 + j] = D[141][j];}
+D[142] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷瀵熸嫸鎾摝鏈钖╅洃鐨愰瘱鎹岄寙楫毧鏅掍笁鍌樺弬灞辨儴鎾掓暎妗熺嚘鐝婄敚绠楃簜铓曡畠璩涢吀椁愭柆鏆畫浠曚粩浼轰娇鍒哄徃鍙插棧鍥涘+濮嬪濮垮瓙灞嶅競甯織鎬濇寚鏀瓬鏂柦鏃ㄦ灊姝拷姝绘皬鐛呯绉佺掣绱欑传鑲㈣剛鑷宠瑭炶┅瑭﹁獙璜硣璩滈泴椋兼浜嬩技渚嶅厫瀛楀鎱堟寔鏅傛婊嬫不鐖剧捊鐥旂绀鸿�岃�宠嚜钂旇緸姹愰箍寮忚瓨榇杌稿畭闆竷鍙卞煼澶卞珘瀹ゆ倝婀挎紗鐤捐唱瀹熻攢绡犲伈鏌磋姖灞¤晩绺炶垘鍐欏皠鎹ㄨ郸鏂滅叜绀剧礂鑰呰瑵杌婇伄铔囬偑鍊熷嫼灏烘潛鐏肩埖閰岄噲閷嫢瀵傚急鎯逛富鍙栧畧鎵嬫湵娈婄嫨鐝犵ó鑵叮閰掗鍎掑彈鍛鎺堟ü缍渶鍥氬弾鍛拷锟斤拷".split("");
+for(j = 0; j != D[142].length; ++j) if(D[142][j].charCodeAt(0) !== 0xFFFD) { e[D[142][j]] = 36352 + j; d[36352 + j] = D[142][j];}
+D[143] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷瀹楀氨宸炰慨鎰佹嬀娲茬绉嬬祩绻嶇繏鑷垷钂愯瑗茶異韫磋集閫遍厠閰泦閱滀粈浣忓厖鍗佸緭鎴庢煍姹佹笅鐛g甫閲嶉妰鍙斿瀹挎窇绁濈府绮涘【鐔熷嚭琛撹堪淇婂郴鏄ョ灛绔h垳椐垮噯寰棳妤畨娣筹拷婧栨饯鐩剧磾宸¢伒閱囬爢鍑﹀垵鎵�鏆戞洐娓氬憾绶掔讲鏇歌柉钘疯鍔╁彊濂冲簭寰愭仌閶ら櫎鍌峰劅鍕濆尃鍗囧彫鍝ㄥ晢鍞卞槜濂ㄥ濞煎灏嗗皬灏戝皻搴勫簥寤犲桨鎵挎妱鎷涙帉鎹锋槆鏄屾槶鏅舵澗姊㈡妯垫布娑堟笁婀樼劶鐒︾収鐥囩渷纭濈绁ョО绔犵瑧绮х垂鑲栬彇钂嬭晧琛濊3瑷熻瑭旇┏璞¤碁閱ら墻閸鹃悩闅滈灅涓婁笀涓炰箺鍐楀壈鍩庡牬澹屽甯告儏鎿炬潯鏉栨祫鐘剁暢绌h捀璀查喐閷犲槺鍩撮>锟斤拷锟�".split("");
+for(j = 0; j != D[143].length; ++j) if(D[143][j].charCodeAt(0) !== 0xFFFD) { e[D[143][j]] = 36608 + j; d[36608 + j] = D[143][j];}
+D[144] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鎷娈栫嚟绻旇伔鑹茶Е椋熻潟杈卞盎浼镐俊渚靛攪濞犲瘽瀵╁績鎱庢尟鏂版檵妫娴告繁鐢崇柟鐪熺绉︾闯鑷h姱钖Κ瑷鸿韩杈涢�查嚌闇囦汉浠佸垉濉靛,灏嬬敋灏借厧瑷婅繀闄i澀绗ヨ珡闋堥參鍥冲帹锟介�楀惞鍨傚弗鎺ㄦ按鐐婄潯绮嬬繝琛伴亗閰旈寪閷橀殢鐟為珓宕囧旦鏁版灑瓒ㄩ洓鎹潐妞欒弲闋楅泙瑁炬緞鎽哄涓栫�暆鏄噭鍒跺嫝濮撳緛鎬ф垚鏀挎暣鏄熸櫞妫叉爾姝f竻鐗茬敓鐩涚簿鑱栧0瑁借タ瑾犺獡璜嬮�濋啋闈掗潤鏂夌◣鑴嗛毣甯儨鎴氭枼鏄旀瀽鐭崇绫嶇妇鑴婅铂璧よ贰韫熺ⅸ鍒囨嫏鎺ユ憘鎶樿ō绐冪瘈瑾洩绲惰垖铦変粰鍏堝崈鍗犲灏傚皷宸濇垿鎵囨挵鏍撴牬娉夋祬娲楁煋娼滅厧鐓芥棆绌跨绶氾拷锟斤拷".split("");
+for(j = 0; j != D[144].length; ++j) if(D[144][j].charCodeAt(0) !== 0xFFFD) { e[D[144][j]] = 36864 + j; d[36864 + j] = D[144][j];}
+D[145] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绻婄鲸鑵鸿垱鑸硅枽瑭硯璺甸伕閬烽姯閵戦杻楫墠鍠勬几鐒跺叏绂呯箷鑶崇硯鍣屽宀ㄦ帾鏇炬浗妤氱嫏鐤忕枎绀庣绉熺矖绱犵祫铇囪ù闃婚仭榧犲儳鍓靛弻鍙㈠�夊柂澹鐖藉畫灞ゅ対鎯f兂鎹滄巸鎸挎幓锟芥搷鏃╂浌宸f妲芥紩鐕ヤ簤鐥╃浉绐撶碂绶忕稖鑱¤崏鑽樿懍钂艰椈瑁呰蛋閫侀伃閹楅湝楱掑儚澧楁啂鑷撹數璐堥�犱績鍋村墖鍗虫伅鎹夋潫娓冻閫熶織灞炶硦鏃忕稓鍗掕鍏舵弮瀛樺灏婃悕鏉戦仠浠栧澶卑瑭戝斁鍫曞Ε鎯版墦鏌佽埖妤曢檧椐勯è浣撳爢瀵捐�愬脖甯緟鎬犳厠鎴存浛娉版粸鑳庤吙鑻旇璨搁��閫殜榛涢瘺浠e彴澶х閱嶉榉规粷鐎у崜鍟勫畢鎵樻姙鎷撴并婵悽瑷楅惛婵佽鑼稿嚙铔稿彧锟斤拷锟�".split("");
+for(j = 0; j != D[145].length; ++j) if(D[145][j].charCodeAt(0) !== 0xFFFD) { e[D[145][j]] = 37120 + j; d[37120 + j] = D[145][j];}
+D[146] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍙╀絾閬旇景濂劚宸界杈挎璋风嫺楸堟ń瑾颁腹鍗樺槅鍧︽媴鎺㈡棪姝庢贰婀涚偔鐭绠痘鑰借儐铔嬭獣閸涘洠澹囧季鏂殩妾�娈电敺璜囧�ょ煡鍦板紱鎭ユ櫤姹犵棿绋氱疆鑷磋湗閬呴Τ绡夌暅绔圭瓚钃勶拷閫愮З绐掕尪瀚$潃涓徊瀹欏繝鎶芥樇鏌辨敞铏》瑷婚厧閶抽妯楃�︾尓鑻ц憲璨竵鍏嗗噵鍠嬪甯栧赋搴佸紨寮靛将寰存嚥鎸戞殺鏈濇疆鐗掔敽鐪鸿伌鑴硅吀铦惰璜滆秴璺抽姎闀烽爞槌ュ媴鎹楃洿鏈曟矆鐝嶈硟閹櫝娲ュ妞庢杩介帤鐥涢�氬鏍傛幋妲讳絻婕煒杈昏敠缍撮崝妞挎桨鍧7瀣船鐖悐閲i洞浜綆鍋滃伒鍓冭矠鍛堝牑瀹氬笣搴曞涵寤峰紵鎮屾姷鎸烘彁姊眬纰囩绋嬬窢鑹囪▊璜﹁箘閫擄拷锟斤拷".split("");
+for(j = 0; j != D[146].length; ++j) if(D[146][j].charCodeAt(0) !== 0xFFFD) { e[D[146][j]] = 37376 + j; d[37376 + j] = D[146][j];}
+D[147] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷閭搁劖閲橀紟娉ユ憳鎿㈡暤婊寸殑绗涢仼閺戞汉鍝插竟鎾よ綅杩墑鍏稿~澶╁睍搴楁坊绾忕敎璨艰虎椤涚偣浼濇婢辩敯闆诲厧鍚愬牭濉楀Μ灞犲緬鏂楁潨娓$櫥鑿熻抄閫旈兘閸嶇牓鐮哄姫搴﹀湡濂存�掑�掑厷鍐拷鍑嶅垁鍞愬濉樺瀹曞扯宥嬫偧鎶曟惌鏉辨姊兼鐩楁窐婀稕鐏噲褰撶棙绁风瓑绛旂瓛绯栫当鍒拌懀钑╄棨瑷庤瑒璞嗚笍閫冮�忛悪闄堕牠楱伴棙鍍嶅嫊鍚屽爞灏庢啩鎾炴礊鐬崇鑳磋悇閬撻妳宄犻磭鍖垮緱寰虫稖鐗圭潱绂跨姣掔嫭瑾爟姗″嚫绐佹ご灞婇扯鑻瘏閰夌�炲櫢灞儑鏁︽矊璞氶亖闋撳憫鏇囬垗濂堥偅鍐呬箥鍑枡璎庣仒鎹洪崑妤㈤Υ绺勭暦鍗楁杌熼洠姹濅簩灏煎紣杩╁寕璩戣倝铏瑰豢鏃ヤ钩鍏ワ拷锟斤拷".split("");
+for(j = 0; j != D[147].length; ++j) if(D[147][j].charCodeAt(0) !== 0xFFFD) { e[D[147][j]] = 37632 + j; d[37632 + j] = D[147][j];}
+D[148] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷濡傚翱闊换濡婂繊瑾嶆俊绂扮ア瀵ц懕鐚啽骞村康鎹绘挌鐕冪矘涔冨患涔嬪煖鍤㈡偐婵冪磵鑳借劤鑶胯静瑕楄殼宸存妸鎾鏉锋尝娲剧惗鐮村﹩缃佃姯棣砍寤冩嫕鎺掓晽鏉泝鐗岃儗鑲鸿缉閰嶅�嶅煿濯掓锟芥コ鐓ょ嫿璨峰2璩犻櫔閫欒澘绉ょ煣钀╀集鍓ュ崥鎷嶆煆娉婄櫧绠旂矔鑸惰杽杩洕婕犵垎绺涜帿椐侀害鍑界纭茬鑲囩瓐娅ㄥ埂鑲岀晳鐣犲叓閴㈡簩鐧洪啑楂紣缃版姕绛忛枼槌╁櫤濉欒洡闅间即鍒ゅ崐鍙嶅彌甯嗘惉鏂戞澘姘炬睅鐗堢姱鐝晹绻佽埇钘╄博绡勯噯鐓╅爳椋尳鏅╃暘鐩ょ钑冭洰鍖崙鍚﹀搴囧郊鎮叉墘鎵规姭鏂愭瘮娉岀柌鐨绉樼穻缃疯偉琚璨婚伩闈為妯嬬案鍌欏熬寰瀲姣樼惖鐪夌編锟斤拷锟�".split("");
+for(j = 0; j != D[148].length; ++j) if(D[148][j].charCodeAt(0) !== 0xFFFD) { e[D[148][j]] = 37888 + j; d[37888 + j] = D[148][j];}
+D[149] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷榧绘煀绋楀尮鐤嬮褰﹁啙鑿辫倶寮煎繀鐣㈢瓎閫兼¨濮獩绱愮櫨璎康褰姘锋紓鐡㈢エ琛ㄨ璞瑰粺鎻忕梾绉掕嫍閷ㄩ嫴钂滆洯榘搧褰枌娴滅�曡钵璩撻牷鏁忕摱涓嶄粯鍩犲か濠﹀瘜鍐ㄥ竷搴滄�栨壎鏁凤拷鏂ф櫘娴埗绗﹁厫鑶氳姍璀滆矤璩﹁荡闃滈檮渚挮姝﹁垶钁¤暘閮ㄥ皝妤撻ⅷ钁鸿晽浼忓壇寰╁箙鏈嶇鑵硅瑕嗘返寮楁墪娌镐粡鐗╅畳鍒嗗惢鍣村⒊鎲ゆ壆鐒氬ギ绮夌碁绱涢洶鏂囪仦涓欎降鍏靛骞e钩寮婃焺涓﹁斀闁夐櫅绫抽爜鍍诲鐧栫ⅶ鍒ョ灔钄戠畣鍋忓鐗囩瘒绶ㄨ竞杩旈亶渚垮媺濞╁紒闉繚鑸楅嫪鍦冩崟姝╃敨瑁滆紨绌傚嫙澧撴厱鎴婃毊姣嶇翱鑿╁�d扛鍖呭憜鍫卞瀹濆嘲宄穿搴栨姳鎹ф斁鏂规湅锟斤拷锟�".split("");
+for(j = 0; j != D[149].length; ++j) if(D[149][j].charCodeAt(0) !== 0xFFFD) { e[D[149][j]] = 38144 + j; d[38144 + j] = D[149][j];}
+D[150] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷娉曟场鐑圭牪绺優鑺宠悓钃渹瑜掕í璞婇偊閶掗=槌抽惮涔忎骸鍌嶅墫鍧婂Θ甯藉繕蹇欐埧鏆存湜鏌愭鍐掔础鑲啫璎�璨岃部閴鹃槻鍚犻牞鍖楀儠鍗滃ⅷ鎾叉湸鐗х潶绌嗛嚘鍕冩病娈嗗爛骞屽鏈炕鍑$泦锟芥懇纾ㄩ瓟楹诲煁濡规槯鏋氭瘞鍝╂骞曡啘鏋曢鏌鹃睊妗濅害淇e張鎶规湯娌縿渚弓楹夸竾鎱㈡簚婕敁鍛虫湭榄呭烦绠曞铂瀵嗚湝婀婅搼绋旇剤濡欑矋姘戠湢鍕欏あ鐒$墴鐭涢湩榈℃濠垮鍐ュ悕鍛芥槑鐩熻糠閵橀炒濮墲婊呭厤妫夌犊绶潰楹烘懜妯¤寕濡勫瓱姣涚寷鐩茬恫鑰楄挋鍎叉湪榛欑洰鏉㈠嬁椁呭挨鎴荤本璨板晱鎮剁磱闁�鍖佷篃鍐跺鐖鸿�堕噹寮ョ煝鍘勫焦绱勮柆瑷宠簫闈栨煶钖憮鎰夋剤娌圭檼锟斤拷锟�".split("");
+for(j = 0; j != D[150].length; ++j) if(D[150][j].charCodeAt(0) !== 0xFFFD) { e[D[150][j]] = 38400 + j; d[38400 + j] = D[150][j];}
+D[151] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷璜几鍞綉鍎媷鍙嬪骞芥偁鎲傛彇鏈夋煔婀ф秾鐚剁尫鐢辩瑁曡獦閬婇倯閮甸泟铻嶅浜堜綑涓庤獕杓块爯鍌辜濡栧搴告彋鎻烘搧鏇滄妲樻磱婧剁啍鐢ㄧ缇婅��钁夎搲瑕佽韪婇仴闄介鎱炬姂娆诧拷娌冩荡缈岀考娣�缇呰灪瑁告潵鑾遍牸闆锋礇绲¤惤閰贡鍗靛祼娆勬揩钘嶈槶瑕у埄鍚忓饱鏉庢ⅷ鐞嗙拑鐥㈣瑁¢噷闆㈤櫢寰嬬巼绔嬭憥鎺犵暐鍔夋祦婧滅悏鐣欑~绮掗殕绔滈緧渚舵叜鏃呰櫆浜嗕寒鍍氫浮鍑屽鏂欐娑肩専鐧傜灜绋滅厂鑹珤閬奸噺闄甸牁鍔涚窇鍊帢鏋楁穻鐕愮惓鑷ㄨ吉闅i睏楹熺憼濉佹稒绱浠や级渚嬪喎鍔卞逗鎬滅幉绀艰嫇閳撮毞闆堕湂楹楅舰鏆︽鍒楀姡鐑堣寤夋亱鎲愭迹鐓夌熬绶磋伅锟斤拷锟�".split("");
+for(j = 0; j != D[151].length; ++j) if(D[151][j].charCodeAt(0) !== 0xFFFD) { e[D[151][j]] = 38656 + j; d[38656 + j] = D[151][j];}
+D[152] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷钃�i尙鍛傞娅撶倝璩傝矾闇插姶濠佸粖寮勬湕妤兼娴紡鐗㈢嫾绡�佽伨铦嬮儙鍏簱绂勮倠閷茶珫鍊拰瑭辨璩勮剣鎯戞灎榉蹭簷浜橀皭瑭梺钑ㄦ婀剧鑵曪拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉紝涓愪笗涓副涓朵讣涓夸箓涔栦箻浜備簠璞簥鑸掑紞浜庝簽浜熶籂浜喊浜充憾浠庝粛浠勪粏浠備粭浠炰画浠熶环浼変綒浼颁經浣濅綏浣囦蕉渚堜緩渚樹交浣╀桨渚戜蒋渚嗕緰鍎樹繑淇熶繋淇樹繘淇戜繗淇愪郡淇ュ�氬�ㄥ�斿��ュ�呬紲淇跺�″�╁�烤淇�戝�嗗亙鍋囨渻鍋曞亹鍋堝仛鍋栧伂鍋稿個鍌氬倕鍌村偛锟斤拷锟�".split("");
+for(j = 0; j != D[152].length; ++j) if(D[152][j].charCodeAt(0) !== 0xFFFD) { e[D[152][j]] = 38912 + j; d[38912 + j] = D[152][j];}
+D[153] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍍夊儕鍌冲儌鍍栧優鍍ュ儹鍍e儺鍍瑰兊鍎夊剚鍎傚剸鍎曞剶鍎氬劇鍎哄劮鍎煎劵鍎垮厐鍏掑厡鍏斿參绔稿叐鍏叜鍐�鍐傚洏鍐屽唹鍐忓啈鍐撳啎鍐栧啢鍐﹀啟鍐╁啰鍐喅鍐卞啿鍐板喌鍐藉噮鍑夊嚊鍑犺檿鍑╁嚟锟藉嚢鍑靛嚲鍒勫垕鍒斿垘鍒у埅鍒埑鍒瑰墢鍓勫墜鍓屽墳鍓斿壀鍓村墿鍓冲壙鍓藉妽鍔斿姃鍓卞妶鍔戣鲸杈у姮鍔娂鍔靛媮鍕嶅嫍鍕炲嫞鍕﹂-鍕犲嫵鍕靛嫺鍕瑰寙鍖堢敻鍖嶅寪鍖忓寱鍖氬專鍖尡鍖冲尭鍗�鍗嗗崊涓楀崏鍗嶅嚃鍗炲崺鍗鍗诲嵎鍘傚帠鍘犲帵鍘ュ幃鍘板幎鍙冪皰闆欏彑鏇肩嚠鍙彣鍙徍鍚佸惤鍛�鍚惌鍚煎惍鍚跺惄鍚濆憥鍜忓懙鍜庡憻鍛卞懛鍛板拻鍛诲拃鍛跺拕鍜愬拞鍝囧挗鍜稿挜鍜搫鍝堝挩锟斤拷锟�".split("");
+for(j = 0; j != D[153].length; ++j) if(D[153][j].charCodeAt(0) !== 0xFFFD) { e[D[153][j]] = 39168 + j; d[39168 + j] = D[153][j];}
+D[154] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍜搨鍜ゅ捑鍜煎摌鍝ュ摝鍞忓敂鍝藉摦鍝摵鍝㈠敼鍟�鍟e晫鍞暅鍟呭晼鍟楀敻鍞冲暆鍠欏杸鍜枈鍠熷暬鍟惧枠鍠炲柈鍟煎杻鍠╁枃鍠ㄥ棜鍡呭棢鍡勫棞鍡ゅ棓鍢斿椃鍢栧椌鍡藉槢鍡瑰檸鍣愮嚐鍢村樁鍢插樃锟藉櫕鍣ゅ槸鍣櫔鍤嗗殌鍤婂殸鍤斿殢鍤ュ毊鍤跺毚鍥傚毤鍥佸泝鍥�鍥堝泿鍥戝洆鍥楀洰鍥瑰渶鍥垮渼鍦夊湀鍦嬪湇鍦撳湗鍦栧棁鍦滃湨鍦峰湼鍧庡溁鍧�鍧忓潻鍩�鍨堝潯鍧垮瀴鍨撳灎鍨冲灓鍨灠鍩冨焼鍩斿煉鍩撳爦鍩栧煟鍫嬪牂鍫濆〔鍫″、濉嬪“姣�濉掑牻濉瑰澧瑰澧⒑澹炲⒒澧稿澹呭澹戝澹欏澹ュ澹ゅ澹:澹瑰;澹煎=澶傚澶愬姊﹀ぅ澶き澶插じ澶剧珤濂曞濂庡濂樺ア濂犲ェ濂ォ锟斤拷锟�".split("");
+for(j = 0; j != D[154].length; ++j) if(D[154][j].charCodeAt(0) !== 0xFFFD) { e[D[154][j]] = 39424 + j; d[39424 + j] = D[154][j];}
+D[155] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷濂稿濡濅綖渚Γ濡插濮ㄥ濡嶅濮氬ē濞熷☉濞滃▔濞氬﹢濠濞靛ǘ濠㈠┆濯氬濯惧珛瀚傚瀚e珬瀚﹀瀚栧瀚诲瑢瀣嬪瑬瀣插珢瀣瀣惧瓋瀛呭瓈瀛戝瓡瀛氬瓫瀛ュ瀛板瀛靛鏂堝瀹�锟藉畠瀹﹀瀵冨瘒瀵夊瘮瀵愬瀵﹀瀵炲瀵瀵跺灏呭皣灏堝皪灏撳盃灏㈠皑灏稿肮灞佸眴灞庡睋灞愬睆瀛卞爆灞耿灞跺惫宀屽矐宀斿宀不宀跺布宀峰硡宀惧硣宄欏畅宄藉澈宄秾宄磱宕曞礂宓滃礋宕涘磻宕斿储宕氬礄宕樺祵宓掑祹宓嬪惮宓冲刀宥囧秳宥傚盯宥濆冬宥督宥愬斗宥煎穳宸嶅窊宸掑窎宸涘帆宸插返甯嬪笟甯欏笐甯涘付甯峰箘骞冨箑骞庡箺骞斿篃骞㈠工骞囧沟骞跺购楹煎箍搴犲粊寤傚粓寤愬粡锟斤拷锟�".split("");
+for(j = 0; j != D[155].length; ++j) if(D[155][j].charCodeAt(0) !== 0xFFFD) { e[D[155][j]] = 39680 + j; d[39680 + j] = D[155][j];}
+D[156] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷寤栧唬寤濆粴寤涘虎寤″花寤╁滑寤卞怀寤板淮寤稿痪寮冨級褰濆綔寮嬪紤寮栧缉寮几褰佸綀褰屽綆寮綉褰栧綏褰欏健褰匠褰峰緝寰傚娇寰婂緢寰戝緡寰炲緳寰樺緺寰ㄥ经寰煎繓蹇诲郡蹇稿勘蹇濇偝蹇挎�℃仩锟芥�欐�愭�╂�庢�辨�涙�曟��︽�忔�烘仛鎭佹仾鎭锋仧鎭婃亞鎭嶆仯鎭冩仱鎭傛伂鎭仚鎮佹倣鎯ф們鎮氭倓鎮涙倴鎮楁倰鎮ф倠鎯℃偢鎯犳儞鎮村堪鎮芥儐鎮垫儤鎱嶆剷鎰嗘兌鎯锋剙鎯存兒鎰冩劇鎯绘儽鎰嶆剮鎱囨劸鎰ㄦ劎鎱婃効鎰兼劕鎰存劷鎱傛厔鎱虫叿鎱樻厵鎱氭叓鎱存叝鎱ユ叡鎱熸厺鎱撴叺鎲欐問鎲囨啲鎲旀啔鎲婃啈鎲啴鎳屾噴鎳夋嚪鎳堟噧鎳嗘喓鎳嬬焦鎳嶆嚘鎳f嚩鎳烘嚧鎳挎嚱鎳兼嚲鎴�鎴堟垑鎴嶆垖鎴旀垱锟斤拷锟�".split("");
+for(j = 0; j != D[156].length; ++j) if(D[156][j].charCodeAt(0) !== 0xFFFD) { e[D[156][j]] = 39936 + j; d[39936 + j] = D[156][j];}
+D[157] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鎴炴垺鎴埉鎴版埐鎴虫墎鎵庢墳鎵f墰鎵犳墾鎵兼妭鎶夋壘鎶掓姄鎶栨嫈鎶冩姅鎷楁嫅鎶绘嫃鎷挎媶鎿旀媹鎷滄媽鎷婃媯鎷囨姏鎷夋寣鎷嫳鎸ф寕鎸堟嫰鎷垫崘鎸炬崓鎼滄崗鎺栨帋鎺�鎺嵍鎺f帍鎺夋師鎺垫崼锟芥崺鎺炬彥鎻�鎻嗘彛鎻夋彃鎻舵弰鎼栨惔鎼嗘悡鎼︽惗鏀濇悧鎼ㄦ悘鎽ф懐鎽舵憥鏀挄鎾撴挜鎾╂拡鎾兼摎鎿掓搮鎿囨捇鎿樻搨鎿辨摟鑸夋摖鎿℃姮鎿f摨鏀摱鎿存摬鎿烘攢鎿芥敇鏀滄攨鏀ゆ敚鏀敶鏀垫敺鏀舵敻鐣嬫晥鏁栨晻鏁嶆晿鏁炴暆鏁叉暩鏂傛杻璁婃枦鏂熸柅鏂锋梼鏃嗘梺鏃勬棇鏃掓棝鏃欐棤鏃℃棻鏉叉槉鏄冩椈鏉虫樀鏄舵槾鏄滄檹鏅勬檳鏅佹櫈鏅濇櫎鏅ф櫒鏅熸櫌鏅版殐鏆堟殠鏆夋殑鏆樻殱鏇佹毠鏇夋毦鏆硷拷锟斤拷".split("");
+for(j = 0; j != D[157].length; ++j) if(D[157][j].charCodeAt(0) !== 0xFFFD) { e[D[157][j]] = 40192 + j; d[40192 + j] = D[157][j];}
+D[158] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鏇勬毟鏇栨洑鏇犳樋鏇︽洨鏇版浀鏇锋湉鏈栨湠鏈︽湩闇告湲鏈挎湺鏉佹湼鏈锋潌鏉炴潬鏉欐潱鏉ゆ瀴鏉版灘鏉兼潽鏋屾瀷鏋︽灐鏋呮灧鏌灤鏌灣鏌╂灨鏌ゆ煘鏌濇煝鏌灩鏌庢焼鏌ф獪鏍炴鏍╂妗嶆牪妗庯拷姊虫牜妗欐。妗锋】姊熸姊姊濇姊冩姊规〈姊垫姊烘姊嶆【妞佹妞堟妞㈡う妫℃妫嶆妫ф妞舵妞勬妫fぅ妫规妫え妞妞fぁ妫嗘ス妤锋妤告カ妤旀ゾ妤す妤存そ妤欐ぐ妤℃妤濇妤Σ姒姒挎妲撴妲庡妲婃姒绘姒фó姒戞姒滄姒存妲ㄦ▊妯涙Э娆婃Ч妲叉Ё妯呮Ρ妯炴Л妯旀Й妯婃♁娅佹ǎ妯撴﹦妯屾┎妯舵└姗囨姗欐│姗堟ǜ妯㈡獝妾嶆獱妾勬妾o拷锟斤拷".split("");
+for(j = 0; j != D[158].length; ++j) if(D[158][j].charCodeAt(0) !== 0xFFFD) { e[D[158][j]] = 40448 + j; d[40448 + j] = D[158][j];}
+D[159] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷妾楄槜妾绘珒娅傛妾虫娅炴珣娅熸娅氭娅绘瑓铇栨娆掓瑬楝辨瑹娆告鐩滄椋瓏姝冩瓑姝愭瓩姝旀瓫姝熸姝告姝挎畝娈勬畠娈嶆畼娈曟疄娈ゆ娈娈叉娈虫娈兼瘑姣嬫瘬姣熸姣姣拷楹炬皥姘撴皵姘涙挨姘f睘姹曟雹姹矀娌嶆矚娌佹矝姹炬报姹虫矑娌愭硠娉辨硴娌芥硹娉呮碀娌脖娌炬埠娉涙朝娉欐唱娲熻娲舵传娲芥锤娲欐吹娲虫磼娲屾担娑撴丹娴氭倒娴欐稁娑曟郡娑呮饭娓曟笂娑垫穱娣︽陡娣嗘番娣炴穼娣ㄦ窉娣呮泛娣欐筏娣曟藩娣腑婀府娓欐共婀熸妇娓f公娓苟婀嶆笩婀冩负婀庢袱婊挎笣娓告簜婧簶婊夋悍婊撴航婧粍婧叉粩婊曟簭婧ユ粋婧熸絹婕戠亴婊桓婊炬伎婊叉急婊疾婊岋拷锟斤拷".split("");
+for(j = 0; j != D[159].length; ++j) if(D[159][j].charCodeAt(0) !== 0xFFFD) { e[D[159][j]] = 40704 + j; d[40704 + j] = D[159][j];}
+D[224] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷婕炬紦婊锋締娼烘礁婢佹線娼經婵虫江婢傛郊娼樻編婢戞總娼︽境婢f尽婢ゆ竟婵嗘惊婵熸繒婵繑婵樻勘婵繘鐎夌�嬫亢鐎戠�佺�忔烤鐎涚�氭酱鐎濈�樼�熺�扮�剧�茬亼鐏g倷鐐掔偗鐑辩偓鐐哥偝鐐儫鐑嬬儩锟界儥鐒夌兘鐒滅剻鐓ョ厱鐔堢叇鐓㈢厡鐓栫叕鐔忕嚮鐔勭啎鐔ㄧ啲鐕楃喒鐔剧噿鐕夌嚁鐕庣嚑鐕嚙鐕电嚰鐕圭嚳鐖嶇垚鐖涚埁鐖埇鐖扮埐鐖荤埣鐖跨墍鐗嗙墜鐗樼壌鐗剧妭鐘佺妵鐘掔姈鐘㈢姧鐘圭姴鐙冪媶鐙勭嫀鐙掔嫝鐙犵嫛鐙圭嫹鍊忕寳鐚婄寽鐚栫対鐚寸尟鐚╃尌鐚剧崕鐛忛粯鐛楃崻鐛ㄧ嵃鐛哥嵉鐛荤嵑鐝堢幊鐝庣幓鐝�鐝ョ彯鐝炵挗鐞呯懐鐞ョ徃鐞茬惡鐟曠惪鐟熺憴鐟佺憸鐟╃懓鐟g應鐟剁懢鐠嬬挒鐠х搳鐡忕摂鐝憋拷锟斤拷".split("");
+for(j = 0; j != D[224].length; ++j) if(D[224][j].charCodeAt(0) !== 0xFFFD) { e[D[224][j]] = 57344 + j; d[57344 + j] = D[224][j];}
+D[225] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐡犵摚鐡х摡鐡摬鐡扮摫鐡哥摲鐢勭攦鐢呯攲鐢庣攳鐢曠敁鐢炵敠鐢敿鐣勭晬鐣婄晧鐣涚晢鐣氱暕鐣ょ暓鐣暛鐣哥暥鐤嗙枃鐣寸枈鐤夌杺鐤旂枤鐤濈枼鐤g梻鐤崇梼鐤电柦鐤哥柤鐤辩棈鐥婄棐鐥欑棧鐥炵椌鐥匡拷鐥肩榿鐥扮椇鐥茬棾鐦嬬槏鐦夌槦鐦х槧鐦$槩鐦ょ槾鐦扮樆鐧囩檲鐧嗙櫆鐧樼櫋鐧㈢櫒鐧╃櫔鐧х櫖鐧扮櫜鐧剁櫢鐧肩殌鐨冪殘鐨嬬殠鐨栫殦鐨欑殮鐨扮毚鐨哥毠鐨虹泜鐩嶇洊鐩掔洖鐩$洢鐩х洩铇浕鐪堢渿鐪勭湬鐪ょ湠鐪ョ湨鐪涚湻鐪哥潎鐫氱潹鐫潧鐫ョ澘鐫剧澒鐬庣瀷鐬戠灎鐬炵灠鐬剁灩鐬跨灱鐬界灮鐭囩煃鐭楃煔鐭滅煟鐭熂鐮岀爳绀︾牋绀纰庣〈纰嗙〖纰氱纰g⒌纰纾戠纾嬬纰剧⒓纾呯纾拷锟斤拷".split("");
+for(j = 0; j != D[225].length; ++j) if(D[225][j].charCodeAt(0) !== 0xFFFD) { e[D[225][j]] = 57600 + j; d[57600 + j] = D[225][j];}
+D[226] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷纾х纾界4绀囩绀戠绀か绁�绁犵绁熺绁曠绁虹タ绂婄绂ч綃绂Ξ绂崇绂虹绉曠Ё绉А绉g▓绋嶇绋欑绋熺绋辩ɑ绋剧ǚ绌冪绌夌绌㈢┅榫濈┌绌圭┙绐堢獥绐曠獦绐栫绔堢锟界绔呯珓绐块們绔囩珚绔嶇珡绔曠珦绔欑珰绔濈绔㈢绔绗傜瑥绗婄瑔绗崇瑯绗欑瑸绗电绗剁瓙绛虹瑒绛嶇瑡绛岀瓍绛电绛寸绛扮绛绠濈畼绠熺畭绠滅畾绠嬬畳绠忕瓭绠欑瘚绡佺瘜绡忕绡嗙瘽绡╃皯绨旂绡ョ睜绨�绨囩皳绡崇绨楃皪绡剁埃绨х蔼绨熺胺绨敖绫岀眱绫旂睆绫�绫愮睒绫熺堡绫栫饱绫钡绮冪矏绮ょ箔绮㈢搏绮$波绮崇膊绮辩伯绮圭步绯�绯呯硞绯樼硳绯滅尝楝荤朝绯茬炒绯剁澈绱嗭拷锟斤拷".split("");
+for(j = 0; j != D[226].length; ++j) if(D[226][j].charCodeAt(0) !== 0xFFFD) { e[D[226][j]] = 57856 + j; d[57856 + j] = D[226][j];}
+D[227] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绱傜礈绱曠磰绲呯祴绱床绱跨吹绲嗙党绲栫祹绲茬胆绲祻绲g稉缍夌禌缍忕到缍涚逗缍叮缍电穱缍界东绺界盯缍窚缍哥稛缍扮窐绶濈筏绶炵坊绶茬贰绺呯笂绺g浮绺掔副绺熺笁绺嬬涪绻嗙功绺荤傅绺圭箖绺凤拷绺茬负绻х節绻栫篂绻欑箽绻圭躬绻╃辜绻荤簝绶曠菇杈箍绾堢簤绾岀簰绾愮簱绾旂簴绾庣簺绾滅几缂虹絽缃岀綅缃庣綈缃戠綍缃旂綐缃熺綘缃ㄧ僵缃х礁缇傜締缇冪緢缇囩緦缇旂緸缇濈練缇g警缇茬竟缇径缇歌缈呯繂缈婄繒缈旂俊缈︾咯缈崇抗椋滆�嗚�勮�嬭�掕�樿�欒�滆�¤�ㄨ�胯�昏亰鑱嗚亽鑱樿仛鑱熻仮鑱ㄨ伋鑱茶伆鑱惰伖鑱借伩鑲勮倖鑲呰倹鑲撹倸鑲啇鑲儧鑳ヨ儥鑳濊儎鑳氳儢鑴夎儻鑳辫剾鑴╄劊鑴厠锟斤拷锟�".split("");
+for(j = 0; j != D[227].length; ++j) if(D[227][j].charCodeAt(0) !== 0xFFFD) { e[D[227][j]] = 58112 + j; d[58112 + j] = D[227][j];}
+D[228] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷闅嬭厗鑴捐厯鑵戣兗鑵辫叜鑵ヨ叇鑵磋唭鑶堣唺鑶�鑶傝啝鑶曡啢鑶h厽鑶撹啯鑶拌喌鑶捐喐鑶借噣鑷傝喓鑷夎噸鑷戣嚈鑷樿噲鑷氳嚐鑷犺嚙鑷鸿嚮鑷捐垇鑸傝垍鑸囪垔鑸嶈垚鑸栬埄鑸埜鑸宠墍鑹欒墭鑹濊墯鑹熻墹锟借墷鑹ㄨ壀鑹埉鑹辫壏鑹歌壘鑺嶈姃鑺姛鑺昏姮鑻¤嫞鑻熻嫆鑻磋嫵鑻鸿帗鑼冭嫽鑻硅嫗鑼嗚嫓鑼夎嫏鑼佃尨鑼栬尣鑼辫崁鑼硅崘鑽呰尟鑼寳鑼樿巺鑾氳帾鑾熻帰鑾栬專鑾庤巼鑾婅嵓鑾佃嵆鑽佃帬鑾夎帹鑿磋悡鑿弾鑿借悆鑿樿悑鑿佽彿钀囪彔鑿茶悕钀㈣悹鑾借惛钄嗚徎钁惇钀艰暁钂勮懛钁挱钁拏钁╄憜钀懐钁硅惖钃婅憿钂硅捒钂熻摍钃嶈捇钃氳搻钃佽搯钃栬挕钄¤摽钃磋敆钄樿敩钄熻敃钄旇摷钑�钑h晿钑堬拷锟斤拷".split("");
+for(j = 0; j != D[228].length; ++j) if(D[228][j].charCodeAt(0) !== 0xFFFD) { e[D[228][j]] = 58368 + j; d[58368 + j] = D[228][j];}
+D[229] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷钑佽槀钑嬭晻钖�钖よ枅钖戣枈钖ㄨ暛钖旇枦钘枃钖滆暦钑捐枑钘夎柡钘忚柟钘愯棔钘濊棩钘滆椆铇婅槗铇嬭椌钘鸿槅铇㈣槡铇拌樋铏嶄箷铏旇櫉铏ц櫛铓撹殻铓╄毆铓嬭殞铓惰毌铔勮泦铓拌泬锠h毇铔旇洖铔╄洭锟借洘铔涜洴铚掕渾铚堣渶铚冭浕铚戣湁铚嶈浌铚婅湸铚胯湻铚昏湧铚╄湚铦犺潫铦歌潓铦庤澊铦楄潹铦潤铦撹潱铦爡铻㈣灍铻傝灟锜嬭灲锜�锜愰洊铻焺铻宠焽锜嗚灮锜煵锜犺爮锠嶈熅锜惰煼锠庤煉锠戣爾锠曡牏锠¤牨锠惰牴锠ц牷琛勮琛掕琛炶、琛琛捐琛佃〗琚佃〔琚傝琚掕琚欒ⅱ琚嶈ⅳ琚拌⒖琚辫瑁勮瑁樿瑁濊9瑜傝<瑁磋(瑁茶瑜岃瑜撹瑜炶ぅ瑜か瑗佽瑜昏ざ瑜歌瑜濊瑗烇拷锟斤拷".split("");
+for(j = 0; j != D[229].length; ++j) if(D[229][j].charCodeAt(0) !== 0xFFFD) { e[D[229][j]] = 58624 + j; d[58624 + j] = D[229][j];}
+D[230] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷瑗﹁イ瑗オ瑗ゴ瑗疯ゾ瑕冭瑕婅瑕樿Α瑕╄Ζ瑕Ο瑕茶瑕借瑙�瑙氳瑙濊Ё瑙磋Ц瑷冭瑷愯▽瑷涜瑷ヨǘ瑭佽瑭掕﹩瑭堣┘瑭┈瑭㈣獏瑾傝獎瑾ㄨ瑾戣瑾﹁獨瑾h珓璜嶈珎璜氳璜宠锟借璜辫瑪璜犺璜疯珵璜涜瑢璎囪瑲璜¤瑬璎愯瑮璎犺闉璎璎ㄨ瓉璀岃瓘璀庤瓑璀栬瓫璀氳璀熻璀璀借畝璁岃畮璁掕畵璁栬畽璁氳昂璞佽翱璞堣睂璞庤睈璞曡雹璞备璞鸿矀璨夎矃璨婅矋璨庤矓璞艰矘鎴濊箔璨步璨茶渤璨捕璩堣硜璩よ常璩氳辰璩鸿郴璐勮磪璐婅磭璐忚磵璐愰綆璐撹硩璐旇礀璧ц淡璧辫党瓒佽稒璺傝毒瓒鸿窂璺氳窎璺岃窙璺嬭藩璺窡璺h芳韪堣笁璺胯笣韪炶笎韪熻箓韪佃赴韪磋箠锟斤拷锟�".split("");
+for(j = 0; j != D[230].length; ++j) if(D[230][j].charCodeAt(0) !== 0xFFFD) { e[D[230][j]] = 58880 + j; d[58880 + j] = D[230][j];}
+D[231] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷韫囪箟韫岃箰韫堣箼韫よ範韪梗韫曡苟韫茶辜韬佽簢韬呰簞韬嬭簥韬撹簯韬旇簷韬骸韬喊杌嗚罕韬捐粎杌堣粙杌涜唬杌艰换杌痪杓婅紖杓曡紥杓欒紦杓滆紵杓涜紝杓﹁汲杓昏脊杞呰絺杓捐綄杞夎絾杞庤綏杞滐拷杞㈣剑杞よ緶杈熻荆杈警杈疯繗杩ヨ竣杩刊閭囪看閫呰抗杩洪�戦�曢�¢�嶉�為�栭�嬮�ч�堕�甸�硅扛閬忛亹閬戦亽閫庨亯閫鹃仏閬橀仦閬ㄩ伅閬堕毃閬查倐閬介倎閭�閭婇倝閭忛偍閭偙閭甸儮閮ゆ増閮涢剛閯掗剻閯查劙閰婇厲閰橀叄閰ラ叐閰抽叢閱嬮唹閱傞啟閱啹閱喌閱撮喓閲�閲侀噳閲嬮噽閲栭嚐閲¢嚊閲奸嚨閲堕垶閲块垟閳垥閳戦墳閴楅墔閴夐墹閴堥姇閳块墜閴愰姕閵栭姄閵涢墯閶忛姽閵烽嫨閷忛嫼閸勯尞锟斤拷锟�".split("");
+for(j = 0; j != D[231].length; ++j) if(D[231][j].charCodeAt(0) !== 0xFFFD) { e[D[231][j]] = 59136 + j; d[59136 + j] = D[231][j];}
+D[232] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷閷欓將閷氶專閷洪尩閷婚崪閸犻嵓閸崠閹伴幀閹帞閹归彇閺楅彣閺ラ彉閺冮彎閺愰張閺ら悮閻旈悡閻冮悋閻愰惗閻惖閻¢惡閼侀憭閼勯憶閼犻憿閼為應閳╅懓閼甸懛閼介憵閼奸懢閽侀懣闁傞枃闁婇枖闁栭枠闁欙拷闁犻枿闁ч柇闁奸柣闁归柧闂婃慷闂冮棈闂岄棔闂旈棖闂滈棥闂ラ棦闃¢槰闃槸闄傞檶闄忛檵闄烽櫆闄為櫇闄熼櫐闄查櫖闅嶉殬闅曢殫闅毀闅遍毑闅伴毚闅堕毟闅归泿闆嬮泬闆嶈闆滈湇闆曢浌闇勯渾闇堥湏闇庨湋闇忛湒闇欓湦闇湴闇归溄闇鹃潉闈嗛潏闈傞潐闈滈潬闈ら潶闈ㄥ嫆闈澅闈归瀰闈奸瀬闈洪瀱闉嬮瀼闉愰灉闉ㄩ灕闉i灣闉撮焹闊嗛焾闊嬮煖闊綇闊茬珶闊堕煹闋忛爩闋搁牑闋¢牱闋介椤忛椤’椤帮拷锟斤拷".split("");
+for(j = 0; j != D[232].length; ++j) if(D[232][j].charCodeAt(0) !== 0xFFFD) { e[D[232][j]] = 59392 + j; d[59392 + j] = D[232][j];}
+D[233] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷椤遍〈椤抽ⅹ棰⒈棰堕椋冮椋╅+椁冮椁掗椁橀ぁ椁濋椁ら椁ぎ椁介ぞ楗傞楗呴楗嬮楗掗楗曢棣橀Ε棣Ξ棣奸椐涢椐橀椐М椐遍Р椐婚Ц楱侀◤楱呴Б楱欓ǐ楱烽﹨椹傞﹢椹冿拷楱鹃椹嶉椹楅椹㈤━椹ら┅椹┆楠楠奸珋楂忛珣楂撻珨楂為珶楂㈤楂﹂楂楂撮楂烽楝嗛瑯楝氶瑹楝㈤楝ラ楝ㄩ楝楝榄勯瓋榄忛瓖榄庨瓚榄橀楫撻畠楫戦畺楫楅疅楫犻楫撮瘈榀婇榀嗛瘡榀戦瘨榀i榀ら瘮榀¢昂榀查榀伴皶榘旈皦榘撻皩榘嗛皥榘掗皧榘勯爱榘涢哎榘ら啊榘伴眹榘查眴榘鹃睔楸犻抱楸堕备槌ч超槌伴磯榇堥倡榇冮磫榇处槎矗榇熼祫榇曢磼榈侀纯榇鹃祮榈堬拷锟斤拷".split("");
+for(j = 0; j != D[233].length; ++j) if(D[233][j].charCodeAt(0) !== 0xFFFD) { e[D[233][j]] = 59648 + j; d[59648 + j] = D[233][j];}
+D[234] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷榈濋禐榈ら祽榈愰禉榈查秹槎囬东榈岛槎氶钉槎╅恫榉勯穪槎婚陡槎洪穯榉忛穫榉欓窊榉搁乏榉矾榉介笟楦涢笧楣甸构楣介簛楹堥簨楹岄簰楹曢簯楹濋亥楹╅焊楹涵闈¢粚榛庨粡榛愰粩榛滈粸榛濋粻榛ラ花榛拷榛撮欢榛烽还榛婚患榛介紘榧堢毞榧曢肌榧季榻婇綊榻旈剑榻熼綘榻¢溅榻ч浆榻椒榻查蕉榫曢緶榫犲牤妲囬仚鐟ゅ嚋鐔欙拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷".split("");
+for(j = 0; j != D[234].length; ++j) if(D[234][j].charCodeAt(0) !== 0xFFFD) { e[D[234][j]] = 59904 + j; d[59904 + j] = D[234][j];}
+D[237] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绾婅閸堥妶钃滀繅鐐绘槺妫堥嫻鏇诲絽涓ㄤ弧浠间紑浼冧脊浣栦緬渚婁練渚斾繊鍋�鍊靠鍊炲亞鍋板亗鍌斿兇鍍樺厞鍏ゅ啙鍐惧嚞鍒曞姕鍔﹀媭鍕涘寑鍖囧尋鍗插帗鍘插彎铷庡挏鍜婂挬鍝垮枂鍧欏潵鍨焾鍩囷◤锟斤◥澧炲⒉澶嬪濂涘濂eΔ濡哄瓥瀵�鐢瘶瀵盀宀﹀埠宄靛揣宓擄☉宓傚淡宥稿豆宸愬肌寮村涧寰峰繛鎭濇倕鎮婃優鎯曟劆鎯叉剳鎰锋劙鎲樻垞鎶︽彽鎽犳挐鎿庢晭鏄�鏄曟樆鏄夋槷鏄炴槫鏅ユ櫁鏅欙♁鏅虫殭鏆犳毑鏆挎浐鏈庯ぉ鏉︽灮妗掓焵鏍佹妫忥〒妤〝姒樻Б妯版┇姗嗘┏姗炬娅ゆ瘱姘挎睖娌嗘悲娉氭磩娑囨弹娑栨冬娣忔犯娣叉芳娓规箿娓ф讣婧挎緢婢垫康鐎呯�囩�ㄧ倕鐐剰鐒勭厹鐓嗙厙铷曠噥鐕剧姳锟斤拷锟�".split("");
+for(j = 0; j != D[237].length; ++j) if(D[237][j].charCodeAt(0) !== 0xFFFD) { e[D[237][j]] = 60672 + j; d[60672 + j] = D[237][j];}
+D[238] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐘剧尋铷栫嵎鐜界弶鐝栫彛鐝掔悋鐝电惁鐞惄鐞憿鐠夌挓鐢佺暞鐨傜殰鐨炵殯鐨︼鐫嗗姱鐮$纭ょ『绀帮铷欙绂旓绂涚珣绔э绔疄铷濈祱绲滅斗缍犵窎绻掔絿缇★鑼佽崲鑽胯弴鑿惰憟钂磋晸钑欙拷钑钖帮铷¤爣瑁佃♁瑷疯┕瑾ц璜燂á璜惰瓝璀胯嘲璩磋磼璧讹ǎ杌忥à铷ラ仹閮烇é閯曢劎閲氶嚄閲為嚟閲嚖閲ラ垎閳愰垔閳洪墍閳奸墡閴欓墤閳归墽閵ч壏閴搁嫥閶楅嫏閶愶ě閶曢嫚閶撻尌閷¢嫽铷ㄩ尀閶块対閷傞嵃閸楅帳閺嗛彏閺搁惐閼呴憟闁掞铷╅殱闅湷闇婚潈闈嶉潖闈戦潟椤楅ˉ铷ǐ椁эì棣為楂欓珳榄甸楫忛楫婚皜榈伴但铷笝榛戯拷锟解叞鈪扁叢鈪斥叴鈪碘叾鈪封吀鈪癸竣锟わ紘锛傦拷锟斤拷".split("");
+for(j = 0; j != D[238].length; ++j) if(D[238][j].charCodeAt(0) !== 0xFFFD) { e[D[238][j]] = 60928 + j; d[60928 + j] = D[238][j];}
+D[250] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鈪扳叡鈪测叧鈪粹叺鈪垛叿鈪糕吂鈪犫叀鈪⑩叄鈪も叆鈪︹収鈪ㄢ叐锟郡锛囷紓銏扁剸鈩♀埖绾婅閸堥妶钃滀繅鐐绘槺妫堥嫻鏇诲絽涓ㄤ弧浠间紑浼冧脊浣栦緬渚婁練渚斾繊鍋�鍊靠鍊炲亞鍋板亗鍌斿兇鍍樺厞锟藉叅鍐濆喚鍑垥鍔滃姦鍕�鍕涘寑鍖囧尋鍗插帗鍘插彎铷庡挏鍜婂挬鍝垮枂鍧欏潵鍨焾鍩囷◤铷愬澧插濂撳濂濆ィ濡ゅ瀛栧瘈鐢瘶瀵盀宀﹀埠宄靛揣宓擄☉宓傚淡宥稿豆宸愬肌寮村涧寰峰繛鎭濇倕鎮婃優鎯曟劆鎯叉剳鎰锋劙鎲樻垞鎶︽彽鎽犳挐鎿庢晭鏄�鏄曟樆鏄夋槷鏄炴槫鏅ユ櫁鏅欙♁鏅虫殭鏆犳毑鏆挎浐鏈庯ぉ鏉︽灮妗掓焵鏍佹妫忥〒妤〝姒樻Б妯版┇姗嗘┏姗炬娅ゆ瘱姘挎睖娌嗘悲娉氭磩娑囨弹锟斤拷锟�".split("");
+for(j = 0; j != D[250].length; ++j) if(D[250][j].charCodeAt(0) !== 0xFFFD) { e[D[250][j]] = 64000 + j; d[64000 + j] = D[250][j];}
+D[251] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷娑栨冬娣忔犯娣叉芳娓规箿娓ф讣婧挎緢婢垫康鐎呯�囩�ㄧ倕鐐剰鐒勭厹鐓嗙厙铷曠噥鐕剧姳鐘剧尋铷栫嵎鐜界弶鐝栫彛鐝掔悋鐝电惁鐞惄鐞憿鐠夌挓鐢佺暞鐨傜殰鐨炵殯鐨︼鐫嗗姱鐮$纭ょ『绀帮铷欙拷铷氱铷涚绔戠铷滅绠烇绲堢禍缍风稜绶栫箳缃囩尽铷炶寔鑽㈣嵖鑿囪彾钁堣挻钑撹暀钑钖帮铷¤爣瑁佃♁瑷疯┕瑾ц璜燂á璜惰瓝璀胯嘲璩磋磼璧讹ǎ杌忥à铷ラ仹閮烇é閯曢劎閲氶嚄閲為嚟閲嚖閲ラ垎閳愰垔閳洪墍閳奸墡閴欓墤閳归墽閵ч壏閴搁嫥閶楅嫏閶愶ě閶曢嫚閶撻尌閷¢嫽铷ㄩ尀閶块対閷傞嵃閸楅帳閺嗛彏閺搁惐閼呴憟闁掞铷╅殱闅湷闇婚潈闈嶉潖闈戦潟椤楅ˉ铷ǐ椁эì棣為楂欙拷锟斤拷".split("");
+for(j = 0; j != D[251].length; ++j) if(D[251][j].charCodeAt(0) !== 0xFFFD) { e[D[251][j]] = 64256 + j; d[64256 + j] = D[251][j];}
+D[252] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷楂滈榄查畯楫遍榘�榈伴但铷笝榛戯拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");
+for(j = 0; j != D[252].length; ++j) if(D[252][j].charCodeAt(0) !== 0xFFFD) { e[D[252][j]] = 64512 + j; d[64512 + j] = D[252][j];}
+return {"enc": e, "dec": d }; })();
+cptable[936] = (function(){ var d = [], e = {}, D = [], j;
+D[0] = "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~鈧拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷".split("");
+for(j = 0; j != D[0].length; ++j) if(D[0][j].charCodeAt(0) !== 0xFFFD) { e[D[0][j]] = 0 + j; d[0 + j] = D[0][j];}
+D[129] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷涓備竸涓呬竼涓忎笒涓椾笩涓犱浮涓d甫涓╀府涓副涓充傅涓蜂讣涔�涔佷箓涔勪箚涔婁箲涔曚箺涔氫箾涔梗涔や攻涔т龚涔公涔弓涔汞涔蹭勾涔典苟涔蜂垢涔逛购涔讳辜涔戒箍浜�浜佷簜浜冧簞浜呬簢浜婏拷浜愪簴浜椾簷浜滀簼浜炰海浜函浜颁罕浜翠憾浜蜂焊浜逛杭浜戒壕浠堜粚浠忎粣浠掍粴浠涗粶浠犱虎浠︿户浠╀画浠化浠变淮浠镐还浠轰患浠句紑浼備純浼勪紖浼嗕紘浼堜紜浼屼紥浼撲紨浼曚紪浼滀紳浼′迹浼ㄤ缉浼辑浼急浼充嫉浼蜂脊浼讳季浼夸絸浣佷絺浣勪絽浣囦綀浣変綂浣嬩綄浣掍綌浣栦健浣溅浣ㄤ姜浣江浣奖浣蹭降浣蜂礁浣逛胶浣戒線渚佷緜渚呬締渚囦緤渚屼編渚愪緬渚撲緯渚栦緲渚欎練渚滀緸渚熶尽渚拷".split("");
+for(j = 0; j != D[129].length; ++j) if(D[129][j].charCodeAt(0) !== 0xFFFD) { e[D[129][j]] = 33024 + j; d[33024 + j] = D[129][j];}
+D[130] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷渚や精渚景渚变静渚充敬渚朵痉渚镐竟渚轰净渚间窘渚句縺淇佷總淇嗕繃淇堜繅淇嬩繉淇嶄繏淇撲繑淇曚繓淇欎繘淇犱竣淇や骏淇т揩淇堪淇蹭看淇典慷淇蜂抗淇讳考淇戒靠鍊�鍊佸�傚�冨�勫�呭�嗗�囧�堝�夊�婏拷鍊嬪�庡�愬�戝�撳�曞�栧�楀�涘�濆�炲�犲�㈠�e�ゅ�у���板�卞�插�冲�村�靛�跺�峰�稿�瑰�诲�藉�垮亐鍋佸亗鍋勫亝鍋嗗亯鍋婂亱鍋嶅亹鍋戝亽鍋撳仈鍋栧仐鍋樺仚鍋涘仢鍋炲仧鍋犲仭鍋㈠仯鍋ゅ仸鍋у仺鍋╁仾鍋伃鍋伅鍋板伇鍋插伋鍋村伒鍋稿伖鍋哄伡鍋藉倎鍌傚們鍌勫倖鍌囧倝鍌婂倠鍌屽値鍌忓倫鍌戝倰鍌撳倲鍌曞倴鍌楀倶鍌欏倸鍌涘倻鍌濆倿鍌熷偁鍌″偄鍌ゅ偊鍌偒鍌偖鍌偘鍌卞偝鍌村偟鍌跺偡鍌稿偣鍌硷拷".split("");
+for(j = 0; j != D[130].length; ++j) if(D[130][j].charCodeAt(0) !== 0xFFFD) { e[D[130][j]] = 33280 + j; d[33280 + j] = D[130][j];}
+D[131] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍌藉偩鍌垮儉鍍佸儌鍍冨儎鍍呭儐鍍囧儓鍍夊儕鍍嬪儗鍍嶅儙鍍愬儜鍍掑儞鍍斿儠鍍楀儤鍍欏儧鍍滃儩鍍炲儫鍍犲儭鍍㈠儯鍍ゅ儱鍍ㄥ儵鍍儷鍍儼鍍卞儾鍍村兌鍍峰兏鍍瑰兒鍍煎兘鍍惧兛鍎�鍎佸剛鍎冨剟鍎呭剤锟藉剦鍎婂剬鍎嶅剮鍎忓剱鍎戝創鍎斿剷鍎栧剹鍎樺剻鍎氬剾鍎滃劃鍎炲劅鍎犲劉鍎e劋鍎ュ劍鍎у劏鍎╁劒鍎劕鍎劗鍎劙鍎卞劜鍎冲劥鍎靛劧鍎峰劯鍎瑰労鍎诲劶鍎藉劸鍏傚厙鍏婂厡鍏庡厪鍏愬厭鍏撳厳鍏樺厵鍏涘厺鍏炲厽鍏犲叀鍏e叅鍏﹀収鍏╁叒鍏叢鍏哄吘鍏垮唭鍐勫唵鍐囧唺鍐嬪啂鍐忓啇鍐戝啌鍐斿啒鍐氬啙鍐炲啛鍐″啠鍐﹀啩鍐ㄥ啯鍐啳鍐喆鍐稿喒鍐哄喚鍐垮噥鍑傚噧鍑呭噲鍑婂噸鍑庡噽鍑掑嚀鍑斿嚂鍑栧嚄锟�".split("");
+for(j = 0; j != D[131].length; ++j) if(D[131][j].charCodeAt(0) !== 0xFFFD) { e[D[131][j]] = 33536 + j; d[33536 + j] = D[131][j];}
+D[132] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍑樺嚈鍑氬嚋鍑炲嚐鍑㈠嚕鍑ュ嚘鍑у嚚鍑╁嚜鍑嚠鍑卞嚥鍑村嚪鍑惧垊鍒呭垑鍒嬪垖鍒忓垚鍒撳垟鍒曞垳鍒炲垷鍒″垻鍒e垾鍒﹀埀鍒埇鍒埍鍒插埓鍒靛埣鍒惧墑鍓呭墕鍓囧増鍓夊墜鍓庡墢鍓掑墦鍓曞墬鍓橈拷鍓欏墯鍓涘墲鍓熷墵鍓㈠墸鍓ゅ墻鍓ㄥ壂鍓壄鍓壈鍓卞壋鍓村壍鍓跺壏鍓稿壒鍓哄壔鍓煎壘鍔�鍔冨妱鍔呭妴鍔囧妷鍔婂妺鍔屽妽鍔庡姀鍔戝姃鍔斿姇鍔栧姉鍔樺姍鍔氬姕鍔ゅ姤鍔﹀姧鍔姱鍔板姶鍔靛姸鍔峰姼鍔瑰姾鍔诲娂鍔藉媭鍕佸媯鍕勫媴鍕嗗媹鍕婂媽鍕嶅嫀鍕忓嫅鍕撳嫈鍕曞嫍鍕欏嫐鍕涘嫓鍕濆嫗鍕犲嫛鍕㈠嫞鍕ュ嫤鍕у嫧鍕╁嫪鍕嫭鍕嫯鍕嫳鍕插嫵鍕村嫷鍕跺嫹鍕稿嫽鍕煎嫿鍖佸寕鍖冨寗鍖囧寜鍖婂寢鍖屽寧锟�".split("");
+for(j = 0; j != D[132].length; ++j) if(D[132][j].charCodeAt(0) !== 0xFFFD) { e[D[132][j]] = 33792 + j; d[33792 + j] = D[132][j];}
+D[133] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍖戝寬鍖撳寯鍖樺寷鍖滃尀鍖熷將鍖ゅ尌鍖у尐鍖╁尗鍖尛鍖尠鍖卞尣鍖冲尨鍖靛尪鍖峰尭鍖煎尳鍗�鍗傚崉鍗嗗崑鍗屽崓鍗愬崝鍗樺崣鍗涘崫鍗ュ崹鍗崿鍗嵅鍗跺嵐鍗诲嵓鍗藉嵕鍘�鍘佸巸鍘囧巿鍘婂帋鍘忥拷鍘愬帒鍘掑帗鍘斿帠鍘楀帣鍘涘帨鍘炲帬鍘″帳鍘у帾鍘幀鍘幆鍘板幈鍘插幊鍘村幍鍘峰幐鍘瑰幒鍘煎幗鍘惧弨鍙冨弰鍙呭弳鍙囧弾鍙忓彁鍙掑彄鍙曞彋鍙滃彎鍙炲彙鍙㈠彠鍙村徍鍙惧徔鍚�鍚傚悈鍚囧悑鍚斿悩鍚欏悮鍚滃悽鍚ゅ惀鍚惏鍚冲惗鍚峰惡鍚藉惪鍛佸憘鍛勫憛鍛囧憠鍛屽憤鍛庡憦鍛戝憵鍛濆憺鍛熷憼鍛″懀鍛ュ懅鍛╁應鍛懍鍛懏鍛懓鍛村懝鍛哄懢鍛垮拋鍜冨拝鍜囧拡鍜夊拪鍜嶅拺鍜撳挆鍜樺挏鍜炲挓鍜犲挕锟�".split("");
+for(j = 0; j != D[133].length; ++j) if(D[133][j].charCodeAt(0) !== 0xFFFD) { e[D[133][j]] = 34048 + j; d[34048 + j] = D[133][j];}
+D[134] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍜㈠挜鍜挵鍜插挼鍜跺挿鍜瑰捄鍜煎捑鍝冨搮鍝婂搵鍝栧摌鍝涘摖鍝″摙鍝e摛鍝摤鍝摪鍝卞摯鍝靛摱鍝峰摳鍝瑰摶鍝惧攢鍞傚攦鍞勫攨鍞堝攰鍞嬪攲鍞嶅攷鍞掑敁鍞曞敄鍞楀敇鍞欏敋鍞滃敐鍞炲敓鍞″敟鍞︼拷鍞ㄥ敥鍞敪鍞插敶鍞靛敹鍞稿敼鍞哄敾鍞藉晙鍟傚晠鍟囧晥鍟嬪晫鍟嶅晭鍟忓晳鍟掑晸鍟斿晽鍟樺暀鍟氬暃鍟濆暈鍟熷暊鍟㈠暎鍟ㄥ暕鍟暞鍟板暠鍟插暢鍟村暪鍟哄暯鍟垮枀鍠嗗枌鍠嶅枎鍠愬枓鍠撳枙鍠栧枟鍠氬枦鍠炲枲鍠″枹鍠e枻鍠ュ枽鍠ㄥ柀鍠柅鍠柇鍠柉鍠板柌鍠村柖鍠稿柡鍠煎柨鍡�鍡佸梻鍡冨梿鍡囧棃鍡婂棆鍡庡棌鍡愬棔鍡楀棙鍡欏棜鍡涘棡鍡犲棦鍡у棭鍡棶鍡板棻鍡村椂鍡稿椆鍡哄椈鍡煎椏鍢傚槂鍢勫槄锟�".split("");
+for(j = 0; j != D[134].length; ++j) if(D[134][j].charCodeAt(0) !== 0xFFFD) { e[D[134][j]] = 34304 + j; d[34304 + j] = D[134][j];}
+D[135] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍢嗗槆鍢婂構鍢嶅槓鍢戝槖鍢撳様鍢曞槚鍢楀槞鍢氬槣鍢濆槧鍢″槩鍢ュ槮鍢ㄥ槱鍢槴鍢槸鍢板槼鍢靛樂鍢稿樅鍢煎樈鍢惧檧鍣佸檪鍣冨檮鍣呭檰鍣囧檲鍣夊檴鍣嬪檹鍣愬檻鍣掑檽鍣曞櫀鍣氬櫅鍣濆櫈鍣熷櫊鍣★拷鍣e櫏鍣﹀櫑鍣櫘鍣櫚鍣插櫝鍣村櫟鍣峰櫢鍣瑰櫤鍣藉櫨鍣垮殌鍤佸殏鍤冨殑鍤囧殘鍤夊殜鍤嬪殞鍤嶅殣鍤戝殥鍤斿殨鍤栧殫鍤樺殭鍤氬殯鍤滃殱鍤炲殶鍤犲殹鍤㈠殼鍤ュ殾鍤у毃鍤╁毆鍤毈鍤毊鍤板毐鍤插毘鍤村毜鍤跺毟鍤瑰毢鍤诲毥鍤惧毧鍥�鍥佸泜鍥冨泟鍥呭泦鍥囧泩鍥夊泲鍥屽泹鍥庡洀鍥愬洃鍥掑洆鍥曞洊鍥樺洐鍥滃洠鍥ュ洣鍥у洦鍥╁洩鍥洰鍥洸鍥冲浂鍥峰浉鍥诲浖鍦�鍦佸渹鍦呭渿鍦嬪湆鍦嶅湈鍦忓湊鍦戯拷".split("");
+for(j = 0; j != D[135].length; ++j) if(D[135][j].charCodeAt(0) !== 0xFFFD) { e[D[135][j]] = 34560 + j; d[34560 + j] = D[135][j];}
+D[136] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍦掑湏鍦斿湑鍦栧湕鍦樺湙鍦氬湜鍦濆湠鍦犲湣鍦㈠湦鍦ュ湨鍦у湯鍦卞湶鍦村湹鍦跺湻鍦稿溂鍦藉溈鍧佸潈鍧勫潊鍧嗗潏鍧夊潒鍧掑潛鍧斿潟鍧栧潣鍧欏潰鍧e潵鍧у潿鍧澃鍧卞澆鍧村澋鍧稿澒鍧哄澖鍧惧澘鍨�锟藉瀬鍨囧瀳鍨夊瀶鍨嶅瀻鍨忓瀽鍨戝灁鍨曞灃鍨楀灅鍨欏灇鍨滃灊鍨炲灍鍨ュ灗鍨灛鍨灠鍨卞灣鍨靛灦鍨峰灩鍨哄灮鍨煎灲鍨惧灴鍩�鍩佸焺鍩呭焼鍩囧焾鍩夊煀鍩屽煃鍩愬煈鍩撳煐鍩楀煕鍩滃煘鍩″煝鍩e煡鍩﹀煣鍩ㄥ煩鍩煫鍩煯鍩板煴鍩插煶鍩靛煻鍩峰熁鍩煎熅鍩垮爜鍫冨爠鍫呭爤鍫夊爦鍫屽爭鍫忓爯鍫掑爴鍫斿爾鍫楀牁鍫氬牄鍫滃牆鍫熷牏鍫e牓鍫﹀牕鍫ㄥ牘鍫牞鍫牣鍫牨鍫插牫鍫村牰鍫峰牳鍫瑰牶鍫诲牸鍫斤拷".split("");
+for(j = 0; j != D[136].length; ++j) if(D[136][j].charCodeAt(0) !== 0xFFFD) { e[D[136][j]] = 34816 + j; d[34816 + j] = D[136][j];}
+D[137] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍫惧牽濉�濉佸濉冨濉嗗濉堝濉婂濉庡濉愬濉撳濉栧濉欏濉涘濉濆濉犲 濉㈠。濉ゅˇ濉у〃濉╁—濉‘濉“濉卞〔濉冲〈濉靛《濉峰「濉瑰『濉诲〖濉藉】澧傚澧嗗澧堝澧嬪锟藉澧庡澧愬澧斿澧栧澧樺澧滃澧犲ⅰ澧㈠ⅲ澧ゅⅴ澧﹀ⅶ澧澧澧澧板⒈澧插⒊澧村⒌澧跺⒎澧稿⒐澧哄⒒澧藉⒕澧垮澹傚澹勫澹囧澹夊澹嬪澹嶅澹忓澹掑澹斿澹楀澹欏澹涘澹濆澹熷澹″"澹e%澹﹀'澹ㄥ)澹-澹1澹插4澹靛7澹稿:澹诲<澹藉>澹垮澶佸澶呭澶堝澶婂澶屽澶愬澶掑澶楀澶涘澶炲澶″あ澶eう澶ㄥが澶板げ澶冲さ澶跺せ锟�".split("");
+for(j = 0; j != D[137].length; ++j) if(D[137][j].charCodeAt(0) !== 0xFFFD) { e[D[137][j]] = 35072 + j; d[35072 + j] = D[137][j];}
+D[138] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷澶藉ぞ澶垮濂冨濂嗗濂屽濂愬濂撳濂涘濂濆濂熷ァ濂eイ濂﹀ェ濂ㄥォ濂カ濂キ濂ク濂板ケ濂插サ濂峰ズ濂诲ゼ濂惧タ濡�濡呭濡嬪濡庡濡愬濡斿濡樺濡涘濡濆濡犲Α濡㈠Ζ锟藉Η濡Ν濡板Ρ濡冲Υ濡靛Χ濡峰Ω濡哄濡藉濮�濮佸濮冨濮呭濮堝濮屽濮庡濮曞濮欏濮炲濮犲А濮㈠Г濮﹀Ё濮╁И濮Л濮Н濮板П濮插С濮村У濮跺Х濮稿Ш濮煎Ы濮惧█濞傚▕濞嬪◢濞庡◤濞愬♁濞斿〞濞栧濞欏濞涘濞炲ā濞㈠à濞﹀ě濞ㄥí濞ì濞ó濞ò濞冲ǖ濞峰ǜ濞瑰ê濞诲ń濞惧濠佸﹤濠冨﹦濠呭﹪濠堝濠屽濠庡濠愬濠掑濠斿〇濠楀濠欏濠滃濠炲濠狅拷".split("");
+for(j = 0; j != D[138].length; ++j) if(D[138][j].charCodeAt(0) !== 0xFFFD) { e[D[138][j]] = 35328 + j; d[35328 + j] = D[138][j];}
+D[139] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷濠″濠ゅ━濠﹀┄濠╁┇濠┉濠┋濠板┍濠插┏濠稿┕濠诲┘濠藉┚濯�濯佸獋濯冨獎濯呭獑濯囧獔濯夊獖濯嬪獙濯嶅獛濯忓獝濯戝獡濯斿獣濯栧獥濯樺獧濯滃獫濯炲獰濯犲濯㈠濯ゅ濯﹀濯ㄥ濯锟藉濯濯板濯村濯峰濯哄濯煎濯垮珋瀚冨珓瀚呭珕瀚囧珗瀚婂珛瀚嶅珟瀚忓珢瀚戝珦瀚曞珬瀚欏珰瀚涘珴瀚炲珶瀚㈠瀚ュ瀚ㄥ瀚瀚瀚板瀚冲瀚靛瀚峰瀚瑰瀚诲瀚藉瀚垮瑎瀣佸瑐瀣冨瑒瀣呭瑔瀣囧瑘瀣婂瑡瀣屽瑣瀣庡瑥瀣愬瑧瀣掑瑩瀣斿瑫瀣樺瑱瀣氬瑳瀣滃瑵瀣炲瑹瀣犲瀣㈠瀣ゅ瀣﹀瀣ㄥ瀣瀣瀣瀣板瀣冲瀣跺瀣瑰瀣诲瀣藉瀣垮瓉瀛傚瓋瀛勫瓍瀛嗗瓏锟�".split("");
+for(j = 0; j != D[139].length; ++j) if(D[139][j].charCodeAt(0) !== 0xFFFD) { e[D[139][j]] = 35584 + j; d[35584 + j] = D[139][j];}
+D[140] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷瀛堝瓑瀛婂瓔瀛屽瓖瀛庡瓘瀛掑瓥瀛炲瓲瀛″瀛ㄥ瀛瀛瀛村瀛峰瀛瑰瀛煎瀛垮畟瀹嗗畩瀹嶅畮瀹愬畱瀹掑當瀹栧疅瀹у瀹╁瀹瀹瀹插瀹哄瀹煎瘈瀵佸瘍瀵堝瘔瀵婂瘚瀵嶅瘞瀵忥拷瀵戝瘮瀵曞瘱瀵楀瘶瀵欏瘹瀵涘瘻瀵犲瀵e瀵у瀵瀵瀵瀵插瀵村瀵跺瀵藉灏�灏傚皟灏呭皣灏堝皨灏屽皪灏庡皭灏掑皳灏楀皺灏涘盀灏熷盃灏″埃灏﹀皑灏╁蔼灏碍灏隘灏板安灏冲暗灏跺胺灞冨眲灞嗗眹灞屽睄灞掑睋灞斿睎灞楀睒灞氬睕灞滃睗灞熷雹灞ゅ抱灞ㄥ暴灞鲍灞杯灞板辈灞冲贝灞靛倍灞峰备灞诲奔灞藉本宀�宀冨矂宀呭矄宀囧矇宀婂矉宀庡矎宀掑矒宀曞矟宀炲矡宀犲病宀ゅ播宀﹀钵宀拷".split("");
+for(j = 0; j != D[140].length; ++j) if(D[140][j].charCodeAt(0) !== 0xFFFD) { e[D[140][j]] = 35840 + j; d[35840 + j] = D[140][j];}
+D[141] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷宀伯宀舶宀插泊宀跺补宀哄不宀煎簿宄�宄傚硟宄呭硢宄囧硤宄夊硦宄屽硩宄庡硰宄愬硲宄撳硵宄曞硸宄楀硺宄氬硾宄滃碀宄炲碂宄犲尝宄e厂宄╁倡宄钞宄潮宄插吵宄村车宄跺撤宄稿彻宄哄臣宄藉尘宄垮磤锟藉磥宕勫磪宕堝磯宕婂磱宕屽磵宕忓磹宕戝磼宕撳磿宕楀礃宕欏礆宕滃礉宕熷礌宕″储宕e触宕ㄥ椽宕船宕窗宕卞床宕冲吹宕跺捶宕稿垂宕哄椿宕煎纯宓�宓佸祩宓冨祫宓呭祮宓堝祲宓嶅祹宓忓祼宓戝祾宓撳禂宓曞禆宓楀禉宓氬禍宓炲禑宓犲怠宓㈠担宓ゅ单宓﹀掸宓ㄥ氮宓诞宓板当宓插党宓靛刀宓峰蹈宓瑰岛宓诲导宓藉稻宓垮秬宥佸秲宥勫秴宥嗗秶宥堝秹宥婂秼宥屽秿宥庡稄宥愬稇宥掑稉宥斿稌宥栧稐宥樺稓宥涘稖宥炲稛宥狅拷".split("");
+for(j = 0; j != D[141].length; ++j) if(D[141][j].charCodeAt(0) !== 0xFFFD) { e[D[141][j]] = 36096 + j; d[36096 + j] = D[141][j];}
+D[142] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷宥″盯宥e钉宥ュ鼎宥у定宥╁丢宥冬宥懂宥栋宥卞恫宥冲洞宥靛抖宥稿豆宥哄痘宥煎督宥惧犊宸�宸佸穫宸冨穭宸嗗穱宸堝穳宸婂穻宸屽穾宸忓窅宸戝窉宸撳窋宸曞窎宸楀窐宸欏窔宸滃窡宸犲罚宸ゅ藩宸翻锟藉钒宸靛范宸稿饭宸哄坊宸煎房甯�甯勫竾甯夊笂甯嬪笉甯庡笒甯撳笚甯炲笩甯犲浮甯㈠福甯ゅ弗甯ㄥ俯甯斧甯腐甯板覆甯冲复甯靛付甯瑰负甯惧缚骞�骞佸箖骞嗗箛骞堝箟骞婂箣骞嶅箮骞忓箰骞戝箳骞撳箹骞楀箻骞欏箽骞滃節骞熷範骞e工骞ュ功骞у龚骞╁躬骞宫骞巩骞拱骞卞沟骞峰构骞惧簛搴傚簝搴呭簣搴夊簩搴嶅簬搴掑簶搴涘簼搴″孩搴e氦搴ㄥ憨搴韩搴寒搴喊搴卞翰搴村汉搴诲杭搴藉嚎寤�寤佸粋寤冨粍寤咃拷".split("");
+for(j = 0; j != D[142].length; ++j) if(D[142][j].charCodeAt(0) !== 0xFFFD) { e[D[142][j]] = 36352 + j; d[36352 + j] = D[142][j];}
+D[143] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷寤嗗粐寤堝粙寤屽粛寤庡粡寤愬粩寤曞粭寤樺粰寤氬粶寤濆粸寤熷粻寤″虎寤e护寤ュ沪寤у哗寤滑寤划寤话寤卞徊寤冲坏寤稿还寤诲患寤藉紖寮嗗紘寮夊紝寮嶅紟寮愬紥寮斿紪寮欏細寮滃紳寮炲肌寮㈠迹寮わ拷寮ㄥ极寮籍寮板疾寮冲即寮靛级寮峰几寮诲冀寮惧伎褰佸絺褰冨絼褰呭絾褰囧綀褰夊綂褰嬪綄褰嶅綆褰忓綉褰斿綑褰氬經褰滃綖褰熷綘褰e渐褰у建褰疆褰讲褰村降褰跺礁褰哄浇褰惧娇寰冨締寰嶅編寰忓緫寰撳緮寰栧練寰涘緷寰炲緹寰犲劲寰e兢寰ュ睛寰у京寰粳寰景寰卞静寰冲敬寰跺靖寰瑰竞寰诲揪寰垮縺蹇佸總蹇囧繄蹇婂繈蹇庡繐蹇斿繒蹇氬繘蹇滃繛蹇熷竣蹇e骏蹇﹀卡蹇╁楷蹇堪蹇插砍蹇村慷蹇峰抗蹇哄考鎬囷拷".split("");
+for(j = 0; j != D[143].length; ++j) if(D[143][j].charCodeAt(0) !== 0xFFFD) { e[D[143][j]] = 36608 + j; d[36608 + j] = D[143][j];}
+D[144] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鎬堟�夋�嬫�屾�愭�戞�撴�楁�樻�氭�炴�熸�㈡�f�ゆ����版�辨�叉�虫�存�舵�锋�告�规�烘�芥�炬亐鎭勬亝鎭嗘亣鎭堟亯鎭婃亴鎭庢亸鎭戞亾鎭旀仏鎭楁仒鎭涙仠鎭炴仧鎭犳仭鎭ユ仸鎭伇鎭叉伌鎭垫伔鎭炬個锟芥倎鎮傛倕鎮嗘倗鎮堟倞鎮嬫値鎮忔倫鎮戞倱鎮曟倵鎮樻倷鎮滄倿鎮℃偄鎮ゆ偉鎮ф偐鎮偖鎮版偝鎮垫偠鎮锋偣鎮烘偨鎮炬偪鎯�鎯佹儌鎯冩儎鎯囨儓鎯夋儗鎯嶆儙鎯忔儛鎯掓儞鎯旀儢鎯楁儥鎯涙優鎯℃儮鎯f儰鎯ユ儶鎯辨儾鎯垫兎鎯告兓鎯兼兘鎯炬兛鎰傛剝鎰勬剠鎰囨剨鎰嬫剬鎰愭剳鎰掓創鎰旀剸鎰楁剺鎰欐剾鎰滄劃鎰炴劇鎰㈡劌鎰ㄦ劑鎰劕鎰劗鎰劙鎰辨劜鎰虫劥鎰垫劧鎰锋劯鎰规労鎰绘劶鎰芥劸鎱�鎱佹厒鎱冩厔鎱呮厗锟�".split("");
+for(j = 0; j != D[144].length; ++j) if(D[144][j].charCodeAt(0) !== 0xFFFD) { e[D[144][j]] = 36864 + j; d[36864 + j] = D[144][j];}
+D[145] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鎱囨厜鎱嬫厤鎱忔厫鎱掓厯鎱旀厲鎱楁厴鎱欐厷鎱涙厹鎱炴厽鎱犳叀鎱f叅鎱ユ叇鎱╂叒鎱叕鎱叜鎱叡鎱叉叧鎱存叾鎱告吂鎱烘吇鎱兼吔鎱炬吙鎲�鎲佹唫鎲冩唲鎲呮唵鎲囨唸鎲夋唺鎲屾啀鎲忔啇鎲戞啋鎲撴啎锟芥問鎲楁啒鎲欐啔鎲涙啘鎲炴啛鎲犳啞鎲㈡啠鎲ゆ啣鎲︽啰鎲啳鎲啹鎲版啽鎲叉喅鎲存喌鎲舵喐鎲规喓鎲绘喖鎲芥喛鎳�鎳佹噧鎳勬噮鎳嗘噰鎳夋噷鎳嶆噹鎳忔噽鎳撴嚂鎳栨嚄鎳樻嚈鎳氭嚊鎳滄嚌鎳炴嚐鎳犳嚒鎳㈡嚕鎳ゆ嚗鎳ф嚚鎳╂嚜鎳嚞鎳嚠鎳嚢鎳辨嚥鎳虫嚧鎳舵嚪鎳告嚬鎳烘嚮鎳兼嚱鎳炬垁鎴佹垈鎴冩垊鎴呮垏鎴夋垞鎴旀垯鎴滄垵鎴炴垹鎴f垿鎴ф埁鎴╂埆鎴埊鎴版埍鎴叉埖鎴舵埜鎴规埡鎴绘埣鎵傛墑鎵呮墕鎵婏拷".split("");
+for(j = 0; j != D[145].length; ++j) if(D[145][j].charCodeAt(0) !== 0xFFFD) { e[D[145][j]] = 37120 + j; d[37120 + j] = D[145][j];}
+D[146] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鎵忔墣鎵曟墫鎵楁墮鎵氭墱鎵濇墳鎵熸墵鎵℃墷鎵ゆ墺鎵ㄦ壉鎵叉壌鎵垫壏鎵告壓鎵绘壗鎶佹妭鎶冩妳鎶嗘妵鎶堟妺鎶屾妽鎶庢姀鎶愭姅鎶欐姕鎶濇姙鎶f姦鎶ф姪鎶姯鎶姱鎶版姴鎶虫姶鎶舵姺鎶告姾鎶炬媭鎷侊拷鎷冩媼鎷忔嫅鎷曟嫕鎷炴嫚鎷℃嫟鎷嫬鎷版嫴鎷垫嫺鎷规嫼鎷绘寑鎸冩寗鎸呮寙鎸婃寢鎸屾實鎸忔寪鎸掓寭鎸旀寱鎸楁寴鎸欐寽鎸︽導鎸╂尙鎸尞鎸版尡鎸虫尨鎸垫尪鎸锋尭鎸绘尲鎸炬尶鎹�鎹佹崉鎹囨崍鎹婃崙鎹掓崜鎹旀崠鎹楁崢鎹欐崥鎹涙崪鎹濇崰鎹ゆ崶鎹︽崹鎹崼鎹嵂鎹版嵅鎹虫嵈鎹垫嵏鎹规嵓鎹芥嵕鎹挎巵鎺冩巹鎺呮巻鎺嬫帊鎺戞帗鎺旀帟鎺楁帣鎺氭帥鎺滄帩鎺炴師鎺℃帳鎺︽帿鎺幈鎺叉幍鎺舵幑鎺绘幗鎺挎弨锟�".split("");
+for(j = 0; j != D[146].length; ++j) if(D[146][j].charCodeAt(0) !== 0xFFFD) { e[D[146][j]] = 37376 + j; d[37376 + j] = D[146][j];}
+D[147] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鎻佹弬鎻冩弲鎻囨張鎻婃弸鎻屾彂鎻撴彅鎻曟彈鎻樻彊鎻氭彌鎻滄彎鎻熸彚鎻ゆ彞鎻︽彠鎻ㄦ彨鎻彯鎻彴鎻辨彸鎻垫彿鎻规徍鎻绘徏鎻炬悆鎼勬悊鎼囨悎鎼夋悐鎼嶆悗鎼戞悞鎼曟悥鎼楁悩鎼欐悮鎼濇悷鎼㈡悾鎼わ拷鎼ユ惂鎼ㄦ惄鎼惍鎼惏鎼辨惒鎼虫惖鎼舵惙鎼告惞鎼绘惣鎼炬憖鎽傛憙鎽夋憢鎽屾憤鎽庢憦鎽愭憫鎽撴憰鎽栨憲鎽欐憵鎽涙憸鎽濇憻鎽犳憽鎽㈡懀鎽ゆ懃鎽︽懆鎽懌鎽懏鎽懓鎽辨懖鎽虫懘鎽垫懚鎽锋懟鎽兼懡鎽炬懣鎾�鎾佹拑鎾嗘拡鎾夋拪鎾嬫拰鎾嶆拵鎾忔拹鎾撴挃鎾楁挊鎾氭挍鎾滄挐鎾熸挔鎾℃挗鎾f挜鎾︽挧鎾ㄦ挭鎾挴鎾辨挷鎾虫挻鎾舵捁鎾绘捊鎾炬捒鎿佹搩鎿勬搯鎿囨搱鎿夋搳鎿嬫搶鎿忔搼鎿撴摂鎿曟摉鎿欐摎锟�".split("");
+for(j = 0; j != D[147].length; ++j) if(D[147][j].charCodeAt(0) !== 0xFFFD) { e[D[147][j]] = 37632 + j; d[37632 + j] = D[147][j];}
+D[148] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鎿涙摐鎿濇摕鎿犳摗鎿f摜鎿ф摠鎿╂摢鎿摤鎿摦鎿摪鎿辨摬鎿虫摯鎿垫摱鎿锋摳鎿规摵鎿绘摷鎿芥摼鎿挎攣鏀傛攦鏀勬攨鏀嗘攪鏀堟攰鏀嬫攲鏀嶆攷鏀忔攼鏀戞敁鏀旀敃鏀栨敆鏀欐敋鏀涙敎鏀濇敒鏀熸敔鏀★拷鏀㈡敚鏀ゆ敠鏀ф敤鏀╂敧鏀敪鏀版敱鏀叉敵鏀锋敽鏀兼斀鏁�鏁佹晜鏁冩晞鏁嗘晣鏁婃晪鏁嶆晭鏁愭晵鏁撴晹鏁楁晿鏁氭暅鏁熸暊鏁℃暏鏁ユ暓鏁ㄦ暕鏁暛鏁暞鏁辨暢鏁垫暥鏁告暪鏁烘暬鏁兼暯鏁炬暱鏂�鏂佹杺鏂冩杽鏂呮枂鏂堟枆鏂婃枍鏂庢枏鏂掓枖鏂曟枛鏂樻枤鏂濇枮鏂犳枹鏂f枽鏂ㄦ柂鏂柈鏂辨柌鏂虫柎鏂垫柖鏂锋柛鏂烘柣鏂炬柨鏃�鏃傛棁鏃堟棄鏃婃棈鏃愭棏鏃撴棓鏃曟棙鏃欐棜鏃涙棞鏃濇棡鏃熸棥鏃f棨鏃棲锟�".split("");
+for(j = 0; j != D[148].length; ++j) if(D[148][j].charCodeAt(0) !== 0xFFFD) { e[D[148][j]] = 37888 + j; d[37888 + j] = D[148][j];}
+D[149] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鏃叉棾鏃存椀鏃告椆鏃绘椉鏃芥椌鏃挎榿鏄勬槄鏄囨槇鏄夋構鏄嶆槓鏄戞槖鏄栨槜鏄樻槡鏄涙槣鏄炴槨鏄㈡槪鏄ゆ槮鏄╂槳鏄槵鏄槹鏄叉槼鏄锋樃鏄规樅鏄绘樈鏄挎檧鏅傛檮鏅呮檰鏅囨檲鏅夋檴鏅嶆檸鏅愭檻鏅橈拷鏅欐櫅鏅滄櫇鏅炴櫊鏅㈡櫍鏅ユ櫑鏅╂櫔鏅櫖鏅櫛鏅叉櫝鏅垫櫢鏅规櫥鏅兼櫧鏅挎殌鏆佹殐鏆呮殕鏆堟殙鏆婃殝鏆嶆殠鏆忔殣鏆掓殦鏆旀殨鏆樻殭鏆氭殯鏆滄殲鏆熸殸鏆℃殺鏆f殼鏆ユ殾鏆╂毆鏆毈鏆毌鏆版毐鏆叉毘鏆垫毝鏆锋毟鏆烘毣鏆兼毥鏆挎泙鏇佹泜鏇冩泟鏇呮泦鏇囨泩鏇夋泭鏇嬫泴鏇嶆泿鏇忔洂鏇戞洅鏇撴洈鏇曟洊鏇楁洏鏇氭洖鏇熸洜鏇℃洟鏇f洡鏇ユ洤鏇ㄦ洩鏇洭鏇洰鏇洷鏇垫浂鏇告浐鏇绘浗鏈佹渹鏈冿拷".split("");
+for(j = 0; j != D[149].length; ++j) if(D[149][j].charCodeAt(0) !== 0xFFFD) { e[D[149][j]] = 38144 + j; d[38144 + j] = D[149][j];}
+D[150] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鏈勬渽鏈嗘渿鏈屾湈鏈忔湋鏈掓湏鏈栨湗鏈欐湚鏈滄湠鏈犳湣鏈㈡湥鏈ゆ湧鏈ф湬鏈湴鏈叉湷鏈舵湻鏈告湽鏈绘溂鏈炬溈鏉佹潉鏉呮潎鏉婃潒鏉嶆潚鏉旀潟鏉楁潣鏉欐潥鏉涙潩鏉㈡潱鏉ゆ潶鏉ф潾鏉澁鏉辨澊鏉讹拷鏉告澒鏉烘澔鏉芥瀫鏋傛瀮鏋呮瀱鏋堟瀶鏋屾瀺鏋庢瀼鏋戞瀿鏋撴灁鏋栨灆鏋涙灍鏋犳灐鏋ゆ灕鏋╂灛鏋灡鏋叉灤鏋规灪鏋绘灱鏋芥灳鏋挎焵鏌傛焻鏌嗘焽鏌堟焿鏌婃煁鏌屾煃鏌庢煏鏌栨煑鏌涙煙鏌℃煟鏌ゆ煢鏌ф煥鏌煫鏌煯鏌叉煹鏌舵煼鏌告煿鏌烘熁鏌兼熅鏍佹爞鏍冩爠鏍嗘爫鏍愭爳鏍旀爼鏍樻牂鏍氭牄鏍滄牉鏍熸牋鏍㈡牐鏍ゆ牓鏍︽牕鏍ㄦ牜鏍牠鏍牤鏍版牨鏍存牭鏍舵牶鏍绘牽妗囨妗嶆妗掓妗楁妗欐妗涳拷".split("");
+for(j = 0; j != D[150].length; ++j) if(D[150][j].charCodeAt(0) !== 0xFFFD) { e[D[150][j]] = 38400 + j; d[38400 + j] = D[150][j];}
+D[151] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷妗滄妗炴妗‖妗‘妗“妗辨〔妗虫〉妗告」妗烘』妗兼〗妗炬】姊�姊傛姊囨姊夋姊嬫姊嶆姊愭姊掓姊曟姊樻姊氭姊滄姊炴姊犳ⅰ姊fⅳ姊ユⅸ姊姊姊辨⒉姊存⒍姊锋⒏锟芥⒐姊烘⒒姊兼⒔姊炬⒖妫佹妫勬妫嗘妫堟妫屾妫忔妫戞妫旀妫楁妫涙妫濇妫熸!妫㈡¥妫ユ&妫ф(妫╂*妫,妫/妫叉3妫存6妫锋8妫绘=妫炬?妞�妞傛妞勬妞囨妞夋妞屾妞戞妞旀妞栨妞樻妞氭妞滄妞炴ぁ妞㈡ぃ妞ユう妞фえ妞╂お妞が妞く妞辨げ妞虫さ妞舵し妞告ず妞绘ぜ妞炬妤佹妤勬妤嗘妤堟妤婃妤屾妤庢妤愭妤掓妤曟妤樻妤涙妤燂拷".split("");
+for(j = 0; j != D[151].length; ++j) if(D[151][j].charCodeAt(0) !== 0xFFFD) { e[D[151][j]] = 38656 + j; d[38656 + j] = D[151][j];}
+D[152] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷妤℃ア妤ゆゥ妤фエ妤╂オ妤キ妤グ妤叉コ妤存サ妤舵ズ妤绘ソ妤炬タ姒佹姒呮姒嬫姒庢姒愭姒掓姒栨姒欐姒濇姒熸姒℃Β姒fΔ姒ユΖ姒╂Κ姒Ξ姒Π姒叉Τ姒垫Χ姒告姒烘姒斤拷姒炬妲�妲傛妲勬妲嗘妲堟妲嬫妲忔妲掓妲曟妲楁妲欐妲滄妲炴А妲㈡В妲ゆД妲︽Ё妲ㄦЗ妲Й妲М妲О妲辨С妲存У妲舵Х妲告Ч妲烘Щ妲兼Ь妯�妯佹▊妯冩▌妯呮▎妯囨▓妯夋▼妯屾◢妯庢◤妯愭☉妯掓〒妯旀〞妯栨妯氭妯滄妯炴妯㈡ǎ妯ゆē妯︽ě妯╂ǐ妯ō妯ò妯叉ǔ妯存ǘ妯锋ǜ妯规ê妯绘妯挎﹢姗佹﹤姗冩﹨姗嗘﹫姗夋姗嬫姗嶆姗忔姗掓姗旀姗栨姗氾拷".split("");
+for(j = 0; j != D[152].length; ++j) if(D[152][j].charCodeAt(0) !== 0xFFFD) { e[D[152][j]] = 38912 + j; d[38912 + j] = D[152][j];}
+D[153] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷姗滄姗炴姗犳姗f─姗︽┃姗ㄦ┅姗┇姗┉姗┋姗版┎姗虫┐姗垫┒姗锋└姗烘┗姗芥┚姗挎獊妾傛獌妾呮獑妾囨獔妾夋獖妾嬫獙妾嶆獜妾掓獡妾旀獣妾栨獦妾欐獨妾涙獪妾濇獮妾熸妾㈡妾ゆ妾︼拷妾ф妾妾妾版妾叉妾存妾舵妾告妾烘妾兼妾炬娅�娅佹珎娅冩珓娅呮珕娅囨珗娅夋珚娅嬫珜娅嶆珟娅忔珢娅戞珤娅撴珨娅曟珫娅楁珮娅欐珰娅涙珳娅濇珵娅熸珷娅℃娅f娅ユ娅ф娅╂娅娅娅娅辨娅虫娅垫娅锋娅规娅绘娅芥娅挎瑎娆佹瑐娆冩瑒娆呮瑔娆囨瑘娆夋瑠娆嬫瑢娆嶆瑤娆忔瑦娆戞瑨娆撴瑪娆曟瑬娆楁瑯娆欐瑲娆涙瑴娆濇瑸娆熸娆︽娆╂娆娆锟�".split("");
+for(j = 0; j != D[153].length; ++j) if(D[153][j].charCodeAt(0) !== 0xFFFD) { e[D[153][j]] = 39168 + j; d[39168 + j] = D[153][j];}
+D[154] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷娆娆辨娆存娆舵娆绘娆芥姝�姝佹瓊姝勬瓍姝堟瓓姝嬫瓖姝庢瓘姝愭瓚姝掓瓝姝旀瓡姝栨瓧姝樻瓪姝涙瓬姝濇瓰姝熸瓲姝℃姝╂姝姝姝版姝叉姝存姝舵姝告姝芥姝挎畝娈呮畧锟芥畬娈庢畯娈愭畱娈旀畷娈楁畼娈欐疁娈濇疄娈熸疇娈㈡娈ゆ娈︽娈ㄦ娈娈娈娈辨娈舵娈规娈绘娈芥姣�姣冩瘎姣嗘瘒姣堟瘔姣婃瘜姣庢瘣姣戞瘶姣氭瘻姣濇癁姣熸癄姣㈡姣ゆ姣︽姣ㄦ姣姣姣辨姣存姣锋姣烘姣兼姣挎皜姘佹皞姘冩皠姘堟皦姘婃皨姘屾皫姘掓皸姘滄皾姘炴盃姘f哎姘艾姘氨姘虫岸姘锋肮姘烘盎姘兼熬姘挎眱姹勬眳姹堟眿姹屾睄姹庢睆姹戞睊姹撴睎姹橈拷".split("");
+for(j = 0; j != D[154].length; ++j) if(D[154][j].charCodeAt(0) !== 0xFFFD) { e[D[154][j]] = 39424 + j; d[39424 + j] = D[154][j];}
+D[155] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷姹欐睔姹㈡保姹ユ宝姹ф鲍姹杯姹悲姹辨背姹垫狈姹告焙姹绘奔姹挎瞼娌勬矅娌婃矉娌嶆矌娌戞矑娌曟矕娌楁矘娌氭矞娌濇矠娌犳并娌ㄦ铂娌舶娌存驳娌舵卜娌烘硛娉佹硞娉冩硢娉囨硤娉嬫硩娉庢硰娉戞硳娉橈拷娉欐硽娉滄碀娉熸长娉︽厂娉╂超娉巢娉存彻娉挎磤娲傛磧娲呮磫娲堟磯娲婃磵娲忔磹娲戞磽娲旀磿娲栨礃娲滄礉娲熸礌娲℃储娲f搐娲︽川娲╂船娲疮娲版创娲舵捶娲告春娲挎祤娴傛祫娴夋祵娴愭禃娴栨禇娴樻禌娴濇禑娴℃耽娴ゆ单娴ф胆娴惮娴蛋娴辨挡娴虫档娴舵倒娴烘祷娴芥稻娴挎秬娑佹秲娑勬秵娑囨秺娑嬫秿娑忔稅娑掓稏娑楁稑娑欐稓娑滄盯娑ユ冬娑栋娑辨冻娑存抖娑锋豆娑烘痘娑兼督娑炬穪娣傛穬娣堟穳娣婏拷".split("");
+for(j = 0; j != D[155].length; ++j) if(D[155][j].charCodeAt(0) !== 0xFFFD) { e[D[155][j]] = 39680 + j; d[39680 + j] = D[155][j];}
+D[156] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷娣嶆穾娣忔窅娣掓窊娣旀窌娣楁窔娣涙窚娣熸发娣f伐娣ф法娣╂藩娣矾娣版凡娣存返娣舵犯娣烘方娣炬房娓�娓佹競娓冩竸娓嗘竾娓堟笁娓嬫笍娓掓笓娓曟笜娓欐笡娓滄笧娓熸涪娓︽抚娓ㄦ釜娓府娓版副娓虫傅锟芥付娓锋腹娓绘讣娓芥妇娓挎箑婀佹箓婀呮箚婀囨箞婀夋箠婀嬫箤婀忔箰婀戞箳婀曟箺婀欐箽婀滄節婀炴範婀℃耿婀f工婀ユ功婀ф龚婀╂躬婀弓婀拱婀辨共婀虫勾婀垫苟婀锋垢婀规购婀绘辜婀芥簚婧佹簜婧勬簢婧堟簥婧嬫簩婧嶆簬婧戞簰婧撴簲婧曟簴婧楁簷婧氭簺婧濇簽婧犳骸婧f氦婧︽酣婧╂韩婧涵婧喊婧虫旱婧告汗婧兼壕婧挎粈婊冩粍婊呮粏婊堟粔婊婃粚婊嶆粠婊愭粧婊栨粯婊欐粵婊滄粷婊f户婊猾婊画婊化锟�".split("");
+for(j = 0; j != D[156].length; ++j) if(D[156][j].charCodeAt(0) !== 0xFFFD) { e[D[156][j]] = 39936 + j; d[39936 + j] = D[156][j];}
+D[157] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷婊版槐婊叉怀婊垫欢婊锋桓婊烘换婊兼唤婊炬豢婕�婕佹純婕勬紖婕囨紙婕婃紜婕屾紞婕庢紣婕戞紥婕栨紬婕樻紮婕氭紱婕滄紳婕炴紵婕℃饥婕f讥婕︽姬婕ㄦ棘婕及婕叉即婕垫挤婕告脊婕烘蓟婕兼冀婕挎絸娼佹絺锟芥絻娼勬絽娼堟綁娼婃綄娼庢綇娼愭綉娼掓綋娼旀綍娼栨綏娼欐綒娼涙綕娼熸綘娼℃剑娼ゆ渐娼ф建娼╂姜娼浆娼桨娼辨匠娼垫蕉娼锋焦娼绘浇娼炬娇婢�婢佹緜婢冩緟婢嗘緡婢婃緥婢忔緪婢戞緬婢撴緮婢曟緰婢楁緲婢欐練婢涙緷婢炴緹婢犳劲婢f兢婢ユ睛婢ㄦ京婢精婢经婢警婢版颈婢叉敬婢垫痉婢告竞婢绘炯婢芥揪婢挎縼婵冩縿婵呮繂婵囨繄婵婃繈婵屾繊婵庢繌婵愭繐婵旀繒婵栨織婵樻繖婵氭繘婵滄繚婵熸竣婵f郡婵ワ拷".split("");
+for(j = 0; j != D[157].length; ++j) if(D[157][j].charCodeAt(0) !== 0xFFFD) { e[D[157][j]] = 40192 + j; d[40192 + j] = D[157][j];}
+D[158] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷婵︽咖婵ㄦ咯婵揩婵凯婵版勘婵叉砍婵存康婵舵糠婵告抗婵烘炕婵兼拷婵炬靠鐎�鐎佺�傜�冪�勭�呯�嗙�囩�堢�夌�婄�嬬�岀�嶇�庣�忕�愮�掔�撶�旂�曠�栫�楃�樼�欑�滅�濈�炵�熺�犵�$�㈢�ょ�ョ�︾�х�ㄧ�╃�拷鐎�����扮�辩�茬�崇�寸�剁�风�哥�虹�荤�肩�界�剧�跨亐鐏佺亗鐏冪亜鐏呯亞鐏囩亪鐏夌亰鐏嬬亶鐏庣亹鐏戠亽鐏撶仈鐏曠仏鐏楃仒鐏欑仛鐏涚仠鐏濈仧鐏犵仭鐏㈢仯鐏ょ仴鐏︾仹鐏ㄧ仼鐏伄鐏辩伈鐏崇伌鐏风伖鐏虹伝鐏界倎鐐傜們鐐勭倖鐐囩倛鐐嬬倢鐐嶇倧鐐愮倯鐐撶倵鐐樼倸鐐涚倿鐐熺偁鐐$偄鐐g偆鐐ョ偊鐐х偍鐐╃偑鐐扮偛鐐寸偟鐐剁偤鐐剧偪鐑勭儏鐑嗙儑鐑夌儖鐑岀儘鐑庣儚鐑愮儜鐑掔儞鐑旂儠鐑栫儣鐑氾拷".split("");
+for(j = 0; j != D[158].length; ++j) if(D[158][j].charCodeAt(0) !== 0xFFFD) { e[D[158][j]] = 40448 + j; d[40448 + j] = D[158][j];}
+D[159] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐑滅儩鐑炵儬鐑$儮鐑g儱鐑儺鐑扮儽鐑茬兂鐑寸兊鐑剁兏鐑虹兓鐑肩兙鐑跨剙鐒佺剛鐒冪剟鐒呯剢鐒囩剤鐒嬬剬鐒嶇剮鐒忕剳鐒掔剶鐒楃剾鐒滅劃鐒炵劅鐒犵劇鐒㈢劊鐒ょ劌鐒х劏鐒╃劒鐒劕鐒劗鐒茬劤鐒达拷鐒电劮鐒哥劰鐒虹劵鐒肩劷鐒剧効鐓�鐓佺厒鐓冪厔鐓嗙厙鐓堢厜鐓嬬厤鐓忕厫鐓戠厭鐓撶厰鐓曠厲鐓楃厴鐓欑厷鐓涚厺鐓熺厾鐓$參鐓g叆鐓╃叒鐓叕鐓叝鐓扮叡鐓寸叺鐓剁叿鐓圭吇鐓肩吘鐓跨唨鐔佺唫鐔冪唴鐔嗙唶鐔堢唹鐔嬬唽鐔嶇啂鐔愮啈鐔掔啌鐔曠問鐔楃啔鐔涚啘鐔濈啚鐔$啟鐔g啢鐔ョ啨鐔х啯鐔啱鐔啴鐔啺鐔辩啿鐔寸喍鐔风喐鐔虹喕鐔肩喗鐔剧喛鐕�鐕佺噦鐕勭噮鐕嗙噰鐕堢噳鐕婄噵鐕岀噸鐕忕噽鐕戠噿鐕擄拷".split("");
+for(j = 0; j != D[159].length; ++j) if(D[159][j].charCodeAt(0) !== 0xFFFD) { e[D[159][j]] = 40704 + j; d[40704 + j] = D[159][j];}
+D[160] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐕栫嚄鐕樼嚈鐕氱嚊鐕滅嚌鐕炵嚐鐕$嚔鐕g嚖鐕︾嚚鐕╃嚜鐕嚞鐕嚡鐕扮嚤鐕茬嚦鐕寸嚨鐕剁嚪鐕哥嚭鐕荤嚰鐕界嚲鐕跨垁鐖佺垈鐖冪垊鐖呯垏鐖堢垑鐖婄垕鐖岀垗鐖庣垙鐖愮垜鐖掔垞鐖旂垥鐖栫垪鐖樼垯鐖氾拷鐖涚垳鐖炵垷鐖犵垺鐖㈢垼鐖ょ垾鐖︾埀鐖╃埆鐖埉鐖埐鐖崇埓鐖虹埣鐖剧墍鐗佺墏鐗冪墑鐗呯墕鐗夌墛鐗嬬墡鐗忕墣鐗戠墦鐗旂墪鐗楃墭鐗氱墱鐗炵墵鐗g墹鐗ョ墾鐗壂鐗壄鐗扮壉鐗崇壌鐗剁壏鐗哥壔鐗肩壗鐘傜妰鐘呯妴鐘囩妶鐘夌妼鐘庣姁鐘戠姄鐘旂姇鐘栫姉鐘樼姍鐘氱姏鐘滅姖鐘炵姞鐘$姠鐘g姢鐘ョ姦鐘х姩鐘╃姫鐘姰鐘辩姴鐘崇姷鐘虹娀鐘肩娊鐘剧娍鐙�鐙呯媶鐙囩媺鐙婄媼鐙岀嫃鐙戠嫇鐙旂嫊鐙栫嫎鐙氱嫑锟�".split("");
+for(j = 0; j != D[160].length; ++j) if(D[160][j].charCodeAt(0) !== 0xFFFD) { e[D[160][j]] = 40960 + j; d[40960 + j] = D[160][j];}
+D[161] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟姐��銆併�偮匪壦嚶ㄣ�冦�呪�旓綖鈥栤�︹�樷�欌�溾�濄�斻�曘�堛�夈�娿�嬨�屻�嶃�庛�忋�栥�椼�愩�懧泵椕封埗鈭р埁鈭戔垙鈭埄鈭堚埛鈭氣姤鈭モ垹鈱掆姍鈭埉鈮♀墝鈮堚埥鈭濃墵鈮壇鈮も墺鈭炩埖鈭粹檪鈾�掳鈥测�斥剝锛劼わ繝锟♀�奥р剸鈽嗏槄鈼嬧棌鈼庘棁鈼嗏枴鈻犫柍鈻测�烩啋鈫愨啈鈫撱�擄拷".split("");
+for(j = 0; j != D[161].length; ++j) if(D[161][j].charCodeAt(0) !== 0xFFFD) { e[D[161][j]] = 41216 + j; d[41216 + j] = D[161][j];}
+D[162] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟解叞鈪扁叢鈪斥叴鈪碘叾鈪封吀鈪癸拷锟斤拷锟斤拷锟解拡鈷夆拪鈷嬧拰鈷嶁拵鈷忊拹鈷戔拻鈷撯挃鈷曗挅鈷椻挊鈷欌挌鈷涒懘鈶碘懚鈶封懜鈶光懞鈶烩懠鈶解懢鈶库拃鈷佲拏鈷冣拕鈷呪拞鈷団憼鈶♀憿鈶b懁鈶モ懄鈶р懆鈶╋拷锟姐垹銏°垻銏c垽銏ャ垿銏с埁銏╋拷锟解厾鈪♀參鈪b叅鈪モ叇鈪р叏鈪┾叒鈪拷锟斤拷".split("");
+for(j = 0; j != D[162].length; ++j) if(D[162][j].charCodeAt(0) !== 0xFFFD) { e[D[162][j]] = 41472 + j; d[41472 + j] = D[162][j];}
+D[163] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤紒锛傦純锟ワ紖锛嗭紘锛堬級锛婏紜锛岋紞锛庯紡锛愶紤锛掞紦锛旓紩锛栵紬锛橈紮锛氾紱锛滐紳锛烇紵锛狅肌锛迹锛わ讥锛︼姬锛缉锛极锛辑锛集锛帮急锛诧汲锛达嫉锛讹挤锛革脊锛猴蓟锛硷冀锛撅伎锝�锝侊絺锝冿絼锝咃絾锝囷綀锝夛綂锝嬶綄锝嶏綆锝忥綈锝戯綊锝擄綌锝曪綎锝楋綐锝欙綒锝涳綔锝濓浚锟�".split("");
+for(j = 0; j != D[163].length; ++j) if(D[163][j].charCodeAt(0) !== 0xFFFD) { e[D[163][j]] = 41728 + j; d[41728 + j] = D[163][j];}
+D[164] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟姐亖銇傘亙銇勩亝銇嗐亣銇堛亯銇娿亱銇屻亶銇庛亸銇愩亼銇掋亾銇斻仌銇栥仐銇樸仚銇氥仜銇溿仢銇炪仧銇犮仭銇€仯銇ゃ仴銇︺仹銇ㄣ仼銇伀銇伃銇伅銇般伇銇层伋銇淬伒銇躲伔銇搞伖銇恒伝銇笺伣銇俱伩銈�銈併倐銈冦倓銈呫倖銈囥倛銈夈倞銈嬨倢銈嶃値銈忋倫銈戙倰銈擄拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");
+for(j = 0; j != D[164].length; ++j) if(D[164][j].charCodeAt(0) !== 0xFFFD) { e[D[164][j]] = 41984 + j; d[41984 + j] = D[164][j];}
+D[165] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟姐偂銈€偅銈ゃ偉銈︺偋銈ㄣ偐銈偒銈偔銈偗銈般偙銈层偝銈淬偟銈躲偡銈搞偣銈恒偦銈笺偨銈俱偪銉�銉併儌銉冦儎銉呫儐銉囥儓銉夈儕銉嬨儗銉嶃儙銉忋儛銉戙儝銉撱償銉曘儢銉椼儤銉欍儦銉涖儨銉濄優銉熴儬銉°儮銉c儰銉ャ儲銉с儴銉┿儶銉儸銉儺銉儼銉便儾銉炽兇銉点兌锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");
+for(j = 0; j != D[165].length; ++j) if(D[165][j].charCodeAt(0) !== 0xFFFD) { e[D[165][j]] = 42240 + j; d[42240 + j] = D[165][j];}
+D[166] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟轿懳捨撐斘曃栁椢樜櫸毼浳溛澪炍熚犖∥Nのノξㄎ╋拷锟斤拷锟斤拷锟斤拷锟轿蔽参澄次滴段肺肝刮何晃嘉轿疚肯�蟻蟽蟿蠀蠁蠂蠄蠅锟斤拷锟斤拷锟斤拷锟斤傅锔讹腹锔猴缚锕�锔斤妇锕侊箓锕冿箘锟斤拷锔伙讣锔凤父锔憋拷锔筹复锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷".split("");
+for(j = 0; j != D[166].length; ++j) if(D[166][j].charCodeAt(0) !== 0xFFFD) { e[D[166][j]] = 42496 + j; d[42496 + j] = D[166][j];}
+D[167] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟叫愋懶捫撔斝曅佇栃椥樞櫺毿浶溞澬炐熜犘⌒⑿Pばバπㄐ┬拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷邪斜胁谐写械褢卸蟹懈泄泻谢屑薪芯锌褉褋褌褍褎褏褑褔褕褖褗褘褜褝褞褟锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷".split("");
+for(j = 0; j != D[167].length; ++j) if(D[167][j].charCodeAt(0) !== 0xFFFD) { e[D[167][j]] = 42752 + j; d[42752 + j] = D[167][j];}
+D[168] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷藠藡藱鈥撯�曗�モ�碘剠鈩夆問鈫椻啒鈫欌垥鈭熲垼鈮掆墻鈮р娍鈺愨晳鈺掆晸鈺斺晻鈺栤晽鈺樷暀鈺氣暃鈺溾暆鈺炩暉鈺犫暋鈺⑩暎鈺も暐鈺︹暓鈺ㄢ暕鈺暙鈺暛鈺暞鈺扳暠鈺测暢鈻佲杺鈻冣杽鈻呪枂鈻囷拷鈻堚枆鈻娾枊鈻屸枍鈻庘枏鈻撯枖鈻曗柤鈻解棦鈼b棨鈼モ槈鈯曘�掋�濄�烇拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷膩谩菐脿膿茅臎猫墨铆菒矛艒贸菕貌奴煤菙霉菛菢菤菧眉锚蓱锟脚勁堬拷伞锟斤拷锟斤拷銊呫剢銊囥剤銊夈剨銊嬨剬銊嶃剮銊忋剱銊戙剴銊撱剶銊曘剸銊椼剺銊欍剼銊涖劀銊濄劄銊熴劆銊°劉銊c劋銊ャ劍銊с劏銊╋拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");
+for(j = 0; j != D[168].length; ++j) if(D[168][j].charCodeAt(0) !== 0xFFFD) { e[D[168][j]] = 43008 + j; d[43008 + j] = D[168][j];}
+D[169] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷銆°�€�c�ゃ�ャ�︺�с�ㄣ�┿姡銕庛帍銕溿帩銕炪帯銖勩弾銖戙彃銖曪赴锟郡锟解劇銏憋拷鈥愶拷锟斤拷銉笺倹銈溿兘銉俱�嗐倽銈烇箟锕婏箣锕岋箥锕庯箯锕愶箲锕掞箶锕曪箹锕楋箼锕氾箾锕滐節锕烇篃锕狅埂锟斤耿锕o工锕ワ功锕供锕公锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟姐�囷拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鈹�鈹佲攤鈹冣攧鈹呪攩鈹団攬鈹夆攰鈹嬧攲鈹嶁攷鈹忊攼鈹戔敀鈹撯敂鈹曗敄鈹椻敇鈹欌敋鈹涒敎鈹濃敒鈹熲敔鈹♀敘鈹b敜鈹モ敠鈹р敤鈹┾敧鈹敩鈹敭鈹敯鈹扁敳鈹斥敶鈹碘敹鈹封敻鈹光敽鈹烩敿鈹解斁鈹库晙鈺佲晜鈺冣晞鈺呪晢鈺団晥鈺夆晩鈺嬶拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");
+for(j = 0; j != D[169].length; ++j) if(D[169][j].charCodeAt(0) !== 0xFFFD) { e[D[169][j]] = 43264 + j; d[43264 + j] = D[169][j];}
+D[170] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐙滅嫕鐙熺嫝鐙g嫟鐙ョ嫤鐙х嫪鐙嫷鐙剁嫻鐙界嬀鐙跨寑鐚傜寗鐚呯寙鐚囩寛鐚夌寢鐚岀實鐚忕寪鐚戠寬鐚旂寴鐚欑寶鐚熺尃鐚g尋鐚︾導鐚ㄧ尛鐚尠鐚茬尦鐚电尪鐚虹尰鐚肩尳鐛�鐛佺崅鐛冪崉鐛呯崋鐛囩崍锟界崏鐛婄崑鐛岀崕鐛忕崙鐛撶崝鐛曠崠鐛樼崣鐛氱崨鐛滅崫鐛炵崯鐛$崲鐛g崵鐛ョ崷鐛х崹鐛╃崻鐛嵁鐛扮嵄锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");
+for(j = 0; j != D[170].length; ++j) if(D[170][j].charCodeAt(0) !== 0xFFFD) { e[D[170][j]] = 43520 + j; d[43520 + j] = D[170][j];}
+D[171] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐛茬嵆鐛寸嵉鐛剁嵎鐛哥嵐鐛虹嵒鐛肩嵔鐛跨巰鐜佺巶鐜冪巺鐜嗙巿鐜婄帉鐜嶇帍鐜愮帓鐜撶帞鐜曠帡鐜樼帣鐜氱帨鐜濈帪鐜犵帯鐜g帳鐜ョ帵鐜х帹鐜幀鐜幈鐜寸幍鐜剁幐鐜圭幖鐜界幘鐜跨弫鐝冪弰鐝呯弳鐝囷拷鐝嬬弻鐝庣彃鐝撶彅鐝曠彇鐝楃彉鐝氱彌鐝滅彎鐝熺彙鐝㈢彛鐝ょ彟鐝ㄧ彧鐝彫鐝彲鐝扮彵鐝崇彺鐝电彾鐝凤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷".split("");
+for(j = 0; j != D[171].length; ++j) if(D[171][j].charCodeAt(0) !== 0xFFFD) { e[D[171][j]] = 43776 + j; d[43776 + j] = D[171][j];}
+D[172] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐝哥徆鐝虹徎鐝肩徑鐝剧徔鐞�鐞佺悅鐞勭悋鐞堢悑鐞岀悕鐞庣悜鐞掔悡鐞旂悤鐞栫悧鐞樼悪鐞滅悵鐞炵悷鐞犵悺鐞g悿鐞х惄鐞惌鐞惐鐞茬惙鐞哥惞鐞虹惢鐞界惥鐞跨憖鐟傜憙鐟勭憛鐟嗙憞鐟堢憠鐟婄憢鐟岀憤锟界憥鐟忕憪鐟戠憭鐟撶憯鐟栫憳鐟濈憼鐟$憿鐟g懁鐟ョ懄鐟х懆鐟╃應鐟懍鐟懐鐟辩懖鐟崇懘鐟电懜鐟圭懞锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");
+for(j = 0; j != D[172].length; ++j) if(D[172][j].charCodeAt(0) !== 0xFFFD) { e[D[172][j]] = 44032 + j; d[44032 + j] = D[172][j];}
+D[173] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐟荤懠鐟界懣鐠傜拕鐠呯拞鐠堢拤鐠婄拰鐠嶇拸鐠戠拻鐠撶挃鐠曠挅鐠楃挊鐠欑挌鐠涚挐鐠熺挔鐠$挗鐠g挙鐠ョ挦鐠挮鐠挱鐠挴鐠扮挶鐠茬挸鐠寸挼鐠剁挿鐠哥捁鐠荤捈鐠界捑鐠跨搥鐡佺搨鐡冪搫鐡呯搯鐡囷拷鐡堢搲鐡婄搵鐡岀搷鐡庣搹鐡愮搼鐡撶摂鐡曠摉鐡楃摌鐡欑摎鐡涚摑鐡熺摗鐡ョ摟鐡ㄧ摡鐡摣鐡摥鐡扮摫鐡诧拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷".split("");
+for(j = 0; j != D[173].length; ++j) if(D[173][j].charCodeAt(0) !== 0xFFFD) { e[D[173][j]] = 44288 + j; d[44288 + j] = D[173][j];}
+D[174] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐡崇摰鐡哥摴鐡虹摶鐡肩摻鐡剧攢鐢佺攤鐢冪攨鐢嗙攪鐢堢攭鐢婄攱鐢岀攷鐢愮敀鐢旂敃鐢栫敆鐢涚敐鐢炵敔鐢$敘鐢g敜鐢︾敡鐢敭鐢寸敹鐢圭敿鐢界斂鐣佺晜鐣冪晞鐣嗙晣鐣夌晩鐣嶇晲鐣戠晵鐣撶晻鐣栫晽鐣橈拷鐣濈暈鐣熺暊鐣$暍鐣g暏鐣х暔鐣╃暙鐣暛鐣暞鐣扮暠鐣崇暤鐣剁暦鐣虹暬鐣肩暯鐣剧杸鐤佺杺鐤勭枀鐤囷拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷".split("");
+for(j = 0; j != D[174].length; ++j) if(D[174][j].charCodeAt(0) !== 0xFFFD) { e[D[174][j]] = 44544 + j; d[44544 + j] = D[174][j];}
+D[175] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐤堢枆鐤婄枌鐤嶇枎鐤愮枔鐤曠枠鐤涚枩鐤炵枹鐤︾枾鐤ㄧ柀鐤柇鐤剁柗鐤虹柣鐤跨梹鐥佺梿鐥嬬棇鐥庣棌鐥愮棏鐥撶棗鐥欑棜鐥滅棟鐥熺棤鐥$棩鐥╃棳鐥棶鐥棽鐥崇椀鐥剁椃鐥哥椇鐥荤椊鐥剧槀鐦勭槅鐦囷拷鐦堢槈鐦嬬槏鐦庣槒鐦戠槖鐦撶様鐦栫槡鐦滅槤鐦炵槨鐦g槯鐦ㄧ槵鐦槸鐦辩槻鐦剁樂鐦圭樅鐦荤樈鐧佺檪鐧勶拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷".split("");
+for(j = 0; j != D[175].length; ++j) if(D[175][j].charCodeAt(0) !== 0xFFFD) { e[D[175][j]] = 44800 + j; d[44800 + j] = D[175][j];}
+D[176] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐧呯檰鐧囩檲鐧夌檴鐧嬬檸鐧忕檺鐧戠檼鐧撶檿鐧楃櫂鐧欑櫄鐧涚櫇鐧熺櫊鐧$櫌鐧ょ櫏鐧︾櫑鐧ㄧ櫓鐧櫖鐧櫘鐧扮櫛鐧茬櫝鐧寸櫟鐧剁櫡鐧圭櫤鐧肩櫩鐨�鐨佺殐鐨呯殙鐨婄殞鐨嶇殢鐨愮殥鐨旂殨鐨楃殬鐨氱殯锟界殰鐨濈殲鐨熺殸鐨$殺鐨g殽鐨︾毀鐨ㄧ毄鐨毇鐨毉鐨毎鐨崇毜鐨剁毞鐨哥毠鐨虹毣鐨肩毥鐨剧泙鐩佺泝鍟婇樋鍩冩尐鍝庡攭鍝�鐨戠檶钄肩煯鑹剧鐖遍殬闉嶆皑瀹変亢鎸夋殫宀歌兒妗堣偖鏄傜泿鍑规晼鐔勘琚勫偛濂ユ噴婢宠姯鎹屾墥鍙惂绗嗗叓鐤ゅ反鎷旇穻闈舵妸鑰欏潩闇哥舰鐖哥櫧鏌忕櫨鎽嗕桨璐ユ嫓绋楁枒鐝惉鎵宠埇棰佹澘鐗堟壆鎷屼即鐡e崐鍔炵粖閭﹀府姊嗘鑶�缁戞纾呰殞闀戝倣璋よ嫗鑳炲寘瑜掑墺锟�".split("");
+for(j = 0; j != D[176].length; ++j) if(D[176][j].charCodeAt(0) !== 0xFFFD) { e[D[176][j]] = 45056 + j; d[45056 + j] = D[176][j];}
+D[177] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐩勭泧鐩夌泲鐩岀洆鐩曠洐鐩氱洔鐩濈洖鐩犵洝鐩㈢洠鐩ょ洣鐩х洦鐩╃洩鐩洭鐩洶鐩崇浀鐩剁浄鐩虹浕鐩界浛鐪�鐪傜渻鐪呯渾鐪婄湆鐪庣湉鐪愮湋鐪掔湏鐪旂湑鐪栫湕鐪樼湜鐪滅湞鐪炵湣鐪g湦鐪ョ湩鐪湯锟界湰鐪湴鐪辩湶鐪崇湸鐪圭溁鐪界溇鐪跨潅鐫勭潊鐫嗙潏鐫夌潑鐫嬬潓鐫嶇潕鐫忕潚鐫撶潝鐫曠潠鐫楃潣鐫欑潨钖勯浌淇濆牎楗卞疂鎶辨姤鏆磋惫椴嶇垎鏉鎮插崙鍖楄緢鑳岃礉閽″�嶇媹澶囨儷鐒欒濂旇嫰鏈宕╃环鐢车韫﹁扛閫奸蓟姣旈剻绗斿郊纰ц摉钄芥瘯姣欐瘱甯佸簢鐥归棴鏁濆紛蹇呰緹澹佽噦閬块櫅闉竟缂栬船鎵佷究鍙樺崬杈ㄨ京杈亶鏍囧姜鑶樿〃槌栨唻鍒槳褰枌婵掓花瀹炬憟鍏靛啺鏌勪笝绉夐ゼ鐐筹拷".split("");
+for(j = 0; j != D[177].length; ++j) if(D[177][j].charCodeAt(0) !== 0xFFFD) { e[D[177][j]] = 45312 + j; d[45312 + j] = D[177][j];}
+D[178] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐫濈潪鐫熺潬鐫ょ潷鐫╃潽鐫澁鐫澃鐫辩澆鐫崇澊鐫电澏鐫风澑鐫虹澔鐫肩瀬鐬傜瀮鐬嗙瀲鐬堢瀴鐬婄瀷鐬忕瀽鐬撶灁鐬曠灃鐬楃灅鐬欑灇鐬涚灉鐬濈灋鐬$灒鐬ょ灕鐬ㄧ灚鐬灝鐬灡鐬茬灤鐬剁灧鐬哥灩鐬猴拷鐬肩灳鐭�鐭佺焸鐭冪焺鐭呯焼鐭囩焾鐭夌煀鐭嬬煂鐭庣煆鐭愮煈鐭掔煋鐭旂煏鐭栫煒鐭欑煔鐭濈煘鐭熺煚鐭$煠鐥呭苟鐜昏彔鎾嫧閽垫尝鍗氬媰鎼忛搨绠斾集甯涜埗鑴栬唺娓ゆ硦椹虫崟鍗滃摵琛ュ煚涓嶅竷姝ョ翱閮ㄦ�栨摝鐚滆鏉愭墠璐㈢潿韪╅噰褰╄彍钄¢鍙傝殨娈嬫儹鎯ㄧ伩鑻嶈埍浠撴钵钘忔搷绯欐Ы鏇硅崏鍘曠瓥渚у唽娴嬪眰韫彃鍙夎尙鑼舵煡纰存惤瀵熷矓宸鎷嗘煷璞烘悁鎺鸿潐棣嬭皸缂犻摬浜ч槓棰ゆ槍鐚栵拷".split("");
+for(j = 0; j != D[178].length; ++j) if(D[178][j].charCodeAt(0) !== 0xFFFD) { e[D[178][j]] = 45568 + j; d[45568 + j] = D[178][j];}
+D[179] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐭︾煥鐭煰鐭扮煴鐭茬煷鐭电煼鐭圭熀鐭荤熂鐮冪爠鐮呯爢鐮囩爤鐮婄爧鐮庣爮鐮愮爴鐮曠牂鐮涚牉鐮犵牎鐮㈢牑鐮ㄧ牚鐮牣鐮牨鐮茬牫鐮电牰鐮界牽纭佺纭冪纭嗙纭夌纭嬬纭忕纭撶纭樼纭氾拷纭涚纭炵纭犵 纭㈢。纭ょˉ纭︾¨纭ㄧ々纭“纭辩〔纭崇〈纭电《纭哥」纭虹』纭界【纭跨纰佺纰冨満灏濆父闀垮伩鑲犲巶鏁炵晠鍞卞�¤秴鎶勯挒鏈濆槻娼发鍚电倰杞︽壇鎾ゆ帲褰绘緢閮磋嚕杈板皹鏅ㄥ勘娌夐檲瓒佽‖鎾戠О鍩庢鎴愬憟涔樼▼鎯╂緞璇氭壙閫為獘绉ゅ悆鐥存寔鍖欐睜杩熷紱椹拌�婚娇渚堝昂璧ょ繀鏂ョ偨鍏呭啿铏磭瀹犳娊閰暣韪岀鎰佺浠囩桓鐬呬笐鑷垵鍑烘┍鍘ㄨ簢閿勯洀婊侀櫎妤氾拷".split("");
+for(j = 0; j != D[179].length; ++j) if(D[179][j].charCodeAt(0) !== 0xFFFD) { e[D[179][j]] = 45824 + j; d[45824 + j] = D[179][j];}
+D[180] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷纰勭纰嗙纰婄纰忕纰掔纰曠纰欑纰炵纰㈢ⅳ纰︾ⅷ纰╃ⅹ纰纰纰⒌纰剁⒎纰哥⒑纰荤⒓纰界⒖纾�纾傜纾勭纾囩纾岀纾庣纾戠纾撶纾楃纾氱纾滅纾炵纾犵!纾㈢#锟界¥纾ョ&纾х)纾+纾.纾0纾辩3纾电6纾哥9纾荤<纾界>纾跨绀傜绀勭绀囩绀夌绀嬬纭�鍌ㄧ煑鎼愯Е澶勬彛宸濈┛妞戒紶鑸瑰枠涓茬柈绐楀耿搴婇棷鍒涘惞鐐婃嵍閿ゅ瀭鏄ユた閱囧攪娣崇函锠㈡埑缁扮柕鑼ㄧ闆岃緸鎱堢摲璇嶆鍒鸿祼娆¤仾钁卞洷鍖嗕粠涓涘噾绮楅唻绨囦績韫跨绐滄懅宕斿偓鑴嗙榿绮规番缈犳潙瀛樺纾嬫挳鎼撴帾鎸敊鎼揪绛旂槱鎵撳ぇ鍛嗘鍌f埓甯︽畣浠h捶琚嬪緟閫拷".split("");
+for(j = 0; j != D[180].length; ++j) if(D[180][j].charCodeAt(0) !== 0xFFFD) { e[D[180][j]] = 46080 + j; d[46080 + j] = D[180][j];}
+D[181] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绀嶇绀忕绀戠绀旂绀栫绀樼绀氱绀滅绀熺绀$あ绀gぅ绀︾ぇ绀ㄧぉ绀か绀き绀く绀扮け绀茬こ绀电ざ绀风じ绀圭そ绀跨绁冪绁呯绁婄绁岀绁庣绁愮绁掔绁曠绁欑ァ绁o拷绁ょウ绁╃オ绁ガ绁グ绁辩ゲ绁崇ゴ绁电ザ绁圭セ绁肩ソ绁剧タ绂傜绂嗙绂堢绂嬬绂嶇绂愮绂掓�犺�芥媴涓瑰崟閮告幐鑳嗘棪姘絾鎯贰璇炲脊铔嬪綋鎸″厷鑽℃。鍒�鎹h箞鍊掑矝绁峰鍒扮ɑ鎮奸亾鐩楀痉寰楃殑韫伅鐧荤瓑鐬嚦閭撳牑浣庢淮杩晫绗涚媱娑ょ繜瀚℃姷搴曞湴钂傜甯濆紵閫掔紨棰犳巶婊囩鐐瑰吀闈涘灚鐢典絻鐢稿簵鎯﹀娣�娈跨鍙奸洉鍑嬪垇鎺夊悐閽撹皟璺岀埞纰熻澏杩皪鍙狅拷".split("");
+for(j = 0; j != D[181].length; ++j) if(D[181][j].charCodeAt(0) !== 0xFFFD) { e[D[181][j]] = 46336 + j; d[46336 + j] = D[181][j];}
+D[182] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绂撶绂曠绂楃绂欑绂滅绂炵绂犵Α绂㈢Γ绂ょΕ绂︾Θ绂╃Κ绂Μ绂Ξ绂Π绂辩Σ绂寸Φ绂剁Ψ绂哥绂跨绉勭绉囩绉婄绉庣绉愮绉旂绉楃绉氱绉滅绉炵绉$Б绉ョЖ绉拷绉М绉辩Р绉崇Т绉电Ф绉风Ч绉虹Ъ绉剧Э绋佺▌绋呯▏绋堢▔绋婄▽绋忕◥绋戠♁绋撶〞绋栫绋欑绋滀竵鐩彯閽夐《榧庨敪瀹氳涓笢鍐懀鎳傚姩鏍嬩緱鎭喕娲炲厹鎶栨枟闄¤眴閫楃棙閮界潱姣掔妸鐙鍫电澒璧屾潨闀�鑲氬害娓″绔煭閿绘鏂紟鍫嗗厬闃熷澧╁惃韫叉暒椤垮洡閽濈浘閬佹巼鍝嗗澶哄灈韬叉湹璺鸿埖鍓佹儼鍫曡浘宄ㄩ箙淇勯璁瑰ē鎭跺巹鎵奸亸閯傞タ鎭╄�屽効鑰冲皵楗垫幢浜岋拷".split("");
+for(j = 0; j != D[182].length; ++j) if(D[182][j].charCodeAt(0) !== 0xFFFD) { e[D[182][j]] = 46592 + j; d[46592 + j] = D[182][j];}
+D[183] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绋濈绋$á绋ょē绋︾ě绋ㄧī绋ǐ绋ō绋ǒ绋扮ū绋茬ù绋电ǘ绋哥ê绋剧﹢绌佺﹤绌冪﹦绌呯﹪绌堢绌婄绌岀绌庣绌愮绌撶绌曠〇绌樼绌氱绌滅绌炵绌犵绌㈢绌ょ━绌︾┃绌拷绌╃┆绌┈绌┊绌┍绌茬┏绌电┗绌肩┙绌剧獋绐呯獓绐夌獖绐嬬獙绐庣獜绐愮獡绐旂獧绐氱獩绐炵绐㈣窗鍙戠綒绛忎紣涔忛榾娉曠彁钘╁竼鐣炕妯婄熅閽掔箒鍑$儲鍙嶈繑鑼冭穿鐘キ娉涘潑鑺虫柟鑲埧闃插Θ浠胯绾烘斁鑿查潪鍟¢鑲ュ尓璇藉悹鑲哄簾娌歌垂鑺厷鍚╂皼鍒嗙悍鍧熺剼姹剧矇濂嬩唤蹇挎劋绮赴灏佹灚铚傚嘲閿嬮鐤兘閫㈠啹缂濊濂夊嚖浣涘惁澶暦鑲ゅ鎵舵媯杈愬箙姘熺浼忎繕鏈嶏拷".split("");
+for(j = 0; j != D[183].length; ++j) if(D[183][j].charCodeAt(0) !== 0xFFFD) { e[D[183][j]] = 46848 + j; d[46848 + j] = D[183][j];}
+D[184] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绐g绐х绐绐绐扮绐茬绐电绐风绐圭绐荤绐界绔�绔佺珎绔冪珓绔呯珕绔囩珗绔夌珚绔岀珝绔庣珡绔愮珣绔掔珦绔旂珪绔楃珮绔氱珱绔滅珴绔$绔ょ绔ㄧ绔绔绔扮绔茬锟界绔电绔风绔荤绔剧瑎绗佺瑐绗呯瑖绗夌瑢绗嶇瑤绗愮瑨绗撶瑬绗楃瑯绗氱瑴绗濈瑹绗$绗g绗╃娴丢绂忚⒈寮楃敨鎶氳緟淇嚋鏂ц劘鑵戝簻鑵愯荡鍓璧嬪鍌呬粯闃滅埗鑵硅礋瀵岃闄勫缂氬拹鍣跺槑璇ユ敼姒傞挋鐩栨簤骞茬敇鏉嗘煈绔胯倽璧舵劅绉嗘暍璧e唸鍒氶挗缂歌倹绾插矖娓潬绡欑殝楂樿啅缇旂硶鎼為晲绋垮憡鍝ユ瓕鎼佹垐楦借兂鐤欏壊闈╄憶鏍艰洡闃侀殧閾釜鍚勭粰鏍硅窡鑰曟洿搴氱竟锟�".split("");
+for(j = 0; j != D[184].length; ++j) if(D[184][j].charCodeAt(0) !== 0xFFFD) { e[D[184][j]] = 47104 + j; d[47104 + j] = D[184][j];}
+D[185] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绗绗茬绗电绗风绗荤绗跨瓈绛佺瓊绛冪瓌绛嗙瓐绛婄瓖绛庣瓝绛曠瓧绛欑瓬绛炵瓱绛$绛ょ绛︾绛ㄧ绛绛绛绛崇绛剁绛虹绛界绠佺畟绠冪畡绠嗙畤绠堢畨绠婄畫绠岀畮绠忥拷绠戠畳绠撶畺绠樼畽绠氱疀绠炵疅绠犵绠ょ绠绠扮绠崇绠剁绠圭绠荤绠界绠跨瘈绡傜瘍绡勫焸鑰挎宸ユ敾鍔熸伃榫氫緵韬叕瀹紦宸╂睘鎷辫础鍏遍挬鍕炬矡鑻熺嫍鍨㈡瀯璐杈滆弴鍜曠畭浼版步瀛ゅ榧撳彜铔婇璋疯偂鏁呴【鍥洪泧鍒摐鍓愬鎸傝涔栨嫄鎬:鍏冲畼鍐犺绠¢缃愭儻鐏岃疮鍏夊箍閫涚懓瑙勫湱纭呭綊榫熼椇杞ㄩ璇$櫢妗傛煖璺吹鍒借緤婊氭閿呴儹鍥芥灉瑁硅繃鍝堬拷".split("");
+for(j = 0; j != D[185].length; ++j) if(D[185][j].charCodeAt(0) !== 0xFFFD) { e[D[185][j]] = 47360 + j; d[47360 + j] = D[185][j];}
+D[186] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绡呯瘓绡夌瘖绡嬬瘝绡庣瘡绡愮瘨绡旂瘯绡栫瘲绡樼瘺绡滅癁绡熺癄绡㈢绡ょ绡ㄧ绡绡绡扮绡崇绡电绡哥绡虹绡界绨�绨佺皞绨冪皠绨呯皢绨堢皦绨婄皪绨庣皭绨戠皰绨撶皵绨曠皸绨樼皺锟界皻绨涚皽绨濈盀绨犵啊绨㈢埃绨ょ哎绨ㄧ癌绨艾绨爱绨鞍绨辩安绨崇按绨电岸绨风肮绨虹盎绨肩敖绨剧眰楠稿娴锋唉浜ュ楠囬叄鎲ㄩ偗闊╁惈娑靛瘨鍑藉枈缃曠堪鎾兼崓鏃辨喚鎮嶇剨姹楁眽澶澀鑸鍤庤豹姣儩濂借�楀彿娴╁懙鍠濊嵎鑿忔牳绂惧拰浣曞悎鐩掕矇闃傛渤娑歌但瑜愰工璐哄樋榛戠棔寰堢嫚鎭ㄥ摷浜ㄦí琛℃亽杞板搫鐑樿櫣楦挎椽瀹忓紭绾㈠枆渚尨鍚煎帤鍊欏悗鍛间箮蹇界憵澹惰懌鑳¤澊鐙愮硦婀栵拷".split("");
+for(j = 0; j != D[186].length; ++j) if(D[186][j].charCodeAt(0) !== 0xFFFD) { e[D[186][j]] = 47616 + j; d[47616 + j] = D[186][j];}
+D[187] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绫冪眲绫呯眴绫囩眻绫夌眾绫嬬睂绫庣睆绫愮睉绫掔睋绫旂睍绫栫睏绫樼睓绫氱睕绫滅睗绫炵睙绫犵薄绫㈢保绫ょ饱绫︾抱绫ㄧ暴绫鲍绫杯绫悲绫扮北绫茬钡绫剁狈绫哥惫绫虹本绫跨瞼绮佺矀绮冪矂绮呯矄绮囷拷绮堢矈绮嬬矊绮嶇矌绮忕矏绮撶矓绮栫矙绮氱矝绮犵病绮g拨绮х波绮╃搏绮箔绮舶绮寸驳绮剁卜绮哥埠绮诲姬铏庡敩鎶や簰娌埛鑺卞摋鍗庣尵婊戠敾鍒掑寲璇濇寰婃��娣潖娆㈢幆妗撹繕缂撴崲鎮e敜鐥雹鐒曟叮瀹﹀够鑽掓厡榛勭:铦楃哀鐨囧嚢鎯剁厡鏅冨箤鎭嶈皫鐏版尌杈夊窘鎭㈣洈鍥炴瘉鎮旀収鍗夋儬鏅﹁纯绉戒細鐑╂眹璁宠缁樿崵鏄忓榄傛祽娣疯眮娲讳紮鐏幏鎴栨儜闇嶈揣绁稿嚮鍦惧熀鏈虹暩绋界Н绠曪拷".split("");
+for(j = 0; j != D[187].length; ++j) if(D[187][j].charCodeAt(0) !== 0xFFFD) { e[D[187][j]] = 47872 + j; d[47872 + j] = D[187][j];}
+D[188] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绮跨硛绯傜硟绯勭硢绯夌硧绯庣硰绯愮硲绯掔硴绯旂硺绯氱硾绯濈碁绯$尝绯g长绯ョ肠绯х畅绯倡绯抄绯嘲绯辩巢绯崇炒绯电扯绯风彻绯虹臣绯界尘绯跨磤绱佺磦绱冪磩绱呯磫绱囩磮绱夌磱绱岀磵绱庣磸绱愶拷绱戠磼绱撶磾绱曠礀绱楃礃绱欑礆绱涚礈绱濈礊绱熺础绱g搐绱ョ处绱ㄧ穿绱船绱串绱扮幢绱茬闯绱寸吹绱惰倢楗ヨ抗婵�璁ラ浮濮哗缂夊悏鏋佹杈戠睄闆嗗強鎬ョ柧姹插嵆瀚夌骇鎸ゅ嚑鑴婂繁钃熸妧鍐�瀛d紟绁墏鎮告祹瀵勫瘋璁¤鏃㈠繉闄呭缁х邯鍢夋灧澶逛匠瀹跺姞鑽氶璐剧敳閽惧亣绋间环鏋堕┚瀚佹鐩戝潥灏栫闂寸厧鍏艰偐鑹板ジ缂勮導妫�鏌⒈纭锋嫞鎹$畝淇壀鍑忚崘妲涢壌璺佃幢瑙侀敭绠欢锟�".split("");
+for(j = 0; j != D[188].length; ++j) if(D[188][j].charCodeAt(0) !== 0xFFFD) { e[D[188][j]] = 48128 + j; d[48128 + j] = D[188][j];}
+D[189] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绱风锤绱圭春绱荤醇绱界淳绱跨祤绲佺祩绲冪祫绲呯祮绲囩祱绲夌祳绲嬬祵绲嶇祹绲忕祼绲戠祾绲撶禂绲曠禆绲楃禈绲欑禋绲涚禍绲濈禐绲熺禒绲$耽绲g丹绲ョ郸绲х胆绲╃氮绲惮绲弹绲扮当绲茬党绲寸档绲讹拷绲哥倒绲虹祷绲肩到绲剧悼缍�缍佺秱缍冪秳缍呯秵缍囩秷缍夌秺缍嬬秾缍嶇稁缍忕稅缍戠稈缍撶稊缍曠稏缍楃稑鍋ヨ埌鍓戦ク娓愭簠娑у缓鍍靛灏嗘祮姹熺枂钂嬫〃濂栬鍖犻叡闄嶈晧妞掔鐒﹁兌浜ら儕娴囬獎濞囧毤鎼呴摪鐭茎鑴氱嫛瑙掗ズ缂寸粸鍓挎暀閰佃娇杈冨彨绐栨彮鎺ョ殕绉歌闃舵埅鍔妭妗旀澃鎹风潾绔磥缁撹В濮愭垝钘夎姤鐣屽�熶粙鐤ヨ灞婂肪绛嬫枻閲戜粖娲ヨ绱ч敠浠呰皑杩涢澇鏅嬬杩戠儸娴革拷".split("");
+for(j = 0; j != D[189].length; ++j) if(D[189][j].charCodeAt(0) !== 0xFFFD) { e[D[189][j]] = 48384 + j; d[48384 + j] = D[189][j];}
+D[190] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷缍欑稓缍涚稖缍濈稙缍熺稜缍$盯缍g钉缍ョ锭缍ㄧ订缍东缍董缍栋缍辩恫缍崇洞缍电抖缍风陡缍圭逗缍荤都缍界毒缍跨穩绶佺穫绶冪穭绶呯穯绶囩穲绶夌穵绶嬬穼绶嶇穾绶忕窅绶戠窉绶撶窋绶曠窎绶楃窐绶欙拷绶氱窙绶滅窛绶炵窡绶犵贰绶㈢罚绶ょ伐绶︾阀绶ㄧ珐绶帆绶翻绶矾绶扮繁绶茬烦绶寸返绶剁贩绶哥饭绶哄敖鍔茶崋鍏㈣寧鐫涙櫠椴镐含鎯婄簿绮崇粡浜曡鏅闈欏鏁暅寰勭棄闈栫珶绔炲噣鐐獦鎻┒绾犵帠闊箙鐏镐節閰掑帺鏁戞棫鑷艰垍鍜庡氨鐤氶灎鎷樼嫏鐤藉眳椹硅強灞�鍜�鐭╀妇娌仛鎷掓嵁宸ㄥ叿璺濊笧閿勘鍙ユ儳鐐墽鎹愰箖濞熷�︾湻鍗风虎鎾呮敨鎶夋帢鍊旂埖瑙夊喅璇�缁濆潎鑿岄挧鍐涘悰宄伙拷".split("");
+for(j = 0; j != D[190].length; ++j) if(D[190][j].charCodeAt(0) !== 0xFFFD) { e[D[190][j]] = 48640 + j; d[48640 + j] = D[190][j];}
+D[191] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绶荤芳绶界肪绶跨竴绺佺競绺冪竸绺呯竼绺囩笀绺夌笂绺嬬笇绺嶇笌绺忕笎绺戠笒绺撶笖绺曠笘绺楃笜绺欑笟绺涚笢绺濈笧绺熺笭绺$涪绺g袱绺ョ甫绺х辅绺╃釜绺脯绺府绺赴绺辩覆绺崇复绺电付绺风父绺癸拷绺虹讣绺界妇绺跨箑绻傜箖绻勭箙绻嗙箞绻夌箠绻嬬箤绻嶇箮绻忕箰绻戠箳绻撶箶绻曠箹绻楃箻绻欑箽绻涚箿绻濅繆绔f禋閮¢獜鍠�鍜栧崱鍜紑鎻╂シ鍑叏鍒婂牚鍕樺潕鐮嶇湅搴锋叿绯犳墰鎶椾孩鐐曡�冩嫹鐑ら潬鍧疯嫑鏌5纾曢绉戝3鍜冲彲娓村厠鍒诲璇捐偗鍟冨灕鎭冲潙鍚┖鎭愬瓟鎺ф姞鍙f墸瀵囨灟鍝獰鑻﹂叿搴撹¥澶稿灝鎸庤法鑳潡绛蜂京蹇娆惧尅绛愮媯妗嗙熆鐪舵椃鍐典簭鐩斿部绐ヨ懙濂庨瓉鍌�锟�".split("");
+for(j = 0; j != D[191].length; ++j) if(D[191][j].charCodeAt(0) !== 0xFFFD) { e[D[191][j]] = 48896 + j; d[48896 + j] = D[191][j];}
+D[192] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绻炵篃绻犵埂绻㈢梗绻ょ攻绻︾恭绻ㄧ供绻公绻弓绻汞绻扮贡绻茬钩绻寸沟绻剁狗绻哥构绻虹够绻肩菇绻剧箍绾�绾佺簝绾勭簠绾嗙簢绾堢簤绾婄簨绾岀簫绾庣簭绾愮簯绾掔簱绾旂簳绾栫簵绾樼簷绾氱簻绾濈簽锟界寒绾寸夯绾肩粬缁ょ滑缁圭紛缂愮紴缂风脊缂荤技缂界季缂跨絸缃佺絻缃嗙絿缃堢綁缃婄綃缃岀綅缃庣綇缃掔綋棣堟劎婧冨潳鏄嗘崋鍥版嫭鎵╁粨闃斿瀮鎷夊枃铚¤厞杈e暒鑾辨潵璧栬摑濠爮鎷︾闃戝叞婢滆鞍鎻借鎳掔紗鐑傛互鐞呮鐙煎粖閮庢湕娴崬鍔崇墷鑰佷浆濮ラ叒鐑欐稘鍕掍箰闆烽暛钑剧绱劇鍨掓搨鑲嬬被娉1妤炲喎鍘樻ⅷ鐘侀粠绡辩嫺绂绘紦鐞嗘潕閲岄菠绀艰帀鑽斿悘鏍椾附鍘夊姳鐮惧巻鍒╁倛渚嬩繍锟�".split("");
+for(j = 0; j != D[192].length; ++j) if(D[192][j].charCodeAt(0) !== 0xFFFD) { e[D[192][j]] = 49152 + j; d[49152 + j] = D[192][j];}
+D[193] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷缃栫綑缃涚綔缃濈綖缃犵剑缃ょ渐缃︾涧缃浆缃蒋缃扮匠缃电蕉缃风礁缃虹交缃肩浇缃跨線缇傜緝缇勭緟缇嗙緡缇堢緣缇嬬緧缇忕緪缇戠緬缇撶緯缇栫緱缇樼緳缇涚緶缇犵劲缇g茎缇︾鲸缇╃惊缇粳缇井缇憋拷缇崇敬缇电径缇风竞缇荤揪缈�缈傜績缈勭繂缈囩繄缈夌繈缈嶇繌缈愮繎缈掔繐缈栫織缈欑繗缈涚繙缈濈繛缈㈢浚鐥㈢珛绮掓播闅跺姏鐠冨摡淇╄仈鑾茶繛闀板粔鎬滄稛甯樻暃鑴搁摼鎭嬬偧缁冪伯鍑夋绮辫壇涓よ締閲忔櫨浜皡鎾╄亰鍍氱枟鐕庡杈芥溅浜嗘拏闀e粬鏂欏垪瑁傜儓鍔g寧鐞虫灄纾烽湒涓撮偦槌炴穻鍑涜祦鍚濇嫀鐜茶彵闆堕緞閾冧级缇氬噷鐏甸櫟宀鍙︿护婧滅悏姒寸~棣忕暀鍒樼槫娴佹煶鍏緳鑱嬪挋绗肩锟�".split("");
+for(j = 0; j != D[193].length; ++j) if(D[193][j].charCodeAt(0) !== 0xFFFD) { e[D[193][j]] = 49408 + j; d[49408 + j] = D[193][j];}
+D[194] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷缈ょ咖缈ㄧ开缈楷缈刊缈茬看缈电慷缈风扛缈圭亢缈界烤缈胯�傝�囪�堣�夎�婅�庤�忚�戣�撹�氳�涜�濊�炶�熻�¤�h�よ������拌�茶�磋�硅�鸿�艰�捐亐鑱佽亜鑱呰亣鑱堣亯鑱庤亸鑱愯亼鑱撹仌鑱栬仐锟借仚鑱涜仠鑱濊仦鑱熻仩鑱¤仮鑱h仱鑱ヨ仸鑱ц仺鑱伂鑱伄鑱伆鑱茶伋鑱磋伒鑱惰伔鑱歌伖鑱鸿伝鑱艰伣闅嗗瀯鎷㈤檱妤煎▌鎼傜瘬婕忛檵鑺﹀崲棰呭簮鐐夋幊鍗よ檹椴侀簱纰岄湶璺祩楣挎綖绂勫綍闄嗘埉椹村悤閾濅荆鏃呭饱灞$紩铏戞隘寰嬬巼婊ょ豢宄︽寷瀛沪鍗典贡鎺犵暐鎶¤疆浼︿粦娌︾憾璁鸿悵铻虹綏閫婚敚绠╅瑁歌惤娲涢獑缁滃楹荤帥鐮佽殏椹獋鍢涘悧鍩嬩拱楹﹀崠杩堣剦鐬掗铔弧钄撴浖鎱㈡极锟�".split("");
+for(j = 0; j != D[194].length; ++j) if(D[194][j].charCodeAt(0) !== 0xFFFD) { e[D[194][j]] = 49664 + j; d[49664 + j] = D[194][j];}
+D[195] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鑱捐倎鑲傝倕鑲堣倞鑲嶈値鑲忚倫鑲戣倰鑲旇倳鑲楄倷鑲炶偅鑲﹁偋鑲ㄨ偓鑲拌偝鑲佃偠鑲歌偣鑲昏儏鑳囪儓鑳夎儕鑳嬭儚鑳愯儜鑳掕儞鑳旇儠鑳樿儫鑳犺儮鑳h儲鑳兊鑳疯児鑳昏兙鑳胯剙鑴佽剝鑴勮剠鑴囪剤鑴嬶拷鑴岃剷鑴楄剻鑴涜劀鑴濊劅鑴犺劇鑴㈣劊鑴よ劌鑴﹁劎鑴ㄨ劑鑴劔鑴劗鑴拌劤鑴磋劦鑴疯劰鑴鸿劵鑴艰劷鑴胯癌鑺掕尗鐩叉皳蹇欒幗鐚寘閿氭瘺鐭涢搯鍗寕鍐掑附璨岃锤涔堢帿鏋氭閰堕湁鐓ゆ病鐪夊獟闀佹瘡缇庢槯瀵愬濯氶棬闂蜂滑钀岃挋妾洘閿扮寷姊﹀瓱鐪啔闈$硿杩疯皽寮ョ背绉樿娉岃湝瀵嗗箓妫夌湢缁靛啎鍏嶅媺濞╃紖闈㈣嫍鎻忕瀯钘愮娓哄簷濡欒攽鐏皯鎶跨毧鏁忔偗闂芥槑铻熼福閾悕鍛借艾鎽革拷".split("");
+for(j = 0; j != D[195].length; ++j) if(D[195][j].charCodeAt(0) !== 0xFFFD) { e[D[195][j]] = 49920 + j; d[49920 + j] = D[195][j];}
+D[196] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鑵�鑵佽厒鑵冭厔鑵呰厙鑵夎厤鑵庤厪鑵掕厲鑵楄厴鑵涜厹鑵濊厼鑵熻叀鑵㈣叄鑵よ叇鑵ㄨ叒鑵叕鑵叢鑵宠叺鑵惰叿鑵歌唩鑶冭唲鑶呰唵鑶囪唹鑶嬭唽鑶嶈啂鑶愯啋鑶撹啍鑶曡問鑶楄啓鑶氳啚鑶熻啝鑶¤啟鑶よ啣锟借啩鑶╄啱鑶啳鑶啹鑶拌啽鑶茶喆鑶佃喍鑶疯喐鑶硅喖鑶借喚鑶胯噭鑷呰噰鑷堣噳鑷嬭噸鑷庤噺鑷愯噾鑷掕嚀鎽硅槕妯¤啘纾ㄦ懇榄旀姽鏈帿澧ㄩ粯娌紶瀵為檶璋嬬墴鏌愭媷鐗′憨濮嗘瘝澧撴毊骞曞嫙鎱曟湪鐩潶鐗х﹩鎷垮摢鍛愰挔閭e绾虫皷涔冨ザ鑰愬鍗楃敺闅惧泭鎸犺剳鎭奸椆娣栧憿棣佸唴瀚╄兘濡湏鍊偿灏兼嫙浣犲尶鑵婚�嗘汉钄媹骞寸⒕鎾垫嵒蹇靛閰块笩灏挎崗鑱傚鍟晩闀嶆秴鎮ㄦ煚鐙炲嚌瀹侊拷".split("");
+for(j = 0; j != D[196].length; ++j) if(D[196][j].charCodeAt(0) !== 0xFFFD) { e[D[196][j]] = 50176 + j; d[50176 + j] = D[196][j];}
+D[197] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鑷旇嚂鑷栬嚄鑷樿嚈鑷氳嚊鑷滆嚌鑷炶嚐鑷犺嚒鑷㈣嚖鑷ヨ嚘鑷ㄨ嚛鑷嚠鑷嚢鑷辫嚥鑷佃嚩鑷疯嚫鑷硅嚭鑷借嚳鑸冭垏鑸堣垑鑸婅垕鑸庤垙鑸戣垞鑸曡垨鑸楄垬鑸欒垰鑸濊垹鑸よ垾鑸﹁埀鑸╄埉鑸茶埡鑸艰埥鑸匡拷鑹�鑹佽墏鑹冭墔鑹嗚増鑹婅墝鑹嶈墡鑹愯墤鑹掕墦鑹旇墪鑹栬墬鑹欒墰鑹滆墲鑹炶墵鑹¤墷鑹h墹鑹ヨ墻鑹ц墿鎷ф碁鐗涙壄閽航鑴撴祿鍐滃紕濂村姫鎬掑コ鏆栬檺鐤熸尓鎳︾朝璇哄摝娆ч弗娈磋棔鍛曞伓娌ゅ暘瓒寸埇甯曟�曠惗鎷嶆帓鐗屽緲婀冩淳鏀�娼樼洏纾愮浖鐣斿垽鍙涗箵搴炴梺鑰儢鎶涘拞鍒ㄧ偖琚嶈窇娉″懜鑳氬煿瑁磋禂闄厤浣╂矝鍠风泦鐮版姩鐑规編褰摤妫氱〖绡疯啫鏈嬮箯鎹х鍧爳闇规壒鎶妶鐞垫瘲锟�".split("");
+for(j = 0; j != D[197].length; ++j) if(D[197][j].charCodeAt(0) !== 0xFFFD) { e[D[197][j]] = 50432 + j; d[50432 + j] = D[197][j];}
+D[198] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鑹壂鑹壄鑹辫壍鑹惰壏鑹歌壔鑹艰妧鑺佽妰鑺呰妴鑺囪妷鑺岃姁鑺撹姅鑺曡姈鑺氳姏鑺炶姞鑺㈣姡鑺ц姴鑺佃姸鑺鸿娀鑺艰娍鑻�鑻傝媰鑻呰媶鑻夎嫄鑻栬嫏鑻氳嫕鑻㈣嫥鑻ㄨ嫨鑻嫭鑻嫯鑻拌嫴鑻宠嫷鑻惰嫺锟借嫼鑻艰嫿鑻捐嬁鑼�鑼婅寢鑼嶈寪鑼掕寭鑼栬寴鑼欒対鑼炶専鑼犺尅鑼㈣專鑼よ尌鑼﹁尒鑼尞鑼拌尣鑼疯尰鑼藉暏鑴剧柌鐨尮鐥炲兓灞佽绡囧亸鐗囬獥椋樻紓鐡㈢エ鎾囩灔鎷奸璐搧鑱樹箳鍧嫻钀嶅钩鍑摱璇勫睆鍧℃臣棰囧﹩鐮撮瓌杩矔鍓栨墤閾轰粏鑾嗚憽鑿╄挷鍩旀湸鍦冩櫘娴﹁氨鏇濈�戞湡娆烘爾鎴氬涓冨噭婕嗘煉娌忓叾妫嬪姝х暒宕庤剱榻愭棗绁堢楠戣捣宀備篂浼佸惎濂戠爩鍣ㄦ皵杩勫純姹芥常璁帎锟�".split("");
+for(j = 0; j != D[198].length; ++j) if(D[198][j].charCodeAt(0) !== 0xFFFD) { e[D[198][j]] = 50688 + j; d[50688 + j] = D[198][j];}
+D[199] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鑼捐尶鑽佽崅鑽勮崊鑽堣崐鑽嬭崒鑽嶈崕鑽撹崟鑽栬崡鑽樿崣鑽濊崲鑽拌嵄鑽茶嵆鑽磋嵉鑽惰嵐鑽鸿嵕鑽胯巰鑾佽巶鑾冭巹鑾囪巿鑾婅帇鑾岃帊鑾忚帎鑾戣帞鑾曡帠鑾楄帣鑾氳帩鑾熻帯鑾㈣帲鑾よ帴鑾﹁帶鑾幁鑾拷鑾幍鑾昏幘鑾胯弬鑿冭弰鑿嗚張鑿夎弸鑿嶈弾鑿愯彂鑿掕彄鑿曡彈鑿欒彋鑿涜彏鑿㈣彛鑿よ彟鑿ц彣鑿彫鑿伆娲界壍鎵﹂拵閾呭崈杩佺浠熻唉涔鹃粩閽遍挸鍓嶆綔閬f祬璋村爲宓屾瑺姝夋灙鍛涜厰缇屽钄峰己鎶㈡﹪閿规暡鎮勬ˉ鐬т箶渚ㄥ阀闉樻挰缈樺抄淇忕獚鍒囪寗涓旀�獌閽︿镜浜茬Е鐞村嫟鑺规搾绂藉瘽娌侀潚杞绘阿鍊惧嵖娓呮搸鏅存鞍鎯呴》璇峰簡鐞肩┓绉嬩笜閭辩悆姹傚洑閰嬫硡瓒嬪尯铔嗘洸韬眻椹辨笭锟�".split("");
+for(j = 0; j != D[199].length; ++j) if(D[199][j].charCodeAt(0) !== 0xFFFD) { e[D[199][j]] = 50944 + j; d[50944 + j] = D[199][j];}
+D[200] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鑿彲鑿宠彺鑿佃彾鑿疯徍鑿昏徏鑿捐徔钀�钀傝悈钀囪悎钀夎悐钀愯悞钀撹悢钀曡悥钀楄悪钀氳悰钀炶悷钀犺悺钀㈣悾钀╄惇钀惉钀惍钀惏钀茶惓钀磋惖钀惰惙钀硅惡钀昏惥钀胯憖钁佽憘钁冭憚钁呰憞钁堣憠锟借憡钁嬭憣钁嶈憥钁忚憪钁掕憮钁旇憰钁栬憳钁濊憺钁熻憼钁㈣懁钁ヨ懄钁ц懆钁懏钁懓钁茶懘钁疯懝钁昏懠鍙栧ǘ榫嬭叮鍘诲湀棰ф潈閱涙硥鍏ㄧ棅鎷崇姮鍒稿姖缂虹倲鐦稿嵈楣婃Ψ纭泙瑁欑兢鐒剁噧鍐夋煋鐡ゅ¥鏀樺毞璁╅ザ鎵扮粫鎯圭儹澹粊浜哄繊闊т换璁ゅ垉濡婄韩鎵斾粛鏃ユ垘鑼歌搲鑽h瀺鐔旀憾瀹圭粧鍐楁弶鏌旇倝鑼硅爼鍎掑濡傝颈涔虫睗鍏ヨぅ杞槷钑婄憺閿愰棸娑﹁嫢寮辨拻娲掕惃鑵硟濉炶禌涓夊弫锟�".split("");
+for(j = 0; j != D[200].length; ++j) if(D[200][j].charCodeAt(0) !== 0xFFFD) { e[D[200][j]] = 51200 + j; d[51200 + j] = D[200][j];}
+D[201] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷钁借懢钁胯拃钂佽拑钂勮拝钂嗚拪钂嶈拸钂愯拺钂掕挀钂旇挄钂栬挊钂氳挍钂濊挒钂熻挔钂㈣挘钂よ挜钂﹁挧钂ㄨ挬钂挮钂挱钂挵钂辫挸钂佃挾钂疯捇钂艰捑钃�钃傝搩钃呰搯钃囪搱钃嬭搶钃庤搹钃掕摂钃曡摋锟借摌钃欒摎钃涜摐钃炶摗钃㈣摛钃ц摠钃╄摢钃摥钃摨钃辫摬钃宠摯钃佃摱钃疯摳钃硅摵钃昏摻钃捐攢钄佽攤浼炴暎妗戝棑涓ф悢楠氭壂瀚傜憻鑹叉订妫儳鑾庣爞鏉�鍒规矙绾卞偦鍟ョ厼绛涙檼鐝婅嫬鏉夊北鍒犵吔琛棯闄曟搮璧¤喅鍠勬睍鎵囩籍澧掍激鍟嗚祻鏅屼笂灏氳3姊㈡崕绋嶇儳鑺嶅嫼闊跺皯鍝ㄩ偟缁嶅ア璧婅泧鑸岃垗璧︽憚灏勬厬娑夌ぞ璁剧牱鐢冲懟浼歌韩娣卞缁呯娌堝濠剁敋鑲炬厧娓楀0鐢熺敟鐗插崌缁筹拷".split("");
+for(j = 0; j != D[201].length; ++j) if(D[201][j].charCodeAt(0) !== 0xFFFD) { e[D[201][j]] = 51456 + j; d[51456 + j] = D[201][j];}
+D[202] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷钄冭攧钄呰攩钄囪攬钄夎攰钄嬭攳钄庤攺钄愯敀钄旇敃钄栬敇钄欒敍钄滆敐钄炶敔钄㈣敚钄よ敟钄﹁敡钄ㄨ敥钄敪钄敮钄拌敱钄茶敵钄磋數钄惰斁钄胯晙钑佽晜钑勮晠钑嗚晣钑嬭晫钑嶈晭钑忚晲钑戣晵钑撹晹钑曪拷钑楄晿钑氳暃钑滆暆钑熻暊钑¤暍钑h暐钑﹁暓钑╄暘钑暚钑暜钑暟钑辫暢钑佃暥钑疯暩钑艰暯钑胯杸钖佺渷鐩涘墿鑳滃湥甯堝け鐙柦婀胯瘲灏歌櫛鍗佺煶鎷炬椂浠�椋熻殌瀹炶瘑鍙茬煝浣垮睅椹跺寮忕ず澹笘鏌夸簨鎷獡閫濆娍鏄棞鍣�備粫渚嶉噴楗版皬甯傛亙瀹よ璇曟敹鎵嬮瀹堝鎺堝敭鍙楃槮鍏借敩鏋㈡⒊娈婃姃杈撳彅鑸掓窇鐤忎功璧庡鐔熻柉鏆戞洐缃茶渶榛嶉紶灞炴湳杩版爲鏉熸垗绔栧搴舵暟婕憋拷".split("");
+for(j = 0; j != D[202].length; ++j) if(D[202][j].charCodeAt(0) !== 0xFFFD) { e[D[202][j]] = 51712 + j; d[51712 + j] = D[202][j];}
+D[203] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷钖傝杻钖嗚枅钖夎枈钖嬭枌钖嶈枎钖愯枒钖掕枔钖旇枙钖栬枟钖樿枡钖氳枬钖炶枱钖犺枴钖㈣枺钖ヨ枽钖ц柀钖柆钖柋钖茶柍钖磋柕钖惰柛钖鸿柣钖艰柦钖捐柨钘�钘傝梼钘勮梾钘嗚棁钘堣棅钘嬭棇钘嶈棊钘戣棐锟借棓钘栬棗钘樿棛钘氳棝钘濊棡钘熻棤钘¤棦钘h棩钘﹁棫钘ㄨ棯钘棳钘棶钘棸钘辫棽钘宠棿钘佃椂钘疯椄鎭曞埛鑰嶆憯琛扮敥甯呮爴鎷撮湝鍙岀埥璋佹按鐫$◣鍚灛椤鸿垳璇寸鏈旂儊鏂挄鍢舵�濈鍙镐笣姝昏倖瀵哄棧鍥涗己浼奸ゲ宸虫澗鑰告�傞閫佸畫璁艰鎼滆墭鎿炲椊鑻忛叆淇楃礌閫熺矡鍍冲婧璇夎們閰歌挏绠楄櫧闅嬮殢缁ラ珦纰庡瞾绌楅亗闅х瀛欐崯绗嬭搼姊攩缂╃悙绱㈤攣鎵�濉屼粬瀹冨ス濉旓拷".split("");
+for(j = 0; j != D[203].length; ++j) if(D[203][j].charCodeAt(0) !== 0xFFFD) { e[D[203][j]] = 51968 + j; d[51968 + j] = D[203][j];}
+D[204] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷钘硅椇钘艰椊钘捐榾铇佽槀铇冭槃铇嗚槆铇堣槈铇婅構铇岃槏铇庤槒铇愯槖铇撹様铇曡槜铇樿槞铇氳槢铇滆槤铇炶槦铇犺槨铇㈣槪铇よ槬铇﹁槰铇槴铇槶铇槸铇拌槺铇茶槼铇磋樀铇惰樂铇硅樅铇昏樈铇捐樋铏�锟借檨铏傝檭铏勮檯铏嗚檱铏堣檳铏婅檵铏岃檼铏撹檿铏栬櫁铏樿櫃铏涜櫆铏濊櫉铏犺櫋铏h櫎铏ヨ櫐铏ц櫒铏╄櫔鐛尀韫嬭笍鑳庤嫈鎶彴娉伴厼澶�佹卑鍧嶆憡璐槴婊╁潧妾�鐥版江璋皥鍧︽琚掔⒊鎺㈠徆鐐堡濉樻惇鍫傛鑶涘攼绯栧�樿汉娣岃稛鐑帍娑涙粩缁﹁悇妗冮�冩窐闄惰濂楃壒钘よ吘鐤艰獖姊墧韪㈤攽鎻愰韫勫暭浣撴浛鍤忔儠娑曞墐灞夊ぉ娣诲~鐢扮敎鎭垟鑵嗘寫鏉¤竣鐪鸿烦璐撮搧甯栧巺鍚儍锟�".split("");
+for(j = 0; j != D[204].length; ++j) if(D[204][j].charCodeAt(0) !== 0xFFFD) { e[D[204][j]] = 52224 + j; d[52224 + j] = D[204][j];}
+D[205] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷铏櫙铏拌櫜铏宠櫞铏佃櫠铏疯櫢铓冭殑铓呰殕铓囪殘铓夎殠铓忚殣铓戣殥铓旇殩铓楄殬铓欒殮铓涜殲铓熻殸铓¤殺铓ヨ殾铓毉铓毑铓宠毞铓歌毠铓昏毤铓借毦铓胯泚铔傝泝铔呰泩铔岃泹铔掕洆铔曡洊铔楄洑铔滐拷铔濊洜铔¤洟铔h洢铔﹁洤铔ㄨ洩铔洭铔浀铔惰浄铔鸿浕铔艰浗铔胯渷铚勮渽铚嗚湅铚岃湈铚忚湊铚戣湐铚栨眬寤峰仠浜涵鎸鸿墖閫氭閰灣鍚岄摐褰ょ妗舵崊绛掔粺鐥涘伔鎶曞ご閫忓嚫绉冪獊鍥惧緬閫旀秱灞犲湡鍚愬厰婀嶅洟鎺ㄩ鑵胯湑瑜��鍚炲悲鑷�鎷栨墭鑴遍傅闄�椹┘妞Ε鎷撳斁鎸栧搰铔欐醇濞冪摝琚滄澶栬睂寮咕鐜╅〗涓哥兎瀹岀鎸芥櫄鐨栨儖瀹涘涓囪厱姹帇浜℃瀴缃戝線鏃烘湜蹇樺濞侊拷".split("");
+for(j = 0; j != D[205].length; ++j) if(D[205][j].charCodeAt(0) !== 0xFFFD) { e[D[205][j]] = 52480 + j; d[52480 + j] = D[205][j];}
+D[206] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷铚欒湜铚濊湡铚犺湦铚﹁湩铚ㄨ湭铚湰铚湳铚拌湶铚宠湹铚惰湼铚硅満铚艰溄铦�铦佽潅铦冭潉铦呰潌铦婅潒铦嶈潖铦愯潙铦掕潝铦曡潠铦樿潥铦涜潨铦濊潪铦熻潯铦㈣潶铦ц潹铦╄潽铦潿铦澂铦辫澆铦宠澋锟借澐铦歌澒铦鸿澘铻�铻佽瀯铻嗚瀲铻夎瀶铻岃瀻铻忚瀽铻戣瀿铻旇灂铻栬灅铻欒灇铻涜灉铻濊灋铻犺灐铻㈣灒铻ゅ穽寰嵄闊﹁繚妗呭洿鍞儫涓烘綅缁磋媷钀庡浼熶吉灏剧含鏈敋鍛崇晱鑳冨杺榄忎綅娓皳灏夋叞鍗槦娓╄殜鏂囬椈绾瑰惢绋崇磰闂棥缈佺摦鎸濊湕娑$獫鎴戞枴鍗ф彙娌冨帆鍛滈挩涔屾薄璇眿鏃犺姕姊у惥鍚存瘚姝︿簲鎹傚崍鑸炰紞渚潪鎴婇浘鏅ょ墿鍕垮姟鎮熻鏄旂啓鏋愯タ纭掔熃鏅板樆鍚搁敗鐗猴拷".split("");
+for(j = 0; j != D[206].length; ++j) if(D[206][j].charCodeAt(0) !== 0xFFFD) { e[D[206][j]] = 52736 + j; d[52736 + j] = D[206][j];}
+D[207] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷铻ヨ灕铻ц灘铻灝铻拌灡铻茶灤铻惰灧铻歌灩铻昏灱铻捐灴锜佽焸锜冭焺锜呰焽锜堣焿锜岃煃锜庤煆锜愯煍锜曡煐锜楄煒锜欒煔锜滆煗锜炶煙锜¤煝锜h煠锜﹁煣锜ㄨ煩锜煬锜煰锜拌煴锜茶煶锜磋煹锜惰煼锜革拷锜鸿熁锜艰熃锜胯爛锠佽爞锠勮爡锠嗚爣锠堣爥锠嬭爩锠嶈爭锠忚爯锠戣爳锠旇牀锠樿牂锠氳牅锠濊牉锠熻牋锠g█鎭笇鎮夎啙澶曟儨鐔勭儻婧睈鐘�妾勮甯範濯冲枩閾f礂绯婚殭鎴忕粏鐬庤櫨鍖i湠杈栨殗宄′緺鐙笅鍘﹀鍚撴巰閿ㄥ厛浠欓矞绾ゅ捀璐よ鑸烽棽娑庡鸡瀚屾樉闄╃幇鐚幙鑵洪缇″闄烽檺绾跨浉鍘㈤暥棣欑瑗勬箻涔$繑绁ヨ鎯冲搷浜」宸锋鍍忓悜璞¤惂纭濋渼鍓婂摦鍤i攢娑堝娣嗘檽锟�".split("");
+for(j = 0; j != D[207].length; ++j) if(D[207][j].charCodeAt(0) !== 0xFFFD) { e[D[207][j]] = 52992 + j; d[52992 + j] = D[207][j];}
+D[208] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锠よ牓锠﹁牕锠ㄨ牘锠牜锠牠锠牤锠拌牨锠宠牬锠佃牰锠疯牳锠鸿牷锠借牼锠胯琛傝琛嗚琛堣琛婅琛庤琛愯琛掕琛曡琛樿琛涜琛濊琛熻琛﹁¨琛…琛”琛宠〈琛佃《琛歌」琛猴拷琛昏〖琚�琚冭琚囪琚婅琚庤琚愯琚撹琚曡琚樿琚氳琚濊琚熻琚¤ⅲ琚ヨⅵ琚цⅷ琚╄ⅹ灏忓瓭鏍¤倴鍟哥瑧鏁堟浜涙瓏铦庨瀷鍗忔専鎼洪偑鏂滆儊璋愬啓姊板嵏锜规噲娉勬郴璋㈠睉钖姱閿屾杈涙柊蹇诲績淇¤鏄熻叆鐚╂兒鍏村垜鍨嬪舰閭㈣閱掑垢鏉忔�у鍏勫嚩鑳稿寛姹归泟鐔婁紤淇緸鏈藉梾閿堢琚栫唬澧熸垖闇�铏氬槝椤诲緪璁歌搫閰楀彊鏃簭鐣滄仱绲┛缁画杞╁枾瀹f偓鏃嬬巹锟�".split("");
+for(j = 0; j != D[208].length; ++j) if(D[208][j].charCodeAt(0) !== 0xFFFD) { e[D[208][j]] = 53248 + j; d[53248 + j] = D[208][j];}
+D[209] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷琚琚琚茶⒊琚磋⒌琚惰⒏琚硅⒑琚昏⒔琚捐⒖瑁�瑁冭瑁囪瑁婅瑁岃瑁忚瑁戣瑁栬瑁氳瑁滆瑁炶瑁¤&瑁ц)瑁+瑁-瑁/瑁茶5瑁惰7瑁鸿;瑁借?瑜�瑜佽瑜勮瑜嗚瑜堬拷瑜夎瑜岃瑜庤瑜戣瑜曡瑜楄瑜滆瑜炶瑜犺あ瑜hい瑜﹁ぇ瑜ㄨぉ瑜き瑜く瑜辫げ瑜宠さ瑜烽�夌櫍鐪╃粴闈磋枦瀛︾┐闆鍕嬬啅寰棳璇㈠椹贰娈夋睕璁閫婅繀鍘嬫娂楦﹂腑鍛�涓娊鐗欒殰宕栬娑泤鍝戜簹璁剁剦鍜介槈鐑熸饭鐩愪弗鐮旇湌宀╁欢瑷�棰滈槑鐐庢部濂勬帺鐪艰婕旇壋鍫扮嚂鍘岀牃闆佸攣褰︾劙瀹磋皻楠屾畠澶腐绉ф潹鎵蒋鐤$緤娲嬮槼姘т话鐥掑吇鏍锋季閭�鑵板鐟讹拷".split("");
+for(j = 0; j != D[209].length; ++j) if(D[209][j].charCodeAt(0) !== 0xFFFD) { e[D[209][j]] = 53504 + j; d[53504 + j] = D[209][j];}
+D[210] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷瑜歌す瑜鸿せ瑜艰そ瑜捐た瑗�瑗傝瑗呰瑗囪瑗夎瑗嬭瑗嶈瑗忚瑗戣瑗撹瑗曡瑗楄瑗欒瑗涜瑗濊瑗¤ア瑗hイ瑗ヨェ瑗ㄨォ瑗カ瑗キ瑗ク瑗拌ケ瑗茶コ瑗磋サ瑗惰シ瑗歌ス瑗鸿ゼ锟借ソ瑗捐瑕傝瑕呰瑕堣瑕婅瑕岃瑕庤瑕愯瑕掕瑕旇瑕栬瑕樿瑕氳瑕滆瑕炶瑕犺Α鎽囧哀閬ョ獞璋e鍜垁鑽鑰�妞板檸鑰剁埛閲庡喍涔熼〉鎺栦笟鍙舵洺鑵嬪娑蹭竴澹瑰尰鎻栭摫渚濅紛琛i澶烽仐绉讳华鑳扮枒娌傚疁濮ㄥ綕妞呰殎鍊氬凡涔欑煟浠ヨ壓鎶戞槗閭戝惫浜垮焦鑷嗛�歌倓鐤害瑁旀剰姣呭繂涔夌泭婧㈣璁皧璇戝紓缈肩繉缁庤尩鑽洜娈烽煶闃村Щ鍚熼摱娣瘏楗肮寮曢殣锟�".split("");
+for(j = 0; j != D[210].length; ++j) if(D[210][j].charCodeAt(0) !== 0xFFFD) { e[D[210][j]] = 53760 + j; d[53760 + j] = D[210][j];}
+D[211] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷瑕㈣Γ瑕よΕ瑕﹁Η瑕ㄨΙ瑕Λ瑕Ν瑕Ο瑕拌Ρ瑕茶Τ瑕磋Φ瑕惰Ψ瑕歌瑕鸿瑕艰瑕捐瑙�瑙冭瑙撹瑙曡瑙樿瑙涜瑙熻瑙¤Б瑙よЁ瑙ㄨЗ瑙К瑙М瑙拌П瑙茶Т瑙佃Ф瑙疯Ц瑙硅Ш锟借Щ瑙艰Ы瑙捐Э瑷佽▊瑷冭▌瑷呰▎瑷堣▔瑷婅▼瑷岃◢瑷庤◤瑷愯☉瑷掕〒瑷旇〞瑷栬瑷樿瑷氳瑷滆鍗拌嫳妯卞┐楣板簲缂ㄨ幑钀よ惀鑽ц潎杩庤耽鐩堝奖棰栫‖鏄犲摕鎷ヤ剑鑷冪棃搴搁泹韪婅浌鍜忔吵娑屾案鎭垮媷鐢ㄥ菇浼樻偁蹇у挨鐢遍偖閾�鐘规补娓搁厜鏈夊弸鍙充綉閲夎鍙堝辜杩傛筏浜庣泜姒嗚櫈鎰氳垎浣欎繛閫鹃奔鎰夋笣娓旈殔浜堝ū闆ㄤ笌灞跨瀹囪缇界帀鍩熻妺閮佸悂閬囧柣宄尽鎰堟鐙辫偛瑾夛拷".split("");
+for(j = 0; j != D[211].length; ++j) if(D[211][j].charCodeAt(0) !== 0xFFFD) { e[D[211][j]] = 54016 + j; d[54016 + j] = D[211][j];}
+D[212] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷瑷炶瑷犺ā瑷㈣ǎ瑷よē瑷﹁ě瑷ㄨī瑷ǐ瑷ō瑷ǒ瑷拌ū瑷茶ǔ瑷磋ǖ瑷惰ǚ瑷歌ü瑷鸿ɑ瑷艰ń瑷胯﹢瑭佽﹤瑭冭﹦瑭呰﹩瑭囪瑭婅瑭岃瑭庤瑭愯瑭掕瑭旇瑭栬瑭樿瑭氳瑭滆瑭烇拷瑭熻瑭¤瑭h─瑭ヨ│瑭ц┄瑭╄┆瑭┈瑭┊瑭┌瑭辫┎瑭宠┐瑭佃┒瑭疯└瑭鸿┗瑭艰┙瑭捐┛瑾�娴村瘬瑁曢璞┉楦虫笂鍐ゅ厓鍨h鍘熸彺杈曞洯鍛樺渾鐚挎簮缂樿繙鑻戞効鎬ㄩ櫌鏇扮害瓒婅穬閽ュ渤绮ゆ湀鎮﹂槄鑰樹簯閮у寑闄ㄥ厑杩愯暣閰濇檿闊靛瓡鍖濈牳鏉傛牻鍝夌伨瀹拌浇鍐嶅湪鍜辨敀鏆傝禐璧冭剰钁伃绯熷嚳钘绘灒鏃╂尽铓よ簛鍣�犵殏鐏剁嚗璐f嫨鍒欐辰璐兼�庡鎲庢浘璧犳墡鍠虫福鏈涧锟�".split("");
+for(j = 0; j != D[212].length; ++j) if(D[212][j].charCodeAt(0) !== 0xFFFD) { e[D[212][j]] = 54272 + j; d[54272 + j] = D[212][j];}
+D[213] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷瑾佽獋瑾冭獎瑾呰獑瑾囪獔瑾嬭獙瑾嶈獛瑾忚獝瑾戣獟瑾旇獣瑾栬獥瑾樿獧瑾氳獩瑾滆獫瑾炶獰瑾犺瑾㈣瑾よ瑾﹁瑾ㄨ瑾瑾瑾瑾拌瑾茶瑾磋瑾惰瑾歌瑾鸿瑾艰瑾捐璜�璜佽珎锟借珒璜勮珔璜嗚珖璜堣珘璜婅珛璜岃珝璜庤珡璜愯珣璜掕珦璜旇珪璜栬珬璜樿珯璜氳珱璜滆珴璜炶珶璜犺璜㈣閾¢椄鐪ㄦ爡姒ㄥ拫涔嶇偢璇堟憳鏂嬪畢绐勫�哄鐬绘瑭圭矘娌剧洀鏂╄緱宕睍铇告爤鍗犳垬绔欐箾缁芥绔犲桨婕冲紶鎺屾定鏉栦笀甯愯处浠楄儉鐦撮殰鎷涙槶鎵炬布璧电収缃╁厗鑲囧彫閬姌鍝茶洶杈欒�呴敆钄楄繖娴欑弽鏂熺湡鐢勭牕鑷昏礊閽堜睛鏋曠柟璇婇渿鎸晣闃佃捀鎸g潄寰佺嫲浜夋�旀暣鎷鏀匡拷".split("");
+for(j = 0; j != D[213].length; ++j) if(D[213][j].charCodeAt(0) !== 0xFFFD) { e[D[213][j]] = 54528 + j; d[54528 + j] = D[213][j];}
+D[214] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷璜よ璜﹁璜ㄨ璜璜璜璜拌璜茶璜磋璜惰璜歌璜鸿璜艰璜捐璎�璎佽瑐璎冭瑒璎呰瑔璎堣瑝璎婅瑡璎岃瑣璎庤瑥璎愯瑧璎掕瑩璎旇瑫璎栬瑮璎樿瑱璎氳瑳璎滆瑵璎炶瑹璎犺璎㈣锟借璎ヨ璎ㄨ璎璎璎璎拌璎茶璎磋璎惰璎歌璎鸿璎艰璎捐璀�璀佽瓊璀冭瓌璀呭抚鐥囬儜璇佽姖鏋濇敮鍚辫湗鐭ヨ偄鑴傛眮涔嬬粐鑱岀洿妞嶆畺鎵у�间緞鍧�鎸囨瓒惧彧鏃ㄧ焊蹇楁寶鎺疯嚦鑷寸疆甯滃硻鍒舵櫤绉╃璐ㄧ倷鐥旀粸娌荤獟涓泤蹇犻挓琛风粓绉嶈偪閲嶄徊浼楄垷鍛ㄥ窞娲茶瘜绮ヨ酱鑲樺笟鍜掔毐瀹欐樇楠ょ彔鏍洓鏈辩尓璇歌瘺閫愮鐑涚叜鎷勭灘鍢变富钁楁煴鍔╄泙璐摳绛戯拷".split("");
+for(j = 0; j != D[214].length; ++j) if(D[214][j].charCodeAt(0) !== 0xFFFD) { e[D[214][j]] = 54784 + j; d[54784 + j] = D[214][j];}
+D[215] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷璀嗚瓏璀堣瓑璀婅瓔璀岃瓖璀庤瓘璀愯瓚璀掕瓝璀旇瓡璀栬瓧璀樿瓩璀氳瓫璀滆瓭璀炶瓱璀犺璀㈣璀よ璀ц璀╄璀璀璀拌璀茶璀磋璀惰璀歌璀鸿璀艰璀捐璁�璁佽畟璁冭畡璁呰畣锟借畤璁堣畨璁婅畫璁岃畭璁庤畯璁愯畱璁掕畵璁旇畷璁栬畻璁樿畽璁氳疀璁滆疂璁炶疅璁璁昏瘒璇愯璋夎盀浣忔敞绁濋┗鎶撶埅鎷戒笓鐮栬浆鎾拌禋绡嗘々搴勮濡嗘挒澹姸妞庨敟杩借禈鍧犵紑璋嗗噯鎹夋嫏鍗撴鐞㈣寔閰屽晞鐫�鐏兼祳鍏瑰挩璧勫Э婊嬫穭瀛滅传浠旂苯婊撳瓙鑷笉瀛楅瑑妫曡釜瀹楃患鎬荤旱閭硅蛋濂忔弽绉熻冻鍗掓棌绁栬瘏闃荤粍閽荤簜鍢撮唹鏈�缃皧閬垫槰宸︿綈鏌炲仛浣滃潗搴э拷锟斤拷锟斤拷锟�".split("");
+for(j = 0; j != D[215].length; ++j) if(D[215][j].charCodeAt(0) !== 0xFFFD) { e[D[215][j]] = 55040 + j; d[55040 + j] = D[215][j];}
+D[216] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷璋歌肮璋鸿盎璋艰敖璋捐翱璞�璞傝眱璞勮眳璞堣眾璞嬭睄璞庤睆璞愯睉璞掕睋璞旇睎璞楄睒璞欒睕璞滆睗璞炶睙璞犺保璞よ饱璞﹁抱璞ㄨ暴璞杯璞悲璞拌北璞茶贝璞佃倍璞疯被璞艰苯璞捐笨璨�璨佽矁璨勮矄璨囷拷璨堣矉璨嶈矌璨忚矏璨戣矑璨撹矔璨栬矖璨欒矚璨涜矞璨濊矠璨熻矤璨¤并璨h菠璨ヨ拨璨ц波璨╄勃璨铂璨簫涓屽厐涓愬豢鍗呬笗浜樹笧楝插鍣╀辅绂轰缚鍖曚箛澶埢鍗皭鍥熻儰棣楁瘬鐫鹃紬涓朵簾榧愪箿涔╀簱鑺堝瓫鍟槒浠勫帊鍘濆帲鍘ュ幃闈ヨ禎鍖氬彽鍖﹀尞鍖捐禍鍗﹀崳鍒傚垐鍒庡埈鍒冲埧鍓�鍓屽墳鍓″墱钂壗鍔傚妬鍔愬姄鍐傜綌浜讳粌浠変粋浠ㄤ弧浠粸浼涗怀浼饯浠典讥浼т級浼綖浣ф敻浣氫綕锟�".split("");
+for(j = 0; j != D[216].length; ++j) if(D[216][j].charCodeAt(0) !== 0xFFFD) { e[D[216][j]] = 55296 + j; d[55296 + j] = D[216][j];}
+D[217] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷璨帛璨拌脖璨茶渤璨磋驳璨惰卜璨歌补璨鸿不璨艰步璨捐部璩�璩佽硞璩冭硠璩呰硢璩囪硤璩夎硦璩嬭硨璩嶈硯璩忚硱璩戣硳璩撹硵璩曡硸璩楄硺璩欒硽璩涜硿璩濊碁璩熻碃璩¤尝璩h长璩ヨ肠璩ц敞璩╄唱璩超锟借抄璩朝璩拌潮璩茶吵璩磋车璩惰撤璩歌彻璩鸿郴璩艰辰璩捐晨璐�璐佽磦璐冭磩璐呰磫璐囪磮璐夎磰璐嬭磳璐嶄綗浣椾疾浼戒蕉浣翠緫渚変緝渚忎骄浣讳惊浣间粳渚斾喀淇ㄤ开淇呬繗淇d繙淇戜繜淇稿�╁亴淇冲��忓��烤鍊滃�屽�ュ�ㄥ伨鍋冨仌鍋堝亷鍋伝鍌ュ偋鍌╁偤鍍栧剢鍍儸鍍﹀儺鍎囧剫浠濇敖浣樹渐淇庨緺姹嗙贝鍏方榛夐鍐佸鍕瑰實瑷囧寪鍑鍏曚籂鍏栦撼琛ⅳ浜佃剶瑁掔瀣磋爟缇稿啱鍐卞喗鍐硷拷".split("");
+for(j = 0; j != D[217].length; ++j) if(D[217][j].charCodeAt(0) !== 0xFFFD) { e[D[217][j]] = 55552 + j; d[55552 + j] = D[217][j];}
+D[218] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷璐庤磸璐愯磻璐掕磽璐旇磿璐栬礂璐樿礄璐氳礇璐滆礌璧戣祾璧楄禑璧ヨ胆璧╄氮璧诞璧当璧茶蹈璧硅岛璧昏导璧借稻璧胯秬瓒傝秲瓒嗚秶瓒堣秹瓒岃秿瓒庤稄瓒愯稈瓒撹稌瓒栬稐瓒樿稒瓒氳稕瓒滆稘瓒炶稜瓒★拷瓒㈣钉瓒ヨ鼎瓒ц定瓒╄丢瓒冬瓒懂瓒栋瓒茶抖瓒疯豆瓒昏督璺�璺佽穫璺呰穱璺堣穳璺婅穽璺愯窉璺撹窋鍑囧問鍐㈠啣璁犺璁ц璁磋璁疯瘋璇冭瘚璇忚瘞璇掕瘬璇旇瘱璇樿瘷璇滆療璇犺璇ㄨ璇璇宠璇硅璇胯皜璋傝皠璋囪皩璋忚皯璋掕皵璋曡皷璋欒皼璋樿皾璋熻盃璋¤哎璋ц蔼璋爱璋安璋宠暗璋跺崺鍗洪槤闃㈤槨闃遍槳闃介樇闄傞檳闄旈櫉闄ч櫖闄查櫞闅堥殟闅楅毎閭楅倹閭濋倷閭偂閭撮偝閭堕偤锟�".split("");
+for(j = 0; j != D[218].length; ++j) if(D[218][j].charCodeAt(0) !== 0xFFFD) { e[D[218][j]] = 55808 + j; d[55808 + j] = D[218][j];}
+D[219] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷璺曡窐璺欒窚璺犺贰璺㈣伐璺﹁阀璺╄翻璺钒璺辫凡璺磋范璺艰肪璺胯竴韪佽競韪冭竸韪嗚竾韪堣笅韪嶈笌韪愯笐韪掕笓韪曡笘韪楄笜韪欒笟韪涜笢韪犺浮韪よ弗韪﹁抚韪ㄨ斧韪赴韪茶赋韪磋付韪疯父韪昏讣韪撅拷韪胯箖韫呰箚韫岃箥韫庤箯韫愯箵韫旇箷韫栬箺韫樿箽韫涜箿韫濊篂韫熻範韫¤耿韫h工韫ヨ恭韫ㄨ躬韫巩韫遍偢閭伴儚閮呴偩閮愰儎閮囬儞閮﹂儮閮滈儣閮涢儷閮兙閯勯劉閯為劊閯遍劘閯归厓閰嗗垗濂傚姠鍔姯鍔惧摽鍕愬嫋鍕板彑鐕煃寤村嚨鍑奸鍘跺紒鐣氬矾鍧屽灘鍨″【澧煎澹戝湬鍦湭鍦冲湽鍦湳鍧滃溁鍧傚潻鍨呭潾鍨嗗澕鍧诲潹鍧澏鍧冲灜鍨ゅ瀸鍨插煆鍨у灤鍨撳灎鍩曞煒鍩氬煓鍩掑灨鍩村煰鍩稿煠鍩濓拷".split("");
+for(j = 0; j != D[219].length; ++j) if(D[219][j].charCodeAt(0) !== 0xFFFD) { e[D[219][j]] = 56064 + j; d[56064 + j] = D[219][j];}
+D[220] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷韫宠沟韫疯垢韫硅购韫昏菇韫捐簚韬傝簝韬勮簡韬堣簤韬婅簨韬岃簫韬庤簯韬掕簱韬曡簴韬楄簶韬欒簹韬涜簼韬熻籂韬¤孩韬h氦韬ヨ害韬ц酣韬╄邯韬寒韬拌罕韬宠捍韬佃憾韬疯焊韬硅夯韬艰航韬捐嚎杌�杌佽粋锟借粌杌勮粎杌嗚粐杌堣粔杌婅粙杌岃粛杌忚粣杌戣粧杌撹粩杌曡粬杌楄粯杌欒粴杌涜粶杌濊粸杌熻粻杌¤虎杌h护鍫嬪爫鍩藉煭鍫�鍫炲牂濉勫牋濉ュ‖澧佸澧氬棣ㄩ紮鎳胯壒鑹借壙鑺忚妸鑺ㄨ妱鑺庤姂鑺楄姍鑺姼鑺捐姲鑻堣媻鑻h姌鑺疯姰鑻嬭媽鑻佽姪鑺磋姟鑺姛鑻勮嫀鑺よ嫛鑼夎嫹鑻よ審鑼囪嫓鑻磋嫆鑻樿寣鑻昏嫇鑼戣寶鑼嗚寯鑼曡嫚鑻曡寽鑽戣崨鑽滆寛鑾掕尲鑼磋尡鑾涜崬鑼崗鑽囪崈鑽熻崁鑼楄崰鑼尯鑼宠崷鑽ワ拷".split("");
+for(j = 0; j != D[220].length; ++j) if(D[220][j].charCodeAt(0) !== 0xFFFD) { e[D[220][j]] = 56320 + j; d[56320 + j] = D[220][j];}
+D[221] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷杌ヨ沪杌ц花杌╄华杌滑杌划杌话杌辫徊杌宠淮杌佃欢杌疯桓杌硅缓杌昏患杌借痪杌胯紑杓佽紓杓冭紕杓呰紗杓囪紙杓夎紛杓嬭紝杓嶈紟杓忚紣杓戣紥杓撹紨杓曡紪杓楄紭杓欒細杓涜紲杓濊紴杓熻紶杓¤饥杓o拷杓よ讥杓﹁姬杓ㄨ缉杓极杓辑杓集杓拌急杓茶汲杓磋嫉杓惰挤杓歌脊杓鸿蓟杓艰冀杓捐伎杞�杞佽絺杞冭絼鑽ㄨ寷鑽╄崿鑽嵀鑽幇鑽歌幊鑾磋帬鑾帗鑾滆巺鑽艰幎鑾╄嵔鑾歌嵒鑾樿帪鑾ㄨ幒鑾艰弫钀佽彞鑿樺爣钀樿悑鑿濊徑鑿栬悳钀歌悜钀嗚彅鑿熻悘钀冭徃鑿硅彧鑿呰弨钀﹁彴鑿¤憸钁戣憵钁欒懗钂囪拡钁鸿拤钁歌惣钁嗚懇钁惰拰钂庤惐钁搧钃嶈搻钃﹁捊钃撹搳钂胯捄钃犺挕钂硅挻钂楄摜钃h攲鐢嶈敻钃拌敼钄熻敽锟�".split("");
+for(j = 0; j != D[221].length; ++j) if(D[221][j].charCodeAt(0) !== 0xFFFD) { e[D[221][j]] = 56576 + j; d[56576 + j] = D[221][j];}
+D[222] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷杞呰絾杞囪綀杞夎綂杞嬭綄杞嶈綆杞忚綈杞戣綊杞撹綌杞曡綎杞楄綐杞欒綒杞涜綔杞濊綖杞熻綘杞¤舰杞h饯杞ヨ姜杈�杈岃緬杈濊緺杈¤劲杈よ茎杈﹁晶杈粳杈井杈静杈宠敬杈佃痉杈歌竞杈昏炯杈胯縺杩冭繂锟借繅杩婅繈杩岃繊杩忚繏杩栬織杩氳繝杩¤浚杩ц楷杩勘杩茶看杩佃慷杩鸿炕杩艰烤杩块�囬�堥�岄�庨�撻�曢�樿晼钄昏摽钃艰暀钑堣暔钑よ暈钑虹灑钑冭暡钑昏枻钖ㄨ枃钖忚暪钖枩钖呰柟钖疯柊钘撹梺钘滆椏铇ц槄铇╄槚铇煎痪寮堝ぜ濂佽�峰濂氬鍖忓阿灏ュ艾灏存墝鎵姛鎶绘媻鎷氭嫍鎷將鎷舵尮鎹嬫崈鎺彾鎹辨嵑鎺庢幋鎹幀鎺婃崺鎺幖鎻叉徃鎻犳徔鎻勬彏鎻庢憭鎻嗘幘鎽呮憗鎼嬫悰鎼犳悓鎼︽悺鎽炴拕鎽挅锟�".split("");
+for(j = 0; j != D[222].length; ++j) if(D[222][j].charCodeAt(0) !== 0xFFFD) { e[D[222][j]] = 56832 + j; d[56832 + j] = D[222][j];}
+D[223] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷閫欓�滈�i�ら�ラ�ч�ㄩ�╅����伴�遍�查�抽�撮�烽�归�洪�介�块亐閬冮亝閬嗛亪閬夐亰閬嬮亴閬庨仈閬曢仏閬欓仛閬滈仢閬為仧閬犻仭閬ら仸閬ч仼閬伀閬伅閬伴伇閬查伋閬堕伔閬搁伖閬洪伝閬奸伨閭侊拷閭勯倕閭嗛倗閭夐倞閭岄倣閭庨倧閭愰倰閭旈倴閭橀倸閭滈倿閭熼偁閭ら偉閭ч偍閭╅偒閭偛閭烽偧閭介偪閮�鎽烘挿鎾告挋鎾烘搥鎿愭摋鎿ゆ摙鏀夋敟鏀紜蹇掔敊寮戝崯鍙卞徑鍙╁彣鍙诲悞鍚栧悊鍛嬪憭鍛撳憯鍛栧憙鍚″憲鍛欏悾鍚插拏鍜斿懛鍛卞懁鍜氬挍鍜勫懚鍛﹀挐鍝愬挱鍝傚挻鍝掑挧鍜﹀摀鍝斿懖鍜e摃鍜诲捒鍝屽摍鍝氬摐鍜╁挭鍜ゅ摑鍝忓摓鍞涘摟鍞犲摻鍞斿摮鍞㈠敚鍞忓攽鍞у敧鍟у枏鍠靛晧鍟晛鍟曞斂鍟愬敿锟�".split("");
+for(j = 0; j != D[223].length; ++j) if(D[223][j].charCodeAt(0) !== 0xFFFD) { e[D[223][j]] = 57088 + j; d[57088 + j] = D[223][j];}
+D[224] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷閮傞儍閮嗛儓閮夐儖閮岄儘閮掗償閮曢儢閮橀儥閮氶優閮熼儬閮i儰閮ラ儵閮儸閮儼閮遍儾閮抽兊閮堕兎閮归兒閮婚兗閮块剙閯侀剝閯呴剢閯囬剤閯夐剨閯嬮剬閯嶉剮閯忛剱閯戦剴閯撻剶閯曢剸閯楅剺閯氶剾閯滐拷閯濋劅閯犻劇閯ら劌閯﹂劎閯ㄩ劑閯劔閯劖閯劙閯查劤閯撮劦閯堕劮閯搁労閯婚劶閯介劸閯块厐閰侀厒閰勫敺鍟栧暤鍟跺暦鍞冲敯鍟滃枊鍡掑杻鍠卞柟鍠堝杹鍠熷暰鍡栧枒鍟诲棢鍠藉柧鍠斿枡鍡椃鍡夊槦鍡戝棲鍡棓鍡﹀棟鍡勫棷鍡ュ棽鍡冲棇鍡嶅棬鍡靛棨杈斿槥鍢堝槍鍢佸槫鍢e椌鍢�鍢у槶鍣樺樄鍣楀槵鍣嶅櫌鍣欏櫆鍣屽檾鍤嗗櫎鍣卞櫕鍣诲櫦鍤呭殦鍤洈鍥楀洕鍥″浀鍥浌鍥垮渼鍦婂湁鍦滃笍甯欏笖甯戝副甯诲讣锟�".split("");
+for(j = 0; j != D[224].length; ++j) if(D[224][j].charCodeAt(0) !== 0xFFFD) { e[D[224][j]] = 57344 + j; d[57344 + j] = D[224][j];}
+D[225] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷閰呴厙閰堥厬閰撻厰閰曢厲閰橀厵閰涢厹閰熼厾閰﹂収閰ㄩ叓閰叧閰洪吇閰奸唨閱侀唫閱冮唲閱嗛唸閱婇啂閱忛啌閱旈啎閱栭啑閱橀啓閱滈啙閱為啛閱犻啞閱ら啣閱﹂啩閱ㄩ啯閱啲閱伴啽閱查喅閱堕喎閱搁喒閱伙拷閱奸喗閱鹃喛閲�閲侀噦閲冮噭閲呴噯閲堥噵閲愰噿閲撻嚁閲曢嚃閲楅嚇閲欓嚉閲涢嚌閲為嚐閲犻嚒閲㈤嚕閲ら嚗甯峰箘骞斿箾骞炲埂宀屽焙宀嶅矏宀栧矆宀樺矙宀戝矚宀滃驳宀㈠步宀搏宀卞玻宄佸卜宄勫硳宄ゅ硧宄ュ磦宕冨揣宕﹀串宕ゅ礊宕嗗礇宓樺淳宕村唇宓禌宓禎宓祴宓婂旦宓村秱宥欏稘璞冲斗宸呭匠褰峰緜寰囧緣寰屽緯寰欏緶寰ㄥ经寰靛炯琛㈠健鐘姲鐘寸姺鐘哥媰鐙佺嫀鐙嶇嫆鐙ㄧ嫰鐙╃嫴鐙寸嫹鐚佺嫵鐚冪嫼锟�".split("");
+for(j = 0; j != D[225].length; ++j) if(D[225][j].charCodeAt(0) !== 0xFFFD) { e[D[225][j]] = 57600 + j; d[57600 + j] = D[225][j];}
+D[226] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷閲﹂嚙閲ㄩ嚛閲嚝閲嚟閲嚡閲伴嚤閲查嚦閲撮嚨閲堕嚪閲搁嚬閲洪嚮閲奸嚱閲鹃嚳閳�閳侀垈閳冮垊閳呴垎閳囬垐閳夐垔閳嬮垖閳嶉垘閳忛垚閳戦垝閳撻垟閳曢垨閳楅垬閳欓垰閳涢垳閳濋垶閳熼垹閳¢垻閳i垽锟介垾閳﹂埀閳ㄩ埄閳埆閳埈閳埊閳伴埍閳查埑閳撮埖閳堕埛閳搁埞閳洪埢閳奸埥閳鹃埧閴�閴侀墏閴冮墑閴呯嫽鐚楃寭鐚$寠鐚炵対鐚曠將鐚圭尌鐚尭鐚辩崘鐛嶇崡鐛犵崿鐛嵕鑸涘ぅ椋уい澶傞ィ楗чエ楗╅オ楗ガ楗撮シ楗介棣勯棣婇棣愰棣撻棣曞簚搴戝簨搴栧亥搴犲汗搴靛壕搴宠祿寤掑粦寤涘花寤喓蹇勫繅蹇栧繌鎬冨慨鎬勫俊蹇ゅ烤鎬呮�嗗开蹇扛鎬欐�垫�︽�涙�忔�嶆�╂��婃�挎�℃伕鎭规伝鎭烘亗锟�".split("");
+for(j = 0; j != D[226].length; ++j) if(D[226][j].charCodeAt(0) !== 0xFFFD) { e[D[226][j]] = 57856 + j; d[57856 + j] = D[226][j];}
+D[227] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷閴嗛墖閴堥墘閴婇墜閴岄墠閴庨墢閴愰墤閴掗墦閴旈墪閴栭墬閴橀墮閴氶墰閴滈墲閴為墴閴犻墶閴㈤墸閴ら墺閴﹂墽閴ㄩ墿閴壂閴壄閴壇閴伴壉閴查壋閴甸壎閴烽壐閴归壓閴婚壖閴介壘閴块妧閵侀妭閵冮妱閵咃拷閵嗛妵閵堥妷閵婇妺閵岄妽閵忛姁閵戦姃閵撻姅閵曢姈閵楅姌閵欓姎閵涢姕閵濋姙閵熼姞閵¢姠閵i姢閵ラ姦閵ф仾鎭芥倴鎮氭偔鎮濇們鎮掓倢鎮涙儸鎮绘偙鎯濇儤鎯嗘儦鎮存劆鎰︽剷鎰f兇鎰�鎰庢劔鎱婃叺鎲啍鎲ф喎鎳旀嚨蹇濋毘闂╅棲闂遍棾闂甸椂闂奸椌闃冮槃闃嗛槇闃婇構闃岄槏闃忛槖闃曢槚闃楅槞闃氫脯鐖挎垥姘垫睌姹滄眾娌f矃娌愭矓娌屾报姹╂贝姹舵矄娌╂硱娉旀箔娉锋掣娉辨硹娌叉碃娉栨澈娉钞娌辨硴娉尘锟�".split("");
+for(j = 0; j != D[227].length; ++j) if(D[227][j].charCodeAt(0) !== 0xFFFD) { e[D[227][j]] = 58112 + j; d[58112 + j] = D[227][j];}
+D[228] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷閵ㄩ姪閵姭閵姯閵姲閵遍姴閵抽姶閵甸姸閵烽姼閵归姾閵婚娂閵介娋閵块媭閶侀媯閶冮媱閶呴媶閶囬媺閶婇媼閶岄媿閶庨嫃閶愰嫅閶掗嫇閶旈嫊閶栭嫍閶橀嫏閶氶嫑閶滈嫕閶為嫙閶犻嫛閶㈤嫞閶ら嫢閶﹂嫥閶拷閶╅嫪閶嫭閶嫯閶嫲閶遍嫴閶抽嫶閶甸嫸閶烽嫺閶归嫼閶婚嫾閶介嬀閶块寑閷侀寕閷冮寗閷呴寙閷囬寛閷夋垂娲ф磳娴冩祱娲囨磩娲欐磶娲祶娲吹娲氭祻娴掓禂娲虫稇娴稙娑犳禐娑撴稊娴滄禒娴兼担娓氭穱娣呮窞娓庢犊娣犳笐娣︽窛娣欐笘娑笇娑斧婀箮婀翰婀熸簡婀撴箶娓叉弗婀勬粺婧辨簶婊犳辑婊㈡亥婧ф航婧绘悍婊楁捍婊忔簭婊傛簾娼㈡絾娼囨激婕曟还婕级娼嬫酱婕級婕╂緣婢嶆緦娼告讲娼兼胶婵戯拷".split("");
+for(j = 0; j != D[228].length; ++j) if(D[228][j].charCodeAt(0) !== 0xFFFD) { e[D[228][j]] = 58368 + j; d[58368 + j] = D[228][j];}
+D[229] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷閷婇寢閷岄實閷庨審閷愰寫閷掗寭閷旈寱閷栭寳閷橀寵閷氶寷閷滈対閷為専閷犻尅閷㈤專閷ら尌閷﹂導閷ㄩ尒閷尗閷尛閷尟閷伴尡閷查尦閷撮尩閷堕尫閷搁尮閷洪尰閷奸尳閷块崁閸侀崅閸冮崉閸呴崋閸囬崍閸夛拷閸婇崑閸岄崓閸庨崗閸愰崙閸掗崜閸旈崟閸栭崡閸橀崣閸氶崨閸滈崫閸為崯閸犻崱閸㈤崳閸ら崶閸﹂崸閸ㄩ崺閸繅婢ф竟婢舵總婵℃慨婵炴繝婵�氱�g�涚�圭�电亸鐏炲畝瀹勫畷瀹撳瀹哥敮楠炴惔瀵ゅ瑜板韫囪瑖杈惰繐杩曡骏杩郡杩╄喀杩宠卡閫呴�勯�嬮�﹂�戦�嶉�栭�¢�甸�堕��亜閬戦亽閬愰仺閬橀仮閬涙毠閬撮伣閭傞倛閭冮倠褰愬綏褰栧綐灏诲挮灞愬睓瀛卞保灞︾炯寮缉寮壌寮奸灞濡冨濡╁Κ濡o拷".split("");
+for(j = 0; j != D[229].length; ++j) if(D[229][j].charCodeAt(0) !== 0xFFFD) { e[D[229][j]] = 58624 + j; d[58624 + j] = D[229][j];}
+D[230] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷閸嵀閸嵂閸伴嵄閸查嵆閸撮嵉閸堕嵎閸搁嵐閸洪嵒閸奸嵔閸鹃嵖閹�閹侀巶閹冮巹閹呴巻閹囬巿閹夐帄閹嬮帉閹嶉帋閹愰帒閹掗帗閹旈帟閹栭帡閹橀帣閹氶帥閹滈帩閹為師閹犻帯閹㈤帲閹ら帴閹﹂帶閹ㄩ帺閹帿锟介幀閹幃閹幇閹遍幉閹抽幋閹甸幎閹烽幐閹归幒閹婚幖閹介幘閹块弨閺侀弬閺冮弰閺呴弳閺囬張閺夐弸閺岄弽濡楀濡濡ゅ濡插Ο濮楀濞呭▎濮濆▓濮e濮瑰▽濞夊ú濞村☉濞e〒濠�濠у濠曞濠㈠┑鑳濯涘┓濠哄瀚瀚掑珨濯稿珷瀚e瀚栧瀚樺珳瀣夊瑮瀣栧瀣峰瓈灏曞皽瀛氬瀛冲瓚瀛撳椹甸┓椹搁┖椹块┙楠�楠侀獏楠堥獖楠愰獟楠撻獤楠橀獩楠滈獫楠熼獱楠㈤楠ラ绾熺骸绾g亥绾ㄧ憨锟�".split("");
+for(j = 0; j != D[230].length; ++j) if(D[230][j].charCodeAt(0) !== 0xFFFD) { e[D[230][j]] = 58880 + j; d[58880 + j] = D[230][j];}
+D[231] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷閺庨弿閺愰彂閺掗彄閺旈彆閺楅彉閺欓彋閺涢彍閺濋彏閺熼彔閺¢彚閺i彜閺ラ彟閺ч彣閺╅彧閺彫閺彯閺彴閺遍彶閺抽彺閺甸彾閺烽徃閺归徍閺婚徏閺介従閺块悁閻侀悅閻冮悇閻呴悊閻囬悎閻夐悐閻嬮悓閻嶏拷閻庨悘閻愰悜閻掗悡閻旈悤閻栭悧閻橀悪閻氶悰閻滈悵閻為悷閻犻悺閻㈤悾閻ら惀閻﹂惂閻ㄩ惄閻惈閻惌閻涵绾扮壕缁�缁佺粋缁夌粙缁岀粣缁旂粭缁涚粻缁$花缁划缁槐缁茬紞缁剁缓缁荤痪缂佺紓缂冪紘缂堢紜缂岀紡缂戠紥缂楃紮缂滅紱缂熺肌缂㈢迹缂ょ讥缂︾姬缂极缂辑缂及缂辩疾缂崇嫉骞虹暱宸涚斁閭曠帋鐜戠幃鐜㈢師鐝忕弬鐝戠幏鐜崇弨鐝夌張鐝ョ彊椤肩悐鐝╃彠鐝炵幒鐝茬悘鐞憶鐞︾惀鐞ㄧ惏鐞惉锟�".split("");
+for(j = 0; j != D[231].length; ++j) if(D[231][j].charCodeAt(0) !== 0xFFFD) { e[D[231][j]] = 59136 + j; d[59136 + j] = D[231][j];}
+D[232] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷閻惏閻遍惒閻抽惔閻甸惗閻烽惛閻归惡閻婚惣閻介惪閼�閼侀憘閼冮憚閼呴憜閼囬憟閼夐憡閼嬮憣閼嶉憥閼忛憪閼戦憭閼撻憯閼曢憱閼楅憳閼欓憵閼涢憸閼濋憺閼熼憼閼¢憿閼i懁閼ラ懄閼ч懆閼╅應閼懎閼懐锟介懓閼遍懖閼抽懘閼甸懚閼烽懜閼归懞閼婚懠閼介懢閼块拃閽侀拏閽冮拕閽戦挅閽橀搰閾忛摀閾旈摎閾﹂摶閿滈敔鐞涚悮鐟佺憸鐟楃憰鐟欑懛鐟懢鐠滅拵鐠�鐠佺拠鐠嬬挒鐠ㄧ挬鐠愮挧鐡掔捄闊煫闊潓鏉撴潪鏉堟潻鏋ユ瀲鏉澇鏋樻灖鏉垫灗鏋炴灜鏋嬫澐鏉兼煱鏍夋煒鏍婃煩鏋版爩鏌欐灥鏌氭灣鏌濇爛鏌冩灨鏌㈡爭鏌佹熃鏍叉牫妗犳 妗庢、妗勬·姊冩牆妗曟ˇ妗佹¨妗�鏍炬妗夋牘姊垫妗存》姊撴~妫傛ギ妫兼妞犳9锟�".split("");
+for(j = 0; j != D[232].length; ++j) if(D[232][j].charCodeAt(0) !== 0xFFFD) { e[D[232][j]] = 59392 + j; d[59392 + j] = D[232][j];}
+D[233] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷閿ч敵閿介晝闀堥晪闀曢暁闀犻暜闀撮暤闀烽暩闀归暫闀婚暭闀介暰闁�闁侀杺闁冮杽闁呴枂闁囬枅闁夐枈闁嬮枌闁嶉枎闁忛枑闁戦枓闁撻枖闁曢枛闁楅枠闁欓枤闁涢枩闁濋枮闁熼枲闁¢枹闁i枻闁ラ枽闁ч枿闁╅柂锟介柅闁柇闁柉闁伴柋闁查柍闁撮柕闁堕柗闁搁柟闁洪柣闁奸柦闁鹃柨闂�闂侀梻闂冮梽闂呴梿闂囬棃闂夐棅闂嬫い妫版妞佹妫f妤辨す妤犳妤濇妤姒樻ジ妞存姒囨妲庢妤︽ィ妤规姒ф姒Ν妲旀Ρ妲佹妲熸妲犳妲挎ǒ妲妯樻━妲叉﹦妯炬獱姗愭妯垫獛姗规ń妯ㄦ姗兼獞妾愭妾楁鐚风崚娈佹畟娈囨畡娈掓畵娈嶆畾娈涙娈将杞奖杞茶匠杞佃蕉杞歌椒杞硅胶杞艰骄杈佽緜杈勮緡杈嬶拷".split("");
+for(j = 0; j != D[233].length; ++j) if(D[233][j].charCodeAt(0) !== 0xFFFD) { e[D[233][j]] = 59648 + j; d[59648 + j] = D[233][j];}
+D[234] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷闂岄棈闂庨棌闂愰棏闂掗棑闂旈棔闂栭棗闂橀棛闂氶棝闂滈棟闂為棢闂犻棥闂㈤棧闂ら棩闂﹂棫闂椏闃囬槗闃橀槢闃為槧闃i槫闃ラ槮闃ч槰闃╅槴闃槶闃槹闃烽樃闃归樅闃鹃檨闄冮檴闄庨檹闄戦檼闄撻櫀闄楋拷闄橀櫃闄氶櫆闄濋櫈闄犻櫍闄ラ櫐闄櫗闄櫙闄伴櫛闄抽櫢闄归櫤闄婚櫦闄介櫨闄块殌闅侀殏闅冮殑闅囬殙闅婅緧杈庤緩杈樿練杌庢垕鎴楁垱鎴熸垻鎴℃垾鎴ゆ埇鑷х摨鐡寸摽鐢忕攽鐢撴敶鏃棷鏃版槉鏄欐澆鏄冩槙鏄�鐐呮浄鏄濇槾鏄辨樁鏄佃�嗘櫉鏅旀檨鏅忔櫀鏅℃櫁鏅锋殑鏆屾毀鏆濇毦鏇涙洔鏇︽洨璐茶闯璐惰椿璐借祤璧呰祮璧堣祲璧囪祶璧曡禉瑙囪瑙嬭瑙庤瑙愯鐗姛鐗濈墻鐗壘鐗跨妱鐘嬬妽鐘忕姃鎸堟尣鎺帮拷".split("");
+for(j = 0; j != D[234].length; ++j) if(D[234][j].charCodeAt(0) !== 0xFFFD) { e[D[234][j]] = 59904 + j; d[59904 + j] = D[234][j];}
+D[235] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷闅岄殠闅戦殥闅撻殨闅栭殮闅涢殱闅為殶闅犻殹闅㈤殻闅ら殽闅﹂毃闅╅毆闅毈闅毊闅毐闅查毚闅甸毞闅搁毢闅婚毧闆傞泝闆堥泭闆嬮洂闆戦洆闆旈洊闆楅洏闆欓洑闆涢洔闆濋洖闆熼洝闆㈤洠闆ら洢闆﹂洤闆拷闆洯闆洶闆遍洸闆撮浀闆搁浐闆婚浖闆介浛闇傞渻闇呴湂闇嬮湆闇愰湋闇掗湐闇曢湕闇橀湙闇氶湜闇濋湡闇犳惪鎿樿�勬姣虫姣垫姘呮皣姘嗘皪姘曟皹姘欐皻姘℃癌姘ゆ蔼姘叉數鏁曟暙鐗嶇墥鐗栫埌铏㈠垨鑲熻倻鑲撹偧鏈婅偨鑲辫偒鑲偞鑲疯儳鑳ㄨ儵鑳儧鑳傝儎鑳欒儘鑳楁湊鑳濊儷鑳辫兇鑳剭鑴庤儾鑳兼湑鑴掕睔鑴惰劄鑴剺鑴茶厛鑵岃厯鑵磋厵鑵氳叡鑵犺叐鑵艰吔鑵収濉嶅鑶堣唫鑶戞粫鑶h啰鑷屾湨鑷婅喕锟�".split("");
+for(j = 0; j != D[235].length; ++j) if(D[235][j].charCodeAt(0) !== 0xFFFD) { e[D[235][j]] = 60160 + j; d[60160 + j] = D[235][j];}
+D[236] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷闇¢湤闇i湦闇ラ湨闇ч湪闇╅湯闇湲闇湵闇抽湸闇甸湺闇烽満闇婚溂闇介溈闈�闈侀潅闈冮潉闈呴潌闈囬潏闈夐潑闈嬮潓闈嶉潕闈忛潗闈戦潝闈曢潡闈橀潥闈滈潩闈熼潱闈ら潶闈ч潹闈潾闈澀闈澂闈伴澅锟介澆闈甸澐闈搁澒闈洪澔闈介澗闈块瀫闉侀瀭闉冮瀯闉嗛瀲闉堥瀴闉婇瀸闉庨瀼闉愰灀闉曢灃闉楅灆闉氶灈闉滈灊鑷佽啨娆ゆ娆规瓋姝嗘瓩椋戦椋撻椋欓娈冲絸姣傝С鏂愰綉鏂撴柤鏃嗘梽鏃冩棇鏃庢棐鏃栫個鐐滅倴鐐濈偦鐑�鐐风偒鐐辩儴鐑婄剱鐒撶剸鐒劚鐓崇厹鐓ㄧ厖鐓茬厞鐓哥吅鐔樼喅鐔电啫鐔犵嚑鐕旂嚙鐕圭垵鐖ㄧ伂鐒樼叇鐔规埦鎴芥墐鎵堟墘绀荤绁嗙绁涚绁撶绁㈢绁犵ク绁хズ绂呯绂氱Η绂冲繎蹇愶拷".split("");
+for(j = 0; j != D[236].length; ++j) if(D[236][j].charCodeAt(0) !== 0xFFFD) { e[D[236][j]] = 60416 + j; d[60416 + j] = D[236][j];}
+D[237] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷闉為灍闉¢灑闉ら灔闉﹂灖闉ㄩ灘闉灛闉灠闉遍灣闉甸灦闉烽灨闉归灪闉婚灱闉介灳闉块焵闊侀焸闊冮焺闊呴焼闊囬焾闊夐煀闊嬮煂闊嶉煄闊忛煇闊戦煉闊撻煍闊曢煐闊楅煒闊欓煔闊涢煖闊濋煘闊熼煚闊¢煝闊o拷闊ら煡闊ㄩ煯闊煱闊遍煵闊撮煼闊搁煿闊洪熁闊奸熃闊鹃熆闋�闋侀爞闋冮爠闋呴爢闋囬爤闋夐爦闋嬮爩闋嶉爭鎬兼仢鎭氭仹鎭佹仚鎭f偒鎰嗘剭鎱濇啯鎲濇噵鎳戞垎鑲�鑱挎矒娉舵芳鐭剁煾鐮�鐮夌牀鐮樼爲鏂牠鐮滅牆鐮圭牶鐮荤牊鐮肩牓鐮牐鐮╃纭纭楃牔纭愮纭岀—纰涚纰氱纰滅ⅰ纰g⒉纰圭ⅴ纾旂纾夌,纾茬纾寸绀ょ绀撮緵榛归换榛肩洷鐪勭湇鐩圭渿鐪堢湚鐪㈢湙鐪湨鐪电湼鐫愮潙鐫囩潈鐫氱潹锟�".split("");
+for(j = 0; j != D[237].length; ++j) if(D[237][j].charCodeAt(0) !== 0xFFFD) { e[D[237][j]] = 60672 + j; d[60672 + j] = D[237][j];}
+D[238] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷闋忛爯闋戦爳闋撻爺闋曢爾闋楅牁闋欓牃闋涢牅闋濋牉闋熼牋闋¢牏闋i牑闋ラ牔闋ч牗闋╅牚闋牞闋牣闋牥闋遍牪闋抽牬闋甸牰闋烽牳闋归牶闋婚牸闋介牼闋块椤侀椤冮椤呴椤囬椤夐椤嬮椤嶏拷椤庨椤愰椤掗椤旈椤栭椤橀椤氶椤滈椤為椤犻 椤㈤。椤らˉ椤﹂¨椤ㄩ々椤~椤…椤潰鐫ョ澘鐬嶇澖鐬�鐬岀瀾鐬熺灎鐬扮灥鐬界敽鐣�鐣庣晪鐣堢暃鐣茬暪鐤冪綐缃$綗瑭堢建缃寸奖缃圭緛缃剧泹鐩ヨ牪閽呴拞閽囬拫閽婇拰閽嶉拸閽愰挃閽楅挄閽氶挍閽滈挘閽ら挮閽挱閽挴閽伴挷閽撮挾閽烽捀閽归捄閽奸捊閽块搫閾堥搲閾婇搵閾岄搷閾庨搻閾戦搾閾曢摉閾楅摍閾橀摏閾為摕閾犻摙閾ら摜閾ч摠閾拷".split("");
+for(j = 0; j != D[238].length; ++j) if(D[238][j].charCodeAt(0) !== 0xFFFD) { e[D[238][j]] = 60928 + j; d[60928 + j] = D[238][j];}
+D[239] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷椤“椤遍〔椤抽〈棰嬮棰掗棰欓ⅲ棰ㄩⅸ棰棰棰棰伴⒈棰查⒊棰撮⒌棰堕⒎棰搁⒐棰洪⒒棰奸⒔棰鹃⒖椋�椋侀椋冮椋呴椋囬椋夐椋嬮椋嶉椋愰椋栭椋涢椋濋椋¢"椋i¥锟介%椋﹂)椋+椋-椋/椋伴1椋查3椋撮5椋堕7椋搁9椋洪;椋奸=椋鹃?椁�椁侀椁冮椁呴椁囬摡閾摦閾摮閾撮摰閾烽摴閾奸摻閾块攦閿傞攩閿囬攭閿婇攳閿庨攺閿掗敁閿旈敃閿栭敇閿涢敐閿為敓閿㈤敧閿敥閿敱閿查敶閿堕敺閿搁敿閿鹃斂闀傞數闀勯晠闀嗛晧闀岄晭闀忛晵闀撻晹闀栭晽闀橀暀闀涢暈闀熼暆闀¢暍闀ら暐闀﹂暓闀ㄩ暕闀暙闀暞闀遍暡闀抽敽鐭х煬闆夌绉В绉▎宓囩▋绋傜绋旓拷".split("");
+for(j = 0; j != D[239].length; ++j) if(D[239][j].charCodeAt(0) !== 0xFFFD) { e[D[239][j]] = 61184 + j; d[61184 + j] = D[239][j];}
+D[240] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷椁堥椁婇椁岄椁忛椁掗椁旈椁栭椁橀椁氶椁滈椁為椁犻ぁ椁㈤ぃ椁らぅ椁﹂ぇ椁ㄩぉ椁か椁き椁ぐ椁遍げ椁抽ご椁甸ざ椁烽じ椁归ず椁婚ぜ椁介ぞ椁块楗侀楗冮楗呴楗囬楗夛拷楗婇楗岄楗庨楗愰楗掗楗栭楗橀楗氶楗滈楗為楗犻ァ楗㈤イ楗﹂コ楗搁ス楗婚ゾ棣傞棣夌ü绋风榛忛Ε绌扮殘鐨庣殦鐨欑殼鐡炵摖鐢笭楦㈤辅楦╅釜楦脯楦查副楦堕父楦烽腹楦洪妇楣侀箓楣勯箚楣囬箞楣夐箣楣岄箮楣戦箷楣楅箽楣涢箿楣為梗楣﹂恭楣ㄩ供楣公楣贡楣钩鐤掔枖鐤栫枲鐤濈柆鐤g柍鐤寸柛鐥勭柋鐤扮梼鐥傜棖鐥嶇棧鐥ㄧ棪鐥ょ棲鐥х槂鐥辩椉鐥跨槓鐦�鐦呯槍鐦楃槉鐦ョ槝鐦曠槞锟�".split("");
+for(j = 0; j != D[240].length; ++j) if(D[240][j].charCodeAt(0) !== 0xFFFD) { e[D[240][j]] = 61440 + j; d[61440 + j] = D[240][j];}
+D[241] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷棣岄棣氶棣滈棣為棣犻Α棣㈤Γ棣らΖ棣чΙ棣Λ棣Ν棣Ο棣伴Ρ棣查Τ棣撮Φ棣堕Ψ棣搁棣洪棣奸棣鹃椐�椐侀椐冮椐呴椐囬椐夐椐嬮椐嶉椐忛椐戦椐撻椐曢椐楅锟介椐氶椐滈椐為椐犻А椐㈤В椐らД椐﹂Ё椐ㄩЗ椐Й椐Л椐Н椐伴П椐查С椐撮У椐堕Х椐搁Ч鐦涚樇鐦㈢槧鐧�鐦槹鐦跨樀鐧冪樉鐦崇檷鐧炵檾鐧滅櫀鐧櫙缈婄绌哥┕绐�绐嗙獔绐曠绐犵绐ㄧ绐宠·琛╄〔琛借】琚傝ⅱ瑁嗚⒎琚艰瑁㈣瑁h%瑁辫瑁艰(瑁捐0瑜¤瑜撹瑜婅ご瑜ざ瑗佽ウ瑗荤枊鑳ョ毑鐨寸煖鑰掕�旇�栬�滆�犺�㈣�ヨ�﹁�ц�╄�ㄨ�辫�嬭�佃亙鑱嗚亶鑱掕仼鑱辫椤搁棰冿拷".split("");
+for(j = 0; j != D[241].length; ++j) if(D[241][j].charCodeAt(0) !== 0xFFFD) { e[D[241][j]] = 61696 + j; d[61696 + j] = D[241][j];}
+D[242] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷椐洪Щ椐奸Ы椐鹃Э楱�楱侀▊楱冮▌楱呴▎楱囬▓楱夐▕楱嬮▽楱嶉◣楱忛◥楱戦♁楱撻〝楱曢楱楅楱欓楱涢楱濋楱熼楱¢á楱ià楱ラé楱чè楱╅í楱ì楱ó楱ò楱遍ú楱抽ù楱甸ǘ楱烽ǜ锟介ü楱洪ɑ楱奸ń楱鹃椹�椹侀﹤椹冮﹦椹呴﹩椹囬﹫椹夐椹嬮椹嶉椹忛椹戦椹撻椹曢〇椹楅椹欓棰岄棰忛棰氶棰為棰¢ⅱ棰ラⅵ铏嶈檾铏櫘铏胯櫤铏艰櫥铓ㄨ殟铓嬭毈铓濊毀铓h毆铓撹毄铓惰泟铓佃泿铓拌毢铓辫毌铔夎洀铓磋洨铔辫洸铔洺铔愯湏铔炶洿铔熻洏铔戣渻铚囪浉铚堣湂铚嶈湁铚h溁铚炶湧铚湚铚捐潏铚磋湵铚╄湻铚胯瀭铚㈣澖铦捐澔铦犺澃铦岃澁铻嬭潛铦h澕铦よ潤铦ヨ灀铻灗锜掞拷".split("");
+for(j = 0; j != D[242].length; ++j) if(D[242][j].charCodeAt(0) !== 0xFFFD) { e[D[242][j]] = 61952 + j; d[61952 + j] = D[242][j];}
+D[243] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷椹氶椹滈椹為椹犻椹㈤椹ら━椹﹂┃椹ㄩ┅椹┇椹查獌楠夐獚楠庨獢楠曢獧楠﹂楠楠楠楠查楠撮楠归楠介楠块珒楂勯珕楂囬珗楂夐珚楂嶉珟楂忛珢楂掗珨楂曢珫楂楅珯楂氶珱楂滐拷楂濋珵楂犻楂i楂ラ楂ㄩ楂楂楂遍楂抽楂甸楂烽楂洪楂介楂块瑎楝侀瑐楝勯瑓楝嗚焼铻堣瀰铻灄铻冭灚锜ヨ灛铻佃灣锜嬭煋铻借煈锜�锜婅煕锜煚锜爾锠撹熅锠婅牄锠¤牴锠肩级缃傜絼缃呰垚绔虹绗堢瑑绗勭瑫绗婄绗忕瓏绗哥绗欑绗辩瑺绗ョ绗崇绗炵瓨绛氱瓍绛电瓕绛濈瓲绛绛㈢绛辩異绠︾绠哥绠濈绠呯绠滅绠绡戠瘉绡岀瘽绡氱绡︾绨岀绡肩皬绨栫皨锟�".split("");
+for(j = 0; j != D[243].length; ++j) if(D[243][j].charCodeAt(0) !== 0xFFFD) { e[D[243][j]] = 62208 + j; d[62208 + j] = D[243][j];}
+D[244] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷楝囬瑝楝婇瑡楝岄瑣楝庨瑦楝戦瑨楝旈瑫楝栭瑮楝橀瑱楝氶瑳楝滈瑵楝為瑺楝¢楝ら楝﹂楝ㄩ楝楝楝楝遍楝撮楝堕楝搁楝洪楝鹃榄�榄嗛瓓榄嬮瓕榄庨瓙榄掗瓝榄曢瓥榄楅瓨榄欓瓪锟介瓫榄滈瓭榄為瓱榄犻榄㈤榄ら榄﹂榄ㄩ榄榄榄榄伴榄查榄撮榄堕榄搁榄洪绨熺蔼绨︾案绫佺眬鑷捐垇鑸傝垊鑷鑸¤垻鑸h埈鑸埁鑸埜鑸昏埑鑸磋埦鑹勮墘鑹嬭墢鑹氳墴鑹ㄨ【琚呰瑁樿瑗炵緷缇熺晶缇景缇茬奔鏁夌矐绮濈矞绮炵并绮茬布绮界硜绯囩硨绯嶇硤绯呯硹绯ㄨ壆鏆ㄧ究缈庣繒缈ョ俊缈︾咯缈砍绯哥捣缍︾懂绻囩簺楹搁捍璧宠秳瓒旇稇瓒辫掸璧眹璞夐厞閰愰厧閰忛叅锟�".split("");
+for(j = 0; j != D[244].length; ++j) if(D[244][j].charCodeAt(0) !== 0xFFFD) { e[D[244][j]] = 62464 + j; d[62464 + j] = D[244][j];}
+D[245] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷榄奸榄鹃楫�楫侀畟楫冮畡楫呴畣楫囬畧楫夐畩楫嬮畬楫嶉畮楫忛異楫戦畳楫撻當楫曢畺楫楅畼楫欓畾楫涢疁楫濋疄楫熼疇楫¢楫i楫ラ楫ч楫╅楫楫楫楫遍楫抽楫甸楫烽楫归锟介楫奸楫鹃榀�榀侀瘋榀冮瘎榀呴瘑榀囬瘓榀夐瘖榀嬮瘜榀嶉瘞榀忛瘣榀戦瘨榀撻瘮榀曢瘱榀楅瘶榀欓瘹榀涢參閰¢叞閰╅叝閰介吘閰查叴閰归唽閱呴啇閱嶉啈閱㈤啠閱啳閱啹閱甸喆閱鸿睍楣捐陡璺竻韫欒供瓒佃犊瓒艰逗璺勮窎璺楄窔璺炶穾璺忚窙璺嗚番璺疯犯璺h饭璺昏筏韪夎方韪旇笣韪熻脯韪福韪负韫�韪硅傅韪借副韫夎箒韫傝箲韫掕箠韫拌苟韫艰汞韫磋簠韬忚簲韬愯簻韬炶备璨傝矈璨呰矘璨旀枦瑙栬瑙氳锟�".split("");
+for(j = 0; j != D[245].length; ++j) if(D[245][j].charCodeAt(0) !== 0xFFFD) { e[D[245][j]] = 62720 + j; d[62720 + j] = D[245][j];}
+D[246] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷榀滈瘽榀為療榀犻榀㈤榀ら榀﹂榀ㄩ榀榀榀榀伴榀查榀撮榀堕榀搁榀洪榀奸榀鹃榘�榘侀皞榘冮皠榘呴皢榘囬皥榘夐皧榘嬮皩榘嶉皫榘忛皭榘戦皰榘撻皵榘曢皷榘楅皹榘欓皻锟介皼榘滈皾榘為盁榘犻啊榘㈤埃榘ら哎榘﹂哀榘ㄩ癌榘矮榘碍榘隘榘伴氨榘查俺榘撮暗榘堕胺榘搁肮榘洪盎瑙ヨЙ瑙ň璎﹂潛闆╅洺闆渾闇侀湀闇忛湈闇湱闇伴溇榫�榫冮緟榫嗛緡榫堥緣榫婇緦榛鹃紜榧嶉毠闅奸毥闆庨洅鐬块洜閵庨姰閶堥尵閸強閹忛惥閼笨椴傞矃椴嗛矅椴堢ǎ椴嬮矌椴愰矐椴掗矓椴曢矚椴涢矠椴熼矤椴¢并椴i播椴﹂钵椴ㄩ博椴箔椴舶椴遍膊椴抽泊椴甸捕椴烽埠椴婚布椴介硠槌呴硢槌囬硦槌嬶拷".split("");
+for(j = 0; j != D[246].length; ++j) if(D[246][j].charCodeAt(0) !== 0xFFFD) { e[D[246][j]] = 62976 + j; d[62976 + j] = D[246][j];}
+D[247] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷榘奸敖榘鹃翱楸�楸侀眰楸冮眲楸呴眴楸囬眻楸夐眾楸嬮睂楸嶉睅楸忛睈楸戦睊楸撻睌楸曢睎楸楅睒楸欓睔楸涢睖楸濋睘楸熼睜楸¢雹楸i堡楸ラ宝楸ч报楸╅豹楸爆楸碑楸卑楸遍辈楸抽贝楸甸倍楸烽备楸归焙锟介被楸介本椴�椴冮矂椴夐矈椴岄矎椴撻矕椴楅矘椴欓矟椴铂椴补椴鹃部槌�槌侀硞槌堥硥槌戦硳槌氶硾槌犻场槌岄硩槌庨硰槌愰硴槌旈硶槌楅硺槌欓硿槌濋碂槌㈤澕闉呴瀾闉掗灁闉灚闉i灢闉撮楠伴楣橀楠洪楂侀珋楂呴珎楂嬮珜楂戦瓍榄冮瓏榄夐瓐榄嶉瓚椋ㄩ椁楗旈珶楂¢楂楂婚楂归瑘楝忛瑩楝熼楹介壕绺婚簜楹囬簣楹嬮簰閺栭簼楹熼粵榛滈粷榛犻粺榛㈤哗榛ч互榛化榧㈤棘榧脊榧烽冀榧鹃絼锟�".split("");
+for(j = 0; j != D[247].length; ++j) if(D[247][j].charCodeAt(0) !== 0xFFFD) { e[D[247][j]] = 63232 + j; d[63232 + j] = D[247][j];}
+D[248] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷槌i长槌ラ肠槌ч敞槌╅唱槌超槌钞槌嘲槌遍巢槌抽炒槌甸扯槌烽掣槌归澈槌婚臣槌介尘槌块磤榇侀磦榇冮磩榇呴磫榇囬磮榇夐磰榇嬮磳榇嶉磶榇忛磹榇戦磼榇撻磾榇曢礀榇楅礃榇欓礆榇涢礈榇濋礊榇熼礌榇★拷榇㈤矗榇ら触榇﹂揣榇ㄩ穿榇传榇喘榇疮榇伴幢榇查闯榇撮吹榇堕捶榇搁垂榇洪椿榇奸唇榇鹃纯榈�榈侀祩锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");
+for(j = 0; j != D[248].length; ++j) if(D[248][j].charCodeAt(0) !== 0xFFFD) { e[D[248][j]] = 63488 + j; d[63488 + j] = D[248][j];}
+D[249] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷榈冮祫榈呴祮榈囬祱榈夐祳榈嬮祵榈嶉祹榈忛祼榈戦祾榈撻禂榈曢禆榈楅禈榈欓禋榈涢禍榈濋禐榈熼禒榈¢耽榈i丹榈ラ郸榈ч胆榈╅氮榈惮榈诞榈蛋榈遍挡榈抽荡榈甸刀榈烽蹈榈归岛榈婚导榈介稻榈块秬槎侊拷槎傞秲槎勯秴槎嗛秶槎堥秹槎婇秼槎岄秿槎庨稄槎愰稇槎掗稉槎旈稌槎栭稐槎橀稒槎氶稕槎滈稘槎為稛槎犻丁槎拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷".split("");
+for(j = 0; j != D[249].length; ++j) if(D[249][j].charCodeAt(0) !== 0xFFFD) { e[D[249][j]] = 63744 + j; d[63744 + j] = D[249][j];}
+D[250] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷槎i钉槎ラ鼎槎ч定槎╅丢槎冬槎懂槎栋槎遍恫槎抽洞槎甸抖槎烽陡槎归逗槎婚都槎介毒槎块穩榉侀穫榉冮穭榉呴穯榉囬穲榉夐穵榉嬮穼榉嶉穾榉忛窅榉戦窉榉撻窋榉曢窎榉楅窐榉欓窔榉涢窚榉濋窞榉熼窢榉★拷榉㈤罚榉ら伐榉﹂阀榉ㄩ珐榉帆榉翻榉矾榉伴繁榉查烦榉撮返榉堕贩榉搁饭榉洪坊榉奸方榉鹃房楦�楦侀競锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");
+for(j = 0; j != D[250].length; ++j) if(D[250][j].charCodeAt(0) !== 0xFFFD) { e[D[250][j]] = 64000 + j; d[64000 + j] = D[250][j];}
+D[251] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷楦冮竸楦呴竼楦囬笀楦夐笂楦嬮笇楦嶉笌楦忛笎楦戦笒楦撻笖楦曢笘楦楅笜楦欓笟楦涢笢楦濋笧楦ら抚楦赴楦撮富楦奸箑楣嶉箰楣掗箵楣旈箹楣欓節楣熼範楣¢耿楣ラ巩楣共楣撮沟楣堕狗楣搁构楣洪够楣奸菇楹�锟介簛楹冮簞楹呴簡楹夐簥楹岄簫楹庨簭楹愰簯楹旈簳楹栭簵楹橀簷楹氶簺楹滈簽楹犻骸楹㈤海楹ら亥楹ч酣楹╅邯锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");
+for(j = 0; j != D[251].length; ++j) if(D[251][j].charCodeAt(0) !== 0xFFFD) { e[D[251][j]] = 64256 + j; d[64256 + j] = D[251][j];}
+D[252] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷楹含楹寒楹喊楹遍翰楹抽旱楹堕悍楹归汉楹奸嚎榛�榛侀粋榛冮粎榛嗛粐榛堥粖榛嬮粚榛愰粧榛撻粫榛栭粭榛欓粴榛為弧榛i护榛﹂花榛滑榛划榛伴槐榛查怀榛撮坏榛堕环榛搁缓榛介豢榧�榧侀紓榧冮紕榧咃拷榧嗛紘榧堥級榧婇紝榧忛紤榧掗紨榧曢紪榧橀細榧涢紲榧濋紴榧熼肌榧i激榧ラ鸡榧ч绩榧╅吉榧辑榧及榧憋拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷".split("");
+for(j = 0; j != D[252].length; ++j) if(D[252][j].charCodeAt(0) !== 0xFFFD) { e[D[252][j]] = 64512 + j; d[64512 + j] = D[252][j];}
+D[253] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷榧查汲榧撮嫉榧堕几榧洪技榧块絸榻侀絺榻冮絽榻嗛絿榻堥綁榻婇綃榻岄綅榻庨綇榻掗綋榻旈綍榻栭綏榻橀綑榻氶經榻滈綕榻為綗榻犻健榻㈤剑榻ら渐榻﹂涧榻ㄩ僵榻将榻江榻蒋榻伴奖榻查匠榻撮降榻堕椒榻革拷榻归胶榻婚郊榻介骄榫侀緜榫嶉編榫忛緪榫戦緬榫撻緮榫曢緰榫楅緲榫滈緷榫為尽榫㈤荆榫ら茎铯ス铴曪Ё铵憋拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷".split("");
+for(j = 0; j != D[253].length; ++j) if(D[253][j].charCodeAt(0) !== 0xFFFD) { e[D[253][j]] = 64768 + j; d[64768 + j] = D[253][j];}
+D[254] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷铷岋◢铷庯◤铷戯〒铷旓铷燂铷★ǎ铷わě铷ī锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷".split("");
+for(j = 0; j != D[254].length; ++j) if(D[254][j].charCodeAt(0) !== 0xFFFD) { e[D[254][j]] = 65024 + j; d[65024 + j] = D[254][j];}
+return {"enc": e, "dec": d }; })();
+cptable[949] = (function(){ var d = [], e = {}, D = [], j;
+D[0] = "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷".split("");
+for(j = 0; j != D[0].length; ++j) if(D[0][j].charCodeAt(0) !== 0xFFFD) { e[D[0][j]] = 0 + j; d[0 + j] = D[0][j];}
+D[129] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟疥皞臧冴皡臧嗞皨臧岅皪臧庩皬臧橁盀臧熽啊臧㈥埃臧リ唉臧ш皑臧╆蔼臧爱臧碴俺臧达拷锟斤拷锟斤拷锟疥暗臧蛾胺臧宏盎臧疥熬臧筷眮瓯傟眱瓯勱眳瓯嗞眹瓯堦眽瓯婈睂瓯庩睆瓯愱睉瓯掙睋瓯曪拷锟斤拷锟斤拷锟疥睎瓯楆睓瓯氷睕瓯濌睘瓯熽睜瓯£雹瓯j堡瓯リ宝瓯ш报瓯╆豹瓯爆瓯碑瓯辈瓯酬钡瓯蛾惫瓯魂奔瓯疥本瓯筷矀瓴囮矆瓴嶊矌瓴応矐瓴掙矒瓴曣矕瓴楆矘瓴欔矚瓴涥矠瓴㈥玻瓴り播瓴﹃钵瓴箔瓴脖瓴碴渤瓴搓驳瓴蛾卜瓴宏簿瓴筷硛瓿傟硟瓿呹硢瓿囮硥瓿婈硧瓿嶊硯瓿応硱瓿戧硳瓿撽硵瓿栮硺瓿欔硽瓿涥硿瓿濌碁瓿熽尝瓿j偿瓿﹃畅瓿抄瓿巢瓿搓撤瓿戈彻瓿宏郴瓿娟晨甏侁磦甏冴磪甏囮磮甏夑磰甏嬯磶甏愱磼甏擄拷".split("");
+for(j = 0; j != D[129].length; ++j) if(D[129][j].charCodeAt(0) !== 0xFFFD) { e[D[129][j]] = 33024 + j; d[33024 + j] = D[129][j];}
+D[130] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟疥磾甏曣礀甏楆礄甏氷礇甏濌礊甏熽础甏㈥矗甏り触甏﹃揣甏椽甏串甏窗甏标床甏筹拷锟斤拷锟斤拷锟疥炊甏逢垂甏宏椿甏疥淳甏筷祤甑侁祩甑冴祮甑堦祳甑嬯祵甑嶊祹甑応祽甑掙祿甑曣禆甑楋拷锟斤拷锟斤拷锟疥禉甑氷禌甑滉禎甑炾禑甑犼耽甑り单甑﹃掸甑旦甑但甑弹甑标挡甑逢蹈甑龟岛甑娟秬甓冴秳甓呹秵甓囮秺甓嬯秿甓庩稄甓戧稈甓撽稊甓曣稏甓楆稑甓欔稓甓涥稙甓熽稜甓£盯甓j顶甓﹃锭甓订甓东甓董甓动甓瓣侗甓碴冻甓搓兜甓蛾陡甓龟逗甓魂都甓疥毒甓筷穫攴冴穮攴嗞穱攴夑穵攴嬯穼攴嶊穾攴応窉攴旉窌攴栮窏攴橁窓攴氷窙攴濌窞攴熽贰攴㈥罚攴リ乏攴ш法攴╆藩攴番攴樊攴钒攴标凡攴酬反攴店范攴凤拷".split("");
+for(j = 0; j != D[130].length; ++j) if(D[130][j].charCodeAt(0) !== 0xFFFD) { e[D[130][j]] = 33280 + j; d[33280 + j] = D[130][j];}
+D[131] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟疥泛攴魂方攴娟競旮冴竸旮呹竼旮囮笂旮岅笌旮応笎旮戧笒旮撽笗旮栮笚旮橁笝旮氷笡旮滐拷锟斤拷锟斤拷锟疥笣旮炾笩旮犼浮旮㈥福旮り弗旮﹃抚旮俯旮斧旮腑旮腐旮碴赋旮店付旮龟富旮硷拷锟斤拷锟斤拷锟疥附旮娟缚旯傟箘旯囮箞旯夑箣旯応箲旯掙箵旯曣箺旯橁箼旯氷箾旯炾耿旯j工旯﹃恭旯公旯巩旯贡旯碴钩旯搓沟旯蛾狗旯宏咕旯筷簚旰侁簜旰冴簡旰囮簣旰夑簥旰嬯簫旰庩簭旰愱簯旰掙簱旰旉簳旰栮簵旰橁簷旰氷簺旰滉簼旰炾簾旰犼骸旰㈥海旰り亥旰﹃骇旰憨旰韩旰涵旰函旰瓣罕旰碴撼旰搓旱旰蛾悍旰戈汗旰宏夯旰筷粊昊傟粌昊呹粏昊囮粓昊夑粖昊嬯粠昊掙粨昊旉粫昊栮粭昊氷粵昊濌粸昊熽粻昊£虎昊j护昊ワ拷".split("");
+for(j = 0; j != D[131].length; ++j) if(D[131][j].charCodeAt(0) !== 0xFFFD) { e[D[131][j]] = 33536 + j; d[33536 + j] = D[131][j];}
+D[132] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟疥沪昊ш哗昊滑昊化昊瓣槐昊碴怀昊店欢昊逢还昊宏换昊疥痪昊筷紑昙侁紓昙冴紕昙咃拷锟斤拷锟斤拷锟疥紗昙夑紛昙嬯紝昙庩紡昙戧紥昙撽紨昙曣紪昙楆紭昙欔細昙涥紲昙濌紴昙熽紶昙£饥昙o拷锟斤拷锟斤拷锟疥激昙リ鸡昙ш绩昙╆吉昙籍昙急昙酬嫉昙蛾挤昙戈脊昙宏蓟昙娟絸杲勱絽杲嗞絿杲婈綃杲岅綅杲庩綇杲戧綊杲撽綌杲曣綎杲楆綐杲欔綒杲涥綖杲熽綘杲£舰杲j溅杲ш建杲╆姜杲浆杲疆杲桨杲标讲杲酬酱杲店蕉杲逢礁杲宏交杲缄浇杲娟娇昃侁緜昃冴緟昃嗞緡昃夑緤昃嬯緦昃嶊編昃応緬昃撽緮昃栮緱昃橁緳昃氷緵昃濌緸昃熽緺昃£劲昃j兢昃リ睛昃ш鲸昃╆惊昃粳昃井昃景昃标静昃酬敬昃店径昃逢竞昃魂窘昃撅拷".split("");
+for(j = 0; j != D[132].length; ++j) if(D[132][j].charCodeAt(0) !== 0xFFFD) { e[D[132][j]] = 33792 + j; d[33792 + j] = D[132][j];}
+D[133] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟疥究昕侁總昕冴縿昕呹繂昕婈繉昕応繍昕戧繏昕撽繒昕栮織昕橁繖昕氷繘昕濌繛昕熽繝昕★拷锟斤拷锟斤拷锟疥竣昕j郡昕リ喀昕ш开昕楷昕慨昕坎昕酬康昕蛾糠昕龟亢昕魂考昕疥烤昕侩�傠�冿拷锟斤拷锟斤拷锟诫�呺�嗠�囯�堧�夒�婋�嬰�嶋�庪�忞�戨�掚�撾�曤�栯�楇�橂�欕�氹�涬�炿�熾�犽�‰�㈦�k�る�ル�﹄�щ�╇�������半�彪�搽�畴�措�惦�峨�冯�鸽�闺�弘�浑�茧�诫�倦�侩亐雭侂亗雭冸亞雭囯亯雭嬰亶雭忞亹雭戨亽雭栯仒雭氹仜雭滊仦雭熾仩雭‰仮雭k仱雭ル仸雭щ仺雭╇仾雭伂雭伄雭伆雭彪伈雭畴伌雭惦伓雭冯伕雭闺伜雭浑伨雭侩倎雮傠們雮呺倖雮囯倛雮夒倞雮嬰値雮愲倰雮撾倲雮曤倴雮楇倹雮濍倿雮k偆锟�".split("");
+for(j = 0; j != D[133].length; ++j) if(D[133][j].charCodeAt(0) !== 0xFFFD) { e[D[133][j]] = 34048 + j; d[34048 + j] = D[133][j];}
+D[134] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟诫偉雮﹄偋雮偘雮搽偠雮冯偣雮弘偦雮诫偩雮侩儉雰侂儌雰冸儐雰婋儖雰岆儘雰庪儚雰掞拷锟斤拷锟斤拷锟诫儞雰曤儢雰楇儥雰氹儧雰滊儩雰炿儫雰‰儮雰k儰雰﹄儳雰儵雰儷雰儹雰儻雰帮拷锟斤拷锟斤拷锟诫儽雰搽兂雰措兊雰峨兎雰鸽児雰弘兓雰茧兘雰倦兛雱�雱侂剛雱冸剟雱呺剢雱囯剨雱嶋剮雱忞剳雱旊剷雱栯剹雱氹劄雱熾劆雱‰劉雱﹄劎雱╇劒雱劖雱劘雱半劚雱搽劤雱峨労雱浑劶雱诫劸雱侩厒雲冸厖雲嗠厙雲夒厞雲嬰厡雲嶋厧雲忞厭雲撾厲雲楇厵雲氹厸雲濍厼雲熾叀雲㈦叄雲る叆雲﹄収雲叐雲叓雲叚雲叝雲半叡雲搽叧雲措叺雲峨叿雲弘吇雲诫吘雲侩唩雴冸唲雴呺唵雴囯唺雴岆啂雴忞啇雴戨啎雴栯啑雴欕啔雴涬啙锟�".split("");
+for(j = 0; j != D[134].length; ++j) if(D[134][j].charCodeAt(0) !== 0xFFFD) { e[D[134][j]] = 34304 + j; d[34304 + j] = D[134][j];}
+D[135] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟诫啚雴熾啝雴‰啟雴k啢雴ル啨雴щ啯雴啱雴啳雴啹雴半啽雴搽喅雴措喌雴峨喎雴革拷锟斤拷锟斤拷锟诫喒雴弘喕雴茧喗雴倦喛雵�雵侂噦雵冸噭雵呺噯雵囯噲雵夒噴雵嬰噸雵庪噺雵戨噿雵撾嚂锟斤拷锟斤拷锟斤拷雵栯嚄雵橂嚈雵氹嚊雵炿嚑雵‰嚔雵k嚖雵ル嚘雵щ嚜雵嚟雵嚡雵彪嚥雵畴嚧雵惦嚩雵冯嚫雵弘嚰雵倦嚳雸�雸侂垈雸冸垎雸囯垑雸婋垗雸庪垙雸愲垜雸掚垞雸栯垬雸氹垱雸滊垵雸炿垷雸‰垻雸k垽雸ル垿雸щ埁雸╇埅雸埇雸埉雸埌雸彪埐雸畴埖雸峨埛雸鸽埞雸弘埢雸诫埦雸侩墍雺侂墏雺冸墑雺呺墕雺囯増雺夒墛雺嬰墝雺嶋墡雺忞墣雺戨墥雺撾墧雺曤墫雺楇墮雺氹墰雺濍墳雺熾墶雺㈦墸雺る墺雺﹄墽雺壂雺壄雺拷".split("");
+for(j = 0; j != D[135].length; ++j) if(D[135][j].charCodeAt(0) !== 0xFFFD) { e[D[135][j]] = 34560 + j; d[34560 + j] = D[135][j];}
+D[136] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟诫壇雺半壉雺搽壋雺峨壏雺鸽壒雺弘壔雺诫壘雺侩妧電侂妭電冸妴電囯妶電婋妺電岆妽電庯拷锟斤拷锟斤拷锟诫姀電掚姄電曤姈電楇姏電滊姖電炿姛電㈦姢電щ姩電╇姭電姰電姳電搽姵電惦姸電凤拷锟斤拷锟斤拷锟诫姼電闺姾電浑娂電诫娋電侩媭雼侂媯雼冸媱雼呺媶雼囯媻雼嬰媿雼庪嫃雼戨嫇雼旊嫊雼栯嫍雼氹嫓雼炿嫙雼犽嫛雼k嫥雼╇嫪雼半嫳雼搽嫸雼茧嫿雼倦寕雽冸寘雽嗠寚雽夒寠雽嬰寣雽嶋寧雽忞寬雽栯寳雽橂寵雽氹寷雽濍尀雽熾尃雽‰將雽k尋雽ル對雽щ尐雽╇尓雽尙雽尞雽尠雽彪尣雽畴尨雽惦尪雽冯尭雽闺尯雽浑尲雽诫尵雽侩崁雿侂崅雿冸崉雿呺崋雿囯崍雿夒崐雿嬰崒雿嶋崕雿忞崘雿戨崚雿撾崡雿欕崥雿濍崰雿‰崲雿o拷".split("");
+for(j = 0; j != D[136].length; ++j) if(D[136][j].charCodeAt(0) !== 0xFFFD) { e[D[136][j]] = 34816 + j; d[34816 + j] = D[136][j];}
+D[137] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟诫崷雿崻雿嵀雿嵅雿畴嵉雿峨嵎雿闺嵑雿浑嵓雿诫嵕雿侩巶霂嗠巼霂堧帀霂婋帇霂嶏拷锟斤拷锟斤拷锟诫帋霂忞帒霂掚帗霂曤帠霂楇帢霂欕帤霂涬帨霂濍帪霂熾帰霂k帳霂ル帵霂щ帺霂帿霂拷锟斤拷锟斤拷锟诫幃霂幇霂彪幉霂畴幋霂惦幎霂冯幐霂闺幒霂浑幖霂诫幘霂侩弨霃侂弬霃冸弳霃囯弶霃婋弽霃忞彂霃掚彄霃栯彉霃氹彍霃炿彑霃‰彚霃k彞霃﹄彠霃╇彧霃彫霃彯霃彴霃彪彶霃畴彺霃惦彾霃冯徃霃闺徍霃浑徑霃倦徔霅�霅侂悅霅冸悇霅呺悊霅囯悎霅夒悐霅嬰悓霅嶋悗霅忞悜霅掚悡霅旊悤霅栯悧霅欕悮霅涬悵霅炿悷霅‰悽霅k悿霅ル惁霅щ惇霅惌霅惎霅半惐霅搽惓霅惦惗霅冯惛霅闺惡霅浑惣霅诫惥霅侩憖霊侂憘霊冸憚锟�".split("");
+for(j = 0; j != D[137].length; ++j) if(D[137][j].charCodeAt(0) !== 0xFFFD) { e[D[137][j]] = 35072 + j; d[35072 + j] = D[137][j];}
+D[138] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟诫憛霊嗠憞霊堧憠霊婋憢霊岆憤霊庪憦霊掚憮霊曤憱霊楇憴霊氹憶霊滊憹霊炿憻霊㈦懁霊︼拷锟斤拷锟斤拷锟诫懅霊懇霊懌霊懏霊懓霊彪懖霊畴懘霊惦懚霊冯懜霊闺懞霊浑懠霊诫懢霊侩拋霋傦拷锟斤拷锟斤拷锟诫拑霋勲拝霋嗠拠霋夒拪霋嬰拰霋嶋拵霋忞拹霋戨拻霋撾挃霋曤挅霋楇挊霋欕挌霋涬挏霋炿挓霋犽挕霋㈦挘霋ル挦霋щ挬霋挮霋挳霋挵霋彪挷霋畴挻霋峨捀霋弘捇霋茧捊霋倦捒霌侂搨霌冸搮霌嗠搰霌夒搳霌嬰搶霌嶋搸霌忞搼霌掚摀霌旊摉霌楇摌霌欕摎霌涬摓霌熾摗霌㈦摜霌щ摠霌╇摢霌摦霌半摬霌畴摯霌惦摱霌冯摴霌弘摶霌茧摻霌倦摽霐�霐侂攤霐冸攧霐呺攩霐囯攬霐夒攰霐嬰攲霐嶋攷霐忞攼霐戨敀霐撾敄霐楇敊霐氹敐锟�".split("");
+for(j = 0; j != D[138].length; ++j) if(D[138][j].charCodeAt(0) !== 0xFFFD) { e[D[138][j]] = 35328 + j; d[35328 + j] = D[138][j];}
+D[139] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟诫敒霐熾敔霐‰敘霐k敠霐敩霐敭霐敳霐畴數霐峨敺霐闺敽霐浑敿霐诫斁霐侩晜霑嗭拷锟斤拷锟斤拷锟诫晣霑堧晧霑婋晭霑忞晳霑掚晸霑曤晼霑楇晿霑欕暁霑涬暈霑㈦暎霑る暐霑﹄暓霑暕霑拷锟斤拷锟斤拷锟诫暙霑暛霑暞霑半暠霑搽暢霑措暤霑峨暦霑鸽暪霑弘暬霑茧暯霑倦暱霒�霒侂杺霒冸杽霒呺枂霒囯枅霒夒枈霒嬰枌霒嶋枎霒忞枑霒戨枓霒撾枖霒曤枛霒楇枠霒欕枤霒涬枩霒濍枮霒熾枹霒k枼霒﹄枾霒╇柆霒柈霒柌霒峨柗霒鸽柟霒弘柧霒侩梺霔傠梼霔呺梿霔囯棃霔夒棅霔嬰棊霔掚棑霔旊棔霔栯棗霔欕棜霔涬棞霔濍棡霔熾棤霔‰棦霔k棨霔ル棪霔щ棬霔╇棯霔棴霔棷霔半棻霔搽棾霔措椀霔峨椃霔鸽椆霔弘椈霔茧椊霔倦椏锟�".split("");
+for(j = 0; j != D[139].length; ++j) if(D[139][j].charCodeAt(0) !== 0xFFFD) { e[D[139][j]] = 35584 + j; d[35584 + j] = D[139][j];}
+D[140] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟诫榾霕侂槀霕冸槃霕呺槅霕囯槇霕夒槉霕嬰槍霕嶋槑霕忞槖霕撾槙霕栯槜霕欕槡霕涬槣霕濓拷锟斤拷锟斤拷锟诫槥霕熾槧霕‰槩霕k槫霕﹄槯霕槱霕槴霕槷霕槹霕彪槻霕畴樀霕峨樂霕鸽樄霕猴拷锟斤拷锟斤拷锟诫樆霕茧樈霕倦樋霗�霗侂檪霗冸檮霗呺檰霗囯檳霗婋檵霗岆檷霗庪檹霗愲檻霗掚檽霗旊檿霗栯櫁霗橂櫃霗氹櫅霗滊櫇霗炿櫉霗犽櫋霗㈦櫍霗ル櫐霗щ櫓霗櫕霗櫗霗櫙霗半櫛霗搽櫝霗措櫟霗峨櫡霗鸽櫣霗弘櫥霗茧櫧霗倦櫩霘�霘侂殏霘冸殑霘呺殕霘囯殘霘夒殜霘嬰殞霘嶋殠霘忞殣霘戨殥霘撾殧霘曤殩霘楇殬霘欕殮霘涬殲霘熾殹霘㈦殻霘ル殾霘щ毃霘╇毆霘毊霘毎霘搽毘霘措毜霘峨毞霘鸽毠霘弘毣霘茧毥霘倦毧霙�霙侂泜锟�".split("");
+for(j = 0; j != D[140].length; ++j) if(D[140][j].charCodeAt(0) !== 0xFFFD) { e[D[140][j]] = 35840 + j; d[35840 + j] = D[140][j];}
+D[141] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟诫泝霙勲泤霙嗠泧霙堧泬霙婋泲霙岆泹霙庪洀霙愲洃霙掚洆霙曤洊霙楇洏霙欕洑霙涬洔霙濓拷锟斤拷锟斤拷锟诫洖霙熾洜霙‰洟霙k洡霙ル洣霙щ洦霙╇洩霙洭霙洰霙洷霙搽洺霙惦浂霙冯浌霙猴拷锟斤拷锟斤拷锟诫浕霙茧浗霙倦浛霚傠渻霚勲渾霚囯湀霚夒湂霚嬰湆霚嶋湈霚忞湊霚戨湌霚撾湐霚曤湒霚楇湗霚欕湚霚涬湝霚濍湠霚熾湢霚‰湤霚k湦霚ル湨霚щ湭霚湱霚湵霚搽湷霚措湹霚峨湻霚弘溂霚诫溇霚侩潃霛侂潅霛冸潊霛嗠潎霛夒潑霛嬰潔霛庪潖霛愲潙霛掚潛霛栯潡霛橂潤霛氹潧霛滊潩霛炿潫霛‰潰霛k潵霛﹄潷霛╇潽霛潿霛澁霛澆霛措澏霛冯澑霛闺澓霛浑澗霛侩瀬霝傠瀮霝呺瀱霝囯瀳霝夒瀶霝嬰瀻霝撾灁霝曤灇霝涬灊霝烇拷".split("");
+for(j = 0; j != D[141].length; ++j) if(D[141][j].charCodeAt(0) !== 0xFFFD) { e[D[141][j]] = 36096 + j; d[36096 + j] = D[141][j];}
+D[142] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟诫灍霝‰灑霝k灓霝ル灕霝щ灙霝灟霝半灡霝搽灣霝峨灧霝闺灪霝浑灱霝诫灳霝侩焵霟侊拷锟斤拷锟斤拷锟诫焸霟冸焺霟呺焼霟堧煀霟嬰煂霟嶋煄霟忞煇霟戨煉霟撾煍霟曤煐霟楇煒霟欕煔霟涬煖霟濓拷锟斤拷锟斤拷锟诫煘霟熾煚霟‰煝霟k煠霟ル煢霟щ煥霟╇煪霟煯霟煴霟搽煶霟惦煻霟冯煾霟闺熀霟浑熅霠傠爟霠勲爡霠嗠爦霠嬰爫霠庪爮霠戨爳霠撾爺霠曤爾霠楇牃霠滊牉霠熾牋霠‰牏霠k牔霠щ牘霠牜霠牣霠牥霠彪牪霠畴牰霠弘牷霠茧牻霠倦牽搿侂搿冸搿嗠搿堧搿婋搿岆搿庪搿愲搿旊搿栯搿橂搿氹搿炿搿‰、搿kˉ搿﹄¨搿々搿~搿“搿搽〕搿措〉搿峨》搿闺『搿浑〗搿倦】擘�擘侂擘冸锟�".split("");
+for(j = 0; j != D[142].length; ++j) if(D[142][j].charCodeAt(0) !== 0xFFFD) { e[D[142][j]] = 36352 + j; d[36352 + j] = D[142][j];}
+D[143] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟诫擘嗠擘堧擘婋擘岆擘忞擘戨擘撾擘曤擘楇擘欕擘涬擘濍擘燂拷锟斤拷锟斤拷锟诫擘‰ⅱ擘kⅳ擘ルⅵ擘щⅸ擘擘擘擘彪⒉擘畴⒌擘峨⒎擘闺⒑擘浑⒓擘斤拷锟斤拷锟斤拷锟诫⒕擘侩耄勲耄囯耄夒耄嬰耄庪耄戨耄撾耄栯耄橂耄氹耄滊耄犽"耄k¥耄ル&耄щ*耄-耄/耄彪2耄畴4耄惦6耄冯:耄茧>耄侩毪侂毪冸毪嗠毪堧毪婋毪岆毪庪毪愲毪掚毪旊毪栯毪欕毪涬毪濍毪熾ぁ毪㈦ぃ毪るぅ毪﹄ぇ毪ぉ毪か毪き毪く毪半け毪搽こ毪措さ毪峨し毪鸽す毪弘せ毪倦た毳侂毳冸毳嗠毳堧毳婋毳嶋毳愲毳撾毳曤毳楋拷".split("");
+for(j = 0; j != D[143].length; ++j) if(D[143][j].charCodeAt(0) !== 0xFFFD) { e[D[143][j]] = 36608 + j; d[36608 + j] = D[143][j];}
+D[144] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟诫毳涬毳炿毳‰ア毳kイ毳ルウ毳щオ毳ギ毳グ毳彪ゲ毳畴ザ毳冯ス毳弘セ毳斤拷锟斤拷锟斤拷锟诫ゾ毳侩毽侂毽冸毽堧毽岆毽愲毽掚毽旊毽栯毽橂毽氹毽滊毽烇拷锟斤拷锟斤拷锟诫毽犽Α毽㈦Γ毽るΕ毽﹄Η毽Ι毽Λ毽Ο毽彪Σ毽畴Φ毽峨Ψ毽鸽毽弘毽倦毵傠毵勲毵嗠毵婋毵嶋毵旊毵栯毵氹毵熾毵㈦Е毵щЗ毵Й毵М毵О毵彪Р毵畴Ф毵浑Ъ毵诫Ь毵侩▊毹冸▌毹呺▎毹囯▔毹婋▼毹岆◢毹庪◤毹愲☉毹掚〒毹旊毹楇毹欕毹涬毹濍毹熾毹‰á毹kà毹ルé毹щè毹╇í毹ì毹ó毹ò毹彪ú毹畴ù毹惦ǘ毹冯ê毹浑ń毹倦氅侂﹥氅勲﹨氅嗭拷".split("");
+for(j = 0; j != D[144].length; ++j) if(D[144][j].charCodeAt(0) !== 0xFFFD) { e[D[144][j]] = 36864 + j; d[36864 + j] = D[144][j];}
+D[145] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟诫﹪氅婋氅忞氅戨氅栯氅欕氅涬氅炿氅犽氅㈦氅﹄┆氅┈氅┊氅拷锟斤拷锟斤拷锟诫┎氅畴┑氅峨┓氅闺┖氅浑┘氅诫┚氅侩獉氇侂獋氇嗠獔氇夒獖氇嬰獚氇庪獜氇愲獞氇掞拷锟斤拷锟斤拷锟诫獡氇旊獣氇栯獥氇橂獧氇氹獩氇滊獫氇炿獰氇犽氇㈦氇る氇﹄氇氇氇彪氇措氇峨氇弘氇倦氆�氆侂珎氆冸珔氆嗠珖氆夒珚氆嬰珜氆嶋珟氆忞珢氆戨珤氆撾珨氆曤珫氆楇珰氆涬珳氆濍珵氆熾珷氆‰氆k氆ル氆щ氆╇氆氆氆氆彪氆畴氆惦氆冯氆闺氆浑氆倦氍侂瑐氍冸瑓氍嗠瑖氍堧瑝氍婋瑡氍岆瑤氍愲瑨氍撾瑪氍曤瑬氍楇瑱氍氹瑳氍濍瑸氍熾氍㈦氍る氍﹄锟�".split("");
+for(j = 0; j != D[145].length; ++j) if(D[145][j].charCodeAt(0) !== 0xFFFD) { e[D[145][j]] = 37120 + j; d[37120 + j] = D[145][j];}
+D[146] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟诫氍氍氍氍彪氍畴氍闺氍侩瓈氕侂瓊氕冸瓎氕堧瓓氕嬰瓕氕庪瓚氕掞拷锟斤拷锟斤拷锟诫瓝氕曤瓥氕楇瓩氕氹瓫氕滊瓭氕炿瓱氕犽氕る氕﹄氕氕氕氕氕憋拷锟斤拷锟斤拷锟诫氕畴氕惦氕冯氕闺氕浑氕诫氕侩畝氘侂畟氘冸畡氘呺畣氘囯畨氘婋畫氘嶋畮氘忞畱氘掚畵氘旊畷氘栯畻氘橂畽氘氹疀氘滊疂氘炿疅氘犽氘㈦氘ル氘щ氘氘氘氘彪氘畴氘峨氘闺氘浑氘诫氘侩瘉氙傠瘍氙呺瘑氙囯瘔氙婋瘚氙岆瘝氙庪瘡氙戨瘨氙旊瘯氙栯瘲氙橂瘷氙氹瘺氙滊瘽氙炿療氙犽氙㈦氙る氙﹄氙氙氙氙氙半氙搽氙措氙峨氙弘氙诫氚侊拷".split("");
+for(j = 0; j != D[146].length; ++j) if(D[146][j].charCodeAt(0) !== 0xFFFD) { e[D[146][j]] = 37376 + j; d[37376 + j] = D[146][j];}
+D[147] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟诫皟氚勲皡氚嗠皣氚婋皫氚愲皰氚撾皺氚氹盃氚‰阿氚k唉氚蔼氚艾氚隘氚搽俺氚碉拷锟斤拷锟斤拷锟诫岸氚冯肮氚弘盎氚茧敖氚倦翱氡傠眴氡囯眻氡婋眿氡庪睆氡戨睊氡撾睌氡曤睎氡楇睒氡欙拷锟斤拷锟斤拷锟诫睔氡涬睖氡炿睙氡犽薄氡㈦保氡る饱氡﹄抱氡暴氡鲍氡杯氡悲氡半北氡搽背氡措钡氡峨狈氡鸽惫氡弘被氡茧苯氡倦笨氩�氩侂矀氩冸矄氩囯矇氩婋矋氩忞矏氩戨矑氩撾矕氩橂矝氩滊矟氩炿矡氩㈦玻氩ル拨氩╇勃氩铂氩伯氩膊氩峨卜氩鸽补氩弘不氩倦部氤侂硞氤冸硡氤嗠硣氤堧硥氤婋硧氤岆硯氤掚硴氤旊硸氤楇硻氤氹硾氤濍碁氤熾碃氤‰尝氤k长氤ル肠氤щ敞氤╇唱氤超氤钞氤嘲氤彪巢氤畴撤氤闺澈氤浑辰锟�".split("");
+for(j = 0; j != D[147].length; ++j) if(D[147][j].charCodeAt(0) !== 0xFFFD) { e[D[147][j]] = 37632 + j; d[37632 + j] = D[147][j];}
+D[148] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟诫尘氤侩磤氪侂磦氪冸磫氪堧磰氪嬰磳氪嶋磶氪忞磻氪掚磽氪曤礀氪楇礃氪欕礆氪涬礈氪濓拷锟斤拷锟斤拷锟诫礊氪熾礌氪‰储氪k触氪﹄揣氪穿氪传氪串氪窗氪彪床氪畴创氪惦炊氪冯锤氪癸拷锟斤拷锟斤拷锟诫春氪浑醇氪诫淳氪侩祦氲傠祪氲勲祬氲嗠祰氲婋祴氲嶋祹氲忞祽氲掚祿氲旊禃氲栯禇氲氹禌氲滊禎氲炿禑氲犽怠氲㈦担氲ル郸氲щ旦氲但氲淡氲弹氲半当氲搽党氲措档氲峨捣氲鸽倒氲弘祷氲茧到氲倦悼攵傠秲攵呺秵攵嬰秾攵嶋稁攵忞稈攵旊稏攵楇稑攵涬稘攵炿稛攵犽丁攵㈦叮攵ル鼎攵щ定攵╇丢攵冬攵懂攵侗攵搽冻攵措兜攵峨斗攵闺逗攵浑都攵诫毒攵侩穩敕侂穫敕冸穭敕呺穯敕囯穲敕夒穵敕嬰穼敕嶋穾敕忞窅敕戯拷".split("");
+for(j = 0; j != D[148].length; ++j) if(D[148][j].charCodeAt(0) !== 0xFFFD) { e[D[148][j]] = 37888 + j; d[37888 + j] = D[148][j];}
+D[149] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟诫窉敕撾窎敕楇窓敕氹窙敕濍窞敕熾窢敕‰发敕k筏敕ル乏敕щ法敕帆敕翻敕矾敕憋拷锟斤拷锟斤拷锟诫凡敕畴返敕峨贩敕闺泛敕浑芳敕诫肪敕侩竵敫傠竸敫嗠竾敫堧笁敫婋笅敫庪笍敫戨笒敫擄拷锟斤拷锟斤拷锟诫笗敫栯笚敫橂笝敫氹笡敫炿笭敫‰涪敫k袱敫ル甫敫щ辅敫╇釜敫脯敫府敫赴敫彪覆敫畴复敫惦付敫冯父敫闺负敫浑讣敫诫妇敫侩箑牍侂箓牍冸箚牍囯箟牍婋箣牍嶋箯牍愲箲牍掚箵牍栯箻牍滊節牍炿篃牍㈦梗牍ル功牍щ供牍宫牍巩牍共牍峨狗牍鸽构牍弘咕牍侩簛牒傠簝牒呺簡牒囯簣牒夒簥牒嬰簬牒掚簱牒旊簳牒栯簵牒氹簺牒滊簼牒炿簾牒犽骸牒㈦海牒る亥牒﹄骇牒╇邯牒含牒寒牒喊牒彪翰牒畴捍牒惦憾牒凤拷".split("");
+for(j = 0; j != D[149].length; ++j) if(D[149][j].charCodeAt(0) !== 0xFFFD) { e[D[149][j]] = 38144 + j; d[38144 + j] = D[149][j];}
+D[150] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟诫焊牒闺汉牒浑杭牒诫壕牒侩粈牖侂粋牖冸粍牖呺粏牖囯粓牖夒粖牖嬰粚牖嶋粠牖忞粧牖擄拷锟斤拷锟斤拷锟诫粫牖栯粰牖氹粵牖滊粷牖炿粺牖‰虎牖﹄户牖哗牖猾牖划牖话牖彪徊牖畴淮牖碉拷锟斤拷锟斤拷锟诫欢牖冯桓牖闺缓牖浑患牖诫痪牖侩紑爰傠純爰勲紖爰嗠紘爰婋紜爰岆紞爰庪紡爰愲紤爰掚紦爰旊紩爰栯紬爰氹紴爰熾紶爰‰饥爰k激爰ル鸡爰щ绩爰╇吉爰棘爰籍爰及爰彪疾爰畴即爰惦级爰冯几爰闺己爰浑技爰诫季爰侩絺虢冸絽虢嗠絿虢夒綂虢嬰綄虢嶋綆虢忞綊虢撾綌虢栯綏虢橂綑虢氹經虢滊綕虢炿綗虢犽健虢㈦剑虢る渐虢﹄涧虢僵虢将虢江虢蒋虢半奖虢搽匠虢措降虢峨椒虢鸽焦虢弘交虢茧浇虢倦娇刖�刖侂緜锟�".split("");
+for(j = 0; j != D[150].length; ++j) if(D[150][j].charCodeAt(0) !== 0xFFFD) { e[D[150][j]] = 38400 + j; d[38400 + j] = D[150][j];}
+D[151] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟诫緝刖勲緟刖嗠緡刖堧緣刖婋緥刖岆緧刖庪緩刖愲緫刖掚緭刖曤緰刖楇緲刖欕練刖涬緶刖濓拷锟斤拷锟斤拷锟诫緸刖熾緺刖‰劲刖k兢刖ル睛刖щ鲸刖╇惊刖粳刖井刖颈刖搽境刖措镜刖峨痉刖革拷锟斤拷锟斤拷锟诫竟刖弘净刖茧窘刖倦究肟�肟侂總肟冸縿肟嗠繃肟堧繅肟婋繈肟庪繌肟戨繏肟撾繒肟栯織肟橂繖肟氹繘肟濍繛肟犽竣肟k郡肟ル喀肟щ卡肟╇开肟楷肟慨肟堪肟彪坎肟畴看肟惦慷肟冯扛肟闺亢肟浑考肟诫烤肟快��靲侅�傡�冹�勳�呾�嗢�囲�堨�夓�婌�嬱�岇�嶌�庫�忟�愳�戩�掛�撿�旍�曥�栰�楈�橃�欖�氺�涭�滌�濎�烄�熿�犾�§�㈧�l�れ�レ��ъ��╈�������办�膘�察�踌�挫�奠�鹅�缝�胳�轨�红�混�届�眷�匡拷".split("");
+for(j = 0; j != D[151].length; ++j) if(D[151][j].charCodeAt(0) !== 0xFFFD) { e[D[151][j]] = 38656 + j; d[38656 + j] = D[151][j];}
+D[152] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届亐靵侅亗靵冹亜靵呾亞靵囲亪靵夓亰靵嬱亴靵嶌亷靵忟亹靵掛亾靵旍仌靵栰仐靵欖仛靵涳拷锟斤拷锟斤拷锟届仢靵烄仧靵§仮靵l仱靵レ仸靵ъ仾靵伂靵伄靵伆靵膘伈靵踌伌靵奠伓靵缝伕靵癸拷锟斤拷锟斤拷锟届伜靵混伡靵届伨靵快個靷侅倐靷冹倓靷呾倖靷囲倛靷夓倞靷嬱倢靷嶌値靷忟倰靷撿倳靷栰倵靷欖倸靷涭倻靷濎倿靷熿偄靷れ偊靷ъ偍靷╈偑靷偖靷膘偛靷缝偢靷轨偤靷混偩靸傡儍靸勳儐靸囲儕靸嬱儘靸庫儚靸戩儝靸撿償靸曥儢靸楈儦靸烄儫靸犾儭靸㈧儯靸儳靸╈儶靸儹靸儻靸办儽靸察兂靸鹅兏靸红兓靸检兘靸眷兛靹侅剛靹冹剠靹嗢剣靹夓剨靹嬱剬靹嶌剮靹忟剳靹掛創靹旍剸靹楈剺靹欖剼靹涭劇靹㈧劌靹劑靹劔靹拷".split("");
+for(j = 0; j != D[152].length; ++j) if(D[152][j].charCodeAt(0) !== 0xFFFD) { e[D[152][j]] = 38912 + j; d[38912 + j] = D[152][j];}
+D[153] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届劜靹踌劥靹奠劮靹红劵靹届劸靹快厑靺傡厓靺勳厖靺嗢厙靺婌厧靺忟厫靺戩厭靺撿厲靺楋拷锟斤拷锟斤拷锟届厵靺氺厸靺濎厼靺熿厾靺§參靺l叇靺叓靺叚靺叝靺膘叢靺踌叺靺鹅叿靺轨吅靺伙拷锟斤拷锟斤拷锟届吋靺届吘靺快唨靻侅唫靻冹唲靻嗢唶靻堨唹靻婌唻靻忟啈靻掛啌靻曥啑靻橃啓靻氺啗靻烄啝靻㈧啠靻れ啨靻ъ啰靻啳靻啹靻膘啿靻踌喆靻奠喍靻缝喐靻轨喓靻混喖靻眷喛靽�靽侅噦靽冹噮靽嗢噰靽夓噴靽嬱噸靽庫噺靽愳噾靽掛嚀靽曥嚃靽欖嚉靽涭嚋靽濎嚍靽熿嚒靽㈧嚕靽レ嚘靽ъ嚛靽嚝靽嚟靽嚡靽察嚧靽奠嚩靽缝嚫靽轨嚭靽混嚲靽快垇靾傡垉靾呾垎靾囲垐靾夓垔靾嬱垘靾愳垝靾撿垟靾曥垨靾楈垰靾涭垵靾烄垺靾㈧垼锟�".split("");
+for(j = 0; j != D[153].length; ++j) if(D[153][j].charCodeAt(0) !== 0xFFFD) { e[D[153][j]] = 39168 + j; d[39168 + j] = D[153][j];}
+D[154] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届垽靾レ垿靾ъ埅靾埉靾办埑靾奠埗靾缝埜靾轨埡靾混埣靾届埦靾快墍靿侅墏靿冹墑靿咃拷锟斤拷锟斤拷锟届墕靿囲墘靿婌墜靿岇墠靿庫墢靿掛墦靿曥墫靿楈墮靿氺墰靿滌墲靿烄墴靿§墷靿l墹靿︼拷锟斤拷锟斤拷锟届墽靿墿靿壂靿壇靿膘壊靿踌壍靿鹅壏靿胳壒靿红壔靿眷妧鞀傡妰鞀勳妳鞀嗢妵鞀婌妺鞀岇妽鞀庫姀鞀戩姃鞀撿姅鞀曥姈鞀楈姍鞀氺姕鞀烄姛鞀犾姟鞀㈧姡鞀姧鞀╈姫鞀姰鞀姲鞀膘姴鞀踌姸鞀胳姾鞀混娂鞀届娋鞀快媭鞁侅媯鞁冹媱鞁呾媶鞁囲媹鞁夓媻鞁嬱媽鞁嶌嫀鞁忟嫄鞁戩嫆鞁撿嫈鞁曥嫋鞁楈嫎鞁欖嫐鞁涭嫗鞁熿嫛鞁㈧嫢鞁嫥鞁嫨鞁嫯鞁办嫴鞁踌嫶鞁奠嫹鞁红嫿鞁眷嬁鞂侅寕鞂冹寗鞂呾寙鞂囲寠鞂嬱寧鞂忥拷".split("");
+for(j = 0; j != D[154].length; ++j) if(D[154][j].charCodeAt(0) !== 0xFFFD) { e[D[154][j]] = 39424 + j; d[39424 + j] = D[154][j];}
+D[155] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届寪鞂戩寬鞂栰寳鞂欖寶鞂涭対鞂烄専鞂犾尅鞂㈧專鞂導鞂尗鞂尛鞂尟鞂办尡鞂诧拷锟斤拷锟斤拷锟届尦鞂挫尩鞂鹅尫鞂胳尮鞂红尰鞂检尳鞂眷尶鞃�鞃侅崅鞃冹崉鞃嗢崌鞃堨崏鞃婌崑鞃岇崓锟斤拷锟斤拷锟斤拷鞃庫崗鞃愳崙鞃掛崜鞃旍崟鞃栰崡鞃橃崣鞃氺崨鞃滌崫鞃烄崯鞃犾崱鞃㈧崳鞃れ崶鞃崸鞃崼鞃嵁鞃嵄鞃踌嵈鞃奠嵍鞃缝嵑鞃混嵕鞃快巰鞄侅巶鞄冹巺鞄嗢巼鞄夓帄鞄嬱帊鞄庫帍鞄愳帒鞄掛帗鞄旍帟鞄栰帡鞄橃帣鞄氺帥鞄滌帩鞄烄師鞄犾帯鞄㈧帲鞄れ帴鞄帶鞄帺鞄帿鞄幁鞄幆鞄办幈鞄察幊鞄挫幍鞄鹅幏鞄胳幑鞄红幓鞄检幗鞄眷幙鞆侅弬鞆冹弰鞆呾弳鞆囲張鞆夓強鞆嬱弻鞆嶌弾鞆忟彁鞆戩彃鞆撿彅鞆曥彇鞆楈彋锟�".split("");
+for(j = 0; j != D[155].length; ++j) if(D[155][j].charCodeAt(0) !== 0xFFFD) { e[D[155][j]] = 39680 + j; d[39680 + j] = D[155][j];}
+D[156] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届彌鞆濎彏鞆§彛鞆れ彞鞆彠鞆彨鞆彯鞆彴鞆膘彶鞆踌彾鞆缝徆鞆红徎鞆检徑鞆撅拷锟斤拷锟斤拷锟届徔鞇�鞇侅悅鞇冹悇鞇呾悊鞇囲悏鞇婌悑鞇岇悕鞇庫悘鞇戩悞鞇撿悢鞇曥悥鞇楈悩鞇欖悮锟斤拷锟斤拷锟斤拷鞇涭悳鞇濎悶鞇熿悹鞇§悽鞇l惀鞇惂鞇惄鞇惈鞇惍鞇惐鞇察惓鞇奠惗鞇缝惛鞇轨惡鞇混惥鞇快憖鞈侅憘鞈冹憚鞈呾憜鞈囲憠鞈婌憢鞈岇憤鞈庫憦鞈愳憫鞈掛憮鞈旍憰鞈栰憲鞈橃憴鞈氺憶鞈滌憹鞈烄憻鞈犾憽鞈㈧懀鞈懅鞈╈應鞈懎鞈懐鞈办懕鞈察懗鞈鹅懛鞈胳懞鞈混懠鞈届懢鞈快拋鞉傡拑鞉勳拝鞉嗢拠鞉堨拤鞉婌拫鞉岇拲鞉庫拸鞉愳拺鞉掛挀鞉曥挅鞉楈挊鞉欖挌鞉涭挐鞉烄挓鞉犾挕鞉㈧挘鞉れ挜鞉挧鞉挬锟�".split("");
+for(j = 0; j != D[156].length; ++j) if(D[156][j].charCodeAt(0) !== 0xFFFD) { e[D[156][j]] = 39936 + j; d[39936 + j] = D[156][j];}
+D[157] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届挭鞉挰鞉挳鞉挵鞉膘挷鞉踌挻鞉奠挾鞉缝捁鞉红捇鞉届捑鞉快搥鞊侅搨鞊冹搫鞊咃拷锟斤拷锟斤拷锟届搯鞊囲搱鞊夓搳鞊嬱搶鞊嶌搸鞊忟搻鞊戩搾鞊撿摂鞊曥摉鞊楈摌鞊欖摎鞊涭摐鞊濎摓鞊燂拷锟斤拷锟斤拷锟届摖鞊§摙鞊l摛鞊レ摝鞊ъ摠鞊摣鞊摥鞊摨鞊察摮鞊奠摱鞊缝摴鞊混摷鞊届摼鞌傡攦鞌勳攨鞌嗢攪鞌堨攭鞌婌攱鞌嶌攷鞌忟攽鞌掛敁鞌曥敄鞌楈敇鞌欖敋鞌涭敐鞌烄敓鞌犾敗鞌㈧敚鞌れ敟鞌敡鞌敨鞌敭鞌敱鞌察敵鞌挫數鞌鹅敺鞌红敿鞌眷斂鞎�鞎侅晜鞎冹晢鞎囲晪鞎忟晲鞎戩晵鞎栰暁鞎涭暅鞎熿暍鞎l暐鞎暓鞎╈暘鞎暚鞎暜鞎暡鞎鹅暦鞎胳暪鞎红暬鞎眷暱鞏侅杺鞏冹枀鞏嗢枅鞏夓枈鞏嬱枎鞏愳枓鞏撿枖锟�".split("");
+for(j = 0; j != D[157].length; ++j) if(D[157][j].charCodeAt(0) !== 0xFFFD) { e[D[157][j]] = 40192 + j; d[40192 + j] = D[157][j];}
+D[158] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届枛鞏欖枤鞏涭枬鞏烄枱鞏§枹鞏l枻鞏レ枽鞏ъ枿鞏柅鞏柇鞏柉鞏办柋鞏察柍鞏讹拷锟斤拷锟斤拷锟届柗鞏红柨鞐�鞐侅梻鞐冹棆鞐嶌棌鞐掛棑鞐曥棖鞐楈棛鞐氺棝鞐滌棟鞐烄棢鞐㈧棨鞐棫锟斤拷锟斤拷锟斤拷鞐棭鞐棲鞐棻鞐察棾鞐奠椄鞐轨椇鞐混槀鞓冹槃鞓夓槉鞓嬱槏鞓庫槒鞓戩槖鞓撿様鞓曥槚鞓楈槡鞓濎槥鞓熿槧鞓§槩鞓l槮鞓ъ槱鞓槴鞓槺鞓察樁鞓胳樅鞓检樈鞓眷樋鞕傡檭鞕呾檰鞕囲檳鞕婌檵鞕岇檷鞕庫檹鞕掛櫀鞕楈櫂鞕欖櫄鞕涭櫈鞕熿櫋鞕㈧櫍鞕れ櫏鞕櫑鞕櫓鞕櫕鞕櫘鞕办櫜鞕踌櫞鞕奠櫠鞕缝櫤鞕混櫧鞕眷櫩鞖侅殏鞖冹殑鞖呾殕鞖囲殜鞖岇殠鞖忟殣鞖戩殥鞖撿殩鞖楈殭鞖氺殯鞖濎殲鞖熿殸鞖§殺鞖l殾锟�".split("");
+for(j = 0; j != D[158].length; ++j) if(D[158][j].charCodeAt(0) !== 0xFFFD) { e[D[158][j]] = 40448 + j; d[40448 + j] = D[158][j];}
+D[159] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届毃鞖毇鞖毉鞖毌鞖察毘鞖奠毝鞖缝毣鞖检毥鞖眷毧鞗傡泟鞗嗢泧鞗堨泬鞗婌泲鞗庯拷锟斤拷锟斤拷锟届洀鞗戩洅鞗撿洉鞗栰洍鞗橃洐鞗氺洓鞗烄洘鞗㈧洠鞗れ洢鞗洤鞗洬鞗洰鞗洷鞗诧拷锟斤拷锟斤拷锟届洺鞗挫浀鞗鹅浄鞗红浕鞗检浘鞗快渶鞙侅渹鞙冹渾鞙囲湁鞙婌湅鞙嶌湈鞙忟湊鞙戩湌鞙撿湒鞙橃湚鞙涭湝鞙濎湠鞙熿湤鞙l湧鞙湩鞙╈湭鞙湰鞙湲鞙湶鞙挫湺鞙胳湽鞙红溁鞙眷溈鞚侅潅鞚冹潊鞚嗢潎鞚堨潐鞚嬱潕鞚愳潤鞚氺潧鞚濎潪鞚熿潯鞚㈧潱鞚れ潵鞚潷鞚╈潽鞚澀鞚澂鞚办澅鞚察澇鞚鹅澐鞚轨澓鞚混澘鞛�鞛侅瀭鞛嗢瀷鞛岇瀺鞛忟瀿鞛撿灂鞛欖灈鞛滌灊鞛烄灍鞛㈧灖鞛灘鞛灚鞛灟鞛膘灢鞛踌灥鞛鹅灧锟�".split("");
+for(j = 0; j != D[159].length; ++j) if(D[159][j].charCodeAt(0) !== 0xFFFD) { e[D[159][j]] = 40704 + j; d[40704 + j] = D[159][j];}
+D[160] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届灨鞛轨灪鞛混灳鞜傡焹鞜勳焻鞜嗢焽鞜婌煁鞜嶌煆鞜戩煉鞜撿煍鞜曥煐鞜楈煓鞜氺煕鞜滐拷锟斤拷锟斤拷锟届煘鞜熿煚鞜§煝鞜l煡鞜煣鞜╈煪鞜煭鞜煰鞜办煴鞜察煶鞜挫煹鞜鹅煼鞜胳煿鞜猴拷锟斤拷锟斤拷锟届熁鞜检熃鞜眷熆鞝傡爟鞝呾爢鞝囲爥鞝嬱爩鞝嶌爭鞝忟爳鞝旍牀鞝橃牂鞝氺牄鞝烄牊鞝§牏鞝l牓鞝牕鞝牘鞝牜鞝牥鞝察牫鞝挫牭鞝鹅牱鞝轨牶鞝混牻鞝眷牽臁侅臁冹臁呾臁囲臁嬱臁忟臁戩臁撿臁栰臁橃臁氺臁滌臁烄臁犾 臁㈧。臁れˉ臁¨臁々臁~臁…臁’臁察〕臁奠《臁缝」臁混〖臁届【臁快膦勳膦夓膦庫膦愳膦掛膦曥膦楈膦欖膦涭膦烄膦㈧ⅲ膦わ拷".split("");
+for(j = 0; j != D[160].length; ++j) if(D[160][j].charCodeAt(0) !== 0xFFFD) { e[D[160][j]] = 40960 + j; d[40960 + j] = D[160][j];}
+D[161] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届ⅴ膦ⅶ膦╈ⅹ膦膦膦膦膘⒉膦踌⒋膦奠⒍膦缝⒏膦轨⒑膦混⒕膦快欤侊拷锟斤拷锟斤拷锟届欤冹欤嗢欤夓欤嬱欤庫欤愳欤掛欤栰欤氺欤滌欤烄欤㈧#欤ワ拷锟斤拷锟斤拷锟届&欤ъ(欤╈*欤,欤.欤0欤膘2欤踌4欤鹅7欤胳9欤红;欤眷?欷侅欷冹欷堨欷婌欷庛��銆併�偮封�モ�βㄣ�兟�曗垾锛尖埣鈥樷�欌�溾�濄�斻�曘�堛�夈�娿�嬨�屻�嶃�庛�忋�愩�懧泵椕封墵鈮も墺鈭炩埓掳鈥测�斥剝鈩繝锟★骏鈾傗檧鈭犫姤鈱掆垈鈭団墶鈮捖р�烩槅鈽呪棆鈼忊棊鈼団梿鈻♀枲鈻斥柌鈻解柤鈫掆啇鈫戔啌鈫斻�撯壀鈮垰鈭解垵鈭碘埆鈭垐鈭嬧妴鈯団妭鈯冣埅鈭┾埀鈭竣锟�".split("");
+for(j = 0; j != D[161].length; ++j) if(D[161][j].charCodeAt(0) !== 0xFFFD) { e[D[161][j]] = 41216 + j; d[41216 + j] = D[161][j];}
+D[162] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届欷掛欷旍欷栰欷欖欷涭欷濎欷熿欷§あ欷lい欷レう欷ъえ欷╈お欷拷锟斤拷锟斤拷锟届き欷く欷办け欷察こ欷奠ざ欷缝じ欷轨ず欷混ぜ欷届ぞ欷快欹侅欹冹欹呾欹囷拷锟斤拷锟斤拷锟届欹夓欹嬱欹嶌欹忟欹撿欹栰欹欖欹涭欹濎欹熿ア欹れゥ欹ェ欹ォ欹カ欹ギ欹噿鈬斺垁鈭兟达綖藝藰藵藲藱赂藳隆驴藧鈭垜鈭徛も剦鈥扳梺鈼�鈻封柖鈾も櫊鈾♀櫏鈾р櫍鈯欌棃鈻b棎鈼戔枓鈻も枼鈻ㄢ枾鈻︹柀鈾ㄢ槒鈽庘槣鈽灺垛�犫�♀啎鈫椻啓鈫栤啒鈾櫓鈾櫖銐裤垳鈩栥弴鈩€弬銖樷劇鈧拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");
+for(j = 0; j != D[162].length; ++j) if(D[162][j].charCodeAt(0) !== 0xFFFD) { e[D[162][j]] = 41472 + j; d[41472 + j] = D[162][j];}
+D[163] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届ケ欹察コ欹奠ザ欹缝ジ欹轨ズ欹混ソ欹眷タ歃�歃侅歃冹歃呾歃囲歃嬱歃庫锟斤拷锟斤拷锟斤拷歃戩歃撿歃曥歃楈歃滌歃熿歃§Β歃lΔ歃レΖ歃ъΘ歃╈Κ歃Μ歃Ξ锟斤拷锟斤拷锟斤拷歃Π歃膘Σ歃踌Υ歃奠Χ歃缝Ω歃轨歃混歃届歃快歆冹歆嗢歆嬱歆嶌歆忟歆旍歆橃锛侊紓锛冿紕锛咃紗锛囷紙锛夛紛锛嬶紝锛嶏紟锛忥紣锛戯紥锛擄紨锛曪紪锛楋紭锛欙細锛涳紲锛濓紴锛燂紶锛★饥锛o激锛ワ鸡锛э绩锛╋吉锛棘锛籍锛及锛憋疾锛筹即锛碉级锛凤几锛癸己锛伙喀锛斤季锛匡絸锝侊絺锝冿絼锝咃絾锝囷綀锝夛綂锝嬶綄锝嶏綆锝忥綈锝戯綊锝擄綌锝曪綎锝楋綐锝欙綒锝涳綔锝濓浚锟�".split("");
+for(j = 0; j != D[163].length; ++j) if(D[163][j].charCodeAt(0) !== 0xFFFD) { e[D[163][j]] = 41728 + j; d[41728 + j] = D[163][j];}
+D[164] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届歆熿А歆lД歆Ж歆╈И歆М歆察С歆挫У歆鹅Х歆红Щ歆届Ь歆快▉歙傡▋歙勶拷锟斤拷锟斤拷锟届▍歙嗢▏歙婌◣歙忟◥歙戩♁歙撿〞歙栰歙欖歙涭歙濎歙熿歙§á歙là歙ワ拷锟斤拷锟斤拷锟届é歙ъè歙ǐ歙ō歙ǒ歙办ū歙察ǔ歙挫ǖ歙鹅ǚ歙胳ü歙红ɑ歙检ń歙眷飑�飑侅﹤飑冹﹦飑呾﹩銊便劜銊炽劥銊点劧銊枫劯銊广労銊汇劶銊姐劸銊裤厐銋併厒銋冦厔銋呫厗銋囥厛銋夈厞銋嬨厡銋嶃厧銋忋厫銋戙厭銋撱厰銋曘厲銋椼厴銋欍厷銋涖厹銋濄厼銋熴厾銋°參銋c叅銋ャ叇銋с叏銋┿叒銋叕銋叜銋叞銋便叢銋炽叴銋点叾銋枫吀銋广吅銋汇吋銋姐吘銋裤唨銌併唫銌冦唲銌呫唵銌囥唸銌夈唺銌嬨唽銌嶃啂锟�".split("");
+for(j = 0; j != D[164].length; ++j) if(D[164][j].charCodeAt(0) !== 0xFFFD) { e[D[164][j]] = 41984 + j; d[41984 + j] = D[164][j];}
+D[165] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届﹪飑堨飑婌飑庫飑戩飑撿飑栰飑橃飑氺飑烄飑l─飑レ│飑ъ┅飑拷锟斤拷锟斤拷锟届┇飑┉飑┋飑办┍飑察┏飑挫┑飑鹅┓飑胳┕飑红┗飑检┚飑快獉飒侅獋飒冹獏飒嗭拷锟斤拷锟斤拷锟届獓飒堨獕飒婌獘飒岇獚飒庫獜飒愳獞飒掛獡飒旍獣飒栰獥飒欖獨飒涭獪飒濎獮飒熿獱飒§飒l飒レ飒р叞鈪扁叢鈪斥叴鈪碘叾鈪封吀鈪癸拷锟斤拷锟斤拷鈪犫叀鈪⑩叄鈪も叆鈪︹収鈪ㄢ叐锟斤拷锟斤拷锟斤拷锟轿懳捨撐斘曃栁椢樜櫸毼浳溛澪炍熚犖∥Nのノξㄎ╋拷锟斤拷锟斤拷锟斤拷锟轿蔽参澄次滴段肺肝刮何晃嘉轿疚肯�蟻蟽蟿蠀蠁蠂蠄蠅锟斤拷锟斤拷锟斤拷锟�".split("");
+for(j = 0; j != D[165].length; ++j) if(D[165][j].charCodeAt(0) !== 0xFFFD) { e[D[165][j]] = 42240 + j; d[42240 + j] = D[165][j];}
+D[166] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届飒╈飒飒飒飒膘飒踌飒奠飒缝飒轨飒混飒快珌飓傡珒飓咃拷锟斤拷锟斤拷锟届珕飓囲珗飓夓珚飓嬱珟飓愳珤飓旍珪飓栰珬飓氺珱飓滌珴飓烄珶飓§飓l飓レ飓э拷锟斤拷锟斤拷锟届飓╈飓飓飓办飓察飓奠飓缝飓轨飓混飓届飓快瑎飕侅瑐飕冹瑒飕呾瑔飕囲瑝飕娾攢鈹傗攲鈹愨敇鈹斺敎鈹敜鈹粹敿鈹佲攦鈹忊敁鈹涒敆鈹b敵鈹敾鈺嬧敔鈹敤鈹封斂鈹濃敯鈹モ敻鈺傗敀鈹戔敋鈹欌敄鈹曗攷鈹嶁敒鈹熲敗鈹⑩敠鈹р敥鈹敪鈹敱鈹测數鈹垛敼鈹衡斀鈹锯晙鈺佲晝鈺勨晠鈺嗏晣鈺堚晧鈺婏拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷".split("");
+for(j = 0; j != D[166].length; ++j) if(D[166][j].charCodeAt(0) !== 0xFFFD) { e[D[166][j]] = 42496 + j; d[42496 + j] = D[166][j];}
+D[167] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届瑡飕岇瑣飕庫瑥飕戩瑨飕撿瑫飕栰瑮飕欖瑲飕涭瑴飕濎瑸飕熿飕l飕レ飕ъ飕╋拷锟斤拷锟斤拷锟届飕飕飕飕膘飕踌飕奠飕缝飕轨飕混飕届飕快瓈飙傡瓋飙勶拷锟斤拷锟斤拷锟届瓍飙嗢瓏飙婌瓔飙嶌瓗飙忟瓚飙掛瓝飙旍瓡飙栰瓧飙氺瓫飙滌瓰飙熿瓲飙§飙l飙飙飙飙帟銕栥帡鈩撱帢銖勩帲銕ゃ帴銕︺帣銕氥帥銕溿帩銕炪師銕犮帯銕€強銕嶃帋銕忋弿銕堛帀銖堛帶銕ㄣ幇銕便幉銕炽幋銕点幎銕枫幐銕广巰銕併巶銕冦巹銕恒幓銕笺幗銕俱幙銕愩帒銕掋帗銕斺劍銖�銖併帄銕嬨帉銖栥弲銕幃銕彌銕┿帾銕幀銖濄彁銖撱弮銖夈彍銖嗭拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");
+for(j = 0; j != D[167].length; ++j) if(D[167][j].charCodeAt(0) !== 0xFFFD) { e[D[167][j]] = 42752 + j; d[42752 + j] = D[167][j];}
+D[168] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届飙飙办飙察飙挫飙鹅飙红飙检飙眷飚�飚侅畟飚冹畡飚呾畣飚囲畧锟斤拷锟斤拷锟斤拷飚夓畩飚嬱畬飚嶌畮飚忟異飚戩畳飚撿當飚曥畺飚楈畼飚欖畾飚涭疂飚烄疅飚犾飚㈧锟斤拷锟斤拷锟斤拷飚れ飚飚飚飚飚飚办飚察飚挫飚鹅飚轨飚混飚届飚快瘈殳侅瘋殳冹瘎脝脨陋摩锟侥诧拷目艁脴艗潞脼纽艎锟姐墵銐°墷銐c墹銐ャ墻銐с墾銐┿壀銐壃銐壆銐壈銐便壊銐炽壌銐点壎銐枫壐銐广壓銐烩搻鈸戔搾鈸撯摂鈸曗摉鈸椻摌鈸欌摎鈸涒摐鈸濃摓鈸熲摖鈸♀摙鈸b摛鈸モ摝鈸р摠鈸┾憼鈶♀憿鈶b懁鈶モ懄鈶р懆鈶┾應鈶懍鈶懏陆鈪撯厰录戮鈪涒厹鈪濃厼锟�".split("");
+for(j = 0; j != D[168].length; ++j) if(D[168][j].charCodeAt(0) !== 0xFFFD) { e[D[168][j]] = 43008 + j; d[43008 + j] = D[168][j];}
+D[169] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届瘏殳嗢瘒殳堨瘔殳婌瘚殳岇瘝殳庫瘡殳愳瘧殳掛瘬殳曥瘱殳楈瘶殳欖瘹殳涭瘻殳濎癁殳燂拷锟斤拷锟斤拷锟届癄殳§殳l殳殳殳殳殳办殳察殳挫殳鹅殳胳殳红殳硷拷锟斤拷锟斤拷锟届殳眷彀�彀侅皞彀冹皠彀呾皢彀囲皥彀夓皧彀嬱皫彀忟皯彀掛皳彀曥皷彀楈皹彀欖皻彀涭盀彀熿盃彀l挨忙膽冒魔谋某母艀艂酶艙脽镁脓艐艍銏�銏併垈銏冦垊銏呫垎銏囥垐銏夈垔銏嬨垖銏嶃垘銏忋垚銏戙垝銏撱垟銏曘垨銏椼垬銏欍垰銏涒挏鈷濃挒鈷熲挔鈷♀挗鈷b挙鈷モ挦鈷р挩鈷┾挭鈷挰鈷挳鈷挵鈷扁挷鈷斥挻鈷碘懘鈶碘懚鈶封懜鈶光懞鈶烩懠鈶解懢鈶库拃鈷佲拏鹿虏鲁鈦粹伩鈧佲倐鈧冣倓锟�".split("");
+for(j = 0; j != D[169].length; ++j) if(D[169][j].charCodeAt(0) !== 0xFFFD) { e[D[169][j]] = 43264 + j; d[43264 + j] = D[169][j];}
+D[170] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届哎彀蔼彀碍彀氨彀察俺彀挫暗彀鹅胺彀红翱毂�毂侅眰毂冹眴毂囲眽毂婌眿毂嶌睅锟斤拷锟斤拷锟斤拷毂忟睈毂戩睊毂撿睎毂氺睕毂滌睗毂烄睙毂§雹毂l饱毂ъ暴毂鲍毂杯毂悲毂膘辈锟斤拷锟斤拷锟斤拷毂踌贝毂鹅狈毂胳惫毂红被毂检苯毂眷笨觳�觳侅矀觳冹矂觳呾矄觳囲矆觳夓矈觳嬱矊觳嶌矌觳忟矏觳戩矑觳撱亖銇傘亙銇勩亝銇嗐亣銇堛亯銇娿亱銇屻亶銇庛亸銇愩亼銇掋亾銇斻仌銇栥仐銇樸仚銇氥仜銇溿仢銇炪仧銇犮仭銇€仯銇ゃ仴銇︺仹銇ㄣ仼銇伀銇伃銇伅銇般伇銇层伋銇淬伒銇躲伔銇搞伖銇恒伝銇笺伣銇俱伩銈�銈併倐銈冦倓銈呫倖銈囥倛銈夈倞銈嬨倢銈嶃値銈忋倫銈戙倰銈擄拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");
+for(j = 0; j != D[170].length; ++j) if(D[170][j].charCodeAt(0) !== 0xFFFD) { e[D[170][j]] = 43520 + j; d[43520 + j] = D[170][j];}
+D[171] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届矓觳曥矕觳楈矚觳涭矟觳烄矡觳§并觳l菠觳レ拨觳ъ勃觳帛觳办脖觳察渤觳鹅卜觳癸拷锟斤拷锟斤拷锟届埠觳混步觳眷部斐�斐侅硞斐冹硢斐堨硦斐嬱硨斐嶌硯斐忟硲斐掛硴斐曥硸斐楈硺斐欖硽锟斤拷锟斤拷锟斤拷斐涭硿斐濎碁斐熿碃斐§尝斐l偿斐厂斐畅斐倡斐钞斐潮斐察吵斐挫车斐鹅撤斐胳彻斐红郴斐检辰銈°偄銈c偆銈ャ偊銈с偍銈┿偑銈偓銈偖銈偘銈便偛銈炽偞銈点偠銈枫偢銈广偤銈汇偧銈姐偩銈裤儉銉併儌銉冦儎銉呫儐銉囥儓銉夈儕銉嬨儗銉嶃儙銉忋儛銉戙儝銉撱償銉曘儢銉椼儤銉欍儦銉涖儨銉濄優銉熴儬銉°儮銉c儰銉ャ儲銉с儴銉┿儶銉儸銉儺銉儼銉便儾銉炽兇銉点兌锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");
+for(j = 0; j != D[171].length; ++j) if(D[171][j].charCodeAt(0) !== 0xFFFD) { e[D[171][j]] = 43776 + j; d[43776 + j] = D[171][j];}
+D[172] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届尘斐快磤齑傡磧齑勳磪齑嗢磭齑婌磱齑嶌磶齑忟磻齑掛磽齑旍磿齑栰礂齑氺礈齑烄礋齑狅拷锟斤拷锟斤拷锟届础齑㈧矗齑レ处齑ъ穿齑传齑串齑窗齑膘床齑踌创齑奠炊齑缝锤齑红椿齑检唇齑撅拷锟斤拷锟斤拷锟届纯斓�斓侅祩斓冹祫斓呾祮斓囲祱斓夓祳斓嬱祵斓嶌祹斓忟祼斓戩祾斓撿禂斓曥禆斓楈禈斓欖禋斓涭禎斓烄禑袗袘袙袚袛袝衼袞袟袠袡袣袥袦袧袨袩袪小孝校肖啸笑效楔些歇蝎鞋协挟携锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟叫靶毙残承葱笛懶缎沸感剐盒恍夹叫拘垦�褋褌褍褎褏褑褔褕褖褗褘褜褝褞褟锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷".split("");
+for(j = 0; j != D[172].length; ++j) if(D[172][j].charCodeAt(0) !== 0xFFFD) { e[D[172][j]] = 44032 + j; d[44032 + j] = D[172][j];}
+D[173] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届怠斓㈧担斓レ郸斓ъ胆斓╈氮斓诞斓办挡斓踌荡斓奠刀斓缝倒斓红祷斓检到斓眷悼於�锟斤拷锟斤拷锟斤拷於侅秱於冹秳於呾秵於囲秹於婌秼於岇秿於庫稄於愳稇於掛稉於栰稐於欖稓於涭稘於烄稛锟斤拷锟斤拷锟斤拷於犾丁於㈧叮於定於东於董於动於膘恫於踌洞於奠抖於缝陡於轨逗於混都於届毒於快穩旆侅穫旆冹穮锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");
+for(j = 0; j != D[173].length; ++j) if(D[173][j].charCodeAt(0) !== 0xFFFD) { e[D[173][j]] = 44288 + j; d[44288 + j] = D[173][j];}
+D[174] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届穯旆囲穲旆夓穵旆嬱穽旆庫窂旆戩窉旆撿窋旆曥窎旆楈窐旆欖窔旆涭窚旆濎窞旆熿窢旆★拷锟斤拷锟斤拷锟届发旆l筏旆レ乏旆ъ珐旆帆旆樊旆繁旆察烦旆挫返旆鹅贩旆红芳旆眷房旄�旄侅競锟斤拷锟斤拷锟斤拷旄冹竻旄嗢竾旄夓笂旄嬱笉旄庫笍旄愳笐旄掛笓旄曥笘旄楈笜旄氺笡旄滌笣旄烄笩旄㈧福旄レ甫旄ъ俯旄斧锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");
+for(j = 0; j != D[174].length; ++j) if(D[174][j].charCodeAt(0) !== 0xFFFD) { e[D[174][j]] = 44544 + j; d[44544 + j] = D[174][j];}
+D[175] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届脯旄府旄覆旄挫付旄缝父旄轨负旄混讣旄届妇旄快箑旃侅箓旃冹箘旃呾箚旃囲箞旃夛拷锟斤拷锟斤拷锟届箠旃嬱箤旃嶌箮旃忟箰旃戩箳旃撿箶旃曥箹旃楈箽旃涭節旃烄耿旃l工旃レ功旃ъ躬旃拷锟斤拷锟斤拷锟届巩旃拱旃膘共旃踌苟旃缝构旃红够旃届咕旃快簚旌侅簜旌冹簡旌堨簥旌嬱簩旌嶌簬旌忟簰旌撿簳旌栰簵旌欙拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷".split("");
+for(j = 0; j != D[175].length; ++j) if(D[175][j].charCodeAt(0) !== 0xFFFD) { e[D[175][j]] = 44800 + j; d[44800 + j] = D[175][j];}
+D[176] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届簹旌涭簻旌濎簽旌熿孩旌骇旌憨旌韩旌函旌办罕旌察撼旌挫旱旌鹅悍旌胳汗旌猴拷锟斤拷锟斤拷锟届夯旌检航旌眷嚎旎�旎傡粌旎勳粎旎嗢粐旎堨粔旎婌粙旎岇粛旎庫粡旎愳粦旎掛粨旎旍粫锟斤拷锟斤拷锟斤拷旎栰粭旎橃粰旎氺粵旎滌粷旎烄粺旎犾弧旎㈧唬旎户旎╈华旎划旎话旎膘徊旎踌欢旎红换旎检唤旎眷豢臧�臧侁皠臧囮皥臧夑皧臧愱皯臧掙皳臧旉皶臧栮皸臧欔皻臧涥皽臧濌盃臧り艾臧隘臧瓣氨臧戈肮臧缄眬瓯嬯睄瓯旉睒瓯滉卑瓯标贝瓯逢备瓯宏瞼瓴侁矁瓴勱矃瓴嗞矇瓴婈矉瓴岅矏瓴旉矞瓴濌矡瓴犼病瓴博瓴铂瓴舶瓴戈补瓴魂布瓴疥硜瓿勱硤瓿岅硶瓿楆碃瓿£长瓿ш敞瓿超瓿嘲瓿标吵瓿店扯瓿缄辰甏�甏勱磫锟�".split("");
+for(j = 0; j != D[176].length; ++j) if(D[176][j].charCodeAt(0) !== 0xFFFD) { e[D[176][j]] = 45056 + j; d[45056 + j] = D[176][j];}
+D[177] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届紓旒冹紖旒嗢紘旒夓紛旒嬱紝旒嶌紟旒忟紥旒旍紪旒楈紭旒欖細旒涭紳旒烄紵旒§饥旒o拷锟斤拷锟斤拷锟届讥旒姬旒缉旒极旒疾旒踌即旒奠级旒缝脊旒红蓟旒检冀旒眷伎旖�旖侅絺旖冹絼锟斤拷锟斤拷锟斤拷旖呾絾旖囲綀旖夓綂旖嬱綄旖嶌綆旖忟綈旖戩綊旖撿綎旖楈綑旖氺經旖濎綖旖熿綘旖§舰旖l溅旖姜旖浆甏岅磵甏応磻甏橁礈甏犼穿甏喘甏搓吹甏戈醇甑勱祬甑囮祲甑愱禂甑橁怠甑j惮甑蛋甑酬荡甑店刀甑魂导甑疥悼甓侁秱甓堦秹甓岅稅甓滉稘甓り斗攴�攴侁穭攴堦窅攴戧窊攴滉窢攴り犯攴龟芳攴筷竴旮侁笀旮夑笅旮嶊笖旮瓣副旮搓阜旮戈负旯�旯侁箖旯呹箚旯婈箤旯嶊箮旯愱箶旯栮箿旯濌篃旯犼埂旯リ龚旯╆宫旯瓣垢锟�".split("");
+for(j = 0; j != D[177].length; ++j) if(D[177][j].charCodeAt(0) !== 0xFFFD) { e[D[177][j]] = 45312 + j; d[45312 + j] = D[177][j];}
+D[178] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届江旖蒋旖察匠旖奠蕉旖缝焦旖红交旖检浇旖眷娇炀侅緜炀冹緞炀嗢緡炀堨緣炀婌緥炀嶏拷锟斤拷锟斤拷锟届編炀忟緪炀戩緬炀撿緮炀曥緰炀楈緲炀欖練炀涭緶炀濎緸炀熿緺炀㈧荆炀れ茎炀晶炀╋拷锟斤拷锟斤拷锟届惊炀粳炀井炀颈炀察境炀挫镜炀鹅痉炀胳竟炀红净炀检窘炀眷究炜�炜侅總炜冹繀炜嗢繃炜堨繅炜婌繈旯龟够旯缄菇旰勱簠旰岅杭旰疥壕昊�昊勱粚昊嶊粡昊愱粦昊橁粰昊滉花昊画昊搓桓昊缄紘昙堦紞昙愱棘昙及昙碴即昙缄冀昙筷絹杲傟絻杲堦綁杲愱綔杲濌饯杲リ焦昃�昃勱緢昃愱緫昃曣緶昃戈竟昃缄縺昕囮繄昕夑繈昕嶊繋昕旉繙昕咯昕瓣勘昕搓扛雬�雬侂�勲�岆�愲�旊�滊�濍�亜雭呺亪雭婋亴雭庪亾雭旊仌雭楇仚锟�".split("");
+for(j = 0; j != D[178].length; ++j) if(D[178][j].charCodeAt(0) !== 0xFFFD) { e[D[178][j]] = 45568 + j; d[45568 + j] = D[178][j];}
+D[179] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届繉炜嶌繋炜忟繍炜戩繏炜撿繑炜曥繓炜楈繕炜欖繗炜涭繙炜濎繛炜熿竣炜l骏炜咖炜╋拷锟斤拷锟斤拷锟届开炜楷炜慨炜坎炜挫慷炜缝扛炜轨亢炜混拷炜眷靠韤來�傢�冺�呿�嗧�図�堩�夗�婏拷锟斤拷锟斤拷锟巾�嬳�岉�嶍�庬�忢�愴�掜�擁�旐�曧�栱�楉�欗�氻�涰�滍�濏�烅�燀�犿�№�㈨�m�ろ�ロ��ы��╉���仢雭茧伣雮�雮勲倢雮嶋倧雮戨倶雮欕倸雮滊偀雮犽偂雮㈦偍雮╇偒雮偔雮偗雮彪偝雮措偟雮鸽偧雰勲儏雰囯儓雰夒儛雰戨償雰橂儬雰ル剤雱夒剫雱岆剱雱掚創雱橂剻雱涬劀雱濍劊雱る劌雱劕雱措劦雱冯劯雱闺厐雲侂厔雲堧厫雲戨厰雲曤厴雲滊厾雲鸽吂雲茧唨雴傠唸雴夒唻雴嶋啋雴撾啍雴橂啘雴噷雵愲嚁雵滊嚌锟�".split("");
+for(j = 0; j != D[179].length; ++j) if(D[179][j].charCodeAt(0) !== 0xFFFD) { e[D[179][j]] = 45824 + j; d[45824 + j] = D[179][j];}
+D[180] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾���绊�表�岔�稠�俄�讽�鬼�喉�豁�巾�卷�宽亐韥來亗韥冺亞韥堩亰韥嬳亴韥嶍亷韥忥拷锟斤拷锟斤拷锟巾亼韥掜亾韥曧仏韥楉仚韥氻仜韥滍仢韥烅仧韥№仮韥m仱韥ロ仸韥ы仺韥╉仾韥伄韥拷锟斤拷锟斤拷锟巾伇韥岔伋韥淀伓韥讽伕韥鬼伜韥豁伨韥宽個韨傢們韨勴倕韨嗧倗韨堩倝韨婍倠韨岉倣韨庬倧韨愴倯韨掜倱韨旊嚐雵嚛雵嚢雵闺嚮雵诫垊雸呺垐雸嬰垖雸旊垥雸楇垯雸犽埓雸茧墭雺滊墵雺墿雺措壍雺茧妱電呺妷電愲姂電旊姌電欕姎電犽姟電k姤電﹄姫電姲電措媹雼夒媽雼愲嫆雼橂嫏雼涬嫕雼㈦嫟雼ル嫤雼嫬雼嫮雼嫰雼畴嫶雼惦嫹雼鸽嫻雼弘嫽雼侩寑雽侂寗雽堧寪雽戨寭雽旊寱雽滊崝雿曤崠雿橂崨雿滊崬雿熾崵雿ワ拷".split("");
+for(j = 0; j != D[180].length; ++j) if(D[180][j].charCodeAt(0) !== 0xFFFD) { e[D[180][j]] = 46080 + j; d[46080 + j] = D[180][j];}
+D[181] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾倳韨栱倵韨橅倷韨氻倹韨滍倽韨烅偀韨犿偂韨㈨偅韨偋韨╉偑韨偔韨偗韨绊偙韨诧拷锟斤拷锟斤拷锟巾偝韨俄偢韨喉偦韨柬偨韨卷偪韮傢儍韮呿儐韮図儕韮嬳儗韮嶍儙韮忢儝韮栱儣韮橅儥韮氾拷锟斤拷锟斤拷锟巾儧韮烅儫韮№儮韮m儱韮儳韮儵韮儷韮儾韮稠兇韮淀兌韮讽児韮喉兓韮柬兘韮卷兛韯�韯來剛韯冺剟雿щ崺雿嵁雿半嵄雿措嵏霂�霂侂巸霂勲巺霂岆帎霂旊帬霂‰帹霂弰霃呺張霃嬰弻霃庪彁霃旊彆霃楇彊霃涬彎霃犽彜霃徏霅愲悩霅滊悹霅惄霅惔霊愲憫霊旊憳霊犽憽霊k懃霊拃霋堧挐霋る挩霋挼霋冯捁霌�霌勲搱霌愲摃霌滊摑霌犽摚霌る摝霌摥霌摫霌鸽敂霐曤敇霐涬敎霐る敟霐щ敤霐╇敧霐半敱霐措敻锟�".split("");
+for(j = 0; j != D[181].length; ++j) if(D[181][j].charCodeAt(0) !== 0xFFFD) { e[D[181][j]] = 46336 + j; d[46336 + j] = D[181][j];}
+D[182] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾剠韯嗧剣韯堩剦韯婍剫韯岉剮韯忢剱韯戫剴韯擁剶韯曧剸韯楉剺韯欗剼韯涰劀韯濏劄韯燂拷锟斤拷锟斤拷锟巾劆韯№劉韯m劋韯ロ劍韯ы劏韯╉劒韯劕韯劗韯劜韯稠劦韯俄劮韯鬼劵韯柬劷韯撅拷锟斤拷锟斤拷锟巾効韰傢厗韰図厛韰夗厞韰嬳厧韰忢厬韰掜厯韰曧厲韰楉厴韰欗厷韰涰厼韰犿參韰m叅韰ロ叇韰ы叐韰叓韰晙霑侂晝霑勲晠霑嬰晫霑嶋晲霑旊暅霑濍暉霑犽暋霒犽枴霒る枿霒柅霒半柋霒畴柎霒惦柣霒茧柦霔�霔勲棇霔嶋棌霔愲棏霔橂棳霕愲槕霕旊槝霕ル槵霕措檲霗る櫒霘滊殱霘犽殼霘毈霘彪洈霙半洿霙鸽渶霚侂渽霚湬霚湳霚半湼霚闺溁霛勲潏霛岆潝霛曤潬霛る潹霛半澅霛畴澋霛茧澖霝�霝勲瀸霝嶋瀼霝愲瀾霝掚灃霝楋拷".split("");
+for(j = 0; j != D[182].length; ++j) if(D[182][j].charCodeAt(0) !== 0xFFFD) { e[D[182][j]] = 46592 + j; d[46592 + j] = D[182][j];}
+D[183] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾叜韰叞韰表叢韰稠叴韰淀叾韰讽吀韰鬼吅韰豁吔韰卷吙韱�韱來唫韱冺唴韱嗧唶韱夗唺锟斤拷锟斤拷锟斤拷韱嬳唽韱嶍啂韱忢啇韱戫啋韱擁啍韱曧問韱楉啒韱欗啔韱涰啘韱濏啚韱燀啟韱m啣韱啩锟斤拷锟斤拷锟斤拷韱╉啰韱啲韱啴韱啿韱错喍韱讽喐韱鬼喕韱巾喚韱宽噥韲傢噧韲勴噮韲嗧噰韲堩噳韲婍噵韲岉噸韲庬噺霝橂灆霝滊灎霝灘霝灛霝灤霝惦灨霟囯焿霟煭霟半煷霟茧熃霟侩爛霠侂爣霠堧爥霠岆爯霠橂牂霠涬牆霠る牓霠牞霠措牭霠冯牳霠闺搿勲搿撾搿濍搿る‖搿’搿彪「搿茧擘擘措⒏耄�耄侂耄呺耄愲耄濍耄‰(耄╇,耄半8耄闺;耄诫毪橂毪茧そ毳�毳勲毳忞毳橂毳滊毳ォ锟�".split("");
+for(j = 0; j != D[183].length; ++j) if(D[183][j].charCodeAt(0) !== 0xFFFD) { e[D[183][j]] = 46848 + j; d[46848 + j] = D[183][j];}
+D[184] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾噽韲戫噿韲擁嚁韲曧嚃韲楉嚈韲氻嚊韲滍嚌韲烅嚐韲犿嚒韲㈨嚕韲ろ嚗韲嚙韲嚛韲拷锟斤拷锟斤拷锟巾嚝韲嚟韲嚡韲绊嚤韲岔嚦韲淀嚩韲讽嚬韲喉嚮韲柬嚱韲卷嚳韴�韴來垈韴冺垊韴呿垎锟斤拷锟斤拷锟斤拷韴堩垔韴嬳垖韴嶍垘韴忢垜韴掜垞韴旐垥韴栱垪韴橅垯韴氻垱韴滍垵韴烅垷韴犿垺韴㈨垼韴ろ垾韴埀韴埄毳キ毳措サ毳鸽ゼ毽勲毽囯毽婋毽庪Μ毽Π毽措毽诫毵侂毵夒毵庪毵愲毵掚毵欕毵濍毵‰В毵るД毵К毵措У毵冯Ц毵闺Ш毹�毹侂▓毹曤ǜ毹闺氅�氅傠﹫氅夒氅嶋氅撾氅曤氅滊─氅ル┃氅┅氅半┍氅措└氇冸獎氇呺獓氇岆氇╇氇氇搽氇闺氇诫珓氆堧珮氆欕锟�".split("");
+for(j = 0; j != D[184].length; ++j) if(D[184][j].charCodeAt(0) !== 0xFFFD) { e[D[184][j]] = 47104 + j; d[47104 + j] = D[184][j];}
+D[185] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾埅韴埉韴埍韴岔埑韴淀埗韴讽埜韴鬼埡韴豁埦韷�韷傢墐韷勴墔韷嗧墖韷夗墛韷嬳墝锟斤拷锟斤拷锟斤拷韷嶍墡韷忢墣韷戫墥韷擁墧韷曧墫韷楉墭韷欗墯韷涰墲韷烅墴韷犿墶韷㈨墸韷ロ墻韷ы墾锟斤拷锟斤拷锟斤拷韷╉壀韷壃韷壆韷壈韷表壊韷稠壌韷淀壎韷讽壐韷鬼壓韷豁壖韷巾壘韷宽妭韸冺妳韸嗧妵韸夗妸韸嬳妼氍�氍勲瑣氍忞瑧氍橂瑴氍犽氍氍惦氍鸽氍茧氍倦瓌氕呺瓏氕夒瓖氕忞瓙氕旊瓨氕‰氕畧氘岆異氘る氘氘冯瘈氙勲瘓氙愲瘬氙鸽氙茧氚�氚傠皥氚夒皨氚岆皪氚忞皯氚旊皶氚栯皸氚橂皼氚滊皾氚炿盁氚る哎氚щ癌氚鞍氚彪按氚鸽眬氡侂眱氡勲眳氡夒睂氡嶋睈氡濍矂氩呺矆氩嬰矊氩庪矓氩曤矖锟�".split("");
+for(j = 0; j != D[185].length; ++j) if(D[185][j].charCodeAt(0) !== 0xFFFD) { e[D[185][j]] = 47360 + j; d[47360 + j] = D[185][j];}
+D[186] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾妽韸庬姀韸掜姄韸旐姈韸楉姌韸欗姎韸涰姖韸烅姛韸№姠韸m姤韸姧韸姪韸姭韸拷锟斤拷锟斤拷锟巾姰韸姲韸岔姵韸错姷韸俄姺韸喉娀韸巾娋韹來媰韹勴媴韹嗧媷韹婍媽韹嶍嫀韹忢嫄韹戯拷锟斤拷锟斤拷锟巾嫆韹擁嫊韹栱嫍韹欗嫐韹涰嫕韹烅嫙韹犿嫛韹㈨嫞韹嫥韹嫨韹嫬韹嫮韹嫰韹岔嫵韹淀嫸韹讽嫻韹弘矙氩氹矤氩‰菠氩щ波氩半脖氩畴泊氩惦布氩诫硛氤勲硩氤忞硱氤戨硶氤橂硿氤措车氤峨掣氤茧磩氪呺磭氪夒磹氪旊搐氪祤氲堧祲氲岆祼氲橂禉氲る胆攵�攵侂秳攵囯秷攵夒秺攵愲稇攵撾稌攵欕稓攵滊钉攵半陡敕旊窌敕橂窚敕╇钒敕措犯敫�敫冸竻敫岆笉敫愲笖敫滊笣敫熾箘牍呺箞牍岆箮牍旊箷牍楇箼牍氹箾牍犽埂牍わ拷".split("");
+for(j = 0; j != D[186].length; ++j) if(D[186][j].charCodeAt(0) !== 0xFFFD) { e[D[186][j]] = 47616 + j; d[47616 + j] = D[186][j];}
+D[187] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾嫽韹柬嫿韹卷嬁韺傢寗韺嗧寚韺堩寜韺婍寢韺忢寫韺掜寭韺曧寳韺橅寵韺氻寷韺烅將韺o拷锟斤拷锟斤拷锟巾尋韺導韺尗韺尞韺尡韺岔尦韺错尩韺俄尫韺喉尵韺宽崁韻來崅韻冺崋韻図崍韻夛拷锟斤拷锟斤拷锟巾崐韻嬳崒韻嶍崕韻忢崘韻戫崚韻擁崝韻曧崠韻楉崢韻欗崥韻涰崪韻濏崬韻燀崰韻№崲韻m崵韻ロ崷韻ы崹韻╇龚牍拱牍彪钩牍措沟牍浑辜牍诫簚牒勲簩牒嶋簭牒愲簯牒橂簷牒粣牖戨粩牖楇粯牖犽唬牖る互牖紒爰堧級爰橂紮爰涬紲爰濍絸虢侂絼虢堧綈虢戨綍刖旊景肟呺繉肟嶋繍肟旊繙肟熾俊靲检亼靵橃仠靵犾仺靵╈倫靷戩倲靷橃偁靷§偅靷レ偓靷偗靷办偝靷挫偟靷鹅偧靷届偪靸�靸侅儏靸堨儔靸岇儛靸橃儥靸涭儨靸濎儰锟�".split("");
+for(j = 0; j != D[187].length; ++j) if(D[187][j].charCodeAt(0) !== 0xFFFD) { e[D[187][j]] = 47872 + j; d[47872 + j] = D[187][j];}
+D[188] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾崻韻崿韻嵁韻嵃韻表嵅韻稠嵈韻淀嵍韻讽嵏韻鬼嵑韻豁嵕韻宽巵韼傢巸韼呿巻韼囷拷锟斤拷锟斤拷锟巾巿韼夗帄韼嬳帋韼掜帗韼旐帟韼栱帡韼氻帥韼濏帪韼燀帯韼㈨帲韼ろ帴韼帶韼幀韼拷锟斤拷锟斤拷锟巾幆韼绊幈韼岔幊韼淀幎韼讽幑韼喉幓韼巾幘韼宽弨韽來弬韽冺弳韽図強韽嬳弻韽嶍弾韽忢彂韽掜彄韽旐彆韽栰儱靸儸靸挫兊靸缝児靹�靹勳剤靹愳剷靹滌劃靹烄劅靹犾劊靹れ劍靹ъ劕靹劘靹办劚靹鹅劯靹轨劶靺�靺堨厜靺嬱厡靺嶌厰靺曥厴靺滌叅靺レ収靺叐靺办叴靺胳唴靻岇啀靻庫啇靻旍問靻滌啙靻熿啞靻レ啫靻╈啲靻办喗靽勳噲靽岇嚁靽楈嚇靽犾嚖靽嚢靽膘嚦靽检嚱靾�靾勳垖靾嶌垙靾戩垬靾欖垳靾熿垹靾埄靾埈锟�".split("");
+for(j = 0; j != D[188].length; ++j) if(D[188][j].charCodeAt(0) !== 0xFFFD) { e[D[188][j]] = 48128 + j; d[48128 + j] = D[188][j];}
+D[189] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾彈韽欗彋韽涰彍韽濏彏韽燀彔韽㈨彜韽ロ彟韽ы彣韽╉彧韽彯韽彵韽岔彸韽淀彾韽凤拷锟斤拷锟斤拷锟巾徃韽鬼徍韽豁従韾�韾傢悆韾勴悈韾嗧悋韾夗悐韾嬳悓韾嶍悗韾忢悙韾戫悞韾擁悢韾曧悥锟斤拷锟斤拷锟斤拷韾楉悩韾欗悮韾涰悳韾烅悷韾犿悺韾㈨悾韾ろ惀韾惂韾惄韾惈韾惌韾惎韾绊惐韾岔惓韾错惖韾俄惙靾埍靾察埓靿堨墣靿戩墧靿橃墵靿レ壃靿壈靿挫壖靿届壙鞀侅妶鞀夓姁鞀橃姏鞀濎姢鞀レ姩鞀姯鞀挫姷鞀缝姽鞁滌嫕鞁犾嫞鞁れ嫬鞁嫮鞁嫳鞁鹅嫺鞁轨嫽鞁检寑鞂堨寜鞂岇實鞂撿寯鞂曥寴鞂滌尋鞂レ尐鞂╈崊鞃崺鞃嵃鞃察嵏鞃轨嵓鞃届巹鞄堨帉鞆�鞆橃彊鞆滌彑鞆犾彚鞆彥鞆彺鞆奠徃鞇堨悙鞇れ惉鞇帮拷".split("");
+for(j = 0; j != D[189].length; ++j) if(D[189][j].charCodeAt(0) !== 0xFFFD) { e[D[189][j]] = 48384 + j; d[48384 + j] = D[189][j];}
+D[190] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾惛韾鬼惡韾豁惣韾巾惥韾宽憗響傢憙響呿憜響図憟響夗憡響嬳憣響嶍憥響忢憪響戫憭響擄拷锟斤拷锟斤拷锟巾憯響曧憱響楉憳響欗憵響涰憹響烅憻響№憿響m懃響懅響懇響懌響懏響绊懕響诧拷锟斤拷锟斤拷锟巾懗響错懙響俄懛響喉懟響巾懢頀來拑頀勴拝頀嗧拠頀婍拰頀庬拸頀愴拺頀掜挀頀曧挅頀楉挊頀欗挌頀涰挏頀濎惔鞇检惤鞈堨懁鞈レ懆鞈懘鞈奠懝鞉�鞉旍挏鞉胳捈鞊╈摪鞊膘摯鞊胳摵鞊快攢鞌侅攲鞌愳敂鞌滌敤鞌╈敩鞌办敻鞌轨敾鞌届晞鞎呾晥鞎夓晩鞎岇晬鞎庫晸鞎旍晻鞎楈晿鞎欖暆鞎烄暊鞎§暏鞎暟鞎膘暢鞎挫暤鞎检暯鞏�鞏勳枃鞏岇枍鞏忟枒鞏曥枟鞏橃枩鞏犾柀鞏挫柕鞏胳柟鞏混柤鞏届柧鞐勳梾鞐嗢棁鞐堨棄鞐婌棇鞐庯拷".split("");
+for(j = 0; j != D[190].length; ++j) if(D[190][j].charCodeAt(0) !== 0xFFFD) { e[D[190][j]] = 48640 + j; d[48640 + j] = D[190][j];}
+D[191] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾挒頀燀挔頀№挗頀m挙頀ロ挦頀ы挩頀挮頀挱頀挴頀绊挶頀岔挸頀错挼頀俄挿頀革拷锟斤拷锟斤拷锟巾捁頀喉捇頀柬捊頀卷捒頁�頁來搨頁冺搫頁呿搯頁図搱頁夗搳頁嬳搷頁庬搹頁戫搾頁擁摃锟斤拷锟斤拷锟斤拷頁栱摋頁橅摍頁氻摏頁濏摓頁犿摗頁㈨摚頁ろ摜頁摟頁╉摢頁摥頁摨頁表摬頁稠摯頁淀摱頁讽摴頁喉摷鞐愳棏鞐旍棙鞐犾棥鞐l棩鞐棴鞐棸鞐挫椂鞐缝椉鞐届椌鞐快榾鞓侅槄鞓嗢槆鞓堨槍鞓愳槝鞓欖槢鞓滌槫鞓レ槰鞓槶鞓槹鞓踌槾鞓奠樂鞓轨樆鞕�鞕侅檮鞕堨檺鞕戩檽鞕旍檿鞕滌櫇鞕犾櫖鞕櫛鞕胳櫣鞕检殌鞖堨殙鞖嬱殟鞖旍殨鞖橃殰鞖れ殽鞖ъ毄鞖办毐鞖挫毟鞖轨毢鞗�鞗侅泝鞗呾泴鞗嶌洂鞗旍洔鞗濎洜鞗§洦锟�".split("");
+for(j = 0; j != D[191].length; ++j) if(D[191][j].charCodeAt(0) !== 0xFFFD) { e[D[191][j]] = 48896 + j; d[48896 + j] = D[191][j];}
+D[192] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾摼頁宽攢頂來攤頂冺攨頂嗧攪頂夗攰頂嬳攳頂庬攺頂愴攽頂掜敁頂栱敇頂欗敋頂涰敎頂濓拷锟斤拷锟斤拷锟巾敒頂燀敔頂№敘頂m敜頂ロ敠頂ы敤頂╉敧頂敩頂敭頂敯頂表敳頂稠敶頂淀敹頂凤拷锟斤拷锟斤拷锟巾敻頂鬼敽頂豁斁頂宽晛頃傢晝頃呿晢頃図晥頃夗晩頃嬳晭頃愴晵頃擁晹頃曧晼頃楉暁頃涰暆頃烅暉頃№暍頃l洨鞗洶鞗胳浌鞗届渼鞙呾湀鞙岇湐鞙曥湕鞙欖湢鞙§湦鞙湴鞙膘湷鞙奠湻鞙检溄鞚�鞚勳潑鞚岇潔鞚忟潙鞚掛潛鞚旍潟鞚栰潡鞚橃潨鞚犾潹鞚澊鞚奠澑鞚检澖鞚眷瀮鞛勳瀰鞛囲瀳鞛夓瀶鞛庫瀽鞛戩灁鞛栰灄鞛橃灇鞛犾灐鞛l灓鞛レ灕鞛灜鞛办灤鞛检灲鞛快焵鞜侅焾鞜夓煂鞜庫煇鞜橃煗鞜れ煥鞜爛鞝侅爠鞝堨爦锟�".split("");
+for(j = 0; j != D[192].length; ++j) if(D[192][j].charCodeAt(0) !== 0xFFFD) { e[D[192][j]] = 49152 + j; d[49152 + j] = D[192][j];}
+D[193] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾暏頃暓頃暚頃暞頃绊暠頃岔暢頃俄暦頃鬼暫頃豁暯頃卷暱頄�頄來杺頄冺枂頄婍枊锟斤拷锟斤拷锟斤拷頄岉枍頄庬枏頄戫枓頄擁枖頄曧枛頄楉枠頄欗枤頄涰枩頄濏枮頄燀枲頄№枹頄m枻頄枾锟斤拷锟斤拷锟斤拷頄柀頄柅頄柇頄柉頄绊柋頄岔柍頄错柕頄俄柗頄疙柟頄喉柣頄柬柦頄卷柨項�項來梻項冺梽項呿梿項囲爯鞝戩爴鞝曥爾鞝滌牆鞝犾牑鞝牠鞝牨鞝胳牸臁�臁堨臁岇臁旍“臁膘〈臁胳『膦�膦侅膦呾膦囲膦岇膦旍膦熿ⅰ膦⒓膦届欤堨欤旍欤楈欤犾!欤れ5欤检=欷�欷勳欷嗢欷嶌欷戩欷ご欹愳欹旍欹犾ァ欹lガ欹办ゴ欹检歃夓歃愳歃欖歃濎歆侅歆囲歆婌歆戩锟�".split("");
+for(j = 0; j != D[193].length; ++j) if(D[193][j].charCodeAt(0) !== 0xFFFD) { e[D[193][j]] = 49408 + j; d[49408 + j] = D[193][j];}
+D[194] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾棅項嬳棈項庬棌項戫棑項旐棔項栱棗項氻棞項烅棢項犿棥項㈨棧項棫項╉棯項棴項拷锟斤拷锟斤拷锟巾棷項绊棻項岔棾項俄椄項喉椈項柬椊項卷椏順傢槂順呿槅順図槈順婍構順岉槏順庬槒順掞拷锟斤拷锟斤拷锟巾槚順楉槝順欗槡順涰槤順烅槦順№槩順m槬順槯順槱順槴順槷順槹順表槻順稠槾順淀樁順讽樅順混歆栰歆氺歆濎歆㈧Г歆ъК歆Н歆办П歆胳Ч歆检█歙堨▔歙嬱▽歙嶌〝歙橃ī飑岇飑愳飑滌飑熿飑§┄飑届獎飒橃飒届珋飓勳珜飓嶌珡飓戩珦飓橃珯飓犾飓挫瑘飕愳瑪飕橃瑺飕§瓉飙堨瓑飙岇瓙飙橃瓩飙濎飙胳飚滌殳旍殳ъ彀岇皪彀愳皵彀滌皾彀§阿彀ъ皑彀╈艾彀鞍彀胳肮彀伙拷".split("");
+for(j = 0; j != D[194].length; ++j) if(D[194][j].charCodeAt(0) !== 0xFFFD) { e[D[194][j]] = 49664 + j; d[49664 + j] = D[194][j];}
+D[195] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾樈順卷樋頇來檪頇冺檮頇嗧檱頇婍檶頇庬檹頇愴檼頇擁櫀頇楉櫃頇氻櫅頇濏櫈頇燀櫊頇★拷锟斤拷锟斤拷锟巾櫌頇m櫎頇ロ櫐頇櫔頇櫖頇櫘頇櫜頇稠櫟頇俄櫡頇疙櫣頇喉櫥頇柬櫧頇卷櫩須�锟斤拷锟斤拷锟斤拷須來殏須勴殕須図殘須夗殜須嬳殠須忢殤須掜殦須曧殩須楉殬須欗殮須涰殰須烅殸須㈨殻須ろ殽須毀須╉毆彀检敖彀眷眲毂呾眻毂岇睌毂曥睏毂橃睓毂犾堡毂报毂办钡觳橃矙觳滌矤觳博觳铂觳泊觳奠哺觳检硠斐呾硣斐夓硱斐旍长斐嘲齑侅磮齑夓磳齑愳礃齑欖礇齑濎搐齑船齑轨禍斓犾丹斓淡斓当斓胳秷於旍稌於橃稖於れ顶於ъ订於办穭旆岇窅旆番旆办犯旆轨坊旆届竸旄堨笇旄旍笝旄犾浮旄れ辅旄办副旄踌傅锟�".split("");
+for(j = 0; j != D[195].length; ++j) if(D[195][j].charCodeAt(0) !== 0xFFFD) { e[D[195][j]] = 49920 + j; d[49920 + j] = D[195][j];}
+D[196] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾毇須毊須毐須岔毘須错毜須俄毞須疙毢須柬毥須卷毧頉�頉來泜頉冺泦頉図泬頉婍泲锟斤拷锟斤拷锟斤拷頉嶍泿頉忢洂頉掜洆頉曧洊頉橅洑頉涰洔頉濏洖頉燀洝頉㈨洠頉ロ洣頉ы洨頉洬頉洯锟斤拷锟斤拷锟斤拷頉洴頉表洸頉稠洿頉俄浄頉疙浌頉喉浕頉卷浛頊來渹頊冺渽頊嗧渿頊堩湁頊婍湅頊岉湇頊庬湉頊愴湌頊擁湐旃橃箼旃滌篃旃犾埂旃供旃弓旃挫沟旃胳辜旌勳簠旌囲簤旌愳簯旌旍簶旌犾骸旌l氦旌レ含旌粊旎れ互旎猾旎淮旎奠环旎胳还旒�旒侅紕旒堨紣旒戩紦旒曥紲旒犾激旒辑旒及旒膘几旖旍綍旖橃綔旖れ渐旖ъ僵旖办奖旖挫礁炀�炀呾緦炀§鲸炀办縿炜犾俊炜れ卡炜办勘炜踌康炜柬��韤勴�戫�橅��错�淀�疙�硷拷".split("");
+for(j = 0; j != D[196].length; ++j) if(D[196][j].charCodeAt(0) !== 0xFFFD) { e[D[196][j]] = 50176 + j; d[50176 + j] = D[196][j];}
+D[197] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾湑頊栱湕頊氻湜頊濏湠頊燀湣頊㈨湥頊ろ湧頊湩頊湰頊湳頊绊湵頊岔湷頊俄湻頊癸拷锟斤拷锟斤拷锟巾満頊豁溄頊卷溈頋�頋來潅頋冺潊頋嗧潏頋婍潒頋岉潔頋庬潖頋掜潛頋曧潥頋涰潨頋濏潪锟斤拷锟斤拷锟斤拷頋燀潰頋ろ潶頋ы潹頋潾頋澁頋澅頋岔澇頋淀澏頋讽澑頋鬼澓頋豁澗頋宽瀫頌傢瀮頌勴瀰頌嗧瀲頌婍瀷韥勴亝韥図亯韥愴仈韥橅仩韥伃韥绊伌韥柬伣韨來偆韨ロ偍韨偞韨淀偡韨鬼儉韮來儎韮堩儔韮愴儜韮擁償韮曧儨韮濏儬韮ろ儸韮儻韮绊儽韮疙剭韯绊劚韯错劯韯喉厐韰來厓韰勴厖韰岉厤韰愴厰韰滍厺韰燀叀韰叕韰柬唲韱堩啝韱№啢韱啺韱表喅韱淀喓韱柬噣韲橅嚧韲疙垏韴夗垚韴埈韴绊埓韴柬埥韴宽墎韷堩墱锟�".split("");
+for(j = 0; j != D[197].length; ++j) if(D[197][j].charCodeAt(0) !== 0xFFFD) { e[D[197][j]] = 50432 + j; d[50432 + j] = D[197][j];}
+D[198] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾瀺頌庬瀼頌戫瀿頌擁灁頌曧灃頌楉灇頌滍灋頌燀灎頌№灑頌o拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾墹韸�韸來妱韸堩姁韸戫姇韸滍姞韸ろ姮韸表姼韸鬼娂韸宽媭韹傢媹韹夗媼韹旐嫎韹滍嫟韹ロ嫲韹表嫶韹疙寑韺來寖韺呿寣韺嶍寧韺愴寯韺栱寽韺濏専韺犿尅韺ロ尐韺╉尙韺绊尭韺鬼尰韺柬尳韻勴崊韻柬嵔韼�韼勴帉韼嶍帍韼愴帒韼橅帣韼滍帬韼帺韼幁韼错幐韼柬弰韽呿張韽夗彁韽橅彙韽m彫韽彴韽错徏韽巾徔韾侊拷".split("");
+for(j = 0; j != D[198].length; ++j) if(D[198][j].charCodeAt(0) !== 0xFFFD) { e[D[198][j]] = 50688 + j; d[50688 + j] = D[198][j];}
+D[199] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾悎韾濏憖響勴憸響犿懁響懐響疙懝響柬懣頀�頀傢拡頀夗拫頀嶍挃頀╉搶頁愴摂頁滍摕頁摤頁绊摳頁豁摻頂勴攬頂岉敂頂曧敆頂柬斀頃�頃勴晫頃嶍晱頃戫晿頃欗暅頃犿暐頃暕頃暛頃错暤頃疙暭頄勴枀頄図枅頄夗枑頄ロ棃項夗棇項愴棐項橅棛項涰棟項ろ棩項棳項错椀項讽椆順�順來槃順堩槓順戫槗順旐槙順滍槧锟�".split("");
+for(j = 0; j != D[199].length; ++j) if(D[199][j].charCodeAt(0) !== 0xFFFD) { e[D[199][j]] = 50944 + j; d[50944 + j] = D[199][j];}
+D[200] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾槫順樃順鬼樇頇�頇呿檲頇夗檵頇嶍檻頇旐檿頇橅櫆頇ы櫓頇绊櫛頇错殐須呿殞須嶍殣須旐殱須燀殹須毈須绊毠須豁泟頉呿泩頉岉洃頉旐洍頉欗洜頉ろ洦頉绊浀頉柬浗頊�頊勴湋頊橅湙頊滍湢頊湬頊湱頊错湹頊疙溂頋勴潎頋夗潗頋戫潝頋栱潡頋橅潤頋犿潯頋m潵頋╉潿頋绊澊頋柬澖頌來瀳頌夗瀸頌愴灅頌欗灈頌濓拷".split("");
+for(j = 0; j != D[200].length; ++j) if(D[200][j].charCodeAt(0) !== 0xFFFD) { e[D[200][j]] = 51200 + j; d[51200 + j] = D[200][j];}
+D[202] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟戒冀浣冲亣鍍瑰姞鍙懙鍝ュ槈瀚佸鏆囨灦鏋锋煰姝岀弬鐥傜鑻涜寗琛楄瑷惰硤璺忚换杩﹂鍒诲嵈鍚勬仾鎱ゆ鐝忚剼瑕鸿闁d緝鍒婂⒕濂稿Е骞插构鎳囨弨鏉嗘煬妗挎緱鐧庣湅纾电▓绔跨啊鑲濊壆鑹辫闁撲公鍠濇浄娓寸ⅲ绔憶瑜愯潕闉ㄥ嫎鍧庡牚宓屾劅鎲炬垺鏁㈡煈姗勬笡鐢樼柍鐩g灠绱洪偗閼戦憭榫曪拷".split("");
+for(j = 0; j != D[202].length; ++j) if(D[202][j].charCodeAt(0) !== 0xFFFD) { e[D[202][j]] = 51712 + j; d[51712 + j] = D[202][j];}
+D[203] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉專宀敳鑳涢墍闁樺墰鍫堝宀″礂搴峰己褰婃叿姹熺暫鐤嗙碃绲崇侗缇岃厰鑸¤枒瑗佽瑳閶奸檷楸囦粙浠峰�嬪嚤濉忔劮鎰炬叏鏀规И婕戠枼鐨嗙洊绠囪姤钃嬶閹ч枊鍠�瀹㈠潙铯佺渤缇归喌鍊ㄥ幓灞呭法鎷掓嵁鎿氭摟娓犵偓绁涜窛韪烇閬介墔閶镐咕浠跺仴宸惧缓鎰嗘鑵辫檾韫囬嵉楱篂鍌戞澃妗�鍎夊妽鍔掓锟�".split("");
+for(j = 0; j != D[203].length; ++j) if(D[203][j].charCodeAt(0) !== 0xFFFD) { e[D[203][j]] = 51968 + j; d[51968 + j] = D[203][j];}
+D[204] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界灱閳愰粩鍔�坎鍋堟啯鎻搳鏍兼獎婵�鑶堣Α闅斿爡鐗界姮鐢勭倒绻偐瑕嬭閬i祽鎶夋焙娼旂祼缂鸿ǎ鍏兼厞绠濊瑱閴楅帉浜繐鍊炲偩鍎嗗媮鍕嶅嵖鍧板搴氬緫鎱舵啲鎿庢暚鏅毣鏇存娑囩倕鐑辩挓鐠ョ搳鐥欑‖纾珶绔剁祬缍撹�曡�胯剾鑾栬杓曢�曢彙闋冮牳椹氶淇傚晸鍫哄瀛e眴鎮告垝妗傛锟�".split("");
+for(j = 0; j != D[204].length; ++j) if(D[204][j].charCodeAt(0) !== 0xFFFD) { e[D[204][j]] = 52224 + j; d[52224 + j] = D[204][j];}
+D[205] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥(婧晫鐧哥绋界郴绻辜瑷堣璋块殠榉勫彜鍙╁憡鍛卞浐濮戝灏诲韩鎷锋敺鏁呮暡鏆犳灟妲佹步鐥肩殣鐫剧缇旇�冭偂鑶忚嫤鑻借彴钘佽牨琚磋铯冭緶閷泧椤ч珮榧撳摥鏂涙洸姊忕﹢璋烽禒鍥板潳宕戞槅姊辨婊剧惃琚為姹楠ㄤ緵鍏叡鍔熷瓟宸ユ亹鎭嫳鎺ф敾鐝欑┖铓h并闉忎覆瀵℃垐鏋滅摐锟�".split("");
+for(j = 0; j != D[205].length; ++j) if(D[205][j].charCodeAt(0) !== 0xFFFD) { e[D[205][j]] = 52480 + j; d[52480 + j] = D[205][j];}
+D[206] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界鑿撹獓瑾茶法閬庨崑椤嗗粨妲ㄨ椏閮鍐犲畼瀵叄妫烘鐏岀惎鐡樼缃愯弲瑙�璨棞椁ㄥ埉鎭濇嫭閫備緤鍏夊尅澹欏唬鏇犳锤鐐氱媯鐝栫瓙鑳遍憶鍗︽帥缃箹鍌�濉婂鎬劎鎷愭榄佸畯绱樿偙杞熶氦鍍戝挰鍠瑢宥犲阀鏀晭鏍℃鐙$殠鐭禐缈硅啝钑庤洘杓冭綆閮婇椹曢涓樹箙涔濅粐淇卞叿鍕撅拷".split("");
+for(j = 0; j != D[206].length; ++j) if(D[206][j].charCodeAt(0) !== 0xFFFD) { e[D[206][j]] = 52736 + j; d[52736 + j] = D[206][j];}
+D[207] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉崁鍙e彞鍜庡様鍧靛灑瀵囧秶寤愭嚰鎷樻晳鏋告煩妲嬫瓙姣嗘姹傛簼鐏哥嫍鐜栫悆鐬跨煩绌剁悼鑰夎嚰鑸呰垔鑻熻、璎宠臣杌�閫戦偙閴ら姸椐掗﹨槌╅窏榫滃湅灞�鑿婇灎闉捍鍚涚獦缇よ杌嶉儭鍫�灞堟帢绐熷寮撶┕绐妿韬�﹀埜鍕稿嵎鍦堟嫵鎹叉瑠娣冪湻鍘ョ崡钑ㄨ苟闂曟満娅冩桨瑭粚楗嬶鏅锋璨达拷".split("");
+for(j = 0; j != D[207].length; ++j) if(D[207][j].charCodeAt(0) !== 0xFFFD) { e[D[207][j]] = 52992 + j; d[52992 + j] = D[207][j];}
+D[208] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介铯囧彨鍦鎻嗘Щ鐝绐虹珔绯捐懙瑕忚党閫甸枿鍕诲潎鐣囩瓲鑿岄垶铯堟鍏嬪墜鍔囨垷妫樻サ闅欏儏鍔ゅ嫟鎳冩枻鏍规Э鐟剧瓔鑺硅彨瑕茶杩戦铯変粖濡楁搾鏄戞獛鐞寸绂借姪琛捐】瑗燂閷︿紜鍙婃�ユ壉姹茬礆绲︿簶鍏㈢煖鑲紒浼庡叾鍐�鍡滃櫒鍦诲熀鍩煎濂囧瀵勫矏宕庡繁骞惧繉鎶�鏃楁棧锟�".split("");
+for(j = 0; j != D[208].length; ++j) if(D[208][j].charCodeAt(0) !== 0xFFFD) { e[D[208][j]] = 53248 + j; d[53248 + j] = D[208][j];}
+D[209] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥湠鏈熸潪妫嬫姗熸姘f苯娌傛穱鐜樼惁鐞拏鐠g暩鐣跨纾绁囩绁虹畷绱�缍虹緢鑰嗚�倢瑷樿瓘璞堣捣閷¢尋椋㈤楱庨◤椹ラ簰绶婁蕉鍚夋嫯妗旈噾鍠労铯嬶濞滄嚘铯嶆嫃鎷匡铯忥铯戯铯撻偅铯旓铯栵铯樿铯欙铯涳鏆栵鐓栵铯熼洠铯犳崗鎹哄崡铯℃瀼妤犳钩铯㈢敺铯oい铯ワ拷".split("");
+for(j = 0; j != D[209].length; ++j) if(D[209][j].charCodeAt(0) !== 0xFFFD) { e[D[209][j]] = 53504 + j; d[53504 + j] = D[209][j];}
+D[210] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界磵铯︼ぇ琛插泭濞橈え铯╋お铯が涔冿き鍏у鏌拌�愶ぎ濂冲勾鎾氱蹇垫伂鎷堟嵒瀵у瘲鍔く濂村缉鎬掞ぐ铯憋げ鐟欙こ铯达さ铯讹し铯搁铯癸ず铯伙ぜ铯斤ぞ铯匡铳侊铳冩績铳勶鑶胯静鎯憋铳囪叇铳堬灏匡铳嬶铳嶏铳忥铳戝瑷ユ澔绱愶铳擄铳曪铳楄兘铳橈灏兼偿鍖挎汉澶氳尪锟�".split("");
+for(j = 0; j != D[210].length; ++j) if(D[210][j].charCodeAt(0) !== 0xFFFD) { e[D[210][j]] = 53760 + j; d[53760 + j] = D[210][j];}
+D[211] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟戒腹浜朵絾鍠湗澹囧綎鏂锋棪妾�娈垫箥鐭绨炵窞铔嬭閯查崨鎾绘揪鐛虹柛閬斿晼鍧嶆喓鎿旀泧娣℃箾娼竟鐥拌亙鑶借晛瑕冭珖璀氶専娌撶晸绛旇笍閬濆攼鍫傚骞㈡垏鎾炴鐣剁硸铻抽花浠e瀳鍧ぇ灏嶅脖甯跺緟鎴存摗鐜宠嚭琚嬭哺闅婇粵瀹呭痉鎮冲�掑垁鍒板湒鍫靛灏庡睜宄跺秼搴﹀緬鎮兼寫鎺夋悧妗冿拷".split("");
+for(j = 0; j != D[211].length; ++j) if(D[211][j].charCodeAt(0) !== 0xFFFD) { e[D[211][j]] = 54016 + j; d[54016 + j] = D[211][j];}
+D[212] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥9娅傛窐娓℃粩婵ょ嚲鐩滅澒绂辩ɑ钀勮Ι璩烦韫堥�冮�旈亾閮介崓闄堕煖姣掔�嗙墭鐘㈢崹鐫g绡ょ簺璁�澧╂儑鏁︽椊鏆炬矊鐒炵噳璞氶爴涔獊浠濆啲鍑嶅嫊鍚屾啩鏉辨妫熸礊娼肩柤鐬崇鑳磋懀閵呭厹鏂楁潨鏋撶棙绔囪嵆铳氳眴閫楅牠灞噣鑺氶亖閬垗寰楀稘姗欑噲鐧荤瓑钘よ瑒閯чò鍠囨嚩铳涚櫓缇咃拷".split("");
+for(j = 0; j != D[212].length; ++j) if(D[212][j].charCodeAt(0) !== 0xFFFD) { e[D[212][j]] = 54272 + j; d[54272 + j] = D[212][j];}
+D[213] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟借樋铻鸿8閭忥娲涚儥鐝炵怠钀斤閰П铳炰簜鍗垫瑒娆掔�剧垱铇笧鍓岃荆宓愭摜鏀瑬婵眱绾滆棈瑗よ鎷夎嚇锠熷粖鏈楁氮鐙肩悈鐟瀭閮炰締宕嶅緺钀婂喎鎺犵暐浜�嗗叐鍑夋妯戠伯绮辩厂鑹珤杓涢噺渚跺劮鍕靛憘寤叜鎴炬梾娅氭烤绀棞锠i柇椹㈤┆楹楅粠鍔涙泦姝风�濈か杞㈤潅鎲愭垁鏀f迹锟�".split("");
+for(j = 0; j != D[213].length; ++j) if(D[213][j].charCodeAt(0) !== 0xFFFD) { e[D[213][j]] = 54528 + j; d[54528 + j] = D[213][j];}
+D[214] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界厜鐠夌反鑱摦杓﹂�i崐鍐藉垪鍔f磳鐑堣寤夋杺娈總绨剧嵉浠や级鍥癸宀哄逗鎬滅幉绗練缈庤亞閫為埓闆堕潏闋橀健渚嬫晶绂喆闅峰嫗铳犳拡鎿勬珦娼炵�樼垚鐩ц�佽槅铏滆矾杓呴湶榄泛楣电绁跨稜鑿夐寗楣块簱璜栧寮勬湩鐎х搹绫犺伨鍎$�ㄧ墷纾婅硞璩氳炒闆蜂簡鍍氬寤栨枡鐕庣檪鐬亰钃硷拷".split("");
+for(j = 0; j != D[214].length; ++j) if(D[214][j].charCodeAt(0) !== 0xFFFD) { e[D[214][j]] = 54784 + j; d[54784 + j] = D[214][j];}
+D[215] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介伡楝ч緧澹樺﹣灞㈡〒娣氭紡鐦荤疮绺疯敒瑜搁彜闄嬪妷鏃掓煶姒存祦婧滅�忕悏鐟犵暀鐦ょ~璎鍏埉闄镐緰鍊礄娣陡杓緥鎱勬牀铳¢殕鍕掕倠鍑滃噷妤炵缍捐彵闄典繗鍒╁帢鍚忓攷灞ユ偋鏉庢ⅷ娴妬鐙哥悊鐠冿ア鐥㈢爆缃圭靖鑾夎瑁¢噷閲愰洟榀夊悵娼剧噽鐠樿椇韬殻楸楅簾鏋楁穻鐞宠嚚闇栫牞锟�".split("");
+for(j = 0; j != D[215].length; ++j) if(D[215][j].charCodeAt(0) !== 0xFFFD) { e[D[215][j]] = 55040 + j; d[55040 + j] = D[215][j];}
+D[216] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界珛绗犵矑鎽╃應鐥茬⒓纾ㄩΜ榄旈夯瀵炲箷婕犺啘鑾倛涓囧崓濞╁窉褰庢參鎸芥櫓鏇兼豢婕仯鐬炶惉钄撹牷杓撻榘诲敎鎶规湯娌寜瑗澓浜″蹇樺繖鏈涚恫缃旇姃鑼幗杓為倷鍩嬪濯掑瘣鏄ф灇姊呮瘡鐓ょ降璨疯常閭侀瓍鑴堣矈闄岄﹢楹ュ瓱姘撶寷鐩茬洘钀屽啰瑕撳厤鍐曞媺妫夋矓鐪勭湢缍跨番闈㈤旱婊咃拷".split("");
+for(j = 0; j != D[216].length; ++j) if(D[216][j].charCodeAt(0) !== 0xFFFD) { e[D[216][j]] = 55296 + j; d[55296 + j] = D[216][j];}
+D[217] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟借攽鍐ュ悕鍛芥槑鏆濇ぇ婧熺毧鐬戣寳钃傝灍閰╅姌槌磋渚啋鍕熷甯芥厱鎽告懝鏆煇妯℃瘝姣涚墴鐗$憗鐪哥煕鑰楄娂鑼呰瑎璎ㄨ矊鏈ㄦ矏鐗х洰鐫︾﹩槎╂娌掑あ鏈﹁挋鍗濡欏粺鎻忔槾鏉虫负鐚珬鑻楅尐鍕欏帆鎲噵鎴婃媷鎾棤妤欐姣嬬劇鐝风暆绻嗚垶鑼傝暘瑾h部闇ч怠澧ㄩ粯鍊戝垘鍚诲晱鏂囷拷".split("");
+for(j = 0; j != D[217].length; ++j) if(D[217][j].charCodeAt(0) !== 0xFFFD) { e[D[217][j]] = 55552 + j; d[55552 + j] = D[217][j];}
+D[218] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥倍绱婄磱鑱炶殜闁�闆嬁娌曠墿鍛冲獨灏惧祴褰屽井鏈⒍妤f讣婀勭湁绫崇編钖囪瑤杩烽潯榛村卜鎮舵剭鎲晱鏃绘椉姘戞朝鐜熺弶绶¢枖瀵嗚湝璎愬墲鍗氭媿鎼忔挷鏈存ǜ娉婄弨鐠炵當绮曠笡鑶婅埗钖勮揩闆归浼村崐鍙嶅彌鎷屾惉鏀�鏂戞娉綐鐝晹鐦㈢洡鐩肩纾荤が绲嗚埇锜犺繑闋掗/鍕冩嫈鎾ユ袱娼戯拷".split("");
+for(j = 0; j != D[218].length; ++j) if(D[218][j].charCodeAt(0) !== 0xFFFD) { e[D[218][j]] = 55808 + j; d[55808 + j] = D[218][j];}
+D[219] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界櫦璺嬮啽閴㈤榄冨�e倣鍧婂Θ灏ㄥ箛褰锋埧鏀炬柟鏃佹槈鏋嬫婊傜绱¤偑鑶�鑸姵钂¤殞瑷瑮閭﹂槻榫愬�嶄砍铳e煿寰樻嫓鎺掓澂婀冪剻鐩冭儗鑳氳4瑁佃璩犺缉閰嶉櫔浼桨甯涙煆鏍㈢櫧鐧鹃瓌骞℃▕鐓╃嚁鐣イ绻佽晝钘╅浼愮瓘缃伴枼鍑″竼姊垫熬姹庢硾鐘瘎鑼冩硶鐞哄兓鍔堝鎿樻獥鐠х櫀锟�".split("");
+for(j = 0; j != D[219].length; ++j) if(D[219][j].charCodeAt(0) !== 0xFFFD) { e[D[219][j]] = 56064 + j; d[56064 + j] = D[219][j];}
+D[220] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界ⅶ铇楅棦闇癸ゥ鍗炲紒璁婅鲸杈倞鍒ョ灔楸夐紙涓欏�傚叺灞涘狗鏄炴樅鏌勬鐐崇攣鐥呯绔濊姬椁犻▓淇濆牎鍫卞鏅娲戞购娼界彜鐢彥瑁滆璀滆紨浼忓儠鍖愬崪瀹撳京鏈嶇鑵硅尟钄旇瑕嗚脊杓婚Ε榘掓湰涔朵扛濂夊皝宄嘲鎹ф鐑界啟鐞斧钃渹閫㈤嫆槌充笉浠樹刊鍌呭墫鍓惁鍜愬煚澶│锟�".split("");
+for(j = 0; j != D[220].length; ++j) if(D[220][j].charCodeAt(0) !== 0xFFFD) { e[D[220][j]] = 56320 + j; d[56320 + j] = D[220][j];}
+D[221] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉瓪瀛靛瘜搴滐ウ鎵舵暦鏂ф诞婧ョ埗绗︾翱缂惰厫鑵戣啔鑹�鑺欒帺瑷冭矤璩﹁郴璧磋逗閮ㄩ嚋闃滈檮椐欓厂鍖楀垎鍚╁櫞澧冲濂靠鎲ゆ壆鏄愭本鐒氱泦绮夌碁绱涜姮璩侀洶铳т經寮楀娇鎷傚穿鏈嬫纭肩箖榈笗鍌欏寱鍖崙濡冨搴囨偛鎲婃墘鎵规枑鏋囨Η姣旀瘱姣楁瘶娌革エ鐞电椇鐮掔绉曠绮冪穻缈¤偉锟�".split("");
+for(j = 0; j != D[221].length; ++j) if(D[221][j].charCodeAt(0) !== 0xFFFD) { e[D[221][j]] = 56576 + j; d[56576 + j] = D[221][j];}
+D[222] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟借劸鑷傝彶铚氳(瑾硅璨婚剻闈為榧诲毈瀣浆鏂屾娈禍婵辩�曠墲鐜钵璩撻牷鎲戞胺鑱橀▉涔嶄簨浜涗粫浼轰技浣夸繜鍍垮彶鍙稿攩鍡e洓澹ア濞戝瀵哄皠宸冲斧寰欐�濇崹鏂滄柉鏌舵熁姊娌欐硹娓g�夌崊鐮傜ぞ绁�绁犵绡╃礂绲茶倖鑸嶈帋钃戣泧瑁熻瑭炶瑵璩滆郸杈偑椋奸楹濆墛铳╂湐铳拷".split("");
+for(j = 0; j != D[222].length; ++j) if(D[222][j].charCodeAt(0) !== 0xFFFD) { e[D[222][j]] = 56832 + j; d[56832 + j] = D[222][j];}
+D[223] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉倶鍒北鏁f睍鐝婄敚鐤濈畻钂滈吀闇颁狗鎾掓鐓炶柀涓夛カ鏉夋.娓楄姛钄樿~鎻锋緛閳掗涓婂偡鍍忓劅鍟嗗柂鍢楀瓈灏欏碃甯稿簥搴犲粋鎯虫姗℃箻鐖界墍鐙�鐩哥ゥ绠辩繑瑁宠Т瑭宠薄璩為湝濉炵捊璩藉棁铳绱㈣壊鐗茬敓鐢ワキ绗欏澹诲都搴忓憾寰愭仌鎶掓嵖鏁嶆殤鏇欐浉鏍栨2鐘�鐟炵绲窎缃诧拷".split("");
+for(j = 0; j != D[223].length; ++j) if(D[223][j].charCodeAt(0) !== 0xFFFD) { e[D[223][j]] = 57088 + j; d[57088 + j] = D[223][j];}
+D[224] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟借儱鑸掕柉瑗胯獡閫濋嫟榛嶉紶澶曞キ甯儨鏄旀櫝鏋愭睈娣呮綗鐭崇ⅸ钃嗛噵閷粰鍍婂厛鍠勫瑡瀹f墖鏁炬棆娓茬吔鐞佺憚鐠囩捒鐧Κ绶氱箷缇ㄨ吅鑶宠埞铇氳煬瑭佃罚閬搁姂閻ラ楫崹灞戞娉勬穿娓垖钖涜せ瑷闆涧鍓℃毠娈茬簴锜捐磵闁冮櫇鏀濇秹鐕ギ鍩庡瀹�ф兒鎴愭槦鏅熺尒鐝圭洓鐪佺锟�".split("");
+for(j = 0; j != D[224].length; ++j) if(D[224][j].charCodeAt(0) !== 0xFFFD) { e[D[224][j]] = 57344 + j; d[57344 + j] = D[224][j];}
+D[225] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟借仏鑱茶叆瑾犻啋涓栧嫝姝叉礂绋呯绱帮ク璨板彫鍢瀹靛皬灏戝发鎵�鎺冩悢鏄⒊娌兼秷婧�熺偆鐕掔敠鐤忕枎鐦欑瑧绡犵矮绱犵垂钄暛铇囪ù閫嶉仭閭甸姺闊堕ǚ淇楀爆鏉熸稇绮熺簩璎栬礀閫熷宸芥悕钃�閬滈!鐜囧畫鎮氭澗娣炶瑾﹂�侀爩鍒凤グ鐏戠閹栬“閲椾慨鍙楀椊鍥氬瀭澹藉珎瀹堝搏宄�甯ユ剚锟�".split("");
+for(j = 0; j != D[225].length; ++j) if(D[225][j].charCodeAt(0) !== 0xFFFD) { e[D[225][j]] = 57600 + j; d[57600 + j] = D[225][j];}
+D[226] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥垗鎵嬫巿鎼滄敹鏁告ü娈婃按娲欐急鐕х嫨鐛哥悋鐠茬槮鐫$绌楃绮圭稄缍埂缇炶劑鑼辫拹钃氳棯琚栬璁愯几閬傞們閰姈閵归殝闅ч毃闆栭渶闋堥楂撻瑲鍙斿【澶欏瀹挎窇娼氱啛鐞$捁鑲呰徑宸″緡寰亗鏃爳妤娈夋吹娣崇彛鐩剧灛绛嶇磾鑴h垳鑽�钃磋暎瑭㈣珓閱囬尀闋嗛Υ鎴岃杩伴墺宕囧揣锟�".split("");
+for(j = 0; j != D[226].length; ++j) if(D[226][j].charCodeAt(0) !== 0xFFFD) { e[D[226][j]] = 57856 + j; d[57856 + j] = D[226][j];}
+D[227] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉旦鐟熻啙铦ㄦ繒鎷剧繏瑜惰ゲ涓炰箻鍍у嫕鍗囨壙鏄囩供锠呴櫈渚嶅寵鍢跺濯ゅ案灞庡睄甯傚紤鎭冩柦鏄檪鏋炬煷鐚滅煝绀虹繀钂旇搷瑕栬│瑭╄璞曡焙鍩村瘮寮忔伅鎷娈栨箿鐔勭瘨铦曡瓨杌鹃椋句几渚佷俊鍛诲瀹告劶鏂版櫒鐕肩敵绁炵闯鑵庤嚕鑾樿柂钘庤渻瑷婅韩杈涳ケ杩呭け瀹ゅ鎮夊灏嬪績娌侊拷".split("");
+for(j = 0; j != D[227].length; ++j) if(D[227][j].charCodeAt(0) !== 0xFFFD) { e[D[227][j]] = 58112 + j; d[58112 + j] = D[227][j];}
+D[228] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤ゲ娣辩�嬬敋鑺浠�鍗侊コ闆欐皬浜炰縿鍏掑暈濞ュ敞鎴戠墮鑺借帾铔捐瑷濋樋闆呴榇夐禎鍫婂渤宥藉箘鎯℃剷鎻℃▊娓ラ剛閸旈榘愰椒瀹夊哺鎸夋檹妗堢溂闆侀瀺椤旈疅鏂¤瑏杌嬮柤鍞靛博宸栧旱鏆楃檶鑿撮棁澹撴娂鐙庨川浠板ぎ鎬忔樆娈冪Ё榇﹀帗鍝�鍩冨礀鎰涙洊娑鑹鹃殬闈勫巹鎵兼帠娑茬笂鑵嬮锟�".split("");
+for(j = 0; j != D[228].length; ++j) if(D[228][j].charCodeAt(0) !== 0xFFFD) { e[D[228][j]] = 58368 + j; d[58368 + j] = D[228][j];}
+D[229] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥缃岄动楦氫篃鍊诲喍澶滄児鎻舵ぐ鐖鸿�讹ゴ閲庡急铳碉ザ绱勮嫢钁捇钘ヨ簫铳蜂蒋铳革ス澹ゅ瓋鎭欐彋鏀樻暛鏆橈ズ妤婃ǎ娲嬬�佺叕鐥掔槏绂崇┌铳荤緤铳艰铳借畵閲�闄斤ゾ椁婂渼寰℃柤婕佺榾绂﹁獮棣瓪榻剟鎲舵姂妾嶈噯鍋冨牥褰︾剦瑷�璜哄铇栦亢鍎煎毚濂勬帺娣瑰丢妤唵浜堜綑铳匡铴佸铴傦拷".split("");
+for(j = 0; j != D[229].length; ++j) if(D[229][j].charCodeAt(0) !== 0xFFFD) { e[D[229][j]] = 58624 + j; d[58624 + j] = D[229][j];}
+D[230] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤姝熸睗铴勭挼绀栵鑸囪墔鑼硅伎杞濓椁橈铴堬浜︼鍩熷焦鏄擄铴岀柅绻硅铴嶉�嗛鍤ュ牕濮稿瀹达寤讹铴愭崘鎸伙妞芥矅娌挎稁娑撴返婕旓鐑熺劧鐓欙鐕冪嚂铴旂纭绛电罚铴栫腐铴楄杌燂铴欙閴涳槌讹铴濓鎮呮秴铴熺啽铴狅Α闁卞幁铴Γ铴ゆ煋铴ョ値鐒扮惏鑹惰嫆锟�".split("");
+for(j = 0; j != D[230].length; ++j) if(D[230][j].charCodeAt(0) !== 0xFFFD) { e[D[230][j]] = 58880 + j; d[58880 + j] = D[230][j];}
+D[231] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤Ζ闁婚楣芥泟铴х噥钁夛Θ铴╁铴Λ宥稿奖铴槧鏆庢ス姒案娉虫付娼佹繗鐎涚�厫鐕熺嵃铴憶铴摂鐩堢绾擄Ο铴拌嫳瑭犺繋铴遍崍铴查湙铴筹Υ涔傚�Φ鍒堝彙鏇虫杯婵婄寠鐫跨鑺棟铇傦Χ瑁旇璀借鲍铴烽姵铴搁湏闋愪簲浼嶄繅鍌插崍鍚惧惓鍡氬、澧哄ェ濞涘鎮燂鎳婃晼鏃挎櫎姊ф睔婢筹拷".split("");
+for(j = 0; j != D[231].length; ++j) if(D[231][j].charCodeAt(0) !== 0xFFFD) { e[D[231][j]] = 59136 + j; d[59136 + j] = D[231][j];}
+D[232] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界儚鐔崚绛借湀瑾ら安榧囧眿娌冪崉鐜夐埡婧懃鐦熺┅绺曡槉鍏�澹呮搧鐡敃鐧扮縼閭曢泹楗旀甫鐡︾绐嚗铔欒澑瑷涘瀹屽疀姊℃娴g帺鐞撶惉纰楃珐缈剺鑵曡帪璞岄槷闋戞洶寰�鏃烘瀴姹帇鍊▋姝煯澶栧惮宸嶇尌鐣忥铴诲儱鍑瑰牤澶濮氬铴硷宥㈡嫍鎼栨挀鎿撅鏇滐姗堬鐕跨懁铵侊拷".split("");
+for(j = 0; j != D[232].length; ++j) if(D[232][j].charCodeAt(0) !== 0xFFFD) { e[D[232][j]] = 59392 + j; d[59392 + j] = D[232][j];}
+D[233] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界獔绐箛绻炶��鑵帮锜璎犻仚铵冮個楗掓吘娆叉荡绺熻ぅ杈变繎鍌啑鍕囧焽澧夊搴告厒姒曟秾婀ф憾鐔旂憿鐢ㄧ敩鑱宠尭钃夎笂閹旈彏铵勪簬浣戝伓鍎張鍙嬪彸瀹囧瘬灏ゆ剼鎲傛棿鐗涚帡鐟�鐩傜绂戠绱嗙窘鑺嬭棔铏炶總閬囬兊閲殔闆ㄩ洨鍕栧涧鏃槺鏍厹绋堕儊闋婁簯铵呮娈炴緪鐔夎�樿姼钑擄拷".split("");
+for(j = 0; j != D[233].length; ++j) if(D[233][j].charCodeAt(0) !== 0xFFFD) { e[D[233][j]] = 59648 + j; d[59648 + j] = D[233][j];}
+D[234] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介亱闅曢洸闊昏敋楝变簮鐔婇泟鍏冨師鍝″湏鍦掑灒濯涘珓瀵冩�ㄦ効鎻存矃娲规共婧愮埌鐚跨憲鑻戣杞呴仩铵嗛櫌椤橀礇鏈堣秺閴炰綅鍋夊優鍗卞湇濮斿▉灏夋叞鏆愭腑鐖茬憢绶儍钀庤懄钄胯潫琛涜璎傞仌闊嬮瓘涔充緫鍎掑叒铵囧敮鍠╁瀹ュ辜骞藉壕鎮犳儫鎰堟剦鎻勬敻鏈夛鏌旀煔铵夋ァ妤㈡补娲э娓革锟�".split("");
+for(j = 0; j != D[234].length; ++j) if(D[234][j].charCodeAt(0) !== 0xFFFD) { e[D[234][j]] = 59904 + j; d[59904 + j] = D[234][j];}
+D[235] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥俊鐚剁尫铵岀憸鐢憋鐧掞铵忕董鑷捐惛瑁曡獦璜涜韪拌箓閬婇�鹃伜閰夐噳閸铵戝爥铵掓瘬鑲夎偛铵擄鍏佸カ灏癸铵栨饯鐜ц儰璐囷閳楅枏铵橈铵氾鑱挎垘鐎滅胆铻嶏鍨犳仼鎱囨瑾鹃妧闅变箼鍚熸帆钄櫚闊抽.鎻栨常閭戝嚌鎳夎喓榉逛緷鍊氬剙瀹滄剰鎳挎摤妞呮瘏鐤戠煟缇╄墹钖忚熁琛h锟�".split("");
+for(j = 0; j != D[235].length; ++j) if(D[235][j].charCodeAt(0) !== 0xFFFD) { e[D[235][j]] = 60160 + j; d[60160 + j] = D[235][j];}
+D[236] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟借閱簩浠ヤ紛铵濓澶峰Ж铵熷凡寮涘經鎬★铵★Б铵g埦鐝ワГ鐣扮棈铵ョЩ铵﹁�岃�宠倓鑻¤崙铵эЖ璨借渤閭囷З铵4椁岋Й铵�风泭缈婄繉缈艰瑲浜轰粊鍒冨嵃铵捊鍥犲Щ瀵呭紩蹇嶆巩铵Н绲尩铵拌殦瑾嶏П闈澐铵诧С涓�浣氫骄澹规棩婧㈤�搁幇棣逛换澹濮欐亖铵达У绋旓Ф鑽忚硟鍏ュ崉锟�".split("");
+for(j = 0; j != D[236].length; ++j) if(D[236][j].charCodeAt(0) !== 0xFFFD) { e[D[236][j]] = 60416 + j; d[60416 + j] = D[236][j];}
+D[237] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤Х铵革Ч浠嶅墿瀛曡娍浠斿埡鍜ㄥ濮垮瓙瀛楀瓬鎭f厛婊嬬倷鐓巻鐡风柕纾佺传鑰呰嚜鑼ㄨ敆钘夎璩囬泴浣滃嫼鍤兼柅鏄ㄧ伡鐐哥埖缍借妽閰岄泙榈插妫ф畼娼虹洖宀戞毇娼涚绨牰闆滀笀浠楀尃鍫村⒒澹ガ灏囧赋搴勫嫉鎺屾毑鏉栨妾f瑢婕跨墕铵虹崘鐠嬬珷绮ц吀鑷熻嚙鑾婅懍钄h枖钘忚璐撻啲闀凤拷".split("");
+for(j = 0; j != D[237].length; ++j) if(D[237][j].charCodeAt(0) !== 0xFFFD) { e[D[237][j]] = 60672 + j; d[60672 + j] = D[237][j];}
+D[238] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介殰鍐嶅搲鍦ㄥ鎵嶆潗鏍芥娓芥粨鐏界浮瑁佽病杓夐綃榻庣埈绠忚珝閷氫絿浣庡劜鍜�濮愬簳鎶垫澋妤娌笟鐙欑尓鐤界绱佃嫥鑿硅憲钘疯璨簢閫欓偢闆庨綗鍕e悐瀚″瘋鎽樻暤婊寸媱铵荤殑绌嶇瑳绫嶇妇缈熻嵒璎硦璧よ贰韫熻开杩归仼閺戜絻浣哄偝鍏ㄥ吀鍓嶅壀濉″〖濂犲皥灞曞粵鎮涙埌鏍撴姘堟颈锟�".split("");
+for(j = 0; j != D[238].length; ++j) if(D[238][j].charCodeAt(0) !== 0xFFFD) { e[D[238][j]] = 60928 + j; d[60928 + j] = D[238][j];}
+D[239] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界厧鐞犵敯鐢哥晳鐧茬瓕绠嬬绡嗙簭瑭季杞夐埧閵撻將閻浕椤氶~椁炲垏鎴姌娴欑櫎绔婄瘈绲跺崰宀惧簵婕哥偣绮橀湋楫庨粸鎺ユ懞铦朵竵浜曚涵鍋滃伒鍛堝瀹氬箑搴环寰佹儏鎸烘斂鏁存棇鏅舵櫢鏌炬エ妾夋姹�娣�娣ㄦ笩婀炵�炵偂鐜庣徑鐢虹潧纰囩绋嬬┙绮剧稁鑹囪▊璜矠閯厞閲橀墻閶岄尃闇嗛潠锟�".split("");
+for(j = 0; j != D[239].length; ++j) if(D[239][j].charCodeAt(0) !== 0xFFFD) { e[D[239][j]] = 61184 + j; d[61184 + j] = D[239][j];}
+D[240] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介潨闋傞紟鍒跺姂鍟煎牑甯濆紵鎮屾彁姊繜绁鑷嶈柡瑁借韫勯啀闄ら殯闇介榻婁繋鍏嗗噵鍔╁槻寮斿将鎺搷鏃╂檨鏇烘浌鏈濇妫楁Ы婕曟疆鐓х嚗鐖挭鐪虹绁氱绋犵獣绮楃碂绲勭拱鑲囪椈铓よ瑾胯稒韬侀�犻伃閲i樆闆曢偿鏃忕皣瓒抽弮瀛樺皧鍗掓嫏鐚濆�у畻寰炴偘鎱娣欑惍绋祩缍滅副鑵拷".split("");
+for(j = 0; j != D[240].length; ++j) if(D[240][j].charCodeAt(0) !== 0xFFFD) { e[D[240][j]] = 61440 + j; d[61440 + j] = D[240][j];}
+D[241] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟借釜韪甸嵕閻樹綈鍧愬乏搴ф尗缃富浣忎緩鍋氬鑳勫應鍛ㄥ椌濂忓畽宸炲粴鏅濇湵鏌辨牚娉ㄦ床婀婃緧鐐风彔鐤囩睂绱傜船缍㈣垷铔涜ɑ瑾呰蛋韬婅汲閫遍厧閰掗憚椐愮绮ヤ繆鍎佸噯鍩堝宄绘櫃妯芥禋婧栨楷鐒岀暞绔h牏閫¢伒闆嬮Э鑼佷腑浠茶閲嶅嵔娅涙カ姹佽懞澧炴啂鏇炬嫰鐑濈攽鐥囩箳钂歌瓑璐堜箣鍙拷".split("");
+for(j = 0; j != D[241].length; ++j) if(D[241][j].charCodeAt(0) !== 0xFFFD) { e[D[241][j]] = 61696 + j; d[61696 + j] = D[241][j];}
+D[242] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉挮鍦板潃蹇楁寔鎸囨懐鏀棬鏅烘灊鏋虫姹犳矚婕煡鐮ョ绁楃礄鑲㈣剛鑷宠姖鑺疯湗瑾岋Ъ璐勮毒閬茬洿绋欑ǚ绻旇伔鍞囧棓濉垫尟鎼㈡檳鏅嬫…姒涙畡娲ユ罕鐝嶇懆鐠$暃鐤圭洝鐪炵瀷绉︾笁绺濊嚮钄瑷鸿硲杌景閫查幁闄i櫝闇囦緞鍙卞И瀚夊笝妗庣搯鐤剧З绐掕啠铔唱璺岃凯鏂熸湑铵藉煼娼楃窛杓拷".split("");
+for(j = 0; j != D[242].length; ++j) if(D[242][j].charCodeAt(0) !== 0xFFFD) { e[D[242][j]] = 61952 + j; d[61952 + j] = D[242][j];}
+D[243] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介彾闆嗗镜鎳叉緞涓斾緲鍊熷弶鍡熷弹宸姝ょ绠氾Ь韫夎粖閬崏鎼剧潃绐勯尟閼块姜鎾版警鐕︾挩鐡氱珓绨掔簜绮茬簶璁氳磰閼介楗屽埞瀵熸摝鏈串鍍弮濉规厴鎱欐嚭鏂珯璁掕畺鍊夊�″壍鍞卞寤犲桨鎰存暈鏄屾樁鏆㈡婊勬疾鐚栫槨绐撹劰鑹欒彇钂煎偟鍩板瘈瀵ㄥ僵鎺$牔缍佃彍钄¢噰閲靛唺鏌电瓥锟�".split("");
+for(j = 0; j != D[243].length; ++j) if(D[243][j].charCodeAt(0) !== 0xFFFD) { e[D[243][j]] = 62208 + j; d[62208 + j] = D[243][j];}
+D[244] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟借铂鍑勫鎮借檿鍊滐Э鍓斿昂鎱芥垰鎷撴摬鏂ユ粚鐦犺剨韫犻櫉闅讳粺鍗冨枠澶╁窛鎿呮硥娣虹帞绌胯垱钖﹁长韪愰伔閲ч棥闃¢焼鍑稿摬鍠嗗竟鎾ゆ緢缍磋紵杞嶉惖鍍夊皷娌炬坊鐢涚灮绨界堡瑭硅珎鍫炲甯栨嵎鐗掔枈鐫珳璨艰紥寤虫櫞娣歌伣鑿佽珛闈戦瘱铷�鍓冩浛娑曟化绶犺閫仦楂斿垵鍓垮摠鎲旀妱鎷涙ⅱ锟�".split("");
+for(j = 0; j != D[244].length; ++j) if(D[244][j].charCodeAt(0) !== 0xFFFD) { e[D[244][j]] = 62464 + j; d[62464 + j] = D[244][j];}
+D[245] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥妤氭ǖ鐐掔劍纭濈绀庣绋嶈倴鑹歌嫊鑽夎晧璨傝秴閰㈤唻閱績鍥戠嚟鐭楄渶瑙稿蹇栨潙閭ㄥ彚濉氬鎮ゆ唩鎽犵附鑱拌敟閵冩挳鍌磾鏈�澧滄娊鎺ㄦ妤告婀毢绉嬭娀钀╄珡瓒ㄨ拷閯掗厠閱滈寪閷橀帤闆涢ǘ榘嶄笐鐣滅绔虹瓚绡夌府钃勮箼韫磋桓閫愭槬妞跨憙鍑烘湲榛滃厖蹇犳矕锜茶琛锋偞鑶佃悆锟�".split("");
+for(j = 0; j != D[245].length; ++j) if(D[245][j].charCodeAt(0) !== 0xFFFD) { e[D[245][j]] = 62720 + j; d[62720 + j] = D[245][j];}
+D[246] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟借磪鍙栧惞鍢村ǘ灏辩倞缈犺仛鑴嗚嚟瓒i唹椹熼凡鍋翠粍鍘犳兓娓堡渚堝�ゅ棨宄欏篃鎭ユ娌绘穭鐔剧棓鐥寸櫋绋氱绶囩坊缃嚧铓╄紲闆夐Τ榻掑墖鍕呴-瑕竷鏌掓紗渚靛鏋曟矆娴哥悰鐮ч嚌閸艰焺绉ょū蹇粬鍜ゅ斁澧Ε鎯版墦鎷栨湺妤曡埖闄�棣遍鍊崜鍟勫澕铷佹墭铷傛摙鏅煗婵佹刊鐞㈢惛瑷楋拷".split("");
+for(j = 0; j != D[246].length; ++j) if(D[246][j].charCodeAt(0) !== 0xFFFD) { e[D[246][j]] = 62976 + j; d[62976 + j] = D[246][j];}
+D[247] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介惛鍛戝槅鍧﹀綀鎲氭瓗鐏樼偔缍昏獣濂劔鎺㈢湀鑰借勃濉旀惌姒诲畷甯戞汞铷冭暕鍏屽彴澶�犳厠娈嗘卑娉扮瑸鑳庤嫈璺嗛偘棰憋▌鎿囨兢鎾戞攧鍏庡悙鍦熻◣鎱熸《铷呯棝绛掔当閫氬爢妲岃吙瑜��闋瑰伕濂楀Μ鎶曢�忛鎱濈壒闂栧潯濠嗗反鎶婃挱鎿烘澐娉㈡淳鐖惗鐮寸椒鑺窙闋楀垽鍧傛澘鐗堢摚璨╄睛閳戯拷".split("");
+for(j = 0; j != D[247].length; ++j) if(D[247][j].charCodeAt(0) !== 0xFFFD) { e[D[247][j]] = 63232 + j; d[63232 + j] = D[247][j];}
+D[248] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介槳鍏彮鎹屼僵鍞勬倴鏁楁矝娴跨墝鐙界瑕囪矟褰編鐑硅啫鎰庝究鍋忔墎鐗囩瘒绶ㄧ咯閬嶉灜楱欒捕鍧钩鏋拌悕瑭曞悹瀣栧梗寤㈠紛鏂冭偤钄介枆闄涗綀鍖呭實鍖忓拞鍝哄渻甯冩�栨姏鎶辨崟铷嗘场娴︾柋鐮茶優鑴嫗钁¤挷琚嶈閫嬮嫪椋介畱骞呮毚鏇濈�戠垎铷囦康鍓藉姜鎱撴潛妯欐紓鐡㈢エ琛ㄨ惫椋囬椹冿拷".split("");
+for(j = 0; j != D[248].length; ++j) if(D[248][j].charCodeAt(0) !== 0xFFFD) { e[D[248][j]] = 63488 + j; d[63488 + j] = D[248][j];}
+D[249] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉搧绋熸璜疯眾棰ㄩΞ褰兼姭鐤茬毊琚伩闄傚尮寮煎繀娉岀弻鐣㈢枊绛嗚嬀棣濅箯閫间笅浣曞帵澶忓粓鏄版渤鐟曡嵎铦﹁硛閬愰湠榘曞瀛歌檺璎旈洞瀵掓仺鎮嶆棻姹楁饥婢g�氱綍缈伴枒闁掗檺闊撳壊杞勫嚱鍚捀鍟e枈妾绘兜绶樿墻閵滈櫡楣瑰悎鍝堢洅铔ら枻闂旈櫆浜級濮宸锋亽鎶楁澀妗佹矄娓几鑲涜埅锟�".split("");
+for(j = 0; j != D[249].length; ++j) if(D[249][j].charCodeAt(0) !== 0xFFFD) { e[D[249][j]] = 63744 + j; d[63744 + j] = D[249][j];}
+D[250] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤▓铷夐爡浜ュ仌鍜冲灀濂氬瀹虫噲妤锋捣鐎h煿瑙h┎璜ч倐椐鍔炬牳鍊栧垢鏉忚崌琛屼韩鍚戝毊鐝﹂剷闊块楗楅鍣撳铏涜ū鎲叉鐛昏粧姝囬毆椹楀鐖�璧潻淇斿炒寮︽嚫鏅涙倡鐐巹鐜圭従鐪╃潔绲冪耽绺h埛琛掞▕璩㈤墘椤瓚绌磋闋佸珜淇犲崝澶惧辰鎸炬倒鐙硅剠鑴囪帰閶忛牥浜ㄥ厔鍒戝瀷锟�".split("");
+for(j = 0; j != D[250].length; ++j) if(D[250][j].charCodeAt(0) !== 0xFFFD) { e[D[250][j]] = 64000 + j; d[64000 + j] = D[250][j];}
+D[251] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉舰娉傛粠鐎呯亹鐐啋鐝╃懇鑽婅灑琛¢�堥偄閹iΘ鍏綏鎯犳収鏆宠暀韫婇啹闉嬩箮浜掑懠澹曞:濂藉驳寮ф埗鎵堟槉鏅ф娴╂窂婀栨桓婢旀繝婵╃仢鐙愮惀鐟氱摖鐨撶绯婄笧鑳¤姦钁捒铏庤櫉铦磋璞幀闋�椤ユ儜鎴栭叿濠氭槒娣锋妇鐞块瓊蹇芥儦绗忓搫寮樻睘娉撴椽鐑樼磪铏硅▽榇诲寲鍜屽瑓妯虹伀鐣碉拷".split("");
+for(j = 0; j != D[251].length; ++j) if(D[251][j].charCodeAt(0) !== 0xFFFD) { e[D[251][j]] = 64256 + j; d[64256 + j] = D[251][j];}
+D[252] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界绂捐姳鑿┍璀佽波闈达▼鎿存敨纰虹⒒绌父鍠氬瀹﹀够鎮f彌姝℃櫏妗撴笝鐓ョ挵绱堥倓椹╅哎娲绘粦鐚捐眮闂婂嚢骞屽鲸鎭嶆兌鎰版厡鏅冩檮姒ユ硜婀熸粔娼㈢厡鐠滅殗绡佺哀鑽掕潡閬戦殟榛冨尟鍥炲换寰婃仮鎮旀嚪鏅︽渻妾滄樊婢伆鐛躬鑶捐尨铔旇璩勫妰鐛插畺姗悇鍝殕瀛濇晥鏂呮泬姊熸秿娣嗭拷".split("");
+for(j = 0; j != D[252].length; ++j) if(D[252][j].charCodeAt(0) !== 0xFFFD) { e[D[252][j]] = 64512 + j; d[64512 + j] = D[252][j];}
+D[253] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界埢鑲撮叺椹嶄警鍊欏帤鍚庡惣鍠夊梾甯垮緦鏈界叇鐝濋�呭嫑鍕冲·澹庣剟鐔忕嚮钖拌〒鏆堣枿鍠ф殑鐓婅惐鍗夊枡姣佸綑寰芥彯鏆夌厙璜辫紳楹句紤鎼虹儖鐣﹁櫑鎭よ瓗榉稿厙鍑跺寛娲惰兏榛戞槙娆g倶鐥曞悆灞圭磭瑷栨瑺娆芥瓎鍚告伆娲界繒鑸堝儢鍑炲枩鍣泹濮瑝甯屾啓鎲樻埍鏅炴洣鐔欑喒鐔虹姧绂х█缇茶┌锟�".split("");
+for(j = 0; j != D[253].length; ++j) if(D[253][j].charCodeAt(0) !== 0xFFFD) { e[D[253][j]] = 64768 + j; d[64768 + j] = D[253][j];}
+return {"enc": e, "dec": d }; })();
+cptable[950] = (function(){ var d = [], e = {}, D = [], j;
+D[0] = "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷".split("");
+for(j = 0; j != D[0].length; ++j) if(D[0][j].charCodeAt(0) !== 0xFFFD) { e[D[0][j]] = 0 + j; d[0 + j] = D[0][j];}
+D[161] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷銆�锛屻�併�傦紟鈥э紱锛氾紵锛侊赴鈥︹�ワ箰锕戯箳路锕旓箷锕栵箺锝溾�擄副鈥旓赋鈺达复锕忥紙锛夛傅锔讹經锝濓阜锔搞�斻�曪腹锔恒�愩�戯富锔笺�娿�嬶附锔俱�堛�夛缚锕�銆屻�嶏箒锕傘�庛�忥箖锕勶箼锕氾拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤箾锕滐節锕炩�樷�欌�溾�濄�濄�炩�碘�诧純锛嗭紛鈥宦с�冣棆鈼忊柍鈻测棊鈽嗏槄鈼団梿鈻♀枲鈻解柤銑b剠炉锟o伎藣锕夛箠锕嶏箮锕嬶箤锕燂範锕★紜锛嵜椕仿扁垰锛滐紴锛濃墻鈮р墵鈭炩墥鈮★耿锕o工锕ワ功锝炩埄鈭姤鈭犫垷鈯裤彃銖戔埆鈭埖鈭粹檧鈾傗姇鈯欌啈鈫撯啇鈫掆問鈫椻啓鈫樷垾鈭o紡锟�".split("");
+for(j = 0; j != D[161].length; ++j) if(D[161][j].charCodeAt(0) !== 0xFFFD) { e[D[161][j]] = 41216 + j; d[41216 + j] = D[161][j];}
+D[162] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锛尖垥锕紕锟ャ�掞繝锟★紖锛犫剝鈩夛供锕公銖曘帨銕濄帪銖庛帯銕庛帍銖劼板厵鍏涘厼鍏濆叀鍏e棫鐡╃硯鈻佲杺鈻冣杽鈻呪枂鈻団枅鈻忊枎鈻嶁枌鈻嬧枈鈻夆敿鈹粹敩鈹も敎鈻斺攢鈹傗枙鈹屸攼鈹斺敇鈺拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟解暜鈺扳暞鈺愨暈鈺暋鈼⑩棧鈼モ棨鈺扁暡鈺筹紣锛戯紥锛擄紨锛曪紪锛楋紭锛欌厾鈪♀參鈪b叅鈪モ叇鈪р叏鈪┿�°�€�c�ゃ�ャ�︺�с�ㄣ�╁崄鍗勫崊锛★饥锛o激锛ワ鸡锛э绩锛╋吉锛棘锛籍锛及锛憋疾锛筹即锛碉级锛凤几锛癸己锝侊絺锝冿絼锝咃絾锝囷綀锝夛綂锝嬶綄锝嶏綆锝忥綈锝戯綊锝擄綌锝曪綎锟�".split("");
+for(j = 0; j != D[162].length; ++j) if(D[162][j].charCodeAt(0) !== 0xFFFD) { e[D[162][j]] = 41472 + j; d[41472 + j] = D[162][j];}
+D[163] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锝楋綐锝欙綒螒螔螕螖螘螙螚螛螜螝螞螠螡螢螣螤巍危韦违桅围唯惟伪尾纬未蔚味畏胃喂魏位渭谓尉慰蟺蟻蟽蟿蠀蠁蠂蠄蠅銊呫剢銊囥剤銊夈剨銊嬨剬銊嶃剮銊忥拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟姐剱銊戙剴銊撱剶銊曘剸銊椼剺銊欍剼銊涖劀銊濄劄銊熴劆銊°劉銊c劋銊ャ劍銊с劏銊┧櫵壦娝囁嬶拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鈧拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");
+for(j = 0; j != D[163].length; ++j) if(D[163][j].charCodeAt(0) !== 0xFFFD) { e[D[163][j]] = 41728 + j; d[41728 + j] = D[163][j];}
+D[164] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷涓�涔欎竵涓冧箖涔濅簡浜屼汉鍎垮叆鍏嚑鍒�鍒佸姏鍖曞崄鍗滃張涓変笅涓堜笂涓父鍑′箙涔堜篃涔炰簬浜″厐鍒冨嫼鍗冨弶鍙e湡澹澶уコ瀛愬瓚瀛撳灏忓阿灏稿北宸濆伐宸卞凡宸冲肪骞插痪寮嬪紦鎵嶏拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟戒笐涓愪笉涓赴涓逛箣灏逛簣浜戜簳浜掍簲浜粊浠�浠冧粏浠囦粛浠婁粙浠勫厓鍏佸収鍏叜鍏啑鍑跺垎鍒囧垐鍕诲嬀鍕垮寲鍖瑰崍鍗囧崊鍗炲巹鍙嬪強鍙嶅,澶╁か澶き瀛斿皯灏ゅ昂灞反骞诲豢寮斿紩蹇冩垐鎴舵墜鎵庢敮鏂囨枟鏂ゆ柟鏃ユ洶鏈堟湪娆犳姝规瘚姣旀瘺姘忔按鐏埅鐖剁埢鐗囩墮鐗涚姮鐜嬩笝锟�".split("");
+for(j = 0; j != D[164].length; ++j) if(D[164][j].charCodeAt(0) !== 0xFFFD) { e[D[164][j]] = 41984 + j; d[41984 + j] = D[164][j];}
+D[165] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷涓栦笗涓斾笜涓讳箥涔忎箮浠ヤ粯浠斾粫浠栦粭浠d护浠欎粸鍏呭厔鍐夊唺鍐嚬鍑哄嚫鍒婂姞鍔熷寘鍖嗗寳鍖濅粺鍗婂崏鍗″崰鍗嵁鍘诲彲鍙ゅ彸鍙彯鍙╁彣鍙煎徃鍙靛彨鍙﹀彧鍙插彵鍙板彞鍙徎鍥涘洑澶栵拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉ぎ澶卞ゴ濂跺瓡瀹冨凹宸ㄥ阀宸﹀競甯冨钩骞煎紒寮樺紬蹇呮垔鎵撴墧鎵掓墤鏂ユ棪鏈湰鏈湯鏈姣嶆皯姘愭案姹佹眬姘剧姱鐜勭帀鐡滅摝鐢樼敓鐢ㄧ敥鐢扮敱鐢茬敵鐤嬬櫧鐨毧鐩煕鐭㈢煶绀虹绌寸珛涓炰笩涔掍箵涔╀簷浜や害浜ヤ豢浼変紮浼婁紩浼嶄紣浼戜紡浠蹭欢浠讳话浠充唤浼佷紜鍏夊厙鍏嗗厛鍏拷".split("");
+for(j = 0; j != D[165].length; ++j) if(D[165][j].charCodeAt(0) !== 0xFFFD) { e[D[165][j]] = 42240 + j; d[42240 + j] = D[165][j];}
+D[166] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍏卞啀鍐板垪鍒戝垝鍒庡垨鍔e寛鍖″尃鍗板嵄鍚夊悘鍚屽悐鍚愬悂鍚嬪悇鍚戝悕鍚堝悆鍚庡悊鍚掑洜鍥炲洕鍦冲湴鍦ㄥ湱鍦湳鍦╁澶氬し澶稿濂稿濂藉ス濡傚瀛楀瓨瀹囧畧瀹呭畨瀵哄皷灞瑰窞甯嗗苟骞达拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉紡寮涘繖蹇栨垘鎴屾垗鎴愭墸鎵涙墭鏀舵棭鏃ㄦ棳鏃洸鏇虫湁鏈芥湸鏈辨湹娆℃姝绘皷姹濇睏姹欐睙姹犳睈姹曟薄姹涙睄姹庣伆鐗熺墲鐧剧绫崇掣缂剁緤缇借�佽�冭�岃�掕�宠伩鑲夎倠鑲岃嚕鑷嚦鑷艰垖鑸涜垷鑹壊鑹捐櫕琛�琛岃。瑗块槨涓蹭酣浣嶄綇浣囦綏浣炰即浣涗綍浼颁綈浣戜冀浼轰几浣冧綌浼间絾浣o拷".split("");
+for(j = 0; j != D[166].length; ++j) if(D[166][j].charCodeAt(0) !== 0xFFFD) { e[D[166][j]] = 42496 + j; d[42496 + j] = D[166][j];}
+D[167] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷浣滀綘浼綆浼朵綑浣濅綀浣氬厡鍏嬪厤鍏靛喍鍐峰垾鍒ゅ埄鍒埁鍔姪鍔姮鍖e嵆鍗靛悵鍚悶鍚惧惁鍛庡惂鍛嗗憙鍚冲憟鍛傚悰鍚╁憡鍚瑰惢鍚稿惍鍚靛惗鍚犲惣鍛�鍚卞惈鍚熷惉鍥洶鍥ゅ洬鍧婂潙鍧�鍧嶏拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉潎鍧庡溇鍧愬潖鍦诲/澶惧濡掑Θ濡炲Γ濡欏濡嶅Δ濡撳濡ュ瓭瀛滃瓪瀛涘畬瀹嬪畯灏眬灞佸翱灏惧矏宀戝矓宀屽帆甯屽簭搴囧簥寤峰紕寮熷饯褰㈠椒褰瑰繕蹇屽織蹇嶅勘蹇扛蹇垝鎴戞妱鎶楁姈鎶�鎵舵妷鎵妸鎵兼壘鎵规壋鎶掓壇鎶樻壆鎶曟姄鎶戞妴鏀规敾鏀告棻鏇存潫鏉庢潖鏉愭潙鏉滄潠鏉炴潐鏉嗘潬锟�".split("");
+for(j = 0; j != D[167].length; ++j) if(D[167][j].charCodeAt(0) !== 0xFFFD) { e[D[167][j]] = 42752 + j; d[42752 + j] = D[167][j];}
+D[168] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鏉撴潡姝ユ瘡姹傛睘娌欐瞾娌堟矇娌呮矝姹焙娌愭卑娌屾报娌栨矑姹芥矁姹叉本姹存矄姹舵矋娌旀矘娌傜伓鐏肩伣鐏哥墷鐗$墵鐙勭媯鐜栫敩鐢敺鐢哥殏鐩煟绉佺绂跨┒绯荤綍鑲栬倱鑲濊倶鑲涜倸鑲茶壇鑺掞拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟借妺鑺嶈瑙掕█璋疯眴璞曡矟璧よ蛋瓒宠韩杌婅緵杈拌總杩嗚繀杩勫贰閭戦偄閭偊閭i厜閲嗛噷闃查槷闃遍槳闃甫涔栦钩浜嬩簺浜炰韩浜蒋渚濅緧浣充娇浣緵渚嬩締渚冧桨浣典緢浣╀交渚栦骄渚忎緫浣哄厰鍏掑厱鍏╁叿鍏跺吀鍐藉嚱鍒诲埜鍒峰埡鍒板埉鍒跺墎鍔惧娀鍗掑崝鍗撳崙鍗﹀嵎鍗稿嵐鍙栧彅鍙楀懗鍛碉拷".split("");
+for(j = 0; j != D[168].length; ++j) if(D[168][j].charCodeAt(0) !== 0xFFFD) { e[D[168][j]] = 43008 + j; d[43008 + j] = D[168][j];}
+D[169] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍜栧懜鍜曞拃鍛诲懛鍜勫拻鍜嗗懠鍜愬懕鍛跺拰鍜氬憿鍛ㄥ拫鍛藉拵鍥哄瀮鍧峰潽鍧╁潯鍧﹀潳鍧煎濂夊濂堝濂斿濡诲濡瑰Ξ濮戝濮愬濮嬪濮婂Ο濡冲濮呭瓱瀛ゅ瀹楀畾瀹樺疁瀹欏疀灏氬眻灞咃拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉眴宀峰病宀稿博宀脖宀冲笜甯氬笘甯曞笡甯戝垢搴氬簵搴滃簳搴栧欢寮﹀姬寮╁線寰佸娇褰煎繚蹇犲拷蹇靛靠鎬忔�旀��垫�栨��曟�℃�ф�╂��涙垨鎴曟埧鎴炬墍鎵挎媺鎷屾媱鎶挎媯鎶规嫆鎷涙姭鎷撴嫈鎷嬫媹鎶ㄦ娊鎶兼嫄鎷欐媷鎷嶆姷鎷氭姳鎷樻嫋鎷楁媶鎶嫀鏀炬枾鏂兼椇鏄旀槗鏄屾槅鏄傛槑鏄�鏄忔槙鏄婏拷".split("");
+for(j = 0; j != D[169].length; ++j) if(D[169][j].charCodeAt(0) !== 0xFFFD) { e[D[169][j]] = 43264 + j; d[43264 + j] = D[169][j];}
+D[170] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鏄囨湇鏈嬫澀鏋嬫灂鏉辨灉鏉虫澐鏋囨灊鏋楁澂鏉版澘鏋夋澗鏋愭澋鏋氭灀鏉兼潽鏉叉姝︽姝挎皳姘涙常娉ㄦ吵娌辨硨娉ユ渤娌芥簿娌兼尝娌硶娉撴哺娉勬补娉佹伯娉楁硡娉辨部娌绘场娉涙硦娌朝娉滄硸娉狅拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界倳鐐庣倰鐐婄倷鐖埈鐖哥増鐗х墿鐙�鐙庣嫏鐙楃嫄鐜╃帹鐜熺帿鐜ョ斀鐤濈枡鐤氱殑鐩傜洸鐩寸煡鐭界ぞ绁�绁佺绉堢┖绌圭绯剧綌缇岀緥鑰呰偤鑲ヨ偄鑲辫偂鑲偐鑲磋偑鑲嚗鑷捐垗鑺宠姖鑺欒姯鑺借姛鑺硅姳鑺姤鑺姼鑺h姲鑺捐姺铏庤櫛鍒濊〃杌嬭繋杩旇繎閭甸偢閭遍偠閲囬噾闀烽杸闃滈檧闃块樆闄勶拷".split("");
+for(j = 0; j != D[170].length; ++j) if(D[170][j].charCodeAt(0) !== 0xFFFD) { e[D[170][j]] = 43520 + j; d[43520 + j] = D[170][j];}
+D[171] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷闄傞毠闆ㄩ潚闈炰簾浜寒淇′镜渚究淇犱繎淇忎繚淇冧径淇樹繜淇婁織渚繍淇勪總淇氫繋淇炰痉鍏楀啋鍐戝啝鍓庡墐鍓婂墠鍓屽墜鍓囧媷鍕夊媰鍕佸實鍗楀嵒鍘氬彌鍜搥鍜ㄥ搸鍝夊捀鍜﹀挸鍝囧搨鍜藉挭鍝侊拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉搫鍝堝挴鍜挶鍜诲挬鍜у捒鍥垮瀭鍨嬪灎鍨e灑鍩庡灝鍨撳濂戝濂庡濮滃濮垮В濮ㄥ▋濮ュИ濮氬Е濞佸Щ瀛╁瀹﹀瀹㈠灏佸睅灞忓睄灞嬪硻宄掑贩甯濆弗甯熷菇搴犲害寤哄紙寮渐寰堝緟寰婂緥寰囧緦寰夋�掓�濇�犳�ユ�庢�ㄦ亶鎭版仺鎭㈡亞鎭冩伂鎭仾鎭ゆ墎鎷滄寲鎸夋嫾鎷寔鎷嫿鎸囨嫳鎷凤拷".split("");
+for(j = 0; j != D[171].length; ++j) if(D[171][j].charCodeAt(0) !== 0xFFFD) { e[D[171][j]] = 43776 + j; d[43776 + j] = D[171][j];}
+D[172] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鎷嫭鎷炬嫶鎸戞寕鏀挎晠鏂柦鏃㈡槬鏄槧鏄ф槸鏄熸槰鏄辨槫鏇锋熆鏌撴煴鏌旀煇鏌灦鏋煹鏌╂煰鏌勬煈鏋存煔鏌ユ灨鏌忔煘鏌虫灠鏌欐煝鏌濇煉姝畠娈嗘姣掓瘲姘熸硥娲嬫床娲祦娲ユ磳娲辨礊娲楋拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥椿娲芥淳娲舵礇娉垫垂娲ф锤娲╂串娲垫磶娲偒鐐虹偝鐐偗鐐偢鐐偆鐖扮壊鐗壌鐙╃嫚鐙$幏鐝婄幓鐜茬弽鐝�鐜崇敋鐢晱鐣岀晭鐣嬬柅鐤ょ枼鐤㈢枺鐧哥殕鐨囩殘鐩堢泦鐩冪泤鐪佺浌鐩哥湁鐪嬬浘鐩肩渿鐭滅爞鐮旂爩鐮嶇绁夌绁囩绂虹绉掔绌跨獊绔跨绫界磦绱呯磤绱夌磭绱勭磫缂哥編缇胯�勶拷".split("");
+for(j = 0; j != D[172].length; ++j) if(D[172][j].charCodeAt(0) !== 0xFFFD) { e[D[172][j]] = 44032 + j; d[44032 + j] = D[172][j];}
+D[173] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鑰愯�嶈�戣�惰儢鑳ヨ儦鑳冭儎鑳岃儭鑳涜儙鑳炶儰鑳濊嚧鑸㈣嫥鑼冭寘鑻h嫑鑻﹁寗鑻ヨ寕鑼夎嫆鑻楄嫳鑼佽嫓鑻旇嫅鑻炶嫇鑻熻嫰鑼嗚檺铏硅櫥铏鸿琛瑙旇▓瑷傝▋璨炶矤璧磋党瓒磋粛杌岃堪杩﹁竣杩骏锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷杩揩杩よ卡閮婇儙閮侀儍閰嬮厞閲嶉杺闄愰檵闄岄檷闈㈤潻闊嬮煭闊抽爜棰ㄩ椋熼棣欎箻浜冲�屽�嶅�d刊鍊﹀�ヤ扛鍊╁�栧�嗗�煎�熷�氬�掑�戜亢鍊�鍊斿�ㄤ勘鍊″�嬪�欏�樹砍淇��烤鍊�夊吋鍐ゅ啣鍐㈠噸鍑屽噯鍑嬪墫鍓滃墧鍓涘墲鍖嵖鍘熷帩鍙熷摠鍞愬攣鍞峰摷鍝ュ摬鍞嗗摵鍞斿摡鍝摗鍞夊摦鍝拷".split("");
+for(j = 0; j != D[173].length; ++j) if(D[173][j].charCodeAt(0) !== 0xFFFD) { e[D[173][j]] = 44288 + j; d[44288 + j] = D[173][j];}
+D[174] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍝﹀敡鍞囧摻鍞忓渻鍦勫焸鍩斿煁鍩冨爥澶忓濂樺濞戝濞滃濞涘〒濮濞eī濞ュ▽濞夊灞樺瀹冲瀹村瀹靛瀹稿皠灞戝睍灞愬抄宄藉郴宄敞宄板扯宕佸炒宸腑甯韩搴骇寮卞緬寰戝緪鎭欙拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥仯鎭ユ亹鎭曟伃鎭╂伅鎮勬偀鎮氭倣鎮旀倢鎮呮倴鎵囨嫵鎸堟嬁鎹庢尵鎸崟鎹傛崋鎹忔崏鎸烘崘鎸芥尓鎸尐鎹嶆崒鏁堟晧鏂欐梺鏃呮檪鏅夋檹鏅冩檼鏅屾檯鏅佹浉鏈旀湑鏈楁牎鏍告妗嗘鏍规妗旀牘姊虫牀妗屾鏍芥煷妗愭鏍兼鏍鏍撴牁妗佹畩娈夋姘f哀姘ㄦ唉姘ゆ嘲娴稌娑堟秶娴︽蹈娴锋禉娑擄拷".split("");
+for(j = 0; j != D[174].length; ++j) if(D[174][j].charCodeAt(0) !== 0xFFFD) { e[D[174][j]] = 44544 + j; d[44544 + j] = D[174][j];}
+D[175] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷娴秹娴禋娴存旦娑屾秺娴规秴娴ユ稊鐑婄儤鐑ょ儥鐑堢儚鐖圭壒鐙肩嫻鐙界嫺鐙风巻鐝悏鐝彔鐝彏鐣旂暆鐣滅暁鐣欑柧鐥呯棁鐤茬柍鐤界柤鐤圭梻鐤哥殝鐨扮泭鐩嶇泿鐪╃湡鐪犵湪鐭╃牥鐮х牳鐮濈牬鐮凤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界牓鐮牋鐮熺牪绁曠绁犵绁栫绁濈绁氱Г绉gЁ绉熺Е绉╃绐勭獔绔欑瑔绗戠矇绱$礂绱嬬磰绱犵储绱旂磹绱曠礆绱滅磵绱欑礇缂虹綗缇旂繀缈佽�嗚�樿�曡�欒�楄�借�胯儽鑴傝儼鑴呰儹鑳磋剢鑳歌兂鑴堣兘鑴婅兗鑳嚟鑷垁鑸愯埅鑸埁鑸娀鑼崚鑽旇崐鑼歌崘鑽夎尩鑼磋崗鑼茶尮鑼惰寳鑽�鑼辫尐鑽冿拷".split("");
+for(j = 0; j != D[175].length; ++j) if(D[175][j].charCodeAt(0) !== 0xFFFD) { e[D[175][j]] = 44800 + j; d[44800 + j] = D[175][j];}
+D[176] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷铏旇殜铓殦铓よ毄铓岃殻铓滆“琛疯琚傝〗琛硅瑷愯◣瑷岃〞瑷婅瑷撹瑷忚☉璞堣焙璞硅病璨㈣捣韬粧杌旇粡杈遍�侀�嗚糠閫�杩鸿看閫冭拷閫呰扛閭曢儭閮濋儮閰掗厤閰岄嚇閲濋嚄閲滈嚈闁冮櫌闄i櫋锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷闄涢櫇闄ら櫂闄為毣椋㈤Μ楠ㄩ珮楝ラ楝间咕鍋哄伣鍋滃亣鍋冨亴鍋氬亯鍋ュ伓鍋庡仌鍋靛伌鍋峰亸鍊忓伅鍋厹鍐曞嚢鍓壇鍕掑嫏鍕樺嫊鍖愬審鍖欏尶鍗�鍖惧弮鏇煎晢鍟暒鍟勫暈鍟″晝鍟婂敱鍟栧晱鍟曞敮鍟ゅ敻鍞暅鍞暎鍞冲晛鍟楀湀鍦嬪湁鍩熷爡鍫婂爢鍩犲煠鍩哄爞鍫靛煼鍩瑰濂㈠ǘ濠佸濠﹀┆濠�锟�".split("");
+for(j = 0; j != D[176].length; ++j) if(D[176][j].charCodeAt(0) !== 0xFFFD) { e[D[176][j]] = 45056 + j; d[45056 + j] = D[176][j];}
+D[177] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷濞煎濠氬﹩濠婂瀵囧瘏瀵勫瘋瀹垮瘑灏夊皥灏囧睜灞滃睗宕囧磫宕庡礇宕栧储宕戝穿宕斿礄宕ゅ揣宕楀发甯稿付甯冲阜搴峰焊搴跺旱搴惧嫉寮峰綏褰僵褰緱寰欏緸寰樺尽寰犲緶鎭挎偅鎮夋偁鎮ㄦ儖鎮存儲鎮斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥儏鎮绘偟鎯滄偧鎯樻儠鎯嗘儫鎮告儦鎯囨垰鎴涙増鎺犳帶鎹叉帠鎺㈡帴鎹锋崸鎺樻帾鎹辨帺鎺夋巸鎺涙崼鎺ㄦ巹鎺堟帣鎺℃幀鎺掓帍鎺�鎹绘崺鎹ㄦ嵑鏁濇晼鏁戞暀鏁楀暉鏁忔晿鏁曟晹鏂滄枦鏂棌鏃嬫棇鏃庢櫇鏅氭櫎鏅ㄦ櫐鏅炴浌鍕楁湜姊佹姊㈡姊垫】妗舵⒈姊ф姊版妫勬姊嗘姊旀姊ㄦ姊℃娆叉锟�".split("");
+for(j = 0; j != D[177].length; ++j) if(D[177][j].charCodeAt(0) !== 0xFFFD) { e[D[177][j]] = 45312 + j; d[45312 + j] = D[177][j];}
+D[178] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷姣姘稁娑兼烦娣欐恫娣℃穼娣ゆ坊娣烘竻娣囨穻娑窇娑窞娣规陡娣锋返娣呮窉娓氭兜娣氭帆娣樻藩娣辨樊娣ㄦ穯娣勬丢娣犊娣︾児鐒夌剨鐑界儻鐖界壗鐘佺寽鐚涚寲鐚撶寵鐜囩悈鐞婄悆鐞嗙従鐞嶇摖鐡讹拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界摲鐢滅敘鐣ョ暒鐣㈢暟鐤忕棓鐥曠柕鐥婄棈鐨庣洈鐩掔洓鐪风溇鐪肩湺鐪哥満纭纭庣ゥ绁ㄧキ绉荤獟绐曠瑺绗ㄧ瑳绗绗欑瑸绗矑绮楃矔绲嗙祪绲辩串绱圭醇绲�绱扮闯绲勭疮绲傜床绱辩冀缇炵練缈岀繋缈掕�滆亰鑱嗚劘鑴栬劊鑴劑鑴拌劋鑸傝埖鑸疯埗鑸硅帋鑾炶帢鑽歌帰鑾栬幗鑾帓鑾婅帗鑾夎帬鑽疯嵒鑽硷拷".split("");
+for(j = 0; j != D[178].length; ++j) if(D[178][j].charCodeAt(0) !== 0xFFFD) { e[D[178][j]] = 45568 + j; d[45568 + j] = D[178][j];}
+D[179] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鑾嗚帶铏曞姜铔囪泙铓惰泟铓佃泦铔嬭毐铓泬琛撹琚堣琚掕琚嶈瑕撹瑷瑷hē瑷辫ō瑷熻瑷㈣眽璞氳博璨搏璨ㄨ勃璨ц掸璧﹁毒瓒鸿粵杌熼�欓�嶉�氶�楅�i�熼�濋�愰�曢�為�犻�忛�㈤�栭�涢�旓拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介儴閮兘閰楅噹閲甸嚘閲i嚙閲嚛闁夐櫔闄甸櫝闄搁櫚闄撮櫠闄烽櫖闆�闆洨绔犵珶闋傞爟榄氶偿楣甸箍楹ラ夯鍌㈠倣鍌呭倷鍌戝個鍌栧倶鍌氭渶鍑卞壊鍓村壍鍓╁嫗鍕濆嫑鍗氬帴鍟诲杸鍠у暭鍠婂枬鍠樺杺鍠滃柂鍠斿枃鍠嬪杻鍠冲柈鍠熷斁鍠插枤鍠诲柆鍠卞暰鍠夊柅鍠欏湇鍫牚鍫村牑鍫板牨鍫″牆鍫犲9澹哄锟�".split("");
+for(j = 0; j != D[179].length; ++j) if(D[179][j].charCodeAt(0) !== 0xFFFD) { e[D[179][j]] = 45824 + j; d[45824 + j] = D[179][j];}
+D[180] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷濠峰獨濠垮獟濯涘瀛冲瀵掑瘜瀵撳瘣灏婂皨灏卞祵宓愬创宓囧方骞呭附骞�骞冨咕寤婂粊寤傚粍寮煎江寰╁惊寰ㄦ儜鎯℃偛鎮舵儬鎰滄劊鎯烘剷鎯版兓鎯存叏鎯辨剮鎯舵剦鎰�鎰掓垷鎵夋帲鎺屾弿鎻�鎻╂弶鎻嗘弽锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鎻掓彛鎻愭彙鎻栨彮鎻嵍鎻存彧鎻涙憭鎻氭徆鏁炴暒鏁㈡暎鏂戞枑鏂櫘鏅版櫞鏅舵櫙鏆戞櫤鏅炬櫡鏇炬浛鏈熸湞妫烘妫犳妫楁妫熸5妫'妫规妫叉#妫嬫妞嶆妞庢妫氭ギ妫绘娆烘娈樻畺娈兼姘隘姘腐娓告箶娓℃覆婀ф箠娓犳弗娓f笡婀涙箻娓ゆ箹婀腑娓︽汞娓存箥娓烘脯婀冩笣娓炬粙锟�".split("");
+for(j = 0; j != D[180].length; ++j) if(D[180][j].charCodeAt(0) !== 0xFFFD) { e[D[180][j]] = 46080 + j; d[46080 + j] = D[180][j];}
+D[181] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷婧夋笝婀庢梗婀勬共婀╂篃鐒欑剼鐒︾劙鐒$劧鐓劀鐗岀妱鐘�鐚剁尌鐚寸尒鐞虹惇鐞崇悽鐞ョ惖鐞剁惔鐞悰鐞︾惃鐢ョ敠鐣暘鐥㈢棝鐥g棛鐥樼棡鐥犵櫥鐧肩殩鐨撶毚鐩滅潖鐭纭’绋嶇▓绋嬬▍绋�绐橈拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界獥绐栫绔g瓑绛栫瓎绛愮瓛绛旂瓖绛嬬瓘绛戠矡绮ョ禐绲愮胆绲曠传绲挡绲$郸绲㈢蛋绲冲杽缈旂繒鑰嬭亽鑲呰厱鑵旇厠鑵戣厧鑴硅厗鑴捐厡鑵撹叴鑸掕垳鑿╄悆鑿歌悕鑿犺弲钀嬭弫鑿彵鑿磋憲钀婅彴钀岃弻鑿借彶鑿婅惛钀庤悇鑿滆悋鑿旇彑铏涜洘铔欒洯铔旇洓铔よ洂铔炶瑁佽琚辫瑕栬ɑ瑭犺瑭炶瑭侊拷".split("");
+for(j = 0; j != D[181].length; ++j) if(D[181][j].charCodeAt(0) !== 0xFFFD) { e[D[181][j]] = 46336 + j; d[46336 + j] = D[181][j];}
+D[182] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷瑭旇瑭愯﹩瑷磋ê瑷惰〇璞¤矀璨布璨宠步璩佽不璩�璨磋卜璨惰部璨歌秺瓒呰秮璺庤窛璺嬭窔璺戣穼璺涜穯杌昏桓杌艰緶閫�甸�遍�搁�查�堕剛閮甸剦閮鹃叄閰ラ噺閳旈垥閳i垑閳為垗閳愰垏閳戦枖闁忛枊闁戯拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介枔闁掗枎闅婇殠闅嬮櫧闅呴殕闅嶉櫜闅勯泚闆呴泟闆嗛泧闆洸闊岄爡闋嗛爤椋ч*椋)椋查-棣Ν榛冮粛榛戜簜鍌偟鍌插偝鍍呭偩鍌偡鍌诲偗鍍囧壙鍓峰壗鍕熷嫤鍕ゅ嫝鍕e尟鍡熷棬鍡撳棪鍡庡棞鍡囧棏鍡e棨鍡棜鍡″梾鍡嗗棩鍡夊湌鍦撳濉戝濉楀濉斿~濉屽…濉婂、濉掑濂у珌瀚夊珜濯惧濯硷拷".split("");
+for(j = 0; j != D[182].length; ++j) if(D[182][j].charCodeAt(0) !== 0xFFFD) { e[D[182][j]] = 46592 + j; d[46592 + j] = D[182][j];}
+D[183] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷濯冲珎濯插旦宓箤骞瑰粔寤堝紥褰欏粳寰剼鎰忔厛鎰熸兂鎰涙児鎰佹剤鎱庢厡鎱勬厤鎰炬劥鎰ф剭鎰嗘劮鎴℃垻鎼撴惥鎼炴惇鎼惤鎼悘鎼滄悢鎼嶆惗鎼栨悧鎼嗘暚鏂熸柊鏆楁殙鏆囨殘鏆栨殑鏆樻殟鏈冩妤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥妤锋妤旀サ妞版妤婃エ妤妤撴ス姒嗘妤f姝囨姣�娈挎瘬姣芥孩婧粨婧舵粋婧愭簼婊囨粎婧ユ簶婧兼汉婧粦婧栨簻婊勬粩婧骇婧寸厧鐓欑叐鐓ょ厜鐓х厹鐓叇鐓岀叆鐓炵厗鐓ㄧ厲鐖虹墥鐚风崊鐚跨尵鐟憵鐟曠憻鐟炵憗鐞跨憴鐟涚憸鐣剁暩鐦�鐥扮榿鐥茬棻鐥虹椏鐥寸棾鐩炵洘鐫涚潾鐫︾潪鐫o拷".split("");
+for(j = 0; j != D[183].length; ++j) if(D[183][j].charCodeAt(0) !== 0xFFFD) { e[D[183][j]] = 46848 + j; d[46848 + j] = D[183][j];}
+D[184] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐫圭潽鐫潨鐫ョ潹鐫㈢煯纰庣纰楃纰岀纭肩纰撶】绁虹タ绂佽惉绂界绋氱绋旂绋炵獰绐犵绡�绛犵绛х脖绮崇驳缍撶倒缍戠秮缍忕禌缃僵缃讲缇╃鲸缇よ仏鑱樿倖鑲勮叡鑵拌吀鑵ヨ叜鑵宠叓锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鑵硅吅鑵﹁垍鑹囪拏钁疯惤钀辫懙钁﹁懌钁夎懍钁涜惣钀佃憽钁h懇钁憜铏炶櫆铏熻浌铚撹湀铚囪渶铔捐浕铚傝渻铚嗚湂琛欒瑁旇瑁滆瑁濊!瑁婅瑁掕瑙h┇瑭茶┏瑭﹁┅瑭拌獓瑭艰瑾犺┍瑾呰┉瑭㈣┊瑭┕瑭昏ň瑭ㄨ雹璨婅矇璩婅硣璩堣硠璨茶硟璩傝硡璺¤窡璺ㄨ矾璺宠泛璺筏璺﹁翰杓冭級杌捐紛锟�".split("");
+for(j = 0; j != D[184].length; ++j) if(D[184][j].charCodeAt(0) !== 0xFFFD) { e[D[184][j]] = 47104 + j; d[47104 + j] = D[184][j];}
+D[185] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷杈熻静閬嬮亰閬撻亗閬旈�奸仌閬愰亣閬忛亷閬嶉亼閫鹃亖閯掗剹閰叒閰╅噳閳烽墬閳搁埥閴�閳鹃墰閴嬮墹閴戦埓閴夐墠閴呴埞閳块墯闁橀殬闅旈殨闆嶉泲闆夐泭闆烽浕闆归浂闈栭澊闈堕爯闋戦爴闋婇爳闋岄<椋达拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介=椋鹃Τ棣遍Υ楂¢畅楹傞紟榧撻紶鍍у儺鍍ュ儢鍍儦鍍曞儚鍍戝儽鍍庡儵鍏㈠嚦鍔冨妭鍖卞幁鍡惧榾鍢涘槜鍡藉様鍢嗗槈鍢嶅槑鍡峰槚鍢熷槇鍢愬椂鍦樺湒濉靛【澧冨澧婂」澧呭〗澹藉ぅ澶㈠い濂ォ瀚″瀚╁珬瀚栧珮瀚e瀵炲瀵″瀵﹀瀵㈠瀵熷皪灞㈠秳宥囧箾骞e箷骞楀箶寤撳粬寮婂絾褰板竟鎱囷拷".split("");
+for(j = 0; j != D[185].length; ++j) if(D[185][j].charCodeAt(0) !== 0xFFFD) { e[D[185][j]] = 47360 + j; d[47360 + j] = D[185][j];}
+D[186] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鎰挎厠鎱锋參鎱f厽鎱氭厴鎱垫埅鎾囨憳鎽旀挙鎽告憻鎽烘憫鎽ф惔鎽懟鏁叉枴鏃楁棖鏆㈡毃鏆濇姒ㄦ妲佹Ξ妲撴姒涙Ψ姒绘Λ姒存妲嶆Ν妲屾Ζ妲冩Γ姝夋瓕姘虫汲婕旀痪婕撴淮婕╂季婕犳棘婕忔紓婕拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥豢婊紗婕辨几婕叉迹婕曟极婕緢婕滑婕佹徊婊屾环鐔旂啓鐓界唺鐔勭啋鐖剧姃鐘栫崉鐛愮懁鐟g應鐟扮懎鐢勭枒鐦х槏鐦嬬槈鐦撶洝鐩g瀯鐫界澘鐫$纰熺ⅶ纰崇ⅸ纰g绂忕绋ū绐绔绠$畷绠嬬绠楃疂绠旂畯绠哥畤绠勭补绮界簿缍荤栋缍滅督缍剧稜绶婄洞缍茬侗缍虹盯缍跨兜缍哥董绶掔穱缍拷".split("");
+for(j = 0; j != D[186].length; ++j) if(D[186][j].charCodeAt(0) !== 0xFFFD) { e[D[186][j]] = 47616 + j; d[47616 + j] = D[186][j];}
+D[187] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷缃扮繝缈$繜鑱炶仛鑲囪厫鑶�鑶忚唸鑶婅吙鑶傝嚙鑷鸿垏鑸旇垶鑹嬭搲钂胯搯钃勮挋钂炶挷钂滆搵钂歌搥钃撹拹钂艰搼钃婅溈铚滆溁铚㈣湧铚磋湗铦曡湻铚╄3瑜傝4瑁硅8瑁借(瑜氳/瑾﹁獙瑾炶瑾嶈瑾撹锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷瑾瑾ㄨ獦瑾戣獨瑾ц豹璨嶈矊璩撹硲璩掕但瓒欒稌璺艰紨杓掕紩杓撹荆閬犻仒閬滈仯閬欓仦閬㈤仢閬涢剻閯橀劄閰甸吀閰烽叴閴搁妧閵呴姌閵栭壔閵撻姕閵ㄩ壖閵戦枴闁ㄩ柀闁i枼闁ら殭闅滈殯闆岄洅闇�闈奸瀰闊堕牀闋橀棰遍椁呴椁夐楠楂﹂瓉榄傞炒槌堕吵楹奸蓟榻婂剟鍎�鍍诲兊鍍瑰剛鍎堝剦鍎呭嚋锟�".split("");
+for(j = 0; j != D[187].length; ++j) if(D[187][j].charCodeAt(0) !== 0xFFFD) { e[D[187][j]] = 47872 + j; d[47872 + j] = D[187][j];}
+D[188] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍔囧妶鍔夊妽鍔婂嫲鍘插槷鍢诲樄鍢插樋鍢村槱鍣撳檸鍣楀櫞鍢跺槸鍢板澧熷澧冲澧ⅸ澧﹀キ瀣夊瀣嬪瀣屽瑘瀵瀵╁灞ゅ饱宥濆稊骞㈠篃骞″虎寤氬粺寤濆唬寤犲綀褰卞痉寰垫叾鎱ф叜鎱濇厱鎲傦拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥吋鎱版叓鎱炬啩鎲愭啱鎲庢啲鎲氭啢鎲旀啴鎴懇鎽懝鎾炴挷鎾堟拹鎾版挜鎾撴挄鎾╂拻鎾挱鎾挌鎾挋鎾㈡挸鏁垫暦鏁告毊鏆毚鏆辨ǎ妯熸Ж妯佹妯欐Ы妯℃〒妯婃С妯傛▍妲☉姝愭瓗娈ゆ瘏姣嗘伎娼兼緞娼戞溅娼旀締娼經娼告疆婢庢胶娼版饯婢楁綐婊曟蒋娼犳綗鐔熺啲鐔辩啫鐗栫姏鐛庣崡鐟╃拫鐠冿拷".split("");
+for(j = 0; j != D[188].length; ++j) if(D[188][j].charCodeAt(0) !== 0xFFFD) { e[D[188][j]] = 48128 + j; d[48128 + j] = D[188][j];}
+D[189] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐟剧拃鐣跨槧鐦╃槦鐦ょ槮鐦$槩鐨氱毢鐩ょ瀻鐬囩瀸鐬戠瀷纾嬬纰虹纰剧纰肩绋跨绌�绋界ǚ绋荤绐绠辩瘎绠寸瘑绡囩瘉绠犵瘜绯婄窢绶寸矾绶荤窐绶窛绶ㄧ罚绶氱窞绶╃稙绶欑凡绶圭降缃风警锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷缈╄�﹁啗鑶滆啙鑶犺啔鑶樿敆钄借敋钃敩钄敁钄戣敚钄¤敂钃敟钃胯攩铻傝澊铦惰潬铦﹁澑铦ㄨ潤铦楄潓铦撹琛濊瑜囪瑜撹瑜婅璜掕珖璜勮獣璜嬭瑾茶珘璜傝瑾拌珫璜嶈瑾硅珱璞岃睅璞碃璩炶肠璩よ超璩尝璩h硿璩场璧稛瓒h斧韪愯笣韪㈣笍韪╄笩韪¤笧韬鸿紳杓涜紵杓╄鸡杓紲杓烇拷".split("");
+for(j = 0; j != D[189].length; ++j) if(D[189][j].charCodeAt(0) !== 0xFFFD) { e[D[189][j]] = 48384 + j; d[48384 + j] = D[189][j];}
+D[190] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷杓ラ仼閬仺閬伔閯伴劖閯ч劚閱囬唹閱嬮唭閶呴娀閵烽嫪閵嫟閶侀姵閵奸嫆閶囬嫲閵查柇闁遍渼闇嗛渿闇夐潬闉嶉瀷闉忛牎闋牅棰抽椁撻椁橀椐愰椐涢椐曢椐欓楂楝ч瓍榄勯榄磫榇夛拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介磧楹╅壕榛庡ⅷ榻掑剴鍎樺剶鍎愬剷鍐�鍐嚌鍔戝姄鍕冲櫃鍣櫣鍣╁櫎鍣稿櫔鍣ㄥ櫏鍣卞櫙鍣櫌鍣跺澧惧澹呭ギ瀣濆瀛稿灏庡綂鎲叉啈鎲╂唺鎳嶆喍鎲炬噴鎳堟埌鎿呮搧鎿嬫捇鎾兼摎鎿勬搰鎿傛搷鎾挎搾鎿旀捑鏁存泦鏇夋毠鏇勬泧鏆告ń妯告ê姗欐┇姗樻ü姗勬姗℃姗囨ǖ姗熸﹫姝欐姘呮總婢辨尽锟�".split("");
+for(j = 0; j != D[190].length; ++j) if(D[190][j].charCodeAt(0) !== 0xFFFD) { e[D[190][j]] = 48640 + j; d[48640 + j] = D[190][j];}
+D[191] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷婵冩兢婵佹晶婢虫縺婢规径婢︽緺婢寸喚鐕夌噽鐕掔噲鐕曠喒鐕庣嚈鐕滅噧鐕勭崹鐠滅挘鐠樼挓鐠炵摙鐢岀攳鐦寸樃鐦虹洤鐩ョ灎鐬炵灍鐬ョ(纾氱,纾хΖ绌嶇绌嗙绌嬬绡欑皯绡夌绡涚绡╃绯曠硸绺婏拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界笐绺堢笡绺g笧绺濈笁绺愮焦缇茬堪缈辩慨鑰ㄨ喅鑶╄啫鑷昏垐鑹樿墮钑婅暀钑堣暔钑╄晝钑夎暛钑暈铻冭灍铻炶灑铻嶈 瑜げ瑜ヨか瑜¤Κ瑕﹁璜鸿璜辫瑎璜滆璜璎佽瑐璜疯璜宠璜艰鲍璞矒璩磋箘韪辫复韫傝腹韪佃蓟杓几杓宠鲸杈﹂伒閬撮伕閬查伡閬洪劥閱掗尃閷堕嫺閷抽尟閷㈤嫾閷寗閷氾拷".split("");
+for(j = 0; j != D[191].length; ++j) if(D[191][j].charCodeAt(0) !== 0xFFFD) { e[D[191][j]] = 48896 + j; d[48896 + j] = D[191][j];}
+D[192] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷閷愰對閷¢寱閷寵闁婚毀闅ㄩ毆闆曢湈闇戦湒闇嶉湏闇忛潧闈滈潶闉橀牥闋搁牷闋烽牠闋归牑椁愰え椁為椁¢椐Б椐遍楠奸楂楫戦磿榇i处榇ㄩ磼榇涢粯榛旈緧榫滃劒鍎熷劇鍎插嫷鍤庡殌鍤愬殔鍤囷拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉殢澹曞澹戝瀣板瀣ゅ灏峰报宥煎逗宥藉陡骞綄寰芥噳鎳傛噰鎳︽噵鎴叉埓鎿庢搳鎿樻摖鎿版摝鎿摫鎿㈡摥鏂傛杻鏇欐洊妾�妾旀獎妾㈡獪娅涙姗炬獥妾愭獱姝滄姣氭皥婵樻勘婵熸繝婵涙郡婵刊婢�婵俊婵╂繒婵堪鐕х嚐鐕嚘鐕ョ嚟鐕嚧鐕犵埖鐗嗙嵃鐛茬挬鐠扮挦鐠ㄧ檰鐧傜檶鐩灣鐬灠鐬拷".split("");
+for(j = 0; j != D[192].length; ++j) if(D[192][j].charCodeAt(0) !== 0xFFFD) { e[D[192][j]] = 49152 + j; d[49152 + j] = D[192][j];}
+D[193] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐬х灜鐭7纾虹4纾绂хΚ绌楃绨囩皪绡剧绨岀癄绯犵硿绯炵尝绯熺硻绯濈府绺剧箚绺风覆绻冪斧绺界副绻呯箒绺寸腹绻堢傅绺跨腐缃勭砍缈艰伇鑱茶伆鑱伋鑷嗚噧鑶鸿噦鑷�鑶胯喗鑷夎喚鑷ㄨ垑鑹辫柂锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷钖勮暰钖滆枒钖旇柉钖涜枃钖ㄨ枈铏ц焵锜戣灣锜掕焼铻灮铻鸿焾锜嬭せ瑜惰瑜歌そ瑕瑤璎楄瑱璎涜瑠璎犺瑵璎勮瑦璞佽翱璞宠澈璩借臣璩歌郴瓒ㄨ箟韫嬭箞韫婅絼杓捐絺杞呰伎閬块伣閭勯倎閭傞個閯归啠閱為啘閸嶉巶閷ㄩ嵉閸婇崶閸嬮寴閸鹃崿閸涢嵃閸氶崝闂婇棆闂岄棃闂嗛毐闅搁洊闇滈湠闉犻煋椤嗛⒍椁甸▉锟�".split("");
+for(j = 0; j != D[193].length; ++j) if(D[193][j].charCodeAt(0) !== 0xFFFD) { e[D[193][j]] = 49408 + j; d[49408 + j] = D[193][j];}
+D[194] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷椐块楫楫椿榇块簨榛忛粸榛滈粷榛涢季榻嬪彚鍤曞毊澹欏瀣稿綕鎳f埑鎿存摬鎿炬攩鎿烘摶鎿锋柗鏇滄湨妾虫娅冩妾告珎妾姝熸娈�夌�嬫烤鐎嗘亢鐎戠�忕嚮鐕肩嚲鐕哥嵎鐛电挧鐠跨敃鐧栫櫂锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐧掔灲鐬跨灮鐬肩绂绌㈢绔勭珔绨哀绨盀绨g啊绯х箶绻曠篂绻氱埂绻掔箼缃堢抗缈昏伔鑱惰噸鑷忚垔钘忚柀钘嶈棎钘夎柊钖鸿柟钖﹁煰锜煵锜犺瑕茶Т璎ㄨ璎璞愯磪韫欒梗韫﹁工韫熻箷杌�杞夎綅閭囬們閭堥啱閱噽閹旈帄閹栭帰閹抽幃閹幇閹橀帤閹楅棓闂栭棎闂曢洟闆滈洐闆涢洖闇ら灒闉︼拷".split("");
+for(j = 0; j != D[194].length; ++j) if(D[194][j].charCodeAt(0) !== 0xFFFD) { e[D[194][j]] = 49664 + j; d[49664 + j] = D[194][j];}
+D[195] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷闉煿椤嶉椤岄椤撻⒑椁鹃た椁介ぎ棣ラ◣楂侀瑑楝嗛瓘榄庨瓖榀婇瘔榀介瘓榀�榈戦禎榈犻粻榧曢棘鍎冲殽澹炲澹㈠榫愬滑鎳叉嚪鎳舵嚨鏀�鏀忔洜鏇濇娅濇珰娅撶�涚�熺�ㄧ�氱�濈�曠�樼垎鐖嶇墭鐘㈢嵏锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐛虹捊鐡婄摚鐤囩枂鐧熺櫋鐭囩绂辩┇绌╃熬绨跨案绨界胺绫�绻弓绻圭供绻緟绻崇径缇圭靖鑷樿棭钘濊棯钘曡棨钘ヨ椃锜昏爡锠嶈煿锜捐瑗熻瑗炶瓉璀滆瓨璀夎瓪璀庤瓘璀嗚瓩璐堣磰韫艰共韬囪苟韫购韫磋綌杞庤经閭婇倠閱遍啴閺¢彂閺熼弮閺堥彍閺濋彇閺㈤弽閺橀彜閺楅彣闂滈毚闆i湭闇ч潯闊滈熁椤烇拷".split("");
+for(j = 0; j != D[195].length; ++j) if(D[195][j].charCodeAt(0) !== 0xFFFD) { e[D[195][j]] = 49920 + j; d[49920 + j] = D[195][j];}
+D[196] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷椤橀棰奸楗夐楱欓瑣榀ㄩ榀栭瘺槎夐怠榈查氮榈簰楹楅簱楹村嫺鍤ㄥ毞鍤跺毚鍤煎¥瀛�瀛冨瀵跺穳鎳告嚭鏀樻敂鏀欐洣鏈ф鐎剧�扮�茬垚鐛荤搹鐧㈢櫏绀︾お绀か绔囩绫岀眱绫嶇朝绯拌井绻界辜锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绾傜綄鑰�鑷氳墻钘昏椆铇戣椇铇嗚構铇囪槉锠旇爼瑗よ瑙歌璀璀瓱璀磸璐嶈簤韬佽簠韬傞喆閲嬮悩閻冮徑闂¢湴椋勯楗戦Θ楱ò楱烽ǖ榘撻皪楣归旱榛ㄩ集榻熼剑榻″劮鍎稿泚鍥�鍥傚灞穽鎳兼嚲鏀濇敎鏂曟洨娅绘瑒娅烘鐏岀垱鐘х摉鐡旂櫓鐭撶睈绾忕簩缇艰槜铇槡锠h牏锠¤牊瑗ガ瑕借锟�".split("");
+for(j = 0; j != D[196].length; ++j) if(D[196][j].charCodeAt(0) !== 0xFFFD) { e[D[196][j]] = 50176 + j; d[50176 + j] = D[196][j];}
+D[197] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷璀疯璐撹簥韬嶈簨杞熻警閱洪惍閻抽惖閻洪惛閻查惈闂㈤湼闇归湶闊块¨椤ラ椹呴﹥椹�楱鹃珡榄旈瓚榘哎槎洞榉傞陡楹濋化榧欓綔榻﹂涧鍎煎劵鍥堝泭鍥夊宸斿窉褰庢嚳鏀ゆ瑠姝$亼鐏樼巰鐡ょ枈鐧櫖锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绂崇睜绫熻伨鑱借嚐瑗茶ク瑙艰畝璐栬礂韬戣簱杞¢厛閼勯憫閼掗溄闇鹃焹闊侀~楗曢椹嶉珤楝氶眽榘遍熬榘婚窊榉楅即榻姜榫斿泴宸栨垁鏀f敨鏀洭娆愮摎绔婄堡绫g饱绾撶簴绾旇嚔铇歌樋锠辫畩閭愰倧閼i憼閼ら潹椤椹氶椹楅珦楂旈珣楸旈睏楸栭伐楹熼淮鍥戝)鏀仦鐧辩櫜鐭楃綈缇堣牰锠硅、璁撹畳锟�".split("");
+for(j = 0; j != D[197].length; ++j) if(D[197][j].charCodeAt(0) !== 0xFFFD) { e[D[197][j]] = 50432 + j; d[50432 + j] = D[197][j];}
+D[198] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷璁栬壏璐涢噣閼潅闈堥潉闊嗛“椹熼榄橀睙榉归泛楣奸菇榧囬椒榻插怀娆栫仯绫碑锠昏韬¢噥閼查懓椤遍楂栭榛岀仱鐭氳畾閼烽焿椹㈤━绾滆疁韬噮閼介懢閼奸狈楸搁环璞旈懣楦氱埁椹楦涢笧绫诧拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷".split("");
+for(j = 0; j != D[198].length; ++j) if(D[198][j].charCodeAt(0) !== 0xFFFD) { e[D[198][j]] = 50688 + j; d[50688 + j] = D[198][j];}
+D[201] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷涔備箿鍑靛寶鍘備竾涓屼箛浜嶅洍铷屽碑褰充笍鍐囦笌涓簱浠備粔浠堝啒鍕煎崿鍘瑰湢澶冨が灏愬房鏃℃姣屾皵鐖夸副涓间花浠滀哗浠′粷浠氬垖鍖滃崒鍦㈠湥澶楀く瀹佸畡灏掑盎灞村背甯勫簚搴傚繅鎴夋墣姘曪拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥岸姹冩翱姘荤姰鐘扮帄绂歌倞闃炰紟浼樹棘浠典紨浠变紑浠蜂紙浼濅紓浼呬饥浼撲紕浠翠紥鍐卞垞鍒夊垚鍔﹀將鍖熷崓鍘婂悋鍥″洘鍦湭鍦村ぜ濡�濂煎濂诲ゾ濂峰タ瀛栧皶灏ュ奔灞哄被灞惧窡骞靛簞寮傚細褰村繒蹇斿繌鎵滄墳鎵ゆ墶鎵︽墷鎵欐墵鎵氭墺鏃棶鏈炬湽鏈告溁鏈烘溈鏈兼湷姘樻眴姹掓睖姹忔眾姹旀眿锟�".split("");
+for(j = 0; j != D[201].length; ++j) if(D[201][j].charCodeAt(0) !== 0xFFFD) { e[D[201][j]] = 51456 + j; d[51456 + j] = D[201][j];}
+D[202] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷姹岀伇鐗炵姶鐘电帋鐢櫩绌电綉鑹歌壖鑺�鑹借壙铏嶈ゾ閭欓倵閭橀倹閭旈槩闃ら槧闃d綎浼讳舰浣変綋浣や季浣т綊浣熶絹浣樹辑浼充伎浣″啅鍐瑰垳鍒炲垺鍔姰鍖夊崳鍗插帋鍘忓惏鍚峰惇鍛斿憛鍚欏悳鍚ュ悩锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍚藉憦鍛佸惃鍚ゅ憞鍥洤鍥ュ潄鍧呭潓鍧夊潒鍧掑濂�濡﹀濡犲濡庡Β濡愬濡уΑ瀹庡畳灏ㄥ蔼宀嶅矎宀堝矉宀夊矑宀婂矄宀撳矔宸犲笂甯庡簨搴夊簩搴堝簫寮呭紳褰稿蕉蹇掑繎蹇愬凯蹇ㄥ慨蹇冲俊蹇ゅ浚蹇哄刊蹇峰炕鎬�蹇存埡鎶冩妼鎶庢姀鎶旀妵鎵辨壔鎵烘壈鎶佹妶鎵锋壗鎵叉壌鏀锋棸鏃存棾鏃叉椀鏉呮潎锟�".split("");
+for(j = 0; j != D[202].length; ++j) if(D[202][j].charCodeAt(0) !== 0xFFFD) { e[D[202][j]] = 51712 + j; d[51712 + j] = D[202][j];}
+D[203] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鏉欐潟鏉屾潏鏉濇潔鏉氭潒姣愭皺姘氭备姹ф鲍娌勬矉娌忔北姹暴娌氭杯娌囨矔娌滄宝姹虫饱姹绘矌鐏寸伜鐗g娍鐘界媰鐙嗙媮鐘虹媴鐜曠帡鐜撶帞鐜掔敽鐢圭枖鐤曠殎绀借�磋倳鑲欒倫鑲掕倻鑺愯姀鑺呰妿鑺戣姄锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鑺婅妰鑺勮备杩夎究閭熼偂閭ラ倿閭ч偁闃伴槰闃槶涓充緲浣间緟浣戒線渚囦蕉浣翠緣渚勪椒浣屼緱浣練浣逛緛浣镐緪渚滀緮渚炰緬渚備緯浣疆鍐炲喖鍐惧埖鍒插埑鍓嗗埍鍔煎寠鍖嬪尲鍘掑帞鍜囧懣鍜佸拺鍜傚拡鍛懞鍛惧懃鍛懘鍛﹀拲鍛憽鍛犲挊鍛e懅鍛ゅ浄鍥瑰澂鍧插澀鍧澅鍧板澏鍨�鍧靛澔鍧冲澊鍧拷".split("");
+for(j = 0; j != D[203].length; ++j) if(D[203][j].charCodeAt(0) !== 0xFFFD) { e[D[203][j]] = 51968 + j; d[51968 + j] = D[203][j];}
+D[204] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍧ㄥ澖澶屽濡靛濮忓濡插濮佸Χ濡煎濮栧Ρ濡藉濮堝Υ濮囧瀛ュ畵瀹曞眲灞囧伯宀ゅ矤宀靛帛宀ㄥ铂宀熷玻宀并宀钵宀濆播宀跺舶宀﹀笚甯斿笝寮ㄥ饥寮e激褰斿緜褰惧浇蹇炲骏鎬�︽�欐�叉�嬶拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥�存�婃�楁�虫�氭�炴��㈡�嶆�愭��撴�戞�屾�夋�滄垟鎴芥姯鎶存嫅鎶炬姫鎶舵媻鎶姵鎶娀鎶╂姲鎶告斀鏂ㄦ柣鏄夋椉鏄勬槖鏄堟椈鏄冩構鏄嶆槄鏃芥槕鏄愭浂鏈婃瀰鏉瀻鏋掓澏鏉绘灅鏋嗘瀯鏉存瀺鏋屾澓鏋熸瀾鏋欐瀮鏉芥瀬鏉告澒鏋旀娈�姝炬癁姘濇矒娉倡娉硻娌舵硵娌厂娌锋硱娉傛埠娉冩硢娉巢锟�".split("");
+for(j = 0; j != D[204].length; ++j) if(D[204][j].charCodeAt(0) !== 0xFFFD) { e[D[204][j]] = 52224 + j; d[52224 + j] = D[204][j];}
+D[205] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷娉掓碀娌存矈娌濇瞼娉炴硛娲版硩娉囨舶娉规硰娉╂硲鐐旂倶鐐呯倱鐐嗙倓鐐戠倴鐐傜倸鐐冪壀鐙栫媼鐙樼媺鐙滅嫆鐙旂嫐鐙岀嫅鐜ょ帯鐜帵鐜㈢帬鐜帩鐡濈摠鐢跨晙鐢剧枌鐤樼毌鐩崇洷鐩扮浀鐭哥熂鐭圭熁鐭猴拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界煼绁傜た绉呯└绌荤绫电辰鑰佃倧鑲偅鑲歌偟鑲垹鑺犺媭鑺姎鑺樿姏鑺佃姧鑺娂鑺炶姾鑺磋姩鑺¤姪鑻傝姢鑻冭姸鑺㈣櫚铏櫗铏睎杩掕繈杩撹繊杩栬繒杩楅偛閭撮偗閭抽偘闃归樈闃奸樅闄冧繊淇呬繐渚蹭繅淇嬩縼淇斾繙淇欎净渚充繘淇囦繓渚轰縺渚逛楷鍓勫墘鍕�鍕傚尳鍗煎帡鍘栧帣鍘樺捄鍜″挱鍜ュ搹锟�".split("");
+for(j = 0; j != D[205].length; ++j) if(D[205][j].charCodeAt(0) !== 0xFFFD) { e[D[205][j]] = 52480 + j; d[52480 + j] = D[205][j];}
+D[206] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍝冭實鍜峰挳鍝栧挾鍝呭搯鍜犲懓鍜煎挗鍜惧懖鍝炲挵鍨靛灋鍨熷灓鍨屽灄鍨濆灈鍨斿灅鍨忓灆鍨ュ灇鍨曞4澶嶅濮″濮█濮卞濮哄Ы濮煎Ф濮ゅР濮峰濮╁С濮靛濮惧Т濮灞屽硱宄樺硨宄楀硧宄涳拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉碁宄氬硥宄囧硦宄栧硴宄斿硰宄堝硢宄庡碂宄稿饭甯″涪甯e笭甯ゅ喊搴ゅ孩搴涘海搴ュ紘寮綎寰嗘�锋�规仈鎭叉仦鎭呮亾鎭囨亯鎭涙亴鎭�鎭傛仧鎬ゆ亜鎭樻仸鎭墏鎵冩嫃鎸嶆寢鎷垫寧鎸冩嫬鎷规審鎸屾嫺鎷舵寑鎸撴寯鎷烘寱鎷绘嫲鏁佹晝鏂柨鏄舵槨鏄叉樀鏄滄槮鏄㈡槼鏄樅鏄濇槾鏄规槷鏈忔湊鏌佹煵鏌堟灪锟�".split("");
+for(j = 0; j != D[206].length; ++j) if(D[206][j].charCodeAt(0) !== 0xFFFD) { e[D[206][j]] = 52736 + j; d[52736 + j] = D[206][j];}
+D[207] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鏌滄灮鏌告煒鏌�鏋锋焻鏌煠鏌熸灥鏌嶆灣鏌锋煻鏌煟鏌傛灩鏌庢煣鏌版灢鏌兼焼鏌煂鏋煢鏌涙熀鏌夋煀鏌冩煪鏌嬫娈傛畡娈舵瘱姣樻癄姘犳啊娲ㄦ创娲礋娲兼纯娲掓磰娉氭闯娲勬礄娲烘礆娲戞磤娲濇祩锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷娲佹礃娲锋磧娲忔祤娲囨礌娲磮娲㈡磯娲愮偡鐐熺偩鐐辩偘鐐$偞鐐电偐鐗佺墘鐗婄壃鐗扮壋鐗媻鐙ょ嫧鐙嫙鐙嫤鐙g巺鐝岀弬鐝堢弲鐜圭幎鐜电幋鐝幙鐝囩幘鐝冪弳鐜哥弸鐡摦鐢晣鐣堢枾鐤櫣鐩勭湀鐪冪渼鐪呯湂鐩风浕鐩虹煣鐭ㄧ爢鐮戠爳鐮呯爯鐮忕爭鐮夌爟鐮撶绁岀绁呯绉曠绉忕绉庣獉锟�".split("");
+for(j = 0; j != D[207].length; ++j) if(D[207][j].charCodeAt(0) !== 0xFFFD) { e[D[207][j]] = 52992 + j; d[52992 + j] = D[207][j];}
+D[208] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绌剧珣绗�绗佺焙绫哥惫绫跨瞼绮佺磧绱堢磥缃樼緫缇嶇揪鑰囪�庤�忚�旇�疯儤鑳囪儬鑳戣儓鑳傝儛鑳呰儯鑳欒儨鑳婅儠鑳夎儚鑳楄儲鑳嶈嚳鑸¤姅鑻欒嬀鑻硅寚鑻ㄨ寑鑻曡尯鑻嫋鑻磋嫭鑻¤嫴鑻佃寣鑻昏嫸鑻拌嫪锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鑻よ嫚鑻鸿嫵鑻櫡铏磋櫦铏宠琛庤¨琛々瑙撹▌瑷囪挡杩h俊杩繝閮遍偨閭块儠閮呴偩閮囬儖閮堥嚁閲撻檾闄忛檻闄撻檴闄庡�炲�呭�囧�撳�㈠�板�涗康淇村�冲�峰�慷淇峰�楀�滃�犲�у�靛��卞�庡厷鍐斿啌鍑婂噭鍑呭噲鍑庡墶鍓氬墥鍓炲墴鍓曞墷鍕嶅寧鍘炲敠鍝㈠敆鍞掑摟鍝冲摛鍞氬摽鍞勫攬鍝攽鍞呭摫锟�".split("");
+for(j = 0; j != D[208].length; ++j) if(D[208][j].charCodeAt(0) !== 0xFFFD) { e[D[208][j]] = 53248 + j; d[53248 + j] = D[208][j];}
+D[209] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍞婂摶鍝峰摳鍝犲攷鍞冨攱鍦佸渹鍩屽牪鍩曞煉鍨哄焼鍨藉灱鍨稿灦鍨垮焽鍩愬灩鍩佸濂婂濞栧ō濞〞濞忓濞婂濞冲瀹у瀹皟灞栧睌宄晨宄潮宄峰磤宄瑰俯甯ㄥ酣搴邯搴汲寮板涧鎭濇仛鎭э拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥亖鎮㈡倛鎮�鎮掓倎鎮濇們鎮曟倹鎮楁倗鎮滄値鎴欐墕鎷叉寪鎹栨尙鎹勬崊鎸舵崈鎻ゆ尮鎹嬫崐鎸兼尒鎹佹尨鎹樻崝鎹欐尛鎹囨尦鎹氭崙鎸告崡鎹�鎹堟晩鏁嗘梿鏃冩梽鏃傛檴鏅熸檱鏅戞湌鏈撴牊鏍氭鏍叉牫鏍绘妗忔爾鏍辨牅鏍垫牜鏍牤妗庢鏍存牆鏍掓爺鏍︽牗鏍鏍烘牓鏍犳娆娆辨姝倐娈堟姣わ拷".split("");
+for(j = 0; j != D[209].length; ++j) if(D[209][j].charCodeAt(0) !== 0xFFFD) { e[D[209][j]] = 53504 + j; d[53504 + j] = D[209][j];}
+D[210] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷姣ㄦ姣㈡姘ユ岛娴f丹娴舵磵娴℃稈娴樻耽娴弹娑戞秿娣悼娑嗘禐娴ф禒娑楁蛋娴兼禑娑傛稑娲胆娑嬫稻娑�娑勬礀娑冩祷娴芥档娑愮儨鐑撶儜鐑濈儖缂圭儮鐑楃儝鐑炵儬鐑旂儘鐑呯儐鐑囩儦鐑庣儭鐗傜壐锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐗风壎鐚�鐙虹嫶鐙剧嫸鐙崇嫽鐚佺彄鐝欑彞鐝栫幖鐝х彛鐝╃彍鐝掔彌鐝旂彎鐝氱彈鐝樼彣鐡炵摕鐡寸摰鐢$暃鐣熺柊鐥佺柣鐥勭梹鐤跨柖鐤虹殜鐩夌湞鐪涚湊鐪撶湌鐪g湋鐪曠湙鐪氱湤鐪х牐鐮牏鐮电牤鐮ㄧ牣鐮牎鐮╃牫鐮牨绁旂绁忕绁撶绁戠Й绉绉Л绉绉炵绐嗙獕绐呯獘绐岀獖绐囩珮绗愶拷".split("");
+for(j = 0; j != D[210].length; ++j) if(D[210][j].charCodeAt(0) !== 0xFFFD) { e[D[210][j]] = 53760 + j; d[53760 + j] = D[210][j];}
+D[211] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绗勭瑩绗呯瑥绗堢瑠绗庣瑝绗掔矂绮戠矈绮岀矆绮嶇矃绱炵礉绱戠磶绱樼礀绱撶礋绱掔磸绱岀綔缃$綖缃犵綕缃涚緰缇掔績缈傜縺鑰栬�捐�硅兒鑳茶児鑳佃剚鑳昏剙鑸佽埊鑸ヨ尦鑼崉鑼欒崙鑼ヨ崠鑼胯崄鑼﹁寽鑼拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟借崅鑽庤寷鑼寛鑼艰崓鑼栬尋鑼犺尫鑼尒鑽囪崊鑽岃崜鑼炶尙鑽嬭導鑽堣檽铏掕殺铓ㄨ殩铓嶈殤铓炶殗铓楄殕铓嬭殮铓呰殽铓欒殹铓ц殨铓樿殠铓濊殣铓旇琛勮…琛佃《琛茶琛辫】琛琛捐〈琛艰♁璞囪睏璞昏菠璨h刀璧歌兜瓒疯抖杌戣粨杩捐康閫傝靠杩婚�勮考杩堕儢閮犻儥閮氶儯閮熼儱閮橀儧閮楅儨閮ら厫锟�".split("");
+for(j = 0; j != D[211].length; ++j) if(D[211][j].charCodeAt(0) !== 0xFFFD) { e[D[211][j]] = 54016 + j; d[54016 + j] = D[211][j];}
+D[212] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷閰庨厪閲曢嚔閲氶櫆闄熼毤椋i珶楝箍鍋板仾鍋″仦鍋犲亾鍋嬪仢鍋插亪鍋嶅亖鍋涘亰鍋㈠�曞亝鍋熷仼鍋仯鍋ゅ亞鍋�鍋伋鍋楀亼鍑愬壂鍓壃鍓嫋鍕撳尛鍘滃暤鍟跺敿鍟嶅晲鍞村敧鍟戝暍鍞跺數鍞板晵鍟咃拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉攲鍞插暐鍟庡敼鍟堝敪鍞诲晙鍟嬪湂鍦囧熁鍫斿煝鍩跺煖鍩村爛鍩熃鍫堝煾鍫嬪煶鍩忓爣鍩煟鍩插煡鍩煛鍫庡熂鍫愬煣鍫佸爩鍩卞煩鍩板爫鍫勫濠犲濠曞┃濠炲ǜ濞靛┉濠愬濠ュ┈濠撳─濠楀﹥濠濆濠勫濠堝獛濞惧濞瑰濠板┅濠囧濠栧﹤濠滃瀛瘉瀵�灞欏礊宕嬪礉宕氬礌宕屽川宕嶅处宕ュ磸锟�".split("");
+for(j = 0; j != D[212].length; ++j) if(D[212][j].charCodeAt(0) !== 0xFFFD) { e[D[212][j]] = 54272 + j; d[54272 + j] = D[212][j];}
+D[213] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷宕板磼宕e礋宕妇甯村罕搴村汗搴插撼寮跺几寰涘緰寰熸倞鎮愭倖鎮炬偘鎮烘儞鎯旀儚鎯ゆ儥鎯濇儓鎮辨儧鎮锋儕鎮挎儍鎯嶆儉鎸叉崶鎺婃巶鎹芥幗鎺炴幁鎺濇帡鎺帋鎹巼鎺愭嵁鎺嵉鎺滄嵀鎺嵓鎺ゆ尰鎺燂拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥嵏鎺呮巵鎺戞帊鎹版晸鏃嶆櫏鏅℃櫅鏅欐櫆鏅㈡湗妗规姊愭妗‘姊妤栨’姊f姊╂〉妗存⒉姊忔》姊掓〖妗〔姊妗辨【姊涙姊嬫姊夋ⅳ妗告』姊戞姊婃〗娆舵娆锋娈戞畯娈嶆畮娈屾蔼娣�娑洞娑虫勾娑珐娣㈡斗娣舵窋娓�娣堟窢娣熸窎娑炬伐娣滄窛娣涙反娣婃督娣钒娑烘窌娣傛窂娣夛拷".split("");
+for(j = 0; j != D[213].length; ++j) if(D[213][j].charCodeAt(0) !== 0xFFFD) { e[D[213][j]] = 54528 + j; d[54528 + j] = D[213][j];}
+D[214] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷娣愭凡娣撴方娣楁穽娣f痘鐑虹剭鐑风剹鐑寸剬鐑扮剟鐑崇剱鐑肩兛鐒嗙創鐒�鐑哥兌鐒嬬剛鐒庣壘鐗荤壖鐗跨対鐚楃寚鐚戠寴鐚婄寛鐙跨審鐚炵巿鐝剁徃鐝电悇鐞佺徑鐞囩悁鐝虹徏鐝跨悓鐞嬬彺鐞堢暏鐣g棊鐥掔棌锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐥嬬棇鐥戠棎鐨忕殙鐩撶湽鐪湱鐪辩湶鐪寸湷鐪界湧鐪荤湹纭堢纭夌纭婄鐮︾纭愮イ绁хォ绁ィ绁ァ绂荤Ш绉哥Ф绉风獜绐旂獝绗电瓏绗寸绗扮绗ょ绗樼绗濈绗绗绗哥瑲绗g矓绮樼矕绮g吹绱界锤绱剁春绲呯船绱╃祦绲囩淳绱跨祳绱荤川缃g緯缇滅緷缇涚繆缈嬬繊缈愮繎缈囩繌缈夎�燂拷".split("");
+for(j = 0; j != D[214].length; ++j) if(D[214][j].charCodeAt(0) !== 0xFFFD) { e[D[214][j]] = 54784 + j; d[54784 + j] = D[214][j];}
+D[215] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鑰炶�涜亣鑱冭亪鑴樿劌鑴欒剾鑴劅鑴劄鑴¤剷鑴ц劃鑴㈣垜鑸歌埑鑸鸿埓鑸茶壌鑾愯帲鑾ㄨ帊鑽鸿嵆鑾よ嵈鑾忚巵鑾曡帣鑽佃帞鑾╄嵔鑾冭帉鑾濊帥鑾帇鑽捐帴鑾巿鑾楄幇鑽胯帵鑾囪幃鑽惰帤铏欒櫀铓胯毞锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷铔傝泚铔呰毢铓拌泩铓硅毘铓歌泴铓磋毣铓艰泝铓借毦琛掕琚曡ⅷ琚㈣ⅹ琚氳琚¤琚樿ⅶ琚欒琚楄ⅳ琚琚撹瑕傝瑙欒瑷拌ě瑷璋硅盎璞滆睗璞借播璧借祷璧硅都璺傝豆瓒胯穪杌樿粸杌濊粶杌楄粻杌¢�ら�嬮�戦�滈�岄�¢儻閮儼閮撮儾閮抽償閮儸閮╅厲閰橀厷閰撻厱閲嚧閲遍嚦閲搁嚖閲归嚜锟�".split("");
+for(j = 0; j != D[215].length; ++j) if(D[215][j].charCodeAt(0) !== 0xFFFD) { e[D[215][j]] = 55040 + j; d[55040 + j] = D[215][j];}
+D[216] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷閲嚪閲ㄩ嚠闀洪枂闁堥櫦闄櫕闄遍櫙闅块潽闋勯%棣楀倹鍌曞倲鍌炲倠鍌e們鍌屽値鍌濆仺鍌滃倰鍌傚倗鍏熷嚁鍖掑寫鍘ゅ帶鍠戝枿鍠ュ柇鍟峰檯鍠㈠枔鍠堝枏鍠靛杹鍠e枓鍠ゅ暯鍠屽枽鍟垮枙鍠″枎鍦屽牘鍫凤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉牂鍫炲牕鍫e牗鍩靛鍫ュ牅鍫涘牫鍫垮牰鍫牴鍫稿牠鍫牷濂″濯斿獰濠哄濯炲└濯﹀┘濯ュ濯曞濞峰獎濯婂獥濯冨獘濯╁┗濠藉獙濯滃獜濯撳獫瀵瘝瀵嬪瘮瀵戝瘖瀵庡皩灏板捶宓冨但宓佸祴宕垮吹宓戝祹宓曞闯宕哄祾宕藉幢宓欏祩宕瑰祲宕稿醇宕插炊宓�宓呭箘骞佸綐寰﹀茎寰儔鎮规儗鎯㈡儙鎯勬剶锟�".split("");
+for(j = 0; j != D[216].length; ++j) if(D[216][j].charCodeAt(0) !== 0xFFFD) { e[D[216][j]] = 55296 + j; d[55296 + j] = D[216][j];}
+D[217] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鎯叉剨鎰栨剠鎯垫創鎯告兗鎯炬儊鎰冩剺鎰濇剱鎯挎剟鎰嬫墛鎺旀幈鎺版弾鎻ユ彣鎻弮鎾濇彸鎻婃彔鎻舵彆鎻叉彽鎽℃彑鎺炬彎鎻滄弰鎻樻彄鎻傛弴鎻屾弸鎻堟彴鎻楁彊鏀叉暓鏁暏鏁滄暔鏁ユ枌鏂濇枮鏂棎鏃掞拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥櫦鏅櫥鏆�鏅辨櫣鏅櫜鏈佹妫撴妫滄お妫*妫辨妫栨7妫¥妫舵妞愭3妫℃妫屾妤版⒋妞戞/妫嗘妫告妫芥<妫ㄦ妞婃妫庢妫濇妫︽4妫戞妫旀)妞曟ぅ妫囨娆绘娆兼當娈楁畽娈曟姣版姣虫鞍娣兼箚婀囨笩婀夋簣娓兼附婀呮耿娓缚婀佹節婀虫笢娓虫箣婀�婀戞富娓冩府婀烇拷".split("");
+for(j = 0; j != D[217].length; ++j) if(D[217][j].charCodeAt(0) !== 0xFFFD) { e[D[217][j]] = 55552 + j; d[55552 + j] = D[217][j];}
+D[218] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷婀ㄦ箿婀℃副娓ㄦ範婀辨公娓规涪娓版箵婀ユ抚婀告工婀锋箷婀规箳婀︽傅娓舵箽鐒犵劄鐒兓鐒劚鐒g劌鐒㈢劜鐒熺劏鐒虹剾鐗嬬墯鐘堢妷鐘嗙妳鐘嬬寬鐚嬬尠鐚㈢尡鐚崇導鐚茬尛鐚︾專鐚电寣鐞惉鐞扮惈鐞栵拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界悮鐞$惌鐞辩悿鐞g悵鐞╃悹鐞茬摶鐢暞鐣棫鐥氱棥鐥︾棟鐥熺棨鐥楃殨鐨掔洑鐫嗙潎鐫勭潔鐫呯潑鐫庣潒鐫岀煘鐭纭ょˉ纭滅…纭辩—纭“纭╃〃纭炵、绁寸コ绁茬グ绋傜▕绋冪▽绋勭獧绔︾绛婄绛勭瓐绛岀瓗绛�绛樼瓍绮㈢矠绮ㄧ病绲樼弹绲g祿绲栫掸绲祻绲禍绲祾绲旂旦绲戠禑绲庣季缂跨渐锟�".split("");
+for(j = 0; j != D[218].length; ++j) if(D[218][j].charCodeAt(0) !== 0xFFFD) { e[D[218][j]] = 55808 + j; d[55808 + j] = D[218][j];}
+D[219] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷缃︾劲缇犵尽缈楄亼鑱忚亹鑳捐償鑵冭厞鑵掕厪鑵囪劷鑵嶈労鑷﹁嚠鑷疯嚫鑷硅垊鑸艰埥鑸胯壍鑼昏弿鑿硅悾鑿�鑿ㄨ悞鑿ц彜鑿艰彾钀愯弳鑿堣彨鑿h幙钀佽彎鑿ヨ彉鑿胯彙鑿嬭弾鑿栬彽鑿夎悏钀忚彏钀戣悊鑿傝彸锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鑿曡徍鑿囪彂鑿悡鑿冭彫鑿弰鑿昏彈鑿㈣悰鑿涜従铔樿洟铔﹁洆铔h洑铔洕铔洔铔洨铔楄洦铔戣琛栬琚鸿琚硅⒏瑁�琚捐⒍琚艰⒎琚借⒉瑜佽瑕曡瑕楄瑙氳瑭庤瑷硅瑭�瑭楄瑭勮﹨瑭掕﹫瑭戣瑭岃璞熻瞾璨�璨鸿簿璨拌补璨佃秳瓒�瓒夎窐璺撹穽璺囪窎璺滆窂璺曡窓璺堣窏璺呰化杌疯缓锟�".split("");
+for(j = 0; j != D[219].length; ++j) if(D[219][j].charCodeAt(0) !== 0xFFFD) { e[D[219][j]] = 56064 + j; d[56064 + j] = D[219][j];}
+D[220] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷杌硅沪杌互杌佃户杌ㄨ欢杌槐杌淮杌╅��撮�剢閯剟閮块兗閯堥児閮婚剚閯�閯囬剠閯冮叀閰ら厽閰㈤厾閳侀垔閳ラ垉閳氶垿閳忛垖閳�閳掗嚳閲介垎閳勯埀閳傞垳閳ら垯閳楅垍閳栭暬闁嶉枌闁愰殗闄鹃殘锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷闅夐殐闅�闆傞泩闆冮洷闆伴潿闈伴澁闋囬ⅸ椋肠榛逛簝浜勪憾鍌藉偪鍍嗗偖鍍勫儕鍌村儓鍍傚偘鍍佸偤鍌卞儖鍍夊偠鍌稿嚄鍓哄壐鍓诲壖鍡冨棝鍡屽棎鍡嬪棅鍡濆梹鍡斿梽鍡╁柨鍡掑枍鍡忓棔鍡㈠棖鍡堝棽鍡嶅棛鍡傚湐濉撳〃濉ゅ濉嶅濉濉庡濉欏ˉ濉涘牻濉e”澹煎珖瀚勫珛濯哄濯卞濯板瀚堝瀚嗭拷".split("");
+for(j = 0; j != D[220].length; ++j) if(D[220][j].charCodeAt(0) !== 0xFFFD) { e[D[220][j]] = 56320 + j; d[56320 + j] = D[220][j];}
+D[221] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷濯峰珋瀚婂濯跺珝濯瑰獝瀵栧瘶瀵欏盁灏冲当宓e祳宓ュ挡宓禐宓ㄥ掸宓㈠钒骞忓箮骞婂箥骞嬪粎寤屽粏寤嬪粐褰�寰经鎯锋厜鎱婃劔鎱呮劧鎰叉劗鎱嗘劘鎱忔劑鎱�鎴犻叏鎴f垾鎴ゆ弲鎻辨彨鎼愭悞鎼夋悹鎼わ拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥惓鎽冩悷鎼曟悩鎼规惙鎼㈡悾鎼屾惁鎼版惃鎽佹惖鎼悐鎼氭憖鎼ユ惂鎼嬫彠鎼涙惍鎼℃悗鏁枓鏃撴殕鏆屾殨鏆愭殝鏆婃殭鏆旀櫢鏈犳ウ妤熸じ妤庢ア妤辨た妤呮オ妞规妤楁妤烘妤夋さ妤こ妞芥ゥ妫版ジ妞存ォ妤�妤妤舵妤佹ゴ妤屾せ妤嬫し妤滄妤戞げ妤掓く妤绘ぜ姝嗘瓍姝冩瓊姝堟瓉娈涳◢姣绘锟�".split("");
+for(j = 0; j != D[221].length; ++j) if(D[221][j].charCodeAt(0) !== 0xFFFD) { e[D[221][j]] = 56576 + j; d[56576 + j] = D[221][j];}
+D[222] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷姣规姣告簺婊栨粓婧忔粈婧熸簱婧旀籂婧辨汗婊嗘粧婧芥粊婧炴粔婧锋喊婊嶆害婊忔翰婧炬粌婊滄粯婧欐簰婧庢簫婧ゆ骸婧挎撼婊愭粖婧楁寒婧g厙鐓旂厭鐓g厾鐓佺厺鐓㈢叢鐓哥叒鐓$厒鐓樼厓鐓嬬叞鐓熺厫鐓擄拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界厔鐓嶇厷鐗忕妽鐘岀姂鐘愮妿鐚肩崅鐚荤尯鐛�鐛婄崏鐟勭憡鐟嬬憭鐟戠憲鐟�鐟忕憪鐟庣憘鐟嗙憤鐟旂摗鐡跨摼鐡界敐鐣圭暦姒冪棷鐦忕槂鐥风椌鐥肩椆鐥哥槓鐥荤椂鐥椀鐥界殭鐨电洕鐫曠潫鐫犵潚鐫栫潥鐫╃潷鐫旂潤鐫煚纰囩纰旂纰勭纰呯纰$纭圭纰�纰栫』绁肩绁界ス绋戠绋欑♁绋楃〞绋㈢〒锟�".split("");
+for(j = 0; j != D[222].length; ++j) if(D[222][j].charCodeAt(0) !== 0xFFFD) { e[D[222][j]] = 56832 + j; d[56832 + j] = D[222][j];}
+D[223] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绋涚◥绐g绐炵绛︾绛绛╃绛ョ绛辩绛$绛剁绮茬泊绮秷缍嗙秬缍嶇悼缍呯岛缍庣祷缍冪导缍岀稊缍勭到缍掔江缃涧缃ㄧ浆缇︾茎缇х繘缈滆�¤叅鑵犺叿鑵滆叐鑵涜參鑵叉湣鑵炶叾鑵ц叝锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鑵勮叀鑸濊墘鑹勮墍鑹傝墔钃辫惪钁栬懚钁硅拸钂嶈懃钁戣憖钂嗚懅钀拌憤钁借憵钁欒懘钁宠憹钄囪憺钀疯惡钀磋懞钁冭懜钀茶憛钀╄彊钁嬭惎钁傝惌钁熻懓钀硅憥钁岃憭钁搮钂庤惢钁囪惗钀宠懆钁捐憚钀憼钁旇懏钁愯湅铚勮浄铚岃浐铔栬浀铦嶈浉铚庤湁铚佽浂铚嶈渽瑁栬瑁嶈瑁炶瑁氳瑁愯瑕涜瑙ヨГ锟�".split("");
+for(j = 0; j != D[223].length; ++j) if(D[223][j].charCodeAt(0) !== 0xFFFD) { e[D[223][j]] = 57088 + j; d[57088 + j] = D[223][j];}
+D[224] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷瑙¤瑙㈣瑙﹁┒瑾嗚┛瑭¤瑭疯獋瑾勮┑瑾冭獊瑭磋┖璋艰眿璞婅饱璞よ宝璨嗚矂璨呰硨璧ㄨ旦瓒戣秾瓒庤稄瓒嶈稉瓒旇稅瓒掕钒璺犺番璺辫樊璺愯珐璺h发璺ц凡璺反杓嗚豢杓佽紑杓呰紘杓堣紓杓嬮亽閫匡拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介亜閬夐�介剱閯嶉剰閯戦剸閯旈剫閯庨叜閰増閴掗埌閳洪墻閳抽墺閴為妰閳墛閴嗛壄閴墢閴犻墽閴埗閴¢壈閳遍墧閴i墣閴查墡閴撻墝閴栭埐闁熼枩闁為枦闅掗殦闅戦殫闆庨浐闆介浉闆甸澇闈烽澑闈查爮闋嶉爭棰6椋归Ο棣查Π棣甸楠瓫槌抄槌ч簚榛藉儲鍍斿儣鍍ㄥ兂鍍涘儶鍍濆儰鍍撳儸鍍板儻鍍e儬锟�".split("");
+for(j = 0; j != D[224].length; ++j) if(D[224][j].charCodeAt(0) !== 0xFFFD) { e[D[224][j]] = 57344 + j; d[57344 + j] = D[224][j];}
+D[225] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍑樺妧鍔佸嫨鍕尠鍘槯鍢曞槍鍢掑椉鍢忓槣鍢佸槗鍢傚椇鍢濆槃鍡垮椆澧夊〖澧愬澧嗗濉垮〈澧嬪『澧囧澧庡《澧傚濉诲澧忓>濂珳瀚瀚曞瀚氬瀚瀚㈠珷瀚涘瀚炲珴瀚欏瀚熷瀵狅拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉灞e秱宥�宓藉秵宓哄秮宓峰秺宥夊秷宓惧导宥嶅倒宓垮箻骞欏箵寤樺粦寤楀粠寤滃粫寤欏粧寤斿絼褰冨蒋寰舵劕鎰ㄦ厑鎱炴叡鎱虫厭鎱撴叢鎱唨鎱存厰鎱烘厸鎱ユ劵鎱叀鎱栨埄鎴ф埆鎼憤鎽涙憹鎽存懚鎽叉懗鎽芥懙鎽︽挦鎽庢拏鎽炴憸鎽嬫憮鎽犳憪鎽挎惪鎽懌鎽欐懃鎽锋暢鏂犳殹鏆犳殶鏈呮渼鏈㈡Ρ姒舵锟�".split("");
+for(j = 0; j != D[225].length; ++j) if(D[225][j].charCodeAt(0) !== 0xFFFD) { e[D[225][j]] = 57600 + j; d[57600 + j] = D[225][j];}
+D[226] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷姒犳姒栨Π姒姒戞姒庢Η姒嶆Ι姒炬Ο姒挎姒芥Δ妲旀妲婃妲忔Τ姒撴Κ姒℃妲欐姒愭姒垫Ε妲嗘瓓姝嶆瓔娈炴疅娈犳瘍姣勬婊庢坏婊辨純婕ユ桓婕锋换婕級娼庢紮婕氭姬婕樻蓟婕掓画婕婏拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥级娼虫还婊辑娼�婕版技婕垫猾婕囨紟娼冩紖婊芥欢婕规紲婊兼己婕熸紞婕炴紙婕$唶鐔愮唹鐔�鐔呯唫鐔忕吇鐔嗙唩鐔楃墑鐗撶姉鐘曠姄鐛冪崓鐛戠崒鐟㈢懗鐟辩懙鐟茬懅鐟攢鐢傜攦鐣界枑鐦栫槇鐦岀槙鐦戠槉鐦旂毟鐬佺澕鐬呯瀭鐫瀫鐫澗鐬冪⒉纰⒋纰ⅷ纭剧纰炵ⅴ纰犵纰㈢ⅳ绂樼绂嬬绂曠绂擄拷".split("");
+for(j = 0; j != D[226].length; ++j) if(D[226][j].charCodeAt(0) !== 0xFFFD) { e[D[226][j]] = 57856 + j; d[57856 + j] = D[226][j];}
+D[227] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绂楃绂掔绋绋扮ǒ绋ㄧé绐ㄧ绐绠堢疁绠婄畱绠愮畺绠嶇畬绠涚畮绠呯畼鍔勭畽绠ょ畟绮荤部绮肩埠缍х斗绶傜叮缍穪绶�绶呯稘绶庣穭绶嗙穻绶岀动缍圭稏缍肩稛缍︾懂缍╃丁绶夌匠缈㈢浚缈ョ繛锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鑰よ仢鑱滆唹鑶嗚唭鑶囪啀鑶岃唻鑸曡挆钂よ挕钂熻捄钃庤搨钂挳钂捁钂磋搧钃嶈挭钂氳挶钃愯挐钂ц捇钂㈣挃钃囪搶钂涜挬钂挩钃栬挊钂惰搹钂犺摋钃旇搾钃涜挵钂戣櫋铚宠湥铚ㄨ潾铦�铚湠铚¤湙铚涜潈铚潄铚捐潌铚犺湶铚湱铚艰湌铚鸿湵铚佃潅铚﹁湩铚歌湦铚氳湴铚戣7瑁ц1瑁茶:瑁捐.瑁艰6瑁伙拷".split("");
+for(j = 0; j != D[227].length; ++j) if(D[227][j].charCodeAt(0) !== 0xFFFD) { e[D[227][j]] = 58112 + j; d[58112 + j] = D[227][j];}
+D[228] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷瑁拌,瑁瑕¤瑕炶З瑙Ж瑾獧瑾嬭獟瑾忚獤璋借报璞╄硶璩忚硹瓒栬笁韪傝房韪嶈方韪婅竷韪囪竼韪呰肪韪�韪勮紣杓戣紟杓嶉劊閯滈劆閯㈤劅閯濋剼閯ら劇閯涢吅閰查吂閰抽姤閵ら壎閵涢壓閵犻姅閵妽锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷閵﹂姎閵壒閵楅壙閵i嫯閵庨妭閵曢姠閴介妶閵¢妸閵嗛妼閵欓姧閴鹃妵閵╅姖閵嬮埈闅為殹闆块潣闈介澓闈鹃瀮闉�闉傞澔闉勯瀬闈块煄闊嶉爾棰椁傞椁囬棣滈棣归棣洪棣介楠遍楂ч楝块瓲榄¢瓱槌遍巢槌甸骇鍍垮剝鍎板兏鍎嗗剣鍍跺兙鍎嬪剬鍍藉剨鍔嬪妼鍕卞嫰鍣堝檪鍣屽樀鍣佸檴鍣夊檰鍣橈拷".split("");
+for(j = 0; j != D[228].length; ++j) if(D[228][j].charCodeAt(0) !== 0xFFFD) { e[D[228][j]] = 58368 + j; d[58368 + j] = D[228][j];}
+D[229] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍣氬檧鍢冲樈鍢樉鍢稿槳鍢哄湚澧澧卞澧e澧ⅴ澧″?瀚垮瀚藉瀚跺瑑瀚稿瑐瀚瑰瑏瀣囧瑓瀣忓抱宥欏稐宥熷稈宥㈠稉宥曞稜宥滃丁宥氬稙骞╁節骞犲箿绶冲粵寤炲弧褰夊静鎲嬫唭鎱规啽鎲版啟鎲夛拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥啗鎲撴啹鎲啛鎲掓啰鎲℃啀鎱︽喅鎴懏鎽版挅鎾犳拝鎾楁挏鎾忔拫鎾婃拰鎾f挓鎽ㄦ挶鎾樻暥鏁烘暪鏁绘柌鏂虫毜鏆版毄鏆叉毞鏆毌妯�妯嗘妲ユЦ妯曟П妲ゆ妲挎К妲㈡妯濇Ь妯фР妲〝妲锋Ё姗�妯堟Е妲绘◢妲兼Й妯夋▌妯樻ē妯忔Ф妯︽▏妲存姝戞娈f娈︽皝姘�姣挎皞娼佹鸡娼炬緡婵嗘緬锟�".split("");
+for(j = 0; j != D[229].length; ++j) if(D[229][j].charCodeAt(0) !== 0xFFFD) { e[D[229][j]] = 58624 + j; d[58624 + j] = D[229][j];}
+D[230] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷婢嶆緣婢屾舰娼忔緟娼氭緰娼舵浆婢傛綍娼叉綊娼愭綏婢旀緭娼濇紑娼℃将娼芥涧婢愭綋婢嬫僵娼挎緯娼f椒娼交鐔茬啹鐔涚啺鐔犵啔鐔╃喌鐔濈啣鐔炵啢鐔$啰鐔滅啩鐔崇姌鐘氱崢鐛掔崬鐛熺崰鐛濈崨鐛$崥鐛欙拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界崲鐠囩拤鐠婄拞鐠佺懡鐠呯拡鐟肩懝鐢堢攪鐣剧槬鐦炵槞鐦濈槣鐦g槡鐦ㄧ槢鐨滅殱鐨炵殯鐬嶇瀼鐬夌瀳纾嶇⒒纾忕纾戠纾旂纾冪纾夌绂$绂滅Β绂涙绋圭绐寸绠风瘚绠剧绡庣绠圭瘖绠电硡绯堢硨绯嬬贩绶涚藩绶х窏绶$竷绶虹乏绶剁繁绶扮樊绶熺蕉缇景缇凯缈开缈喀缈ㄨ仱鑱ц啠鑶燂拷".split("");
+for(j = 0; j != D[230].length; ++j) if(D[230][j].charCodeAt(0) !== 0xFFFD) { e[D[230][j]] = 58880 + j; d[58880 + j] = D[230][j];}
+D[231] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鑶炶啎鑶㈣啓鑶楄垨鑹忚墦鑹掕墣鑹庤墤钄よ敾钄忚攢钄╄攷钄夎攳钄熻攰钄ц敎钃昏敨钃鸿攬钄岃摯钄摬钄曡摲钃摮钃艰敀钃摡钄栬摼钄ㄨ敐钄攤钃借敒钃惰敱钄﹁摟钃ㄨ摪钃摴钄樿敔钄拌攱钄欒敮铏拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟借潠铦h潳铦疯煛铦宠潣铦旇潧铦掕潯铦氳潙铦炶澀铦潗铦庤潫铦濊澂铦澓铦潨铦ヨ潖铦昏澋铦㈣潷铦╄瑜呰瑜旇瑜楄瑜欒瑜栬瑜庤瑕㈣Δ瑕hЛ瑙拌К璜忚珕瑾歌珦璜戣珨璜曡璜楄璜�璜呰珮璜冭瑾借珯璋捐睄璨忚偿璩熻硻璩ㄨ硽璩濊厂瓒犺稖瓒¤稕韪犺福韪ヨ袱韪笗韪涜笘韪戣笝韪﹁抚锟�".split("");
+for(j = 0; j != D[231].length; ++j) if(D[231][j].charCodeAt(0) !== 0xFFFD) { e[D[231][j]] = 59136 + j; d[59136 + j] = D[231][j];}
+D[232] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷韪旇笒韪樿笓韪滆笚韪氳棘杓よ紭杓氳紶杓h紪杓楅伋閬伴伅閬ч伀閯劔閯╅劒閯查劍閯唴閱嗛唺閱侀唫閱勯唨閶愰媰閶勯媭閶欓姸閶忛嫳閶熼嫎閶╅嫍閶濋媽閶媯閶ㄩ媻閶堥嫀閶﹂媿閶曢媺閶犻嫗閶ч嫅閶擄拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介姷閶¢媶閵撮暭闁柅闁柊闅ら殺闆撻渽闇堥渹闈氶瀶闉庨瀳闊愰煆闋為牆闋﹂牘闋ㄩ牋闋涢牕棰查椋洪椁旈椁楅椐滈椐忛椐旈椐夐椐橀椐楅楠抽楂楂查榄嗛瓋榄ч榄遍榄堕榄伴榄ら槌奸澈槌介晨槌烽磭榇�槌归郴榇堥磪榇勯簝榛撻紡榧愬劀鍎撳剹鍎氬剳鍑炲尨鍙″櫚鍣犲櫘锟�".split("");
+for(j = 0; j != D[232].length; ++j) if(D[232][j].charCodeAt(0) !== 0xFFFD) { e[D[232][j]] = 59392 + j; d[59392 + j] = D[232][j];}
+D[233] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍣冲櫐鍣e櫗鍣插櫈鍣峰湝鍦涘澧藉澧垮⒑澹傚⒓澹嗗瑮瀣欏瑳瀣″瑪瀣撳瑦瀣栧瀣氬瑺瀣炲宥侗宥╁锭宥靛栋宥丢宥ㄥ恫宥动宥村恭骞ㄥ功骞哗寤у沪寤ㄥ互褰嬪炯鎲濇啫鎲栨噮鎲存噯鎳佹噷鎲猴拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥喛鎲告唽鎿楁摉鎿愭搹鎿夋捊鎾夋搩鎿涙摮鎿欐敵鏁挎暭鏂㈡泩鏆炬泙鏇婃泲鏇忔毥鏆绘毢鏇屾湥妯存│姗夋┃妯叉┄妯炬姗┒姗涙妯ㄦ妯绘姗佹┆姗ゆ姗忔姗┅姗犳姗炴〇姗曟姗庢﹩姝曟瓟姝栨娈姣堟瘒姘勬皟姘嗘经婵嬫荆婵囨炯婵庢繄娼炴縿婢芥緸婵婃鲸鐎勬茎婢竞婢惊婵忔究婢革拷".split("");
+for(j = 0; j != D[233].length; ++j) if(D[233][j].charCodeAt(0) !== 0xFFFD) { e[D[233][j]] = 59648 + j; d[59648 + j] = D[233][j];}
+D[234] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷婢㈡繅婢繊婢静婢扮噮鐕傜喛鐔哥嚃鐕�鐕佺噵鐕旂噴鐕囩噺鐔界嚇鐔肩噯鐕氱嚊鐘濈姙鐛╃崷鐛х崿鐛ョ崼鐛懣鐠氱挔鐠旂拻鐠曠挕鐢嬬杸鐦槶鐦辩樈鐦崇樇鐦电槻鐦扮毣鐩︾灇鐬濈灐鐬滅灈鐬㈢灒鐬曠灆锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐬楃纾╃%纾纾g纾$"纾纾犵Δ绌勭﹫绌囩绐哥绐辩绡炵绡х瘽绡曠绡氱绡圭瘮绡绡滅绡樼療绯掔硵绯楃硱绯戠笒绺$笚绺岀笩绺犵笓绺庣笢绺曠笟绺㈢笅绺忕笘绺嶇笖绺ョ袱缃冪交缃肩胶缇辩刊鑰�╄伂鑶辫啨鑶喒鑶佃啱鑶拌啲鑶磋啿鑶疯啩鑷茶墪鑹栬墬钑栬晠钑晬钑撹暋钑橈拷".split("");
+for(j = 0; j != D[234].length; ++j) if(D[234][j].charCodeAt(0) !== 0xFFFD) { e[D[234][j]] = 59904 + j; d[59904 + j] = D[234][j];}
+D[235] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷钑�钑嗚暏钑佽暍钑勮晳钑囪暎钄捐暃钑辫晭钑暤钑曡暓钑犺枌钑﹁暆钑旇暐钑櫍铏ヨ櫎铻涜瀼铻楄灀铻掕瀳铻佽灃铻樿澒铻囪灒铻呰瀽铻戣灊铻勮灁铻滆灇铻夎瑜﹁ぐ瑜ぎ瑜цけ瑜㈣ぉ瑜hく瑜瑙辫珷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷璜㈣璜磋璜濊瑪璜よ珶璜拌珗璜炶璜ㄨ璜璨戣矑璨愯车璩潮璩拌吵璧诞瓒ヨ锭韪宠妇韪歌箑韫呰付韪艰附韫佽赴韪胯航杓惰籍杓佃疾杓硅挤杓撮伓閬归伝閭嗛兒閯抽劦閯堕啌閱愰啈閱嶉啅閷ч尀閷堥専閷嗛審閸洪尭閷奸寷閷i寬閷侀崋閷寧閷嶉媼閷濋嫼閷ラ寭閶归嫹閷撮寕閷ら嬁閷╅尮閷甸尓閷旈寣锟�".split("");
+for(j = 0; j != D[235].length; ++j) if(D[235][j].charCodeAt(0) !== 0xFFFD) { e[D[235][j]] = 60160 + j; d[60160 + j] = D[235][j];}
+D[236] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷閷嬮嬀閷夐寑閶婚寲闁奸棈闁鹃柟闁洪柖闁块柕闁介毄闆旈湅闇掗湊闉欓灄闉旈煱闊搁牭闋牪椁ら椁чぉ棣為М椐Д椐らО椐iИ椐╅Ё楠归楠撮楂堕楂归楝抽畝楫呴畤榄奸榄婚畟楫撻畳楫愰楫曪拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介楫堥触榇楅礌榇為磾榇╅礉榇橀储榇愰礄榇熼簣楹嗛簢楹涵榛曢粬榛洪紥榧藉劍鍎ュ劉鍎ゅ劆鍎╁嫶鍤撳殞鍤嶅殕鍤勫殐鍣惧殏鍣垮殎澹栧澹忓瀣瀣插瀣瀣﹀瀣瀵卞宥峰宫骞揪寰绘噧鎲垫喖鎳ф嚑鎳ユ嚖鎳ㄦ嚍鎿摡鎿f摣鎿ゆ摠鏂佹杸鏂舵棜鏇掓獚妾栨獊妾ユ獕妾熸獩妾℃獮妾囨獡妾庯拷".split("");
+for(j = 0; j != D[236].length; ++j) if(D[236][j].charCodeAt(0) !== 0xFFFD) { e[D[236][j]] = 60416 + j; d[60416 + j] = D[236][j];}
+D[237] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷妾曟獌妾ㄦ妾戞┛妾︽獨妾呮獙妾掓瓫娈皦婵屾京婵存繑婵f繙婵咖婵︽繛婵叉繚婵㈡卡鐕$嚤鐕ㄧ嚥鐕ょ嚢鐕㈢嵆鐛嵂鐠楃挷鐠拹鐠挱鐠辩挜鐠攼鐢戠敀鐢忕杽鐧冪檲鐧夌檱鐨ょ洨鐬电灚鐬茬灧鐬讹拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界灤鐬辩灗鐭扮3纾界纾荤<纾茬纾圭>绀勭Λ绂ㄧ绌涚〇绌樼绌氱绔�绔佺皡绨忕绨�绡跨绨庣绨嬬绨傜皦绨冪皝绡哥绨嗙绡辩皭绨婄敞绺讣绻傜赋椤堢父绺箟绻�绻囩俯绻岀赴绺荤付绻勭负缃呯娇缃剧浇缈寸坎鑰喕鑷勮噷鑷婅噮鑷囪喖鑷╄墰鑹氳墱钖冭杸钖忚枾钖曡枲钖嬭枺钑昏枻钖氳枮锟�".split("");
+for(j = 0; j != D[237].length; ++j) if(D[237][j].charCodeAt(0) !== 0xFFFD) { e[D[237][j]] = 60672 + j; d[60672 + j] = D[237][j];}
+D[238] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷钑疯暭钖夎枴钑鸿暩钑楄枎钖栬枂钖嶈枡钖濊杹钖㈣杺钖堣枀钑硅暥钖樿枑钖熻櫒铻捐灙铻焻铻拌灛铻硅灥铻艰灝锜夎焹锜傝煂铻疯灟锜勮煀铻磋灦铻胯灨铻借煘铻茶さ瑜宠ぜ瑜捐瑗掕し瑗傝Ν瑕Ξ瑙茶С璎烇拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟借瑯璎栬瑧璎呰瑡璎㈣瑥璎掕瑫璎囪瑣璎堣瑔璎滆瑩璎氳睆璞拌辈璞辫悲璨曡矓璩硅弹韫庤箥韫撹箰韫岃箛杞冭絸閭呴伨閯搁啔閱㈤啗閱欓啛閱¢啙閱犻帯閹冮幆閸ら崠閸囬嵓閸橀崪閸堕崏閸愰崙閸犻嵀閹忛崒閸嵐閸楅崟閸掗崗閸遍嵎閸婚崱閸為崳閸ч巰閸庨崣闂囬梹闂夐梼闂呴柗闅毎闅湢闇熼湗闇濋湙闉氶灐闉滐拷".split("");
+for(j = 0; j != D[238].length; ++j) if(D[238][j].charCodeAt(0) !== 0xFFFD) { e[D[238][j]] = 60928 + j; d[60928 + j] = D[238][j];}
+D[239] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷闉為灊闊曢煍闊遍椤勯椤夐椤冮ぅ椁が椁こ椁查く椁け椁伴棣iΑ楱傞Ш椐撮Х椐归Ц椐堕Щ椐介Ь椐奸▋楠鹃楂介瑏楂奸瓐楫氶楫為疀楫﹂楫ラ楫嗛楫犻榇抽祦榈ч炊榇疮榇遍锤榇帮拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介祬榈傞祪榇鹃捶榈�榇界康榇簥楹夐簫楹伴粓榛氶换榛块激榧i饥榻旈緺鍎卞劖鍎殬鍤滃殫鍤氬殱鍤欏グ瀣煎暴灞穩骞巩鎳樻嚐鎳嚠鎳辨嚜鎳版嚝鎳栨嚛鎿挎攧鎿芥摳鏀佹攦鎿兼枖鏃涙洑鏇涙洏娅呮妾芥娅嗘妾舵娅囨妾瓰姣夋皨鐎囩�岀�嶇�佺�呯�旂�庢靠鐎�婵荤�︽考婵风�婄垇鐕跨嚬鐖冪嚱鐛讹拷".split("");
+for(j = 0; j != D[239].length; ++j) if(D[239][j].charCodeAt(0) !== 0xFFFD) { e[D[239][j]] = 61184 + j; d[61184 + j] = D[239][j];}
+D[240] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐠哥搥鐠电搧鐠剧挾鐠荤搨鐢旂敁鐧滅櫎鐧欑檺鐧撶櫁鐧氱殾鐨界洭鐭傜灪纾跨绀撶绀夌绀掔绂Μ绌熺皽绨╃皺绨犵盁绨皾绨︾皑绨㈢哎绨扮箿绻愮箹绻g箻绻㈢篃绻戠範绻楃箵缇电境缈风扛鑱佃噾鑷掞拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟借噽鑹熻墳钖磋梿钘�钘冭梻钖宠柕钖借棁钘勮柨钘嬭棊钘堣梾钖辫柖钘掕槫钖歌柗钖捐櫓锜ц煢锜㈣煕锜煪锜ヨ煙锜宠煠锜旇煖锜撹煭锜樿煟铻よ煑锜欒爜锜磋煥锜濊瑗嬭瑗岃瑗愯瑗夎璎ц璎宠璎佃瓏璎璎捐璎ヨ璎﹁璎璎昏璎鸿眰璞佃矙璨樿矖璩捐磩璐傝磤韫滆耿韫犺箺韫栬篂韫ヨ恭锟�".split("");
+for(j = 0; j != D[240].length; ++j) if(D[240][j].charCodeAt(0) !== 0xFFFD) { e[D[240][j]] = 61440 + j; d[61440 + j] = D[240][j];}
+D[241] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷韫涜箽韫¤節韫╄箶杞嗚絿杞堣綃閯ㄩ労閯婚劸閱ㄩ啣閱ч啹閱幍閹岄帓閹烽帥閹濋帀閹ч帋閹帪閹﹂帟閹堥帣閹熼帊閹遍帒閹查帳閹ㄩ幋閹i帴闂掗棑闂戦毘闆楅洑宸傞洘闆橀洕闇i湤闇ラ灛闉灗闉灓闉拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介灑闉ラ煑闊欓煐闊橀熀椤愰椤掗⒏楗侀ぜ椁洪◤楱嬮▔楱嶉▌楱戦▕楱呴▏楱嗛珋楂滈瑘楝勯瑓楝╅榄婇瓕榄嬮瘒榀嗛瘍楫块瘉楫甸榀撻榀勯楫介禍榈撻祻榈婇禌榈嬮禉榈栭祵榈楅祾榈旈禑榈橀禋楹庨簩榛熼紒榧�榧栭讥榧吉榧╅绩榻岄綍鍎村劦鍔栧嫹鍘村毇鍤殾鍤у毆鍤澹濆澶掑瀣惧宸冨拱锟�".split("");
+for(j = 0; j != D[241].length; ++j) if(D[241][j].charCodeAt(0) !== 0xFFFD) { e[D[241][j]] = 61696 + j; d[61696 + j] = D[241][j];}
+D[242] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷寰挎嚮鏀囨攼鏀嶆攭鏀屾攷鏂勬棡鏃濇洖娅ф珷娅屾珣娅欐珛娅熸珳娅愭娅忔珝娅炴瓲娈版皩鐎欑�х�犵�栫��$�㈢�g�╃�楃�ょ�滅�垖鐖婄垏鐖傜垍鐘ョ姦鐘ょ姡鐘$搵鐡呯挿鐡冪敄鐧犵焿鐭婄焺鐭辩绀涳拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界ぁ绀滅绀炵Π绌х┄绨崇凹绨圭艾绨荤超绯苟绻电垢绻扮狗绻购绻茬勾绻ㄧ綃缃婄緝缇嗙痉缈界烤鑱歌嚄鑷曡墹鑹¤墸钘棻钘棛钘¤棬钘氳棗钘棽钘歌棙钘熻棧钘滆棏钘拌棪钘棡钘㈣爛锜鸿爟锜惰煼锠夎爩锠嬭爢锜艰爤锜胯爦锠傝ア瑗氳瑗楄ァ瑗滆瑗濊瑕堣Ψ瑕惰Ф璀愯瓐璀婅瓈璀撹瓥璀旇瓔璀曪拷".split("");
+for(j = 0; j != D[242].length; ++j) if(D[242][j].charCodeAt(0) !== 0xFFFD) { e[D[242][j]] = 61952 + j; d[61952 + j] = D[242][j];}
+D[243] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷璀戣瓊璀掕瓧璞冭狈璞惰矚璐嗚磭璐夎冬瓒董瓒弓韫歌钩韫汞韫昏粋杞掕綉杞忚綈杞撹敬閰�閯块啺閱彏閺囬弿閺傞彋閺愰徆閺弻閺欓帺閺﹂強閺旈彯閺i彆閺勯弾閺�閺掗彠闀介棜闂涢洝闇╅湯闇湪闇︼拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介灣闉烽灦闊濋煘闊熼椤欓椤楅⒖棰介⒒棰鹃楗囬棣﹂Η楱氶〞楱ラ楱ら楱㈤楱чǎ楱為楱旈珎楝嬮瑠楝庨瑢楝烽榀癄榀為榀﹂榀伴瘮榀楅榀滈瘷榀ラ瘯榀¢瘹榈烽秮槎婇秳槎堥当槎�榈搁秵槎嬮秾榈介但榈撮档榈伴旦槎呴党榈婚秱榈倒榈块秶榈ㄩ簲楹戦粈榛奸辑榻�榻侀綅榻栭綏榻樺尫鍤诧拷".split("");
+for(j = 0; j != D[243].length; ++j) if(D[243][j].charCodeAt(0) !== 0xFFFD) { e[D[243][j]] = 62208 + j; d[62208 + j] = D[243][j];}
+D[244] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍤靛毘澹e瓍宸嗗穱寤化蹇�蹇佹嚬鏀楁敄鏀曟敁鏃熸洦鏇f洡娅虫娅娅规娅鐎肩�电��风�寸�辩亗鐎哥�跨�虹�圭亐鐎荤�崇亖鐖撶垟鐘ㄧ嵔鐛肩捄鐨毆鐨剧洯鐭岀煄鐭忕煃鐭茬ぅ绀gぇ绀ㄧい绀╋拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界Σ绌┈绌绫夌眻绫婄眹绫呯钞绻荤咕绾佺簚缇虹靠鑱硅嚊鑷欒垕鑹ㄨ墿铇㈣椏铇佽椌铇涜榾钘惰槃铇夎槄铇岃椊锠欒爯锠戣牀锠撹爾瑗hウ瑕硅Х璀犺璀濊璀h璀ц瓒簡韬堣簞杞欒綎杞楄綍杞樿綒閭嶉厓閰侀喎閱甸啿閱抽悑閻撻徎閻犻悘閻旈従閻曢悙閻ㄩ悪閻嶉彽閻�閺烽悋閻庨悥閻掗徍閻夐徃閻婇徔锟�".split("");
+for(j = 0; j != D[244].length; ++j) if(D[244][j].charCodeAt(0) !== 0xFFFD) { e[D[244][j]] = 62464 + j; d[62464 + j] = D[244][j];}
+D[245] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷閺奸悓閺堕悜閻嗛棡闂犻棢闇湳闉归灮闊介熅椤犻、椤i椋侀楗愰楗欓楗嬮楱查ù楱遍ì楱ǘ楱╅ó楱搁ō楂囬珚楂嗛瑦楝掗瑧榘嬮皥榀烽皡榘掗楸�榘囬皫榘嗛皸榘旈皦槎熼稒槎ら稘槎掗稑槎愰稕锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷槎犻稊槎滈丢槎楅丁槎氶盯槎ㄩ稙槎i犊槎╅稏槎﹂锭楹欓簺楹氶互榛ら户榛﹂及榧經榻犻綖榻濋綑榫戝労鍎瑰姌鍔楀泝鍤藉毦瀛堝瓏宸嬪窂寤辨嚱鏀涙瑐娅兼瑑娅告瑎鐏冪亜鐏婄亪鐏夌亝鐏嗙垵鐖氱垯鐛剧敆鐧煇绀け绀睌绫撶巢绾婄簢绾堢簨绾嗙簫缃嶇净鑰拌嚌铇樿槳铇﹁槦铇h槣铇欒槯铇槨铇犺槱铇炶槬锟�".split("");
+for(j = 0; j != D[245].length; ++j) if(D[245][j].charCodeAt(0) !== 0xFFFD) { e[D[245][j]] = 62720 + j; d[62720 + j] = D[245][j];}
+D[246] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锠╄牆锠涜牋锠よ牅锠瑗ォ瑗カ瑙鸿璀歌瓍璀鸿璐愯磾瓒簬韬岃綖杞涜綕閰嗛厔閰呴喒閻块惢閻堕惄閻介惣閻伴惞閻惙閻憖閻遍棩闂ら棧闇甸満闉块煛椤ら椋嗛楗橀楱归ń椹嗛﹦椹傞﹣楱猴拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介楂嶉瑫楝楅瑯楝栭榄掗矮榘濋皽榘埃榘ㄩ癌榘ら啊槎烽抖槎奸穪榉囬穵榉忛毒榉呴穬槎婚兜榉庨豆槎洪冬榉堥侗槎穼槎抽穽槎查购楹滈猾榛画榧涢紭榧氶急榻庨渐榻ら緬浜瑰泦鍥呭泲濂卞瓔瀛屽窌宸戝徊鏀℃敔鏀︽敘娆嬫瑘娆夋皪鐏曠仏鐏楃亽鐖炵垷鐘╃嵖鐡樼摃鐡欑摋鐧毉绀电Υ绌扮┍绫楃睖绫欑睕绫氾拷".split("");
+for(j = 0; j != D[246].length; ++j) if(D[246][j].charCodeAt(0) !== 0xFFFD) { e[D[246][j]] = 62976 + j; d[62976 + j] = D[246][j];}
+D[247] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绯寸潮绾戠綇缇囪嚍鑹槾铇佃槼铇槻铇惰牞锠ㄨ牔锠牓瑗辫瑕捐Щ璀捐畡璁傝畣璁呰璐曡簳韬旇簹韬掕簮韬栬簵杞犺舰閰囬憣閼愰憡閼嬮憦閼囬憛閼堥憠閼嗛溈闊i—椤╅楗旈椹庨椹旈椹忛﹫椹婏拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介椹掗楂愰瑱楝榄栭瓡楸嗛眻榘块眲榘归俺楸侀凹榘烽按榘查敖榘堕窙榉掗窞榉氶穻榉愰窚榉戦窡榉╅窓榉橀窎榉甸窌榉濋憾榛伴嫉榧抽疾榻傞将榫曢劲鍎藉姍澹ㄥ'濂插瓖宸樿牤褰忔垇鎴冩垊鏀╂敟鏂栨洬娆戞瑨娆忔瘖鐏涚仛鐖㈢巶鐜佺巸鐧扮煍绫х宝绾曡壃铇鸿檧铇硅樇铇辫樆铇捐牥锠茶牣锠宠ザ瑗磋コ瑙撅拷".split("");
+for(j = 0; j != D[247].length; ++j) if(D[247][j].charCodeAt(0) !== 0xFFFD) { e[D[247][j]] = 63232 + j; d[63232 + j] = D[247][j];}
+D[248] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷璁岃畮璁嬭畧璞呰礄韬樿饯杞i喖閼㈤憰閼濋憲閼為焺闊呴爛椹栭楝為瑹楝犻睊楸橀睈楸婇睄楸嬮睍楸欓睂楸庨坊榉烽矾榉i帆榉搁筏榉堕贰榉乏榉查钒榉㈤番榉撮烦榉ㄩ翻榛傞粣榛查怀榧嗛紲榧搁挤榧堕絻榻忥拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介奖榻伴疆榻洆鍥嶅瓗灞敪鏇洰娆撶仧鐏$仢鐏犵垼鐡涚摜鐭曠じ绂风Χ绫簵缇夎壄铏冭牳锠疯牭琛嬭當璁曡簽韬熻籂韬濋喚閱介噦閼懆閼╅洢闈嗛潈闈囬焽闊ラ楂曢瓩楸i抱楸﹂雹楸為睜楦傞肪楦囬竷楦嗛竻楦�楦侀笁榉块方楦勯籂榧為絾榻撮降榻跺洈鏀柛娆樻瑱娆楁瑲鐏㈢垿鐘煒鐭欑す绫╃鲍绯剁簹锟�".split("");
+for(j = 0; j != D[248].length; ++j) if(D[248][j].charCodeAt(0) !== 0xFFFD) { e[D[248][j]] = 63488 + j; d[63488 + j] = D[248][j];}
+D[249] = "锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绾樼簺绾欒嚑鑷¤檰铏囪檲瑗硅ズ瑗艰セ瑙胯畼璁欒亥韬よ海閼懎閼懕閼抽潐椤查楸ㄩ碑楸笅楦嶉笎楦忛笒楦戦骸榛甸級榻囬礁榻婚胶榻瑰湠鐏︾悲锠艰恫韬﹂噧閼撮懜閼堕懙椹犻贝楸抽北楸甸笖楦撻欢榧婏拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介兢鐏ㄧ仴绯疯櫔锠捐牻锠胯疄璨滆憨杌夐潒椤抽〈椋岄ァ棣─椹﹂┃楝ら笗楦楅綀鎴囨瑸鐖ц檶韬ㄩ拏閽�閽侀┅椹ㄩ楦欑埄铏嬭疅閽冮惫楹风櫟椹焙楦濈仼鐏氦榻鹃綁榫樼閵硅澧绘亽绮у鈺斺暒鈺椻暊鈺暎鈺氣暕鈺濃晵鈺も晻鈺炩暘鈺♀晿鈺р暃鈺撯暐鈺栤暉鈺暍鈺欌暔鈺溾晳鈺愨暛鈺暟鈺枔锟�".split("");
+for(j = 0; j != D[249].length; ++j) if(D[249][j].charCodeAt(0) !== 0xFFFD) { e[D[249][j]] = 63744 + j; d[63744 + j] = D[249][j];}
+return {"enc": e, "dec": d }; })();
+cptable[1250] = (function(){ var d = "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~鈧拷鈥氾拷鈥炩�︹�犫�★拷鈥芭犫�古毰づ脚癸拷鈥樷�欌�溾�濃�⑩�撯�旓拷鈩⑴♀�号浥ヅ九郝犓囁樑伮つ劼β┡灺宦奥彼浥偮绰德堵仿改吪熉荒剿澞九寂斆伱偰偯勀鼓喢嚹屆壞樏嬆毭嵜幠幠惻兣嚸撁斉惷柮椗樑毰懊溍澟⒚熍暶∶⒛兠つ耗嚸嵜┠櫭浢從懪勁埫趁磁懨睹放櫯号泵济脚K�", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d[i]] = i; D[i] = d.charAt(i); } return {"enc": e, "dec": D }; })();
+cptable[1251] = (function(){ var d = "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~袀袃鈥氀撯�炩�︹�犫�♀偓鈥靶夆�剐娦屝嬓徰掆�樷�欌�溾�濃�⑩�撯�旓拷鈩⒀欌�貉氀溠浹熉犘幯炐埪ひ惵β伮┬劼嚶奥毙喲栆懧德堵费戔剸褦禄褬袇褧褩袗袘袙袚袛袝袞袟袠袡袣袥袦袧袨袩袪小孝校肖啸笑效楔些歇蝎鞋协挟携邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌褉褋褌褍褎褏褑褔褕褖褗褘褜褝褞褟", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d[i]] = i; D[i] = d.charAt(i); } return {"enc": e, "dec": D }; })();
+cptable[1252] = (function(){ var d = "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~鈧拷鈥毱掆�炩�︹�犫�∷嗏�芭犫�古掞拷沤锟斤拷鈥樷�欌�溾�濃�⑩�撯�斔溾劉拧鈥号擄拷啪鸥聽隆垄拢陇楼娄搂篓漏陋芦卢颅庐炉掳卤虏鲁麓碌露路赂鹿潞禄录陆戮驴脌脕脗脙脛脜脝脟脠脡脢脣脤脥脦脧脨脩脪脫脭脮脰脳脴脵脷脹脺脻脼脽脿谩芒茫盲氓忙莽猫茅锚毛矛铆卯茂冒帽貌贸么玫枚梅酶霉煤没眉媒镁每", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d[i]] = i; D[i] = d.charAt(i); } return {"enc": e, "dec": D }; })();
+cptable[1253] = (function(){ var d = "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~鈧拷鈥毱掆�炩�︹�犫�★拷鈥帮拷鈥癸拷锟斤拷锟斤拷鈥樷�欌�溾�濃�⑩�撯�旓拷鈩拷鈥猴拷锟斤拷锟铰犖呂喡Bぢヂβ╋拷芦卢颅庐鈥暵奥甭猜澄劼德堵肺埼壩娐晃屄轿幬徫愇懳捨撐斘曃栁椢樜櫸毼浳溛澪炍熚犖★拷危韦违桅围唯惟为潍维苇萎委伟伪尾纬未蔚味畏胃喂魏位渭谓尉慰蟺蟻蟼蟽蟿蠀蠁蠂蠄蠅蠆蠇蠈蠉蠋锟�", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d[i]] = i; D[i] = d.charAt(i); } return {"enc": e, "dec": D }; })();
+cptable[1254] = (function(){ var d = "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~鈧拷鈥毱掆�炩�︹�犫�∷嗏�芭犫�古掞拷锟斤拷锟解�樷�欌�溾�濃�⑩�撯�斔溾劉拧鈥号擄拷锟脚嘎犅÷⒙Bぢヂβ┞奥甭猜陈绰德堵仿嘎孤郝宦悸铰韭棵�脕脗脙脛脜脝脟脠脡脢脣脤脥脦脧臑脩脪脫脭脮脰脳脴脵脷脹脺陌艦脽脿谩芒茫盲氓忙莽猫茅锚毛矛铆卯茂臒帽貌贸么玫枚梅酶霉煤没眉谋艧每", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d[i]] = i; D[i] = d.charAt(i); } return {"enc": e, "dec": D }; })();
+cptable[1255] = (function(){ var d = "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~鈧拷鈥毱掆�炩�︹�犫�∷嗏�帮拷鈥癸拷锟斤拷锟斤拷鈥樷�欌�溾�濃�⑩�撯�斔溾劉锟解�猴拷锟斤拷锟铰犅÷⒙b偑楼娄搂篓漏脳芦卢颅庐炉掳卤虏鲁麓碌露路赂鹿梅禄录陆戮驴职直植殖执值侄址指止锟街恢贾街局孔�讈讉變装妆撞壮状锟斤拷锟斤拷锟斤拷锟阶愖懽捵撟斪曌栕椬樧欁氉涀溩澴炞熥犠∽⒆Wぷプψёㄗ┳拷锟解�庘�忥拷", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d[i]] = i; D[i] = d.charAt(i); } return {"enc": e, "dec": D }; })();
+cptable[1256] = (function(){ var d = "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~鈧锯�毱掆�炩�︹�犫�∷嗏�百光�古捼嗂樬堏�樷�欌�溾�濃�⑩�撯�斱┾劉趹鈥号撯�屸�嵹郝犡屄⒙Bぢヂβ┶韭奥甭猜陈绰德堵仿嘎关浡宦悸铰矩熪佖∝⒇Xへヘωжㄘ┴柏必藏池簇地睹椮坟肛关嘿�賮賯賰脿賱芒賲賳賴賵莽猫茅锚毛賶賷卯茂賸賹賺賻么購賽梅賾霉賿没眉鈥庘�徾�", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d[i]] = i; D[i] = d.charAt(i); } return {"enc": e, "dec": D }; })();
+cptable[1257] = (function(){ var d = "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~鈧拷鈥氾拷鈥炩�︹�犫�★拷鈥帮拷鈥癸拷篓藝赂锟解�樷�欌�溾�濃�⑩�撯�旓拷鈩拷鈥猴拷炉藳锟铰狅拷垄拢陇锟铰β樎┡柭喡奥甭猜陈绰德堵访嘎古椔宦悸铰久δ勀�膯脛脜臉膾膶脡殴臇蘑亩莫幕艩艃艆脫艑脮脰脳挪艁艢弄脺呕沤脽膮寞膩膰盲氓臋膿膷茅藕臈模姆墨募拧艅艈贸艒玫枚梅懦艂艣奴眉偶啪藱", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d[i]] = i; D[i] = d.charAt(i); } return {"enc": e, "dec": D }; })();
+cptable[1258] = (function(){ var d = "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~鈧拷鈥毱掆�炩�︹�犫�∷嗏�帮拷鈥古掞拷锟斤拷锟解�樷�欌�溾�濃�⑩�撯�斔溾劉锟解�号擄拷锟脚嘎犅÷⒙Bぢヂβ┞奥甭猜陈绰德堵仿嘎孤郝宦悸铰韭棵�脕脗膫脛脜脝脟脠脡脢脣虁脥脦脧膼脩虊脫脭茽脰脳脴脵脷脹脺漂虄脽脿谩芒膬盲氓忙莽猫茅锚毛虂铆卯茂膽帽蹋贸么啤枚梅酶霉煤没眉瓢鈧�", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d[i]] = i; D[i] = d.charAt(i); } return {"enc": e, "dec": D }; })();
+cptable[10000] = (function(){ var d = "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~脛脜脟脡脩脰脺谩脿芒盲茫氓莽茅猫锚毛铆矛卯茂帽贸貌么枚玫煤霉没眉鈥犅奥⒙Bр�⒙睹熉┾劉麓篓鈮犆喢樷垶卤鈮も墺楼碌鈭傗垜鈭徬�鈭衡劍忙酶驴隆卢鈭毱掆増鈭喡烩�β犆�脙脮艗艙鈥撯�斺�溾�濃�樷�櫭封棅每鸥鈦劼も�光�猴瑏铿傗�÷封�氣�炩�懊偯娒伱嬅埫嵜幟徝屆撁旓拷脪脷脹脵谋藛藴炉藰藱藲赂藵藳藝", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d[i]] = i; D[i] = d.charAt(i); } return {"enc": e, "dec": D }; })();
+cptable[10006] = (function(){ var d = "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~脛鹿虏脡鲁脰脺螀脿芒盲蝿篓莽茅猫锚毛拢鈩⒚�⒙解�懊疵堵β姑幻尖�犖撐斘樜浳炍犆熉┪Nр墵掳螄螒卤鈮も墺楼螔螘螙螚螜螝螠桅潍唯惟维螡卢螣巍鈮埼ぢ烩�β犖ノ單埮撯�撯�曗�溾�濃�樷�櫭肺壩娢屛幬屛徬嵨蔽蚕埼次迪單澄肺刮疚何晃嘉轿肯�蠋蟻蟽蟿胃蠅蟼蠂蠀味蠆蠇螑伟锟�", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d[i]] = i; D[i] = d.charAt(i); } return {"enc": e, "dec": D }; })();
+cptable[10007] = (function(){ var d = "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~袗袘袙袚袛袝袞袟袠袡袣袥袦袧袨袩袪小孝校肖啸笑效楔些歇蝎鞋协挟携鈥犅奥⒙Bр�⒙缎喡┾劉袀褣鈮犘冄撯垶卤鈮も墺褨碌鈭傂埿勓斝囇椥壯櫺娧氀樞吢垰茠鈮堚垎芦禄鈥β犘嬔浶屟溠曗�撯�斺�溾�濃�樷�櫭封�炐幯炐徰熲剸衼褢褟邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌褉褋褌褍褎褏褑褔褕褖褗褘褜褝褞陇", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d[i]] = i; D[i] = d.charAt(i); } return {"enc": e, "dec": D }; })();
+cptable[10029] = (function(){ var d = "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~脛膧膩脡膭脰脺谩膮膶盲膷膯膰茅殴藕膸铆膹膾膿臇贸臈么枚玫煤臍臎眉鈥犅澳樎Bр�⒙睹熉┾劉臋篓鈮犇D墹鈮ツ垛垈鈭懪偰荒寄侥灸鼓号吪喤兟垰艅艊鈭喡烩�β犈埮惷暸懪屸�撯�斺�溾�濃�樷�櫭封棅艒艛艜艠鈥光�号櫯柵椗犫�氣�炁∨毰浢伵づッ嵟脚九撁斉毰芭迸才趁澝侥放慌伵寄⑺�", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d[i]] = i; D[i] = d.charAt(i); } return {"enc": e, "dec": D }; })();
+cptable[10079] = (function(){ var d = "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~脛脜脟脡脩脰脺谩脿芒盲茫氓莽茅猫锚毛铆矛卯茂帽贸貌么枚玫煤霉没眉脻掳垄拢搂鈥⒙睹熉┾劉麓篓鈮犆喢樷垶卤鈮も墺楼碌鈭傗垜鈭徬�鈭衡劍忙酶驴隆卢鈭毱掆増鈭喡烩�β犆�脙脮艗艙鈥撯�斺�溾�濃�樷�櫭封棅每鸥鈦劼っ惷懊灻久铰封�氣�炩�懊偯娒伱嬅埫嵜幟徝屆撁旓拷脪脷脹脵谋藛藴炉藰藱藲赂藵藳藝", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d[i]] = i; D[i] = d.charAt(i); } return {"enc": e, "dec": D }; })();
+cptable[10081] = (function(){ var d = "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~脛脜脟脡脩脰脺谩脿芒盲茫氓莽茅猫锚毛铆矛卯茂帽贸貌么枚玫煤霉没眉鈥犅奥⒙Bр�⒙睹熉┾劉麓篓鈮犆喢樷垶卤鈮も墺楼碌鈭傗垜鈭徬�鈭衡劍忙酶驴隆卢鈭毱掆増鈭喡烩�β犆�脙脮艗艙鈥撯�斺�溾�濃�樷�櫭封棅每鸥臑臒陌谋艦艧鈥÷封�氣�炩�懊偯娒伱嬅埫嵜幟徝屆撁旓拷脪脷脹脵锟剿喫溌標櫵毬杆澦浰�", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d[i]] = i; D[i] = d.charAt(i); } return {"enc": e, "dec": D }; })();
+if (typeof module !== 'undefined' && module.exports) module.exports = cptable;
+/* cputils.js (C) 2013-2014 SheetJS -- http://sheetjs.com */
+/*jshint newcap: false */
+(function(root, factory){
+  "use strict";
+  if(typeof cptable === "undefined") {
+    if(typeof require !== "undefined"){
+      var cpt = require('./cpt' + 'able');
+      if (typeof module !== 'undefined' && module.exports) module.exports = factory(cpt);
+      else root.cptable = factory(cpt);
+    } else throw new Error("cptable not found");
+  } else cptable = factory(cptable);
+}(this, function(cpt){
+  "use strict";
+  var magic = {
+    "1200":"utf16le",
+    "1201":"utf16be",
+    "12000":"utf32le",
+    "12001":"utf32be",
+    "16969":"utf64le",
+    "20127":"ascii",
+    "65000":"utf7",
+    "65001":"utf8"
+  };
+
+  var sbcs_cache = [874,1250,1251,1252,1253,1254,1255,1256,10000];
+  var dbcs_cache = [932,936,949,950];
+  var magic_cache = [65001];
+  var magic_decode = {};
+  var magic_encode = {};
+  var cpecache = {};
+  var cpdcache = {};
+
+  var sfcc = function sfcc(x) { return String.fromCharCode(x); };
+  var cca = function cca(x){ return x.charCodeAt(0); };
+
+  var has_buf = (typeof Buffer !== 'undefined');
+  if(has_buf) {
+    var mdl = 1024, mdb = new Buffer(mdl);
+    var make_EE = function make_EE(E){
+      var EE = new Buffer(65536);
+      for(var i = 0; i < 65536;++i) EE[i] = 0;
+      var keys = Object.keys(E), len = keys.length;
+      for(var ee = 0, e = keys[ee]; ee < len; ++ee) {
+        if(!(e = keys[ee])) continue;
+        EE[e.charCodeAt(0)] = E[e];
+      }
+      return EE;
+    };
+    var sbcs_encode = function make_sbcs_encode(cp) {
+      var EE = make_EE(cpt[cp].enc);
+      return function sbcs_e(data, ofmt) {
+        var len = data.length;
+        var out, i, j, D, w;
+        if(typeof data === 'string') {
+          out = Buffer(len);
+          for(i = 0; i < len; ++i) out[i] = EE[data.charCodeAt(i)];
+        } else if(Buffer.isBuffer(data)) {
+          out = Buffer(2*len);
+          j = 0;
+          for(i = 0; i < len; ++i) {
+            D = data[i];
+            if(D < 128) out[j++] = EE[D];
+            else if(D < 224) { out[j++] = EE[((D&31)<<6)+(data[i+1]&63)]; ++i; }
+            else if(D < 240) { out[j++] = EE[((D&15)<<12)+((data[i+1]&63)<<6)+(data[i+2]&63)]; i+=2; }
+            else {
+              w = ((D&7)<<18)+((data[i+1]&63)<<12)+((data[i+2]&63)<<6)+(data[i+3]&63); i+=3;
+              if(w < 65536) out[j++] = EE[w];
+              else { w -= 65536; out[j++] = EE[0xD800 + ((w>>10)&1023)]; out[j++] = EE[0xDC00 + (w&1023)]; }
+            }
+          }
+          out.length = j;
+          out = out.slice(0,j);
+        } else {
+          out = Buffer(len);
+          for(i = 0; i < len; ++i) out[i] = EE[data[i].charCodeAt(0)];
+        }
+        if(ofmt === undefined || ofmt === 'buf') return out;
+        if(ofmt !== 'arr') return out.toString('binary');
+        return [].slice.call(out);
+      };
+    };
+    var sbcs_decode = function make_sbcs_decode(cp) {
+      var D = cpt[cp].dec;
+      var DD = new Buffer(131072), d=0, c;
+      for(d=0;d<D.length;++d) {
+        if(!(c=D[d])) continue;
+        var w = c.charCodeAt(0);
+        DD[2*d] = w&255; DD[2*d+1] = w>>8;
+      }
+      return function sbcs_d(data) {
+        var len = data.length, i=0, j;
+        if(2 * len > mdl) { mdl = 2 * len; mdb = new Buffer(mdl); }
+        if(Buffer.isBuffer(data)) {
+          for(i = 0; i < len; i++) {
+            j = 2*data[i];
+            mdb[2*i] = DD[j]; mdb[2*i+1] = DD[j+1];
+          }
+        } else if(typeof data === "string") {
+          for(i = 0; i < len; i++) {
+            j = 2*data.charCodeAt(i);
+            mdb[2*i] = DD[j]; mdb[2*i+1] = DD[j+1];
+          }
+        } else {
+          for(i = 0; i < len; i++) {
+            j = 2*data[i];
+            mdb[2*i] = DD[j]; mdb[2*i+1] = DD[j+1];
+          }
+        }
+        mdb.length = 2 * len;
+        return mdb.toString('ucs2');
+      };
+    };
+    var dbcs_encode = function make_dbcs_encode(cp) {
+      var E = cpt[cp].enc;
+      var EE = new Buffer(131072);
+      for(var i = 0; i < 131072; ++i) EE[i] = 0;
+      var keys = Object.keys(E);
+      for(var ee = 0, e = keys[ee]; ee < keys.length; ++ee) {
+        if(!(e = keys[ee])) continue;
+        var f = e.charCodeAt(0);
+        EE[2*f] = E[e] & 255; EE[2*f+1] = E[e]>>8;
+      }
+      return function dbcs_e(data, ofmt) {
+        var len = data.length, out = new Buffer(2*len), i, j, jj, k, D;
+        if(typeof data === 'string') {
+          for(i = k = 0; i < len; ++i) {
+            j = data.charCodeAt(i)*2;
+            out[k++] = EE[j+1] || EE[j]; if(EE[j+1] > 0) out[k++] = EE[j];
+          }
+          out.length = k;
+          out = out.slice(0,k);
+        } else if(Buffer.isBuffer(data)) {
+          for(i = k = 0; i < len; ++i) {
+            D = data[i];
+            if(D < 128) j = D;
+            else if(D < 224) { j = ((D&31)<<6)+(data[i+1]&63); ++i; }
+            else if(D < 240) { j = ((D&15)<<12)+((data[i+1]&63)<<6)+(data[i+2]&63); i+=2; }
+            else { j = ((D&7)<<18)+((data[i+1]&63)<<12)+((data[i+2]&63)<<6)+(data[i+3]&63); i+=3; }
+            if(j<65536) { j*=2; out[k++] = EE[j+1] || EE[j]; if(EE[j+1] > 0) out[k++] = EE[j]; }
+            else { jj = j-65536;
+              j=2*(0xD800 + ((jj>>10)&1023)); out[k++] = EE[j+1] || EE[j]; if(EE[j+1] > 0) out[k++] = EE[j];
+              j=2*(0xDC00 + (jj&1023)); out[k++] = EE[j+1] || EE[j]; if(EE[j+1] > 0) out[k++] = EE[j];
+            }
+          }
+          out.length = k;
+          out = out.slice(0,k);
+        } else {
+          for(i = k = 0; i < len; i++) {
+            j = data[i].charCodeAt(0)*2;
+            out[k++] = EE[j+1] || EE[j]; if(EE[j+1] > 0) out[k++] = EE[j];
+          }
+        }
+        if(ofmt === undefined || ofmt === 'buf') return out;
+        if(ofmt !== 'arr') return out.toString('binary');
+        return [].slice.call(out);
+      };
+    };
+    var dbcs_decode = function make_dbcs_decode(cp) {
+      var D = cpt[cp].dec;
+      var DD = new Buffer(131072), d=0, c, w=0, j=0, i=0;
+      for(i = 0; i < 65536; ++i) { DD[2*i] = 0xFF; DD[2*i+1] = 0xFD;}
+      for(d = 0; d < D.length; ++d) {
+        if(!(c=D[d])) continue;
+        w = c.charCodeAt(0);
+        j = 2*d;
+        DD[j] = w&255; DD[j+1] = w>>8;
+      }
+      return function dbcs_d(data) {
+        var len = data.length, out = new Buffer(2*len), i, j, k=0;
+        if(Buffer.isBuffer(data)) {
+          for(i = 0; i < len; i++) {
+            j = 2*data[i];
+            if(DD[j]===0xFF && DD[j+1]===0xFD) { j=2*((data[i]<<8)+data[i+1]); ++i; }
+            out[k++] = DD[j]; out[k++] = DD[j+1];
+          }
+        } else if(typeof data === "string") {
+          for(i = 0; i < len; i++) {
+            j = 2*data.charCodeAt(i);
+            if(DD[j]===0xFF && DD[j+1]===0xFD) { j=2*((data.charCodeAt(i)<<8)+data.charCodeAt(i+1)); ++i; }
+            out[k++] = DD[j]; out[k++] = DD[j+1];
+          }
+        } else {
+          for(i = 0; i < len; i++) {
+            j = 2*data[i];
+            if(DD[j]===0xFF && DD[j+1]===0xFD) { j=2*((data[i]<<8)+data[i+1]); ++i; }
+            out[k++] = DD[j]; out[k++] = DD[j+1];
+          }
+        }
+        out.length = k;
+        return out.toString('ucs2');
+      };
+    };
+    magic_decode[65001] = function utf8_d(data) {
+      var len = data.length, w = 0, ww = 0;
+      if(4 * len > mdl) { mdl = 4 * len; mdb = new Buffer(mdl); }
+      mdb.length = 0;
+      var i = 0;
+      if(len >= 3 && data[0] == 0xEF) if(data[1] == 0xBB && data[2] == 0xBF) i = 3;
+      for(var j = 1, k = 0, D = 0; i < len; i+=j) {
+        j = 1; D = data[i];
+        if(D < 128) w = D;
+        else if(D < 224) { w=(D&31)*64+(data[i+1]&63); j=2; }
+        else if(D < 240) { w=((D&15)<<12)+(data[i+1]&63)*64+(data[i+2]&63); j=3; }
+        else { w=(D&7)*262144+((data[i+1]&63)<<12)+(data[i+2]&63)*64+(data[i+3]&63); j=4; }
+        if(w < 65536) { mdb[k++] = w&255; mdb[k++] = w>>8; }
+        else {
+          w -= 65536; ww = 0xD800 + ((w>>10)&1023); w = 0xDC00 + (w&1023);
+          mdb[k++] = ww&255; mdb[k++] = ww>>>8; mdb[k++] = w&255; mdb[k++] = (w>>>8)&255;
+        }
+      }
+      mdb.length = k;
+      return mdb.toString('ucs2');
+    };
+    magic_encode[65001] = function utf8_e(data, ofmt) {
+      var len = data.length, w = 0, ww = 0, j = 0;
+      var direct = typeof data === "string";
+      if(4 * len > mdl) { mdl = 4 * len; mdb = new Buffer(mdl); }
+      for(var i = 0; i < len; ++i) {
+        w = direct ? data.charCodeAt(i) : data[i].charCodeAt(0);
+        if(w <= 0x007F) mdb[j++] = w;
+        else if(w <= 0x07FF) {
+          mdb[j++] = 192 + (w >> 6);
+          mdb[j++] = 128 + (w&63);
+        } else if(w >= 0xD800 && w <= 0xDFFF) {
+          w -= 0xD800; ++i;
+          ww = (direct ? data.charCodeAt(i) : data[i].charCodeAt(0)) - 0xDC00 + (w << 10);
+          mdb[j++] = 240 + ((ww>>>18) & 0x07);
+          mdb[j++] = 144 + ((ww>>>12) & 0x3F);
+          mdb[j++] = 128 + ((ww>>>6) & 0x3F);
+          mdb[j++] = 128 + (ww & 0x3F);
+        } else {
+          mdb[j++] = 224 + (w >> 12);
+          mdb[j++] = 128 + ((w >> 6)&63);
+          mdb[j++] = 128 + (w&63);
+        }
+      }
+      mdb.length = j;
+      if(ofmt === undefined || ofmt === 'buf') return mdb;
+      if(ofmt !== 'arr') return mdb.toString('binary');
+      return [].slice.call(mdb);
+    };
+  }
+
+  var encache = function encache() {
+    if(has_buf) {
+      if(cpdcache[sbcs_cache[0]]) return;
+      var i, s;
+      for(i = 0; i < sbcs_cache.length; ++i) {
+        s = sbcs_cache[i];
+        if(cpt[s]) {
+          cpdcache[s] = sbcs_decode(s);
+          cpecache[s] = sbcs_encode(s);
+        }
+      }
+      for(i = 0; i < dbcs_cache.length; ++i) {
+        s = dbcs_cache[i];
+        if(cpt[s]) {
+          cpdcache[s] = dbcs_decode(s);
+          cpecache[s] = dbcs_encode(s);
+        }
+      }
+      for(i = 0; i < magic_cache.length; ++i) {
+        s = magic_cache[i];
+        if(magic_decode[s]) cpdcache[s] = magic_decode[s];
+        if(magic_encode[s]) cpecache[s] = magic_encode[s];
+      }
+    }
+  };
+  var cp_decache = function cp_decache(cp) { cpdcache[cp] = cpecache[cp] = undefined; };
+  var decache = function decache() {
+    if(has_buf) {
+      if(!cpdcache[sbcs_cache[0]]) return;
+      sbcs_cache.forEach(cp_decache);
+      dbcs_cache.forEach(cp_decache);
+      magic_cache.forEach(cp_decache);
+    }
+    last_enc = last_cp = undefined;
+  };
+  var cache = {
+    encache: encache,
+    decache: decache,
+    sbcs: sbcs_cache,
+    dbcs: dbcs_cache
+  };
+
+  encache();
+
+  var BM = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+  var SetD = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'(),-./:?";
+  var last_enc, last_cp;
+  var encode = function encode(cp, data, ofmt) {
+    if(cp === last_cp) { return last_enc(data, ofmt); }
+    if(cpecache[cp] !== undefined) { last_enc = cpecache[last_cp=cp]; return last_enc(data, ofmt); }
+    if(has_buf && Buffer.isBuffer(data)) data = data.toString('utf8');
+    var len = data.length;
+    var out = has_buf ? new Buffer(4*len) : [], w, i, j = 0, c, tt, ww;
+    var C = cpt[cp], E, M;
+    if(C && (E=C.enc)) for(i = 0; i < len; ++i, ++j) {
+      w = E[data[i]];
+      out[j] = w&255;
+      if(w > 255) {
+        out[j] = w>>8;
+        out[++j] = w&255;
+      }
+    }
+    else if((M=magic[cp])) switch(M) {
+      case "utf8":
+        if(has_buf && typeof data === "string") { out = new Buffer(data, M); j = out.length; break; }
+        for(i = 0; i < len; ++i, ++j) {
+          w = data[i].charCodeAt(0);
+          if(w <= 0x007F) out[j] = w;
+          else if(w <= 0x07FF) {
+            out[j]   = 192 + (w >> 6);
+            out[++j] = 128 + (w&63);
+          } else if(w >= 0xD800 && w <= 0xDFFF) {
+            w -= 0xD800;
+            ww = data[++i].charCodeAt(0) - 0xDC00 + (w << 10);
+            out[j]   = 240 + ((ww>>>18) & 0x07);
+            out[++j] = 144 + ((ww>>>12) & 0x3F);
+            out[++j] = 128 + ((ww>>>6) & 0x3F);
+            out[++j] = 128 + (ww & 0x3F);
+          } else {
+            out[j]   = 224 + (w >> 12);
+            out[++j] = 128 + ((w >> 6)&63);
+            out[++j] = 128 + (w&63);
+          }
+        }
+        break;
+      case "ascii":
+        if(has_buf && typeof data === "string") { out = new Buffer(data, M); j = out.length; break; }
+        for(i = 0; i < len; ++i, ++j) {
+          w = data[i].charCodeAt(0);
+          if(w <= 0x007F) out[j] = w;
+          else throw new Error("bad ascii " + w);
+        }
+        break;
+      case "utf16le":
+        if(has_buf && typeof data === "string") { out = new Buffer(data, M); j = out.length; break; }
+        for(i = 0; i < len; ++i) {
+          w = data[i].charCodeAt(0);
+          out[j++] = w&255;
+          out[j++] = w>>8;
+        }
+        break;
+      case "utf16be":
+        for(i = 0; i < len; ++i) {
+          w = data[i].charCodeAt(0);
+          out[j++] = w>>8;
+          out[j++] = w&255;
+        }
+        break;
+      case "utf32le":
+        for(i = 0; i < len; ++i) {
+          w = data[i].charCodeAt(0);
+          if(w >= 0xD800 && w <= 0xDFFF) w = 0x10000 + ((w - 0xD800) << 10) + (data[++i].charCodeAt(0) - 0xDC00);
+          out[j++] = w&255; w >>= 8;
+          out[j++] = w&255; w >>= 8;
+          out[j++] = w&255; w >>= 8;
+          out[j++] = w&255;
+        }
+        break;
+      case "utf32be":
+        for(i = 0; i < len; ++i) {
+          w = data[i].charCodeAt(0);
+          if(w >= 0xD800 && w <= 0xDFFF) w = 0x10000 + ((w - 0xD800) << 10) + (data[++i].charCodeAt(0) - 0xDC00);
+          out[j+3] = w&255; w >>= 8;
+          out[j+2] = w&255; w >>= 8;
+          out[j+1] = w&255; w >>= 8;
+          out[j] = w&255; w >>= 8;
+          j+=4;
+        }
+        break;
+      case "utf7":
+        for(i = 0; i < len; i++) {
+          c = data[i];
+          if(c === "+") { out[j++] = 0x2b; out[j++] = 0x2d; continue; }
+          if(SetD.indexOf(c) > -1) { out[j++] = c.charCodeAt(0); continue; }
+          tt = encode(1201, c);
+          out[j++] = 0x2b;
+          out[j++] = BM.charCodeAt(tt[0]>>2);
+          out[j++] = BM.charCodeAt(((tt[0]&0x03)<<4) + ((tt[1]||0)>>4));
+          out[j++] = BM.charCodeAt(((tt[1]&0x0F)<<2) + ((tt[2]||0)>>6));
+          out[j++] = 0x2d;
+        }
+        break;
+      default: throw new Error("Unsupported magic: " + cp + " " + magic[cp]);
+    }
+    else throw new Error("Unrecognized CP: " + cp);
+    out.length = j;
+    out = out.slice(0,j);
+    if(typeof Buffer === 'undefined') return (ofmt == 'str') ? out.map(sfcc).join("") : out;
+    if(ofmt === undefined || ofmt === 'buf') return out;
+    if(ofmt !== 'arr') return out.toString('binary');
+    return [].slice.call(out);
+  };
+  var decode = function decode(cp, data) {
+    var F; if((F=cpdcache[cp])) return F(data);
+    var len = data.length, out = new Array(len), w, i, j = 1, k = 0, ww;
+    var C = cpt[cp], D, M;
+    if(C && (D=C.dec)) {
+      if(typeof data === "string") data = data.split("").map(cca);
+      for(i = 0; i < len; i+=j) {
+        j = 2;
+        w = D[(data[i]<<8)+ data[i+1]];
+        if(!w) {
+          j = 1;
+          w = D[data[i]];
+        }
+        if(!w) throw new Error('Unrecognized code: ' + data[i] + ' ' + data[i+j-1] + ' ' + i + ' ' + j + ' ' + D[data[i]]);
+        out[k++] = w;
+      }
+    }
+    else if((M=magic[cp])) switch(M) {
+      case "utf8":
+        i = 0;
+        if(len >= 3 && data[0] == 0xEF) if(data[1] == 0xBB && data[2] == 0xBF) i = 3;
+        for(; i < len; i+=j) {
+          j = 1;
+          if(data[i] < 128) w = data[i];
+          else if(data[i] < 224) { w=(data[i]&31)*64+(data[i+1]&63); j=2; }
+          else if(data[i] < 240) { w=((data[i]&15)<<12)+(data[i+1]&63)*64+(data[i+2]&63); j=3; }
+          else { w=(data[i]&7)*262144+((data[i+1]&63)<<12)+(data[i+2]&63)*64+(data[i+3]&63); j=4; }
+          if(w < 65536) { out[k++] = String.fromCharCode(w); }
+          else {
+            w -= 65536; ww = 0xD800 + ((w>>10)&1023); w = 0xDC00 + (w&1023);
+            out[k++] = String.fromCharCode(ww); out[k++] = String.fromCharCode(w);
+          }
+        }
+        break;
+      case "ascii":
+        if(has_buf && Buffer.isBuffer(data)) return data.toString(M);
+        for(i = 0; i < len; i++) out[i] = String.fromCharCode(data[i]);
+        k = len; break;
+      case "utf16le":
+        i = 0;
+        if(len >= 2 && data[0] == 0xFF) if(data[1] == 0xFE) i = 2;
+        if(has_buf && Buffer.isBuffer(data)) return data.toString(M);
+        j = 2;
+        for(; i < len; i+=j) {
+          out[k++] = String.fromCharCode((data[i+1]<<8) + data[i]);
+        }
+        break;
+      case "utf16be":
+        i = 0;
+        if(len >= 2 && data[0] == 0xFE) if(data[1] == 0xFF) i = 2;
+        j = 2;
+        for(; i < len; i+=j) {
+          out[k++] = String.fromCharCode((data[i]<<8) + data[i+1]);
+        }
+        break;
+      case "utf32le":
+        i = 0;
+        if(len >= 4 && data[0] == 0xFF) if(data[1] == 0xFE && data[2] == 0 && data[3] == 0) i = 4;
+        j = 4;
+        for(; i < len; i+=j) {
+          w = (data[i+3]<<24) + (data[i+2]<<16) + (data[i+1]<<8) + (data[i]);
+          if(w > 0xFFFF) {
+            w -= 0x10000;
+            out[k++] = String.fromCharCode(0xD800 + ((w >> 10) & 0x3FF));
+            out[k++] = String.fromCharCode(0xDC00 + (w & 0x3FF));
+          }
+          else out[k++] = String.fromCharCode(w);
+        }
+        break;
+      case "utf32be":
+        i = 0;
+        if(len >= 4 && data[3] == 0xFF) if(data[2] == 0xFE && data[1] == 0 && data[0] == 0) i = 4;
+        j = 4;
+        for(; i < len; i+=j) {
+          w = (data[i]<<24) + (data[i+1]<<16) + (data[i+2]<<8) + (data[i+3]);
+          if(w > 0xFFFF) {
+            w -= 0x10000;
+            out[k++] = String.fromCharCode(0xD800 + ((w >> 10) & 0x3FF));
+            out[k++] = String.fromCharCode(0xDC00 + (w & 0x3FF));
+          }
+          else out[k++] = String.fromCharCode(w);
+        }
+        break;
+      case "utf7":
+        i = 0;
+        if(len >= 4 && data[0] == 0x2B && data[1] == 0x2F && data[2] == 0x76) {
+          if(len >= 5 && data[3] == 0x38 && data[4] == 0x2D) i = 5;
+          else if(data[3] == 0x38 || data[3] == 0x39 || data[3] == 0x2B || data[3] == 0x2F) i = 4;
+        }
+        for(; i < len; i+=j) {
+          if(data[i] !== 0x2b) { j=1; out[k++] = String.fromCharCode(data[i]); continue; }
+          j=1;
+          if(data[i+1] === 0x2d) { j = 2; out[k++] = "+"; continue; }
+          while(String.fromCharCode(data[i+j]).match(/[A-Za-z0-9+\/]/)) j++;
+          var dash = 0;
+          if(data[i+j] === 0x2d) { ++j; dash=1; }
+          var tt = [];
+          var o64;
+          var c1, c2, c3;
+          var e1, e2, e3, e4;
+          for(var l = 1; l < j - dash;) {
+            e1 = BM.indexOf(String.fromCharCode(data[i+l++]));
+            e2 = BM.indexOf(String.fromCharCode(data[i+l++]));
+            c1 = e1 << 2 | e2 >> 4;
+            tt.push(c1);
+            e3 = BM.indexOf(String.fromCharCode(data[i+l++]));
+            if(e3 === -1) break;
+            c2 = (e2 & 15) << 4 | e3 >> 2;
+            tt.push(c2);
+            e4 = BM.indexOf(String.fromCharCode(data[i+l++]));
+            if(e4 === -1) break;
+            c3 = (e3 & 3) << 6 | e4;
+            if(e4 < 64) tt.push(c3);
+          }
+          if((tt.length & 1) === 1) tt.length--;
+          o64 = decode(1201, tt);
+          for(l = 0; l < o64.length; ++l) out[k++] = o64[l];
+        }
+        break;
+      default: throw new Error("Unsupported magic: " + cp + " " + magic[cp]);
+    }
+    else throw new Error("Unrecognized CP: " + cp);
+    out.length = k;
+    return out.join("");
+  };
+  var hascp = function hascp(cp) { return cpt[cp] || magic[cp]; };
+  cpt.utils = { decode: decode, encode: encode, hascp: hascp, magic: magic, cache:cache };
+  return cpt;
+}));
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/dist/jszip.js b/Source/UBCS-WEB/src/config/js-xlsx-master/dist/jszip.js
new file mode 100644
index 0000000..51ef5da
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/dist/jszip.js
@@ -0,0 +1,8982 @@
+/*!
+
+JSZip - A Javascript class for generating and reading zip files
+<http://stuartk.com/jszip>
+
+(c) 2009-2014 Stuart Knightley <stuart [at] stuartk.com>
+Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/master/LICENSE.markdown.
+
+JSZip uses the library pako released under the MIT license :
+https://github.com/nodeca/pako/blob/master/LICENSE
+*/
+!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.JSZip=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
+'use strict';
+// private property
+var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
+
+
+// public method for encoding
+exports.encode = function(input, utf8) {
+    var output = "";
+    var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
+    var i = 0;
+
+    while (i < input.length) {
+
+        chr1 = input.charCodeAt(i++);
+        chr2 = input.charCodeAt(i++);
+        chr3 = input.charCodeAt(i++);
+
+        enc1 = chr1 >> 2;
+        enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
+        enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
+        enc4 = chr3 & 63;
+
+        if (isNaN(chr2)) {
+            enc3 = enc4 = 64;
+        }
+        else if (isNaN(chr3)) {
+            enc4 = 64;
+        }
+
+        output = output + _keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4);
+
+    }
+
+    return output;
+};
+
+// public method for decoding
+exports.decode = function(input, utf8) {
+    var output = "";
+    var chr1, chr2, chr3;
+    var enc1, enc2, enc3, enc4;
+    var i = 0;
+
+    input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
+
+    while (i < input.length) {
+
+        enc1 = _keyStr.indexOf(input.charAt(i++));
+        enc2 = _keyStr.indexOf(input.charAt(i++));
+        enc3 = _keyStr.indexOf(input.charAt(i++));
+        enc4 = _keyStr.indexOf(input.charAt(i++));
+
+        chr1 = (enc1 << 2) | (enc2 >> 4);
+        chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
+        chr3 = ((enc3 & 3) << 6) | enc4;
+
+        output = output + String.fromCharCode(chr1);
+
+        if (enc3 != 64) {
+            output = output + String.fromCharCode(chr2);
+        }
+        if (enc4 != 64) {
+            output = output + String.fromCharCode(chr3);
+        }
+
+    }
+
+    return output;
+
+};
+
+},{}],2:[function(_dereq_,module,exports){
+'use strict';
+function CompressedObject() {
+    this.compressedSize = 0;
+    this.uncompressedSize = 0;
+    this.crc32 = 0;
+    this.compressionMethod = null;
+    this.compressedContent = null;
+}
+
+CompressedObject.prototype = {
+    /**
+     * Return the decompressed content in an unspecified format.
+     * The format will depend on the decompressor.
+     * @return {Object} the decompressed content.
+     */
+    getContent: function() {
+        return null; // see implementation
+    },
+    /**
+     * Return the compressed content in an unspecified format.
+     * The format will depend on the compressed conten source.
+     * @return {Object} the compressed content.
+     */
+    getCompressedContent: function() {
+        return null; // see implementation
+    }
+};
+module.exports = CompressedObject;
+
+},{}],3:[function(_dereq_,module,exports){
+'use strict';
+exports.STORE = {
+    magic: "\x00\x00",
+    compress: function(content) {
+        return content; // no compression
+    },
+    uncompress: function(content) {
+        return content; // no compression
+    },
+    compressInputType: null,
+    uncompressInputType: null
+};
+exports.DEFLATE = _dereq_('./flate');
+
+},{"./flate":8}],4:[function(_dereq_,module,exports){
+'use strict';
+
+var utils = _dereq_('./utils');
+
+var table = [
+    0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA,
+    0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,
+    0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,
+    0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,
+    0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,
+    0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
+    0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,
+    0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,
+    0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,
+    0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
+    0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940,
+    0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
+    0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116,
+    0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,
+    0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,
+    0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,
+    0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A,
+    0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
+    0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818,
+    0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
+    0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,
+    0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,
+    0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C,
+    0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
+    0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,
+    0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,
+    0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,
+    0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,
+    0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086,
+    0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
+    0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4,
+    0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,
+    0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,
+    0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,
+    0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,
+    0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
+    0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE,
+    0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,
+    0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,
+    0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
+    0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252,
+    0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
+    0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60,
+    0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,
+    0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
+    0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,
+    0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04,
+    0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
+    0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,
+    0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
+    0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,
+    0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,
+    0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E,
+    0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
+    0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,
+    0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,
+    0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,
+    0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,
+    0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0,
+    0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
+    0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6,
+    0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
+    0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,
+    0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D
+];
+
+/**
+ *
+ *  Javascript crc32
+ *  http://www.webtoolkit.info/
+ *
+ */
+module.exports = function crc32(input, crc) {
+    if (typeof input === "undefined" || !input.length) {
+        return 0;
+    }
+
+    var isArray = utils.getTypeOf(input) !== "string";
+
+    if (typeof(crc) == "undefined") {
+        crc = 0;
+    }
+    var x = 0;
+    var y = 0;
+    var b = 0;
+
+    crc = crc ^ (-1);
+    for (var i = 0, iTop = input.length; i < iTop; i++) {
+        b = isArray ? input[i] : input.charCodeAt(i);
+        y = (crc ^ b) & 0xFF;
+        x = table[y];
+        crc = (crc >>> 8) ^ x;
+    }
+
+    return crc ^ (-1);
+};
+// vim: set shiftwidth=4 softtabstop=4:
+
+},{"./utils":21}],5:[function(_dereq_,module,exports){
+'use strict';
+var utils = _dereq_('./utils');
+
+function DataReader(data) {
+    this.data = null; // type : see implementation
+    this.length = 0;
+    this.index = 0;
+}
+DataReader.prototype = {
+    /**
+     * Check that the offset will not go too far.
+     * @param {string} offset the additional offset to check.
+     * @throws {Error} an Error if the offset is out of bounds.
+     */
+    checkOffset: function(offset) {
+        this.checkIndex(this.index + offset);
+    },
+    /**
+     * Check that the specifed index will not be too far.
+     * @param {string} newIndex the index to check.
+     * @throws {Error} an Error if the index is out of bounds.
+     */
+    checkIndex: function(newIndex) {
+        if (this.length < newIndex || newIndex < 0) {
+            throw new Error("End of data reached (data length = " + this.length + ", asked index = " + (newIndex) + "). Corrupted zip ?");
+        }
+    },
+    /**
+     * Change the index.
+     * @param {number} newIndex The new index.
+     * @throws {Error} if the new index is out of the data.
+     */
+    setIndex: function(newIndex) {
+        this.checkIndex(newIndex);
+        this.index = newIndex;
+    },
+    /**
+     * Skip the next n bytes.
+     * @param {number} n the number of bytes to skip.
+     * @throws {Error} if the new index is out of the data.
+     */
+    skip: function(n) {
+        this.setIndex(this.index + n);
+    },
+    /**
+     * Get the byte at the specified index.
+     * @param {number} i the index to use.
+     * @return {number} a byte.
+     */
+    byteAt: function(i) {
+        // see implementations
+    },
+    /**
+     * Get the next number with a given byte size.
+     * @param {number} size the number of bytes to read.
+     * @return {number} the corresponding number.
+     */
+    readInt: function(size) {
+        var result = 0,
+            i;
+        this.checkOffset(size);
+        for (i = this.index + size - 1; i >= this.index; i--) {
+            result = (result << 8) + this.byteAt(i);
+        }
+        this.index += size;
+        return result;
+    },
+    /**
+     * Get the next string with a given byte size.
+     * @param {number} size the number of bytes to read.
+     * @return {string} the corresponding string.
+     */
+    readString: function(size) {
+        return utils.transformTo("string", this.readData(size));
+    },
+    /**
+     * Get raw data without conversion, <size> bytes.
+     * @param {number} size the number of bytes to read.
+     * @return {Object} the raw data, implementation specific.
+     */
+    readData: function(size) {
+        // see implementations
+    },
+    /**
+     * Find the last occurence of a zip signature (4 bytes).
+     * @param {string} sig the signature to find.
+     * @return {number} the index of the last occurence, -1 if not found.
+     */
+    lastIndexOfSignature: function(sig) {
+        // see implementations
+    },
+    /**
+     * Get the next date.
+     * @return {Date} the date.
+     */
+    readDate: function() {
+        var dostime = this.readInt(4);
+        return new Date(
+        ((dostime >> 25) & 0x7f) + 1980, // year
+        ((dostime >> 21) & 0x0f) - 1, // month
+        (dostime >> 16) & 0x1f, // day
+        (dostime >> 11) & 0x1f, // hour
+        (dostime >> 5) & 0x3f, // minute
+        (dostime & 0x1f) << 1); // second
+    }
+};
+module.exports = DataReader;
+
+},{"./utils":21}],6:[function(_dereq_,module,exports){
+'use strict';
+exports.base64 = false;
+exports.binary = false;
+exports.dir = false;
+exports.createFolders = false;
+exports.date = null;
+exports.compression = null;
+exports.comment = null;
+
+},{}],7:[function(_dereq_,module,exports){
+'use strict';
+var utils = _dereq_('./utils');
+
+/**
+ * @deprecated
+ * This function will be removed in a future version without replacement.
+ */
+exports.string2binary = function(str) {
+    return utils.string2binary(str);
+};
+
+/**
+ * @deprecated
+ * This function will be removed in a future version without replacement.
+ */
+exports.string2Uint8Array = function(str) {
+    return utils.transformTo("uint8array", str);
+};
+
+/**
+ * @deprecated
+ * This function will be removed in a future version without replacement.
+ */
+exports.uint8Array2String = function(array) {
+    return utils.transformTo("string", array);
+};
+
+/**
+ * @deprecated
+ * This function will be removed in a future version without replacement.
+ */
+exports.string2Blob = function(str) {
+    var buffer = utils.transformTo("arraybuffer", str);
+    return utils.arrayBuffer2Blob(buffer);
+};
+
+/**
+ * @deprecated
+ * This function will be removed in a future version without replacement.
+ */
+exports.arrayBuffer2Blob = function(buffer) {
+    return utils.arrayBuffer2Blob(buffer);
+};
+
+/**
+ * @deprecated
+ * This function will be removed in a future version without replacement.
+ */
+exports.transformTo = function(outputType, input) {
+    return utils.transformTo(outputType, input);
+};
+
+/**
+ * @deprecated
+ * This function will be removed in a future version without replacement.
+ */
+exports.getTypeOf = function(input) {
+    return utils.getTypeOf(input);
+};
+
+/**
+ * @deprecated
+ * This function will be removed in a future version without replacement.
+ */
+exports.checkSupport = function(type) {
+    return utils.checkSupport(type);
+};
+
+/**
+ * @deprecated
+ * This value will be removed in a future version without replacement.
+ */
+exports.MAX_VALUE_16BITS = utils.MAX_VALUE_16BITS;
+
+/**
+ * @deprecated
+ * This value will be removed in a future version without replacement.
+ */
+exports.MAX_VALUE_32BITS = utils.MAX_VALUE_32BITS;
+
+
+/**
+ * @deprecated
+ * This function will be removed in a future version without replacement.
+ */
+exports.pretty = function(str) {
+    return utils.pretty(str);
+};
+
+/**
+ * @deprecated
+ * This function will be removed in a future version without replacement.
+ */
+exports.findCompression = function(compressionMethod) {
+    return utils.findCompression(compressionMethod);
+};
+
+/**
+ * @deprecated
+ * This function will be removed in a future version without replacement.
+ */
+exports.isRegExp = function (object) {
+    return utils.isRegExp(object);
+};
+
+
+},{"./utils":21}],8:[function(_dereq_,module,exports){
+'use strict';
+var USE_TYPEDARRAY = (typeof Uint8Array !== 'undefined') && (typeof Uint16Array !== 'undefined') && (typeof Uint32Array !== 'undefined');
+
+var pako = _dereq_("pako");
+exports.uncompressInputType = USE_TYPEDARRAY ? "uint8array" : "array";
+exports.compressInputType = USE_TYPEDARRAY ? "uint8array" : "array";
+
+exports.magic = "\x08\x00";
+exports.compress = function(input) {
+    return pako.deflateRaw(input);
+};
+exports.uncompress =  function(input) {
+    return pako.inflateRaw(input);
+};
+
+},{"pako":24}],9:[function(_dereq_,module,exports){
+'use strict';
+
+var base64 = _dereq_('./base64');
+
+/**
+Usage:
+   zip = new JSZip();
+   zip.file("hello.txt", "Hello, World!").file("tempfile", "nothing");
+   zip.folder("images").file("smile.gif", base64Data, {base64: true});
+   zip.file("Xmas.txt", "Ho ho ho !", {date : new Date("December 25, 2007 00:00:01")});
+   zip.remove("tempfile");
+
+   base64zip = zip.generate();
+
+**/
+
+/**
+ * Representation a of zip file in js
+ * @constructor
+ * @param {String=|ArrayBuffer=|Uint8Array=} data the data to load, if any (optional).
+ * @param {Object=} options the options for creating this objects (optional).
+ */
+function JSZip(data, options) {
+    // if this constructor is聽used without聽`new`, it聽adds `new` before聽itself:
+    if(!(this instanceof JSZip)) return new JSZip(data, options);
+
+    // object containing the files :
+    // {
+    //   "folder/" : {...},
+    //   "folder/data.txt" : {...}
+    // }
+    this.files = {};
+
+    this.comment = null;
+
+    // Where we are in the hierarchy
+    this.root = "";
+    if (data) {
+        this.load(data, options);
+    }
+    this.clone = function() {
+        var newObj = new JSZip();
+        for (var i in this) {
+            if (typeof this[i] !== "function") {
+                newObj[i] = this[i];
+            }
+        }
+        return newObj;
+    };
+}
+JSZip.prototype = _dereq_('./object');
+JSZip.prototype.load = _dereq_('./load');
+JSZip.support = _dereq_('./support');
+JSZip.defaults = _dereq_('./defaults');
+
+/**
+ * @deprecated
+ * This namespace will be removed in a future version without replacement.
+ */
+JSZip.utils = _dereq_('./deprecatedPublicUtils');
+
+JSZip.base64 = {
+    /**
+     * @deprecated
+     * This method will be removed in a future version without replacement.
+     */
+    encode : function(input) {
+        return base64.encode(input);
+    },
+    /**
+     * @deprecated
+     * This method will be removed in a future version without replacement.
+     */
+    decode : function(input) {
+        return base64.decode(input);
+    }
+};
+JSZip.compressions = _dereq_('./compressions');
+module.exports = JSZip;
+
+},{"./base64":1,"./compressions":3,"./defaults":6,"./deprecatedPublicUtils":7,"./load":10,"./object":13,"./support":17}],10:[function(_dereq_,module,exports){
+'use strict';
+var base64 = _dereq_('./base64');
+var ZipEntries = _dereq_('./zipEntries');
+module.exports = function(data, options) {
+    var files, zipEntries, i, input;
+    options = options || {};
+    if (options.base64) {
+        data = base64.decode(data);
+    }
+
+    zipEntries = new ZipEntries(data, options);
+    files = zipEntries.files;
+    for (i = 0; i < files.length; i++) {
+        input = files[i];
+        this.file(input.fileName, input.decompressed, {
+            binary: true,
+            optimizedBinaryString: true,
+            date: input.date,
+            dir: input.dir,
+            comment : input.fileComment.length ? input.fileComment : null,
+            createFolders: options.createFolders
+        });
+    }
+    if (zipEntries.zipComment.length) {
+        this.comment = zipEntries.zipComment;
+    }
+
+    return this;
+};
+
+},{"./base64":1,"./zipEntries":22}],11:[function(_dereq_,module,exports){
+(function (Buffer){
+'use strict';
+module.exports = function(data, encoding){
+    return new Buffer(data, encoding);
+};
+module.exports.test = function(b){
+    return Buffer.isBuffer(b);
+};
+}).call(this,(typeof Buffer !== "undefined" ? Buffer : undefined))
+},{}],12:[function(_dereq_,module,exports){
+'use strict';
+var Uint8ArrayReader = _dereq_('./uint8ArrayReader');
+
+function NodeBufferReader(data) {
+    this.data = data;
+    this.length = this.data.length;
+    this.index = 0;
+}
+NodeBufferReader.prototype = new Uint8ArrayReader();
+
+/**
+ * @see DataReader.readData
+ */
+NodeBufferReader.prototype.readData = function(size) {
+    this.checkOffset(size);
+    var result = this.data.slice(this.index, this.index + size);
+    this.index += size;
+    return result;
+};
+module.exports = NodeBufferReader;
+
+},{"./uint8ArrayReader":18}],13:[function(_dereq_,module,exports){
+'use strict';
+var support = _dereq_('./support');
+var utils = _dereq_('./utils');
+var crc32 = _dereq_('./crc32');
+var signature = _dereq_('./signature');
+var defaults = _dereq_('./defaults');
+var base64 = _dereq_('./base64');
+var compressions = _dereq_('./compressions');
+var CompressedObject = _dereq_('./compressedObject');
+var nodeBuffer = _dereq_('./nodeBuffer');
+var utf8 = _dereq_('./utf8');
+var StringWriter = _dereq_('./stringWriter');
+var Uint8ArrayWriter = _dereq_('./uint8ArrayWriter');
+
+/**
+ * Returns the raw data of a ZipObject, decompress the content if necessary.
+ * @param {ZipObject} file the file to use.
+ * @return {String|ArrayBuffer|Uint8Array|Buffer} the data.
+ */
+var getRawData = function(file) {
+    if (file._data instanceof CompressedObject) {
+        file._data = file._data.getContent();
+        file.options.binary = true;
+        file.options.base64 = false;
+
+        if (utils.getTypeOf(file._data) === "uint8array") {
+            var copy = file._data;
+            // when reading an arraybuffer, the CompressedObject mechanism will keep it and subarray() a Uint8Array.
+            // if we request a file in the same format, we might get the same Uint8Array or its ArrayBuffer (the original zip file).
+            file._data = new Uint8Array(copy.length);
+            // with an empty Uint8Array, Opera fails with a "Offset larger than array size"
+            if (copy.length !== 0) {
+                file._data.set(copy, 0);
+            }
+        }
+    }
+    return file._data;
+};
+
+/**
+ * Returns the data of a ZipObject in a binary form. If the content is an unicode string, encode it.
+ * @param {ZipObject} file the file to use.
+ * @return {String|ArrayBuffer|Uint8Array|Buffer} the data.
+ */
+var getBinaryData = function(file) {
+    var result = getRawData(file),
+        type = utils.getTypeOf(result);
+    if (type === "string") {
+        if (!file.options.binary) {
+            // unicode text !
+            // unicode string => binary string is a painful process, check if we can avoid it.
+            if (support.nodebuffer) {
+                return nodeBuffer(result, "utf-8");
+            }
+        }
+        return file.asBinary();
+    }
+    return result;
+};
+
+/**
+ * Transform this._data into a string.
+ * @param {function} filter a function String -> String, applied if not null on the result.
+ * @return {String} the string representing this._data.
+ */
+var dataToString = function(asUTF8) {
+    var result = getRawData(this);
+    if (result === null || typeof result === "undefined") {
+        return "";
+    }
+    // if the data is a base64 string, we decode it before checking the encoding !
+    if (this.options.base64) {
+        result = base64.decode(result);
+    }
+    if (asUTF8 && this.options.binary) {
+        // JSZip.prototype.utf8decode supports arrays as input
+        // skip to array => string step, utf8decode will do it.
+        result = out.utf8decode(result);
+    }
+    else {
+        // no utf8 transformation, do the array => string step.
+        result = utils.transformTo("string", result);
+    }
+
+    if (!asUTF8 && !this.options.binary) {
+        result = utils.transformTo("string", out.utf8encode(result));
+    }
+    return result;
+};
+/**
+ * A simple object representing a file in the zip file.
+ * @constructor
+ * @param {string} name the name of the file
+ * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data
+ * @param {Object} options the options of the file
+ */
+var ZipObject = function(name, data, options) {
+    this.name = name;
+    this.dir = options.dir;
+    this.date = options.date;
+    this.comment = options.comment;
+
+    this._data = data;
+    this.options = options;
+
+    /*
+     * This object contains initial values for dir and date.
+     * With them, we can check if the user changed the deprecated metadata in
+     * `ZipObject#options` or not.
+     */
+    this._initialMetadata = {
+      dir : options.dir,
+      date : options.date
+    };
+};
+
+ZipObject.prototype = {
+    /**
+     * Return the content as UTF8 string.
+     * @return {string} the UTF8 string.
+     */
+    asText: function() {
+        return dataToString.call(this, true);
+    },
+    /**
+     * Returns the binary content.
+     * @return {string} the content as binary.
+     */
+    asBinary: function() {
+        return dataToString.call(this, false);
+    },
+    /**
+     * Returns the content as a nodejs Buffer.
+     * @return {Buffer} the content as a Buffer.
+     */
+    asNodeBuffer: function() {
+        var result = getBinaryData(this);
+        return utils.transformTo("nodebuffer", result);
+    },
+    /**
+     * Returns the content as an Uint8Array.
+     * @return {Uint8Array} the content as an Uint8Array.
+     */
+    asUint8Array: function() {
+        var result = getBinaryData(this);
+        return utils.transformTo("uint8array", result);
+    },
+    /**
+     * Returns the content as an ArrayBuffer.
+     * @return {ArrayBuffer} the content as an ArrayBufer.
+     */
+    asArrayBuffer: function() {
+        return this.asUint8Array().buffer;
+    }
+};
+
+/**
+ * Transform an integer into a string in hexadecimal.
+ * @private
+ * @param {number} dec the number to convert.
+ * @param {number} bytes the number of bytes to generate.
+ * @returns {string} the result.
+ */
+var decToHex = function(dec, bytes) {
+    var hex = "",
+        i;
+    for (i = 0; i < bytes; i++) {
+        hex += String.fromCharCode(dec & 0xff);
+        dec = dec >>> 8;
+    }
+    return hex;
+};
+
+/**
+ * Merge the objects passed as parameters into a new one.
+ * @private
+ * @param {...Object} var_args All objects to merge.
+ * @return {Object} a new object with the data of the others.
+ */
+var extend = function() {
+    var result = {}, i, attr;
+    for (i = 0; i < arguments.length; i++) { // arguments is not enumerable in some browsers
+        for (attr in arguments[i]) {
+            if (arguments[i].hasOwnProperty(attr) && typeof result[attr] === "undefined") {
+                result[attr] = arguments[i][attr];
+            }
+        }
+    }
+    return result;
+};
+
+/**
+ * Transforms the (incomplete) options from the user into the complete
+ * set of options to create a file.
+ * @private
+ * @param {Object} o the options from the user.
+ * @return {Object} the complete set of options.
+ */
+var prepareFileAttrs = function(o) {
+    o = o || {};
+    if (o.base64 === true && (o.binary === null || o.binary === undefined)) {
+        o.binary = true;
+    }
+    o = extend(o, defaults);
+    o.date = o.date || new Date();
+    if (o.compression !== null) o.compression = o.compression.toUpperCase();
+
+    return o;
+};
+
+/**
+ * Add a file in the current folder.
+ * @private
+ * @param {string} name the name of the file
+ * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data of the file
+ * @param {Object} o the options of the file
+ * @return {Object} the new file.
+ */
+var fileAdd = function(name, data, o) {
+    // be sure sub folders exist
+    var dataType = utils.getTypeOf(data),
+        parent;
+
+    o = prepareFileAttrs(o);
+
+    if (o.createFolders && (parent = parentFolder(name))) {
+        folderAdd.call(this, parent, true);
+    }
+
+    if (o.dir || data === null || typeof data === "undefined") {
+        o.base64 = false;
+        o.binary = false;
+        data = null;
+    }
+    else if (dataType === "string") {
+        if (o.binary && !o.base64) {
+            // optimizedBinaryString == true means that the file has already been filtered with a 0xFF mask
+            if (o.optimizedBinaryString !== true) {
+                // this is a string, not in a base64 format.
+                // Be sure that this is a correct "binary string"
+                data = utils.string2binary(data);
+            }
+        }
+    }
+    else { // arraybuffer, uint8array, ...
+        o.base64 = false;
+        o.binary = true;
+
+        if (!dataType && !(data instanceof CompressedObject)) {
+            throw new Error("The data of '" + name + "' is in an unsupported format !");
+        }
+
+        // special case : it's way easier to work with Uint8Array than with ArrayBuffer
+        if (dataType === "arraybuffer") {
+            data = utils.transformTo("uint8array", data);
+        }
+    }
+
+    var object = new ZipObject(name, data, o);
+    this.files[name] = object;
+    return object;
+};
+
+/**
+ * Find the parent folder of the path.
+ * @private
+ * @param {string} path the path to use
+ * @return {string} the parent folder, or ""
+ */
+var parentFolder = function (path) {
+    if (path.slice(-1) == '/') {
+        path = path.substring(0, path.length - 1);
+    }
+    var lastSlash = path.lastIndexOf('/');
+    return (lastSlash > 0) ? path.substring(0, lastSlash) : "";
+};
+
+/**
+ * Add a (sub) folder in the current folder.
+ * @private
+ * @param {string} name the folder's name
+ * @param {boolean=} [createFolders] If true, automatically create sub
+ *  folders. Defaults to false.
+ * @return {Object} the new folder.
+ */
+var folderAdd = function(name, createFolders) {
+    // Check the name ends with a /
+    if (name.slice(-1) != "/") {
+        name += "/"; // IE doesn't like substr(-1)
+    }
+
+    createFolders = (typeof createFolders !== 'undefined') ? createFolders : false;
+
+    // Does this folder already exist?
+    if (!this.files[name]) {
+        fileAdd.call(this, name, null, {
+            dir: true,
+            createFolders: createFolders
+        });
+    }
+    return this.files[name];
+};
+
+/**
+ * Generate a JSZip.CompressedObject for a given zipOject.
+ * @param {ZipObject} file the object to read.
+ * @param {JSZip.compression} compression the compression to use.
+ * @return {JSZip.CompressedObject} the compressed result.
+ */
+var generateCompressedObjectFrom = function(file, compression) {
+    var result = new CompressedObject(),
+        content;
+
+    // the data has not been decompressed, we might reuse things !
+    if (file._data instanceof CompressedObject) {
+        result.uncompressedSize = file._data.uncompressedSize;
+        result.crc32 = file._data.crc32;
+
+        if (result.uncompressedSize === 0 || file.dir) {
+            compression = compressions['STORE'];
+            result.compressedContent = "";
+            result.crc32 = 0;
+        }
+        else if (file._data.compressionMethod === compression.magic) {
+            result.compressedContent = file._data.getCompressedContent();
+        }
+        else {
+            content = file._data.getContent();
+            // need to decompress / recompress
+            result.compressedContent = compression.compress(utils.transformTo(compression.compressInputType, content));
+        }
+    }
+    else {
+        // have uncompressed data
+        content = getBinaryData(file);
+        if (!content || content.length === 0 || file.dir) {
+            compression = compressions['STORE'];
+            content = "";
+        }
+        result.uncompressedSize = content.length;
+        result.crc32 = crc32(content);
+        result.compressedContent = compression.compress(utils.transformTo(compression.compressInputType, content));
+    }
+
+    result.compressedSize = result.compressedContent.length;
+    result.compressionMethod = compression.magic;
+
+    return result;
+};
+
+/**
+ * Generate the various parts used in the construction of the final zip file.
+ * @param {string} name the file name.
+ * @param {ZipObject} file the file content.
+ * @param {JSZip.CompressedObject} compressedObject the compressed object.
+ * @param {number} offset the current offset from the start of the zip file.
+ * @return {object} the zip parts.
+ */
+var generateZipParts = function(name, file, compressedObject, offset) {
+    var data = compressedObject.compressedContent,
+        utfEncodedFileName = utils.transformTo("string", utf8.utf8encode(file.name)),
+        comment = file.comment || "",
+        utfEncodedComment = utils.transformTo("string", utf8.utf8encode(comment)),
+        useUTF8ForFileName = utfEncodedFileName.length !== file.name.length,
+        useUTF8ForComment = utfEncodedComment.length !== comment.length,
+        o = file.options,
+        dosTime,
+        dosDate,
+        extraFields = "",
+        unicodePathExtraField = "",
+        unicodeCommentExtraField = "",
+        dir, date;
+
+
+    // handle the deprecated options.dir
+    if (file._initialMetadata.dir !== file.dir) {
+        dir = file.dir;
+    } else {
+        dir = o.dir;
+    }
+
+    // handle the deprecated options.date
+    if(file._initialMetadata.date !== file.date) {
+        date = file.date;
+    } else {
+        date = o.date;
+    }
+
+    // date
+    // @see http://www.delorie.com/djgpp/doc/rbinter/it/52/13.html
+    // @see http://www.delorie.com/djgpp/doc/rbinter/it/65/16.html
+    // @see http://www.delorie.com/djgpp/doc/rbinter/it/66/16.html
+
+    dosTime = date.getHours();
+    dosTime = dosTime << 6;
+    dosTime = dosTime | date.getMinutes();
+    dosTime = dosTime << 5;
+    dosTime = dosTime | date.getSeconds() / 2;
+
+    dosDate = date.getFullYear() - 1980;
+    dosDate = dosDate << 4;
+    dosDate = dosDate | (date.getMonth() + 1);
+    dosDate = dosDate << 5;
+    dosDate = dosDate | date.getDate();
+
+    if (useUTF8ForFileName) {
+        // set the unicode path extra field. unzip needs at least one extra
+        // field to correctly handle unicode path, so using the path is as good
+        // as any other information. This could improve the situation with
+        // other archive managers too.
+        // This field is usually used without the utf8 flag, with a non
+        // unicode path in the header (winrar, winzip). This helps (a bit)
+        // with the messy Windows' default compressed folders feature but
+        // breaks on p7zip which doesn't seek the unicode path extra field.
+        // So for now, UTF-8 everywhere !
+        unicodePathExtraField =
+            // Version
+            decToHex(1, 1) +
+            // NameCRC32
+            decToHex(crc32(utfEncodedFileName), 4) +
+            // UnicodeName
+            utfEncodedFileName;
+
+        extraFields +=
+            // Info-ZIP Unicode Path Extra Field
+            "\x75\x70" +
+            // size
+            decToHex(unicodePathExtraField.length, 2) +
+            // content
+            unicodePathExtraField;
+    }
+
+    if(useUTF8ForComment) {
+
+        unicodeCommentExtraField =
+            // Version
+            decToHex(1, 1) +
+            // CommentCRC32
+            decToHex(this.crc32(utfEncodedComment), 4) +
+            // UnicodeName
+            utfEncodedComment;
+
+        extraFields +=
+            // Info-ZIP Unicode Path Extra Field
+            "\x75\x63" +
+            // size
+            decToHex(unicodeCommentExtraField.length, 2) +
+            // content
+            unicodeCommentExtraField;
+    }
+
+    var header = "";
+
+    // version needed to extract
+    header += "\x0A\x00";
+    // general purpose bit flag
+    // set bit 11 if utf8
+    header += (useUTF8ForFileName || useUTF8ForComment) ? "\x00\x08" : "\x00\x00";
+    // compression method
+    header += compressedObject.compressionMethod;
+    // last mod file time
+    header += decToHex(dosTime, 2);
+    // last mod file date
+    header += decToHex(dosDate, 2);
+    // crc-32
+    header += decToHex(compressedObject.crc32, 4);
+    // compressed size
+    header += decToHex(compressedObject.compressedSize, 4);
+    // uncompressed size
+    header += decToHex(compressedObject.uncompressedSize, 4);
+    // file name length
+    header += decToHex(utfEncodedFileName.length, 2);
+    // extra field length
+    header += decToHex(extraFields.length, 2);
+
+
+    var fileRecord = signature.LOCAL_FILE_HEADER + header + utfEncodedFileName + extraFields;
+
+    var dirRecord = signature.CENTRAL_FILE_HEADER +
+    // version made by (00: DOS)
+    "\x14\x00" +
+    // file header (common to file and central directory)
+    header +
+    // file comment length
+    decToHex(utfEncodedComment.length, 2) +
+    // disk number start
+    "\x00\x00" +
+    // internal file attributes TODO
+    "\x00\x00" +
+    // external file attributes
+    (dir === true ? "\x10\x00\x00\x00" : "\x00\x00\x00\x00") +
+    // relative offset of local header
+    decToHex(offset, 4) +
+    // file name
+    utfEncodedFileName +
+    // extra field
+    extraFields +
+    // file comment
+    utfEncodedComment;
+
+    return {
+        fileRecord: fileRecord,
+        dirRecord: dirRecord,
+        compressedObject: compressedObject
+    };
+};
+
+
+// return the actual prototype of JSZip
+var out = {
+    /**
+     * Read an existing zip and merge the data in the current JSZip object.
+     * The implementation is in jszip-load.js, don't forget to include it.
+     * @param {String|ArrayBuffer|Uint8Array|Buffer} stream  The stream to load
+     * @param {Object} options Options for loading the stream.
+     *  options.base64 : is the stream in base64 ? default : false
+     * @return {JSZip} the current JSZip object
+     */
+    load: function(stream, options) {
+        throw new Error("Load method is not defined. Is the file jszip-load.js included ?");
+    },
+
+    /**
+     * Filter nested files/folders with the specified function.
+     * @param {Function} search the predicate to use :
+     * function (relativePath, file) {...}
+     * It takes 2 arguments : the relative path and the file.
+     * @return {Array} An array of matching elements.
+     */
+    filter: function(search) {
+        var result = [],
+            filename, relativePath, file, fileClone;
+        for (filename in this.files) {
+            if (!this.files.hasOwnProperty(filename)) {
+                continue;
+            }
+            file = this.files[filename];
+            // return a new object, don't let the user mess with our internal objects :)
+            fileClone = new ZipObject(file.name, file._data, extend(file.options));
+            relativePath = filename.slice(this.root.length, filename.length);
+            if (filename.slice(0, this.root.length) === this.root && // the file is in the current root
+            search(relativePath, fileClone)) { // and the file matches the function
+                result.push(fileClone);
+            }
+        }
+        return result;
+    },
+
+    /**
+     * Add a file to the zip file, or search a file.
+     * @param   {string|RegExp} name The name of the file to add (if data is defined),
+     * the name of the file to find (if no data) or a regex to match files.
+     * @param   {String|ArrayBuffer|Uint8Array|Buffer} data  The file data, either raw or base64 encoded
+     * @param   {Object} o     File options
+     * @return  {JSZip|Object|Array} this JSZip object (when adding a file),
+     * a file (when searching by string) or an array of files (when searching by regex).
+     */
+    file: function(name, data, o) {
+        if (arguments.length === 1) {
+            if (utils.isRegExp(name)) {
+                var regexp = name;
+                return this.filter(function(relativePath, file) {
+                    return !file.dir && regexp.test(relativePath);
+                });
+            }
+            else { // text
+                return this.filter(function(relativePath, file) {
+                    return !file.dir && relativePath === name;
+                })[0] || null;
+            }
+        }
+        else { // more than one argument : we have data !
+            name = this.root + name;
+            fileAdd.call(this, name, data, o);
+        }
+        return this;
+    },
+
+    /**
+     * Add a directory to the zip file, or search.
+     * @param   {String|RegExp} arg The name of the directory to add, or a regex to search folders.
+     * @return  {JSZip} an object with the new directory as the root, or an array containing matching folders.
+     */
+    folder: function(arg) {
+        if (!arg) {
+            return this;
+        }
+
+        if (utils.isRegExp(arg)) {
+            return this.filter(function(relativePath, file) {
+                return file.dir && arg.test(relativePath);
+            });
+        }
+
+        // else, name is a new folder
+        var name = this.root + arg;
+        var newFolder = folderAdd.call(this, name);
+
+        // Allow chaining by returning a new object with this folder as the root
+        var ret = this.clone();
+        ret.root = newFolder.name;
+        return ret;
+    },
+
+    /**
+     * Delete a file, or a directory and all sub-files, from the zip
+     * @param {string} name the name of the file to delete
+     * @return {JSZip} this JSZip object
+     */
+    remove: function(name) {
+        name = this.root + name;
+        var file = this.files[name];
+        if (!file) {
+            // Look for any folders
+            if (name.slice(-1) != "/") {
+                name += "/";
+            }
+            file = this.files[name];
+        }
+
+        if (file && !file.dir) {
+            // file
+            delete this.files[name];
+        } else {
+            // maybe a folder, delete recursively
+            var kids = this.filter(function(relativePath, file) {
+                return file.name.slice(0, name.length) === name;
+            });
+            for (var i = 0; i < kids.length; i++) {
+                delete this.files[kids[i].name];
+            }
+        }
+
+        return this;
+    },
+
+    /**
+     * Generate the complete zip file
+     * @param {Object} options the options to generate the zip file :
+     * - base64, (deprecated, use type instead) true to generate base64.
+     * - compression, "STORE" by default.
+     * - type, "base64" by default. Values are : string, base64, uint8array, arraybuffer, blob.
+     * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the zip file
+     */
+    generate: function(options) {
+        options = extend(options || {}, {
+            base64: true,
+            compression: "STORE",
+            type: "base64",
+            comment: null
+        });
+
+        utils.checkSupport(options.type);
+
+        var zipData = [],
+            localDirLength = 0,
+            centralDirLength = 0,
+            writer, i,
+            utfEncodedComment = utils.transformTo("string", this.utf8encode(options.comment || this.comment || ""));
+
+        // first, generate all the zip parts.
+        for (var name in this.files) {
+            if (!this.files.hasOwnProperty(name)) {
+                continue;
+            }
+            var file = this.files[name];
+
+            var compressionName = file.options.compression || options.compression.toUpperCase();
+            var compression = compressions[compressionName];
+            if (!compression) {
+                throw new Error(compressionName + " is not a valid compression method !");
+            }
+
+            var compressedObject = generateCompressedObjectFrom.call(this, file, compression);
+
+            var zipPart = generateZipParts.call(this, name, file, compressedObject, localDirLength);
+            localDirLength += zipPart.fileRecord.length + compressedObject.compressedSize;
+            centralDirLength += zipPart.dirRecord.length;
+            zipData.push(zipPart);
+        }
+
+        var dirEnd = "";
+
+        // end of central dir signature
+        dirEnd = signature.CENTRAL_DIRECTORY_END +
+        // number of this disk
+        "\x00\x00" +
+        // number of the disk with the start of the central directory
+        "\x00\x00" +
+        // total number of entries in the central directory on this disk
+        decToHex(zipData.length, 2) +
+        // total number of entries in the central directory
+        decToHex(zipData.length, 2) +
+        // size of the central directory   4 bytes
+        decToHex(centralDirLength, 4) +
+        // offset of start of central directory with respect to the starting disk number
+        decToHex(localDirLength, 4) +
+        // .ZIP file comment length
+        decToHex(utfEncodedComment.length, 2) +
+        // .ZIP file comment
+        utfEncodedComment;
+
+
+        // we have all the parts (and the total length)
+        // time to create a writer !
+        var typeName = options.type.toLowerCase();
+        if(typeName==="uint8array"||typeName==="arraybuffer"||typeName==="blob"||typeName==="nodebuffer") {
+            writer = new Uint8ArrayWriter(localDirLength + centralDirLength + dirEnd.length);
+        }else{
+            writer = new StringWriter(localDirLength + centralDirLength + dirEnd.length);
+        }
+
+        for (i = 0; i < zipData.length; i++) {
+            writer.append(zipData[i].fileRecord);
+            writer.append(zipData[i].compressedObject.compressedContent);
+        }
+        for (i = 0; i < zipData.length; i++) {
+            writer.append(zipData[i].dirRecord);
+        }
+
+        writer.append(dirEnd);
+
+        var zip = writer.finalize();
+
+
+
+        switch(options.type.toLowerCase()) {
+            // case "zip is an Uint8Array"
+            case "uint8array" :
+            case "arraybuffer" :
+            case "nodebuffer" :
+               return utils.transformTo(options.type.toLowerCase(), zip);
+            case "blob" :
+               return utils.arrayBuffer2Blob(utils.transformTo("arraybuffer", zip));
+            // case "zip is a string"
+            case "base64" :
+               return (options.base64) ? base64.encode(zip) : zip;
+            default : // case "string" :
+               return zip;
+         }
+
+    },
+
+    /**
+     * @deprecated
+     * This method will be removed in a future version without replacement.
+     */
+    crc32: function (input, crc) {
+        return crc32(input, crc);
+    },
+
+    /**
+     * @deprecated
+     * This method will be removed in a future version without replacement.
+     */
+    utf8encode: function (string) {
+        return utils.transformTo("string", utf8.utf8encode(string));
+    },
+
+    /**
+     * @deprecated
+     * This method will be removed in a future version without replacement.
+     */
+    utf8decode: function (input) {
+        return utf8.utf8decode(input);
+    }
+};
+module.exports = out;
+
+},{"./base64":1,"./compressedObject":2,"./compressions":3,"./crc32":4,"./defaults":6,"./nodeBuffer":11,"./signature":14,"./stringWriter":16,"./support":17,"./uint8ArrayWriter":19,"./utf8":20,"./utils":21}],14:[function(_dereq_,module,exports){
+'use strict';
+exports.LOCAL_FILE_HEADER = "PK\x03\x04";
+exports.CENTRAL_FILE_HEADER = "PK\x01\x02";
+exports.CENTRAL_DIRECTORY_END = "PK\x05\x06";
+exports.ZIP64_CENTRAL_DIRECTORY_LOCATOR = "PK\x06\x07";
+exports.ZIP64_CENTRAL_DIRECTORY_END = "PK\x06\x06";
+exports.DATA_DESCRIPTOR = "PK\x07\x08";
+
+},{}],15:[function(_dereq_,module,exports){
+'use strict';
+var DataReader = _dereq_('./dataReader');
+var utils = _dereq_('./utils');
+
+function StringReader(data, optimizedBinaryString) {
+    this.data = data;
+    if (!optimizedBinaryString) {
+        this.data = utils.string2binary(this.data);
+    }
+    this.length = this.data.length;
+    this.index = 0;
+}
+StringReader.prototype = new DataReader();
+/**
+ * @see DataReader.byteAt
+ */
+StringReader.prototype.byteAt = function(i) {
+    return this.data.charCodeAt(i);
+};
+/**
+ * @see DataReader.lastIndexOfSignature
+ */
+StringReader.prototype.lastIndexOfSignature = function(sig) {
+    return this.data.lastIndexOf(sig);
+};
+/**
+ * @see DataReader.readData
+ */
+StringReader.prototype.readData = function(size) {
+    this.checkOffset(size);
+    // this will work because the constructor applied the "& 0xff" mask.
+    var result = this.data.slice(this.index, this.index + size);
+    this.index += size;
+    return result;
+};
+module.exports = StringReader;
+
+},{"./dataReader":5,"./utils":21}],16:[function(_dereq_,module,exports){
+'use strict';
+
+var utils = _dereq_('./utils');
+
+/**
+ * An object to write any content to a string.
+ * @constructor
+ */
+var StringWriter = function() {
+    this.data = [];
+};
+StringWriter.prototype = {
+    /**
+     * Append any content to the current string.
+     * @param {Object} input the content to add.
+     */
+    append: function(input) {
+        input = utils.transformTo("string", input);
+        this.data.push(input);
+    },
+    /**
+     * Finalize the construction an return the result.
+     * @return {string} the generated string.
+     */
+    finalize: function() {
+        return this.data.join("");
+    }
+};
+
+module.exports = StringWriter;
+
+},{"./utils":21}],17:[function(_dereq_,module,exports){
+(function (Buffer){
+'use strict';
+exports.base64 = true;
+exports.array = true;
+exports.string = true;
+exports.arraybuffer = typeof ArrayBuffer !== "undefined" && typeof Uint8Array !== "undefined";
+// contains true if JSZip can read/generate nodejs Buffer, false otherwise.
+// Browserify will provide a Buffer implementation for browsers, which is
+// an augmented Uint8Array (i.e., can be used as either Buffer or U8).
+exports.nodebuffer = typeof Buffer !== "undefined";
+// contains true if JSZip can read/generate Uint8Array, false otherwise.
+exports.uint8array = typeof Uint8Array !== "undefined";
+
+if (typeof ArrayBuffer === "undefined") {
+    exports.blob = false;
+}
+else {
+    var buffer = new ArrayBuffer(0);
+    try {
+        exports.blob = new Blob([buffer], {
+            type: "application/zip"
+        }).size === 0;
+    }
+    catch (e) {
+        try {
+            var Builder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder;
+            var builder = new Builder();
+            builder.append(buffer);
+            exports.blob = builder.getBlob('application/zip').size === 0;
+        }
+        catch (e) {
+            exports.blob = false;
+        }
+    }
+}
+
+}).call(this,(typeof Buffer !== "undefined" ? Buffer : undefined))
+},{}],18:[function(_dereq_,module,exports){
+'use strict';
+var DataReader = _dereq_('./dataReader');
+
+function Uint8ArrayReader(data) {
+    if (data) {
+        this.data = data;
+        this.length = this.data.length;
+        this.index = 0;
+    }
+}
+Uint8ArrayReader.prototype = new DataReader();
+/**
+ * @see DataReader.byteAt
+ */
+Uint8ArrayReader.prototype.byteAt = function(i) {
+    return this.data[i];
+};
+/**
+ * @see DataReader.lastIndexOfSignature
+ */
+Uint8ArrayReader.prototype.lastIndexOfSignature = function(sig) {
+    var sig0 = sig.charCodeAt(0),
+        sig1 = sig.charCodeAt(1),
+        sig2 = sig.charCodeAt(2),
+        sig3 = sig.charCodeAt(3);
+    for (var i = this.length - 4; i >= 0; --i) {
+        if (this.data[i] === sig0 && this.data[i + 1] === sig1 && this.data[i + 2] === sig2 && this.data[i + 3] === sig3) {
+            return i;
+        }
+    }
+
+    return -1;
+};
+/**
+ * @see DataReader.readData
+ */
+Uint8ArrayReader.prototype.readData = function(size) {
+    this.checkOffset(size);
+    if(size === 0) {
+        // in IE10, when using subarray(idx, idx), we get the array [0x00] instead of [].
+        return new Uint8Array(0);
+    }
+    var result = this.data.subarray(this.index, this.index + size);
+    this.index += size;
+    return result;
+};
+module.exports = Uint8ArrayReader;
+
+},{"./dataReader":5}],19:[function(_dereq_,module,exports){
+'use strict';
+
+var utils = _dereq_('./utils');
+
+/**
+ * An object to write any content to an Uint8Array.
+ * @constructor
+ * @param {number} length The length of the array.
+ */
+var Uint8ArrayWriter = function(length) {
+    this.data = new Uint8Array(length);
+    this.index = 0;
+};
+Uint8ArrayWriter.prototype = {
+    /**
+     * Append any content to the current array.
+     * @param {Object} input the content to add.
+     */
+    append: function(input) {
+        if (input.length !== 0) {
+            // with an empty Uint8Array, Opera fails with a "Offset larger than array size"
+            input = utils.transformTo("uint8array", input);
+            this.data.set(input, this.index);
+            this.index += input.length;
+        }
+    },
+    /**
+     * Finalize the construction an return the result.
+     * @return {Uint8Array} the generated array.
+     */
+    finalize: function() {
+        return this.data;
+    }
+};
+
+module.exports = Uint8ArrayWriter;
+
+},{"./utils":21}],20:[function(_dereq_,module,exports){
+'use strict';
+
+var utils = _dereq_('./utils');
+var support = _dereq_('./support');
+var nodeBuffer = _dereq_('./nodeBuffer');
+
+/**
+ * The following functions come from pako, from pako/lib/utils/strings
+ * released under the MIT license, see pako https://github.com/nodeca/pako/
+ */
+
+// Table with utf8 lengths (calculated by first byte of sequence)
+// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,
+// because max possible codepoint is 0x10ffff
+var _utf8len = new Array(256);
+for (var i=0; i<256; i++) {
+  _utf8len[i] = (i >= 252 ? 6 : i >= 248 ? 5 : i >= 240 ? 4 : i >= 224 ? 3 : i >= 192 ? 2 : 1);
+}
+_utf8len[254]=_utf8len[254]=1; // Invalid sequence start
+
+// convert string to array (typed, when possible)
+var string2buf = function (str) {
+    var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;
+
+    // count binary size
+    for (m_pos = 0; m_pos < str_len; m_pos++) {
+        c = str.charCodeAt(m_pos);
+        if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) {
+            c2 = str.charCodeAt(m_pos+1);
+            if ((c2 & 0xfc00) === 0xdc00) {
+                c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);
+                m_pos++;
+            }
+        }
+        buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;
+    }
+
+    // allocate buffer
+    if (support.uint8array) {
+        buf = new Uint8Array(buf_len);
+    } else {
+        buf = new Array(buf_len);
+    }
+
+    // convert
+    for (i=0, m_pos = 0; i < buf_len; m_pos++) {
+        c = str.charCodeAt(m_pos);
+        if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) {
+            c2 = str.charCodeAt(m_pos+1);
+            if ((c2 & 0xfc00) === 0xdc00) {
+                c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);
+                m_pos++;
+            }
+        }
+        if (c < 0x80) {
+            /* one byte */
+            buf[i++] = c;
+        } else if (c < 0x800) {
+            /* two bytes */
+            buf[i++] = 0xC0 | (c >>> 6);
+            buf[i++] = 0x80 | (c & 0x3f);
+        } else if (c < 0x10000) {
+            /* three bytes */
+            buf[i++] = 0xE0 | (c >>> 12);
+            buf[i++] = 0x80 | (c >>> 6 & 0x3f);
+            buf[i++] = 0x80 | (c & 0x3f);
+        } else {
+            /* four bytes */
+            buf[i++] = 0xf0 | (c >>> 18);
+            buf[i++] = 0x80 | (c >>> 12 & 0x3f);
+            buf[i++] = 0x80 | (c >>> 6 & 0x3f);
+            buf[i++] = 0x80 | (c & 0x3f);
+        }
+    }
+
+    return buf;
+};
+
+// Calculate max possible position in utf8 buffer,
+// that will not break sequence. If that's not possible
+// - (very small limits) return max size as is.
+//
+// buf[] - utf8 bytes array
+// max   - length limit (mandatory);
+var utf8border = function(buf, max) {
+    var pos;
+
+    max = max || buf.length;
+    if (max > buf.length) { max = buf.length; }
+
+    // go back from last position, until start of sequence found
+    pos = max-1;
+    while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }
+
+    // Fuckup - very small and broken sequence,
+    // return max, because we should return something anyway.
+    if (pos < 0) { return max; }
+
+    // If we came to start of buffer - that means vuffer is too small,
+    // return max too.
+    if (pos === 0) { return max; }
+
+    return (pos + _utf8len[buf[pos]] > max) ? pos : max;
+};
+
+// convert array to string
+var buf2string = function (buf) {
+    var str, i, out, c, c_len;
+    var len = buf.length;
+
+    // Reserve max possible length (2 words per char)
+    // NB: by unknown reasons, Array is significantly faster for
+    //     String.fromCharCode.apply than Uint16Array.
+    var utf16buf = new Array(len*2);
+
+    for (out=0, i=0; i<len;) {
+        c = buf[i++];
+        // quick process ascii
+        if (c < 0x80) { utf16buf[out++] = c; continue; }
+
+        c_len = _utf8len[c];
+        // skip 5 & 6 byte codes
+        if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len-1; continue; }
+
+        // apply mask on first byte
+        c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;
+        // join the rest
+        while (c_len > 1 && i < len) {
+            c = (c << 6) | (buf[i++] & 0x3f);
+            c_len--;
+        }
+
+        // terminated by end of string?
+        if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }
+
+        if (c < 0x10000) {
+            utf16buf[out++] = c;
+        } else {
+            c -= 0x10000;
+            utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);
+            utf16buf[out++] = 0xdc00 | (c & 0x3ff);
+        }
+    }
+
+    // shrinkBuf(utf16buf, out)
+    if (utf16buf.length !== out) {
+        if(utf16buf.subarray) {
+            utf16buf = utf16buf.subarray(0, out);
+        } else {
+            utf16buf.length = out;
+        }
+    }
+
+    // return String.fromCharCode.apply(null, utf16buf);
+    return utils.applyFromCharCode(utf16buf);
+};
+
+
+// That's all for the pako functions.
+
+
+/**
+ * Transform a javascript string into an array (typed if possible) of bytes,
+ * UTF-8 encoded.
+ * @param {String} str the string to encode
+ * @return {Array|Uint8Array|Buffer} the UTF-8 encoded string.
+ */
+exports.utf8encode = function utf8encode(str) {
+    if (support.nodebuffer) {
+        return nodeBuffer(str, "utf-8");
+    }
+
+    return string2buf(str);
+};
+
+
+/**
+ * Transform a bytes array (or a representation) representing an UTF-8 encoded
+ * string into a javascript string.
+ * @param {Array|Uint8Array|Buffer} buf the data de decode
+ * @return {String} the decoded string.
+ */
+exports.utf8decode = function utf8decode(buf) {
+    if (support.nodebuffer) {
+        return utils.transformTo("nodebuffer", buf).toString("utf-8");
+    }
+
+    buf = utils.transformTo(support.uint8array ? "uint8array" : "array", buf);
+
+    // return buf2string(buf);
+    // Chrome prefers to work with "small" chunks of data
+    // for the method buf2string.
+    // Firefox and Chrome has their own shortcut, IE doesn't seem to really care.
+    var result = [], k = 0, len = buf.length, chunk = 65536;
+    while (k < len) {
+        var nextBoundary = utf8border(buf, Math.min(k + chunk, len));
+        if (support.uint8array) {
+            result.push(buf2string(buf.subarray(k, nextBoundary)));
+        } else {
+            result.push(buf2string(buf.slice(k, nextBoundary)));
+        }
+        k = nextBoundary;
+    }
+    return result.join("");
+
+};
+// vim: set shiftwidth=4 softtabstop=4:
+
+},{"./nodeBuffer":11,"./support":17,"./utils":21}],21:[function(_dereq_,module,exports){
+'use strict';
+var support = _dereq_('./support');
+var compressions = _dereq_('./compressions');
+var nodeBuffer = _dereq_('./nodeBuffer');
+/**
+ * Convert a string to a "binary string" : a string containing only char codes between 0 and 255.
+ * @param {string} str the string to transform.
+ * @return {String} the binary string.
+ */
+exports.string2binary = function(str) {
+    var result = "";
+    for (var i = 0; i < str.length; i++) {
+        result += String.fromCharCode(str.charCodeAt(i) & 0xff);
+    }
+    return result;
+};
+exports.arrayBuffer2Blob = function(buffer) {
+    exports.checkSupport("blob");
+
+    try {
+        // Blob constructor
+        return new Blob([buffer], {
+            type: "application/zip"
+        });
+    }
+    catch (e) {
+
+        try {
+            // deprecated, browser only, old way
+            var Builder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder;
+            var builder = new Builder();
+            builder.append(buffer);
+            return builder.getBlob('application/zip');
+        }
+        catch (e) {
+
+            // well, fuck ?!
+            throw new Error("Bug : can't construct the Blob.");
+        }
+    }
+
+
+};
+/**
+ * The identity function.
+ * @param {Object} input the input.
+ * @return {Object} the same input.
+ */
+function identity(input) {
+    return input;
+}
+
+/**
+ * Fill in an array with a string.
+ * @param {String} str the string to use.
+ * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to fill in (will be mutated).
+ * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated array.
+ */
+function stringToArrayLike(str, array) {
+    for (var i = 0; i < str.length; ++i) {
+        array[i] = str.charCodeAt(i) & 0xFF;
+    }
+    return array;
+}
+
+/**
+ * Transform an array-like object to a string.
+ * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.
+ * @return {String} the result.
+ */
+function arrayLikeToString(array) {
+    // Performances notes :
+    // --------------------
+    // String.fromCharCode.apply(null, array) is the fastest, see
+    // see http://jsperf.com/converting-a-uint8array-to-a-string/2
+    // but the stack is limited (and we can get huge arrays !).
+    //
+    // result += String.fromCharCode(array[i]); generate too many strings !
+    //
+    // This code is inspired by http://jsperf.com/arraybuffer-to-string-apply-performance/2
+    var chunk = 65536;
+    var result = [],
+        len = array.length,
+        type = exports.getTypeOf(array),
+        k = 0,
+        canUseApply = true;
+      try {
+         switch(type) {
+            case "uint8array":
+               String.fromCharCode.apply(null, new Uint8Array(0));
+               break;
+            case "nodebuffer":
+               String.fromCharCode.apply(null, nodeBuffer(0));
+               break;
+         }
+      } catch(e) {
+         canUseApply = false;
+      }
+
+      // no apply : slow and painful algorithm
+      // default browser on android 4.*
+      if (!canUseApply) {
+         var resultStr = "";
+         for(var i = 0; i < array.length;i++) {
+            resultStr += String.fromCharCode(array[i]);
+         }
+    return resultStr;
+    }
+    while (k < len && chunk > 1) {
+        try {
+            if (type === "array" || type === "nodebuffer") {
+                result.push(String.fromCharCode.apply(null, array.slice(k, Math.min(k + chunk, len))));
+            }
+            else {
+                result.push(String.fromCharCode.apply(null, array.subarray(k, Math.min(k + chunk, len))));
+            }
+            k += chunk;
+        }
+        catch (e) {
+            chunk = Math.floor(chunk / 2);
+        }
+    }
+    return result.join("");
+}
+
+exports.applyFromCharCode = arrayLikeToString;
+
+
+/**
+ * Copy the data from an array-like to an other array-like.
+ * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayFrom the origin array.
+ * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayTo the destination array which will be mutated.
+ * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated destination array.
+ */
+function arrayLikeToArrayLike(arrayFrom, arrayTo) {
+    for (var i = 0; i < arrayFrom.length; i++) {
+        arrayTo[i] = arrayFrom[i];
+    }
+    return arrayTo;
+}
+
+// a matrix containing functions to transform everything into everything.
+var transform = {};
+
+// string to ?
+transform["string"] = {
+    "string": identity,
+    "array": function(input) {
+        return stringToArrayLike(input, new Array(input.length));
+    },
+    "arraybuffer": function(input) {
+        return transform["string"]["uint8array"](input).buffer;
+    },
+    "uint8array": function(input) {
+        return stringToArrayLike(input, new Uint8Array(input.length));
+    },
+    "nodebuffer": function(input) {
+        return stringToArrayLike(input, nodeBuffer(input.length));
+    }
+};
+
+// array to ?
+transform["array"] = {
+    "string": arrayLikeToString,
+    "array": identity,
+    "arraybuffer": function(input) {
+        return (new Uint8Array(input)).buffer;
+    },
+    "uint8array": function(input) {
+        return new Uint8Array(input);
+    },
+    "nodebuffer": function(input) {
+        return nodeBuffer(input);
+    }
+};
+
+// arraybuffer to ?
+transform["arraybuffer"] = {
+    "string": function(input) {
+        return arrayLikeToString(new Uint8Array(input));
+    },
+    "array": function(input) {
+        return arrayLikeToArrayLike(new Uint8Array(input), new Array(input.byteLength));
+    },
+    "arraybuffer": identity,
+    "uint8array": function(input) {
+        return new Uint8Array(input);
+    },
+    "nodebuffer": function(input) {
+        return nodeBuffer(new Uint8Array(input));
+    }
+};
+
+// uint8array to ?
+transform["uint8array"] = {
+    "string": arrayLikeToString,
+    "array": function(input) {
+        return arrayLikeToArrayLike(input, new Array(input.length));
+    },
+    "arraybuffer": function(input) {
+        return input.buffer;
+    },
+    "uint8array": identity,
+    "nodebuffer": function(input) {
+        return nodeBuffer(input);
+    }
+};
+
+// nodebuffer to ?
+transform["nodebuffer"] = {
+    "string": arrayLikeToString,
+    "array": function(input) {
+        return arrayLikeToArrayLike(input, new Array(input.length));
+    },
+    "arraybuffer": function(input) {
+        return transform["nodebuffer"]["uint8array"](input).buffer;
+    },
+    "uint8array": function(input) {
+        return arrayLikeToArrayLike(input, new Uint8Array(input.length));
+    },
+    "nodebuffer": identity
+};
+
+/**
+ * Transform an input into any type.
+ * The supported output type are : string, array, uint8array, arraybuffer, nodebuffer.
+ * If no output type is specified, the unmodified input will be returned.
+ * @param {String} outputType the output type.
+ * @param {String|Array|ArrayBuffer|Uint8Array|Buffer} input the input to convert.
+ * @throws {Error} an Error if the browser doesn't support the requested output type.
+ */
+exports.transformTo = function(outputType, input) {
+    if (!input) {
+        // undefined, null, etc
+        // an empty string won't harm.
+        input = "";
+    }
+    if (!outputType) {
+        return input;
+    }
+    exports.checkSupport(outputType);
+    var inputType = exports.getTypeOf(input);
+    var result = transform[inputType][outputType](input);
+    return result;
+};
+
+/**
+ * Return the type of the input.
+ * The type will be in a format valid for JSZip.utils.transformTo : string, array, uint8array, arraybuffer.
+ * @param {Object} input the input to identify.
+ * @return {String} the (lowercase) type of the input.
+ */
+exports.getTypeOf = function(input) {
+    if (typeof input === "string") {
+        return "string";
+    }
+    if (Object.prototype.toString.call(input) === "[object Array]") {
+        return "array";
+    }
+    if (support.nodebuffer && nodeBuffer.test(input)) {
+        return "nodebuffer";
+    }
+    if (support.uint8array && input instanceof Uint8Array) {
+        return "uint8array";
+    }
+    if (support.arraybuffer && input instanceof ArrayBuffer) {
+        return "arraybuffer";
+    }
+};
+
+/**
+ * Throw an exception if the type is not supported.
+ * @param {String} type the type to check.
+ * @throws {Error} an Error if the browser doesn't support the requested type.
+ */
+exports.checkSupport = function(type) {
+    var supported = support[type.toLowerCase()];
+    if (!supported) {
+        throw new Error(type + " is not supported by this browser");
+    }
+};
+exports.MAX_VALUE_16BITS = 65535;
+exports.MAX_VALUE_32BITS = -1; // well, "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" is parsed as -1
+
+/**
+ * Prettify a string read as binary.
+ * @param {string} str the string to prettify.
+ * @return {string} a pretty string.
+ */
+exports.pretty = function(str) {
+    var res = '',
+        code, i;
+    for (i = 0; i < (str || "").length; i++) {
+        code = str.charCodeAt(i);
+        res += '\\x' + (code < 16 ? "0" : "") + code.toString(16).toUpperCase();
+    }
+    return res;
+};
+
+/**
+ * Find a compression registered in JSZip.
+ * @param {string} compressionMethod the method magic to find.
+ * @return {Object|null} the JSZip compression object, null if none found.
+ */
+exports.findCompression = function(compressionMethod) {
+    for (var method in compressions) {
+        if (!compressions.hasOwnProperty(method)) {
+            continue;
+        }
+        if (compressions[method].magic === compressionMethod) {
+            return compressions[method];
+        }
+    }
+    return null;
+};
+/**
+* Cross-window, cross-Node-context regular expression detection
+* @param  {Object}  object Anything
+* @return {Boolean}        true if the object is a regular expression,
+* false otherwise
+*/
+exports.isRegExp = function (object) {
+    return Object.prototype.toString.call(object) === "[object RegExp]";
+};
+
+
+},{"./compressions":3,"./nodeBuffer":11,"./support":17}],22:[function(_dereq_,module,exports){
+'use strict';
+var StringReader = _dereq_('./stringReader');
+var NodeBufferReader = _dereq_('./nodeBufferReader');
+var Uint8ArrayReader = _dereq_('./uint8ArrayReader');
+var utils = _dereq_('./utils');
+var sig = _dereq_('./signature');
+var ZipEntry = _dereq_('./zipEntry');
+var support = _dereq_('./support');
+var jszipProto = _dereq_('./object');
+//  class ZipEntries {{{
+/**
+ * All the entries in the zip file.
+ * @constructor
+ * @param {String|ArrayBuffer|Uint8Array} data the binary stream to load.
+ * @param {Object} loadOptions Options for loading the stream.
+ */
+function ZipEntries(data, loadOptions) {
+    this.files = [];
+    this.loadOptions = loadOptions;
+    if (data) {
+        this.load(data);
+    }
+}
+ZipEntries.prototype = {
+    /**
+     * Check that the reader is on the speficied signature.
+     * @param {string} expectedSignature the expected signature.
+     * @throws {Error} if it is an other signature.
+     */
+    checkSignature: function(expectedSignature) {
+        var signature = this.reader.readString(4);
+        if (signature !== expectedSignature) {
+            throw new Error("Corrupted zip or bug : unexpected signature " + "(" + utils.pretty(signature) + ", expected " + utils.pretty(expectedSignature) + ")");
+        }
+    },
+    /**
+     * Read the end of the central directory.
+     */
+    readBlockEndOfCentral: function() {
+        this.diskNumber = this.reader.readInt(2);
+        this.diskWithCentralDirStart = this.reader.readInt(2);
+        this.centralDirRecordsOnThisDisk = this.reader.readInt(2);
+        this.centralDirRecords = this.reader.readInt(2);
+        this.centralDirSize = this.reader.readInt(4);
+        this.centralDirOffset = this.reader.readInt(4);
+
+        this.zipCommentLength = this.reader.readInt(2);
+        // warning : the encoding depends of the system locale
+        // On a linux machine with LANG=en_US.utf8, this field is utf8 encoded.
+        // On a windows machine, this field is encoded with the localized windows code page.
+        this.zipComment = this.reader.readString(this.zipCommentLength);
+        // To get consistent behavior with the generation part, we will assume that
+        // this is utf8 encoded.
+        this.zipComment = jszipProto.utf8decode(this.zipComment);
+    },
+    /**
+     * Read the end of the Zip 64 central directory.
+     * Not merged with the method readEndOfCentral :
+     * The end of central can coexist with its Zip64 brother,
+     * I don't want to read the wrong number of bytes !
+     */
+    readBlockZip64EndOfCentral: function() {
+        this.zip64EndOfCentralSize = this.reader.readInt(8);
+        this.versionMadeBy = this.reader.readString(2);
+        this.versionNeeded = this.reader.readInt(2);
+        this.diskNumber = this.reader.readInt(4);
+        this.diskWithCentralDirStart = this.reader.readInt(4);
+        this.centralDirRecordsOnThisDisk = this.reader.readInt(8);
+        this.centralDirRecords = this.reader.readInt(8);
+        this.centralDirSize = this.reader.readInt(8);
+        this.centralDirOffset = this.reader.readInt(8);
+
+        this.zip64ExtensibleData = {};
+        var extraDataSize = this.zip64EndOfCentralSize - 44,
+            index = 0,
+            extraFieldId,
+            extraFieldLength,
+            extraFieldValue;
+        while (index < extraDataSize) {
+            extraFieldId = this.reader.readInt(2);
+            extraFieldLength = this.reader.readInt(4);
+            extraFieldValue = this.reader.readString(extraFieldLength);
+            this.zip64ExtensibleData[extraFieldId] = {
+                id: extraFieldId,
+                length: extraFieldLength,
+                value: extraFieldValue
+            };
+        }
+    },
+    /**
+     * Read the end of the Zip 64 central directory locator.
+     */
+    readBlockZip64EndOfCentralLocator: function() {
+        this.diskWithZip64CentralDirStart = this.reader.readInt(4);
+        this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8);
+        this.disksCount = this.reader.readInt(4);
+        if (this.disksCount > 1) {
+            throw new Error("Multi-volumes zip are not supported");
+        }
+    },
+    /**
+     * Read the local files, based on the offset read in the central part.
+     */
+    readLocalFiles: function() {
+        var i, file;
+        for (i = 0; i < this.files.length; i++) {
+            file = this.files[i];
+            this.reader.setIndex(file.localHeaderOffset);
+            this.checkSignature(sig.LOCAL_FILE_HEADER);
+            file.readLocalPart(this.reader);
+            file.handleUTF8();
+        }
+    },
+    /**
+     * Read the central directory.
+     */
+    readCentralDir: function() {
+        var file;
+
+        this.reader.setIndex(this.centralDirOffset);
+        while (this.reader.readString(4) === sig.CENTRAL_FILE_HEADER) {
+            file = new ZipEntry({
+                zip64: this.zip64
+            }, this.loadOptions);
+            file.readCentralPart(this.reader);
+            this.files.push(file);
+        }
+    },
+    /**
+     * Read the end of central directory.
+     */
+    readEndOfCentral: function() {
+        var offset = this.reader.lastIndexOfSignature(sig.CENTRAL_DIRECTORY_END);
+        if (offset === -1) {
+            throw new Error("Corrupted zip : can't find end of central directory");
+        }
+        this.reader.setIndex(offset);
+        this.checkSignature(sig.CENTRAL_DIRECTORY_END);
+        this.readBlockEndOfCentral();
+
+
+        /* extract from the zip spec :
+            4)  If one of the fields in the end of central directory
+                record is too small to hold required data, the field
+                should be set to -1 (0xFFFF or 0xFFFFFFFF) and the
+                ZIP64 format record should be created.
+            5)  The end of central directory record and the
+                Zip64 end of central directory locator record must
+                reside on the same disk when splitting or spanning
+                an archive.
+         */
+        if (this.diskNumber === utils.MAX_VALUE_16BITS || this.diskWithCentralDirStart === utils.MAX_VALUE_16BITS || this.centralDirRecordsOnThisDisk === utils.MAX_VALUE_16BITS || this.centralDirRecords === utils.MAX_VALUE_16BITS || this.centralDirSize === utils.MAX_VALUE_32BITS || this.centralDirOffset === utils.MAX_VALUE_32BITS) {
+            this.zip64 = true;
+
+            /*
+            Warning : the zip64 extension is supported, but ONLY if the 64bits integer read from
+            the zip file can fit into a 32bits integer. This cannot be solved : Javascript represents
+            all numbers as 64-bit double precision IEEE 754 floating point numbers.
+            So, we have 53bits for integers and bitwise operations treat everything as 32bits.
+            see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators
+            and http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf section 8.5
+            */
+
+            // should look for a zip64 EOCD locator
+            offset = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);
+            if (offset === -1) {
+                throw new Error("Corrupted zip : can't find the ZIP64 end of central directory locator");
+            }
+            this.reader.setIndex(offset);
+            this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);
+            this.readBlockZip64EndOfCentralLocator();
+
+            // now the zip64 EOCD record
+            this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir);
+            this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_END);
+            this.readBlockZip64EndOfCentral();
+        }
+    },
+    prepareReader: function(data) {
+        var type = utils.getTypeOf(data);
+        if (type === "string" && !support.uint8array) {
+            this.reader = new StringReader(data, this.loadOptions.optimizedBinaryString);
+        }
+        else if (type === "nodebuffer") {
+            this.reader = new NodeBufferReader(data);
+        }
+        else {
+            this.reader = new Uint8ArrayReader(utils.transformTo("uint8array", data));
+        }
+    },
+    /**
+     * Read a zip file and create ZipEntries.
+     * @param {String|ArrayBuffer|Uint8Array|Buffer} data the binary string representing a zip file.
+     */
+    load: function(data) {
+        this.prepareReader(data);
+        this.readEndOfCentral();
+        this.readCentralDir();
+        this.readLocalFiles();
+    }
+};
+// }}} end of ZipEntries
+module.exports = ZipEntries;
+
+},{"./nodeBufferReader":12,"./object":13,"./signature":14,"./stringReader":15,"./support":17,"./uint8ArrayReader":18,"./utils":21,"./zipEntry":23}],23:[function(_dereq_,module,exports){
+'use strict';
+var StringReader = _dereq_('./stringReader');
+var utils = _dereq_('./utils');
+var CompressedObject = _dereq_('./compressedObject');
+var jszipProto = _dereq_('./object');
+// class ZipEntry {{{
+/**
+ * An entry in the zip file.
+ * @constructor
+ * @param {Object} options Options of the current file.
+ * @param {Object} loadOptions Options for loading the stream.
+ */
+function ZipEntry(options, loadOptions) {
+    this.options = options;
+    this.loadOptions = loadOptions;
+}
+ZipEntry.prototype = {
+    /**
+     * say if the file is encrypted.
+     * @return {boolean} true if the file is encrypted, false otherwise.
+     */
+    isEncrypted: function() {
+        // bit 1 is set
+        return (this.bitFlag & 0x0001) === 0x0001;
+    },
+    /**
+     * say if the file has utf-8 filename/comment.
+     * @return {boolean} true if the filename/comment is in utf-8, false otherwise.
+     */
+    useUTF8: function() {
+        // bit 11 is set
+        return (this.bitFlag & 0x0800) === 0x0800;
+    },
+    /**
+     * Prepare the function used to generate the compressed content from this ZipFile.
+     * @param {DataReader} reader the reader to use.
+     * @param {number} from the offset from where we should read the data.
+     * @param {number} length the length of the data to read.
+     * @return {Function} the callback to get the compressed content (the type depends of the DataReader class).
+     */
+    prepareCompressedContent: function(reader, from, length) {
+        return function() {
+            var previousIndex = reader.index;
+            reader.setIndex(from);
+            var compressedFileData = reader.readData(length);
+            reader.setIndex(previousIndex);
+
+            return compressedFileData;
+        };
+    },
+    /**
+     * Prepare the function used to generate the uncompressed content from this ZipFile.
+     * @param {DataReader} reader the reader to use.
+     * @param {number} from the offset from where we should read the data.
+     * @param {number} length the length of the data to read.
+     * @param {JSZip.compression} compression the compression used on this file.
+     * @param {number} uncompressedSize the uncompressed size to expect.
+     * @return {Function} the callback to get the uncompressed content (the type depends of the DataReader class).
+     */
+    prepareContent: function(reader, from, length, compression, uncompressedSize) {
+        return function() {
+
+            var compressedFileData = utils.transformTo(compression.uncompressInputType, this.getCompressedContent());
+            var uncompressedFileData = compression.uncompress(compressedFileData);
+
+            if (uncompressedFileData.length !== uncompressedSize) {
+                throw new Error("Bug : uncompressed data size mismatch");
+            }
+
+            return uncompressedFileData;
+        };
+    },
+    /**
+     * Read the local part of a zip file and add the info in this object.
+     * @param {DataReader} reader the reader to use.
+     */
+    readLocalPart: function(reader) {
+        var compression, localExtraFieldsLength;
+
+        // we already know everything from the central dir !
+        // If the central dir data are false, we are doomed.
+        // On the bright side, the local part is scary  : zip64, data descriptors, both, etc.
+        // The less data we get here, the more reliable this should be.
+        // Let's skip the whole header and dash to the data !
+        reader.skip(22);
+        // in some zip created on windows, the filename stored in the central dir contains \ instead of /.
+        // Strangely, the filename here is OK.
+        // I would love to treat these zip files as corrupted (see http://www.info-zip.org/FAQ.html#backslashes
+        // or APPNOTE#4.4.17.1, "All slashes MUST be forward slashes '/'") but there are a lot of bad zip generators...
+        // Search "unzip mismatching "local" filename continuing with "central" filename version" on
+        // the internet.
+        //
+        // I think I see the logic here : the central directory is used to display
+        // content and the local directory is used to extract the files. Mixing / and \
+        // may be used to display \ to windows users and use / when extracting the files.
+        // Unfortunately, this lead also to some issues : http://seclists.org/fulldisclosure/2009/Sep/394
+        this.fileNameLength = reader.readInt(2);
+        localExtraFieldsLength = reader.readInt(2); // can't be sure this will be the same as the central dir
+        this.fileName = reader.readString(this.fileNameLength);
+        reader.skip(localExtraFieldsLength);
+
+        if (this.compressedSize == -1 || this.uncompressedSize == -1) {
+            throw new Error("Bug or corrupted zip : didn't get enough informations from the central directory " + "(compressedSize == -1 || uncompressedSize == -1)");
+        }
+
+        compression = utils.findCompression(this.compressionMethod);
+        if (compression === null) { // no compression found
+            throw new Error("Corrupted zip : compression " + utils.pretty(this.compressionMethod) + " unknown (inner file : " + this.fileName + ")");
+        }
+        this.decompressed = new CompressedObject();
+        this.decompressed.compressedSize = this.compressedSize;
+        this.decompressed.uncompressedSize = this.uncompressedSize;
+        this.decompressed.crc32 = this.crc32;
+        this.decompressed.compressionMethod = this.compressionMethod;
+        this.decompressed.getCompressedContent = this.prepareCompressedContent(reader, reader.index, this.compressedSize, compression);
+        this.decompressed.getContent = this.prepareContent(reader, reader.index, this.compressedSize, compression, this.uncompressedSize);
+
+        // we need to compute the crc32...
+        if (this.loadOptions.checkCRC32) {
+            this.decompressed = utils.transformTo("string", this.decompressed.getContent());
+            if (jszipProto.crc32(this.decompressed) !== this.crc32) {
+                throw new Error("Corrupted zip : CRC32 mismatch");
+            }
+        }
+    },
+
+    /**
+     * Read the central part of a zip file and add the info in this object.
+     * @param {DataReader} reader the reader to use.
+     */
+    readCentralPart: function(reader) {
+        this.versionMadeBy = reader.readString(2);
+        this.versionNeeded = reader.readInt(2);
+        this.bitFlag = reader.readInt(2);
+        this.compressionMethod = reader.readString(2);
+        this.date = reader.readDate();
+        this.crc32 = reader.readInt(4);
+        this.compressedSize = reader.readInt(4);
+        this.uncompressedSize = reader.readInt(4);
+        this.fileNameLength = reader.readInt(2);
+        this.extraFieldsLength = reader.readInt(2);
+        this.fileCommentLength = reader.readInt(2);
+        this.diskNumberStart = reader.readInt(2);
+        this.internalFileAttributes = reader.readInt(2);
+        this.externalFileAttributes = reader.readInt(4);
+        this.localHeaderOffset = reader.readInt(4);
+
+        if (this.isEncrypted()) {
+            throw new Error("Encrypted zip are not supported");
+        }
+
+        this.fileName = reader.readString(this.fileNameLength);
+        this.readExtraFields(reader);
+        this.parseZIP64ExtraField(reader);
+        this.fileComment = reader.readString(this.fileCommentLength);
+
+        // warning, this is true only for zip with madeBy == DOS (plateform dependent feature)
+        this.dir = this.externalFileAttributes & 0x00000010 ? true : false;
+    },
+    /**
+     * Parse the ZIP64 extra field and merge the info in the current ZipEntry.
+     * @param {DataReader} reader the reader to use.
+     */
+    parseZIP64ExtraField: function(reader) {
+
+        if (!this.extraFields[0x0001]) {
+            return;
+        }
+
+        // should be something, preparing the extra reader
+        var extraReader = new StringReader(this.extraFields[0x0001].value);
+
+        // I really hope that these 64bits integer can fit in 32 bits integer, because js
+        // won't let us have more.
+        if (this.uncompressedSize === utils.MAX_VALUE_32BITS) {
+            this.uncompressedSize = extraReader.readInt(8);
+        }
+        if (this.compressedSize === utils.MAX_VALUE_32BITS) {
+            this.compressedSize = extraReader.readInt(8);
+        }
+        if (this.localHeaderOffset === utils.MAX_VALUE_32BITS) {
+            this.localHeaderOffset = extraReader.readInt(8);
+        }
+        if (this.diskNumberStart === utils.MAX_VALUE_32BITS) {
+            this.diskNumberStart = extraReader.readInt(4);
+        }
+    },
+    /**
+     * Read the central part of a zip file and add the info in this object.
+     * @param {DataReader} reader the reader to use.
+     */
+    readExtraFields: function(reader) {
+        var start = reader.index,
+            extraFieldId,
+            extraFieldLength,
+            extraFieldValue;
+
+        this.extraFields = this.extraFields || {};
+
+        while (reader.index < start + this.extraFieldsLength) {
+            extraFieldId = reader.readInt(2);
+            extraFieldLength = reader.readInt(2);
+            extraFieldValue = reader.readString(extraFieldLength);
+
+            this.extraFields[extraFieldId] = {
+                id: extraFieldId,
+                length: extraFieldLength,
+                value: extraFieldValue
+            };
+        }
+    },
+    /**
+     * Apply an UTF8 transformation if needed.
+     */
+    handleUTF8: function() {
+        if (this.useUTF8()) {
+            this.fileName = jszipProto.utf8decode(this.fileName);
+            this.fileComment = jszipProto.utf8decode(this.fileComment);
+        } else {
+            var upath = this.findExtraFieldUnicodePath();
+            if (upath !== null) {
+                this.fileName = upath;
+            }
+            var ucomment = this.findExtraFieldUnicodeComment();
+            if (ucomment !== null) {
+                this.fileComment = ucomment;
+            }
+        }
+    },
+
+    /**
+     * Find the unicode path declared in the extra field, if any.
+     * @return {String} the unicode path, null otherwise.
+     */
+    findExtraFieldUnicodePath: function() {
+        var upathField = this.extraFields[0x7075];
+        if (upathField) {
+            var extraReader = new StringReader(upathField.value);
+
+            // wrong version
+            if (extraReader.readInt(1) !== 1) {
+                return null;
+            }
+
+            // the crc of the filename changed, this field is out of date.
+            if (jszipProto.crc32(this.fileName) !== extraReader.readInt(4)) {
+                return null;
+            }
+
+            return jszipProto.utf8decode(extraReader.readString(upathField.length - 5));
+        }
+        return null;
+    },
+
+    /**
+     * Find the unicode comment declared in the extra field, if any.
+     * @return {String} the unicode comment, null otherwise.
+     */
+    findExtraFieldUnicodeComment: function() {
+        var ucommentField = this.extraFields[0x6375];
+        if (ucommentField) {
+            var extraReader = new StringReader(ucommentField.value);
+
+            // wrong version
+            if (extraReader.readInt(1) !== 1) {
+                return null;
+            }
+
+            // the crc of the comment changed, this field is out of date.
+            if (jszipProto.crc32(this.fileComment) !== extraReader.readInt(4)) {
+                return null;
+            }
+
+            return jszipProto.utf8decode(extraReader.readString(ucommentField.length - 5));
+        }
+        return null;
+    }
+};
+module.exports = ZipEntry;
+
+},{"./compressedObject":2,"./object":13,"./stringReader":15,"./utils":21}],24:[function(_dereq_,module,exports){
+// Top level file is just a mixin of submodules & constants
+'use strict';
+
+var assign    = _dereq_('./lib/utils/common').assign;
+
+var deflate   = _dereq_('./lib/deflate');
+var inflate   = _dereq_('./lib/inflate');
+var constants = _dereq_('./lib/zlib/constants');
+
+var pako = {};
+
+assign(pako, deflate, inflate, constants);
+
+module.exports = pako;
+},{"./lib/deflate":25,"./lib/inflate":26,"./lib/utils/common":27,"./lib/zlib/constants":30}],25:[function(_dereq_,module,exports){
+'use strict';
+
+
+var zlib_deflate = _dereq_('./zlib/deflate.js');
+var utils = _dereq_('./utils/common');
+var strings = _dereq_('./utils/strings');
+var msg = _dereq_('./zlib/messages');
+var zstream = _dereq_('./zlib/zstream');
+
+
+/* Public constants ==========================================================*/
+/* ===========================================================================*/
+
+var Z_NO_FLUSH      = 0;
+var Z_FINISH        = 4;
+
+var Z_OK            = 0;
+var Z_STREAM_END    = 1;
+
+var Z_DEFAULT_COMPRESSION = -1;
+
+var Z_DEFAULT_STRATEGY    = 0;
+
+var Z_DEFLATED  = 8;
+
+/* ===========================================================================*/
+
+
+/**
+ * class Deflate
+ *
+ * Generic JS-style wrapper for zlib calls. If you don't need
+ * streaming behaviour - use more simple functions: [[deflate]],
+ * [[deflateRaw]] and [[gzip]].
+ **/
+
+/* internal
+ * Deflate.chunks -> Array
+ *
+ * Chunks of output data, if [[Deflate#onData]] not overriden.
+ **/
+
+/**
+ * Deflate.result -> Uint8Array|Array
+ *
+ * Compressed result, generated by default [[Deflate#onData]]
+ * and [[Deflate#onEnd]] handlers. Filled after you push last chunk
+ * (call [[Deflate#push]] with `Z_FINISH` / `true` param).
+ **/
+
+/**
+ * Deflate.err -> Number
+ *
+ * Error code after deflate finished. 0 (Z_OK) on success.
+ * You will not need it in real life, because deflate errors
+ * are possible only on wrong options or bad `onData` / `onEnd`
+ * custom handlers.
+ **/
+
+/**
+ * Deflate.msg -> String
+ *
+ * Error message, if [[Deflate.err]] != 0
+ **/
+
+
+/**
+ * new Deflate(options)
+ * - options (Object): zlib deflate options.
+ *
+ * Creates new deflator instance with specified params. Throws exception
+ * on bad params. Supported options:
+ *
+ * - `level`
+ * - `windowBits`
+ * - `memLevel`
+ * - `strategy`
+ *
+ * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
+ * for more information on these.
+ *
+ * Additional options, for internal needs:
+ *
+ * - `chunkSize` - size of generated data chunks (16K by default)
+ * - `raw` (Boolean) - do raw deflate
+ * - `gzip` (Boolean) - create gzip wrapper
+ * - `to` (String) - if equal to 'string', then result will be "binary string"
+ *    (each char code [0..255])
+ * - `header` (Object) - custom header for gzip
+ *   - `text` (Boolean) - true if compressed data believed to be text
+ *   - `time` (Number) - modification time, unix timestamp
+ *   - `os` (Number) - operation system code
+ *   - `extra` (Array) - array of bytes with extra data (max 65536)
+ *   - `name` (String) - file name (binary string)
+ *   - `comment` (String) - comment (binary string)
+ *   - `hcrc` (Boolean) - true if header crc should be added
+ *
+ * ##### Example:
+ *
+ * ```javascript
+ * var pako = require('pako')
+ *   , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])
+ *   , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);
+ *
+ * var deflate = new pako.Deflate({ level: 3});
+ *
+ * deflate.push(chunk1, false);
+ * deflate.push(chunk2, true);  // true -> last chunk
+ *
+ * if (deflate.err) { throw new Error(deflate.err); }
+ *
+ * console.log(deflate.result);
+ * ```
+ **/
+var Deflate = function(options) {
+
+  this.options = utils.assign({
+    level: Z_DEFAULT_COMPRESSION,
+    method: Z_DEFLATED,
+    chunkSize: 16384,
+    windowBits: 15,
+    memLevel: 8,
+    strategy: Z_DEFAULT_STRATEGY,
+    to: ''
+  }, options || {});
+
+  var opt = this.options;
+
+  if (opt.raw && (opt.windowBits > 0)) {
+    opt.windowBits = -opt.windowBits;
+  }
+
+  else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {
+    opt.windowBits += 16;
+  }
+
+  this.err    = 0;      // error code, if happens (0 = Z_OK)
+  this.msg    = '';     // error message
+  this.ended  = false;  // used to avoid multiple onEnd() calls
+  this.chunks = [];     // chunks of compressed data
+
+  this.strm = new zstream();
+  this.strm.avail_out = 0;
+
+  var status = zlib_deflate.deflateInit2(
+    this.strm,
+    opt.level,
+    opt.method,
+    opt.windowBits,
+    opt.memLevel,
+    opt.strategy
+  );
+
+  if (status !== Z_OK) {
+    throw new Error(msg[status]);
+  }
+
+  if (opt.header) {
+    zlib_deflate.deflateSetHeader(this.strm, opt.header);
+  }
+};
+
+/**
+ * Deflate#push(data[, mode]) -> Boolean
+ * - data (Uint8Array|Array|String): input data. Strings will be converted to
+ *   utf8 byte sequence.
+ * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.
+ *   See constants. Skipped or `false` means Z_NO_FLUSH, `true` meansh Z_FINISH.
+ *
+ * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with
+ * new compressed chunks. Returns `true` on success. The last data block must have
+ * mode Z_FINISH (or `true`). That flush internal pending buffers and call
+ * [[Deflate#onEnd]].
+ *
+ * On fail call [[Deflate#onEnd]] with error code and return false.
+ *
+ * We strongly recommend to use `Uint8Array` on input for best speed (output
+ * array format is detected automatically). Also, don't skip last param and always
+ * use the same type in your code (boolean or number). That will improve JS speed.
+ *
+ * For regular `Array`-s make sure all elements are [0..255].
+ *
+ * ##### Example
+ *
+ * ```javascript
+ * push(chunk, false); // push one of data chunks
+ * ...
+ * push(chunk, true);  // push last chunk
+ * ```
+ **/
+Deflate.prototype.push = function(data, mode) {
+  var strm = this.strm;
+  var chunkSize = this.options.chunkSize;
+  var status, _mode;
+
+  if (this.ended) { return false; }
+
+  _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH : Z_NO_FLUSH);
+
+  // Convert data if needed
+  if (typeof data === 'string') {
+    // If we need to compress text, change encoding to utf8.
+    strm.input = strings.string2buf(data);
+  } else {
+    strm.input = data;
+  }
+
+  strm.next_in = 0;
+  strm.avail_in = strm.input.length;
+
+  do {
+    if (strm.avail_out === 0) {
+      strm.output = new utils.Buf8(chunkSize);
+      strm.next_out = 0;
+      strm.avail_out = chunkSize;
+    }
+    status = zlib_deflate.deflate(strm, _mode);    /* no bad return value */
+
+    if (status !== Z_STREAM_END && status !== Z_OK) {
+      this.onEnd(status);
+      this.ended = true;
+      return false;
+    }
+    if (strm.avail_out === 0 || (strm.avail_in === 0 && _mode === Z_FINISH)) {
+      if (this.options.to === 'string') {
+        this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out)));
+      } else {
+        this.onData(utils.shrinkBuf(strm.output, strm.next_out));
+      }
+    }
+  } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END);
+
+  // Finalize on the last chunk.
+  if (_mode === Z_FINISH) {
+    status = zlib_deflate.deflateEnd(this.strm);
+    this.onEnd(status);
+    this.ended = true;
+    return status === Z_OK;
+  }
+
+  return true;
+};
+
+
+/**
+ * Deflate#onData(chunk) -> Void
+ * - chunk (Uint8Array|Array|String): ouput data. Type of array depends
+ *   on js engine support. When string output requested, each chunk
+ *   will be string.
+ *
+ * By default, stores data blocks in `chunks[]` property and glue
+ * those in `onEnd`. Override this handler, if you need another behaviour.
+ **/
+Deflate.prototype.onData = function(chunk) {
+  this.chunks.push(chunk);
+};
+
+
+/**
+ * Deflate#onEnd(status) -> Void
+ * - status (Number): deflate status. 0 (Z_OK) on success,
+ *   other if not.
+ *
+ * Called once after you tell deflate that input stream complete
+ * or error happenned. By default - join collected chunks,
+ * free memory and fill `results` / `err` properties.
+ **/
+Deflate.prototype.onEnd = function(status) {
+  // On success - join
+  if (status === Z_OK) {
+    if (this.options.to === 'string') {
+      this.result = this.chunks.join('');
+    } else {
+      this.result = utils.flattenChunks(this.chunks);
+    }
+  }
+  this.chunks = [];
+  this.err = status;
+  this.msg = this.strm.msg;
+};
+
+
+/**
+ * deflate(data[, options]) -> Uint8Array|Array|String
+ * - data (Uint8Array|Array|String): input data to compress.
+ * - options (Object): zlib deflate options.
+ *
+ * Compress `data` with deflate alrorythm and `options`.
+ *
+ * Supported options are:
+ *
+ * - level
+ * - windowBits
+ * - memLevel
+ * - strategy
+ *
+ * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
+ * for more information on these.
+ *
+ * Sugar (options):
+ *
+ * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify
+ *   negative windowBits implicitly.
+ * - `to` (String) - if equal to 'string', then result will be "binary string"
+ *    (each char code [0..255])
+ *
+ * ##### Example:
+ *
+ * ```javascript
+ * var pako = require('pako')
+ *   , data = Uint8Array([1,2,3,4,5,6,7,8,9]);
+ *
+ * console.log(pako.deflate(data));
+ * ```
+ **/
+function deflate(input, options) {
+  var deflator = new Deflate(options);
+
+  deflator.push(input, true);
+
+  // That will never happens, if you don't cheat with options :)
+  if (deflator.err) { throw deflator.msg; }
+
+  return deflator.result;
+}
+
+
+/**
+ * deflateRaw(data[, options]) -> Uint8Array|Array|String
+ * - data (Uint8Array|Array|String): input data to compress.
+ * - options (Object): zlib deflate options.
+ *
+ * The same as [[deflate]], but creates raw data, without wrapper
+ * (header and adler32 crc).
+ **/
+function deflateRaw(input, options) {
+  options = options || {};
+  options.raw = true;
+  return deflate(input, options);
+}
+
+
+/**
+ * gzip(data[, options]) -> Uint8Array|Array|String
+ * - data (Uint8Array|Array|String): input data to compress.
+ * - options (Object): zlib deflate options.
+ *
+ * The same as [[deflate]], but create gzip wrapper instead of
+ * deflate one.
+ **/
+function gzip(input, options) {
+  options = options || {};
+  options.gzip = true;
+  return deflate(input, options);
+}
+
+
+exports.Deflate = Deflate;
+exports.deflate = deflate;
+exports.deflateRaw = deflateRaw;
+exports.gzip = gzip;
+},{"./utils/common":27,"./utils/strings":28,"./zlib/deflate.js":32,"./zlib/messages":37,"./zlib/zstream":39}],26:[function(_dereq_,module,exports){
+'use strict';
+
+
+var zlib_inflate = _dereq_('./zlib/inflate.js');
+var utils = _dereq_('./utils/common');
+var strings = _dereq_('./utils/strings');
+var c = _dereq_('./zlib/constants');
+var msg = _dereq_('./zlib/messages');
+var zstream = _dereq_('./zlib/zstream');
+var gzheader = _dereq_('./zlib/gzheader');
+
+
+/**
+ * class Inflate
+ *
+ * Generic JS-style wrapper for zlib calls. If you don't need
+ * streaming behaviour - use more simple functions: [[inflate]]
+ * and [[inflateRaw]].
+ **/
+
+/* internal
+ * inflate.chunks -> Array
+ *
+ * Chunks of output data, if [[Inflate#onData]] not overriden.
+ **/
+
+/**
+ * Inflate.result -> Uint8Array|Array|String
+ *
+ * Uncompressed result, generated by default [[Inflate#onData]]
+ * and [[Inflate#onEnd]] handlers. Filled after you push last chunk
+ * (call [[Inflate#push]] with `Z_FINISH` / `true` param).
+ **/
+
+/**
+ * Inflate.err -> Number
+ *
+ * Error code after inflate finished. 0 (Z_OK) on success.
+ * Should be checked if broken data possible.
+ **/
+
+/**
+ * Inflate.msg -> String
+ *
+ * Error message, if [[Inflate.err]] != 0
+ **/
+
+
+/**
+ * new Inflate(options)
+ * - options (Object): zlib inflate options.
+ *
+ * Creates new inflator instance with specified params. Throws exception
+ * on bad params. Supported options:
+ *
+ * - `windowBits`
+ *
+ * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
+ * for more information on these.
+ *
+ * Additional options, for internal needs:
+ *
+ * - `chunkSize` - size of generated data chunks (16K by default)
+ * - `raw` (Boolean) - do raw inflate
+ * - `to` (String) - if equal to 'string', then result will be converted
+ *   from utf8 to utf16 (javascript) string. When string output requested,
+ *   chunk length can differ from `chunkSize`, depending on content.
+ *
+ * By default, when no options set, autodetect deflate/gzip data format via
+ * wrapper header.
+ *
+ * ##### Example:
+ *
+ * ```javascript
+ * var pako = require('pako')
+ *   , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])
+ *   , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);
+ *
+ * var inflate = new pako.Inflate({ level: 3});
+ *
+ * inflate.push(chunk1, false);
+ * inflate.push(chunk2, true);  // true -> last chunk
+ *
+ * if (inflate.err) { throw new Error(inflate.err); }
+ *
+ * console.log(inflate.result);
+ * ```
+ **/
+var Inflate = function(options) {
+
+  this.options = utils.assign({
+    chunkSize: 16384,
+    windowBits: 0,
+    to: ''
+  }, options || {});
+
+  var opt = this.options;
+
+  // Force window size for `raw` data, if not set directly,
+  // because we have no header for autodetect.
+  if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {
+    opt.windowBits = -opt.windowBits;
+    if (opt.windowBits === 0) { opt.windowBits = -15; }
+  }
+
+  // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate
+  if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&
+      !(options && options.windowBits)) {
+    opt.windowBits += 32;
+  }
+
+  // Gzip header has no info about windows size, we can do autodetect only
+  // for deflate. So, if window size not set, force it to max when gzip possible
+  if ((opt.windowBits > 15) && (opt.windowBits < 48)) {
+    // bit 3 (16) -> gzipped data
+    // bit 4 (32) -> autodetect gzip/deflate
+    if ((opt.windowBits & 15) === 0) {
+      opt.windowBits |= 15;
+    }
+  }
+
+  this.err    = 0;      // error code, if happens (0 = Z_OK)
+  this.msg    = '';     // error message
+  this.ended  = false;  // used to avoid multiple onEnd() calls
+  this.chunks = [];     // chunks of compressed data
+
+  this.strm   = new zstream();
+  this.strm.avail_out = 0;
+
+  var status  = zlib_inflate.inflateInit2(
+    this.strm,
+    opt.windowBits
+  );
+
+  if (status !== c.Z_OK) {
+    throw new Error(msg[status]);
+  }
+
+  this.header = new gzheader();
+
+  zlib_inflate.inflateGetHeader(this.strm, this.header);
+};
+
+/**
+ * Inflate#push(data[, mode]) -> Boolean
+ * - data (Uint8Array|Array|String): input data
+ * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.
+ *   See constants. Skipped or `false` means Z_NO_FLUSH, `true` meansh Z_FINISH.
+ *
+ * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with
+ * new output chunks. Returns `true` on success. The last data block must have
+ * mode Z_FINISH (or `true`). That flush internal pending buffers and call
+ * [[Inflate#onEnd]].
+ *
+ * On fail call [[Inflate#onEnd]] with error code and return false.
+ *
+ * We strongly recommend to use `Uint8Array` on input for best speed (output
+ * format is detected automatically). Also, don't skip last param and always
+ * use the same type in your code (boolean or number). That will improve JS speed.
+ *
+ * For regular `Array`-s make sure all elements are [0..255].
+ *
+ * ##### Example
+ *
+ * ```javascript
+ * push(chunk, false); // push one of data chunks
+ * ...
+ * push(chunk, true);  // push last chunk
+ * ```
+ **/
+Inflate.prototype.push = function(data, mode) {
+  var strm = this.strm;
+  var chunkSize = this.options.chunkSize;
+  var status, _mode;
+  var next_out_utf8, tail, utf8str;
+
+  if (this.ended) { return false; }
+  _mode = (mode === ~~mode) ? mode : ((mode === true) ? c.Z_FINISH : c.Z_NO_FLUSH);
+
+  // Convert data if needed
+  if (typeof data === 'string') {
+    // Only binary strings can be decompressed on practice
+    strm.input = strings.binstring2buf(data);
+  } else {
+    strm.input = data;
+  }
+
+  strm.next_in = 0;
+  strm.avail_in = strm.input.length;
+
+  do {
+    if (strm.avail_out === 0) {
+      strm.output = new utils.Buf8(chunkSize);
+      strm.next_out = 0;
+      strm.avail_out = chunkSize;
+    }
+
+    status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH);    /* no bad return value */
+
+    if (status !== c.Z_STREAM_END && status !== c.Z_OK) {
+      this.onEnd(status);
+      this.ended = true;
+      return false;
+    }
+
+    if (strm.next_out) {
+      if (strm.avail_out === 0 || status === c.Z_STREAM_END || (strm.avail_in === 0 && _mode === c.Z_FINISH)) {
+
+        if (this.options.to === 'string') {
+
+          next_out_utf8 = strings.utf8border(strm.output, strm.next_out);
+
+          tail = strm.next_out - next_out_utf8;
+          utf8str = strings.buf2string(strm.output, next_out_utf8);
+
+          // move tail
+          strm.next_out = tail;
+          strm.avail_out = chunkSize - tail;
+          if (tail) { utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); }
+
+          this.onData(utf8str);
+
+        } else {
+          this.onData(utils.shrinkBuf(strm.output, strm.next_out));
+        }
+      }
+    }
+  } while ((strm.avail_in > 0) && status !== c.Z_STREAM_END);
+
+  if (status === c.Z_STREAM_END) {
+    _mode = c.Z_FINISH;
+  }
+  // Finalize on the last chunk.
+  if (_mode === c.Z_FINISH) {
+    status = zlib_inflate.inflateEnd(this.strm);
+    this.onEnd(status);
+    this.ended = true;
+    return status === c.Z_OK;
+  }
+
+  return true;
+};
+
+
+/**
+ * Inflate#onData(chunk) -> Void
+ * - chunk (Uint8Array|Array|String): ouput data. Type of array depends
+ *   on js engine support. When string output requested, each chunk
+ *   will be string.
+ *
+ * By default, stores data blocks in `chunks[]` property and glue
+ * those in `onEnd`. Override this handler, if you need another behaviour.
+ **/
+Inflate.prototype.onData = function(chunk) {
+  this.chunks.push(chunk);
+};
+
+
+/**
+ * Inflate#onEnd(status) -> Void
+ * - status (Number): inflate status. 0 (Z_OK) on success,
+ *   other if not.
+ *
+ * Called once after you tell inflate that input stream complete
+ * or error happenned. By default - join collected chunks,
+ * free memory and fill `results` / `err` properties.
+ **/
+Inflate.prototype.onEnd = function(status) {
+  // On success - join
+  if (status === c.Z_OK) {
+    if (this.options.to === 'string') {
+      // Glue & convert here, until we teach pako to send
+      // utf8 alligned strings to onData
+      this.result = this.chunks.join('');
+    } else {
+      this.result = utils.flattenChunks(this.chunks);
+    }
+  }
+  this.chunks = [];
+  this.err = status;
+  this.msg = this.strm.msg;
+};
+
+
+/**
+ * inflate(data[, options]) -> Uint8Array|Array|String
+ * - data (Uint8Array|Array|String): input data to decompress.
+ * - options (Object): zlib inflate options.
+ *
+ * Decompress `data` with inflate/ungzip and `options`. Autodetect
+ * format via wrapper header by default. That's why we don't provide
+ * separate `ungzip` method.
+ *
+ * Supported options are:
+ *
+ * - windowBits
+ *
+ * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
+ * for more information.
+ *
+ * Sugar (options):
+ *
+ * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify
+ *   negative windowBits implicitly.
+ * - `to` (String) - if equal to 'string', then result will be converted
+ *   from utf8 to utf16 (javascript) string. When string output requested,
+ *   chunk length can differ from `chunkSize`, depending on content.
+ *
+ *
+ * ##### Example:
+ *
+ * ```javascript
+ * var pako = require('pako')
+ *   , input = pako.deflate([1,2,3,4,5,6,7,8,9])
+ *   , output;
+ *
+ * try {
+ *   output = pako.inflate(input);
+ * } catch (err)
+ *   console.log(err);
+ * }
+ * ```
+ **/
+function inflate(input, options) {
+  var inflator = new Inflate(options);
+
+  inflator.push(input, true);
+
+  // That will never happens, if you don't cheat with options :)
+  if (inflator.err) { throw inflator.msg; }
+
+  return inflator.result;
+}
+
+
+/**
+ * inflateRaw(data[, options]) -> Uint8Array|Array|String
+ * - data (Uint8Array|Array|String): input data to decompress.
+ * - options (Object): zlib inflate options.
+ *
+ * The same as [[inflate]], but creates raw data, without wrapper
+ * (header and adler32 crc).
+ **/
+function inflateRaw(input, options) {
+  options = options || {};
+  options.raw = true;
+  return inflate(input, options);
+}
+
+
+/**
+ * ungzip(data[, options]) -> Uint8Array|Array|String
+ * - data (Uint8Array|Array|String): input data to decompress.
+ * - options (Object): zlib inflate options.
+ *
+ * Just shortcut to [[inflate]], because it autodetects format
+ * by header.content. Done for convenience.
+ **/
+
+
+exports.Inflate = Inflate;
+exports.inflate = inflate;
+exports.inflateRaw = inflateRaw;
+exports.ungzip  = inflate;
+
+},{"./utils/common":27,"./utils/strings":28,"./zlib/constants":30,"./zlib/gzheader":33,"./zlib/inflate.js":35,"./zlib/messages":37,"./zlib/zstream":39}],27:[function(_dereq_,module,exports){
+'use strict';
+
+
+var TYPED_OK =  (typeof Uint8Array !== 'undefined') &&
+                (typeof Uint16Array !== 'undefined') &&
+                (typeof Int32Array !== 'undefined');
+
+
+exports.assign = function (obj /*from1, from2, from3, ...*/) {
+  var sources = Array.prototype.slice.call(arguments, 1);
+  while (sources.length) {
+    var source = sources.shift();
+    if (!source) { continue; }
+
+    if (typeof(source) !== 'object') {
+      throw new TypeError(source + 'must be non-object');
+    }
+
+    for (var p in source) {
+      if (source.hasOwnProperty(p)) {
+        obj[p] = source[p];
+      }
+    }
+  }
+
+  return obj;
+};
+
+
+// reduce buffer size, avoiding mem copy
+exports.shrinkBuf = function (buf, size) {
+  if (buf.length === size) { return buf; }
+  if (buf.subarray) { return buf.subarray(0, size); }
+  buf.length = size;
+  return buf;
+};
+
+
+var fnTyped = {
+  arraySet: function (dest, src, src_offs, len, dest_offs) {
+    if (src.subarray && dest.subarray) {
+      dest.set(src.subarray(src_offs, src_offs+len), dest_offs);
+      return;
+    }
+    // Fallback to ordinary array
+    for(var i=0; i<len; i++) {
+      dest[dest_offs + i] = src[src_offs + i];
+    }
+  },
+  // Join array of chunks to single array.
+  flattenChunks: function(chunks) {
+    var i, l, len, pos, chunk, result;
+
+    // calculate data length
+    len = 0;
+    for (i=0, l=chunks.length; i<l; i++) {
+      len += chunks[i].length;
+    }
+
+    // join chunks
+    result = new Uint8Array(len);
+    pos = 0;
+    for (i=0, l=chunks.length; i<l; i++) {
+      chunk = chunks[i];
+      result.set(chunk, pos);
+      pos += chunk.length;
+    }
+
+    return result;
+  }
+};
+
+var fnUntyped = {
+  arraySet: function (dest, src, src_offs, len, dest_offs) {
+    for(var i=0; i<len; i++) {
+      dest[dest_offs + i] = src[src_offs + i];
+    }
+  },
+  // Join array of chunks to single array.
+  flattenChunks: function(chunks) {
+    return [].concat.apply([], chunks);
+  }
+};
+
+
+// Enable/Disable typed arrays use, for testing
+//
+exports.setTyped = function (on) {
+  if (on) {
+    exports.Buf8  = Uint8Array;
+    exports.Buf16 = Uint16Array;
+    exports.Buf32 = Int32Array;
+    exports.assign(exports, fnTyped);
+  } else {
+    exports.Buf8  = Array;
+    exports.Buf16 = Array;
+    exports.Buf32 = Array;
+    exports.assign(exports, fnUntyped);
+  }
+};
+
+exports.setTyped(TYPED_OK);
+},{}],28:[function(_dereq_,module,exports){
+// String encode/decode helpers
+'use strict';
+
+
+var utils = _dereq_('./common');
+
+
+// Quick check if we can use fast array to bin string conversion
+//
+// - apply(Array) can fail on Android 2.2
+// - apply(Uint8Array) can fail on iOS 5.1 Safary
+//
+var STR_APPLY_OK = true;
+var STR_APPLY_UIA_OK = true;
+
+try { String.fromCharCode.apply(null, [0]); } catch(__) { STR_APPLY_OK = false; }
+try { String.fromCharCode.apply(null, new Uint8Array(1)); } catch(__) { STR_APPLY_UIA_OK = false; }
+
+
+// Table with utf8 lengths (calculated by first byte of sequence)
+// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,
+// because max possible codepoint is 0x10ffff
+var _utf8len = new utils.Buf8(256);
+for (var i=0; i<256; i++) {
+  _utf8len[i] = (i >= 252 ? 6 : i >= 248 ? 5 : i >= 240 ? 4 : i >= 224 ? 3 : i >= 192 ? 2 : 1);
+}
+_utf8len[254]=_utf8len[254]=1; // Invalid sequence start
+
+
+// convert string to array (typed, when possible)
+exports.string2buf = function (str) {
+  var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;
+
+  // count binary size
+  for (m_pos = 0; m_pos < str_len; m_pos++) {
+    c = str.charCodeAt(m_pos);
+    if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) {
+      c2 = str.charCodeAt(m_pos+1);
+      if ((c2 & 0xfc00) === 0xdc00) {
+        c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);
+        m_pos++;
+      }
+    }
+    buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;
+  }
+
+  // allocate buffer
+  buf = new utils.Buf8(buf_len);
+
+  // convert
+  for (i=0, m_pos = 0; i < buf_len; m_pos++) {
+    c = str.charCodeAt(m_pos);
+    if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) {
+      c2 = str.charCodeAt(m_pos+1);
+      if ((c2 & 0xfc00) === 0xdc00) {
+        c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);
+        m_pos++;
+      }
+    }
+    if (c < 0x80) {
+      /* one byte */
+      buf[i++] = c;
+    } else if (c < 0x800) {
+      /* two bytes */
+      buf[i++] = 0xC0 | (c >>> 6);
+      buf[i++] = 0x80 | (c & 0x3f);
+    } else if (c < 0x10000) {
+      /* three bytes */
+      buf[i++] = 0xE0 | (c >>> 12);
+      buf[i++] = 0x80 | (c >>> 6 & 0x3f);
+      buf[i++] = 0x80 | (c & 0x3f);
+    } else {
+      /* four bytes */
+      buf[i++] = 0xf0 | (c >>> 18);
+      buf[i++] = 0x80 | (c >>> 12 & 0x3f);
+      buf[i++] = 0x80 | (c >>> 6 & 0x3f);
+      buf[i++] = 0x80 | (c & 0x3f);
+    }
+  }
+
+  return buf;
+};
+
+// Helper (used in 2 places)
+function buf2binstring(buf, len) {
+  // use fallback for big arrays to avoid stack overflow
+  if (len < 65537) {
+    if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) {
+      return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len));
+    }
+  }
+
+  var result = '';
+  for(var i=0; i < len; i++) {
+    result += String.fromCharCode(buf[i]);
+  }
+  return result;
+}
+
+
+// Convert byte array to binary string
+exports.buf2binstring = function(buf) {
+  return buf2binstring(buf, buf.length);
+};
+
+
+// Convert binary string (typed, when possible)
+exports.binstring2buf = function(str) {
+  var buf = new utils.Buf8(str.length);
+  for(var i=0, len=buf.length; i < len; i++) {
+    buf[i] = str.charCodeAt(i);
+  }
+  return buf;
+};
+
+
+// convert array to string
+exports.buf2string = function (buf, max) {
+  var i, out, c, c_len;
+  var len = max || buf.length;
+
+  // Reserve max possible length (2 words per char)
+  // NB: by unknown reasons, Array is significantly faster for
+  //     String.fromCharCode.apply than Uint16Array.
+  var utf16buf = new Array(len*2);
+
+  for (out=0, i=0; i<len;) {
+    c = buf[i++];
+    // quick process ascii
+    if (c < 0x80) { utf16buf[out++] = c; continue; }
+
+    c_len = _utf8len[c];
+    // skip 5 & 6 byte codes
+    if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len-1; continue; }
+
+    // apply mask on first byte
+    c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;
+    // join the rest
+    while (c_len > 1 && i < len) {
+      c = (c << 6) | (buf[i++] & 0x3f);
+      c_len--;
+    }
+
+    // terminated by end of string?
+    if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }
+
+    if (c < 0x10000) {
+      utf16buf[out++] = c;
+    } else {
+      c -= 0x10000;
+      utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);
+      utf16buf[out++] = 0xdc00 | (c & 0x3ff);
+    }
+  }
+
+  return buf2binstring(utf16buf, out);
+};
+
+
+// Calculate max possible position in utf8 buffer,
+// that will not break sequence. If that's not possible
+// - (very small limits) return max size as is.
+//
+// buf[] - utf8 bytes array
+// max   - length limit (mandatory);
+exports.utf8border = function(buf, max) {
+  var pos;
+
+  max = max || buf.length;
+  if (max > buf.length) { max = buf.length; }
+
+  // go back from last position, until start of sequence found
+  pos = max-1;
+  while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }
+
+  // Fuckup - very small and broken sequence,
+  // return max, because we should return something anyway.
+  if (pos < 0) { return max; }
+
+  // If we came to start of buffer - that means vuffer is too small,
+  // return max too.
+  if (pos === 0) { return max; }
+
+  return (pos + _utf8len[buf[pos]] > max) ? pos : max;
+};
+
+},{"./common":27}],29:[function(_dereq_,module,exports){
+'use strict';
+
+// Note: adler32 takes 12% for level 0 and 2% for level 6.
+// It doesn't worth to make additional optimizationa as in original.
+// Small size is preferable.
+
+function adler32(adler, buf, len, pos) {
+  var s1 = (adler & 0xffff) |0
+    , s2 = ((adler >>> 16) & 0xffff) |0
+    , n = 0;
+
+  while (len !== 0) {
+    // Set limit ~ twice less than 5552, to keep
+    // s2 in 31-bits, because we force signed ints.
+    // in other case %= will fail.
+    n = len > 2000 ? 2000 : len;
+    len -= n;
+
+    do {
+      s1 = (s1 + buf[pos++]) |0;
+      s2 = (s2 + s1) |0;
+    } while (--n);
+
+    s1 %= 65521;
+    s2 %= 65521;
+  }
+
+  return (s1 | (s2 << 16)) |0;
+}
+
+
+module.exports = adler32;
+},{}],30:[function(_dereq_,module,exports){
+module.exports = {
+
+  /* Allowed flush values; see deflate() and inflate() below for details */
+  Z_NO_FLUSH:         0,
+  Z_PARTIAL_FLUSH:    1,
+  Z_SYNC_FLUSH:       2,
+  Z_FULL_FLUSH:       3,
+  Z_FINISH:           4,
+  Z_BLOCK:            5,
+  Z_TREES:            6,
+
+  /* Return codes for the compression/decompression functions. Negative values
+  * are errors, positive values are used for special but normal events.
+  */
+  Z_OK:               0,
+  Z_STREAM_END:       1,
+  Z_NEED_DICT:        2,
+  Z_ERRNO:           -1,
+  Z_STREAM_ERROR:    -2,
+  Z_DATA_ERROR:      -3,
+  //Z_MEM_ERROR:     -4,
+  Z_BUF_ERROR:       -5,
+  //Z_VERSION_ERROR: -6,
+
+  /* compression levels */
+  Z_NO_COMPRESSION:         0,
+  Z_BEST_SPEED:             1,
+  Z_BEST_COMPRESSION:       9,
+  Z_DEFAULT_COMPRESSION:   -1,
+
+
+  Z_FILTERED:               1,
+  Z_HUFFMAN_ONLY:           2,
+  Z_RLE:                    3,
+  Z_FIXED:                  4,
+  Z_DEFAULT_STRATEGY:       0,
+
+  /* Possible values of the data_type field (though see inflate()) */
+  Z_BINARY:                 0,
+  Z_TEXT:                   1,
+  //Z_ASCII:                1, // = Z_TEXT (deprecated)
+  Z_UNKNOWN:                2,
+
+  /* The deflate compression method */
+  Z_DEFLATED:               8
+  //Z_NULL:                 null // Use -1 or null inline, depending on var type
+};
+},{}],31:[function(_dereq_,module,exports){
+'use strict';
+
+// Note: we can't get significant speed boost here.
+// So write code to minimize size - no pregenerated tables
+// and array tools dependencies.
+
+
+// Use ordinary array, since untyped makes no boost here
+function makeTable() {
+  var c, table = [];
+
+  for(var n =0; n < 256; n++){
+    c = n;
+    for(var k =0; k < 8; k++){
+      c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));
+    }
+    table[n] = c;
+  }
+
+  return table;
+}
+
+// Create table on load. Just 255 signed longs. Not a problem.
+var crcTable = makeTable();
+
+
+function crc32(crc, buf, len, pos) {
+  var t = crcTable
+    , end = pos + len;
+
+  crc = crc ^ (-1);
+
+  for (var i = pos; i < end; i++ ) {
+    crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];
+  }
+
+  return (crc ^ (-1)); // >>> 0;
+}
+
+
+module.exports = crc32;
+},{}],32:[function(_dereq_,module,exports){
+'use strict';
+
+var utils   = _dereq_('../utils/common');
+var trees   = _dereq_('./trees');
+var adler32 = _dereq_('./adler32');
+var crc32   = _dereq_('./crc32');
+var msg   = _dereq_('./messages');
+
+/* Public constants ==========================================================*/
+/* ===========================================================================*/
+
+
+/* Allowed flush values; see deflate() and inflate() below for details */
+var Z_NO_FLUSH      = 0;
+var Z_PARTIAL_FLUSH = 1;
+//var Z_SYNC_FLUSH    = 2;
+var Z_FULL_FLUSH    = 3;
+var Z_FINISH        = 4;
+var Z_BLOCK         = 5;
+//var Z_TREES         = 6;
+
+
+/* Return codes for the compression/decompression functions. Negative values
+ * are errors, positive values are used for special but normal events.
+ */
+var Z_OK            = 0;
+var Z_STREAM_END    = 1;
+//var Z_NEED_DICT     = 2;
+//var Z_ERRNO         = -1;
+var Z_STREAM_ERROR  = -2;
+var Z_DATA_ERROR    = -3;
+//var Z_MEM_ERROR     = -4;
+var Z_BUF_ERROR     = -5;
+//var Z_VERSION_ERROR = -6;
+
+
+/* compression levels */
+//var Z_NO_COMPRESSION      = 0;
+//var Z_BEST_SPEED          = 1;
+//var Z_BEST_COMPRESSION    = 9;
+var Z_DEFAULT_COMPRESSION = -1;
+
+
+var Z_FILTERED            = 1;
+var Z_HUFFMAN_ONLY        = 2;
+var Z_RLE                 = 3;
+var Z_FIXED               = 4;
+var Z_DEFAULT_STRATEGY    = 0;
+
+/* Possible values of the data_type field (though see inflate()) */
+//var Z_BINARY              = 0;
+//var Z_TEXT                = 1;
+//var Z_ASCII               = 1; // = Z_TEXT
+var Z_UNKNOWN             = 2;
+
+
+/* The deflate compression method */
+var Z_DEFLATED  = 8;
+
+/*============================================================================*/
+
+
+var MAX_MEM_LEVEL = 9;
+/* Maximum value for memLevel in deflateInit2 */
+var MAX_WBITS = 15;
+/* 32K LZ77 window */
+var DEF_MEM_LEVEL = 8;
+
+
+var LENGTH_CODES  = 29;
+/* number of length codes, not counting the special END_BLOCK code */
+var LITERALS      = 256;
+/* number of literal bytes 0..255 */
+var L_CODES       = LITERALS + 1 + LENGTH_CODES;
+/* number of Literal or Length codes, including the END_BLOCK code */
+var D_CODES       = 30;
+/* number of distance codes */
+var BL_CODES      = 19;
+/* number of codes used to transfer the bit lengths */
+var HEAP_SIZE     = 2*L_CODES + 1;
+/* maximum heap size */
+var MAX_BITS  = 15;
+/* All codes must not exceed MAX_BITS bits */
+
+var MIN_MATCH = 3;
+var MAX_MATCH = 258;
+var MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);
+
+var PRESET_DICT = 0x20;
+
+var INIT_STATE = 42;
+var EXTRA_STATE = 69;
+var NAME_STATE = 73;
+var COMMENT_STATE = 91;
+var HCRC_STATE = 103;
+var BUSY_STATE = 113;
+var FINISH_STATE = 666;
+
+var BS_NEED_MORE      = 1; /* block not completed, need more input or more output */
+var BS_BLOCK_DONE     = 2; /* block flush performed */
+var BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */
+var BS_FINISH_DONE    = 4; /* finish done, accept no more input or output */
+
+var OS_CODE = 0x03; // Unix :) . Don't detect, use this default.
+
+function err(strm, errorCode) {
+  strm.msg = msg[errorCode];
+  return errorCode;
+}
+
+function rank(f) {
+  return ((f) << 1) - ((f) > 4 ? 9 : 0);
+}
+
+function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }
+
+
+/* =========================================================================
+ * Flush as much pending output as possible. All deflate() output goes
+ * through this function so some applications may wish to modify it
+ * to avoid allocating a large strm->output buffer and copying into it.
+ * (See also read_buf()).
+ */
+function flush_pending(strm) {
+  var s = strm.state;
+
+  //_tr_flush_bits(s);
+  var len = s.pending;
+  if (len > strm.avail_out) {
+    len = strm.avail_out;
+  }
+  if (len === 0) { return; }
+
+  utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);
+  strm.next_out += len;
+  s.pending_out += len;
+  strm.total_out += len;
+  strm.avail_out -= len;
+  s.pending -= len;
+  if (s.pending === 0) {
+    s.pending_out = 0;
+  }
+}
+
+
+function flush_block_only (s, last) {
+  trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);
+  s.block_start = s.strstart;
+  flush_pending(s.strm);
+}
+
+
+function put_byte(s, b) {
+  s.pending_buf[s.pending++] = b;
+}
+
+
+/* =========================================================================
+ * Put a short in the pending buffer. The 16-bit value is put in MSB order.
+ * IN assertion: the stream state is correct and there is enough room in
+ * pending_buf.
+ */
+function putShortMSB(s, b) {
+//  put_byte(s, (Byte)(b >> 8));
+//  put_byte(s, (Byte)(b & 0xff));
+  s.pending_buf[s.pending++] = (b >>> 8) & 0xff;
+  s.pending_buf[s.pending++] = b & 0xff;
+}
+
+
+/* ===========================================================================
+ * Read a new buffer from the current input stream, update the adler32
+ * and total number of bytes read.  All deflate() input goes through
+ * this function so some applications may wish to modify it to avoid
+ * allocating a large strm->input buffer and copying from it.
+ * (See also flush_pending()).
+ */
+function read_buf(strm, buf, start, size) {
+  var len = strm.avail_in;
+
+  if (len > size) { len = size; }
+  if (len === 0) { return 0; }
+
+  strm.avail_in -= len;
+
+  utils.arraySet(buf, strm.input, strm.next_in, len, start);
+  if (strm.state.wrap === 1) {
+    strm.adler = adler32(strm.adler, buf, len, start);
+  }
+
+  else if (strm.state.wrap === 2) {
+    strm.adler = crc32(strm.adler, buf, len, start);
+  }
+
+  strm.next_in += len;
+  strm.total_in += len;
+
+  return len;
+}
+
+
+/* ===========================================================================
+ * Set match_start to the longest match starting at the given string and
+ * return its length. Matches shorter or equal to prev_length are discarded,
+ * in which case the result is equal to prev_length and match_start is
+ * garbage.
+ * IN assertions: cur_match is the head of the hash chain for the current
+ *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
+ * OUT assertion: the match length is not greater than s->lookahead.
+ */
+function longest_match(s, cur_match) {
+  var chain_length = s.max_chain_length;      /* max hash chain length */
+  var scan = s.strstart; /* current string */
+  var match;                       /* matched string */
+  var len;                           /* length of current match */
+  var best_len = s.prev_length;              /* best match length so far */
+  var nice_match = s.nice_match;             /* stop if match long enough */
+  var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?
+      s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;
+
+  var _win = s.window; // shortcut
+
+  var wmask = s.w_mask;
+  var prev  = s.prev;
+
+  /* Stop when cur_match becomes <= limit. To simplify the code,
+   * we prevent matches with the string of window index 0.
+   */
+
+  var strend = s.strstart + MAX_MATCH;
+  var scan_end1  = _win[scan + best_len - 1];
+  var scan_end   = _win[scan + best_len];
+
+  /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
+   * It is easy to get rid of this optimization if necessary.
+   */
+  // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
+
+  /* Do not waste too much time if we already have a good match: */
+  if (s.prev_length >= s.good_match) {
+    chain_length >>= 2;
+  }
+  /* Do not look for matches beyond the end of the input. This is necessary
+   * to make deflate deterministic.
+   */
+  if (nice_match > s.lookahead) { nice_match = s.lookahead; }
+
+  // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
+
+  do {
+    // Assert(cur_match < s->strstart, "no future");
+    match = cur_match;
+
+    /* Skip to next match if the match length cannot increase
+     * or if the match length is less than 2.  Note that the checks below
+     * for insufficient lookahead only occur occasionally for performance
+     * reasons.  Therefore uninitialized memory will be accessed, and
+     * conditional jumps will be made that depend on those values.
+     * However the length of the match is limited to the lookahead, so
+     * the output of deflate is not affected by the uninitialized values.
+     */
+
+    if (_win[match + best_len]     !== scan_end  ||
+        _win[match + best_len - 1] !== scan_end1 ||
+        _win[match]                !== _win[scan] ||
+        _win[++match]              !== _win[scan + 1]) {
+      continue;
+    }
+
+    /* The check at best_len-1 can be removed because it will be made
+     * again later. (This heuristic is not always a win.)
+     * It is not necessary to compare scan[2] and match[2] since they
+     * are always equal when the other bytes match, given that
+     * the hash keys are equal and that HASH_BITS >= 8.
+     */
+    scan += 2;
+    match++;
+    // Assert(*scan == *match, "match[2]?");
+
+    /* We check for insufficient lookahead only every 8th comparison;
+     * the 256th check will be made at strstart+258.
+     */
+    do {
+      /*jshint noempty:false*/
+    } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
+             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
+             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
+             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
+             scan < strend);
+
+    // Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
+
+    len = MAX_MATCH - (strend - scan);
+    scan = strend - MAX_MATCH;
+
+    if (len > best_len) {
+      s.match_start = cur_match;
+      best_len = len;
+      if (len >= nice_match) {
+        break;
+      }
+      scan_end1  = _win[scan + best_len - 1];
+      scan_end   = _win[scan + best_len];
+    }
+  } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);
+
+  if (best_len <= s.lookahead) {
+    return best_len;
+  }
+  return s.lookahead;
+}
+
+
+/* ===========================================================================
+ * Fill the window when the lookahead becomes insufficient.
+ * Updates strstart and lookahead.
+ *
+ * IN assertion: lookahead < MIN_LOOKAHEAD
+ * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
+ *    At least one byte has been read, or avail_in == 0; reads are
+ *    performed for at least two bytes (required for the zip translate_eol
+ *    option -- not supported here).
+ */
+function fill_window(s) {
+  var _w_size = s.w_size;
+  var p, n, m, more, str;
+
+  //Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead");
+
+  do {
+    more = s.window_size - s.lookahead - s.strstart;
+
+    // JS ints have 32 bit, block below not needed
+    /* Deal with !@#$% 64K limit: */
+    //if (sizeof(int) <= 2) {
+    //    if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
+    //        more = wsize;
+    //
+    //  } else if (more == (unsigned)(-1)) {
+    //        /* Very unlikely, but possible on 16 bit machine if
+    //         * strstart == 0 && lookahead == 1 (input done a byte at time)
+    //         */
+    //        more--;
+    //    }
+    //}
+
+
+    /* If the window is almost full and there is insufficient lookahead,
+     * move the upper half to the lower one to make room in the upper half.
+     */
+    if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {
+
+      utils.arraySet(s.window, s.window, _w_size, _w_size, 0);
+      s.match_start -= _w_size;
+      s.strstart -= _w_size;
+      /* we now have strstart >= MAX_DIST */
+      s.block_start -= _w_size;
+
+      /* Slide the hash table (could be avoided with 32 bit values
+       at the expense of memory usage). We slide even when level == 0
+       to keep the hash table consistent if we switch back to level > 0
+       later. (Using level 0 permanently is not an optimal usage of
+       zlib, so we don't care about this pathological case.)
+       */
+
+      n = s.hash_size;
+      p = n;
+      do {
+        m = s.head[--p];
+        s.head[p] = (m >= _w_size ? m - _w_size : 0);
+      } while (--n);
+
+      n = _w_size;
+      p = n;
+      do {
+        m = s.prev[--p];
+        s.prev[p] = (m >= _w_size ? m - _w_size : 0);
+        /* If n is not on any hash chain, prev[n] is garbage but
+         * its value will never be used.
+         */
+      } while (--n);
+
+      more += _w_size;
+    }
+    if (s.strm.avail_in === 0) {
+      break;
+    }
+
+    /* If there was no sliding:
+     *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
+     *    more == window_size - lookahead - strstart
+     * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
+     * => more >= window_size - 2*WSIZE + 2
+     * In the BIG_MEM or MMAP case (not yet supported),
+     *   window_size == input_size + MIN_LOOKAHEAD  &&
+     *   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
+     * Otherwise, window_size == 2*WSIZE so more >= 2.
+     * If there was sliding, more >= WSIZE. So in all cases, more >= 2.
+     */
+    //Assert(more >= 2, "more < 2");
+    n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);
+    s.lookahead += n;
+
+    /* Initialize the hash value now that we have some input: */
+    if (s.lookahead + s.insert >= MIN_MATCH) {
+      str = s.strstart - s.insert;
+      s.ins_h = s.window[str];
+
+      /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */
+      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;
+//#if MIN_MATCH != 3
+//        Call update_hash() MIN_MATCH-3 more times
+//#endif
+      while (s.insert) {
+        /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */
+        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH-1]) & s.hash_mask;
+
+        s.prev[str & s.w_mask] = s.head[s.ins_h];
+        s.head[s.ins_h] = str;
+        str++;
+        s.insert--;
+        if (s.lookahead + s.insert < MIN_MATCH) {
+          break;
+        }
+      }
+    }
+    /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
+     * but this is not important since only literal bytes will be emitted.
+     */
+
+  } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);
+
+  /* If the WIN_INIT bytes after the end of the current data have never been
+   * written, then zero those bytes in order to avoid memory check reports of
+   * the use of uninitialized (or uninitialised as Julian writes) bytes by
+   * the longest match routines.  Update the high water mark for the next
+   * time through here.  WIN_INIT is set to MAX_MATCH since the longest match
+   * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.
+   */
+//  if (s.high_water < s.window_size) {
+//    var curr = s.strstart + s.lookahead;
+//    var init = 0;
+//
+//    if (s.high_water < curr) {
+//      /* Previous high water mark below current data -- zero WIN_INIT
+//       * bytes or up to end of window, whichever is less.
+//       */
+//      init = s.window_size - curr;
+//      if (init > WIN_INIT)
+//        init = WIN_INIT;
+//      zmemzero(s->window + curr, (unsigned)init);
+//      s->high_water = curr + init;
+//    }
+//    else if (s->high_water < (ulg)curr + WIN_INIT) {
+//      /* High water mark at or above current data, but below current data
+//       * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up
+//       * to end of window, whichever is less.
+//       */
+//      init = (ulg)curr + WIN_INIT - s->high_water;
+//      if (init > s->window_size - s->high_water)
+//        init = s->window_size - s->high_water;
+//      zmemzero(s->window + s->high_water, (unsigned)init);
+//      s->high_water += init;
+//    }
+//  }
+//
+//  Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,
+//    "not enough room for search");
+}
+
+/* ===========================================================================
+ * Copy without compression as much as possible from the input stream, return
+ * the current block state.
+ * This function does not insert new strings in the dictionary since
+ * uncompressible data is probably not useful. This function is used
+ * only for the level=0 compression option.
+ * NOTE: this function should be optimized to avoid extra copying from
+ * window to pending_buf.
+ */
+function deflate_stored(s, flush) {
+  /* Stored blocks are limited to 0xffff bytes, pending_buf is limited
+   * to pending_buf_size, and each stored block has a 5 byte header:
+   */
+  var max_block_size = 0xffff;
+
+  if (max_block_size > s.pending_buf_size - 5) {
+    max_block_size = s.pending_buf_size - 5;
+  }
+
+  /* Copy as much as possible from input to output: */
+  for (;;) {
+    /* Fill the window as much as possible: */
+    if (s.lookahead <= 1) {
+
+      //Assert(s->strstart < s->w_size+MAX_DIST(s) ||
+      //  s->block_start >= (long)s->w_size, "slide too late");
+//      if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||
+//        s.block_start >= s.w_size)) {
+//        throw  new Error("slide too late");
+//      }
+
+      fill_window(s);
+      if (s.lookahead === 0 && flush === Z_NO_FLUSH) {
+        return BS_NEED_MORE;
+      }
+
+      if (s.lookahead === 0) {
+        break;
+      }
+      /* flush the current block */
+    }
+    //Assert(s->block_start >= 0L, "block gone");
+//    if (s.block_start < 0) throw new Error("block gone");
+
+    s.strstart += s.lookahead;
+    s.lookahead = 0;
+
+    /* Emit a stored block if pending_buf will be full: */
+    var max_start = s.block_start + max_block_size;
+
+    if (s.strstart === 0 || s.strstart >= max_start) {
+      /* strstart == 0 is possible when wraparound on 16-bit machine */
+      s.lookahead = s.strstart - max_start;
+      s.strstart = max_start;
+      /*** FLUSH_BLOCK(s, 0); ***/
+      flush_block_only(s, false);
+      if (s.strm.avail_out === 0) {
+        return BS_NEED_MORE;
+      }
+      /***/
+
+
+    }
+    /* Flush if we may have to slide, otherwise block_start may become
+     * negative and the data will be gone:
+     */
+    if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {
+      /*** FLUSH_BLOCK(s, 0); ***/
+      flush_block_only(s, false);
+      if (s.strm.avail_out === 0) {
+        return BS_NEED_MORE;
+      }
+      /***/
+    }
+  }
+
+  s.insert = 0;
+
+  if (flush === Z_FINISH) {
+    /*** FLUSH_BLOCK(s, 1); ***/
+    flush_block_only(s, true);
+    if (s.strm.avail_out === 0) {
+      return BS_FINISH_STARTED;
+    }
+    /***/
+    return BS_FINISH_DONE;
+  }
+
+  if (s.strstart > s.block_start) {
+    /*** FLUSH_BLOCK(s, 0); ***/
+    flush_block_only(s, false);
+    if (s.strm.avail_out === 0) {
+      return BS_NEED_MORE;
+    }
+    /***/
+  }
+
+  return BS_NEED_MORE;
+}
+
+/* ===========================================================================
+ * Compress as much as possible from the input stream, return the current
+ * block state.
+ * This function does not perform lazy evaluation of matches and inserts
+ * new strings in the dictionary only for unmatched strings or for short
+ * matches. It is used only for the fast compression options.
+ */
+function deflate_fast(s, flush) {
+  var hash_head;        /* head of the hash chain */
+  var bflush;           /* set if current block must be flushed */
+
+  for (;;) {
+    /* Make sure that we always have enough lookahead, except
+     * at the end of the input file. We need MAX_MATCH bytes
+     * for the next match, plus MIN_MATCH bytes to insert the
+     * string following the next match.
+     */
+    if (s.lookahead < MIN_LOOKAHEAD) {
+      fill_window(s);
+      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {
+        return BS_NEED_MORE;
+      }
+      if (s.lookahead === 0) {
+        break; /* flush the current block */
+      }
+    }
+
+    /* Insert the string window[strstart .. strstart+2] in the
+     * dictionary, and set hash_head to the head of the hash chain:
+     */
+    hash_head = 0/*NIL*/;
+    if (s.lookahead >= MIN_MATCH) {
+      /*** INSERT_STRING(s, s.strstart, hash_head); ***/
+      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
+      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
+      s.head[s.ins_h] = s.strstart;
+      /***/
+    }
+
+    /* Find the longest match, discarding those <= prev_length.
+     * At this point we have always match_length < MIN_MATCH
+     */
+    if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {
+      /* To simplify the code, we prevent matches with the string
+       * of window index 0 (in particular we have to avoid a match
+       * of the string with itself at the start of the input file).
+       */
+      s.match_length = longest_match(s, hash_head);
+      /* longest_match() sets match_start */
+    }
+    if (s.match_length >= MIN_MATCH) {
+      // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only
+
+      /*** _tr_tally_dist(s, s.strstart - s.match_start,
+                     s.match_length - MIN_MATCH, bflush); ***/
+      bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);
+
+      s.lookahead -= s.match_length;
+
+      /* Insert new strings in the hash table only if the match length
+       * is not too large. This saves time but degrades compression.
+       */
+      if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {
+        s.match_length--; /* string at strstart already in table */
+        do {
+          s.strstart++;
+          /*** INSERT_STRING(s, s.strstart, hash_head); ***/
+          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
+          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
+          s.head[s.ins_h] = s.strstart;
+          /***/
+          /* strstart never exceeds WSIZE-MAX_MATCH, so there are
+           * always MIN_MATCH bytes ahead.
+           */
+        } while (--s.match_length !== 0);
+        s.strstart++;
+      } else
+      {
+        s.strstart += s.match_length;
+        s.match_length = 0;
+        s.ins_h = s.window[s.strstart];
+        /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */
+        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;
+
+//#if MIN_MATCH != 3
+//                Call UPDATE_HASH() MIN_MATCH-3 more times
+//#endif
+        /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not
+         * matter since it will be recomputed at next deflate call.
+         */
+      }
+    } else {
+      /* No match, output a literal byte */
+      //Tracevv((stderr,"%c", s.window[s.strstart]));
+      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
+      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
+
+      s.lookahead--;
+      s.strstart++;
+    }
+    if (bflush) {
+      /*** FLUSH_BLOCK(s, 0); ***/
+      flush_block_only(s, false);
+      if (s.strm.avail_out === 0) {
+        return BS_NEED_MORE;
+      }
+      /***/
+    }
+  }
+  s.insert = ((s.strstart < (MIN_MATCH-1)) ? s.strstart : MIN_MATCH-1);
+  if (flush === Z_FINISH) {
+    /*** FLUSH_BLOCK(s, 1); ***/
+    flush_block_only(s, true);
+    if (s.strm.avail_out === 0) {
+      return BS_FINISH_STARTED;
+    }
+    /***/
+    return BS_FINISH_DONE;
+  }
+  if (s.last_lit) {
+    /*** FLUSH_BLOCK(s, 0); ***/
+    flush_block_only(s, false);
+    if (s.strm.avail_out === 0) {
+      return BS_NEED_MORE;
+    }
+    /***/
+  }
+  return BS_BLOCK_DONE;
+}
+
+/* ===========================================================================
+ * Same as above, but achieves better compression. We use a lazy
+ * evaluation for matches: a match is finally adopted only if there is
+ * no better match at the next window position.
+ */
+function deflate_slow(s, flush) {
+  var hash_head;          /* head of hash chain */
+  var bflush;              /* set if current block must be flushed */
+
+  var max_insert;
+
+  /* Process the input block. */
+  for (;;) {
+    /* Make sure that we always have enough lookahead, except
+     * at the end of the input file. We need MAX_MATCH bytes
+     * for the next match, plus MIN_MATCH bytes to insert the
+     * string following the next match.
+     */
+    if (s.lookahead < MIN_LOOKAHEAD) {
+      fill_window(s);
+      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {
+        return BS_NEED_MORE;
+      }
+      if (s.lookahead === 0) { break; } /* flush the current block */
+    }
+
+    /* Insert the string window[strstart .. strstart+2] in the
+     * dictionary, and set hash_head to the head of the hash chain:
+     */
+    hash_head = 0/*NIL*/;
+    if (s.lookahead >= MIN_MATCH) {
+      /*** INSERT_STRING(s, s.strstart, hash_head); ***/
+      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
+      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
+      s.head[s.ins_h] = s.strstart;
+      /***/
+    }
+
+    /* Find the longest match, discarding those <= prev_length.
+     */
+    s.prev_length = s.match_length;
+    s.prev_match = s.match_start;
+    s.match_length = MIN_MATCH-1;
+
+    if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&
+        s.strstart - hash_head <= (s.w_size-MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {
+      /* To simplify the code, we prevent matches with the string
+       * of window index 0 (in particular we have to avoid a match
+       * of the string with itself at the start of the input file).
+       */
+      s.match_length = longest_match(s, hash_head);
+      /* longest_match() sets match_start */
+
+      if (s.match_length <= 5 &&
+         (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {
+
+        /* If prev_match is also MIN_MATCH, match_start is garbage
+         * but we will ignore the current match anyway.
+         */
+        s.match_length = MIN_MATCH-1;
+      }
+    }
+    /* If there was a match at the previous step and the current
+     * match is not better, output the previous match:
+     */
+    if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {
+      max_insert = s.strstart + s.lookahead - MIN_MATCH;
+      /* Do not insert strings in hash table beyond this. */
+
+      //check_match(s, s.strstart-1, s.prev_match, s.prev_length);
+
+      /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,
+                     s.prev_length - MIN_MATCH, bflush);***/
+      bflush = trees._tr_tally(s, s.strstart - 1- s.prev_match, s.prev_length - MIN_MATCH);
+      /* Insert in hash table all strings up to the end of the match.
+       * strstart-1 and strstart are already inserted. If there is not
+       * enough lookahead, the last two strings are not inserted in
+       * the hash table.
+       */
+      s.lookahead -= s.prev_length-1;
+      s.prev_length -= 2;
+      do {
+        if (++s.strstart <= max_insert) {
+          /*** INSERT_STRING(s, s.strstart, hash_head); ***/
+          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
+          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
+          s.head[s.ins_h] = s.strstart;
+          /***/
+        }
+      } while (--s.prev_length !== 0);
+      s.match_available = 0;
+      s.match_length = MIN_MATCH-1;
+      s.strstart++;
+
+      if (bflush) {
+        /*** FLUSH_BLOCK(s, 0); ***/
+        flush_block_only(s, false);
+        if (s.strm.avail_out === 0) {
+          return BS_NEED_MORE;
+        }
+        /***/
+      }
+
+    } else if (s.match_available) {
+      /* If there was no match at the previous position, output a
+       * single literal. If there was a match but the current match
+       * is longer, truncate the previous match to a single literal.
+       */
+      //Tracevv((stderr,"%c", s->window[s->strstart-1]));
+      /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/
+      bflush = trees._tr_tally(s, 0, s.window[s.strstart-1]);
+
+      if (bflush) {
+        /*** FLUSH_BLOCK_ONLY(s, 0) ***/
+        flush_block_only(s, false);
+        /***/
+      }
+      s.strstart++;
+      s.lookahead--;
+      if (s.strm.avail_out === 0) {
+        return BS_NEED_MORE;
+      }
+    } else {
+      /* There is no previous match to compare with, wait for
+       * the next step to decide.
+       */
+      s.match_available = 1;
+      s.strstart++;
+      s.lookahead--;
+    }
+  }
+  //Assert (flush != Z_NO_FLUSH, "no flush?");
+  if (s.match_available) {
+    //Tracevv((stderr,"%c", s->window[s->strstart-1]));
+    /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/
+    bflush = trees._tr_tally(s, 0, s.window[s.strstart-1]);
+
+    s.match_available = 0;
+  }
+  s.insert = s.strstart < MIN_MATCH-1 ? s.strstart : MIN_MATCH-1;
+  if (flush === Z_FINISH) {
+    /*** FLUSH_BLOCK(s, 1); ***/
+    flush_block_only(s, true);
+    if (s.strm.avail_out === 0) {
+      return BS_FINISH_STARTED;
+    }
+    /***/
+    return BS_FINISH_DONE;
+  }
+  if (s.last_lit) {
+    /*** FLUSH_BLOCK(s, 0); ***/
+    flush_block_only(s, false);
+    if (s.strm.avail_out === 0) {
+      return BS_NEED_MORE;
+    }
+    /***/
+  }
+
+  return BS_BLOCK_DONE;
+}
+
+
+/* ===========================================================================
+ * For Z_RLE, simply look for runs of bytes, generate matches only of distance
+ * one.  Do not maintain a hash table.  (It will be regenerated if this run of
+ * deflate switches away from Z_RLE.)
+ */
+function deflate_rle(s, flush) {
+  var bflush;            /* set if current block must be flushed */
+  var prev;              /* byte at distance one to match */
+  var scan, strend;      /* scan goes up to strend for length of run */
+
+  var _win = s.window;
+
+  for (;;) {
+    /* Make sure that we always have enough lookahead, except
+     * at the end of the input file. We need MAX_MATCH bytes
+     * for the longest run, plus one for the unrolled loop.
+     */
+    if (s.lookahead <= MAX_MATCH) {
+      fill_window(s);
+      if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {
+        return BS_NEED_MORE;
+      }
+      if (s.lookahead === 0) { break; } /* flush the current block */
+    }
+
+    /* See how many times the previous byte repeats */
+    s.match_length = 0;
+    if (s.lookahead >= MIN_MATCH && s.strstart > 0) {
+      scan = s.strstart - 1;
+      prev = _win[scan];
+      if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {
+        strend = s.strstart + MAX_MATCH;
+        do {
+          /*jshint noempty:false*/
+        } while (prev === _win[++scan] && prev === _win[++scan] &&
+                 prev === _win[++scan] && prev === _win[++scan] &&
+                 prev === _win[++scan] && prev === _win[++scan] &&
+                 prev === _win[++scan] && prev === _win[++scan] &&
+                 scan < strend);
+        s.match_length = MAX_MATCH - (strend - scan);
+        if (s.match_length > s.lookahead) {
+          s.match_length = s.lookahead;
+        }
+      }
+      //Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan");
+    }
+
+    /* Emit match if have run of MIN_MATCH or longer, else emit literal */
+    if (s.match_length >= MIN_MATCH) {
+      //check_match(s, s.strstart, s.strstart - 1, s.match_length);
+
+      /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/
+      bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);
+
+      s.lookahead -= s.match_length;
+      s.strstart += s.match_length;
+      s.match_length = 0;
+    } else {
+      /* No match, output a literal byte */
+      //Tracevv((stderr,"%c", s->window[s->strstart]));
+      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
+      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
+
+      s.lookahead--;
+      s.strstart++;
+    }
+    if (bflush) {
+      /*** FLUSH_BLOCK(s, 0); ***/
+      flush_block_only(s, false);
+      if (s.strm.avail_out === 0) {
+        return BS_NEED_MORE;
+      }
+      /***/
+    }
+  }
+  s.insert = 0;
+  if (flush === Z_FINISH) {
+    /*** FLUSH_BLOCK(s, 1); ***/
+    flush_block_only(s, true);
+    if (s.strm.avail_out === 0) {
+      return BS_FINISH_STARTED;
+    }
+    /***/
+    return BS_FINISH_DONE;
+  }
+  if (s.last_lit) {
+    /*** FLUSH_BLOCK(s, 0); ***/
+    flush_block_only(s, false);
+    if (s.strm.avail_out === 0) {
+      return BS_NEED_MORE;
+    }
+    /***/
+  }
+  return BS_BLOCK_DONE;
+}
+
+/* ===========================================================================
+ * For Z_HUFFMAN_ONLY, do not look for matches.  Do not maintain a hash table.
+ * (It will be regenerated if this run of deflate switches away from Huffman.)
+ */
+function deflate_huff(s, flush) {
+  var bflush;             /* set if current block must be flushed */
+
+  for (;;) {
+    /* Make sure that we have a literal to write. */
+    if (s.lookahead === 0) {
+      fill_window(s);
+      if (s.lookahead === 0) {
+        if (flush === Z_NO_FLUSH) {
+          return BS_NEED_MORE;
+        }
+        break;      /* flush the current block */
+      }
+    }
+
+    /* Output a literal byte */
+    s.match_length = 0;
+    //Tracevv((stderr,"%c", s->window[s->strstart]));
+    /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
+    bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
+    s.lookahead--;
+    s.strstart++;
+    if (bflush) {
+      /*** FLUSH_BLOCK(s, 0); ***/
+      flush_block_only(s, false);
+      if (s.strm.avail_out === 0) {
+        return BS_NEED_MORE;
+      }
+      /***/
+    }
+  }
+  s.insert = 0;
+  if (flush === Z_FINISH) {
+    /*** FLUSH_BLOCK(s, 1); ***/
+    flush_block_only(s, true);
+    if (s.strm.avail_out === 0) {
+      return BS_FINISH_STARTED;
+    }
+    /***/
+    return BS_FINISH_DONE;
+  }
+  if (s.last_lit) {
+    /*** FLUSH_BLOCK(s, 0); ***/
+    flush_block_only(s, false);
+    if (s.strm.avail_out === 0) {
+      return BS_NEED_MORE;
+    }
+    /***/
+  }
+  return BS_BLOCK_DONE;
+}
+
+/* Values for max_lazy_match, good_match and max_chain_length, depending on
+ * the desired pack level (0..9). The values given below have been tuned to
+ * exclude worst case performance for pathological files. Better values may be
+ * found for specific files.
+ */
+var Config = function (good_length, max_lazy, nice_length, max_chain, func) {
+  this.good_length = good_length;
+  this.max_lazy = max_lazy;
+  this.nice_length = nice_length;
+  this.max_chain = max_chain;
+  this.func = func;
+};
+
+var configuration_table;
+
+configuration_table = [
+  /*      good lazy nice chain */
+  new Config(0, 0, 0, 0, deflate_stored),          /* 0 store only */
+  new Config(4, 4, 8, 4, deflate_fast),            /* 1 max speed, no lazy matches */
+  new Config(4, 5, 16, 8, deflate_fast),           /* 2 */
+  new Config(4, 6, 32, 32, deflate_fast),          /* 3 */
+
+  new Config(4, 4, 16, 16, deflate_slow),          /* 4 lazy matches */
+  new Config(8, 16, 32, 32, deflate_slow),         /* 5 */
+  new Config(8, 16, 128, 128, deflate_slow),       /* 6 */
+  new Config(8, 32, 128, 256, deflate_slow),       /* 7 */
+  new Config(32, 128, 258, 1024, deflate_slow),    /* 8 */
+  new Config(32, 258, 258, 4096, deflate_slow)     /* 9 max compression */
+];
+
+
+/* ===========================================================================
+ * Initialize the "longest match" routines for a new zlib stream
+ */
+function lm_init(s) {
+  s.window_size = 2 * s.w_size;
+
+  /*** CLEAR_HASH(s); ***/
+  zero(s.head); // Fill with NIL (= 0);
+
+  /* Set the default configuration parameters:
+   */
+  s.max_lazy_match = configuration_table[s.level].max_lazy;
+  s.good_match = configuration_table[s.level].good_length;
+  s.nice_match = configuration_table[s.level].nice_length;
+  s.max_chain_length = configuration_table[s.level].max_chain;
+
+  s.strstart = 0;
+  s.block_start = 0;
+  s.lookahead = 0;
+  s.insert = 0;
+  s.match_length = s.prev_length = MIN_MATCH - 1;
+  s.match_available = 0;
+  s.ins_h = 0;
+}
+
+
+function DeflateState() {
+  this.strm = null;            /* pointer back to this zlib stream */
+  this.status = 0;            /* as the name implies */
+  this.pending_buf = null;      /* output still pending */
+  this.pending_buf_size = 0;  /* size of pending_buf */
+  this.pending_out = 0;       /* next pending byte to output to the stream */
+  this.pending = 0;           /* nb of bytes in the pending buffer */
+  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */
+  this.gzhead = null;         /* gzip header information to write */
+  this.gzindex = 0;           /* where in extra, name, or comment */
+  this.method = Z_DEFLATED; /* can only be DEFLATED */
+  this.last_flush = -1;   /* value of flush param for previous deflate call */
+
+  this.w_size = 0;  /* LZ77 window size (32K by default) */
+  this.w_bits = 0;  /* log2(w_size)  (8..16) */
+  this.w_mask = 0;  /* w_size - 1 */
+
+  this.window = null;
+  /* Sliding window. Input bytes are read into the second half of the window,
+   * and move to the first half later to keep a dictionary of at least wSize
+   * bytes. With this organization, matches are limited to a distance of
+   * wSize-MAX_MATCH bytes, but this ensures that IO is always
+   * performed with a length multiple of the block size.
+   */
+
+  this.window_size = 0;
+  /* Actual size of window: 2*wSize, except when the user input buffer
+   * is directly used as sliding window.
+   */
+
+  this.prev = null;
+  /* Link to older string with same hash index. To limit the size of this
+   * array to 64K, this link is maintained only for the last 32K strings.
+   * An index in this array is thus a window index modulo 32K.
+   */
+
+  this.head = null;   /* Heads of the hash chains or NIL. */
+
+  this.ins_h = 0;       /* hash index of string to be inserted */
+  this.hash_size = 0;   /* number of elements in hash table */
+  this.hash_bits = 0;   /* log2(hash_size) */
+  this.hash_mask = 0;   /* hash_size-1 */
+
+  this.hash_shift = 0;
+  /* Number of bits by which ins_h must be shifted at each input
+   * step. It must be such that after MIN_MATCH steps, the oldest
+   * byte no longer takes part in the hash key, that is:
+   *   hash_shift * MIN_MATCH >= hash_bits
+   */
+
+  this.block_start = 0;
+  /* Window position at the beginning of the current output block. Gets
+   * negative when the window is moved backwards.
+   */
+
+  this.match_length = 0;      /* length of best match */
+  this.prev_match = 0;        /* previous match */
+  this.match_available = 0;   /* set if previous match exists */
+  this.strstart = 0;          /* start of string to insert */
+  this.match_start = 0;       /* start of matching string */
+  this.lookahead = 0;         /* number of valid bytes ahead in window */
+
+  this.prev_length = 0;
+  /* Length of the best match at previous step. Matches not greater than this
+   * are discarded. This is used in the lazy match evaluation.
+   */
+
+  this.max_chain_length = 0;
+  /* To speed up deflation, hash chains are never searched beyond this
+   * length.  A higher limit improves compression ratio but degrades the
+   * speed.
+   */
+
+  this.max_lazy_match = 0;
+  /* Attempt to find a better match only when the current match is strictly
+   * smaller than this value. This mechanism is used only for compression
+   * levels >= 4.
+   */
+  // That's alias to max_lazy_match, don't use directly
+  //this.max_insert_length = 0;
+  /* Insert new strings in the hash table only if the match length is not
+   * greater than this length. This saves time but degrades compression.
+   * max_insert_length is used only for compression levels <= 3.
+   */
+
+  this.level = 0;     /* compression level (1..9) */
+  this.strategy = 0;  /* favor or force Huffman coding*/
+
+  this.good_match = 0;
+  /* Use a faster search when the previous match is longer than this */
+
+  this.nice_match = 0; /* Stop searching when current match exceeds this */
+
+              /* used by trees.c: */
+
+  /* Didn't use ct_data typedef below to suppress compiler warning */
+
+  // struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */
+  // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
+  // struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */
+
+  // Use flat array of DOUBLE size, with interleaved fata,
+  // because JS does not support effective
+  this.dyn_ltree  = new utils.Buf16(HEAP_SIZE * 2);
+  this.dyn_dtree  = new utils.Buf16((2*D_CODES+1) * 2);
+  this.bl_tree    = new utils.Buf16((2*BL_CODES+1) * 2);
+  zero(this.dyn_ltree);
+  zero(this.dyn_dtree);
+  zero(this.bl_tree);
+
+  this.l_desc   = null;         /* desc. for literal tree */
+  this.d_desc   = null;         /* desc. for distance tree */
+  this.bl_desc  = null;         /* desc. for bit length tree */
+
+  //ush bl_count[MAX_BITS+1];
+  this.bl_count = new utils.Buf16(MAX_BITS+1);
+  /* number of codes at each bit length for an optimal tree */
+
+  //int heap[2*L_CODES+1];      /* heap used to build the Huffman trees */
+  this.heap = new utils.Buf16(2*L_CODES+1);  /* heap used to build the Huffman trees */
+  zero(this.heap);
+
+  this.heap_len = 0;               /* number of elements in the heap */
+  this.heap_max = 0;               /* element of largest frequency */
+  /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
+   * The same heap array is used to build all trees.
+   */
+
+  this.depth = new utils.Buf16(2*L_CODES+1); //uch depth[2*L_CODES+1];
+  zero(this.depth);
+  /* Depth of each subtree used as tie breaker for trees of equal frequency
+   */
+
+  this.l_buf = 0;          /* buffer index for literals or lengths */
+
+  this.lit_bufsize = 0;
+  /* Size of match buffer for literals/lengths.  There are 4 reasons for
+   * limiting lit_bufsize to 64K:
+   *   - frequencies can be kept in 16 bit counters
+   *   - if compression is not successful for the first block, all input
+   *     data is still in the window so we can still emit a stored block even
+   *     when input comes from standard input.  (This can also be done for
+   *     all blocks if lit_bufsize is not greater than 32K.)
+   *   - if compression is not successful for a file smaller than 64K, we can
+   *     even emit a stored file instead of a stored block (saving 5 bytes).
+   *     This is applicable only for zip (not gzip or zlib).
+   *   - creating new Huffman trees less frequently may not provide fast
+   *     adaptation to changes in the input data statistics. (Take for
+   *     example a binary file with poorly compressible code followed by
+   *     a highly compressible string table.) Smaller buffer sizes give
+   *     fast adaptation but have of course the overhead of transmitting
+   *     trees more frequently.
+   *   - I can't count above 4
+   */
+
+  this.last_lit = 0;      /* running index in l_buf */
+
+  this.d_buf = 0;
+  /* Buffer index for distances. To simplify the code, d_buf and l_buf have
+   * the same number of elements. To use different lengths, an extra flag
+   * array would be necessary.
+   */
+
+  this.opt_len = 0;       /* bit length of current block with optimal trees */
+  this.static_len = 0;    /* bit length of current block with static trees */
+  this.matches = 0;       /* number of string matches in current block */
+  this.insert = 0;        /* bytes at end of window left to insert */
+
+
+  this.bi_buf = 0;
+  /* Output buffer. bits are inserted starting at the bottom (least
+   * significant bits).
+   */
+  this.bi_valid = 0;
+  /* Number of valid bits in bi_buf.  All bits above the last valid bit
+   * are always zero.
+   */
+
+  // Used for window memory init. We safely ignore it for JS. That makes
+  // sense only for pointers and memory check tools.
+  //this.high_water = 0;
+  /* High water mark offset in window for initialized bytes -- bytes above
+   * this are set to zero in order to avoid memory check warnings when
+   * longest match routines access bytes past the input.  This is then
+   * updated to the new high water mark.
+   */
+}
+
+
+function deflateResetKeep(strm) {
+  var s;
+
+  if (!strm || !strm.state) {
+    return err(strm, Z_STREAM_ERROR);
+  }
+
+  strm.total_in = strm.total_out = 0;
+  strm.data_type = Z_UNKNOWN;
+
+  s = strm.state;
+  s.pending = 0;
+  s.pending_out = 0;
+
+  if (s.wrap < 0) {
+    s.wrap = -s.wrap;
+    /* was made negative by deflate(..., Z_FINISH); */
+  }
+  s.status = (s.wrap ? INIT_STATE : BUSY_STATE);
+  strm.adler = (s.wrap === 2) ?
+    0  // crc32(0, Z_NULL, 0)
+  :
+    1; // adler32(0, Z_NULL, 0)
+  s.last_flush = Z_NO_FLUSH;
+  trees._tr_init(s);
+  return Z_OK;
+}
+
+
+function deflateReset(strm) {
+  var ret = deflateResetKeep(strm);
+  if (ret === Z_OK) {
+    lm_init(strm.state);
+  }
+  return ret;
+}
+
+
+function deflateSetHeader(strm, head) {
+  if (!strm || !strm.state) { return Z_STREAM_ERROR; }
+  if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }
+  strm.state.gzhead = head;
+  return Z_OK;
+}
+
+
+function deflateInit2(strm, level, method, windowBits, memLevel, strategy) {
+  if (!strm) { // === Z_NULL
+    return Z_STREAM_ERROR;
+  }
+  var wrap = 1;
+
+  if (level === Z_DEFAULT_COMPRESSION) {
+    level = 6;
+  }
+
+  if (windowBits < 0) { /* suppress zlib wrapper */
+    wrap = 0;
+    windowBits = -windowBits;
+  }
+
+  else if (windowBits > 15) {
+    wrap = 2;           /* write gzip wrapper instead */
+    windowBits -= 16;
+  }
+
+
+  if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||
+    windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||
+    strategy < 0 || strategy > Z_FIXED) {
+    return err(strm, Z_STREAM_ERROR);
+  }
+
+
+  if (windowBits === 8) {
+    windowBits = 9;
+  }
+  /* until 256-byte window bug fixed */
+
+  var s = new DeflateState();
+
+  strm.state = s;
+  s.strm = strm;
+
+  s.wrap = wrap;
+  s.gzhead = null;
+  s.w_bits = windowBits;
+  s.w_size = 1 << s.w_bits;
+  s.w_mask = s.w_size - 1;
+
+  s.hash_bits = memLevel + 7;
+  s.hash_size = 1 << s.hash_bits;
+  s.hash_mask = s.hash_size - 1;
+  s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);
+
+  s.window = new utils.Buf8(s.w_size * 2);
+  s.head = new utils.Buf16(s.hash_size);
+  s.prev = new utils.Buf16(s.w_size);
+
+  // Don't need mem init magic for JS.
+  //s.high_water = 0;  /* nothing written to s->window yet */
+
+  s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */
+
+  s.pending_buf_size = s.lit_bufsize * 4;
+  s.pending_buf = new utils.Buf8(s.pending_buf_size);
+
+  s.d_buf = s.lit_bufsize >> 1;
+  s.l_buf = (1 + 2) * s.lit_bufsize;
+
+  s.level = level;
+  s.strategy = strategy;
+  s.method = method;
+
+  return deflateReset(strm);
+}
+
+function deflateInit(strm, level) {
+  return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);
+}
+
+
+function deflate(strm, flush) {
+  var old_flush, s;
+  var beg, val; // for gzip header write only
+
+  if (!strm || !strm.state ||
+    flush > Z_BLOCK || flush < 0) {
+    return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;
+  }
+
+  s = strm.state;
+
+  if (!strm.output ||
+      (!strm.input && strm.avail_in !== 0) ||
+      (s.status === FINISH_STATE && flush !== Z_FINISH)) {
+    return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);
+  }
+
+  s.strm = strm; /* just in case */
+  old_flush = s.last_flush;
+  s.last_flush = flush;
+
+  /* Write the header */
+  if (s.status === INIT_STATE) {
+
+    if (s.wrap === 2) { // GZIP header
+      strm.adler = 0;  //crc32(0L, Z_NULL, 0);
+      put_byte(s, 31);
+      put_byte(s, 139);
+      put_byte(s, 8);
+      if (!s.gzhead) { // s->gzhead == Z_NULL
+        put_byte(s, 0);
+        put_byte(s, 0);
+        put_byte(s, 0);
+        put_byte(s, 0);
+        put_byte(s, 0);
+        put_byte(s, s.level === 9 ? 2 :
+                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?
+                     4 : 0));
+        put_byte(s, OS_CODE);
+        s.status = BUSY_STATE;
+      }
+      else {
+        put_byte(s, (s.gzhead.text ? 1 : 0) +
+                    (s.gzhead.hcrc ? 2 : 0) +
+                    (!s.gzhead.extra ? 0 : 4) +
+                    (!s.gzhead.name ? 0 : 8) +
+                    (!s.gzhead.comment ? 0 : 16)
+                );
+        put_byte(s, s.gzhead.time & 0xff);
+        put_byte(s, (s.gzhead.time >> 8) & 0xff);
+        put_byte(s, (s.gzhead.time >> 16) & 0xff);
+        put_byte(s, (s.gzhead.time >> 24) & 0xff);
+        put_byte(s, s.level === 9 ? 2 :
+                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?
+                     4 : 0));
+        put_byte(s, s.gzhead.os & 0xff);
+        if (s.gzhead.extra && s.gzhead.extra.length) {
+          put_byte(s, s.gzhead.extra.length & 0xff);
+          put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);
+        }
+        if (s.gzhead.hcrc) {
+          strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);
+        }
+        s.gzindex = 0;
+        s.status = EXTRA_STATE;
+      }
+    }
+    else // DEFLATE header
+    {
+      var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;
+      var level_flags = -1;
+
+      if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {
+        level_flags = 0;
+      } else if (s.level < 6) {
+        level_flags = 1;
+      } else if (s.level === 6) {
+        level_flags = 2;
+      } else {
+        level_flags = 3;
+      }
+      header |= (level_flags << 6);
+      if (s.strstart !== 0) { header |= PRESET_DICT; }
+      header += 31 - (header % 31);
+
+      s.status = BUSY_STATE;
+      putShortMSB(s, header);
+
+      /* Save the adler32 of the preset dictionary: */
+      if (s.strstart !== 0) {
+        putShortMSB(s, strm.adler >>> 16);
+        putShortMSB(s, strm.adler & 0xffff);
+      }
+      strm.adler = 1; // adler32(0L, Z_NULL, 0);
+    }
+  }
+
+//#ifdef GZIP
+  if (s.status === EXTRA_STATE) {
+    if (s.gzhead.extra/* != Z_NULL*/) {
+      beg = s.pending;  /* start of bytes to update crc */
+
+      while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {
+        if (s.pending === s.pending_buf_size) {
+          if (s.gzhead.hcrc && s.pending > beg) {
+            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
+          }
+          flush_pending(strm);
+          beg = s.pending;
+          if (s.pending === s.pending_buf_size) {
+            break;
+          }
+        }
+        put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);
+        s.gzindex++;
+      }
+      if (s.gzhead.hcrc && s.pending > beg) {
+        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
+      }
+      if (s.gzindex === s.gzhead.extra.length) {
+        s.gzindex = 0;
+        s.status = NAME_STATE;
+      }
+    }
+    else {
+      s.status = NAME_STATE;
+    }
+  }
+  if (s.status === NAME_STATE) {
+    if (s.gzhead.name/* != Z_NULL*/) {
+      beg = s.pending;  /* start of bytes to update crc */
+      //int val;
+
+      do {
+        if (s.pending === s.pending_buf_size) {
+          if (s.gzhead.hcrc && s.pending > beg) {
+            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
+          }
+          flush_pending(strm);
+          beg = s.pending;
+          if (s.pending === s.pending_buf_size) {
+            val = 1;
+            break;
+          }
+        }
+        // JS specific: little magic to add zero terminator to end of string
+        if (s.gzindex < s.gzhead.name.length) {
+          val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;
+        } else {
+          val = 0;
+        }
+        put_byte(s, val);
+      } while (val !== 0);
+
+      if (s.gzhead.hcrc && s.pending > beg){
+        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
+      }
+      if (val === 0) {
+        s.gzindex = 0;
+        s.status = COMMENT_STATE;
+      }
+    }
+    else {
+      s.status = COMMENT_STATE;
+    }
+  }
+  if (s.status === COMMENT_STATE) {
+    if (s.gzhead.comment/* != Z_NULL*/) {
+      beg = s.pending;  /* start of bytes to update crc */
+      //int val;
+
+      do {
+        if (s.pending === s.pending_buf_size) {
+          if (s.gzhead.hcrc && s.pending > beg) {
+            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
+          }
+          flush_pending(strm);
+          beg = s.pending;
+          if (s.pending === s.pending_buf_size) {
+            val = 1;
+            break;
+          }
+        }
+        // JS specific: little magic to add zero terminator to end of string
+        if (s.gzindex < s.gzhead.comment.length) {
+          val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;
+        } else {
+          val = 0;
+        }
+        put_byte(s, val);
+      } while (val !== 0);
+
+      if (s.gzhead.hcrc && s.pending > beg) {
+        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
+      }
+      if (val === 0) {
+        s.status = HCRC_STATE;
+      }
+    }
+    else {
+      s.status = HCRC_STATE;
+    }
+  }
+  if (s.status === HCRC_STATE) {
+    if (s.gzhead.hcrc) {
+      if (s.pending + 2 > s.pending_buf_size) {
+        flush_pending(strm);
+      }
+      if (s.pending + 2 <= s.pending_buf_size) {
+        put_byte(s, strm.adler & 0xff);
+        put_byte(s, (strm.adler >> 8) & 0xff);
+        strm.adler = 0; //crc32(0L, Z_NULL, 0);
+        s.status = BUSY_STATE;
+      }
+    }
+    else {
+      s.status = BUSY_STATE;
+    }
+  }
+//#endif
+
+  /* Flush as much pending output as possible */
+  if (s.pending !== 0) {
+    flush_pending(strm);
+    if (strm.avail_out === 0) {
+      /* Since avail_out is 0, deflate will be called again with
+       * more output space, but possibly with both pending and
+       * avail_in equal to zero. There won't be anything to do,
+       * but this is not an error situation so make sure we
+       * return OK instead of BUF_ERROR at next call of deflate:
+       */
+      s.last_flush = -1;
+      return Z_OK;
+    }
+
+    /* Make sure there is something to do and avoid duplicate consecutive
+     * flushes. For repeated and useless calls with Z_FINISH, we keep
+     * returning Z_STREAM_END instead of Z_BUF_ERROR.
+     */
+  } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&
+    flush !== Z_FINISH) {
+    return err(strm, Z_BUF_ERROR);
+  }
+
+  /* User must not provide more input after the first FINISH: */
+  if (s.status === FINISH_STATE && strm.avail_in !== 0) {
+    return err(strm, Z_BUF_ERROR);
+  }
+
+  /* Start a new block or continue the current one.
+   */
+  if (strm.avail_in !== 0 || s.lookahead !== 0 ||
+    (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {
+    var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :
+      (s.strategy === Z_RLE ? deflate_rle(s, flush) :
+        configuration_table[s.level].func(s, flush));
+
+    if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {
+      s.status = FINISH_STATE;
+    }
+    if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {
+      if (strm.avail_out === 0) {
+        s.last_flush = -1;
+        /* avoid BUF_ERROR next call, see above */
+      }
+      return Z_OK;
+      /* If flush != Z_NO_FLUSH && avail_out == 0, the next call
+       * of deflate should use the same flush parameter to make sure
+       * that the flush is complete. So we don't have to output an
+       * empty block here, this will be done at next call. This also
+       * ensures that for a very small output buffer, we emit at most
+       * one empty block.
+       */
+    }
+    if (bstate === BS_BLOCK_DONE) {
+      if (flush === Z_PARTIAL_FLUSH) {
+        trees._tr_align(s);
+      }
+      else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */
+
+        trees._tr_stored_block(s, 0, 0, false);
+        /* For a full flush, this empty block will be recognized
+         * as a special marker by inflate_sync().
+         */
+        if (flush === Z_FULL_FLUSH) {
+          /*** CLEAR_HASH(s); ***/             /* forget history */
+          zero(s.head); // Fill with NIL (= 0);
+
+          if (s.lookahead === 0) {
+            s.strstart = 0;
+            s.block_start = 0;
+            s.insert = 0;
+          }
+        }
+      }
+      flush_pending(strm);
+      if (strm.avail_out === 0) {
+        s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */
+        return Z_OK;
+      }
+    }
+  }
+  //Assert(strm->avail_out > 0, "bug2");
+  //if (strm.avail_out <= 0) { throw new Error("bug2");}
+
+  if (flush !== Z_FINISH) { return Z_OK; }
+  if (s.wrap <= 0) { return Z_STREAM_END; }
+
+  /* Write the trailer */
+  if (s.wrap === 2) {
+    put_byte(s, strm.adler & 0xff);
+    put_byte(s, (strm.adler >> 8) & 0xff);
+    put_byte(s, (strm.adler >> 16) & 0xff);
+    put_byte(s, (strm.adler >> 24) & 0xff);
+    put_byte(s, strm.total_in & 0xff);
+    put_byte(s, (strm.total_in >> 8) & 0xff);
+    put_byte(s, (strm.total_in >> 16) & 0xff);
+    put_byte(s, (strm.total_in >> 24) & 0xff);
+  }
+  else
+  {
+    putShortMSB(s, strm.adler >>> 16);
+    putShortMSB(s, strm.adler & 0xffff);
+  }
+
+  flush_pending(strm);
+  /* If avail_out is zero, the application will call deflate again
+   * to flush the rest.
+   */
+  if (s.wrap > 0) { s.wrap = -s.wrap; }
+  /* write the trailer only once! */
+  return s.pending !== 0 ? Z_OK : Z_STREAM_END;
+}
+
+function deflateEnd(strm) {
+  var status;
+
+  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {
+    return Z_STREAM_ERROR;
+  }
+
+  status = strm.state.status;
+  if (status !== INIT_STATE &&
+    status !== EXTRA_STATE &&
+    status !== NAME_STATE &&
+    status !== COMMENT_STATE &&
+    status !== HCRC_STATE &&
+    status !== BUSY_STATE &&
+    status !== FINISH_STATE
+  ) {
+    return err(strm, Z_STREAM_ERROR);
+  }
+
+  strm.state = null;
+
+  return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;
+}
+
+/* =========================================================================
+ * Copy the source state to the destination state
+ */
+//function deflateCopy(dest, source) {
+//
+//}
+
+exports.deflateInit = deflateInit;
+exports.deflateInit2 = deflateInit2;
+exports.deflateReset = deflateReset;
+exports.deflateResetKeep = deflateResetKeep;
+exports.deflateSetHeader = deflateSetHeader;
+exports.deflate = deflate;
+exports.deflateEnd = deflateEnd;
+exports.deflateInfo = 'pako deflate (from Nodeca project)';
+
+/* Not implemented
+exports.deflateBound = deflateBound;
+exports.deflateCopy = deflateCopy;
+exports.deflateSetDictionary = deflateSetDictionary;
+exports.deflateParams = deflateParams;
+exports.deflatePending = deflatePending;
+exports.deflatePrime = deflatePrime;
+exports.deflateTune = deflateTune;
+*/
+},{"../utils/common":27,"./adler32":29,"./crc32":31,"./messages":37,"./trees":38}],33:[function(_dereq_,module,exports){
+'use strict';
+
+
+function GZheader() {
+  /* true if compressed data believed to be text */
+  this.text       = 0;
+  /* modification time */
+  this.time       = 0;
+  /* extra flags (not used when writing a gzip file) */
+  this.xflags     = 0;
+  /* operating system */
+  this.os         = 0;
+  /* pointer to extra field or Z_NULL if none */
+  this.extra      = null;
+  /* extra field length (valid if extra != Z_NULL) */
+  this.extra_len  = 0; // Actually, we don't need it in JS,
+                       // but leave for few code modifications
+
+  //
+  // Setup limits is not necessary because in js we should not preallocate memory
+  // for inflate use constant limit in 65536 bytes
+  //
+
+  /* space at extra (only when reading header) */
+  // this.extra_max  = 0;
+  /* pointer to zero-terminated file name or Z_NULL */
+  this.name       = '';
+  /* space at name (only when reading header) */
+  // this.name_max   = 0;
+  /* pointer to zero-terminated comment or Z_NULL */
+  this.comment    = '';
+  /* space at comment (only when reading header) */
+  // this.comm_max   = 0;
+  /* true if there was or will be a header crc */
+  this.hcrc       = 0;
+  /* true when done reading gzip header (not used when writing a gzip file) */
+  this.done       = false;
+}
+
+module.exports = GZheader;
+},{}],34:[function(_dereq_,module,exports){
+'use strict';
+
+// See state defs from inflate.js
+var BAD = 30;       /* got a data error -- remain here until reset */
+var TYPE = 12;      /* i: waiting for type bits, including last-flag bit */
+
+/*
+   Decode literal, length, and distance codes and write out the resulting
+   literal and match bytes until either not enough input or output is
+   available, an end-of-block is encountered, or a data error is encountered.
+   When large enough input and output buffers are supplied to inflate(), for
+   example, a 16K input buffer and a 64K output buffer, more than 95% of the
+   inflate execution time is spent in this routine.
+
+   Entry assumptions:
+
+        state.mode === LEN
+        strm.avail_in >= 6
+        strm.avail_out >= 258
+        start >= strm.avail_out
+        state.bits < 8
+
+   On return, state.mode is one of:
+
+        LEN -- ran out of enough output space or enough available input
+        TYPE -- reached end of block code, inflate() to interpret next block
+        BAD -- error in block data
+
+   Notes:
+
+    - The maximum input bits used by a length/distance pair is 15 bits for the
+      length code, 5 bits for the length extra, 15 bits for the distance code,
+      and 13 bits for the distance extra.  This totals 48 bits, or six bytes.
+      Therefore if strm.avail_in >= 6, then there is enough input to avoid
+      checking for available input while decoding.
+
+    - The maximum bytes that a single length/distance pair can output is 258
+      bytes, which is the maximum length that can be coded.  inflate_fast()
+      requires strm.avail_out >= 258 for each loop to avoid checking for
+      output space.
+ */
+module.exports = function inflate_fast(strm, start) {
+  var state;
+  var _in;                    /* local strm.input */
+  var last;                   /* have enough input while in < last */
+  var _out;                   /* local strm.output */
+  var beg;                    /* inflate()'s initial strm.output */
+  var end;                    /* while out < end, enough space available */
+//#ifdef INFLATE_STRICT
+  var dmax;                   /* maximum distance from zlib header */
+//#endif
+  var wsize;                  /* window size or zero if not using window */
+  var whave;                  /* valid bytes in the window */
+  var wnext;                  /* window write index */
+  var window;                 /* allocated sliding window, if wsize != 0 */
+  var hold;                   /* local strm.hold */
+  var bits;                   /* local strm.bits */
+  var lcode;                  /* local strm.lencode */
+  var dcode;                  /* local strm.distcode */
+  var lmask;                  /* mask for first level of length codes */
+  var dmask;                  /* mask for first level of distance codes */
+  var here;                   /* retrieved table entry */
+  var op;                     /* code bits, operation, extra bits, or */
+                              /*  window position, window bytes to copy */
+  var len;                    /* match length, unused bytes */
+  var dist;                   /* match distance */
+  var from;                   /* where to copy match from */
+  var from_source;
+
+
+  var input, output; // JS specific, because we have no pointers
+
+  /* copy state to local variables */
+  state = strm.state;
+  //here = state.here;
+  _in = strm.next_in;
+  input = strm.input;
+  last = _in + (strm.avail_in - 5);
+  _out = strm.next_out;
+  output = strm.output;
+  beg = _out - (start - strm.avail_out);
+  end = _out + (strm.avail_out - 257);
+//#ifdef INFLATE_STRICT
+  dmax = state.dmax;
+//#endif
+  wsize = state.wsize;
+  whave = state.whave;
+  wnext = state.wnext;
+  window = state.window;
+  hold = state.hold;
+  bits = state.bits;
+  lcode = state.lencode;
+  dcode = state.distcode;
+  lmask = (1 << state.lenbits) - 1;
+  dmask = (1 << state.distbits) - 1;
+
+
+  /* decode literals and length/distances until end-of-block or not enough
+     input data or output space */
+
+  top:
+  do {
+    if (bits < 15) {
+      hold += input[_in++] << bits;
+      bits += 8;
+      hold += input[_in++] << bits;
+      bits += 8;
+    }
+
+    here = lcode[hold & lmask];
+
+    dolen:
+    for (;;) { // Goto emulation
+      op = here >>> 24/*here.bits*/;
+      hold >>>= op;
+      bits -= op;
+      op = (here >>> 16) & 0xff/*here.op*/;
+      if (op === 0) {                          /* literal */
+        //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
+        //        "inflate:         literal '%c'\n" :
+        //        "inflate:         literal 0x%02x\n", here.val));
+        output[_out++] = here & 0xffff/*here.val*/;
+      }
+      else if (op & 16) {                     /* length base */
+        len = here & 0xffff/*here.val*/;
+        op &= 15;                           /* number of extra bits */
+        if (op) {
+          if (bits < op) {
+            hold += input[_in++] << bits;
+            bits += 8;
+          }
+          len += hold & ((1 << op) - 1);
+          hold >>>= op;
+          bits -= op;
+        }
+        //Tracevv((stderr, "inflate:         length %u\n", len));
+        if (bits < 15) {
+          hold += input[_in++] << bits;
+          bits += 8;
+          hold += input[_in++] << bits;
+          bits += 8;
+        }
+        here = dcode[hold & dmask];
+
+        dodist:
+        for (;;) { // goto emulation
+          op = here >>> 24/*here.bits*/;
+          hold >>>= op;
+          bits -= op;
+          op = (here >>> 16) & 0xff/*here.op*/;
+
+          if (op & 16) {                      /* distance base */
+            dist = here & 0xffff/*here.val*/;
+            op &= 15;                       /* number of extra bits */
+            if (bits < op) {
+              hold += input[_in++] << bits;
+              bits += 8;
+              if (bits < op) {
+                hold += input[_in++] << bits;
+                bits += 8;
+              }
+            }
+            dist += hold & ((1 << op) - 1);
+//#ifdef INFLATE_STRICT
+            if (dist > dmax) {
+              strm.msg = 'invalid distance too far back';
+              state.mode = BAD;
+              break top;
+            }
+//#endif
+            hold >>>= op;
+            bits -= op;
+            //Tracevv((stderr, "inflate:         distance %u\n", dist));
+            op = _out - beg;                /* max distance in output */
+            if (dist > op) {                /* see if copy from window */
+              op = dist - op;               /* distance back in window */
+              if (op > whave) {
+                if (state.sane) {
+                  strm.msg = 'invalid distance too far back';
+                  state.mode = BAD;
+                  break top;
+                }
+
+// (!) This block is disabled in zlib defailts,
+// don't enable it for binary compatibility
+//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
+//                if (len <= op - whave) {
+//                  do {
+//                    output[_out++] = 0;
+//                  } while (--len);
+//                  continue top;
+//                }
+//                len -= op - whave;
+//                do {
+//                  output[_out++] = 0;
+//                } while (--op > whave);
+//                if (op === 0) {
+//                  from = _out - dist;
+//                  do {
+//                    output[_out++] = output[from++];
+//                  } while (--len);
+//                  continue top;
+//                }
+//#endif
+              }
+              from = 0; // window index
+              from_source = window;
+              if (wnext === 0) {           /* very common case */
+                from += wsize - op;
+                if (op < len) {         /* some from window */
+                  len -= op;
+                  do {
+                    output[_out++] = window[from++];
+                  } while (--op);
+                  from = _out - dist;  /* rest from output */
+                  from_source = output;
+                }
+              }
+              else if (wnext < op) {      /* wrap around window */
+                from += wsize + wnext - op;
+                op -= wnext;
+                if (op < len) {         /* some from end of window */
+                  len -= op;
+                  do {
+                    output[_out++] = window[from++];
+                  } while (--op);
+                  from = 0;
+                  if (wnext < len) {  /* some from start of window */
+                    op = wnext;
+                    len -= op;
+                    do {
+                      output[_out++] = window[from++];
+                    } while (--op);
+                    from = _out - dist;      /* rest from output */
+                    from_source = output;
+                  }
+                }
+              }
+              else {                      /* contiguous in window */
+                from += wnext - op;
+                if (op < len) {         /* some from window */
+                  len -= op;
+                  do {
+                    output[_out++] = window[from++];
+                  } while (--op);
+                  from = _out - dist;  /* rest from output */
+                  from_source = output;
+                }
+              }
+              while (len > 2) {
+                output[_out++] = from_source[from++];
+                output[_out++] = from_source[from++];
+                output[_out++] = from_source[from++];
+                len -= 3;
+              }
+              if (len) {
+                output[_out++] = from_source[from++];
+                if (len > 1) {
+                  output[_out++] = from_source[from++];
+                }
+              }
+            }
+            else {
+              from = _out - dist;          /* copy direct from output */
+              do {                        /* minimum length is three */
+                output[_out++] = output[from++];
+                output[_out++] = output[from++];
+                output[_out++] = output[from++];
+                len -= 3;
+              } while (len > 2);
+              if (len) {
+                output[_out++] = output[from++];
+                if (len > 1) {
+                  output[_out++] = output[from++];
+                }
+              }
+            }
+          }
+          else if ((op & 64) === 0) {          /* 2nd level distance code */
+            here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];
+            continue dodist;
+          }
+          else {
+            strm.msg = 'invalid distance code';
+            state.mode = BAD;
+            break top;
+          }
+
+          break; // need to emulate goto via "continue"
+        }
+      }
+      else if ((op & 64) === 0) {              /* 2nd level length code */
+        here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];
+        continue dolen;
+      }
+      else if (op & 32) {                     /* end-of-block */
+        //Tracevv((stderr, "inflate:         end of block\n"));
+        state.mode = TYPE;
+        break top;
+      }
+      else {
+        strm.msg = 'invalid literal/length code';
+        state.mode = BAD;
+        break top;
+      }
+
+      break; // need to emulate goto via "continue"
+    }
+  } while (_in < last && _out < end);
+
+  /* return unused bytes (on entry, bits < 8, so in won't go too far back) */
+  len = bits >> 3;
+  _in -= len;
+  bits -= len << 3;
+  hold &= (1 << bits) - 1;
+
+  /* update state and return */
+  strm.next_in = _in;
+  strm.next_out = _out;
+  strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));
+  strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));
+  state.hold = hold;
+  state.bits = bits;
+  return;
+};
+
+},{}],35:[function(_dereq_,module,exports){
+'use strict';
+
+
+var utils = _dereq_('../utils/common');
+var adler32 = _dereq_('./adler32');
+var crc32   = _dereq_('./crc32');
+var inflate_fast = _dereq_('./inffast');
+var inflate_table = _dereq_('./inftrees');
+
+var CODES = 0;
+var LENS = 1;
+var DISTS = 2;
+
+/* Public constants ==========================================================*/
+/* ===========================================================================*/
+
+
+/* Allowed flush values; see deflate() and inflate() below for details */
+//var Z_NO_FLUSH      = 0;
+//var Z_PARTIAL_FLUSH = 1;
+//var Z_SYNC_FLUSH    = 2;
+//var Z_FULL_FLUSH    = 3;
+var Z_FINISH        = 4;
+var Z_BLOCK         = 5;
+var Z_TREES         = 6;
+
+
+/* Return codes for the compression/decompression functions. Negative values
+ * are errors, positive values are used for special but normal events.
+ */
+var Z_OK            = 0;
+var Z_STREAM_END    = 1;
+var Z_NEED_DICT     = 2;
+//var Z_ERRNO         = -1;
+var Z_STREAM_ERROR  = -2;
+var Z_DATA_ERROR    = -3;
+var Z_MEM_ERROR     = -4;
+var Z_BUF_ERROR     = -5;
+//var Z_VERSION_ERROR = -6;
+
+/* The deflate compression method */
+var Z_DEFLATED  = 8;
+
+
+/* STATES ====================================================================*/
+/* ===========================================================================*/
+
+
+var    HEAD = 1;       /* i: waiting for magic header */
+var    FLAGS = 2;      /* i: waiting for method and flags (gzip) */
+var    TIME = 3;       /* i: waiting for modification time (gzip) */
+var    OS = 4;         /* i: waiting for extra flags and operating system (gzip) */
+var    EXLEN = 5;      /* i: waiting for extra length (gzip) */
+var    EXTRA = 6;      /* i: waiting for extra bytes (gzip) */
+var    NAME = 7;       /* i: waiting for end of file name (gzip) */
+var    COMMENT = 8;    /* i: waiting for end of comment (gzip) */
+var    HCRC = 9;       /* i: waiting for header crc (gzip) */
+var    DICTID = 10;    /* i: waiting for dictionary check value */
+var    DICT = 11;      /* waiting for inflateSetDictionary() call */
+var        TYPE = 12;      /* i: waiting for type bits, including last-flag bit */
+var        TYPEDO = 13;    /* i: same, but skip check to exit inflate on new block */
+var        STORED = 14;    /* i: waiting for stored size (length and complement) */
+var        COPY_ = 15;     /* i/o: same as COPY below, but only first time in */
+var        COPY = 16;      /* i/o: waiting for input or output to copy stored block */
+var        TABLE = 17;     /* i: waiting for dynamic block table lengths */
+var        LENLENS = 18;   /* i: waiting for code length code lengths */
+var        CODELENS = 19;  /* i: waiting for length/lit and distance code lengths */
+var            LEN_ = 20;      /* i: same as LEN below, but only first time in */
+var            LEN = 21;       /* i: waiting for length/lit/eob code */
+var            LENEXT = 22;    /* i: waiting for length extra bits */
+var            DIST = 23;      /* i: waiting for distance code */
+var            DISTEXT = 24;   /* i: waiting for distance extra bits */
+var            MATCH = 25;     /* o: waiting for output space to copy string */
+var            LIT = 26;       /* o: waiting for output space to write literal */
+var    CHECK = 27;     /* i: waiting for 32-bit check value */
+var    LENGTH = 28;    /* i: waiting for 32-bit length (gzip) */
+var    DONE = 29;      /* finished check, done -- remain here until reset */
+var    BAD = 30;       /* got a data error -- remain here until reset */
+var    MEM = 31;       /* got an inflate() memory error -- remain here until reset */
+var    SYNC = 32;      /* looking for synchronization bytes to restart inflate() */
+
+/* ===========================================================================*/
+
+
+
+var ENOUGH_LENS = 852;
+var ENOUGH_DISTS = 592;
+//var ENOUGH =  (ENOUGH_LENS+ENOUGH_DISTS);
+
+var MAX_WBITS = 15;
+/* 32K LZ77 window */
+var DEF_WBITS = MAX_WBITS;
+
+
+function ZSWAP32(q) {
+  return  (((q >>> 24) & 0xff) +
+          ((q >>> 8) & 0xff00) +
+          ((q & 0xff00) << 8) +
+          ((q & 0xff) << 24));
+}
+
+
+function InflateState() {
+  this.mode = 0;             /* current inflate mode */
+  this.last = false;          /* true if processing last block */
+  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */
+  this.havedict = false;      /* true if dictionary provided */
+  this.flags = 0;             /* gzip header method and flags (0 if zlib) */
+  this.dmax = 0;              /* zlib header max distance (INFLATE_STRICT) */
+  this.check = 0;             /* protected copy of check value */
+  this.total = 0;             /* protected copy of output count */
+  // TODO: may be {}
+  this.head = null;           /* where to save gzip header information */
+
+  /* sliding window */
+  this.wbits = 0;             /* log base 2 of requested window size */
+  this.wsize = 0;             /* window size or zero if not using window */
+  this.whave = 0;             /* valid bytes in the window */
+  this.wnext = 0;             /* window write index */
+  this.window = null;         /* allocated sliding window, if needed */
+
+  /* bit accumulator */
+  this.hold = 0;              /* input bit accumulator */
+  this.bits = 0;              /* number of bits in "in" */
+
+  /* for string and stored block copying */
+  this.length = 0;            /* literal or length of data to copy */
+  this.offset = 0;            /* distance back to copy string from */
+
+  /* for table and code decoding */
+  this.extra = 0;             /* extra bits needed */
+
+  /* fixed and dynamic code tables */
+  this.lencode = null;          /* starting table for length/literal codes */
+  this.distcode = null;         /* starting table for distance codes */
+  this.lenbits = 0;           /* index bits for lencode */
+  this.distbits = 0;          /* index bits for distcode */
+
+  /* dynamic table building */
+  this.ncode = 0;             /* number of code length code lengths */
+  this.nlen = 0;              /* number of length code lengths */
+  this.ndist = 0;             /* number of distance code lengths */
+  this.have = 0;              /* number of code lengths in lens[] */
+  this.next = null;              /* next available space in codes[] */
+
+  this.lens = new utils.Buf16(320); /* temporary storage for code lengths */
+  this.work = new utils.Buf16(288); /* work area for code table building */
+
+  /*
+   because we don't have pointers in js, we use lencode and distcode directly
+   as buffers so we don't need codes
+  */
+  //this.codes = new utils.Buf32(ENOUGH);       /* space for code tables */
+  this.lendyn = null;              /* dynamic table for length/literal codes (JS specific) */
+  this.distdyn = null;             /* dynamic table for distance codes (JS specific) */
+  this.sane = 0;                   /* if false, allow invalid distance too far */
+  this.back = 0;                   /* bits back of last unprocessed length/lit */
+  this.was = 0;                    /* initial length of match */
+}
+
+function inflateResetKeep(strm) {
+  var state;
+
+  if (!strm || !strm.state) { return Z_STREAM_ERROR; }
+  state = strm.state;
+  strm.total_in = strm.total_out = state.total = 0;
+  strm.msg = ''; /*Z_NULL*/
+  if (state.wrap) {       /* to support ill-conceived Java test suite */
+    strm.adler = state.wrap & 1;
+  }
+  state.mode = HEAD;
+  state.last = 0;
+  state.havedict = 0;
+  state.dmax = 32768;
+  state.head = null/*Z_NULL*/;
+  state.hold = 0;
+  state.bits = 0;
+  //state.lencode = state.distcode = state.next = state.codes;
+  state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);
+  state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);
+
+  state.sane = 1;
+  state.back = -1;
+  //Tracev((stderr, "inflate: reset\n"));
+  return Z_OK;
+}
+
+function inflateReset(strm) {
+  var state;
+
+  if (!strm || !strm.state) { return Z_STREAM_ERROR; }
+  state = strm.state;
+  state.wsize = 0;
+  state.whave = 0;
+  state.wnext = 0;
+  return inflateResetKeep(strm);
+
+}
+
+function inflateReset2(strm, windowBits) {
+  var wrap;
+  var state;
+
+  /* get the state */
+  if (!strm || !strm.state) { return Z_STREAM_ERROR; }
+  state = strm.state;
+
+  /* extract wrap request from windowBits parameter */
+  if (windowBits < 0) {
+    wrap = 0;
+    windowBits = -windowBits;
+  }
+  else {
+    wrap = (windowBits >> 4) + 1;
+    if (windowBits < 48) {
+      windowBits &= 15;
+    }
+  }
+
+  /* set number of window bits, free window if different */
+  if (windowBits && (windowBits < 8 || windowBits > 15)) {
+    return Z_STREAM_ERROR;
+  }
+  if (state.window !== null && state.wbits !== windowBits) {
+    state.window = null;
+  }
+
+  /* update state and reset the rest of it */
+  state.wrap = wrap;
+  state.wbits = windowBits;
+  return inflateReset(strm);
+}
+
+function inflateInit2(strm, windowBits) {
+  var ret;
+  var state;
+
+  if (!strm) { return Z_STREAM_ERROR; }
+  //strm.msg = Z_NULL;                 /* in case we return an error */
+
+  state = new InflateState();
+
+  //if (state === Z_NULL) return Z_MEM_ERROR;
+  //Tracev((stderr, "inflate: allocated\n"));
+  strm.state = state;
+  state.window = null/*Z_NULL*/;
+  ret = inflateReset2(strm, windowBits);
+  if (ret !== Z_OK) {
+    strm.state = null/*Z_NULL*/;
+  }
+  return ret;
+}
+
+function inflateInit(strm) {
+  return inflateInit2(strm, DEF_WBITS);
+}
+
+
+/*
+ Return state with length and distance decoding tables and index sizes set to
+ fixed code decoding.  Normally this returns fixed tables from inffixed.h.
+ If BUILDFIXED is defined, then instead this routine builds the tables the
+ first time it's called, and returns those tables the first time and
+ thereafter.  This reduces the size of the code by about 2K bytes, in
+ exchange for a little execution time.  However, BUILDFIXED should not be
+ used for threaded applications, since the rewriting of the tables and virgin
+ may not be thread-safe.
+ */
+var virgin = true;
+
+var lenfix, distfix; // We have no pointers in JS, so keep tables separate
+
+function fixedtables(state) {
+  /* build fixed huffman tables if first call (may not be thread safe) */
+  if (virgin) {
+    var sym;
+
+    lenfix = new utils.Buf32(512);
+    distfix = new utils.Buf32(32);
+
+    /* literal/length table */
+    sym = 0;
+    while (sym < 144) { state.lens[sym++] = 8; }
+    while (sym < 256) { state.lens[sym++] = 9; }
+    while (sym < 280) { state.lens[sym++] = 7; }
+    while (sym < 288) { state.lens[sym++] = 8; }
+
+    inflate_table(LENS,  state.lens, 0, 288, lenfix,   0, state.work, {bits: 9});
+
+    /* distance table */
+    sym = 0;
+    while (sym < 32) { state.lens[sym++] = 5; }
+
+    inflate_table(DISTS, state.lens, 0, 32,   distfix, 0, state.work, {bits: 5});
+
+    /* do this just once */
+    virgin = false;
+  }
+
+  state.lencode = lenfix;
+  state.lenbits = 9;
+  state.distcode = distfix;
+  state.distbits = 5;
+}
+
+
+/*
+ Update the window with the last wsize (normally 32K) bytes written before
+ returning.  If window does not exist yet, create it.  This is only called
+ when a window is already in use, or when output has been written during this
+ inflate call, but the end of the deflate stream has not been reached yet.
+ It is also called to create a window for dictionary data when a dictionary
+ is loaded.
+
+ Providing output buffers larger than 32K to inflate() should provide a speed
+ advantage, since only the last 32K of output is copied to the sliding window
+ upon return from inflate(), and since all distances after the first 32K of
+ output will fall in the output data, making match copies simpler and faster.
+ The advantage may be dependent on the size of the processor's data caches.
+ */
+function updatewindow(strm, src, end, copy) {
+  var dist;
+  var state = strm.state;
+
+  /* if it hasn't been done already, allocate space for the window */
+  if (state.window === null) {
+    state.wsize = 1 << state.wbits;
+    state.wnext = 0;
+    state.whave = 0;
+
+    state.window = new utils.Buf8(state.wsize);
+  }
+
+  /* copy state->wsize or less output bytes into the circular window */
+  if (copy >= state.wsize) {
+    utils.arraySet(state.window,src, end - state.wsize, state.wsize, 0);
+    state.wnext = 0;
+    state.whave = state.wsize;
+  }
+  else {
+    dist = state.wsize - state.wnext;
+    if (dist > copy) {
+      dist = copy;
+    }
+    //zmemcpy(state->window + state->wnext, end - copy, dist);
+    utils.arraySet(state.window,src, end - copy, dist, state.wnext);
+    copy -= dist;
+    if (copy) {
+      //zmemcpy(state->window, end - copy, copy);
+      utils.arraySet(state.window,src, end - copy, copy, 0);
+      state.wnext = copy;
+      state.whave = state.wsize;
+    }
+    else {
+      state.wnext += dist;
+      if (state.wnext === state.wsize) { state.wnext = 0; }
+      if (state.whave < state.wsize) { state.whave += dist; }
+    }
+  }
+  return 0;
+}
+
+function inflate(strm, flush) {
+  var state;
+  var input, output;          // input/output buffers
+  var next;                   /* next input INDEX */
+  var put;                    /* next output INDEX */
+  var have, left;             /* available input and output */
+  var hold;                   /* bit buffer */
+  var bits;                   /* bits in bit buffer */
+  var _in, _out;              /* save starting available input and output */
+  var copy;                   /* number of stored or match bytes to copy */
+  var from;                   /* where to copy match bytes from */
+  var from_source;
+  var here = 0;               /* current decoding table entry */
+  var here_bits, here_op, here_val; // paked "here" denormalized (JS specific)
+  //var last;                   /* parent table entry */
+  var last_bits, last_op, last_val; // paked "last" denormalized (JS specific)
+  var len;                    /* length to copy for repeats, bits to drop */
+  var ret;                    /* return code */
+  var hbuf = new utils.Buf8(4);    /* buffer for gzip header crc calculation */
+  var opts;
+
+  var n; // temporary var for NEED_BITS
+
+  var order = /* permutation of code lengths */
+    [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];
+
+
+  if (!strm || !strm.state || !strm.output ||
+      (!strm.input && strm.avail_in !== 0)) {
+    return Z_STREAM_ERROR;
+  }
+
+  state = strm.state;
+  if (state.mode === TYPE) { state.mode = TYPEDO; }    /* skip check */
+
+
+  //--- LOAD() ---
+  put = strm.next_out;
+  output = strm.output;
+  left = strm.avail_out;
+  next = strm.next_in;
+  input = strm.input;
+  have = strm.avail_in;
+  hold = state.hold;
+  bits = state.bits;
+  //---
+
+  _in = have;
+  _out = left;
+  ret = Z_OK;
+
+  inf_leave: // goto emulation
+  for (;;) {
+    switch (state.mode) {
+    case HEAD:
+      if (state.wrap === 0) {
+        state.mode = TYPEDO;
+        break;
+      }
+      //=== NEEDBITS(16);
+      while (bits < 16) {
+        if (have === 0) { break inf_leave; }
+        have--;
+        hold += input[next++] << bits;
+        bits += 8;
+      }
+      //===//
+      if ((state.wrap & 2) && hold === 0x8b1f) {  /* gzip header */
+        state.check = 0/*crc32(0L, Z_NULL, 0)*/;
+        //=== CRC2(state.check, hold);
+        hbuf[0] = hold & 0xff;
+        hbuf[1] = (hold >>> 8) & 0xff;
+        state.check = crc32(state.check, hbuf, 2, 0);
+        //===//
+
+        //=== INITBITS();
+        hold = 0;
+        bits = 0;
+        //===//
+        state.mode = FLAGS;
+        break;
+      }
+      state.flags = 0;           /* expect zlib header */
+      if (state.head) {
+        state.head.done = false;
+      }
+      if (!(state.wrap & 1) ||   /* check if zlib header allowed */
+        (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {
+        strm.msg = 'incorrect header check';
+        state.mode = BAD;
+        break;
+      }
+      if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {
+        strm.msg = 'unknown compression method';
+        state.mode = BAD;
+        break;
+      }
+      //--- DROPBITS(4) ---//
+      hold >>>= 4;
+      bits -= 4;
+      //---//
+      len = (hold & 0x0f)/*BITS(4)*/ + 8;
+      if (state.wbits === 0) {
+        state.wbits = len;
+      }
+      else if (len > state.wbits) {
+        strm.msg = 'invalid window size';
+        state.mode = BAD;
+        break;
+      }
+      state.dmax = 1 << len;
+      //Tracev((stderr, "inflate:   zlib header ok\n"));
+      strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;
+      state.mode = hold & 0x200 ? DICTID : TYPE;
+      //=== INITBITS();
+      hold = 0;
+      bits = 0;
+      //===//
+      break;
+    case FLAGS:
+      //=== NEEDBITS(16); */
+      while (bits < 16) {
+        if (have === 0) { break inf_leave; }
+        have--;
+        hold += input[next++] << bits;
+        bits += 8;
+      }
+      //===//
+      state.flags = hold;
+      if ((state.flags & 0xff) !== Z_DEFLATED) {
+        strm.msg = 'unknown compression method';
+        state.mode = BAD;
+        break;
+      }
+      if (state.flags & 0xe000) {
+        strm.msg = 'unknown header flags set';
+        state.mode = BAD;
+        break;
+      }
+      if (state.head) {
+        state.head.text = ((hold >> 8) & 1);
+      }
+      if (state.flags & 0x0200) {
+        //=== CRC2(state.check, hold);
+        hbuf[0] = hold & 0xff;
+        hbuf[1] = (hold >>> 8) & 0xff;
+        state.check = crc32(state.check, hbuf, 2, 0);
+        //===//
+      }
+      //=== INITBITS();
+      hold = 0;
+      bits = 0;
+      //===//
+      state.mode = TIME;
+      /* falls through */
+    case TIME:
+      //=== NEEDBITS(32); */
+      while (bits < 32) {
+        if (have === 0) { break inf_leave; }
+        have--;
+        hold += input[next++] << bits;
+        bits += 8;
+      }
+      //===//
+      if (state.head) {
+        state.head.time = hold;
+      }
+      if (state.flags & 0x0200) {
+        //=== CRC4(state.check, hold)
+        hbuf[0] = hold & 0xff;
+        hbuf[1] = (hold >>> 8) & 0xff;
+        hbuf[2] = (hold >>> 16) & 0xff;
+        hbuf[3] = (hold >>> 24) & 0xff;
+        state.check = crc32(state.check, hbuf, 4, 0);
+        //===
+      }
+      //=== INITBITS();
+      hold = 0;
+      bits = 0;
+      //===//
+      state.mode = OS;
+      /* falls through */
+    case OS:
+      //=== NEEDBITS(16); */
+      while (bits < 16) {
+        if (have === 0) { break inf_leave; }
+        have--;
+        hold += input[next++] << bits;
+        bits += 8;
+      }
+      //===//
+      if (state.head) {
+        state.head.xflags = (hold & 0xff);
+        state.head.os = (hold >> 8);
+      }
+      if (state.flags & 0x0200) {
+        //=== CRC2(state.check, hold);
+        hbuf[0] = hold & 0xff;
+        hbuf[1] = (hold >>> 8) & 0xff;
+        state.check = crc32(state.check, hbuf, 2, 0);
+        //===//
+      }
+      //=== INITBITS();
+      hold = 0;
+      bits = 0;
+      //===//
+      state.mode = EXLEN;
+      /* falls through */
+    case EXLEN:
+      if (state.flags & 0x0400) {
+        //=== NEEDBITS(16); */
+        while (bits < 16) {
+          if (have === 0) { break inf_leave; }
+          have--;
+          hold += input[next++] << bits;
+          bits += 8;
+        }
+        //===//
+        state.length = hold;
+        if (state.head) {
+          state.head.extra_len = hold;
+        }
+        if (state.flags & 0x0200) {
+          //=== CRC2(state.check, hold);
+          hbuf[0] = hold & 0xff;
+          hbuf[1] = (hold >>> 8) & 0xff;
+          state.check = crc32(state.check, hbuf, 2, 0);
+          //===//
+        }
+        //=== INITBITS();
+        hold = 0;
+        bits = 0;
+        //===//
+      }
+      else if (state.head) {
+        state.head.extra = null/*Z_NULL*/;
+      }
+      state.mode = EXTRA;
+      /* falls through */
+    case EXTRA:
+      if (state.flags & 0x0400) {
+        copy = state.length;
+        if (copy > have) { copy = have; }
+        if (copy) {
+          if (state.head) {
+            len = state.head.extra_len - state.length;
+            if (!state.head.extra) {
+              // Use untyped array for more conveniend processing later
+              state.head.extra = new Array(state.head.extra_len);
+            }
+            utils.arraySet(
+              state.head.extra,
+              input,
+              next,
+              // extra field is limited to 65536 bytes
+              // - no need for additional size check
+              copy,
+              /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/
+              len
+            );
+            //zmemcpy(state.head.extra + len, next,
+            //        len + copy > state.head.extra_max ?
+            //        state.head.extra_max - len : copy);
+          }
+          if (state.flags & 0x0200) {
+            state.check = crc32(state.check, input, copy, next);
+          }
+          have -= copy;
+          next += copy;
+          state.length -= copy;
+        }
+        if (state.length) { break inf_leave; }
+      }
+      state.length = 0;
+      state.mode = NAME;
+      /* falls through */
+    case NAME:
+      if (state.flags & 0x0800) {
+        if (have === 0) { break inf_leave; }
+        copy = 0;
+        do {
+          // TODO: 2 or 1 bytes?
+          len = input[next + copy++];
+          /* use constant limit because in js we should not preallocate memory */
+          if (state.head && len &&
+              (state.length < 65536 /*state.head.name_max*/)) {
+            state.head.name += String.fromCharCode(len);
+          }
+        } while (len && copy < have);
+
+        if (state.flags & 0x0200) {
+          state.check = crc32(state.check, input, copy, next);
+        }
+        have -= copy;
+        next += copy;
+        if (len) { break inf_leave; }
+      }
+      else if (state.head) {
+        state.head.name = null;
+      }
+      state.length = 0;
+      state.mode = COMMENT;
+      /* falls through */
+    case COMMENT:
+      if (state.flags & 0x1000) {
+        if (have === 0) { break inf_leave; }
+        copy = 0;
+        do {
+          len = input[next + copy++];
+          /* use constant limit because in js we should not preallocate memory */
+          if (state.head && len &&
+              (state.length < 65536 /*state.head.comm_max*/)) {
+            state.head.comment += String.fromCharCode(len);
+          }
+        } while (len && copy < have);
+        if (state.flags & 0x0200) {
+          state.check = crc32(state.check, input, copy, next);
+        }
+        have -= copy;
+        next += copy;
+        if (len) { break inf_leave; }
+      }
+      else if (state.head) {
+        state.head.comment = null;
+      }
+      state.mode = HCRC;
+      /* falls through */
+    case HCRC:
+      if (state.flags & 0x0200) {
+        //=== NEEDBITS(16); */
+        while (bits < 16) {
+          if (have === 0) { break inf_leave; }
+          have--;
+          hold += input[next++] << bits;
+          bits += 8;
+        }
+        //===//
+        if (hold !== (state.check & 0xffff)) {
+          strm.msg = 'header crc mismatch';
+          state.mode = BAD;
+          break;
+        }
+        //=== INITBITS();
+        hold = 0;
+        bits = 0;
+        //===//
+      }
+      if (state.head) {
+        state.head.hcrc = ((state.flags >> 9) & 1);
+        state.head.done = true;
+      }
+      strm.adler = state.check = 0 /*crc32(0L, Z_NULL, 0)*/;
+      state.mode = TYPE;
+      break;
+    case DICTID:
+      //=== NEEDBITS(32); */
+      while (bits < 32) {
+        if (have === 0) { break inf_leave; }
+        have--;
+        hold += input[next++] << bits;
+        bits += 8;
+      }
+      //===//
+      strm.adler = state.check = ZSWAP32(hold);
+      //=== INITBITS();
+      hold = 0;
+      bits = 0;
+      //===//
+      state.mode = DICT;
+      /* falls through */
+    case DICT:
+      if (state.havedict === 0) {
+        //--- RESTORE() ---
+        strm.next_out = put;
+        strm.avail_out = left;
+        strm.next_in = next;
+        strm.avail_in = have;
+        state.hold = hold;
+        state.bits = bits;
+        //---
+        return Z_NEED_DICT;
+      }
+      strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;
+      state.mode = TYPE;
+      /* falls through */
+    case TYPE:
+      if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }
+      /* falls through */
+    case TYPEDO:
+      if (state.last) {
+        //--- BYTEBITS() ---//
+        hold >>>= bits & 7;
+        bits -= bits & 7;
+        //---//
+        state.mode = CHECK;
+        break;
+      }
+      //=== NEEDBITS(3); */
+      while (bits < 3) {
+        if (have === 0) { break inf_leave; }
+        have--;
+        hold += input[next++] << bits;
+        bits += 8;
+      }
+      //===//
+      state.last = (hold & 0x01)/*BITS(1)*/;
+      //--- DROPBITS(1) ---//
+      hold >>>= 1;
+      bits -= 1;
+      //---//
+
+      switch ((hold & 0x03)/*BITS(2)*/) {
+      case 0:                             /* stored block */
+        //Tracev((stderr, "inflate:     stored block%s\n",
+        //        state.last ? " (last)" : ""));
+        state.mode = STORED;
+        break;
+      case 1:                             /* fixed block */
+        fixedtables(state);
+        //Tracev((stderr, "inflate:     fixed codes block%s\n",
+        //        state.last ? " (last)" : ""));
+        state.mode = LEN_;             /* decode codes */
+        if (flush === Z_TREES) {
+          //--- DROPBITS(2) ---//
+          hold >>>= 2;
+          bits -= 2;
+          //---//
+          break inf_leave;
+        }
+        break;
+      case 2:                             /* dynamic block */
+        //Tracev((stderr, "inflate:     dynamic codes block%s\n",
+        //        state.last ? " (last)" : ""));
+        state.mode = TABLE;
+        break;
+      case 3:
+        strm.msg = 'invalid block type';
+        state.mode = BAD;
+      }
+      //--- DROPBITS(2) ---//
+      hold >>>= 2;
+      bits -= 2;
+      //---//
+      break;
+    case STORED:
+      //--- BYTEBITS() ---// /* go to byte boundary */
+      hold >>>= bits & 7;
+      bits -= bits & 7;
+      //---//
+      //=== NEEDBITS(32); */
+      while (bits < 32) {
+        if (have === 0) { break inf_leave; }
+        have--;
+        hold += input[next++] << bits;
+        bits += 8;
+      }
+      //===//
+      if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {
+        strm.msg = 'invalid stored block lengths';
+        state.mode = BAD;
+        break;
+      }
+      state.length = hold & 0xffff;
+      //Tracev((stderr, "inflate:       stored length %u\n",
+      //        state.length));
+      //=== INITBITS();
+      hold = 0;
+      bits = 0;
+      //===//
+      state.mode = COPY_;
+      if (flush === Z_TREES) { break inf_leave; }
+      /* falls through */
+    case COPY_:
+      state.mode = COPY;
+      /* falls through */
+    case COPY:
+      copy = state.length;
+      if (copy) {
+        if (copy > have) { copy = have; }
+        if (copy > left) { copy = left; }
+        if (copy === 0) { break inf_leave; }
+        //--- zmemcpy(put, next, copy); ---
+        utils.arraySet(output, input, next, copy, put);
+        //---//
+        have -= copy;
+        next += copy;
+        left -= copy;
+        put += copy;
+        state.length -= copy;
+        break;
+      }
+      //Tracev((stderr, "inflate:       stored end\n"));
+      state.mode = TYPE;
+      break;
+    case TABLE:
+      //=== NEEDBITS(14); */
+      while (bits < 14) {
+        if (have === 0) { break inf_leave; }
+        have--;
+        hold += input[next++] << bits;
+        bits += 8;
+      }
+      //===//
+      state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;
+      //--- DROPBITS(5) ---//
+      hold >>>= 5;
+      bits -= 5;
+      //---//
+      state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;
+      //--- DROPBITS(5) ---//
+      hold >>>= 5;
+      bits -= 5;
+      //---//
+      state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;
+      //--- DROPBITS(4) ---//
+      hold >>>= 4;
+      bits -= 4;
+      //---//
+//#ifndef PKZIP_BUG_WORKAROUND
+      if (state.nlen > 286 || state.ndist > 30) {
+        strm.msg = 'too many length or distance symbols';
+        state.mode = BAD;
+        break;
+      }
+//#endif
+      //Tracev((stderr, "inflate:       table sizes ok\n"));
+      state.have = 0;
+      state.mode = LENLENS;
+      /* falls through */
+    case LENLENS:
+      while (state.have < state.ncode) {
+        //=== NEEDBITS(3);
+        while (bits < 3) {
+          if (have === 0) { break inf_leave; }
+          have--;
+          hold += input[next++] << bits;
+          bits += 8;
+        }
+        //===//
+        state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);
+        //--- DROPBITS(3) ---//
+        hold >>>= 3;
+        bits -= 3;
+        //---//
+      }
+      while (state.have < 19) {
+        state.lens[order[state.have++]] = 0;
+      }
+      // We have separate tables & no pointers. 2 commented lines below not needed.
+      //state.next = state.codes;
+      //state.lencode = state.next;
+      // Switch to use dynamic table
+      state.lencode = state.lendyn;
+      state.lenbits = 7;
+
+      opts = {bits: state.lenbits};
+      ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);
+      state.lenbits = opts.bits;
+
+      if (ret) {
+        strm.msg = 'invalid code lengths set';
+        state.mode = BAD;
+        break;
+      }
+      //Tracev((stderr, "inflate:       code lengths ok\n"));
+      state.have = 0;
+      state.mode = CODELENS;
+      /* falls through */
+    case CODELENS:
+      while (state.have < state.nlen + state.ndist) {
+        for (;;) {
+          here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/
+          here_bits = here >>> 24;
+          here_op = (here >>> 16) & 0xff;
+          here_val = here & 0xffff;
+
+          if ((here_bits) <= bits) { break; }
+          //--- PULLBYTE() ---//
+          if (have === 0) { break inf_leave; }
+          have--;
+          hold += input[next++] << bits;
+          bits += 8;
+          //---//
+        }
+        if (here_val < 16) {
+          //--- DROPBITS(here.bits) ---//
+          hold >>>= here_bits;
+          bits -= here_bits;
+          //---//
+          state.lens[state.have++] = here_val;
+        }
+        else {
+          if (here_val === 16) {
+            //=== NEEDBITS(here.bits + 2);
+            n = here_bits + 2;
+            while (bits < n) {
+              if (have === 0) { break inf_leave; }
+              have--;
+              hold += input[next++] << bits;
+              bits += 8;
+            }
+            //===//
+            //--- DROPBITS(here.bits) ---//
+            hold >>>= here_bits;
+            bits -= here_bits;
+            //---//
+            if (state.have === 0) {
+              strm.msg = 'invalid bit length repeat';
+              state.mode = BAD;
+              break;
+            }
+            len = state.lens[state.have - 1];
+            copy = 3 + (hold & 0x03);//BITS(2);
+            //--- DROPBITS(2) ---//
+            hold >>>= 2;
+            bits -= 2;
+            //---//
+          }
+          else if (here_val === 17) {
+            //=== NEEDBITS(here.bits + 3);
+            n = here_bits + 3;
+            while (bits < n) {
+              if (have === 0) { break inf_leave; }
+              have--;
+              hold += input[next++] << bits;
+              bits += 8;
+            }
+            //===//
+            //--- DROPBITS(here.bits) ---//
+            hold >>>= here_bits;
+            bits -= here_bits;
+            //---//
+            len = 0;
+            copy = 3 + (hold & 0x07);//BITS(3);
+            //--- DROPBITS(3) ---//
+            hold >>>= 3;
+            bits -= 3;
+            //---//
+          }
+          else {
+            //=== NEEDBITS(here.bits + 7);
+            n = here_bits + 7;
+            while (bits < n) {
+              if (have === 0) { break inf_leave; }
+              have--;
+              hold += input[next++] << bits;
+              bits += 8;
+            }
+            //===//
+            //--- DROPBITS(here.bits) ---//
+            hold >>>= here_bits;
+            bits -= here_bits;
+            //---//
+            len = 0;
+            copy = 11 + (hold & 0x7f);//BITS(7);
+            //--- DROPBITS(7) ---//
+            hold >>>= 7;
+            bits -= 7;
+            //---//
+          }
+          if (state.have + copy > state.nlen + state.ndist) {
+            strm.msg = 'invalid bit length repeat';
+            state.mode = BAD;
+            break;
+          }
+          while (copy--) {
+            state.lens[state.have++] = len;
+          }
+        }
+      }
+
+      /* handle error breaks in while */
+      if (state.mode === BAD) { break; }
+
+      /* check for end-of-block code (better have one) */
+      if (state.lens[256] === 0) {
+        strm.msg = 'invalid code -- missing end-of-block';
+        state.mode = BAD;
+        break;
+      }
+
+      /* build code tables -- note: do not change the lenbits or distbits
+         values here (9 and 6) without reading the comments in inftrees.h
+         concerning the ENOUGH constants, which depend on those values */
+      state.lenbits = 9;
+
+      opts = {bits: state.lenbits};
+      ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);
+      // We have separate tables & no pointers. 2 commented lines below not needed.
+      // state.next_index = opts.table_index;
+      state.lenbits = opts.bits;
+      // state.lencode = state.next;
+
+      if (ret) {
+        strm.msg = 'invalid literal/lengths set';
+        state.mode = BAD;
+        break;
+      }
+
+      state.distbits = 6;
+      //state.distcode.copy(state.codes);
+      // Switch to use dynamic table
+      state.distcode = state.distdyn;
+      opts = {bits: state.distbits};
+      ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);
+      // We have separate tables & no pointers. 2 commented lines below not needed.
+      // state.next_index = opts.table_index;
+      state.distbits = opts.bits;
+      // state.distcode = state.next;
+
+      if (ret) {
+        strm.msg = 'invalid distances set';
+        state.mode = BAD;
+        break;
+      }
+      //Tracev((stderr, 'inflate:       codes ok\n'));
+      state.mode = LEN_;
+      if (flush === Z_TREES) { break inf_leave; }
+      /* falls through */
+    case LEN_:
+      state.mode = LEN;
+      /* falls through */
+    case LEN:
+      if (have >= 6 && left >= 258) {
+        //--- RESTORE() ---
+        strm.next_out = put;
+        strm.avail_out = left;
+        strm.next_in = next;
+        strm.avail_in = have;
+        state.hold = hold;
+        state.bits = bits;
+        //---
+        inflate_fast(strm, _out);
+        //--- LOAD() ---
+        put = strm.next_out;
+        output = strm.output;
+        left = strm.avail_out;
+        next = strm.next_in;
+        input = strm.input;
+        have = strm.avail_in;
+        hold = state.hold;
+        bits = state.bits;
+        //---
+
+        if (state.mode === TYPE) {
+          state.back = -1;
+        }
+        break;
+      }
+      state.back = 0;
+      for (;;) {
+        here = state.lencode[hold & ((1 << state.lenbits) -1)];  /*BITS(state.lenbits)*/
+        here_bits = here >>> 24;
+        here_op = (here >>> 16) & 0xff;
+        here_val = here & 0xffff;
+
+        if (here_bits <= bits) { break; }
+        //--- PULLBYTE() ---//
+        if (have === 0) { break inf_leave; }
+        have--;
+        hold += input[next++] << bits;
+        bits += 8;
+        //---//
+      }
+      if (here_op && (here_op & 0xf0) === 0) {
+        last_bits = here_bits;
+        last_op = here_op;
+        last_val = here_val;
+        for (;;) {
+          here = state.lencode[last_val +
+                  ((hold & ((1 << (last_bits + last_op)) -1))/*BITS(last.bits + last.op)*/ >> last_bits)];
+          here_bits = here >>> 24;
+          here_op = (here >>> 16) & 0xff;
+          here_val = here & 0xffff;
+
+          if ((last_bits + here_bits) <= bits) { break; }
+          //--- PULLBYTE() ---//
+          if (have === 0) { break inf_leave; }
+          have--;
+          hold += input[next++] << bits;
+          bits += 8;
+          //---//
+        }
+        //--- DROPBITS(last.bits) ---//
+        hold >>>= last_bits;
+        bits -= last_bits;
+        //---//
+        state.back += last_bits;
+      }
+      //--- DROPBITS(here.bits) ---//
+      hold >>>= here_bits;
+      bits -= here_bits;
+      //---//
+      state.back += here_bits;
+      state.length = here_val;
+      if (here_op === 0) {
+        //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
+        //        "inflate:         literal '%c'\n" :
+        //        "inflate:         literal 0x%02x\n", here.val));
+        state.mode = LIT;
+        break;
+      }
+      if (here_op & 32) {
+        //Tracevv((stderr, "inflate:         end of block\n"));
+        state.back = -1;
+        state.mode = TYPE;
+        break;
+      }
+      if (here_op & 64) {
+        strm.msg = 'invalid literal/length code';
+        state.mode = BAD;
+        break;
+      }
+      state.extra = here_op & 15;
+      state.mode = LENEXT;
+      /* falls through */
+    case LENEXT:
+      if (state.extra) {
+        //=== NEEDBITS(state.extra);
+        n = state.extra;
+        while (bits < n) {
+          if (have === 0) { break inf_leave; }
+          have--;
+          hold += input[next++] << bits;
+          bits += 8;
+        }
+        //===//
+        state.length += hold & ((1 << state.extra) -1)/*BITS(state.extra)*/;
+        //--- DROPBITS(state.extra) ---//
+        hold >>>= state.extra;
+        bits -= state.extra;
+        //---//
+        state.back += state.extra;
+      }
+      //Tracevv((stderr, "inflate:         length %u\n", state.length));
+      state.was = state.length;
+      state.mode = DIST;
+      /* falls through */
+    case DIST:
+      for (;;) {
+        here = state.distcode[hold & ((1 << state.distbits) -1)];/*BITS(state.distbits)*/
+        here_bits = here >>> 24;
+        here_op = (here >>> 16) & 0xff;
+        here_val = here & 0xffff;
+
+        if ((here_bits) <= bits) { break; }
+        //--- PULLBYTE() ---//
+        if (have === 0) { break inf_leave; }
+        have--;
+        hold += input[next++] << bits;
+        bits += 8;
+        //---//
+      }
+      if ((here_op & 0xf0) === 0) {
+        last_bits = here_bits;
+        last_op = here_op;
+        last_val = here_val;
+        for (;;) {
+          here = state.distcode[last_val +
+                  ((hold & ((1 << (last_bits + last_op)) -1))/*BITS(last.bits + last.op)*/ >> last_bits)];
+          here_bits = here >>> 24;
+          here_op = (here >>> 16) & 0xff;
+          here_val = here & 0xffff;
+
+          if ((last_bits + here_bits) <= bits) { break; }
+          //--- PULLBYTE() ---//
+          if (have === 0) { break inf_leave; }
+          have--;
+          hold += input[next++] << bits;
+          bits += 8;
+          //---//
+        }
+        //--- DROPBITS(last.bits) ---//
+        hold >>>= last_bits;
+        bits -= last_bits;
+        //---//
+        state.back += last_bits;
+      }
+      //--- DROPBITS(here.bits) ---//
+      hold >>>= here_bits;
+      bits -= here_bits;
+      //---//
+      state.back += here_bits;
+      if (here_op & 64) {
+        strm.msg = 'invalid distance code';
+        state.mode = BAD;
+        break;
+      }
+      state.offset = here_val;
+      state.extra = (here_op) & 15;
+      state.mode = DISTEXT;
+      /* falls through */
+    case DISTEXT:
+      if (state.extra) {
+        //=== NEEDBITS(state.extra);
+        n = state.extra;
+        while (bits < n) {
+          if (have === 0) { break inf_leave; }
+          have--;
+          hold += input[next++] << bits;
+          bits += 8;
+        }
+        //===//
+        state.offset += hold & ((1 << state.extra) -1)/*BITS(state.extra)*/;
+        //--- DROPBITS(state.extra) ---//
+        hold >>>= state.extra;
+        bits -= state.extra;
+        //---//
+        state.back += state.extra;
+      }
+//#ifdef INFLATE_STRICT
+      if (state.offset > state.dmax) {
+        strm.msg = 'invalid distance too far back';
+        state.mode = BAD;
+        break;
+      }
+//#endif
+      //Tracevv((stderr, "inflate:         distance %u\n", state.offset));
+      state.mode = MATCH;
+      /* falls through */
+    case MATCH:
+      if (left === 0) { break inf_leave; }
+      copy = _out - left;
+      if (state.offset > copy) {         /* copy from window */
+        copy = state.offset - copy;
+        if (copy > state.whave) {
+          if (state.sane) {
+            strm.msg = 'invalid distance too far back';
+            state.mode = BAD;
+            break;
+          }
+// (!) This block is disabled in zlib defailts,
+// don't enable it for binary compatibility
+//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
+//          Trace((stderr, "inflate.c too far\n"));
+//          copy -= state.whave;
+//          if (copy > state.length) { copy = state.length; }
+//          if (copy > left) { copy = left; }
+//          left -= copy;
+//          state.length -= copy;
+//          do {
+//            output[put++] = 0;
+//          } while (--copy);
+//          if (state.length === 0) { state.mode = LEN; }
+//          break;
+//#endif
+        }
+        if (copy > state.wnext) {
+          copy -= state.wnext;
+          from = state.wsize - copy;
+        }
+        else {
+          from = state.wnext - copy;
+        }
+        if (copy > state.length) { copy = state.length; }
+        from_source = state.window;
+      }
+      else {                              /* copy from output */
+        from_source = output;
+        from = put - state.offset;
+        copy = state.length;
+      }
+      if (copy > left) { copy = left; }
+      left -= copy;
+      state.length -= copy;
+      do {
+        output[put++] = from_source[from++];
+      } while (--copy);
+      if (state.length === 0) { state.mode = LEN; }
+      break;
+    case LIT:
+      if (left === 0) { break inf_leave; }
+      output[put++] = state.length;
+      left--;
+      state.mode = LEN;
+      break;
+    case CHECK:
+      if (state.wrap) {
+        //=== NEEDBITS(32);
+        while (bits < 32) {
+          if (have === 0) { break inf_leave; }
+          have--;
+          // Use '|' insdead of '+' to make sure that result is signed
+          hold |= input[next++] << bits;
+          bits += 8;
+        }
+        //===//
+        _out -= left;
+        strm.total_out += _out;
+        state.total += _out;
+        if (_out) {
+          strm.adler = state.check =
+              /*UPDATE(state.check, put - _out, _out);*/
+              (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));
+
+        }
+        _out = left;
+        // NB: crc32 stored as signed 32-bit int, ZSWAP32 returns signed too
+        if ((state.flags ? hold : ZSWAP32(hold)) !== state.check) {
+          strm.msg = 'incorrect data check';
+          state.mode = BAD;
+          break;
+        }
+        //=== INITBITS();
+        hold = 0;
+        bits = 0;
+        //===//
+        //Tracev((stderr, "inflate:   check matches trailer\n"));
+      }
+      state.mode = LENGTH;
+      /* falls through */
+    case LENGTH:
+      if (state.wrap && state.flags) {
+        //=== NEEDBITS(32);
+        while (bits < 32) {
+          if (have === 0) { break inf_leave; }
+          have--;
+          hold += input[next++] << bits;
+          bits += 8;
+        }
+        //===//
+        if (hold !== (state.total & 0xffffffff)) {
+          strm.msg = 'incorrect length check';
+          state.mode = BAD;
+          break;
+        }
+        //=== INITBITS();
+        hold = 0;
+        bits = 0;
+        //===//
+        //Tracev((stderr, "inflate:   length matches trailer\n"));
+      }
+      state.mode = DONE;
+      /* falls through */
+    case DONE:
+      ret = Z_STREAM_END;
+      break inf_leave;
+    case BAD:
+      ret = Z_DATA_ERROR;
+      break inf_leave;
+    case MEM:
+      return Z_MEM_ERROR;
+    case SYNC:
+      /* falls through */
+    default:
+      return Z_STREAM_ERROR;
+    }
+  }
+
+  // inf_leave <- here is real place for "goto inf_leave", emulated via "break inf_leave"
+
+  /*
+     Return from inflate(), updating the total counts and the check value.
+     If there was no progress during the inflate() call, return a buffer
+     error.  Call updatewindow() to create and/or update the window state.
+     Note: a memory error from inflate() is non-recoverable.
+   */
+
+  //--- RESTORE() ---
+  strm.next_out = put;
+  strm.avail_out = left;
+  strm.next_in = next;
+  strm.avail_in = have;
+  state.hold = hold;
+  state.bits = bits;
+  //---
+
+  if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&
+                      (state.mode < CHECK || flush !== Z_FINISH))) {
+    if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {
+      state.mode = MEM;
+      return Z_MEM_ERROR;
+    }
+  }
+  _in -= strm.avail_in;
+  _out -= strm.avail_out;
+  strm.total_in += _in;
+  strm.total_out += _out;
+  state.total += _out;
+  if (state.wrap && _out) {
+    strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/
+      (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));
+  }
+  strm.data_type = state.bits + (state.last ? 64 : 0) +
+                    (state.mode === TYPE ? 128 : 0) +
+                    (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);
+  if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {
+    ret = Z_BUF_ERROR;
+  }
+  return ret;
+}
+
+function inflateEnd(strm) {
+
+  if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {
+    return Z_STREAM_ERROR;
+  }
+
+  var state = strm.state;
+  if (state.window) {
+    state.window = null;
+  }
+  strm.state = null;
+  return Z_OK;
+}
+
+function inflateGetHeader(strm, head) {
+  var state;
+
+  /* check state */
+  if (!strm || !strm.state) { return Z_STREAM_ERROR; }
+  state = strm.state;
+  if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }
+
+  /* save header structure */
+  state.head = head;
+  head.done = false;
+  return Z_OK;
+}
+
+
+exports.inflateReset = inflateReset;
+exports.inflateReset2 = inflateReset2;
+exports.inflateResetKeep = inflateResetKeep;
+exports.inflateInit = inflateInit;
+exports.inflateInit2 = inflateInit2;
+exports.inflate = inflate;
+exports.inflateEnd = inflateEnd;
+exports.inflateGetHeader = inflateGetHeader;
+exports.inflateInfo = 'pako inflate (from Nodeca project)';
+
+/* Not implemented
+exports.inflateCopy = inflateCopy;
+exports.inflateGetDictionary = inflateGetDictionary;
+exports.inflateMark = inflateMark;
+exports.inflatePrime = inflatePrime;
+exports.inflateSetDictionary = inflateSetDictionary;
+exports.inflateSync = inflateSync;
+exports.inflateSyncPoint = inflateSyncPoint;
+exports.inflateUndermine = inflateUndermine;
+*/
+},{"../utils/common":27,"./adler32":29,"./crc32":31,"./inffast":34,"./inftrees":36}],36:[function(_dereq_,module,exports){
+'use strict';
+
+
+var utils = _dereq_('../utils/common');
+
+var MAXBITS = 15;
+var ENOUGH_LENS = 852;
+var ENOUGH_DISTS = 592;
+//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);
+
+var CODES = 0;
+var LENS = 1;
+var DISTS = 2;
+
+var lbase = [ /* Length codes 257..285 base */
+  3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
+  35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0
+];
+
+var lext = [ /* Length codes 257..285 extra */
+  16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
+  19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78
+];
+
+var dbase = [ /* Distance codes 0..29 base */
+  1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
+  257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
+  8193, 12289, 16385, 24577, 0, 0
+];
+
+var dext = [ /* Distance codes 0..29 extra */
+  16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,
+  23, 23, 24, 24, 25, 25, 26, 26, 27, 27,
+  28, 28, 29, 29, 64, 64
+];
+
+module.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)
+{
+  var bits = opts.bits;
+      //here = opts.here; /* table entry for duplication */
+
+  var len = 0;               /* a code's length in bits */
+  var sym = 0;               /* index of code symbols */
+  var min = 0, max = 0;          /* minimum and maximum code lengths */
+  var root = 0;              /* number of index bits for root table */
+  var curr = 0;              /* number of index bits for current table */
+  var drop = 0;              /* code bits to drop for sub-table */
+  var left = 0;                   /* number of prefix codes available */
+  var used = 0;              /* code entries in table used */
+  var huff = 0;              /* Huffman code */
+  var incr;              /* for incrementing code, index */
+  var fill;              /* index for replicating entries */
+  var low;               /* low bits for current root entry */
+  var mask;              /* mask for low root bits */
+  var next;             /* next available space in table */
+  var base = null;     /* base value table to use */
+  var base_index = 0;
+//  var shoextra;    /* extra bits table to use */
+  var end;                    /* use base and extra for symbol > end */
+  var count = new utils.Buf16(MAXBITS+1); //[MAXBITS+1];    /* number of codes of each length */
+  var offs = new utils.Buf16(MAXBITS+1); //[MAXBITS+1];     /* offsets in table for each length */
+  var extra = null;
+  var extra_index = 0;
+
+  var here_bits, here_op, here_val;
+
+  /*
+   Process a set of code lengths to create a canonical Huffman code.  The
+   code lengths are lens[0..codes-1].  Each length corresponds to the
+   symbols 0..codes-1.  The Huffman code is generated by first sorting the
+   symbols by length from short to long, and retaining the symbol order
+   for codes with equal lengths.  Then the code starts with all zero bits
+   for the first code of the shortest length, and the codes are integer
+   increments for the same length, and zeros are appended as the length
+   increases.  For the deflate format, these bits are stored backwards
+   from their more natural integer increment ordering, and so when the
+   decoding tables are built in the large loop below, the integer codes
+   are incremented backwards.
+
+   This routine assumes, but does not check, that all of the entries in
+   lens[] are in the range 0..MAXBITS.  The caller must assure this.
+   1..MAXBITS is interpreted as that code length.  zero means that that
+   symbol does not occur in this code.
+
+   The codes are sorted by computing a count of codes for each length,
+   creating from that a table of starting indices for each length in the
+   sorted table, and then entering the symbols in order in the sorted
+   table.  The sorted table is work[], with that space being provided by
+   the caller.
+
+   The length counts are used for other purposes as well, i.e. finding
+   the minimum and maximum length codes, determining if there are any
+   codes at all, checking for a valid set of lengths, and looking ahead
+   at length counts to determine sub-table sizes when building the
+   decoding tables.
+   */
+
+  /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */
+  for (len = 0; len <= MAXBITS; len++) {
+    count[len] = 0;
+  }
+  for (sym = 0; sym < codes; sym++) {
+    count[lens[lens_index + sym]]++;
+  }
+
+  /* bound code lengths, force root to be within code lengths */
+  root = bits;
+  for (max = MAXBITS; max >= 1; max--) {
+    if (count[max] !== 0) { break; }
+  }
+  if (root > max) {
+    root = max;
+  }
+  if (max === 0) {                     /* no symbols to code at all */
+    //table.op[opts.table_index] = 64;  //here.op = (var char)64;    /* invalid code marker */
+    //table.bits[opts.table_index] = 1;   //here.bits = (var char)1;
+    //table.val[opts.table_index++] = 0;   //here.val = (var short)0;
+    table[table_index++] = (1 << 24) | (64 << 16) | 0;
+
+
+    //table.op[opts.table_index] = 64;
+    //table.bits[opts.table_index] = 1;
+    //table.val[opts.table_index++] = 0;
+    table[table_index++] = (1 << 24) | (64 << 16) | 0;
+
+    opts.bits = 1;
+    return 0;     /* no symbols, but wait for decoding to report error */
+  }
+  for (min = 1; min < max; min++) {
+    if (count[min] !== 0) { break; }
+  }
+  if (root < min) {
+    root = min;
+  }
+
+  /* check for an over-subscribed or incomplete set of lengths */
+  left = 1;
+  for (len = 1; len <= MAXBITS; len++) {
+    left <<= 1;
+    left -= count[len];
+    if (left < 0) {
+      return -1;
+    }        /* over-subscribed */
+  }
+  if (left > 0 && (type === CODES || max !== 1)) {
+    return -1;                      /* incomplete set */
+  }
+
+  /* generate offsets into symbol table for each length for sorting */
+  offs[1] = 0;
+  for (len = 1; len < MAXBITS; len++) {
+    offs[len + 1] = offs[len] + count[len];
+  }
+
+  /* sort symbols by length, by symbol order within each length */
+  for (sym = 0; sym < codes; sym++) {
+    if (lens[lens_index + sym] !== 0) {
+      work[offs[lens[lens_index + sym]]++] = sym;
+    }
+  }
+
+  /*
+   Create and fill in decoding tables.  In this loop, the table being
+   filled is at next and has curr index bits.  The code being used is huff
+   with length len.  That code is converted to an index by dropping drop
+   bits off of the bottom.  For codes where len is less than drop + curr,
+   those top drop + curr - len bits are incremented through all values to
+   fill the table with replicated entries.
+
+   root is the number of index bits for the root table.  When len exceeds
+   root, sub-tables are created pointed to by the root entry with an index
+   of the low root bits of huff.  This is saved in low to check for when a
+   new sub-table should be started.  drop is zero when the root table is
+   being filled, and drop is root when sub-tables are being filled.
+
+   When a new sub-table is needed, it is necessary to look ahead in the
+   code lengths to determine what size sub-table is needed.  The length
+   counts are used for this, and so count[] is decremented as codes are
+   entered in the tables.
+
+   used keeps track of how many table entries have been allocated from the
+   provided *table space.  It is checked for LENS and DIST tables against
+   the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in
+   the initial root table size constants.  See the comments in inftrees.h
+   for more information.
+
+   sym increments through all symbols, and the loop terminates when
+   all codes of length max, i.e. all codes, have been processed.  This
+   routine permits incomplete codes, so another loop after this one fills
+   in the rest of the decoding tables with invalid code markers.
+   */
+
+  /* set up for code type */
+  // poor man optimization - use if-else instead of switch,
+  // to avoid deopts in old v8
+  if (type === CODES) {
+      base = extra = work;    /* dummy value--not used */
+      end = 19;
+  } else if (type === LENS) {
+      base = lbase;
+      base_index -= 257;
+      extra = lext;
+      extra_index -= 257;
+      end = 256;
+  } else {                    /* DISTS */
+      base = dbase;
+      extra = dext;
+      end = -1;
+  }
+
+  /* initialize opts for loop */
+  huff = 0;                   /* starting code */
+  sym = 0;                    /* starting code symbol */
+  len = min;                  /* starting code length */
+  next = table_index;              /* current table to fill in */
+  curr = root;                /* current table index bits */
+  drop = 0;                   /* current bits to drop from code for index */
+  low = -1;                   /* trigger new sub-table when len > root */
+  used = 1 << root;          /* use root table entries */
+  mask = used - 1;            /* mask for comparing low */
+
+  /* check available table space */
+  if ((type === LENS && used > ENOUGH_LENS) ||
+    (type === DISTS && used > ENOUGH_DISTS)) {
+    return 1;
+  }
+
+  var i=0;
+  /* process all codes and make table entries */
+  for (;;) {
+    i++;
+    /* create table entry */
+    here_bits = len - drop;
+    if (work[sym] < end) {
+      here_op = 0;
+      here_val = work[sym];
+    }
+    else if (work[sym] > end) {
+      here_op = extra[extra_index + work[sym]];
+      here_val = base[base_index + work[sym]];
+    }
+    else {
+      here_op = 32 + 64;         /* end of block */
+      here_val = 0;
+    }
+
+    /* replicate for those indices with low len bits equal to huff */
+    incr = 1 << (len - drop);
+    fill = 1 << curr;
+    min = fill;                 /* save offset to next table */
+    do {
+      fill -= incr;
+      table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;
+    } while (fill !== 0);
+
+    /* backwards increment the len-bit code huff */
+    incr = 1 << (len - 1);
+    while (huff & incr) {
+      incr >>= 1;
+    }
+    if (incr !== 0) {
+      huff &= incr - 1;
+      huff += incr;
+    } else {
+      huff = 0;
+    }
+
+    /* go to next symbol, update count, len */
+    sym++;
+    if (--count[len] === 0) {
+      if (len === max) { break; }
+      len = lens[lens_index + work[sym]];
+    }
+
+    /* create new sub-table if needed */
+    if (len > root && (huff & mask) !== low) {
+      /* if first time, transition to sub-tables */
+      if (drop === 0) {
+        drop = root;
+      }
+
+      /* increment past last table */
+      next += min;            /* here min is 1 << curr */
+
+      /* determine length of next table */
+      curr = len - drop;
+      left = 1 << curr;
+      while (curr + drop < max) {
+        left -= count[curr + drop];
+        if (left <= 0) { break; }
+        curr++;
+        left <<= 1;
+      }
+
+      /* check for enough space */
+      used += 1 << curr;
+      if ((type === LENS && used > ENOUGH_LENS) ||
+        (type === DISTS && used > ENOUGH_DISTS)) {
+        return 1;
+      }
+
+      /* point entry in root table to sub-table */
+      low = huff & mask;
+      /*table.op[low] = curr;
+      table.bits[low] = root;
+      table.val[low] = next - opts.table_index;*/
+      table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;
+    }
+  }
+
+  /* fill in remaining table entry if code is incomplete (guaranteed to have
+   at most one remaining entry, since if the code is incomplete, the
+   maximum code length that was allowed to get this far is one bit) */
+  if (huff !== 0) {
+    //table.op[next + huff] = 64;            /* invalid code marker */
+    //table.bits[next + huff] = len - drop;
+    //table.val[next + huff] = 0;
+    table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;
+  }
+
+  /* set return parameters */
+  //opts.table_index += used;
+  opts.bits = root;
+  return 0;
+};
+
+},{"../utils/common":27}],37:[function(_dereq_,module,exports){
+'use strict';
+
+module.exports = {
+  '2':    'need dictionary',     /* Z_NEED_DICT       2  */
+  '1':    'stream end',          /* Z_STREAM_END      1  */
+  '0':    '',                    /* Z_OK              0  */
+  '-1':   'file error',          /* Z_ERRNO         (-1) */
+  '-2':   'stream error',        /* Z_STREAM_ERROR  (-2) */
+  '-3':   'data error',          /* Z_DATA_ERROR    (-3) */
+  '-4':   'insufficient memory', /* Z_MEM_ERROR     (-4) */
+  '-5':   'buffer error',        /* Z_BUF_ERROR     (-5) */
+  '-6':   'incompatible version' /* Z_VERSION_ERROR (-6) */
+};
+},{}],38:[function(_dereq_,module,exports){
+'use strict';
+
+
+var utils = _dereq_('../utils/common');
+
+/* Public constants ==========================================================*/
+/* ===========================================================================*/
+
+
+//var Z_FILTERED          = 1;
+//var Z_HUFFMAN_ONLY      = 2;
+//var Z_RLE               = 3;
+var Z_FIXED               = 4;
+//var Z_DEFAULT_STRATEGY  = 0;
+
+/* Possible values of the data_type field (though see inflate()) */
+var Z_BINARY              = 0;
+var Z_TEXT                = 1;
+//var Z_ASCII             = 1; // = Z_TEXT
+var Z_UNKNOWN             = 2;
+
+/*============================================================================*/
+
+
+function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }
+
+// From zutil.h
+
+var STORED_BLOCK = 0;
+var STATIC_TREES = 1;
+var DYN_TREES    = 2;
+/* The three kinds of block type */
+
+var MIN_MATCH    = 3;
+var MAX_MATCH    = 258;
+/* The minimum and maximum match lengths */
+
+// From deflate.h
+/* ===========================================================================
+ * Internal compression state.
+ */
+
+var LENGTH_CODES  = 29;
+/* number of length codes, not counting the special END_BLOCK code */
+
+var LITERALS      = 256;
+/* number of literal bytes 0..255 */
+
+var L_CODES       = LITERALS + 1 + LENGTH_CODES;
+/* number of Literal or Length codes, including the END_BLOCK code */
+
+var D_CODES       = 30;
+/* number of distance codes */
+
+var BL_CODES      = 19;
+/* number of codes used to transfer the bit lengths */
+
+var HEAP_SIZE     = 2*L_CODES + 1;
+/* maximum heap size */
+
+var MAX_BITS      = 15;
+/* All codes must not exceed MAX_BITS bits */
+
+var Buf_size      = 16;
+/* size of bit buffer in bi_buf */
+
+
+/* ===========================================================================
+ * Constants
+ */
+
+var MAX_BL_BITS = 7;
+/* Bit length codes must not exceed MAX_BL_BITS bits */
+
+var END_BLOCK   = 256;
+/* end of block literal code */
+
+var REP_3_6     = 16;
+/* repeat previous bit length 3-6 times (2 bits of repeat count) */
+
+var REPZ_3_10   = 17;
+/* repeat a zero length 3-10 times  (3 bits of repeat count) */
+
+var REPZ_11_138 = 18;
+/* repeat a zero length 11-138 times  (7 bits of repeat count) */
+
+var extra_lbits =   /* extra bits for each length code */
+  [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];
+
+var extra_dbits =   /* extra bits for each distance code */
+  [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];
+
+var extra_blbits =  /* extra bits for each bit length code */
+  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];
+
+var bl_order =
+  [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];
+/* The lengths of the bit length codes are sent in order of decreasing
+ * probability, to avoid transmitting the lengths for unused bit length codes.
+ */
+
+/* ===========================================================================
+ * Local data. These are initialized only once.
+ */
+
+// We pre-fill arrays with 0 to avoid uninitialized gaps
+
+var DIST_CODE_LEN = 512; /* see definition of array dist_code below */
+
+// !!!! Use flat array insdead of structure, Freq = i*2, Len = i*2+1
+var static_ltree  = new Array((L_CODES+2) * 2);
+zero(static_ltree);
+/* The static literal tree. Since the bit lengths are imposed, there is no
+ * need for the L_CODES extra codes used during heap construction. However
+ * The codes 286 and 287 are needed to build a canonical tree (see _tr_init
+ * below).
+ */
+
+var static_dtree  = new Array(D_CODES * 2);
+zero(static_dtree);
+/* The static distance tree. (Actually a trivial tree since all codes use
+ * 5 bits.)
+ */
+
+var _dist_code    = new Array(DIST_CODE_LEN);
+zero(_dist_code);
+/* Distance codes. The first 256 values correspond to the distances
+ * 3 .. 258, the last 256 values correspond to the top 8 bits of
+ * the 15 bit distances.
+ */
+
+var _length_code  = new Array(MAX_MATCH-MIN_MATCH+1);
+zero(_length_code);
+/* length code for each normalized match length (0 == MIN_MATCH) */
+
+var base_length   = new Array(LENGTH_CODES);
+zero(base_length);
+/* First normalized length for each code (0 = MIN_MATCH) */
+
+var base_dist     = new Array(D_CODES);
+zero(base_dist);
+/* First normalized distance for each code (0 = distance of 1) */
+
+
+var StaticTreeDesc = function (static_tree, extra_bits, extra_base, elems, max_length) {
+
+  this.static_tree  = static_tree;  /* static tree or NULL */
+  this.extra_bits   = extra_bits;   /* extra bits for each code or NULL */
+  this.extra_base   = extra_base;   /* base index for extra_bits */
+  this.elems        = elems;        /* max number of elements in the tree */
+  this.max_length   = max_length;   /* max bit length for the codes */
+
+  // show if `static_tree` has data or dummy - needed for monomorphic objects
+  this.has_stree    = static_tree && static_tree.length;
+};
+
+
+var static_l_desc;
+var static_d_desc;
+var static_bl_desc;
+
+
+var TreeDesc = function(dyn_tree, stat_desc) {
+  this.dyn_tree = dyn_tree;     /* the dynamic tree */
+  this.max_code = 0;            /* largest code with non zero frequency */
+  this.stat_desc = stat_desc;   /* the corresponding static tree */
+};
+
+
+
+function d_code(dist) {
+  return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];
+}
+
+
+/* ===========================================================================
+ * Output a short LSB first on the stream.
+ * IN assertion: there is enough room in pendingBuf.
+ */
+function put_short (s, w) {
+//    put_byte(s, (uch)((w) & 0xff));
+//    put_byte(s, (uch)((ush)(w) >> 8));
+  s.pending_buf[s.pending++] = (w) & 0xff;
+  s.pending_buf[s.pending++] = (w >>> 8) & 0xff;
+}
+
+
+/* ===========================================================================
+ * Send a value on a given number of bits.
+ * IN assertion: length <= 16 and value fits in length bits.
+ */
+function send_bits(s, value, length) {
+  if (s.bi_valid > (Buf_size - length)) {
+    s.bi_buf |= (value << s.bi_valid) & 0xffff;
+    put_short(s, s.bi_buf);
+    s.bi_buf = value >> (Buf_size - s.bi_valid);
+    s.bi_valid += length - Buf_size;
+  } else {
+    s.bi_buf |= (value << s.bi_valid) & 0xffff;
+    s.bi_valid += length;
+  }
+}
+
+
+function send_code(s, c, tree) {
+  send_bits(s, tree[c*2]/*.Code*/, tree[c*2 + 1]/*.Len*/);
+}
+
+
+/* ===========================================================================
+ * Reverse the first len bits of a code, using straightforward code (a faster
+ * method would use a table)
+ * IN assertion: 1 <= len <= 15
+ */
+function bi_reverse(code, len) {
+  var res = 0;
+  do {
+    res |= code & 1;
+    code >>>= 1;
+    res <<= 1;
+  } while (--len > 0);
+  return res >>> 1;
+}
+
+
+/* ===========================================================================
+ * Flush the bit buffer, keeping at most 7 bits in it.
+ */
+function bi_flush(s) {
+  if (s.bi_valid === 16) {
+    put_short(s, s.bi_buf);
+    s.bi_buf = 0;
+    s.bi_valid = 0;
+
+  } else if (s.bi_valid >= 8) {
+    s.pending_buf[s.pending++] = s.bi_buf & 0xff;
+    s.bi_buf >>= 8;
+    s.bi_valid -= 8;
+  }
+}
+
+
+/* ===========================================================================
+ * Compute the optimal bit lengths for a tree and update the total bit length
+ * for the current block.
+ * IN assertion: the fields freq and dad are set, heap[heap_max] and
+ *    above are the tree nodes sorted by increasing frequency.
+ * OUT assertions: the field len is set to the optimal bit length, the
+ *     array bl_count contains the frequencies for each bit length.
+ *     The length opt_len is updated; static_len is also updated if stree is
+ *     not null.
+ */
+function gen_bitlen(s, desc)
+//    deflate_state *s;
+//    tree_desc *desc;    /* the tree descriptor */
+{
+  var tree            = desc.dyn_tree;
+  var max_code        = desc.max_code;
+  var stree           = desc.stat_desc.static_tree;
+  var has_stree       = desc.stat_desc.has_stree;
+  var extra           = desc.stat_desc.extra_bits;
+  var base            = desc.stat_desc.extra_base;
+  var max_length      = desc.stat_desc.max_length;
+  var h;              /* heap index */
+  var n, m;           /* iterate over the tree elements */
+  var bits;           /* bit length */
+  var xbits;          /* extra bits */
+  var f;              /* frequency */
+  var overflow = 0;   /* number of elements with bit length too large */
+
+  for (bits = 0; bits <= MAX_BITS; bits++) {
+    s.bl_count[bits] = 0;
+  }
+
+  /* In a first pass, compute the optimal bit lengths (which may
+   * overflow in the case of the bit length tree).
+   */
+  tree[s.heap[s.heap_max]*2 + 1]/*.Len*/ = 0; /* root of the heap */
+
+  for (h = s.heap_max+1; h < HEAP_SIZE; h++) {
+    n = s.heap[h];
+    bits = tree[tree[n*2 +1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;
+    if (bits > max_length) {
+      bits = max_length;
+      overflow++;
+    }
+    tree[n*2 + 1]/*.Len*/ = bits;
+    /* We overwrite tree[n].Dad which is no longer needed */
+
+    if (n > max_code) { continue; } /* not a leaf node */
+
+    s.bl_count[bits]++;
+    xbits = 0;
+    if (n >= base) {
+      xbits = extra[n-base];
+    }
+    f = tree[n * 2]/*.Freq*/;
+    s.opt_len += f * (bits + xbits);
+    if (has_stree) {
+      s.static_len += f * (stree[n*2 + 1]/*.Len*/ + xbits);
+    }
+  }
+  if (overflow === 0) { return; }
+
+  // Trace((stderr,"\nbit length overflow\n"));
+  /* This happens for example on obj2 and pic of the Calgary corpus */
+
+  /* Find the first bit length which could increase: */
+  do {
+    bits = max_length-1;
+    while (s.bl_count[bits] === 0) { bits--; }
+    s.bl_count[bits]--;      /* move one leaf down the tree */
+    s.bl_count[bits+1] += 2; /* move one overflow item as its brother */
+    s.bl_count[max_length]--;
+    /* The brother of the overflow item also moves one step up,
+     * but this does not affect bl_count[max_length]
+     */
+    overflow -= 2;
+  } while (overflow > 0);
+
+  /* Now recompute all bit lengths, scanning in increasing frequency.
+   * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all
+   * lengths instead of fixing only the wrong ones. This idea is taken
+   * from 'ar' written by Haruhiko Okumura.)
+   */
+  for (bits = max_length; bits !== 0; bits--) {
+    n = s.bl_count[bits];
+    while (n !== 0) {
+      m = s.heap[--h];
+      if (m > max_code) { continue; }
+      if (tree[m*2 + 1]/*.Len*/ !== bits) {
+        // Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits));
+        s.opt_len += (bits - tree[m*2 + 1]/*.Len*/)*tree[m*2]/*.Freq*/;
+        tree[m*2 + 1]/*.Len*/ = bits;
+      }
+      n--;
+    }
+  }
+}
+
+
+/* ===========================================================================
+ * Generate the codes for a given tree and bit counts (which need not be
+ * optimal).
+ * IN assertion: the array bl_count contains the bit length statistics for
+ * the given tree and the field len is set for all tree elements.
+ * OUT assertion: the field code is set for all tree elements of non
+ *     zero code length.
+ */
+function gen_codes(tree, max_code, bl_count)
+//    ct_data *tree;             /* the tree to decorate */
+//    int max_code;              /* largest code with non zero frequency */
+//    ushf *bl_count;            /* number of codes at each bit length */
+{
+  var next_code = new Array(MAX_BITS+1); /* next code value for each bit length */
+  var code = 0;              /* running code value */
+  var bits;                  /* bit index */
+  var n;                     /* code index */
+
+  /* The distribution counts are first used to generate the code values
+   * without bit reversal.
+   */
+  for (bits = 1; bits <= MAX_BITS; bits++) {
+    next_code[bits] = code = (code + bl_count[bits-1]) << 1;
+  }
+  /* Check that the bit counts in bl_count are consistent. The last code
+   * must be all ones.
+   */
+  //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,
+  //        "inconsistent bit counts");
+  //Tracev((stderr,"\ngen_codes: max_code %d ", max_code));
+
+  for (n = 0;  n <= max_code; n++) {
+    var len = tree[n*2 + 1]/*.Len*/;
+    if (len === 0) { continue; }
+    /* Now reverse the bits */
+    tree[n*2]/*.Code*/ = bi_reverse(next_code[len]++, len);
+
+    //Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ",
+    //     n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));
+  }
+}
+
+
+/* ===========================================================================
+ * Initialize the various 'constant' tables.
+ */
+function tr_static_init() {
+  var n;        /* iterates over tree elements */
+  var bits;     /* bit counter */
+  var length;   /* length value */
+  var code;     /* code value */
+  var dist;     /* distance index */
+  var bl_count = new Array(MAX_BITS+1);
+  /* number of codes at each bit length for an optimal tree */
+
+  // do check in _tr_init()
+  //if (static_init_done) return;
+
+  /* For some embedded targets, global variables are not initialized: */
+/*#ifdef NO_INIT_GLOBAL_POINTERS
+  static_l_desc.static_tree = static_ltree;
+  static_l_desc.extra_bits = extra_lbits;
+  static_d_desc.static_tree = static_dtree;
+  static_d_desc.extra_bits = extra_dbits;
+  static_bl_desc.extra_bits = extra_blbits;
+#endif*/
+
+  /* Initialize the mapping length (0..255) -> length code (0..28) */
+  length = 0;
+  for (code = 0; code < LENGTH_CODES-1; code++) {
+    base_length[code] = length;
+    for (n = 0; n < (1<<extra_lbits[code]); n++) {
+      _length_code[length++] = code;
+    }
+  }
+  //Assert (length == 256, "tr_static_init: length != 256");
+  /* Note that the length 255 (match length 258) can be represented
+   * in two different ways: code 284 + 5 bits or code 285, so we
+   * overwrite length_code[255] to use the best encoding:
+   */
+  _length_code[length-1] = code;
+
+  /* Initialize the mapping dist (0..32K) -> dist code (0..29) */
+  dist = 0;
+  for (code = 0 ; code < 16; code++) {
+    base_dist[code] = dist;
+    for (n = 0; n < (1<<extra_dbits[code]); n++) {
+      _dist_code[dist++] = code;
+    }
+  }
+  //Assert (dist == 256, "tr_static_init: dist != 256");
+  dist >>= 7; /* from now on, all distances are divided by 128 */
+  for ( ; code < D_CODES; code++) {
+    base_dist[code] = dist << 7;
+    for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) {
+      _dist_code[256 + dist++] = code;
+    }
+  }
+  //Assert (dist == 256, "tr_static_init: 256+dist != 512");
+
+  /* Construct the codes of the static literal tree */
+  for (bits = 0; bits <= MAX_BITS; bits++) {
+    bl_count[bits] = 0;
+  }
+
+  n = 0;
+  while (n <= 143) {
+    static_ltree[n*2 + 1]/*.Len*/ = 8;
+    n++;
+    bl_count[8]++;
+  }
+  while (n <= 255) {
+    static_ltree[n*2 + 1]/*.Len*/ = 9;
+    n++;
+    bl_count[9]++;
+  }
+  while (n <= 279) {
+    static_ltree[n*2 + 1]/*.Len*/ = 7;
+    n++;
+    bl_count[7]++;
+  }
+  while (n <= 287) {
+    static_ltree[n*2 + 1]/*.Len*/ = 8;
+    n++;
+    bl_count[8]++;
+  }
+  /* Codes 286 and 287 do not exist, but we must include them in the
+   * tree construction to get a canonical Huffman tree (longest code
+   * all ones)
+   */
+  gen_codes(static_ltree, L_CODES+1, bl_count);
+
+  /* The static distance tree is trivial: */
+  for (n = 0; n < D_CODES; n++) {
+    static_dtree[n*2 + 1]/*.Len*/ = 5;
+    static_dtree[n*2]/*.Code*/ = bi_reverse(n, 5);
+  }
+
+  // Now data ready and we can init static trees
+  static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS);
+  static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0,          D_CODES, MAX_BITS);
+  static_bl_desc =new StaticTreeDesc(new Array(0), extra_blbits, 0,         BL_CODES, MAX_BL_BITS);
+
+  //static_init_done = true;
+}
+
+
+/* ===========================================================================
+ * Initialize a new block.
+ */
+function init_block(s) {
+  var n; /* iterates over tree elements */
+
+  /* Initialize the trees. */
+  for (n = 0; n < L_CODES;  n++) { s.dyn_ltree[n*2]/*.Freq*/ = 0; }
+  for (n = 0; n < D_CODES;  n++) { s.dyn_dtree[n*2]/*.Freq*/ = 0; }
+  for (n = 0; n < BL_CODES; n++) { s.bl_tree[n*2]/*.Freq*/ = 0; }
+
+  s.dyn_ltree[END_BLOCK*2]/*.Freq*/ = 1;
+  s.opt_len = s.static_len = 0;
+  s.last_lit = s.matches = 0;
+}
+
+
+/* ===========================================================================
+ * Flush the bit buffer and align the output on a byte boundary
+ */
+function bi_windup(s)
+{
+  if (s.bi_valid > 8) {
+    put_short(s, s.bi_buf);
+  } else if (s.bi_valid > 0) {
+    //put_byte(s, (Byte)s->bi_buf);
+    s.pending_buf[s.pending++] = s.bi_buf;
+  }
+  s.bi_buf = 0;
+  s.bi_valid = 0;
+}
+
+/* ===========================================================================
+ * Copy a stored block, storing first the length and its
+ * one's complement if requested.
+ */
+function copy_block(s, buf, len, header)
+//DeflateState *s;
+//charf    *buf;    /* the input data */
+//unsigned len;     /* its length */
+//int      header;  /* true if block header must be written */
+{
+  bi_windup(s);        /* align on byte boundary */
+
+  if (header) {
+    put_short(s, len);
+    put_short(s, ~len);
+  }
+//  while (len--) {
+//    put_byte(s, *buf++);
+//  }
+  utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);
+  s.pending += len;
+}
+
+/* ===========================================================================
+ * Compares to subtrees, using the tree depth as tie breaker when
+ * the subtrees have equal frequency. This minimizes the worst case length.
+ */
+function smaller(tree, n, m, depth) {
+  var _n2 = n*2;
+  var _m2 = m*2;
+  return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||
+         (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));
+}
+
+/* ===========================================================================
+ * Restore the heap property by moving down the tree starting at node k,
+ * exchanging a node with the smallest of its two sons if necessary, stopping
+ * when the heap property is re-established (each father smaller than its
+ * two sons).
+ */
+function pqdownheap(s, tree, k)
+//    deflate_state *s;
+//    ct_data *tree;  /* the tree to restore */
+//    int k;               /* node to move down */
+{
+  var v = s.heap[k];
+  var j = k << 1;  /* left son of k */
+  while (j <= s.heap_len) {
+    /* Set j to the smallest of the two sons: */
+    if (j < s.heap_len &&
+      smaller(tree, s.heap[j+1], s.heap[j], s.depth)) {
+      j++;
+    }
+    /* Exit if v is smaller than both sons */
+    if (smaller(tree, v, s.heap[j], s.depth)) { break; }
+
+    /* Exchange v with the smallest son */
+    s.heap[k] = s.heap[j];
+    k = j;
+
+    /* And continue down the tree, setting j to the left son of k */
+    j <<= 1;
+  }
+  s.heap[k] = v;
+}
+
+
+// inlined manually
+// var SMALLEST = 1;
+
+/* ===========================================================================
+ * Send the block data compressed using the given Huffman trees
+ */
+function compress_block(s, ltree, dtree)
+//    deflate_state *s;
+//    const ct_data *ltree; /* literal tree */
+//    const ct_data *dtree; /* distance tree */
+{
+  var dist;           /* distance of matched string */
+  var lc;             /* match length or unmatched char (if dist == 0) */
+  var lx = 0;         /* running index in l_buf */
+  var code;           /* the code to send */
+  var extra;          /* number of extra bits to send */
+
+  if (s.last_lit !== 0) {
+    do {
+      dist = (s.pending_buf[s.d_buf + lx*2] << 8) | (s.pending_buf[s.d_buf + lx*2 + 1]);
+      lc = s.pending_buf[s.l_buf + lx];
+      lx++;
+
+      if (dist === 0) {
+        send_code(s, lc, ltree); /* send a literal byte */
+        //Tracecv(isgraph(lc), (stderr," '%c' ", lc));
+      } else {
+        /* Here, lc is the match length - MIN_MATCH */
+        code = _length_code[lc];
+        send_code(s, code+LITERALS+1, ltree); /* send the length code */
+        extra = extra_lbits[code];
+        if (extra !== 0) {
+          lc -= base_length[code];
+          send_bits(s, lc, extra);       /* send the extra length bits */
+        }
+        dist--; /* dist is now the match distance - 1 */
+        code = d_code(dist);
+        //Assert (code < D_CODES, "bad d_code");
+
+        send_code(s, code, dtree);       /* send the distance code */
+        extra = extra_dbits[code];
+        if (extra !== 0) {
+          dist -= base_dist[code];
+          send_bits(s, dist, extra);   /* send the extra distance bits */
+        }
+      } /* literal or match pair ? */
+
+      /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
+      //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,
+      //       "pendingBuf overflow");
+
+    } while (lx < s.last_lit);
+  }
+
+  send_code(s, END_BLOCK, ltree);
+}
+
+
+/* ===========================================================================
+ * Construct one Huffman tree and assigns the code bit strings and lengths.
+ * Update the total bit length for the current block.
+ * IN assertion: the field freq is set for all tree elements.
+ * OUT assertions: the fields len and code are set to the optimal bit length
+ *     and corresponding code. The length opt_len is updated; static_len is
+ *     also updated if stree is not null. The field max_code is set.
+ */
+function build_tree(s, desc)
+//    deflate_state *s;
+//    tree_desc *desc; /* the tree descriptor */
+{
+  var tree     = desc.dyn_tree;
+  var stree    = desc.stat_desc.static_tree;
+  var has_stree = desc.stat_desc.has_stree;
+  var elems    = desc.stat_desc.elems;
+  var n, m;          /* iterate over heap elements */
+  var max_code = -1; /* largest code with non zero frequency */
+  var node;          /* new node being created */
+
+  /* Construct the initial heap, with least frequent element in
+   * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
+   * heap[0] is not used.
+   */
+  s.heap_len = 0;
+  s.heap_max = HEAP_SIZE;
+
+  for (n = 0; n < elems; n++) {
+    if (tree[n * 2]/*.Freq*/ !== 0) {
+      s.heap[++s.heap_len] = max_code = n;
+      s.depth[n] = 0;
+
+    } else {
+      tree[n*2 + 1]/*.Len*/ = 0;
+    }
+  }
+
+  /* The pkzip format requires that at least one distance code exists,
+   * and that at least one bit should be sent even if there is only one
+   * possible code. So to avoid special checks later on we force at least
+   * two codes of non zero frequency.
+   */
+  while (s.heap_len < 2) {
+    node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);
+    tree[node * 2]/*.Freq*/ = 1;
+    s.depth[node] = 0;
+    s.opt_len--;
+
+    if (has_stree) {
+      s.static_len -= stree[node*2 + 1]/*.Len*/;
+    }
+    /* node is 0 or 1 so it does not have extra bits */
+  }
+  desc.max_code = max_code;
+
+  /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,
+   * establish sub-heaps of increasing lengths:
+   */
+  for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }
+
+  /* Construct the Huffman tree by repeatedly combining the least two
+   * frequent nodes.
+   */
+  node = elems;              /* next internal node of the tree */
+  do {
+    //pqremove(s, tree, n);  /* n = node of least frequency */
+    /*** pqremove ***/
+    n = s.heap[1/*SMALLEST*/];
+    s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];
+    pqdownheap(s, tree, 1/*SMALLEST*/);
+    /***/
+
+    m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */
+
+    s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */
+    s.heap[--s.heap_max] = m;
+
+    /* Create a new node father of n and m */
+    tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;
+    s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;
+    tree[n*2 + 1]/*.Dad*/ = tree[m*2 + 1]/*.Dad*/ = node;
+
+    /* and insert the new node in the heap */
+    s.heap[1/*SMALLEST*/] = node++;
+    pqdownheap(s, tree, 1/*SMALLEST*/);
+
+  } while (s.heap_len >= 2);
+
+  s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];
+
+  /* At this point, the fields freq and dad are set. We can now
+   * generate the bit lengths.
+   */
+  gen_bitlen(s, desc);
+
+  /* The field len is now set, we can generate the bit codes */
+  gen_codes(tree, max_code, s.bl_count);
+}
+
+
+/* ===========================================================================
+ * Scan a literal or distance tree to determine the frequencies of the codes
+ * in the bit length tree.
+ */
+function scan_tree(s, tree, max_code)
+//    deflate_state *s;
+//    ct_data *tree;   /* the tree to be scanned */
+//    int max_code;    /* and its largest code of non zero frequency */
+{
+  var n;                     /* iterates over all tree elements */
+  var prevlen = -1;          /* last emitted length */
+  var curlen;                /* length of current code */
+
+  var nextlen = tree[0*2 + 1]/*.Len*/; /* length of next code */
+
+  var count = 0;             /* repeat count of the current code */
+  var max_count = 7;         /* max repeat count */
+  var min_count = 4;         /* min repeat count */
+
+  if (nextlen === 0) {
+    max_count = 138;
+    min_count = 3;
+  }
+  tree[(max_code+1)*2 + 1]/*.Len*/ = 0xffff; /* guard */
+
+  for (n = 0; n <= max_code; n++) {
+    curlen = nextlen;
+    nextlen = tree[(n+1)*2 + 1]/*.Len*/;
+
+    if (++count < max_count && curlen === nextlen) {
+      continue;
+
+    } else if (count < min_count) {
+      s.bl_tree[curlen * 2]/*.Freq*/ += count;
+
+    } else if (curlen !== 0) {
+
+      if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }
+      s.bl_tree[REP_3_6*2]/*.Freq*/++;
+
+    } else if (count <= 10) {
+      s.bl_tree[REPZ_3_10*2]/*.Freq*/++;
+
+    } else {
+      s.bl_tree[REPZ_11_138*2]/*.Freq*/++;
+    }
+
+    count = 0;
+    prevlen = curlen;
+
+    if (nextlen === 0) {
+      max_count = 138;
+      min_count = 3;
+
+    } else if (curlen === nextlen) {
+      max_count = 6;
+      min_count = 3;
+
+    } else {
+      max_count = 7;
+      min_count = 4;
+    }
+  }
+}
+
+
+/* ===========================================================================
+ * Send a literal or distance tree in compressed form, using the codes in
+ * bl_tree.
+ */
+function send_tree(s, tree, max_code)
+//    deflate_state *s;
+//    ct_data *tree; /* the tree to be scanned */
+//    int max_code;       /* and its largest code of non zero frequency */
+{
+  var n;                     /* iterates over all tree elements */
+  var prevlen = -1;          /* last emitted length */
+  var curlen;                /* length of current code */
+
+  var nextlen = tree[0*2 + 1]/*.Len*/; /* length of next code */
+
+  var count = 0;             /* repeat count of the current code */
+  var max_count = 7;         /* max repeat count */
+  var min_count = 4;         /* min repeat count */
+
+  /* tree[max_code+1].Len = -1; */  /* guard already set */
+  if (nextlen === 0) {
+    max_count = 138;
+    min_count = 3;
+  }
+
+  for (n = 0; n <= max_code; n++) {
+    curlen = nextlen;
+    nextlen = tree[(n+1)*2 + 1]/*.Len*/;
+
+    if (++count < max_count && curlen === nextlen) {
+      continue;
+
+    } else if (count < min_count) {
+      do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);
+
+    } else if (curlen !== 0) {
+      if (curlen !== prevlen) {
+        send_code(s, curlen, s.bl_tree);
+        count--;
+      }
+      //Assert(count >= 3 && count <= 6, " 3_6?");
+      send_code(s, REP_3_6, s.bl_tree);
+      send_bits(s, count-3, 2);
+
+    } else if (count <= 10) {
+      send_code(s, REPZ_3_10, s.bl_tree);
+      send_bits(s, count-3, 3);
+
+    } else {
+      send_code(s, REPZ_11_138, s.bl_tree);
+      send_bits(s, count-11, 7);
+    }
+
+    count = 0;
+    prevlen = curlen;
+    if (nextlen === 0) {
+      max_count = 138;
+      min_count = 3;
+
+    } else if (curlen === nextlen) {
+      max_count = 6;
+      min_count = 3;
+
+    } else {
+      max_count = 7;
+      min_count = 4;
+    }
+  }
+}
+
+
+/* ===========================================================================
+ * Construct the Huffman tree for the bit lengths and return the index in
+ * bl_order of the last bit length code to send.
+ */
+function build_bl_tree(s) {
+  var max_blindex;  /* index of last bit length code of non zero freq */
+
+  /* Determine the bit length frequencies for literal and distance trees */
+  scan_tree(s, s.dyn_ltree, s.l_desc.max_code);
+  scan_tree(s, s.dyn_dtree, s.d_desc.max_code);
+
+  /* Build the bit length tree: */
+  build_tree(s, s.bl_desc);
+  /* opt_len now includes the length of the tree representations, except
+   * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
+   */
+
+  /* Determine the number of bit length codes to send. The pkzip format
+   * requires that at least 4 bit length codes be sent. (appnote.txt says
+   * 3 but the actual value used is 4.)
+   */
+  for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) {
+    if (s.bl_tree[bl_order[max_blindex]*2 + 1]/*.Len*/ !== 0) {
+      break;
+    }
+  }
+  /* Update opt_len to include the bit length tree and counts */
+  s.opt_len += 3*(max_blindex+1) + 5+5+4;
+  //Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld",
+  //        s->opt_len, s->static_len));
+
+  return max_blindex;
+}
+
+
+/* ===========================================================================
+ * Send the header for a block using dynamic Huffman trees: the counts, the
+ * lengths of the bit length codes, the literal tree and the distance tree.
+ * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
+ */
+function send_all_trees(s, lcodes, dcodes, blcodes)
+//    deflate_state *s;
+//    int lcodes, dcodes, blcodes; /* number of codes for each tree */
+{
+  var rank;                    /* index in bl_order */
+
+  //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes");
+  //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,
+  //        "too many codes");
+  //Tracev((stderr, "\nbl counts: "));
+  send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */
+  send_bits(s, dcodes-1,   5);
+  send_bits(s, blcodes-4,  4); /* not -3 as stated in appnote.txt */
+  for (rank = 0; rank < blcodes; rank++) {
+    //Tracev((stderr, "\nbl code %2d ", bl_order[rank]));
+    send_bits(s, s.bl_tree[bl_order[rank]*2 + 1]/*.Len*/, 3);
+  }
+  //Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent));
+
+  send_tree(s, s.dyn_ltree, lcodes-1); /* literal tree */
+  //Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent));
+
+  send_tree(s, s.dyn_dtree, dcodes-1); /* distance tree */
+  //Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent));
+}
+
+
+/* ===========================================================================
+ * Check if the data type is TEXT or BINARY, using the following algorithm:
+ * - TEXT if the two conditions below are satisfied:
+ *    a) There are no non-portable control characters belonging to the
+ *       "black list" (0..6, 14..25, 28..31).
+ *    b) There is at least one printable character belonging to the
+ *       "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).
+ * - BINARY otherwise.
+ * - The following partially-portable control characters form a
+ *   "gray list" that is ignored in this detection algorithm:
+ *   (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).
+ * IN assertion: the fields Freq of dyn_ltree are set.
+ */
+function detect_data_type(s) {
+  /* black_mask is the bit mask of black-listed bytes
+   * set bits 0..6, 14..25, and 28..31
+   * 0xf3ffc07f = binary 11110011111111111100000001111111
+   */
+  var black_mask = 0xf3ffc07f;
+  var n;
+
+  /* Check for non-textual ("black-listed") bytes. */
+  for (n = 0; n <= 31; n++, black_mask >>>= 1) {
+    if ((black_mask & 1) && (s.dyn_ltree[n*2]/*.Freq*/ !== 0)) {
+      return Z_BINARY;
+    }
+  }
+
+  /* Check for textual ("white-listed") bytes. */
+  if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||
+      s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {
+    return Z_TEXT;
+  }
+  for (n = 32; n < LITERALS; n++) {
+    if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {
+      return Z_TEXT;
+    }
+  }
+
+  /* There are no "black-listed" or "white-listed" bytes:
+   * this stream either is empty or has tolerated ("gray-listed") bytes only.
+   */
+  return Z_BINARY;
+}
+
+
+var static_init_done = false;
+
+/* ===========================================================================
+ * Initialize the tree data structures for a new zlib stream.
+ */
+function _tr_init(s)
+{
+
+  if (!static_init_done) {
+    tr_static_init();
+    static_init_done = true;
+  }
+
+  s.l_desc  = new TreeDesc(s.dyn_ltree, static_l_desc);
+  s.d_desc  = new TreeDesc(s.dyn_dtree, static_d_desc);
+  s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);
+
+  s.bi_buf = 0;
+  s.bi_valid = 0;
+
+  /* Initialize the first block of the first file: */
+  init_block(s);
+}
+
+
+/* ===========================================================================
+ * Send a stored block
+ */
+function _tr_stored_block(s, buf, stored_len, last)
+//DeflateState *s;
+//charf *buf;       /* input block */
+//ulg stored_len;   /* length of input block */
+//int last;         /* one if this is the last block for a file */
+{
+  send_bits(s, (STORED_BLOCK<<1)+(last ? 1 : 0), 3);    /* send block type */
+  copy_block(s, buf, stored_len, true); /* with header */
+}
+
+
+/* ===========================================================================
+ * Send one empty static block to give enough lookahead for inflate.
+ * This takes 10 bits, of which 7 may remain in the bit buffer.
+ */
+function _tr_align(s) {
+  send_bits(s, STATIC_TREES<<1, 3);
+  send_code(s, END_BLOCK, static_ltree);
+  bi_flush(s);
+}
+
+
+/* ===========================================================================
+ * Determine the best encoding for the current block: dynamic trees, static
+ * trees or store, and output the encoded block to the zip file.
+ */
+function _tr_flush_block(s, buf, stored_len, last)
+//DeflateState *s;
+//charf *buf;       /* input block, or NULL if too old */
+//ulg stored_len;   /* length of input block */
+//int last;         /* one if this is the last block for a file */
+{
+  var opt_lenb, static_lenb;  /* opt_len and static_len in bytes */
+  var max_blindex = 0;        /* index of last bit length code of non zero freq */
+
+  /* Build the Huffman trees unless a stored block is forced */
+  if (s.level > 0) {
+
+    /* Check if the file is binary or text */
+    if (s.strm.data_type === Z_UNKNOWN) {
+      s.strm.data_type = detect_data_type(s);
+    }
+
+    /* Construct the literal and distance trees */
+    build_tree(s, s.l_desc);
+    // Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len,
+    //        s->static_len));
+
+    build_tree(s, s.d_desc);
+    // Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len,
+    //        s->static_len));
+    /* At this point, opt_len and static_len are the total bit lengths of
+     * the compressed block data, excluding the tree representations.
+     */
+
+    /* Build the bit length tree for the above two trees, and get the index
+     * in bl_order of the last bit length code to send.
+     */
+    max_blindex = build_bl_tree(s);
+
+    /* Determine the best encoding. Compute the block lengths in bytes. */
+    opt_lenb = (s.opt_len+3+7) >>> 3;
+    static_lenb = (s.static_len+3+7) >>> 3;
+
+    // Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
+    //        opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
+    //        s->last_lit));
+
+    if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }
+
+  } else {
+    // Assert(buf != (char*)0, "lost buf");
+    opt_lenb = static_lenb = stored_len + 5; /* force a stored block */
+  }
+
+  if ((stored_len+4 <= opt_lenb) && (buf !== -1)) {
+    /* 4: two words for the lengths */
+
+    /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
+     * Otherwise we can't have processed more than WSIZE input bytes since
+     * the last block flush, because compression would have been
+     * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
+     * transform a block into a stored block.
+     */
+    _tr_stored_block(s, buf, stored_len, last);
+
+  } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {
+
+    send_bits(s, (STATIC_TREES<<1) + (last ? 1 : 0), 3);
+    compress_block(s, static_ltree, static_dtree);
+
+  } else {
+    send_bits(s, (DYN_TREES<<1) + (last ? 1 : 0), 3);
+    send_all_trees(s, s.l_desc.max_code+1, s.d_desc.max_code+1, max_blindex+1);
+    compress_block(s, s.dyn_ltree, s.dyn_dtree);
+  }
+  // Assert (s->compressed_len == s->bits_sent, "bad compressed size");
+  /* The above check is made mod 2^32, for files larger than 512 MB
+   * and uLong implemented on 32 bits.
+   */
+  init_block(s);
+
+  if (last) {
+    bi_windup(s);
+  }
+  // Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3,
+  //       s->compressed_len-7*last));
+}
+
+/* ===========================================================================
+ * Save the match info and tally the frequency counts. Return true if
+ * the current block must be flushed.
+ */
+function _tr_tally(s, dist, lc)
+//    deflate_state *s;
+//    unsigned dist;  /* distance of matched string */
+//    unsigned lc;    /* match length-MIN_MATCH or unmatched char (if dist==0) */
+{
+  //var out_length, in_length, dcode;
+
+  s.pending_buf[s.d_buf + s.last_lit * 2]     = (dist >>> 8) & 0xff;
+  s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;
+
+  s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;
+  s.last_lit++;
+
+  if (dist === 0) {
+    /* lc is the unmatched char */
+    s.dyn_ltree[lc*2]/*.Freq*/++;
+  } else {
+    s.matches++;
+    /* Here, lc is the match length - MIN_MATCH */
+    dist--;             /* dist = match distance - 1 */
+    //Assert((ush)dist < (ush)MAX_DIST(s) &&
+    //       (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&
+    //       (ush)d_code(dist) < (ush)D_CODES,  "_tr_tally: bad match");
+
+    s.dyn_ltree[(_length_code[lc]+LITERALS+1) * 2]/*.Freq*/++;
+    s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;
+  }
+
+// (!) This block is disabled in zlib defailts,
+// don't enable it for binary compatibility
+
+//#ifdef TRUNCATE_BLOCK
+//  /* Try to guess if it is profitable to stop the current block here */
+//  if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {
+//    /* Compute an upper bound for the compressed length */
+//    out_length = s.last_lit*8;
+//    in_length = s.strstart - s.block_start;
+//
+//    for (dcode = 0; dcode < D_CODES; dcode++) {
+//      out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);
+//    }
+//    out_length >>>= 3;
+//    //Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ",
+//    //       s->last_lit, in_length, out_length,
+//    //       100L - out_length*100L/in_length));
+//    if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {
+//      return true;
+//    }
+//  }
+//#endif
+
+  return (s.last_lit === s.lit_bufsize-1);
+  /* We avoid equality with lit_bufsize because of wraparound at 64K
+   * on 16 bit machines and because stored blocks are restricted to
+   * 64K-1 bytes.
+   */
+}
+
+exports._tr_init  = _tr_init;
+exports._tr_stored_block = _tr_stored_block;
+exports._tr_flush_block  = _tr_flush_block;
+exports._tr_tally = _tr_tally;
+exports._tr_align = _tr_align;
+},{"../utils/common":27}],39:[function(_dereq_,module,exports){
+'use strict';
+
+
+function ZStream() {
+  /* next input byte */
+  this.input = null; // JS specific, because we have no pointers
+  this.next_in = 0;
+  /* number of bytes available at input */
+  this.avail_in = 0;
+  /* total number of input bytes read so far */
+  this.total_in = 0;
+  /* next output byte should be put there */
+  this.output = null; // JS specific, because we have no pointers
+  this.next_out = 0;
+  /* remaining free space at output */
+  this.avail_out = 0;
+  /* total number of bytes output so far */
+  this.total_out = 0;
+  /* last error message, NULL if no error */
+  this.msg = ''/*Z_NULL*/;
+  /* not visible by applications */
+  this.state = null;
+  /* best guess about the data type: binary or text */
+  this.data_type = 2/*Z_UNKNOWN*/;
+  /* adler32 value of the uncompressed data */
+  this.adler = 0;
+}
+
+module.exports = ZStream;
+},{}]},{},[9])
+(9)
+});
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/dist/ods.js b/Source/UBCS-WEB/src/config/js-xlsx-master/dist/ods.js
new file mode 100644
index 0000000..9d498b0
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/dist/ods.js
@@ -0,0 +1,414 @@
+/* ods.js (C) 2014 SheetJS -- http://sheetjs.com */
+/* vim: set ts=2: */
+/*jshint -W041 */
+var ODS = {};
+(function make_ods(ODS) {
+/* Open Document Format for Office Applications (OpenDocument) Version 1.2 */
+var get_utils = function() {
+	if(typeof XLSX !== 'undefined') return XLSX.utils;
+	if(typeof module !== "undefined" && typeof require !== 'undefined') try {
+		return require('../' + 'xlsx').utils;
+	} catch(e) {
+		try { return require('./' + 'xlsx').utils; }
+		catch(ee) { return require('xl' + 'sx').utils; }
+	}
+	throw new Error("Cannot find XLSX utils");
+};
+var has_buf = (typeof Buffer !== 'undefined');
+
+function cc2str(arr) {
+	var o = "";
+	for(var i = 0; i != arr.length; ++i) o += String.fromCharCode(arr[i]);
+	return o;
+}
+function getdata(data) {
+	if(!data) return null;
+	if(data.data) return data.data;
+	if(data.asNodeBuffer && has_buf) return data.asNodeBuffer().toString('binary');
+	if(data.asBinary) return data.asBinary();
+	if(data._data && data._data.getContent) return cc2str(Array.prototype.slice.call(data._data.getContent(),0));
+	return null;
+}
+
+function safegetzipfile(zip, file) {
+	var f = file; if(zip.files[f]) return zip.files[f];
+	f = file.toLowerCase(); if(zip.files[f]) return zip.files[f];
+	f = f.replace(/\//g,'\\'); if(zip.files[f]) return zip.files[f];
+	return null;
+}
+
+function getzipfile(zip, file) {
+	var o = safegetzipfile(zip, file);
+	if(o == null) throw new Error("Cannot find file " + file + " in zip");
+	return o;
+}
+
+function getzipdata(zip, file, safe) {
+	if(!safe) return getdata(getzipfile(zip, file));
+	if(!file) return null;
+	try { return getzipdata(zip, file); } catch(e) { return null; }
+}
+
+var _fs, jszip;
+if(typeof JSZip !== 'undefined') jszip = JSZip;
+if (typeof exports !== 'undefined') {
+	if (typeof module !== 'undefined' && module.exports) {
+		if(has_buf && typeof jszip === 'undefined') jszip = require('js'+'zip');
+		if(typeof jszip === 'undefined') jszip = require('./js'+'zip').JSZip;
+		_fs = require('f'+'s');
+	}
+}
+var attregexg=/\b[\w:-]+=["'][^"]*['"]/g;
+var tagregex=/<[^>]*>/g;
+var nsregex=/<\w*:/, nsregex2 = /<(\/?)\w+:/;
+function parsexmltag(tag, skip_root) {
+	var z = [];
+	var eq = 0, c = 0;
+	for(; eq !== tag.length; ++eq) if((c = tag.charCodeAt(eq)) === 32 || c === 10 || c === 13) break;
+	if(!skip_root) z[0] = tag.substr(0, eq);
+	if(eq === tag.length) return z;
+	var m = tag.match(attregexg), j=0, w="", v="", i=0, q="", cc="";
+	if(m) for(i = 0; i != m.length; ++i) {
+		cc = m[i];
+		for(c=0; c != cc.length; ++c) if(cc.charCodeAt(c) === 61) break;
+		q = cc.substr(0,c); v = cc.substring(c+2, cc.length-1);
+		for(j=0;j!=q.length;++j) if(q.charCodeAt(j) === 58) break;
+		if(j===q.length) z[q] = v;
+		else z[(j===5 && q.substr(0,5)==="xmlns"?"xmlns":"")+q.substr(j+1)] = v;
+	}
+	return z;
+}
+function strip_ns(x) { return x.replace(nsregex2, "<$1"); }
+
+var encodings = {
+	'&quot;': '"',
+	'&apos;': "'",
+	'&gt;': '>',
+	'&lt;': '<',
+	'&amp;': '&'
+};
+var rencoding = {
+	'"': '&quot;',
+	"'": '&apos;',
+	'>': '&gt;',
+	'<': '&lt;',
+	'&': '&amp;'
+};
+var rencstr = "&<>'\"".split("");
+
+// TODO: CP remap (need to read file version to determine OS)
+var encregex = /&[a-z]*;/g, coderegex = /_x([\da-fA-F]+)_/g;
+function unescapexml(text){
+	var s = text + '';
+	return s.replace(encregex, function($$) { return encodings[$$]; }).replace(coderegex,function(m,c) {return String.fromCharCode(parseInt(c,16));});
+}
+var decregex=/[&<>'"]/g, charegex = /[\u0000-\u0008\u000b-\u001f]/g;
+function escapexml(text){
+	var s = text + '';
+	return s.replace(decregex, function(y) { return rencoding[y]; }).replace(charegex,function(s) { return "_x" + ("000"+s.charCodeAt(0).toString(16)).substr(-4) + "_";});
+}
+
+function parsexmlbool(value, tag) {
+	switch(value) {
+		case '1': case 'true': case 'TRUE': return true;
+		/* case '0': case 'false': case 'FALSE':*/
+		default: return false;
+	}
+}
+
+function datenum(v) {
+	var epoch = Date.parse(v);
+	return (epoch + 2209161600000) / (24 * 60 * 60 * 1000);
+}
+
+/* ISO 8601 Duration */
+function parse_isodur(s) {
+	var sec = 0, mt = 0, time = false;
+	var m = s.match(/P([0-9\.]+Y)?([0-9\.]+M)?([0-9\.]+D)?T([0-9\.]+H)?([0-9\.]+M)?([0-9\.]+S)?/);
+	if(!m) throw new Error("|" + s + "| is not an ISO8601 Duration");
+	for(var i = 1; i != m.length; ++i) {
+		if(!m[i]) continue;
+		mt = 1;
+		if(i > 3) time = true;
+		switch(m[i].substr(m[i].length-1)) {
+			case 'Y':
+				throw new Error("Unsupported ISO Duration Field: " + m[i].substr(m[i].length-1));
+			case 'D': mt *= 24;
+				/* falls through */
+			case 'H': mt *= 60;
+				/* falls through */
+			case 'M':
+				if(!time) throw new Error("Unsupported ISO Duration Field: M");
+				else mt *= 60;
+				/* falls through */
+			case 'S': break;
+		}
+		sec += mt * parseInt(m[i], 10);
+	}
+	return sec;
+}
+/* copied from js-xls (C) SheetJS Apache2 license */
+function xlml_normalize(d) {
+	if(has_buf && Buffer.isBuffer(d)) return d.toString('utf8');
+	if(typeof d === 'string') return d;
+	throw "badf";
+}
+
+var xlmlregex = /<(\/?)([a-z0-9]*:|)([\w-]+)[^>]*>/mg;
+/* Part 3 Section 4 Manifest File */
+var CT_ODS = "application/vnd.oasis.opendocument.spreadsheet";
+var parse_manifest = function(d, opts) {
+	var str = xlml_normalize(d);
+	var Rn;
+	var FEtag;
+	while((Rn = xlmlregex.exec(str))) switch(Rn[3]) {
+		case 'manifest': break; // 4.2 <manifest:manifest>
+		case 'file-entry': // 4.3 <manifest:file-entry>
+			FEtag = parsexmltag(Rn[0]);
+			if(FEtag.path == '/' && FEtag.type !== CT_ODS) throw new Error("This OpenDocument is not a spreadsheet");
+			break;
+		case 'encryption-data': // 4.4 <manifest:encryption-data>
+		case 'algorithm': // 4.5 <manifest:algorithm>
+		case 'start-key-generation': // 4.6 <manifest:start-key-generation>
+		case 'key-derivation': // 4.7 <manifest:key-derivation>
+			throw new Error("Unsupported ODS Encryption");
+		default: throw Rn;
+	}
+};
+var parse_text_p = function(text, tag) {
+	return utf8read(text.replace(/<text:s\/>/g," ").replace(/<[^>]*>/g,""));
+};
+
+var utf8read = function utf8reada(orig) {
+	var out = "", i = 0, c = 0, d = 0, e = 0, f = 0, w = 0;
+	while (i < orig.length) {
+		c = orig.charCodeAt(i++);
+		if (c < 128) { out += String.fromCharCode(c); continue; }
+		d = orig.charCodeAt(i++);
+		if (c>191 && c<224) { out += String.fromCharCode(((c & 31) << 6) | (d & 63)); continue; }
+		e = orig.charCodeAt(i++);
+		if (c < 240) { out += String.fromCharCode(((c & 15) << 12) | ((d & 63) << 6) | (e & 63)); continue; }
+		f = orig.charCodeAt(i++);
+		w = (((c & 7) << 18) | ((d & 63) << 12) | ((e & 63) << 6) | (f & 63))-65536;
+		out += String.fromCharCode(0xD800 + ((w>>>10)&1023));
+		out += String.fromCharCode(0xDC00 + (w&1023));
+	}
+	return out;
+};
+var parse_content_xml = (function() {
+
+	var number_formats = {
+		/* ods name: [short ssf fmt, long ssf fmt] */
+		day: ["d", "dd"],
+		month: ["m", "mm"],
+		year: ["y", "yy"],
+		hours: ["h", "hh"],
+		minutes: ["m", "mm"],
+		seconds: ["s", "ss"],
+		"am-pm": ["A/P", "AM/PM"],
+		"day-of-week": ["ddd", "dddd"]
+	};
+
+	return function pcx(d, opts) {
+		var str = xlml_normalize(d);
+		var state = [], tmp;
+		var tag;
+		var NFtag, NF, pidx;
+		var sheetag;
+		var Sheets = {}, SheetNames = [], ws = {};
+		var Rn, q;
+		var ctag;
+		var textp, textpidx, textptag;
+		var R, C, range = {s: {r:1000000,c:10000000}, e: {r:0, c:0}};
+		var number_format_map = {};
+		var merges = [], mrange = {}, mR = 0, mC = 0;
+
+		while((Rn = xlmlregex.exec(str))) switch(Rn[3]) {
+
+			case 'table': // 9.1.2 <table:table>
+				if(Rn[1]==='/') {
+					if(range.e.c >= range.s.c && range.e.r >= range.s.r) ws['!ref'] = get_utils().encode_range(range);
+					if(merges.length) ws['!merges'] = merges;
+					SheetNames.push(sheetag.name);
+					Sheets[sheetag.name] = ws;
+				}
+				else if(Rn[0].charAt(Rn[0].length-2) !== '/') {
+					sheetag = parsexmltag(Rn[0]);
+					R = C = -1;
+					range.s.r = range.s.c = 10000000; range.e.r = range.e.c = 0;
+					ws = {}; merges = [];
+				}
+				break;
+
+			case 'table-row': // 9.1.3 <table:table-row>
+				if(Rn[1] === '/') break;
+				++R; C = -1; break;
+			case 'covered-table-cell': // 9.1.5 table:covered-table-cell
+				++C; break; /* stub */
+			case 'table-cell':
+				if(Rn[0].charAt(Rn[0].length-2) === '/') {
+					ctag = parsexmltag(Rn[0]);
+					if(ctag['number-columns-repeated']) C+= parseInt(ctag['number-columns-repeated'], 10);
+					else ++C;
+				}
+				else if(Rn[1]!=='/') {
+					++C;
+					if(C > range.e.c) range.e.c = C;
+					if(R > range.e.r) range.e.r = R;
+					if(C < range.s.c) range.s.c = C;
+					if(R < range.s.r) range.s.r = R;
+					ctag = parsexmltag(Rn[0]);
+					q = {t:ctag['value-type'], v:null};
+					if(ctag['number-columns-spanned'] || ctag['number-rows-spanned']) {
+						mR = parseInt(ctag['number-rows-spanned'],10) || 0;
+						mC = parseInt(ctag['number-columns-spanned'],10) || 0;
+						mrange = {s: {r:R,c:C}, e:{r:R + mR-1,c:C + mC-1}};
+						merges.push(mrange);
+					}
+					/* 19.385 office:value-type */
+					switch(q.t) {
+						case 'boolean': q.t = 'b'; q.v = parsexmlbool(ctag['boolean-value']); break;
+						case 'float': q.t = 'n'; q.v = parseFloat(ctag.value); break;
+						case 'percentage': q.t = 'n'; q.v = parseFloat(ctag.value); break;
+						case 'currency': q.t = 'n'; q.v = parseFloat(ctag.value); break;
+						case 'date': q.t = 'n'; q.v = datenum(ctag['date-value']); q.z = 'm/d/yy'; break;
+						case 'time': q.t = 'n'; q.v = parse_isodur(ctag['time-value'])/86400; break;
+						case 'string': q.t = 's'; break;
+						default: throw new Error('Unsupported value type ' + q.t);
+					}
+				} else {
+					if(q.t === 's') q.v = textp;
+					if(textp) q.w = textp;
+					if(!(opts.sheetRows && opts.sheetRows < R)) ws[get_utils().encode_cell({r:R,c:C})] = q;
+					q = null;
+				}
+				break; // 9.1.4 <table:table-cell>
+
+			/* pure state */
+			case 'document-content': // 3.1.3.2 <office:document-content>
+			case 'spreadsheet': // 3.7 <office:spreadsheet>
+			case 'scripts': // 3.12 <office:scripts>
+			case 'font-face-decls': // 3.14 <office:font-face-decls>
+				if(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw "Bad state: "+tmp;}
+				else if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);
+				break;
+
+			/* ignore state */
+			case 'shapes': // 9.2.8 <table:shapes>
+			case 'frame': // 10.4.2 <draw:frame>
+				if(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw "Bad state: "+tmp;}
+				else if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], false]);
+				break;
+
+			case 'number-style': // 16.27.2 <number:number-style>
+			case 'percentage-style': // 16.27.9 <number:percentage-style>
+			case 'date-style': // 16.27.10 <number:date-style>
+			case 'time-style': // 16.27.18 <number:time-style>
+				if(Rn[1]==='/'){
+					number_format_map[NFtag.name] = NF;
+					if((tmp=state.pop())[0]!==Rn[3]) throw "Bad state: "+tmp;
+				} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {
+					NF = "";
+					NFtag = parsexmltag(Rn[0]);
+					state.push([Rn[3], true]);
+				} break;
+
+			case 'script': break; // 3.13 <office:script>
+			case 'automatic-styles': break; // 3.15.3 <office:automatic-styles>
+
+			case 'style': break; // 16.2 <style:style>
+			case 'font-face': break; // 16.21 <style:font-face>
+
+			case 'paragraph-properties': break; // 17.6 <style:paragraph-properties>
+			case 'table-properties': break; // 17.15 <style:table-properties>
+			case 'table-column-properties': break; // 17.16 <style:table-column-properties>
+			case 'table-row-properties': break; // 17.17 <style:table-row-properties>
+			case 'table-cell-properties': break; // 17.18 <style:table-cell-properties>
+
+			case 'number': // 16.27.3 <number:number>
+				switch(state[state.length-1][0]) {
+					case 'time-style':
+					case 'date-style':
+						tag = parsexmltag(Rn[0]);
+						NF += number_formats[Rn[3]][tag.style==='long'?1:0]; break;
+				} break;
+
+			case 'day': // 16.27.11 <number:day>
+			case 'month': // 16.27.12 <number:month>
+			case 'year': // 16.27.13 <number:year>
+			case 'era': // 16.27.14 <number:era>
+			case 'day-of-week': // 16.27.15 <number:day-of-week>
+			case 'week-of-year': // 16.27.16 <number:week-of-year>
+			case 'quarter': // 16.27.17 <number:quarter>
+			case 'hours': // 16.27.19 <number:hours>
+			case 'minutes': // 16.27.20 <number:minutes>
+			case 'seconds': // 16.27.21 <number:seconds>
+			case 'am-pm': // 16.27.22 <number:am-pm>
+				switch(state[state.length-1][0]) {
+					case 'time-style':
+					case 'date-style':
+						tag = parsexmltag(Rn[0]);
+						NF += number_formats[Rn[3]][tag.style==='long'?1:0]; break;
+				} break;
+
+			case 'boolean-style': break; // 16.27.23 <number:boolean-style>
+			case 'boolean': break; // 16.27.24 <number:boolean>
+			case 'text-style': break; // 16.27.25 <number:text-style>
+			case 'text': // 16.27.26 <number:text>
+				if(Rn[0].substr(-2) === "/>") break;
+				else if(Rn[1]==="/") switch(state[state.length-1][0]) {
+					case 'number-style':
+					case 'date-style':
+					case 'time-style':
+						NF += str.slice(pidx, Rn.index);
+						break;
+				}
+				else pidx = Rn.index + Rn[0].length;
+				break;
+			case 'text-content': break; // 16.27.27 <number:text-content>
+			case 'text-properties': break; // 16.27.27 <style:text-properties>
+
+			case 'body': break; // 3.3 16.9.6 19.726.3
+
+			case 'forms': break; // 12.25.2 13.2
+			case 'table-column': break; // 9.1.6 <table:table-column>
+
+			case 'graphic-properties': break;
+			case 'calculation-settings': break; // 9.4.1 <table:calculation-settings>
+			case 'named-expressions': break; // 9.4.11 <table:named-expressions>
+			case 'named-range': break; // 9.4.11 <table:named-range>
+			case 'span': break; // <text:span>
+			case 'p':
+				if(Rn[1]==='/') textp = parse_text_p(str.slice(textpidx,Rn.index), textptag);
+				else { textptag = parsexmltag(Rn[0]); textpidx = Rn.index + Rn[0].length; }
+				break; // <text:p>
+			case 's': break; // <text:s>
+			case 'date': break; // <*:date>
+			case 'annotation': break;
+
+			case 'object': break; // 10.4.6.2 <draw:object>
+			case 'title': break; // <*:title>
+			case 'desc': break; // <*:desc>
+
+			case 'database-ranges': break; // 9.4.14 <table:database-ranges>
+			case 'database-range': break; // 9.4.15 <table:database-range>
+			case 'filter': break; // 9.5.2 <table:filter>
+			case 'filter-and': break; // 9.5.3 <table:filter-and>
+			case 'filter-or': break; // 9.5.4 <table:filter-or>
+			case 'filter-condition': break; // 9.5.5 <table:filter-condition>
+			default: if(opts.WTF) throw Rn;
+		}
+		var out = {
+			Sheets: Sheets,
+			SheetNames: SheetNames
+		};
+		return out;
+	};
+})();
+/* Part 3: Packages */
+var parse_ods = function(zip, opts) {
+	//var manifest = parse_manifest(getzipdata(zip, 'META-INF/manifest.xml'));
+	return parse_content_xml(getzipdata(zip, 'content.xml'), opts);
+};
+ODS.parse_ods = parse_ods;
+})(typeof exports !== 'undefined' ? exports : ODS);
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/dist/xlsx.core.min.js b/Source/UBCS-WEB/src/config/js-xlsx-master/dist/xlsx.core.min.js
new file mode 100644
index 0000000..d950807
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/dist/xlsx.core.min.js
@@ -0,0 +1,15 @@
+/* xlsx.js (C) 2013-2015 SheetJS -- http://sheetjs.com */
+!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.JSZip=e()}}(function(){var define,module,exports;return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(_dereq_,module,exports){"use strict";var _keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";exports.encode=function(input,utf8){var output="";var chr1,chr2,chr3,enc1,enc2,enc3,enc4;var i=0;while(i<input.length){chr1=input.charCodeAt(i++);chr2=input.charCodeAt(i++);chr3=input.charCodeAt(i++);enc1=chr1>>2;enc2=(chr1&3)<<4|chr2>>4;enc3=(chr2&15)<<2|chr3>>6;enc4=chr3&63;if(isNaN(chr2)){enc3=enc4=64}else if(isNaN(chr3)){enc4=64}output=output+_keyStr.charAt(enc1)+_keyStr.charAt(enc2)+_keyStr.charAt(enc3)+_keyStr.charAt(enc4)}return output};exports.decode=function(input,utf8){var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");while(i<input.length){enc1=_keyStr.indexOf(input.charAt(i++));enc2=_keyStr.indexOf(input.charAt(i++));enc3=_keyStr.indexOf(input.charAt(i++));enc4=_keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!=64){output=output+String.fromCharCode(chr2)}if(enc4!=64){output=output+String.fromCharCode(chr3)}}return output}},{}],2:[function(_dereq_,module,exports){"use strict";function CompressedObject(){this.compressedSize=0;this.uncompressedSize=0;this.crc32=0;this.compressionMethod=null;this.compressedContent=null}CompressedObject.prototype={getContent:function(){return null},getCompressedContent:function(){return null}};module.exports=CompressedObject},{}],3:[function(_dereq_,module,exports){"use strict";exports.STORE={magic:"\0\0",compress:function(content){return content},uncompress:function(content){return content},compressInputType:null,uncompressInputType:null};exports.DEFLATE=_dereq_("./flate")},{"./flate":8}],4:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("./utils");var table=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117];module.exports=function crc32(input,crc){if(typeof input==="undefined"||!input.length){return 0}var isArray=utils.getTypeOf(input)!=="string";if(typeof crc=="undefined"){crc=0}var x=0;var y=0;var b=0;crc=crc^-1;for(var i=0,iTop=input.length;i<iTop;i++){b=isArray?input[i]:input.charCodeAt(i);y=(crc^b)&255;x=table[y];crc=crc>>>8^x}return crc^-1}},{"./utils":21}],5:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("./utils");function DataReader(data){this.data=null;this.length=0;this.index=0}DataReader.prototype={checkOffset:function(offset){this.checkIndex(this.index+offset)},checkIndex:function(newIndex){if(this.length<newIndex||newIndex<0){throw new Error("End of data reached (data length = "+this.length+", asked index = "+newIndex+"). Corrupted zip ?")}},setIndex:function(newIndex){this.checkIndex(newIndex);this.index=newIndex},skip:function(n){this.setIndex(this.index+n)},byteAt:function(i){},readInt:function(size){var result=0,i;this.checkOffset(size);for(i=this.index+size-1;i>=this.index;i--){result=(result<<8)+this.byteAt(i)}this.index+=size;return result},readString:function(size){return utils.transformTo("string",this.readData(size))},readData:function(size){},lastIndexOfSignature:function(sig){},readDate:function(){var dostime=this.readInt(4);return new Date((dostime>>25&127)+1980,(dostime>>21&15)-1,dostime>>16&31,dostime>>11&31,dostime>>5&63,(dostime&31)<<1)}};module.exports=DataReader},{"./utils":21}],6:[function(_dereq_,module,exports){"use strict";exports.base64=false;exports.binary=false;exports.dir=false;exports.createFolders=false;exports.date=null;exports.compression=null;exports.comment=null},{}],7:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("./utils");exports.string2binary=function(str){return utils.string2binary(str)};exports.string2Uint8Array=function(str){return utils.transformTo("uint8array",str)};exports.uint8Array2String=function(array){return utils.transformTo("string",array)};exports.string2Blob=function(str){var buffer=utils.transformTo("arraybuffer",str);return utils.arrayBuffer2Blob(buffer)};exports.arrayBuffer2Blob=function(buffer){return utils.arrayBuffer2Blob(buffer)};exports.transformTo=function(outputType,input){return utils.transformTo(outputType,input)};exports.getTypeOf=function(input){return utils.getTypeOf(input)};exports.checkSupport=function(type){return utils.checkSupport(type)};exports.MAX_VALUE_16BITS=utils.MAX_VALUE_16BITS;exports.MAX_VALUE_32BITS=utils.MAX_VALUE_32BITS;exports.pretty=function(str){return utils.pretty(str)};exports.findCompression=function(compressionMethod){return utils.findCompression(compressionMethod)};exports.isRegExp=function(object){return utils.isRegExp(object)}},{"./utils":21}],8:[function(_dereq_,module,exports){"use strict";var USE_TYPEDARRAY=typeof Uint8Array!=="undefined"&&typeof Uint16Array!=="undefined"&&typeof Uint32Array!=="undefined";var pako=_dereq_("pako");exports.uncompressInputType=USE_TYPEDARRAY?"uint8array":"array";exports.compressInputType=USE_TYPEDARRAY?"uint8array":"array";exports.magic="\b\0";exports.compress=function(input){return pako.deflateRaw(input)};exports.uncompress=function(input){return pako.inflateRaw(input)}},{pako:24}],9:[function(_dereq_,module,exports){"use strict";var base64=_dereq_("./base64");function JSZip(data,options){if(!(this instanceof JSZip))return new JSZip(data,options);this.files={};this.comment=null;this.root="";if(data){this.load(data,options)}this.clone=function(){var newObj=new JSZip;for(var i in this){if(typeof this[i]!=="function"){newObj[i]=this[i]}}return newObj}}JSZip.prototype=_dereq_("./object");JSZip.prototype.load=_dereq_("./load");JSZip.support=_dereq_("./support");JSZip.defaults=_dereq_("./defaults");JSZip.utils=_dereq_("./deprecatedPublicUtils");JSZip.base64={encode:function(input){return base64.encode(input)},decode:function(input){return base64.decode(input)}};JSZip.compressions=_dereq_("./compressions");module.exports=JSZip},{"./base64":1,"./compressions":3,"./defaults":6,"./deprecatedPublicUtils":7,"./load":10,"./object":13,"./support":17}],10:[function(_dereq_,module,exports){"use strict";var base64=_dereq_("./base64");var ZipEntries=_dereq_("./zipEntries");module.exports=function(data,options){var files,zipEntries,i,input;options=options||{};if(options.base64){data=base64.decode(data)}zipEntries=new ZipEntries(data,options);files=zipEntries.files;for(i=0;i<files.length;i++){input=files[i];this.file(input.fileName,input.decompressed,{binary:true,optimizedBinaryString:true,date:input.date,dir:input.dir,comment:input.fileComment.length?input.fileComment:null,createFolders:options.createFolders})}if(zipEntries.zipComment.length){this.comment=zipEntries.zipComment}return this}},{"./base64":1,"./zipEntries":22}],11:[function(_dereq_,module,exports){(function(Buffer){"use strict";module.exports=function(data,encoding){return new Buffer(data,encoding)};module.exports.test=function(b){return Buffer.isBuffer(b)}}).call(this,typeof Buffer!=="undefined"?Buffer:undefined)},{}],12:[function(_dereq_,module,exports){"use strict";var Uint8ArrayReader=_dereq_("./uint8ArrayReader");function NodeBufferReader(data){this.data=data;this.length=this.data.length;this.index=0}NodeBufferReader.prototype=new Uint8ArrayReader;NodeBufferReader.prototype.readData=function(size){this.checkOffset(size);var result=this.data.slice(this.index,this.index+size);this.index+=size;return result};module.exports=NodeBufferReader},{"./uint8ArrayReader":18}],13:[function(_dereq_,module,exports){"use strict";var support=_dereq_("./support");var utils=_dereq_("./utils");var crc32=_dereq_("./crc32");var signature=_dereq_("./signature");var defaults=_dereq_("./defaults");var base64=_dereq_("./base64");var compressions=_dereq_("./compressions");var CompressedObject=_dereq_("./compressedObject");var nodeBuffer=_dereq_("./nodeBuffer");var utf8=_dereq_("./utf8");var StringWriter=_dereq_("./stringWriter");var Uint8ArrayWriter=_dereq_("./uint8ArrayWriter");var getRawData=function(file){if(file._data instanceof CompressedObject){file._data=file._data.getContent();file.options.binary=true;file.options.base64=false;if(utils.getTypeOf(file._data)==="uint8array"){var copy=file._data;file._data=new Uint8Array(copy.length);if(copy.length!==0){file._data.set(copy,0)}}}return file._data};var getBinaryData=function(file){var result=getRawData(file),type=utils.getTypeOf(result);if(type==="string"){if(!file.options.binary){if(support.nodebuffer){return nodeBuffer(result,"utf-8")}}return file.asBinary()}return result};var dataToString=function(asUTF8){var result=getRawData(this);if(result===null||typeof result==="undefined"){return""}if(this.options.base64){result=base64.decode(result)}if(asUTF8&&this.options.binary){result=out.utf8decode(result)}else{result=utils.transformTo("string",result)}if(!asUTF8&&!this.options.binary){result=utils.transformTo("string",out.utf8encode(result))}return result};var ZipObject=function(name,data,options){this.name=name;this.dir=options.dir;this.date=options.date;this.comment=options.comment;this._data=data;this.options=options;this._initialMetadata={dir:options.dir,date:options.date}};ZipObject.prototype={asText:function(){return dataToString.call(this,true)},asBinary:function(){return dataToString.call(this,false)},asNodeBuffer:function(){var result=getBinaryData(this);return utils.transformTo("nodebuffer",result)},asUint8Array:function(){var result=getBinaryData(this);return utils.transformTo("uint8array",result)},asArrayBuffer:function(){return this.asUint8Array().buffer}};var decToHex=function(dec,bytes){var hex="",i;for(i=0;i<bytes;i++){hex+=String.fromCharCode(dec&255);dec=dec>>>8}return hex};var extend=function(){var result={},i,attr;for(i=0;i<arguments.length;i++){for(attr in arguments[i]){if(arguments[i].hasOwnProperty(attr)&&typeof result[attr]==="undefined"){result[attr]=arguments[i][attr]}}}return result};var prepareFileAttrs=function(o){o=o||{};if(o.base64===true&&(o.binary===null||o.binary===undefined)){o.binary=true}o=extend(o,defaults);o.date=o.date||new Date;if(o.compression!==null)o.compression=o.compression.toUpperCase();return o};var fileAdd=function(name,data,o){var dataType=utils.getTypeOf(data),parent;o=prepareFileAttrs(o);if(o.createFolders&&(parent=parentFolder(name))){folderAdd.call(this,parent,true)}if(o.dir||data===null||typeof data==="undefined"){o.base64=false;o.binary=false;data=null}else if(dataType==="string"){if(o.binary&&!o.base64){if(o.optimizedBinaryString!==true){data=utils.string2binary(data)}}}else{o.base64=false;o.binary=true;if(!dataType&&!(data instanceof CompressedObject)){throw new Error("The data of '"+name+"' is in an unsupported format !")}if(dataType==="arraybuffer"){data=utils.transformTo("uint8array",data)}}var object=new ZipObject(name,data,o);this.files[name]=object;return object};var parentFolder=function(path){if(path.slice(-1)=="/"){path=path.substring(0,path.length-1)}var lastSlash=path.lastIndexOf("/");return lastSlash>0?path.substring(0,lastSlash):""};var folderAdd=function(name,createFolders){if(name.slice(-1)!="/"){name+="/"}createFolders=typeof createFolders!=="undefined"?createFolders:false;if(!this.files[name]){fileAdd.call(this,name,null,{dir:true,createFolders:createFolders})}return this.files[name]};var generateCompressedObjectFrom=function(file,compression){var result=new CompressedObject,content;if(file._data instanceof CompressedObject){result.uncompressedSize=file._data.uncompressedSize;result.crc32=file._data.crc32;if(result.uncompressedSize===0||file.dir){compression=compressions["STORE"];result.compressedContent="";result.crc32=0}else if(file._data.compressionMethod===compression.magic){result.compressedContent=file._data.getCompressedContent()}else{content=file._data.getContent();result.compressedContent=compression.compress(utils.transformTo(compression.compressInputType,content))}}else{content=getBinaryData(file);if(!content||content.length===0||file.dir){compression=compressions["STORE"];content=""}result.uncompressedSize=content.length;result.crc32=crc32(content);result.compressedContent=compression.compress(utils.transformTo(compression.compressInputType,content))}result.compressedSize=result.compressedContent.length;result.compressionMethod=compression.magic;return result};var generateZipParts=function(name,file,compressedObject,offset){var data=compressedObject.compressedContent,utfEncodedFileName=utils.transformTo("string",utf8.utf8encode(file.name)),comment=file.comment||"",utfEncodedComment=utils.transformTo("string",utf8.utf8encode(comment)),useUTF8ForFileName=utfEncodedFileName.length!==file.name.length,useUTF8ForComment=utfEncodedComment.length!==comment.length,o=file.options,dosTime,dosDate,extraFields="",unicodePathExtraField="",unicodeCommentExtraField="",dir,date;if(file._initialMetadata.dir!==file.dir){dir=file.dir}else{dir=o.dir}if(file._initialMetadata.date!==file.date){date=file.date}else{date=o.date}dosTime=date.getHours();dosTime=dosTime<<6;dosTime=dosTime|date.getMinutes();dosTime=dosTime<<5;dosTime=dosTime|date.getSeconds()/2;dosDate=date.getFullYear()-1980;dosDate=dosDate<<4;dosDate=dosDate|date.getMonth()+1;dosDate=dosDate<<5;dosDate=dosDate|date.getDate();if(useUTF8ForFileName){unicodePathExtraField=decToHex(1,1)+decToHex(crc32(utfEncodedFileName),4)+utfEncodedFileName;extraFields+="up"+decToHex(unicodePathExtraField.length,2)+unicodePathExtraField}if(useUTF8ForComment){unicodeCommentExtraField=decToHex(1,1)+decToHex(this.crc32(utfEncodedComment),4)+utfEncodedComment;extraFields+="uc"+decToHex(unicodeCommentExtraField.length,2)+unicodeCommentExtraField}var header="";header+="\n\0";header+=useUTF8ForFileName||useUTF8ForComment?"\0\b":"\0\0";header+=compressedObject.compressionMethod;header+=decToHex(dosTime,2);header+=decToHex(dosDate,2);header+=decToHex(compressedObject.crc32,4);header+=decToHex(compressedObject.compressedSize,4);header+=decToHex(compressedObject.uncompressedSize,4);header+=decToHex(utfEncodedFileName.length,2);header+=decToHex(extraFields.length,2);var fileRecord=signature.LOCAL_FILE_HEADER+header+utfEncodedFileName+extraFields;var dirRecord=signature.CENTRAL_FILE_HEADER+"\0"+header+decToHex(utfEncodedComment.length,2)+"\0\0"+"\0\0"+(dir===true?"\0\0\0":"\0\0\0\0")+decToHex(offset,4)+utfEncodedFileName+extraFields+utfEncodedComment;return{fileRecord:fileRecord,dirRecord:dirRecord,compressedObject:compressedObject}};var out={load:function(stream,options){throw new Error("Load method is not defined. Is the file jszip-load.js included ?")},filter:function(search){var result=[],filename,relativePath,file,fileClone;for(filename in this.files){if(!this.files.hasOwnProperty(filename)){continue}file=this.files[filename];fileClone=new ZipObject(file.name,file._data,extend(file.options));relativePath=filename.slice(this.root.length,filename.length);if(filename.slice(0,this.root.length)===this.root&&search(relativePath,fileClone)){result.push(fileClone)}}return result},file:function(name,data,o){if(arguments.length===1){if(utils.isRegExp(name)){var regexp=name;return this.filter(function(relativePath,file){return!file.dir&&regexp.test(relativePath)})}else{return this.filter(function(relativePath,file){return!file.dir&&relativePath===name})[0]||null}}else{name=this.root+name;fileAdd.call(this,name,data,o)}return this},folder:function(arg){if(!arg){return this}if(utils.isRegExp(arg)){return this.filter(function(relativePath,file){return file.dir&&arg.test(relativePath)})}var name=this.root+arg;var newFolder=folderAdd.call(this,name);var ret=this.clone();ret.root=newFolder.name;return ret},remove:function(name){name=this.root+name;var file=this.files[name];if(!file){if(name.slice(-1)!="/"){name+="/"}file=this.files[name]}if(file&&!file.dir){delete this.files[name]}else{var kids=this.filter(function(relativePath,file){return file.name.slice(0,name.length)===name});for(var i=0;i<kids.length;i++){delete this.files[kids[i].name]}}return this},generate:function(options){options=extend(options||{},{base64:true,compression:"STORE",type:"base64",comment:null});utils.checkSupport(options.type);var zipData=[],localDirLength=0,centralDirLength=0,writer,i,utfEncodedComment=utils.transformTo("string",this.utf8encode(options.comment||this.comment||""));for(var name in this.files){if(!this.files.hasOwnProperty(name)){continue}var file=this.files[name];var compressionName=file.options.compression||options.compression.toUpperCase();var compression=compressions[compressionName];if(!compression){throw new Error(compressionName+" is not a valid compression method !")}var compressedObject=generateCompressedObjectFrom.call(this,file,compression);var zipPart=generateZipParts.call(this,name,file,compressedObject,localDirLength);localDirLength+=zipPart.fileRecord.length+compressedObject.compressedSize;centralDirLength+=zipPart.dirRecord.length;zipData.push(zipPart)}var dirEnd="";dirEnd=signature.CENTRAL_DIRECTORY_END+"\0\0"+"\0\0"+decToHex(zipData.length,2)+decToHex(zipData.length,2)+decToHex(centralDirLength,4)+decToHex(localDirLength,4)+decToHex(utfEncodedComment.length,2)+utfEncodedComment;var typeName=options.type.toLowerCase();if(typeName==="uint8array"||typeName==="arraybuffer"||typeName==="blob"||typeName==="nodebuffer"){writer=new Uint8ArrayWriter(localDirLength+centralDirLength+dirEnd.length)}else{writer=new StringWriter(localDirLength+centralDirLength+dirEnd.length)}for(i=0;i<zipData.length;i++){writer.append(zipData[i].fileRecord);writer.append(zipData[i].compressedObject.compressedContent)}for(i=0;i<zipData.length;i++){writer.append(zipData[i].dirRecord)}writer.append(dirEnd);var zip=writer.finalize();switch(options.type.toLowerCase()){case"uint8array":case"arraybuffer":case"nodebuffer":return utils.transformTo(options.type.toLowerCase(),zip);case"blob":return utils.arrayBuffer2Blob(utils.transformTo("arraybuffer",zip));case"base64":return options.base64?base64.encode(zip):zip;default:return zip}},crc32:function(input,crc){return crc32(input,crc)},utf8encode:function(string){return utils.transformTo("string",utf8.utf8encode(string))},utf8decode:function(input){return utf8.utf8decode(input)}};module.exports=out},{"./base64":1,"./compressedObject":2,"./compressions":3,"./crc32":4,"./defaults":6,"./nodeBuffer":11,"./signature":14,"./stringWriter":16,"./support":17,"./uint8ArrayWriter":19,"./utf8":20,"./utils":21}],14:[function(_dereq_,module,exports){"use strict";exports.LOCAL_FILE_HEADER="PK";exports.CENTRAL_FILE_HEADER="PK";exports.CENTRAL_DIRECTORY_END="PK";exports.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK";exports.ZIP64_CENTRAL_DIRECTORY_END="PK";exports.DATA_DESCRIPTOR="PK\b"},{}],15:[function(_dereq_,module,exports){"use strict";var DataReader=_dereq_("./dataReader");var utils=_dereq_("./utils");function StringReader(data,optimizedBinaryString){this.data=data;if(!optimizedBinaryString){this.data=utils.string2binary(this.data)}this.length=this.data.length;this.index=0}StringReader.prototype=new DataReader;StringReader.prototype.byteAt=function(i){return this.data.charCodeAt(i)};StringReader.prototype.lastIndexOfSignature=function(sig){return this.data.lastIndexOf(sig)};StringReader.prototype.readData=function(size){this.checkOffset(size);var result=this.data.slice(this.index,this.index+size);this.index+=size;return result};module.exports=StringReader},{"./dataReader":5,"./utils":21}],16:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("./utils");var StringWriter=function(){this.data=[]};StringWriter.prototype={append:function(input){input=utils.transformTo("string",input);this.data.push(input)},finalize:function(){return this.data.join("")}};module.exports=StringWriter},{"./utils":21}],17:[function(_dereq_,module,exports){(function(Buffer){"use strict";exports.base64=true;exports.array=true;exports.string=true;exports.arraybuffer=typeof ArrayBuffer!=="undefined"&&typeof Uint8Array!=="undefined";exports.nodebuffer=typeof Buffer!=="undefined";exports.uint8array=typeof Uint8Array!=="undefined";if(typeof ArrayBuffer==="undefined"){exports.blob=false}else{var buffer=new ArrayBuffer(0);try{exports.blob=new Blob([buffer],{type:"application/zip"}).size===0}catch(e){try{var Builder=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder;var builder=new Builder;builder.append(buffer);exports.blob=builder.getBlob("application/zip").size===0}catch(e){exports.blob=false}}}}).call(this,typeof Buffer!=="undefined"?Buffer:undefined)},{}],18:[function(_dereq_,module,exports){"use strict";var DataReader=_dereq_("./dataReader");function Uint8ArrayReader(data){if(data){this.data=data;this.length=this.data.length;this.index=0}}Uint8ArrayReader.prototype=new DataReader;Uint8ArrayReader.prototype.byteAt=function(i){return this.data[i]};Uint8ArrayReader.prototype.lastIndexOfSignature=function(sig){var sig0=sig.charCodeAt(0),sig1=sig.charCodeAt(1),sig2=sig.charCodeAt(2),sig3=sig.charCodeAt(3);for(var i=this.length-4;i>=0;--i){if(this.data[i]===sig0&&this.data[i+1]===sig1&&this.data[i+2]===sig2&&this.data[i+3]===sig3){return i}}return-1};Uint8ArrayReader.prototype.readData=function(size){this.checkOffset(size);if(size===0){return new Uint8Array(0)}var result=this.data.subarray(this.index,this.index+size);this.index+=size;return result};module.exports=Uint8ArrayReader},{"./dataReader":5}],19:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("./utils");var Uint8ArrayWriter=function(length){this.data=new Uint8Array(length);this.index=0};Uint8ArrayWriter.prototype={append:function(input){if(input.length!==0){input=utils.transformTo("uint8array",input);this.data.set(input,this.index);this.index+=input.length}},finalize:function(){return this.data}};module.exports=Uint8ArrayWriter},{"./utils":21}],20:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("./utils");var support=_dereq_("./support");var nodeBuffer=_dereq_("./nodeBuffer");var _utf8len=new Array(256);for(var i=0;i<256;i++){_utf8len[i]=i>=252?6:i>=248?5:i>=240?4:i>=224?3:i>=192?2:1}_utf8len[254]=_utf8len[254]=1;var string2buf=function(str){var buf,c,c2,m_pos,i,str_len=str.length,buf_len=0;for(m_pos=0;m_pos<str_len;m_pos++){c=str.charCodeAt(m_pos);if((c&64512)===55296&&m_pos+1<str_len){c2=str.charCodeAt(m_pos+1);if((c2&64512)===56320){c=65536+(c-55296<<10)+(c2-56320);m_pos++}}buf_len+=c<128?1:c<2048?2:c<65536?3:4}if(support.uint8array){buf=new Uint8Array(buf_len)}else{buf=new Array(buf_len)}for(i=0,m_pos=0;i<buf_len;m_pos++){c=str.charCodeAt(m_pos);if((c&64512)===55296&&m_pos+1<str_len){c2=str.charCodeAt(m_pos+1);if((c2&64512)===56320){c=65536+(c-55296<<10)+(c2-56320);m_pos++}}if(c<128){buf[i++]=c}else if(c<2048){buf[i++]=192|c>>>6;buf[i++]=128|c&63}else if(c<65536){buf[i++]=224|c>>>12;buf[i++]=128|c>>>6&63;buf[i++]=128|c&63}else{buf[i++]=240|c>>>18;buf[i++]=128|c>>>12&63;buf[i++]=128|c>>>6&63;buf[i++]=128|c&63}}return buf};var utf8border=function(buf,max){var pos;max=max||buf.length;if(max>buf.length){max=buf.length}pos=max-1;while(pos>=0&&(buf[pos]&192)===128){pos--}if(pos<0){return max}if(pos===0){return max}return pos+_utf8len[buf[pos]]>max?pos:max};var buf2string=function(buf){var str,i,out,c,c_len;var len=buf.length;var utf16buf=new Array(len*2);for(out=0,i=0;i<len;){c=buf[i++];if(c<128){utf16buf[out++]=c;continue}c_len=_utf8len[c];if(c_len>4){utf16buf[out++]=65533;i+=c_len-1;continue}c&=c_len===2?31:c_len===3?15:7;while(c_len>1&&i<len){c=c<<6|buf[i++]&63;c_len--}if(c_len>1){utf16buf[out++]=65533;continue}if(c<65536){utf16buf[out++]=c}else{c-=65536;utf16buf[out++]=55296|c>>10&1023;utf16buf[out++]=56320|c&1023}}if(utf16buf.length!==out){if(utf16buf.subarray){utf16buf=utf16buf.subarray(0,out)}else{utf16buf.length=out}}return utils.applyFromCharCode(utf16buf)};exports.utf8encode=function utf8encode(str){if(support.nodebuffer){return nodeBuffer(str,"utf-8")}return string2buf(str)};exports.utf8decode=function utf8decode(buf){if(support.nodebuffer){return utils.transformTo("nodebuffer",buf).toString("utf-8")}buf=utils.transformTo(support.uint8array?"uint8array":"array",buf);var result=[],k=0,len=buf.length,chunk=65536;while(k<len){var nextBoundary=utf8border(buf,Math.min(k+chunk,len));if(support.uint8array){result.push(buf2string(buf.subarray(k,nextBoundary)))}else{result.push(buf2string(buf.slice(k,nextBoundary)))}k=nextBoundary}return result.join("")}},{"./nodeBuffer":11,"./support":17,"./utils":21}],21:[function(_dereq_,module,exports){"use strict";var support=_dereq_("./support");var compressions=_dereq_("./compressions");var nodeBuffer=_dereq_("./nodeBuffer");exports.string2binary=function(str){var result="";for(var i=0;i<str.length;i++){result+=String.fromCharCode(str.charCodeAt(i)&255)}return result};exports.arrayBuffer2Blob=function(buffer){exports.checkSupport("blob");try{return new Blob([buffer],{type:"application/zip"})}catch(e){try{var Builder=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder;var builder=new Builder;builder.append(buffer);return builder.getBlob("application/zip")}catch(e){throw new Error("Bug : can't construct the Blob.")}}};function identity(input){return input}function stringToArrayLike(str,array){for(var i=0;i<str.length;++i){array[i]=str.charCodeAt(i)&255}return array}function arrayLikeToString(array){var chunk=65536;var result=[],len=array.length,type=exports.getTypeOf(array),k=0,canUseApply=true;try{switch(type){case"uint8array":String.fromCharCode.apply(null,new Uint8Array(0));break;case"nodebuffer":String.fromCharCode.apply(null,nodeBuffer(0));break}}catch(e){canUseApply=false}if(!canUseApply){var resultStr="";for(var i=0;i<array.length;i++){resultStr+=String.fromCharCode(array[i])}return resultStr}while(k<len&&chunk>1){try{if(type==="array"||type==="nodebuffer"){result.push(String.fromCharCode.apply(null,array.slice(k,Math.min(k+chunk,len))))}else{result.push(String.fromCharCode.apply(null,array.subarray(k,Math.min(k+chunk,len))))}k+=chunk}catch(e){chunk=Math.floor(chunk/2)}}return result.join("")}exports.applyFromCharCode=arrayLikeToString;function arrayLikeToArrayLike(arrayFrom,arrayTo){for(var i=0;i<arrayFrom.length;i++){arrayTo[i]=arrayFrom[i]}return arrayTo}var transform={};transform["string"]={string:identity,array:function(input){return stringToArrayLike(input,new Array(input.length))},arraybuffer:function(input){return transform["string"]["uint8array"](input).buffer},uint8array:function(input){return stringToArrayLike(input,new Uint8Array(input.length))},nodebuffer:function(input){return stringToArrayLike(input,nodeBuffer(input.length))}};transform["array"]={string:arrayLikeToString,array:identity,arraybuffer:function(input){return new Uint8Array(input).buffer},uint8array:function(input){return new Uint8Array(input)},nodebuffer:function(input){return nodeBuffer(input)}};transform["arraybuffer"]={string:function(input){return arrayLikeToString(new Uint8Array(input))},array:function(input){return arrayLikeToArrayLike(new Uint8Array(input),new Array(input.byteLength))},arraybuffer:identity,uint8array:function(input){return new Uint8Array(input)},nodebuffer:function(input){return nodeBuffer(new Uint8Array(input))}};transform["uint8array"]={string:arrayLikeToString,array:function(input){return arrayLikeToArrayLike(input,new Array(input.length))},arraybuffer:function(input){return input.buffer},uint8array:identity,nodebuffer:function(input){return nodeBuffer(input)}};transform["nodebuffer"]={string:arrayLikeToString,array:function(input){return arrayLikeToArrayLike(input,new Array(input.length))},arraybuffer:function(input){return transform["nodebuffer"]["uint8array"](input).buffer},uint8array:function(input){return arrayLikeToArrayLike(input,new Uint8Array(input.length))},nodebuffer:identity};exports.transformTo=function(outputType,input){if(!input){input=""}if(!outputType){return input}exports.checkSupport(outputType);var inputType=exports.getTypeOf(input);var result=transform[inputType][outputType](input);return result};exports.getTypeOf=function(input){if(typeof input==="string"){return"string"}if(Object.prototype.toString.call(input)==="[object Array]"){return"array"}if(support.nodebuffer&&nodeBuffer.test(input)){return"nodebuffer"}if(support.uint8array&&input instanceof Uint8Array){return"uint8array"}if(support.arraybuffer&&input instanceof ArrayBuffer){return"arraybuffer"}};exports.checkSupport=function(type){var supported=support[type.toLowerCase()];if(!supported){throw new Error(type+" is not supported by this browser")}};exports.MAX_VALUE_16BITS=65535;exports.MAX_VALUE_32BITS=-1;exports.pretty=function(str){var res="",code,i;for(i=0;i<(str||"").length;i++){code=str.charCodeAt(i);res+="\\x"+(code<16?"0":"")+code.toString(16).toUpperCase()}return res;
+};exports.findCompression=function(compressionMethod){for(var method in compressions){if(!compressions.hasOwnProperty(method)){continue}if(compressions[method].magic===compressionMethod){return compressions[method]}}return null};exports.isRegExp=function(object){return Object.prototype.toString.call(object)==="[object RegExp]"}},{"./compressions":3,"./nodeBuffer":11,"./support":17}],22:[function(_dereq_,module,exports){"use strict";var StringReader=_dereq_("./stringReader");var NodeBufferReader=_dereq_("./nodeBufferReader");var Uint8ArrayReader=_dereq_("./uint8ArrayReader");var utils=_dereq_("./utils");var sig=_dereq_("./signature");var ZipEntry=_dereq_("./zipEntry");var support=_dereq_("./support");var jszipProto=_dereq_("./object");function ZipEntries(data,loadOptions){this.files=[];this.loadOptions=loadOptions;if(data){this.load(data)}}ZipEntries.prototype={checkSignature:function(expectedSignature){var signature=this.reader.readString(4);if(signature!==expectedSignature){throw new Error("Corrupted zip or bug : unexpected signature "+"("+utils.pretty(signature)+", expected "+utils.pretty(expectedSignature)+")")}},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2);this.diskWithCentralDirStart=this.reader.readInt(2);this.centralDirRecordsOnThisDisk=this.reader.readInt(2);this.centralDirRecords=this.reader.readInt(2);this.centralDirSize=this.reader.readInt(4);this.centralDirOffset=this.reader.readInt(4);this.zipCommentLength=this.reader.readInt(2);this.zipComment=this.reader.readString(this.zipCommentLength);this.zipComment=jszipProto.utf8decode(this.zipComment)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8);this.versionMadeBy=this.reader.readString(2);this.versionNeeded=this.reader.readInt(2);this.diskNumber=this.reader.readInt(4);this.diskWithCentralDirStart=this.reader.readInt(4);this.centralDirRecordsOnThisDisk=this.reader.readInt(8);this.centralDirRecords=this.reader.readInt(8);this.centralDirSize=this.reader.readInt(8);this.centralDirOffset=this.reader.readInt(8);this.zip64ExtensibleData={};var extraDataSize=this.zip64EndOfCentralSize-44,index=0,extraFieldId,extraFieldLength,extraFieldValue;while(index<extraDataSize){extraFieldId=this.reader.readInt(2);extraFieldLength=this.reader.readInt(4);extraFieldValue=this.reader.readString(extraFieldLength);this.zip64ExtensibleData[extraFieldId]={id:extraFieldId,length:extraFieldLength,value:extraFieldValue}}},readBlockZip64EndOfCentralLocator:function(){this.diskWithZip64CentralDirStart=this.reader.readInt(4);this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8);this.disksCount=this.reader.readInt(4);if(this.disksCount>1){throw new Error("Multi-volumes zip are not supported")}},readLocalFiles:function(){var i,file;for(i=0;i<this.files.length;i++){file=this.files[i];this.reader.setIndex(file.localHeaderOffset);this.checkSignature(sig.LOCAL_FILE_HEADER);file.readLocalPart(this.reader);file.handleUTF8()}},readCentralDir:function(){var file;this.reader.setIndex(this.centralDirOffset);while(this.reader.readString(4)===sig.CENTRAL_FILE_HEADER){file=new ZipEntry({zip64:this.zip64},this.loadOptions);file.readCentralPart(this.reader);this.files.push(file)}},readEndOfCentral:function(){var offset=this.reader.lastIndexOfSignature(sig.CENTRAL_DIRECTORY_END);if(offset===-1){throw new Error("Corrupted zip : can't find end of central directory")}this.reader.setIndex(offset);this.checkSignature(sig.CENTRAL_DIRECTORY_END);this.readBlockEndOfCentral();if(this.diskNumber===utils.MAX_VALUE_16BITS||this.diskWithCentralDirStart===utils.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===utils.MAX_VALUE_16BITS||this.centralDirRecords===utils.MAX_VALUE_16BITS||this.centralDirSize===utils.MAX_VALUE_32BITS||this.centralDirOffset===utils.MAX_VALUE_32BITS){this.zip64=true;offset=this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);if(offset===-1){throw new Error("Corrupted zip : can't find the ZIP64 end of central directory locator")}this.reader.setIndex(offset);this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);this.readBlockZip64EndOfCentralLocator();this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir);this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_END);this.readBlockZip64EndOfCentral()}},prepareReader:function(data){var type=utils.getTypeOf(data);if(type==="string"&&!support.uint8array){this.reader=new StringReader(data,this.loadOptions.optimizedBinaryString)}else if(type==="nodebuffer"){this.reader=new NodeBufferReader(data)}else{this.reader=new Uint8ArrayReader(utils.transformTo("uint8array",data))}},load:function(data){this.prepareReader(data);this.readEndOfCentral();this.readCentralDir();this.readLocalFiles()}};module.exports=ZipEntries},{"./nodeBufferReader":12,"./object":13,"./signature":14,"./stringReader":15,"./support":17,"./uint8ArrayReader":18,"./utils":21,"./zipEntry":23}],23:[function(_dereq_,module,exports){"use strict";var StringReader=_dereq_("./stringReader");var utils=_dereq_("./utils");var CompressedObject=_dereq_("./compressedObject");var jszipProto=_dereq_("./object");function ZipEntry(options,loadOptions){this.options=options;this.loadOptions=loadOptions}ZipEntry.prototype={isEncrypted:function(){return(this.bitFlag&1)===1},useUTF8:function(){return(this.bitFlag&2048)===2048},prepareCompressedContent:function(reader,from,length){return function(){var previousIndex=reader.index;reader.setIndex(from);var compressedFileData=reader.readData(length);reader.setIndex(previousIndex);return compressedFileData}},prepareContent:function(reader,from,length,compression,uncompressedSize){return function(){var compressedFileData=utils.transformTo(compression.uncompressInputType,this.getCompressedContent());var uncompressedFileData=compression.uncompress(compressedFileData);if(uncompressedFileData.length!==uncompressedSize){throw new Error("Bug : uncompressed data size mismatch")}return uncompressedFileData}},readLocalPart:function(reader){var compression,localExtraFieldsLength;reader.skip(22);this.fileNameLength=reader.readInt(2);localExtraFieldsLength=reader.readInt(2);this.fileName=reader.readString(this.fileNameLength);reader.skip(localExtraFieldsLength);if(this.compressedSize==-1||this.uncompressedSize==-1){throw new Error("Bug or corrupted zip : didn't get enough informations from the central directory "+"(compressedSize == -1 || uncompressedSize == -1)")}compression=utils.findCompression(this.compressionMethod);if(compression===null){throw new Error("Corrupted zip : compression "+utils.pretty(this.compressionMethod)+" unknown (inner file : "+this.fileName+")")}this.decompressed=new CompressedObject;this.decompressed.compressedSize=this.compressedSize;this.decompressed.uncompressedSize=this.uncompressedSize;this.decompressed.crc32=this.crc32;this.decompressed.compressionMethod=this.compressionMethod;this.decompressed.getCompressedContent=this.prepareCompressedContent(reader,reader.index,this.compressedSize,compression);this.decompressed.getContent=this.prepareContent(reader,reader.index,this.compressedSize,compression,this.uncompressedSize);if(this.loadOptions.checkCRC32){this.decompressed=utils.transformTo("string",this.decompressed.getContent());if(jszipProto.crc32(this.decompressed)!==this.crc32){throw new Error("Corrupted zip : CRC32 mismatch")}}},readCentralPart:function(reader){this.versionMadeBy=reader.readString(2);this.versionNeeded=reader.readInt(2);this.bitFlag=reader.readInt(2);this.compressionMethod=reader.readString(2);this.date=reader.readDate();this.crc32=reader.readInt(4);this.compressedSize=reader.readInt(4);this.uncompressedSize=reader.readInt(4);this.fileNameLength=reader.readInt(2);this.extraFieldsLength=reader.readInt(2);this.fileCommentLength=reader.readInt(2);this.diskNumberStart=reader.readInt(2);this.internalFileAttributes=reader.readInt(2);this.externalFileAttributes=reader.readInt(4);this.localHeaderOffset=reader.readInt(4);if(this.isEncrypted()){throw new Error("Encrypted zip are not supported")}this.fileName=reader.readString(this.fileNameLength);this.readExtraFields(reader);this.parseZIP64ExtraField(reader);this.fileComment=reader.readString(this.fileCommentLength);this.dir=this.externalFileAttributes&16?true:false},parseZIP64ExtraField:function(reader){if(!this.extraFields[1]){return}var extraReader=new StringReader(this.extraFields[1].value);if(this.uncompressedSize===utils.MAX_VALUE_32BITS){this.uncompressedSize=extraReader.readInt(8)}if(this.compressedSize===utils.MAX_VALUE_32BITS){this.compressedSize=extraReader.readInt(8)}if(this.localHeaderOffset===utils.MAX_VALUE_32BITS){this.localHeaderOffset=extraReader.readInt(8)}if(this.diskNumberStart===utils.MAX_VALUE_32BITS){this.diskNumberStart=extraReader.readInt(4)}},readExtraFields:function(reader){var start=reader.index,extraFieldId,extraFieldLength,extraFieldValue;this.extraFields=this.extraFields||{};while(reader.index<start+this.extraFieldsLength){extraFieldId=reader.readInt(2);extraFieldLength=reader.readInt(2);extraFieldValue=reader.readString(extraFieldLength);this.extraFields[extraFieldId]={id:extraFieldId,length:extraFieldLength,value:extraFieldValue}}},handleUTF8:function(){if(this.useUTF8()){this.fileName=jszipProto.utf8decode(this.fileName);this.fileComment=jszipProto.utf8decode(this.fileComment)}else{var upath=this.findExtraFieldUnicodePath();if(upath!==null){this.fileName=upath}var ucomment=this.findExtraFieldUnicodeComment();if(ucomment!==null){this.fileComment=ucomment}}},findExtraFieldUnicodePath:function(){var upathField=this.extraFields[28789];if(upathField){var extraReader=new StringReader(upathField.value);if(extraReader.readInt(1)!==1){return null}if(jszipProto.crc32(this.fileName)!==extraReader.readInt(4)){return null}return jszipProto.utf8decode(extraReader.readString(upathField.length-5))}return null},findExtraFieldUnicodeComment:function(){var ucommentField=this.extraFields[25461];if(ucommentField){var extraReader=new StringReader(ucommentField.value);if(extraReader.readInt(1)!==1){return null}if(jszipProto.crc32(this.fileComment)!==extraReader.readInt(4)){return null}return jszipProto.utf8decode(extraReader.readString(ucommentField.length-5))}return null}};module.exports=ZipEntry},{"./compressedObject":2,"./object":13,"./stringReader":15,"./utils":21}],24:[function(_dereq_,module,exports){"use strict";var assign=_dereq_("./lib/utils/common").assign;var deflate=_dereq_("./lib/deflate");var inflate=_dereq_("./lib/inflate");var constants=_dereq_("./lib/zlib/constants");var pako={};assign(pako,deflate,inflate,constants);module.exports=pako},{"./lib/deflate":25,"./lib/inflate":26,"./lib/utils/common":27,"./lib/zlib/constants":30}],25:[function(_dereq_,module,exports){"use strict";var zlib_deflate=_dereq_("./zlib/deflate.js");var utils=_dereq_("./utils/common");var strings=_dereq_("./utils/strings");var msg=_dereq_("./zlib/messages");var zstream=_dereq_("./zlib/zstream");var Z_NO_FLUSH=0;var Z_FINISH=4;var Z_OK=0;var Z_STREAM_END=1;var Z_DEFAULT_COMPRESSION=-1;var Z_DEFAULT_STRATEGY=0;var Z_DEFLATED=8;var Deflate=function(options){this.options=utils.assign({level:Z_DEFAULT_COMPRESSION,method:Z_DEFLATED,chunkSize:16384,windowBits:15,memLevel:8,strategy:Z_DEFAULT_STRATEGY,to:""},options||{});var opt=this.options;if(opt.raw&&opt.windowBits>0){opt.windowBits=-opt.windowBits}else if(opt.gzip&&opt.windowBits>0&&opt.windowBits<16){opt.windowBits+=16}this.err=0;this.msg="";this.ended=false;this.chunks=[];this.strm=new zstream;this.strm.avail_out=0;var status=zlib_deflate.deflateInit2(this.strm,opt.level,opt.method,opt.windowBits,opt.memLevel,opt.strategy);if(status!==Z_OK){throw new Error(msg[status])}if(opt.header){zlib_deflate.deflateSetHeader(this.strm,opt.header)}};Deflate.prototype.push=function(data,mode){var strm=this.strm;var chunkSize=this.options.chunkSize;var status,_mode;if(this.ended){return false}_mode=mode===~~mode?mode:mode===true?Z_FINISH:Z_NO_FLUSH;if(typeof data==="string"){strm.input=strings.string2buf(data)}else{strm.input=data}strm.next_in=0;strm.avail_in=strm.input.length;do{if(strm.avail_out===0){strm.output=new utils.Buf8(chunkSize);strm.next_out=0;strm.avail_out=chunkSize}status=zlib_deflate.deflate(strm,_mode);if(status!==Z_STREAM_END&&status!==Z_OK){this.onEnd(status);this.ended=true;return false}if(strm.avail_out===0||strm.avail_in===0&&_mode===Z_FINISH){if(this.options.to==="string"){this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output,strm.next_out)))}else{this.onData(utils.shrinkBuf(strm.output,strm.next_out))}}}while((strm.avail_in>0||strm.avail_out===0)&&status!==Z_STREAM_END);if(_mode===Z_FINISH){status=zlib_deflate.deflateEnd(this.strm);this.onEnd(status);this.ended=true;return status===Z_OK}return true};Deflate.prototype.onData=function(chunk){this.chunks.push(chunk)};Deflate.prototype.onEnd=function(status){if(status===Z_OK){if(this.options.to==="string"){this.result=this.chunks.join("")}else{this.result=utils.flattenChunks(this.chunks)}}this.chunks=[];this.err=status;this.msg=this.strm.msg};function deflate(input,options){var deflator=new Deflate(options);deflator.push(input,true);if(deflator.err){throw deflator.msg}return deflator.result}function deflateRaw(input,options){options=options||{};options.raw=true;return deflate(input,options)}function gzip(input,options){options=options||{};options.gzip=true;return deflate(input,options)}exports.Deflate=Deflate;exports.deflate=deflate;exports.deflateRaw=deflateRaw;exports.gzip=gzip},{"./utils/common":27,"./utils/strings":28,"./zlib/deflate.js":32,"./zlib/messages":37,"./zlib/zstream":39}],26:[function(_dereq_,module,exports){"use strict";var zlib_inflate=_dereq_("./zlib/inflate.js");var utils=_dereq_("./utils/common");var strings=_dereq_("./utils/strings");var c=_dereq_("./zlib/constants");var msg=_dereq_("./zlib/messages");var zstream=_dereq_("./zlib/zstream");var gzheader=_dereq_("./zlib/gzheader");var Inflate=function(options){this.options=utils.assign({chunkSize:16384,windowBits:0,to:""},options||{});var opt=this.options;if(opt.raw&&opt.windowBits>=0&&opt.windowBits<16){opt.windowBits=-opt.windowBits;if(opt.windowBits===0){opt.windowBits=-15}}if(opt.windowBits>=0&&opt.windowBits<16&&!(options&&options.windowBits)){opt.windowBits+=32}if(opt.windowBits>15&&opt.windowBits<48){if((opt.windowBits&15)===0){opt.windowBits|=15}}this.err=0;this.msg="";this.ended=false;this.chunks=[];this.strm=new zstream;this.strm.avail_out=0;var status=zlib_inflate.inflateInit2(this.strm,opt.windowBits);if(status!==c.Z_OK){throw new Error(msg[status])}this.header=new gzheader;zlib_inflate.inflateGetHeader(this.strm,this.header)};Inflate.prototype.push=function(data,mode){var strm=this.strm;var chunkSize=this.options.chunkSize;var status,_mode;var next_out_utf8,tail,utf8str;if(this.ended){return false}_mode=mode===~~mode?mode:mode===true?c.Z_FINISH:c.Z_NO_FLUSH;if(typeof data==="string"){strm.input=strings.binstring2buf(data)}else{strm.input=data}strm.next_in=0;strm.avail_in=strm.input.length;do{if(strm.avail_out===0){strm.output=new utils.Buf8(chunkSize);strm.next_out=0;strm.avail_out=chunkSize}status=zlib_inflate.inflate(strm,c.Z_NO_FLUSH);if(status!==c.Z_STREAM_END&&status!==c.Z_OK){this.onEnd(status);this.ended=true;return false}if(strm.next_out){if(strm.avail_out===0||status===c.Z_STREAM_END||strm.avail_in===0&&_mode===c.Z_FINISH){if(this.options.to==="string"){next_out_utf8=strings.utf8border(strm.output,strm.next_out);tail=strm.next_out-next_out_utf8;utf8str=strings.buf2string(strm.output,next_out_utf8);strm.next_out=tail;strm.avail_out=chunkSize-tail;if(tail){utils.arraySet(strm.output,strm.output,next_out_utf8,tail,0)}this.onData(utf8str)}else{this.onData(utils.shrinkBuf(strm.output,strm.next_out))}}}}while(strm.avail_in>0&&status!==c.Z_STREAM_END);if(status===c.Z_STREAM_END){_mode=c.Z_FINISH}if(_mode===c.Z_FINISH){status=zlib_inflate.inflateEnd(this.strm);this.onEnd(status);this.ended=true;return status===c.Z_OK}return true};Inflate.prototype.onData=function(chunk){this.chunks.push(chunk)};Inflate.prototype.onEnd=function(status){if(status===c.Z_OK){if(this.options.to==="string"){this.result=this.chunks.join("")}else{this.result=utils.flattenChunks(this.chunks)}}this.chunks=[];this.err=status;this.msg=this.strm.msg};function inflate(input,options){var inflator=new Inflate(options);inflator.push(input,true);if(inflator.err){throw inflator.msg}return inflator.result}function inflateRaw(input,options){options=options||{};options.raw=true;return inflate(input,options)}exports.Inflate=Inflate;exports.inflate=inflate;exports.inflateRaw=inflateRaw;exports.ungzip=inflate},{"./utils/common":27,"./utils/strings":28,"./zlib/constants":30,"./zlib/gzheader":33,"./zlib/inflate.js":35,"./zlib/messages":37,"./zlib/zstream":39}],27:[function(_dereq_,module,exports){"use strict";var TYPED_OK=typeof Uint8Array!=="undefined"&&typeof Uint16Array!=="undefined"&&typeof Int32Array!=="undefined";exports.assign=function(obj){var sources=Array.prototype.slice.call(arguments,1);while(sources.length){var source=sources.shift();if(!source){continue}if(typeof source!=="object"){throw new TypeError(source+"must be non-object")}for(var p in source){if(source.hasOwnProperty(p)){obj[p]=source[p]}}}return obj};exports.shrinkBuf=function(buf,size){if(buf.length===size){return buf}if(buf.subarray){return buf.subarray(0,size)}buf.length=size;return buf};var fnTyped={arraySet:function(dest,src,src_offs,len,dest_offs){if(src.subarray&&dest.subarray){dest.set(src.subarray(src_offs,src_offs+len),dest_offs);return}for(var i=0;i<len;i++){dest[dest_offs+i]=src[src_offs+i]}},flattenChunks:function(chunks){var i,l,len,pos,chunk,result;len=0;for(i=0,l=chunks.length;i<l;i++){len+=chunks[i].length}result=new Uint8Array(len);pos=0;for(i=0,l=chunks.length;i<l;i++){chunk=chunks[i];result.set(chunk,pos);pos+=chunk.length}return result}};var fnUntyped={arraySet:function(dest,src,src_offs,len,dest_offs){for(var i=0;i<len;i++){dest[dest_offs+i]=src[src_offs+i]}},flattenChunks:function(chunks){return[].concat.apply([],chunks)}};exports.setTyped=function(on){if(on){exports.Buf8=Uint8Array;exports.Buf16=Uint16Array;exports.Buf32=Int32Array;exports.assign(exports,fnTyped)}else{exports.Buf8=Array;exports.Buf16=Array;exports.Buf32=Array;exports.assign(exports,fnUntyped)}};exports.setTyped(TYPED_OK)},{}],28:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("./common");var STR_APPLY_OK=true;var STR_APPLY_UIA_OK=true;try{String.fromCharCode.apply(null,[0])}catch(__){STR_APPLY_OK=false}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(__){STR_APPLY_UIA_OK=false}var _utf8len=new utils.Buf8(256);for(var i=0;i<256;i++){_utf8len[i]=i>=252?6:i>=248?5:i>=240?4:i>=224?3:i>=192?2:1}_utf8len[254]=_utf8len[254]=1;exports.string2buf=function(str){var buf,c,c2,m_pos,i,str_len=str.length,buf_len=0;for(m_pos=0;m_pos<str_len;m_pos++){c=str.charCodeAt(m_pos);if((c&64512)===55296&&m_pos+1<str_len){c2=str.charCodeAt(m_pos+1);if((c2&64512)===56320){c=65536+(c-55296<<10)+(c2-56320);m_pos++}}buf_len+=c<128?1:c<2048?2:c<65536?3:4}buf=new utils.Buf8(buf_len);for(i=0,m_pos=0;i<buf_len;m_pos++){c=str.charCodeAt(m_pos);if((c&64512)===55296&&m_pos+1<str_len){c2=str.charCodeAt(m_pos+1);if((c2&64512)===56320){c=65536+(c-55296<<10)+(c2-56320);m_pos++}}if(c<128){buf[i++]=c}else if(c<2048){buf[i++]=192|c>>>6;buf[i++]=128|c&63}else if(c<65536){buf[i++]=224|c>>>12;buf[i++]=128|c>>>6&63;buf[i++]=128|c&63}else{buf[i++]=240|c>>>18;buf[i++]=128|c>>>12&63;buf[i++]=128|c>>>6&63;buf[i++]=128|c&63}}return buf};function buf2binstring(buf,len){if(len<65537){if(buf.subarray&&STR_APPLY_UIA_OK||!buf.subarray&&STR_APPLY_OK){return String.fromCharCode.apply(null,utils.shrinkBuf(buf,len))}}var result="";for(var i=0;i<len;i++){result+=String.fromCharCode(buf[i])}return result}exports.buf2binstring=function(buf){return buf2binstring(buf,buf.length)};exports.binstring2buf=function(str){var buf=new utils.Buf8(str.length);for(var i=0,len=buf.length;i<len;i++){buf[i]=str.charCodeAt(i)}return buf};exports.buf2string=function(buf,max){var i,out,c,c_len;var len=max||buf.length;var utf16buf=new Array(len*2);for(out=0,i=0;i<len;){c=buf[i++];if(c<128){utf16buf[out++]=c;continue}c_len=_utf8len[c];if(c_len>4){utf16buf[out++]=65533;i+=c_len-1;continue}c&=c_len===2?31:c_len===3?15:7;while(c_len>1&&i<len){c=c<<6|buf[i++]&63;c_len--}if(c_len>1){utf16buf[out++]=65533;continue}if(c<65536){utf16buf[out++]=c}else{c-=65536;utf16buf[out++]=55296|c>>10&1023;utf16buf[out++]=56320|c&1023}}return buf2binstring(utf16buf,out)};exports.utf8border=function(buf,max){var pos;max=max||buf.length;if(max>buf.length){max=buf.length}pos=max-1;while(pos>=0&&(buf[pos]&192)===128){pos--}if(pos<0){return max}if(pos===0){return max}return pos+_utf8len[buf[pos]]>max?pos:max}},{"./common":27}],29:[function(_dereq_,module,exports){"use strict";function adler32(adler,buf,len,pos){var s1=adler&65535|0,s2=adler>>>16&65535|0,n=0;while(len!==0){n=len>2e3?2e3:len;len-=n;do{s1=s1+buf[pos++]|0;s2=s2+s1|0}while(--n);s1%=65521;s2%=65521}return s1|s2<<16|0}module.exports=adler32},{}],30:[function(_dereq_,module,exports){module.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],31:[function(_dereq_,module,exports){"use strict";function makeTable(){var c,table=[];for(var n=0;n<256;n++){c=n;for(var k=0;k<8;k++){c=c&1?3988292384^c>>>1:c>>>1}table[n]=c}return table}var crcTable=makeTable();function crc32(crc,buf,len,pos){var t=crcTable,end=pos+len;crc=crc^-1;for(var i=pos;i<end;i++){crc=crc>>>8^t[(crc^buf[i])&255]}return crc^-1}module.exports=crc32},{}],32:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("../utils/common");var trees=_dereq_("./trees");var adler32=_dereq_("./adler32");var crc32=_dereq_("./crc32");var msg=_dereq_("./messages");var Z_NO_FLUSH=0;var Z_PARTIAL_FLUSH=1;var Z_FULL_FLUSH=3;var Z_FINISH=4;var Z_BLOCK=5;var Z_OK=0;var Z_STREAM_END=1;var Z_STREAM_ERROR=-2;var Z_DATA_ERROR=-3;var Z_BUF_ERROR=-5;var Z_DEFAULT_COMPRESSION=-1;var Z_FILTERED=1;var Z_HUFFMAN_ONLY=2;var Z_RLE=3;var Z_FIXED=4;var Z_DEFAULT_STRATEGY=0;var Z_UNKNOWN=2;var Z_DEFLATED=8;var MAX_MEM_LEVEL=9;var MAX_WBITS=15;var DEF_MEM_LEVEL=8;var LENGTH_CODES=29;var LITERALS=256;var L_CODES=LITERALS+1+LENGTH_CODES;var D_CODES=30;var BL_CODES=19;var HEAP_SIZE=2*L_CODES+1;var MAX_BITS=15;var MIN_MATCH=3;var MAX_MATCH=258;var MIN_LOOKAHEAD=MAX_MATCH+MIN_MATCH+1;var PRESET_DICT=32;var INIT_STATE=42;var EXTRA_STATE=69;var NAME_STATE=73;var COMMENT_STATE=91;var HCRC_STATE=103;var BUSY_STATE=113;var FINISH_STATE=666;var BS_NEED_MORE=1;var BS_BLOCK_DONE=2;var BS_FINISH_STARTED=3;var BS_FINISH_DONE=4;var OS_CODE=3;function err(strm,errorCode){strm.msg=msg[errorCode];return errorCode}function rank(f){return(f<<1)-(f>4?9:0)}function zero(buf){var len=buf.length;while(--len>=0){buf[len]=0}}function flush_pending(strm){var s=strm.state;var len=s.pending;if(len>strm.avail_out){len=strm.avail_out}if(len===0){return}utils.arraySet(strm.output,s.pending_buf,s.pending_out,len,strm.next_out);strm.next_out+=len;s.pending_out+=len;strm.total_out+=len;strm.avail_out-=len;s.pending-=len;if(s.pending===0){s.pending_out=0}}function flush_block_only(s,last){trees._tr_flush_block(s,s.block_start>=0?s.block_start:-1,s.strstart-s.block_start,last);s.block_start=s.strstart;flush_pending(s.strm)}function put_byte(s,b){s.pending_buf[s.pending++]=b}function putShortMSB(s,b){s.pending_buf[s.pending++]=b>>>8&255;s.pending_buf[s.pending++]=b&255}function read_buf(strm,buf,start,size){var len=strm.avail_in;if(len>size){len=size}if(len===0){return 0}strm.avail_in-=len;utils.arraySet(buf,strm.input,strm.next_in,len,start);if(strm.state.wrap===1){strm.adler=adler32(strm.adler,buf,len,start)}else if(strm.state.wrap===2){strm.adler=crc32(strm.adler,buf,len,start)}strm.next_in+=len;strm.total_in+=len;return len}function longest_match(s,cur_match){var chain_length=s.max_chain_length;var scan=s.strstart;var match;var len;var best_len=s.prev_length;var nice_match=s.nice_match;var limit=s.strstart>s.w_size-MIN_LOOKAHEAD?s.strstart-(s.w_size-MIN_LOOKAHEAD):0;var _win=s.window;var wmask=s.w_mask;var prev=s.prev;var strend=s.strstart+MAX_MATCH;var scan_end1=_win[scan+best_len-1];var scan_end=_win[scan+best_len];if(s.prev_length>=s.good_match){chain_length>>=2}if(nice_match>s.lookahead){nice_match=s.lookahead}do{match=cur_match;if(_win[match+best_len]!==scan_end||_win[match+best_len-1]!==scan_end1||_win[match]!==_win[scan]||_win[++match]!==_win[scan+1]){continue}scan+=2;match++;do{}while(_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&scan<strend);len=MAX_MATCH-(strend-scan);scan=strend-MAX_MATCH;if(len>best_len){s.match_start=cur_match;best_len=len;if(len>=nice_match){break}scan_end1=_win[scan+best_len-1];scan_end=_win[scan+best_len]}}while((cur_match=prev[cur_match&wmask])>limit&&--chain_length!==0);if(best_len<=s.lookahead){return best_len}return s.lookahead}function fill_window(s){var _w_size=s.w_size;var p,n,m,more,str;do{more=s.window_size-s.lookahead-s.strstart;if(s.strstart>=_w_size+(_w_size-MIN_LOOKAHEAD)){utils.arraySet(s.window,s.window,_w_size,_w_size,0);s.match_start-=_w_size;s.strstart-=_w_size;s.block_start-=_w_size;n=s.hash_size;p=n;do{m=s.head[--p];s.head[p]=m>=_w_size?m-_w_size:0}while(--n);n=_w_size;p=n;do{m=s.prev[--p];s.prev[p]=m>=_w_size?m-_w_size:0}while(--n);more+=_w_size}if(s.strm.avail_in===0){break}n=read_buf(s.strm,s.window,s.strstart+s.lookahead,more);s.lookahead+=n;if(s.lookahead+s.insert>=MIN_MATCH){str=s.strstart-s.insert;s.ins_h=s.window[str];s.ins_h=(s.ins_h<<s.hash_shift^s.window[str+1])&s.hash_mask;while(s.insert){s.ins_h=(s.ins_h<<s.hash_shift^s.window[str+MIN_MATCH-1])&s.hash_mask;s.prev[str&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=str;str++;s.insert--;if(s.lookahead+s.insert<MIN_MATCH){break}}}}while(s.lookahead<MIN_LOOKAHEAD&&s.strm.avail_in!==0)}function deflate_stored(s,flush){var max_block_size=65535;if(max_block_size>s.pending_buf_size-5){max_block_size=s.pending_buf_size-5}for(;;){if(s.lookahead<=1){fill_window(s);if(s.lookahead===0&&flush===Z_NO_FLUSH){return BS_NEED_MORE}if(s.lookahead===0){break}}s.strstart+=s.lookahead;s.lookahead=0;var max_start=s.block_start+max_block_size;if(s.strstart===0||s.strstart>=max_start){s.lookahead=s.strstart-max_start;s.strstart=max_start;flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}if(s.strstart-s.block_start>=s.w_size-MIN_LOOKAHEAD){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}}s.insert=0;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED}return BS_FINISH_DONE}if(s.strstart>s.block_start){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}return BS_NEED_MORE}function deflate_fast(s,flush){var hash_head;var bflush;for(;;){if(s.lookahead<MIN_LOOKAHEAD){fill_window(s);if(s.lookahead<MIN_LOOKAHEAD&&flush===Z_NO_FLUSH){return BS_NEED_MORE}if(s.lookahead===0){break}}hash_head=0;if(s.lookahead>=MIN_MATCH){s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+MIN_MATCH-1])&s.hash_mask;hash_head=s.prev[s.strstart&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=s.strstart}if(hash_head!==0&&s.strstart-hash_head<=s.w_size-MIN_LOOKAHEAD){s.match_length=longest_match(s,hash_head)}if(s.match_length>=MIN_MATCH){bflush=trees._tr_tally(s,s.strstart-s.match_start,s.match_length-MIN_MATCH);s.lookahead-=s.match_length;if(s.match_length<=s.max_lazy_match&&s.lookahead>=MIN_MATCH){s.match_length--;do{s.strstart++;s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+MIN_MATCH-1])&s.hash_mask;hash_head=s.prev[s.strstart&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=s.strstart}while(--s.match_length!==0);s.strstart++}else{s.strstart+=s.match_length;s.match_length=0;s.ins_h=s.window[s.strstart];s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+1])&s.hash_mask}}else{bflush=trees._tr_tally(s,0,s.window[s.strstart]);s.lookahead--;s.strstart++}if(bflush){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}}s.insert=s.strstart<MIN_MATCH-1?s.strstart:MIN_MATCH-1;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED}return BS_FINISH_DONE}if(s.last_lit){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}return BS_BLOCK_DONE}function deflate_slow(s,flush){var hash_head;var bflush;var max_insert;for(;;){if(s.lookahead<MIN_LOOKAHEAD){fill_window(s);if(s.lookahead<MIN_LOOKAHEAD&&flush===Z_NO_FLUSH){return BS_NEED_MORE}if(s.lookahead===0){break}}hash_head=0;if(s.lookahead>=MIN_MATCH){s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+MIN_MATCH-1])&s.hash_mask;hash_head=s.prev[s.strstart&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=s.strstart}s.prev_length=s.match_length;s.prev_match=s.match_start;s.match_length=MIN_MATCH-1;if(hash_head!==0&&s.prev_length<s.max_lazy_match&&s.strstart-hash_head<=s.w_size-MIN_LOOKAHEAD){s.match_length=longest_match(s,hash_head);if(s.match_length<=5&&(s.strategy===Z_FILTERED||s.match_length===MIN_MATCH&&s.strstart-s.match_start>4096)){s.match_length=MIN_MATCH-1}}if(s.prev_length>=MIN_MATCH&&s.match_length<=s.prev_length){max_insert=s.strstart+s.lookahead-MIN_MATCH;bflush=trees._tr_tally(s,s.strstart-1-s.prev_match,s.prev_length-MIN_MATCH);s.lookahead-=s.prev_length-1;s.prev_length-=2;do{if(++s.strstart<=max_insert){s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+MIN_MATCH-1])&s.hash_mask;hash_head=s.prev[s.strstart&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=s.strstart}}while(--s.prev_length!==0);s.match_available=0;s.match_length=MIN_MATCH-1;s.strstart++;if(bflush){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}}else if(s.match_available){bflush=trees._tr_tally(s,0,s.window[s.strstart-1]);if(bflush){flush_block_only(s,false)}s.strstart++;s.lookahead--;if(s.strm.avail_out===0){return BS_NEED_MORE}}else{s.match_available=1;s.strstart++;s.lookahead--}}if(s.match_available){bflush=trees._tr_tally(s,0,s.window[s.strstart-1]);s.match_available=0}s.insert=s.strstart<MIN_MATCH-1?s.strstart:MIN_MATCH-1;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED}return BS_FINISH_DONE}if(s.last_lit){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}return BS_BLOCK_DONE}function deflate_rle(s,flush){var bflush;var prev;var scan,strend;var _win=s.window;for(;;){if(s.lookahead<=MAX_MATCH){fill_window(s);if(s.lookahead<=MAX_MATCH&&flush===Z_NO_FLUSH){return BS_NEED_MORE}if(s.lookahead===0){break}}s.match_length=0;if(s.lookahead>=MIN_MATCH&&s.strstart>0){scan=s.strstart-1;prev=_win[scan];if(prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]){strend=s.strstart+MAX_MATCH;do{}while(prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&scan<strend);s.match_length=MAX_MATCH-(strend-scan);if(s.match_length>s.lookahead){s.match_length=s.lookahead}}}if(s.match_length>=MIN_MATCH){bflush=trees._tr_tally(s,1,s.match_length-MIN_MATCH);s.lookahead-=s.match_length;s.strstart+=s.match_length;s.match_length=0}else{bflush=trees._tr_tally(s,0,s.window[s.strstart]);s.lookahead--;s.strstart++}if(bflush){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}}s.insert=0;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED}return BS_FINISH_DONE}if(s.last_lit){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}return BS_BLOCK_DONE}function deflate_huff(s,flush){
+var bflush;for(;;){if(s.lookahead===0){fill_window(s);if(s.lookahead===0){if(flush===Z_NO_FLUSH){return BS_NEED_MORE}break}}s.match_length=0;bflush=trees._tr_tally(s,0,s.window[s.strstart]);s.lookahead--;s.strstart++;if(bflush){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}}s.insert=0;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED}return BS_FINISH_DONE}if(s.last_lit){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}return BS_BLOCK_DONE}var Config=function(good_length,max_lazy,nice_length,max_chain,func){this.good_length=good_length;this.max_lazy=max_lazy;this.nice_length=nice_length;this.max_chain=max_chain;this.func=func};var configuration_table;configuration_table=[new Config(0,0,0,0,deflate_stored),new Config(4,4,8,4,deflate_fast),new Config(4,5,16,8,deflate_fast),new Config(4,6,32,32,deflate_fast),new Config(4,4,16,16,deflate_slow),new Config(8,16,32,32,deflate_slow),new Config(8,16,128,128,deflate_slow),new Config(8,32,128,256,deflate_slow),new Config(32,128,258,1024,deflate_slow),new Config(32,258,258,4096,deflate_slow)];function lm_init(s){s.window_size=2*s.w_size;zero(s.head);s.max_lazy_match=configuration_table[s.level].max_lazy;s.good_match=configuration_table[s.level].good_length;s.nice_match=configuration_table[s.level].nice_length;s.max_chain_length=configuration_table[s.level].max_chain;s.strstart=0;s.block_start=0;s.lookahead=0;s.insert=0;s.match_length=s.prev_length=MIN_MATCH-1;s.match_available=0;s.ins_h=0}function DeflateState(){this.strm=null;this.status=0;this.pending_buf=null;this.pending_buf_size=0;this.pending_out=0;this.pending=0;this.wrap=0;this.gzhead=null;this.gzindex=0;this.method=Z_DEFLATED;this.last_flush=-1;this.w_size=0;this.w_bits=0;this.w_mask=0;this.window=null;this.window_size=0;this.prev=null;this.head=null;this.ins_h=0;this.hash_size=0;this.hash_bits=0;this.hash_mask=0;this.hash_shift=0;this.block_start=0;this.match_length=0;this.prev_match=0;this.match_available=0;this.strstart=0;this.match_start=0;this.lookahead=0;this.prev_length=0;this.max_chain_length=0;this.max_lazy_match=0;this.level=0;this.strategy=0;this.good_match=0;this.nice_match=0;this.dyn_ltree=new utils.Buf16(HEAP_SIZE*2);this.dyn_dtree=new utils.Buf16((2*D_CODES+1)*2);this.bl_tree=new utils.Buf16((2*BL_CODES+1)*2);zero(this.dyn_ltree);zero(this.dyn_dtree);zero(this.bl_tree);this.l_desc=null;this.d_desc=null;this.bl_desc=null;this.bl_count=new utils.Buf16(MAX_BITS+1);this.heap=new utils.Buf16(2*L_CODES+1);zero(this.heap);this.heap_len=0;this.heap_max=0;this.depth=new utils.Buf16(2*L_CODES+1);zero(this.depth);this.l_buf=0;this.lit_bufsize=0;this.last_lit=0;this.d_buf=0;this.opt_len=0;this.static_len=0;this.matches=0;this.insert=0;this.bi_buf=0;this.bi_valid=0}function deflateResetKeep(strm){var s;if(!strm||!strm.state){return err(strm,Z_STREAM_ERROR)}strm.total_in=strm.total_out=0;strm.data_type=Z_UNKNOWN;s=strm.state;s.pending=0;s.pending_out=0;if(s.wrap<0){s.wrap=-s.wrap}s.status=s.wrap?INIT_STATE:BUSY_STATE;strm.adler=s.wrap===2?0:1;s.last_flush=Z_NO_FLUSH;trees._tr_init(s);return Z_OK}function deflateReset(strm){var ret=deflateResetKeep(strm);if(ret===Z_OK){lm_init(strm.state)}return ret}function deflateSetHeader(strm,head){if(!strm||!strm.state){return Z_STREAM_ERROR}if(strm.state.wrap!==2){return Z_STREAM_ERROR}strm.state.gzhead=head;return Z_OK}function deflateInit2(strm,level,method,windowBits,memLevel,strategy){if(!strm){return Z_STREAM_ERROR}var wrap=1;if(level===Z_DEFAULT_COMPRESSION){level=6}if(windowBits<0){wrap=0;windowBits=-windowBits}else if(windowBits>15){wrap=2;windowBits-=16}if(memLevel<1||memLevel>MAX_MEM_LEVEL||method!==Z_DEFLATED||windowBits<8||windowBits>15||level<0||level>9||strategy<0||strategy>Z_FIXED){return err(strm,Z_STREAM_ERROR)}if(windowBits===8){windowBits=9}var s=new DeflateState;strm.state=s;s.strm=strm;s.wrap=wrap;s.gzhead=null;s.w_bits=windowBits;s.w_size=1<<s.w_bits;s.w_mask=s.w_size-1;s.hash_bits=memLevel+7;s.hash_size=1<<s.hash_bits;s.hash_mask=s.hash_size-1;s.hash_shift=~~((s.hash_bits+MIN_MATCH-1)/MIN_MATCH);s.window=new utils.Buf8(s.w_size*2);s.head=new utils.Buf16(s.hash_size);s.prev=new utils.Buf16(s.w_size);s.lit_bufsize=1<<memLevel+6;s.pending_buf_size=s.lit_bufsize*4;s.pending_buf=new utils.Buf8(s.pending_buf_size);s.d_buf=s.lit_bufsize>>1;s.l_buf=(1+2)*s.lit_bufsize;s.level=level;s.strategy=strategy;s.method=method;return deflateReset(strm)}function deflateInit(strm,level){return deflateInit2(strm,level,Z_DEFLATED,MAX_WBITS,DEF_MEM_LEVEL,Z_DEFAULT_STRATEGY)}function deflate(strm,flush){var old_flush,s;var beg,val;if(!strm||!strm.state||flush>Z_BLOCK||flush<0){return strm?err(strm,Z_STREAM_ERROR):Z_STREAM_ERROR}s=strm.state;if(!strm.output||!strm.input&&strm.avail_in!==0||s.status===FINISH_STATE&&flush!==Z_FINISH){return err(strm,strm.avail_out===0?Z_BUF_ERROR:Z_STREAM_ERROR)}s.strm=strm;old_flush=s.last_flush;s.last_flush=flush;if(s.status===INIT_STATE){if(s.wrap===2){strm.adler=0;put_byte(s,31);put_byte(s,139);put_byte(s,8);if(!s.gzhead){put_byte(s,0);put_byte(s,0);put_byte(s,0);put_byte(s,0);put_byte(s,0);put_byte(s,s.level===9?2:s.strategy>=Z_HUFFMAN_ONLY||s.level<2?4:0);put_byte(s,OS_CODE);s.status=BUSY_STATE}else{put_byte(s,(s.gzhead.text?1:0)+(s.gzhead.hcrc?2:0)+(!s.gzhead.extra?0:4)+(!s.gzhead.name?0:8)+(!s.gzhead.comment?0:16));put_byte(s,s.gzhead.time&255);put_byte(s,s.gzhead.time>>8&255);put_byte(s,s.gzhead.time>>16&255);put_byte(s,s.gzhead.time>>24&255);put_byte(s,s.level===9?2:s.strategy>=Z_HUFFMAN_ONLY||s.level<2?4:0);put_byte(s,s.gzhead.os&255);if(s.gzhead.extra&&s.gzhead.extra.length){put_byte(s,s.gzhead.extra.length&255);put_byte(s,s.gzhead.extra.length>>8&255)}if(s.gzhead.hcrc){strm.adler=crc32(strm.adler,s.pending_buf,s.pending,0)}s.gzindex=0;s.status=EXTRA_STATE}}else{var header=Z_DEFLATED+(s.w_bits-8<<4)<<8;var level_flags=-1;if(s.strategy>=Z_HUFFMAN_ONLY||s.level<2){level_flags=0}else if(s.level<6){level_flags=1}else if(s.level===6){level_flags=2}else{level_flags=3}header|=level_flags<<6;if(s.strstart!==0){header|=PRESET_DICT}header+=31-header%31;s.status=BUSY_STATE;putShortMSB(s,header);if(s.strstart!==0){putShortMSB(s,strm.adler>>>16);putShortMSB(s,strm.adler&65535)}strm.adler=1}}if(s.status===EXTRA_STATE){if(s.gzhead.extra){beg=s.pending;while(s.gzindex<(s.gzhead.extra.length&65535)){if(s.pending===s.pending_buf_size){if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}flush_pending(strm);beg=s.pending;if(s.pending===s.pending_buf_size){break}}put_byte(s,s.gzhead.extra[s.gzindex]&255);s.gzindex++}if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}if(s.gzindex===s.gzhead.extra.length){s.gzindex=0;s.status=NAME_STATE}}else{s.status=NAME_STATE}}if(s.status===NAME_STATE){if(s.gzhead.name){beg=s.pending;do{if(s.pending===s.pending_buf_size){if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}flush_pending(strm);beg=s.pending;if(s.pending===s.pending_buf_size){val=1;break}}if(s.gzindex<s.gzhead.name.length){val=s.gzhead.name.charCodeAt(s.gzindex++)&255}else{val=0}put_byte(s,val)}while(val!==0);if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}if(val===0){s.gzindex=0;s.status=COMMENT_STATE}}else{s.status=COMMENT_STATE}}if(s.status===COMMENT_STATE){if(s.gzhead.comment){beg=s.pending;do{if(s.pending===s.pending_buf_size){if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}flush_pending(strm);beg=s.pending;if(s.pending===s.pending_buf_size){val=1;break}}if(s.gzindex<s.gzhead.comment.length){val=s.gzhead.comment.charCodeAt(s.gzindex++)&255}else{val=0}put_byte(s,val)}while(val!==0);if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}if(val===0){s.status=HCRC_STATE}}else{s.status=HCRC_STATE}}if(s.status===HCRC_STATE){if(s.gzhead.hcrc){if(s.pending+2>s.pending_buf_size){flush_pending(strm)}if(s.pending+2<=s.pending_buf_size){put_byte(s,strm.adler&255);put_byte(s,strm.adler>>8&255);strm.adler=0;s.status=BUSY_STATE}}else{s.status=BUSY_STATE}}if(s.pending!==0){flush_pending(strm);if(strm.avail_out===0){s.last_flush=-1;return Z_OK}}else if(strm.avail_in===0&&rank(flush)<=rank(old_flush)&&flush!==Z_FINISH){return err(strm,Z_BUF_ERROR)}if(s.status===FINISH_STATE&&strm.avail_in!==0){return err(strm,Z_BUF_ERROR)}if(strm.avail_in!==0||s.lookahead!==0||flush!==Z_NO_FLUSH&&s.status!==FINISH_STATE){var bstate=s.strategy===Z_HUFFMAN_ONLY?deflate_huff(s,flush):s.strategy===Z_RLE?deflate_rle(s,flush):configuration_table[s.level].func(s,flush);if(bstate===BS_FINISH_STARTED||bstate===BS_FINISH_DONE){s.status=FINISH_STATE}if(bstate===BS_NEED_MORE||bstate===BS_FINISH_STARTED){if(strm.avail_out===0){s.last_flush=-1}return Z_OK}if(bstate===BS_BLOCK_DONE){if(flush===Z_PARTIAL_FLUSH){trees._tr_align(s)}else if(flush!==Z_BLOCK){trees._tr_stored_block(s,0,0,false);if(flush===Z_FULL_FLUSH){zero(s.head);if(s.lookahead===0){s.strstart=0;s.block_start=0;s.insert=0}}}flush_pending(strm);if(strm.avail_out===0){s.last_flush=-1;return Z_OK}}}if(flush!==Z_FINISH){return Z_OK}if(s.wrap<=0){return Z_STREAM_END}if(s.wrap===2){put_byte(s,strm.adler&255);put_byte(s,strm.adler>>8&255);put_byte(s,strm.adler>>16&255);put_byte(s,strm.adler>>24&255);put_byte(s,strm.total_in&255);put_byte(s,strm.total_in>>8&255);put_byte(s,strm.total_in>>16&255);put_byte(s,strm.total_in>>24&255)}else{putShortMSB(s,strm.adler>>>16);putShortMSB(s,strm.adler&65535)}flush_pending(strm);if(s.wrap>0){s.wrap=-s.wrap}return s.pending!==0?Z_OK:Z_STREAM_END}function deflateEnd(strm){var status;if(!strm||!strm.state){return Z_STREAM_ERROR}status=strm.state.status;if(status!==INIT_STATE&&status!==EXTRA_STATE&&status!==NAME_STATE&&status!==COMMENT_STATE&&status!==HCRC_STATE&&status!==BUSY_STATE&&status!==FINISH_STATE){return err(strm,Z_STREAM_ERROR)}strm.state=null;return status===BUSY_STATE?err(strm,Z_DATA_ERROR):Z_OK}exports.deflateInit=deflateInit;exports.deflateInit2=deflateInit2;exports.deflateReset=deflateReset;exports.deflateResetKeep=deflateResetKeep;exports.deflateSetHeader=deflateSetHeader;exports.deflate=deflate;exports.deflateEnd=deflateEnd;exports.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":27,"./adler32":29,"./crc32":31,"./messages":37,"./trees":38}],33:[function(_dereq_,module,exports){"use strict";function GZheader(){this.text=0;this.time=0;this.xflags=0;this.os=0;this.extra=null;this.extra_len=0;this.name="";this.comment="";this.hcrc=0;this.done=false}module.exports=GZheader},{}],34:[function(_dereq_,module,exports){"use strict";var BAD=30;var TYPE=12;module.exports=function inflate_fast(strm,start){var state;var _in;var last;var _out;var beg;var end;var dmax;var wsize;var whave;var wnext;var window;var hold;var bits;var lcode;var dcode;var lmask;var dmask;var here;var op;var len;var dist;var from;var from_source;var input,output;state=strm.state;_in=strm.next_in;input=strm.input;last=_in+(strm.avail_in-5);_out=strm.next_out;output=strm.output;beg=_out-(start-strm.avail_out);end=_out+(strm.avail_out-257);dmax=state.dmax;wsize=state.wsize;whave=state.whave;wnext=state.wnext;window=state.window;hold=state.hold;bits=state.bits;lcode=state.lencode;dcode=state.distcode;lmask=(1<<state.lenbits)-1;dmask=(1<<state.distbits)-1;top:do{if(bits<15){hold+=input[_in++]<<bits;bits+=8;hold+=input[_in++]<<bits;bits+=8}here=lcode[hold&lmask];dolen:for(;;){op=here>>>24;hold>>>=op;bits-=op;op=here>>>16&255;if(op===0){output[_out++]=here&65535}else if(op&16){len=here&65535;op&=15;if(op){if(bits<op){hold+=input[_in++]<<bits;bits+=8}len+=hold&(1<<op)-1;hold>>>=op;bits-=op}if(bits<15){hold+=input[_in++]<<bits;bits+=8;hold+=input[_in++]<<bits;bits+=8}here=dcode[hold&dmask];dodist:for(;;){op=here>>>24;hold>>>=op;bits-=op;op=here>>>16&255;if(op&16){dist=here&65535;op&=15;if(bits<op){hold+=input[_in++]<<bits;bits+=8;if(bits<op){hold+=input[_in++]<<bits;bits+=8}}dist+=hold&(1<<op)-1;if(dist>dmax){strm.msg="invalid distance too far back";state.mode=BAD;break top}hold>>>=op;bits-=op;op=_out-beg;if(dist>op){op=dist-op;if(op>whave){if(state.sane){strm.msg="invalid distance too far back";state.mode=BAD;break top}}from=0;from_source=window;if(wnext===0){from+=wsize-op;if(op<len){len-=op;do{output[_out++]=window[from++]}while(--op);from=_out-dist;from_source=output}}else if(wnext<op){from+=wsize+wnext-op;op-=wnext;if(op<len){len-=op;do{output[_out++]=window[from++]}while(--op);from=0;if(wnext<len){op=wnext;len-=op;do{output[_out++]=window[from++]}while(--op);from=_out-dist;from_source=output}}}else{from+=wnext-op;if(op<len){len-=op;do{output[_out++]=window[from++]}while(--op);from=_out-dist;from_source=output}}while(len>2){output[_out++]=from_source[from++];output[_out++]=from_source[from++];output[_out++]=from_source[from++];len-=3}if(len){output[_out++]=from_source[from++];if(len>1){output[_out++]=from_source[from++]}}}else{from=_out-dist;do{output[_out++]=output[from++];output[_out++]=output[from++];output[_out++]=output[from++];len-=3}while(len>2);if(len){output[_out++]=output[from++];if(len>1){output[_out++]=output[from++]}}}}else if((op&64)===0){here=dcode[(here&65535)+(hold&(1<<op)-1)];continue dodist}else{strm.msg="invalid distance code";state.mode=BAD;break top}break}}else if((op&64)===0){here=lcode[(here&65535)+(hold&(1<<op)-1)];continue dolen}else if(op&32){state.mode=TYPE;break top}else{strm.msg="invalid literal/length code";state.mode=BAD;break top}break}}while(_in<last&&_out<end);len=bits>>3;_in-=len;bits-=len<<3;hold&=(1<<bits)-1;strm.next_in=_in;strm.next_out=_out;strm.avail_in=_in<last?5+(last-_in):5-(_in-last);strm.avail_out=_out<end?257+(end-_out):257-(_out-end);state.hold=hold;state.bits=bits;return}},{}],35:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("../utils/common");var adler32=_dereq_("./adler32");var crc32=_dereq_("./crc32");var inflate_fast=_dereq_("./inffast");var inflate_table=_dereq_("./inftrees");var CODES=0;var LENS=1;var DISTS=2;var Z_FINISH=4;var Z_BLOCK=5;var Z_TREES=6;var Z_OK=0;var Z_STREAM_END=1;var Z_NEED_DICT=2;var Z_STREAM_ERROR=-2;var Z_DATA_ERROR=-3;var Z_MEM_ERROR=-4;var Z_BUF_ERROR=-5;var Z_DEFLATED=8;var HEAD=1;var FLAGS=2;var TIME=3;var OS=4;var EXLEN=5;var EXTRA=6;var NAME=7;var COMMENT=8;var HCRC=9;var DICTID=10;var DICT=11;var TYPE=12;var TYPEDO=13;var STORED=14;var COPY_=15;var COPY=16;var TABLE=17;var LENLENS=18;var CODELENS=19;var LEN_=20;var LEN=21;var LENEXT=22;var DIST=23;var DISTEXT=24;var MATCH=25;var LIT=26;var CHECK=27;var LENGTH=28;var DONE=29;var BAD=30;var MEM=31;var SYNC=32;var ENOUGH_LENS=852;var ENOUGH_DISTS=592;var MAX_WBITS=15;var DEF_WBITS=MAX_WBITS;function ZSWAP32(q){return(q>>>24&255)+(q>>>8&65280)+((q&65280)<<8)+((q&255)<<24)}function InflateState(){this.mode=0;this.last=false;this.wrap=0;this.havedict=false;this.flags=0;this.dmax=0;this.check=0;this.total=0;this.head=null;this.wbits=0;this.wsize=0;this.whave=0;this.wnext=0;this.window=null;this.hold=0;this.bits=0;this.length=0;this.offset=0;this.extra=0;this.lencode=null;this.distcode=null;this.lenbits=0;this.distbits=0;this.ncode=0;this.nlen=0;this.ndist=0;this.have=0;this.next=null;this.lens=new utils.Buf16(320);this.work=new utils.Buf16(288);this.lendyn=null;this.distdyn=null;this.sane=0;this.back=0;this.was=0}function inflateResetKeep(strm){var state;if(!strm||!strm.state){return Z_STREAM_ERROR}state=strm.state;strm.total_in=strm.total_out=state.total=0;strm.msg="";if(state.wrap){strm.adler=state.wrap&1}state.mode=HEAD;state.last=0;state.havedict=0;state.dmax=32768;state.head=null;state.hold=0;state.bits=0;state.lencode=state.lendyn=new utils.Buf32(ENOUGH_LENS);state.distcode=state.distdyn=new utils.Buf32(ENOUGH_DISTS);state.sane=1;state.back=-1;return Z_OK}function inflateReset(strm){var state;if(!strm||!strm.state){return Z_STREAM_ERROR}state=strm.state;state.wsize=0;state.whave=0;state.wnext=0;return inflateResetKeep(strm)}function inflateReset2(strm,windowBits){var wrap;var state;if(!strm||!strm.state){return Z_STREAM_ERROR}state=strm.state;if(windowBits<0){wrap=0;windowBits=-windowBits}else{wrap=(windowBits>>4)+1;if(windowBits<48){windowBits&=15}}if(windowBits&&(windowBits<8||windowBits>15)){return Z_STREAM_ERROR}if(state.window!==null&&state.wbits!==windowBits){state.window=null}state.wrap=wrap;state.wbits=windowBits;return inflateReset(strm)}function inflateInit2(strm,windowBits){var ret;var state;if(!strm){return Z_STREAM_ERROR}state=new InflateState;strm.state=state;state.window=null;ret=inflateReset2(strm,windowBits);if(ret!==Z_OK){strm.state=null}return ret}function inflateInit(strm){return inflateInit2(strm,DEF_WBITS)}var virgin=true;var lenfix,distfix;function fixedtables(state){if(virgin){var sym;lenfix=new utils.Buf32(512);distfix=new utils.Buf32(32);sym=0;while(sym<144){state.lens[sym++]=8}while(sym<256){state.lens[sym++]=9}while(sym<280){state.lens[sym++]=7}while(sym<288){state.lens[sym++]=8}inflate_table(LENS,state.lens,0,288,lenfix,0,state.work,{bits:9});sym=0;while(sym<32){state.lens[sym++]=5}inflate_table(DISTS,state.lens,0,32,distfix,0,state.work,{bits:5});virgin=false}state.lencode=lenfix;state.lenbits=9;state.distcode=distfix;state.distbits=5}function updatewindow(strm,src,end,copy){var dist;var state=strm.state;if(state.window===null){state.wsize=1<<state.wbits;state.wnext=0;state.whave=0;state.window=new utils.Buf8(state.wsize)}if(copy>=state.wsize){utils.arraySet(state.window,src,end-state.wsize,state.wsize,0);state.wnext=0;state.whave=state.wsize}else{dist=state.wsize-state.wnext;if(dist>copy){dist=copy}utils.arraySet(state.window,src,end-copy,dist,state.wnext);copy-=dist;if(copy){utils.arraySet(state.window,src,end-copy,copy,0);state.wnext=copy;state.whave=state.wsize}else{state.wnext+=dist;if(state.wnext===state.wsize){state.wnext=0}if(state.whave<state.wsize){state.whave+=dist}}}return 0}function inflate(strm,flush){var state;var input,output;var next;var put;var have,left;var hold;var bits;var _in,_out;var copy;var from;var from_source;var here=0;var here_bits,here_op,here_val;var last_bits,last_op,last_val;var len;var ret;var hbuf=new utils.Buf8(4);var opts;var n;var order=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!strm||!strm.state||!strm.output||!strm.input&&strm.avail_in!==0){return Z_STREAM_ERROR}state=strm.state;if(state.mode===TYPE){state.mode=TYPEDO}put=strm.next_out;output=strm.output;left=strm.avail_out;next=strm.next_in;input=strm.input;have=strm.avail_in;hold=state.hold;bits=state.bits;_in=have;_out=left;ret=Z_OK;inf_leave:for(;;){switch(state.mode){case HEAD:if(state.wrap===0){state.mode=TYPEDO;break}while(bits<16){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if(state.wrap&2&&hold===35615){state.check=0;hbuf[0]=hold&255;hbuf[1]=hold>>>8&255;state.check=crc32(state.check,hbuf,2,0);hold=0;bits=0;state.mode=FLAGS;break}state.flags=0;if(state.head){state.head.done=false}if(!(state.wrap&1)||(((hold&255)<<8)+(hold>>8))%31){strm.msg="incorrect header check";state.mode=BAD;break}if((hold&15)!==Z_DEFLATED){strm.msg="unknown compression method";state.mode=BAD;break}hold>>>=4;bits-=4;len=(hold&15)+8;if(state.wbits===0){state.wbits=len}else if(len>state.wbits){strm.msg="invalid window size";state.mode=BAD;break}state.dmax=1<<len;strm.adler=state.check=1;state.mode=hold&512?DICTID:TYPE;hold=0;bits=0;break;case FLAGS:while(bits<16){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}state.flags=hold;if((state.flags&255)!==Z_DEFLATED){strm.msg="unknown compression method";state.mode=BAD;break}if(state.flags&57344){strm.msg="unknown header flags set";state.mode=BAD;break}if(state.head){state.head.text=hold>>8&1}if(state.flags&512){hbuf[0]=hold&255;hbuf[1]=hold>>>8&255;state.check=crc32(state.check,hbuf,2,0)}hold=0;bits=0;state.mode=TIME;case TIME:while(bits<32){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if(state.head){state.head.time=hold}if(state.flags&512){hbuf[0]=hold&255;hbuf[1]=hold>>>8&255;hbuf[2]=hold>>>16&255;hbuf[3]=hold>>>24&255;state.check=crc32(state.check,hbuf,4,0)}hold=0;bits=0;state.mode=OS;case OS:while(bits<16){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if(state.head){state.head.xflags=hold&255;state.head.os=hold>>8}if(state.flags&512){hbuf[0]=hold&255;hbuf[1]=hold>>>8&255;state.check=crc32(state.check,hbuf,2,0)}hold=0;bits=0;state.mode=EXLEN;case EXLEN:if(state.flags&1024){while(bits<16){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}state.length=hold;if(state.head){state.head.extra_len=hold}if(state.flags&512){hbuf[0]=hold&255;hbuf[1]=hold>>>8&255;state.check=crc32(state.check,hbuf,2,0)}hold=0;bits=0}else if(state.head){state.head.extra=null}state.mode=EXTRA;case EXTRA:if(state.flags&1024){copy=state.length;if(copy>have){copy=have}if(copy){if(state.head){len=state.head.extra_len-state.length;if(!state.head.extra){state.head.extra=new Array(state.head.extra_len)}utils.arraySet(state.head.extra,input,next,copy,len)}if(state.flags&512){state.check=crc32(state.check,input,copy,next)}have-=copy;next+=copy;state.length-=copy}if(state.length){break inf_leave}}state.length=0;state.mode=NAME;case NAME:if(state.flags&2048){if(have===0){break inf_leave}copy=0;do{len=input[next+copy++];if(state.head&&len&&state.length<65536){state.head.name+=String.fromCharCode(len)}}while(len&&copy<have);if(state.flags&512){state.check=crc32(state.check,input,copy,next)}have-=copy;next+=copy;if(len){break inf_leave}}else if(state.head){state.head.name=null}state.length=0;state.mode=COMMENT;case COMMENT:if(state.flags&4096){if(have===0){break inf_leave}copy=0;do{len=input[next+copy++];if(state.head&&len&&state.length<65536){state.head.comment+=String.fromCharCode(len)}}while(len&&copy<have);if(state.flags&512){state.check=crc32(state.check,input,copy,next)}have-=copy;next+=copy;if(len){break inf_leave}}else if(state.head){state.head.comment=null}state.mode=HCRC;case HCRC:if(state.flags&512){while(bits<16){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if(hold!==(state.check&65535)){strm.msg="header crc mismatch";state.mode=BAD;break}hold=0;bits=0}if(state.head){state.head.hcrc=state.flags>>9&1;state.head.done=true}strm.adler=state.check=0;state.mode=TYPE;break;case DICTID:while(bits<32){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}strm.adler=state.check=ZSWAP32(hold);hold=0;bits=0;state.mode=DICT;case DICT:if(state.havedict===0){strm.next_out=put;strm.avail_out=left;strm.next_in=next;strm.avail_in=have;state.hold=hold;state.bits=bits;return Z_NEED_DICT}strm.adler=state.check=1;state.mode=TYPE;case TYPE:if(flush===Z_BLOCK||flush===Z_TREES){break inf_leave}case TYPEDO:if(state.last){hold>>>=bits&7;bits-=bits&7;state.mode=CHECK;break}while(bits<3){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}state.last=hold&1;hold>>>=1;bits-=1;switch(hold&3){case 0:state.mode=STORED;break;case 1:fixedtables(state);state.mode=LEN_;if(flush===Z_TREES){hold>>>=2;bits-=2;break inf_leave}break;case 2:state.mode=TABLE;break;case 3:strm.msg="invalid block type";state.mode=BAD}hold>>>=2;bits-=2;break;case STORED:hold>>>=bits&7;bits-=bits&7;while(bits<32){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if((hold&65535)!==(hold>>>16^65535)){strm.msg="invalid stored block lengths";state.mode=BAD;break}state.length=hold&65535;hold=0;bits=0;state.mode=COPY_;if(flush===Z_TREES){break inf_leave}case COPY_:state.mode=COPY;case COPY:copy=state.length;if(copy){if(copy>have){copy=have}if(copy>left){copy=left}if(copy===0){break inf_leave}utils.arraySet(output,input,next,copy,put);have-=copy;next+=copy;left-=copy;put+=copy;state.length-=copy;break}state.mode=TYPE;break;case TABLE:while(bits<14){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}state.nlen=(hold&31)+257;hold>>>=5;bits-=5;state.ndist=(hold&31)+1;hold>>>=5;bits-=5;state.ncode=(hold&15)+4;hold>>>=4;bits-=4;if(state.nlen>286||state.ndist>30){strm.msg="too many length or distance symbols";state.mode=BAD;break}state.have=0;state.mode=LENLENS;case LENLENS:while(state.have<state.ncode){while(bits<3){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}state.lens[order[state.have++]]=hold&7;hold>>>=3;bits-=3}while(state.have<19){state.lens[order[state.have++]]=0}state.lencode=state.lendyn;state.lenbits=7;opts={bits:state.lenbits};ret=inflate_table(CODES,state.lens,0,19,state.lencode,0,state.work,opts);state.lenbits=opts.bits;if(ret){strm.msg="invalid code lengths set";state.mode=BAD;break}state.have=0;state.mode=CODELENS;case CODELENS:while(state.have<state.nlen+state.ndist){for(;;){here=state.lencode[hold&(1<<state.lenbits)-1];here_bits=here>>>24;here_op=here>>>16&255;here_val=here&65535;if(here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if(here_val<16){hold>>>=here_bits;bits-=here_bits;state.lens[state.have++]=here_val}else{if(here_val===16){n=here_bits+2;while(bits<n){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}hold>>>=here_bits;bits-=here_bits;if(state.have===0){strm.msg="invalid bit length repeat";state.mode=BAD;break}len=state.lens[state.have-1];copy=3+(hold&3);hold>>>=2;bits-=2}else if(here_val===17){n=here_bits+3;while(bits<n){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}hold>>>=here_bits;bits-=here_bits;len=0;copy=3+(hold&7);hold>>>=3;bits-=3}else{n=here_bits+7;while(bits<n){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}hold>>>=here_bits;bits-=here_bits;len=0;copy=11+(hold&127);hold>>>=7;bits-=7}if(state.have+copy>state.nlen+state.ndist){strm.msg="invalid bit length repeat";state.mode=BAD;break}while(copy--){state.lens[state.have++]=len}}}if(state.mode===BAD){break}if(state.lens[256]===0){strm.msg="invalid code -- missing end-of-block";state.mode=BAD;break}state.lenbits=9;opts={bits:state.lenbits};ret=inflate_table(LENS,state.lens,0,state.nlen,state.lencode,0,state.work,opts);state.lenbits=opts.bits;if(ret){strm.msg="invalid literal/lengths set";state.mode=BAD;break}state.distbits=6;state.distcode=state.distdyn;opts={bits:state.distbits};ret=inflate_table(DISTS,state.lens,state.nlen,state.ndist,state.distcode,0,state.work,opts);state.distbits=opts.bits;if(ret){strm.msg="invalid distances set";state.mode=BAD;break}state.mode=LEN_;if(flush===Z_TREES){break inf_leave}case LEN_:state.mode=LEN;case LEN:if(have>=6&&left>=258){strm.next_out=put;strm.avail_out=left;strm.next_in=next;strm.avail_in=have;state.hold=hold;state.bits=bits;inflate_fast(strm,_out);put=strm.next_out;output=strm.output;left=strm.avail_out;next=strm.next_in;input=strm.input;have=strm.avail_in;hold=state.hold;bits=state.bits;if(state.mode===TYPE){state.back=-1}break}state.back=0;for(;;){here=state.lencode[hold&(1<<state.lenbits)-1];here_bits=here>>>24;here_op=here>>>16&255;here_val=here&65535;if(here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if(here_op&&(here_op&240)===0){last_bits=here_bits;last_op=here_op;last_val=here_val;for(;;){here=state.lencode[last_val+((hold&(1<<last_bits+last_op)-1)>>last_bits)];here_bits=here>>>24;here_op=here>>>16&255;here_val=here&65535;if(last_bits+here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}hold>>>=last_bits;bits-=last_bits;state.back+=last_bits}hold>>>=here_bits;bits-=here_bits;state.back+=here_bits;state.length=here_val;if(here_op===0){state.mode=LIT;break}if(here_op&32){state.back=-1;state.mode=TYPE;break}if(here_op&64){strm.msg="invalid literal/length code";state.mode=BAD;break}state.extra=here_op&15;state.mode=LENEXT;case LENEXT:if(state.extra){n=state.extra;while(bits<n){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}state.length+=hold&(1<<state.extra)-1;hold>>>=state.extra;bits-=state.extra;state.back+=state.extra}state.was=state.length;state.mode=DIST;case DIST:for(;;){here=state.distcode[hold&(1<<state.distbits)-1];here_bits=here>>>24;here_op=here>>>16&255;here_val=here&65535;if(here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if((here_op&240)===0){last_bits=here_bits;last_op=here_op;last_val=here_val;for(;;){here=state.distcode[last_val+((hold&(1<<last_bits+last_op)-1)>>last_bits)];here_bits=here>>>24;here_op=here>>>16&255;here_val=here&65535;if(last_bits+here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}hold>>>=last_bits;bits-=last_bits;state.back+=last_bits}hold>>>=here_bits;bits-=here_bits;state.back+=here_bits;if(here_op&64){strm.msg="invalid distance code";state.mode=BAD;break}state.offset=here_val;state.extra=here_op&15;state.mode=DISTEXT;case DISTEXT:if(state.extra){n=state.extra;while(bits<n){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}state.offset+=hold&(1<<state.extra)-1;hold>>>=state.extra;bits-=state.extra;state.back+=state.extra}if(state.offset>state.dmax){strm.msg="invalid distance too far back";state.mode=BAD;break}state.mode=MATCH;case MATCH:if(left===0){break inf_leave}copy=_out-left;if(state.offset>copy){copy=state.offset-copy;if(copy>state.whave){if(state.sane){strm.msg="invalid distance too far back";state.mode=BAD;break}}if(copy>state.wnext){copy-=state.wnext;from=state.wsize-copy}else{from=state.wnext-copy}if(copy>state.length){copy=state.length}from_source=state.window}else{from_source=output;from=put-state.offset;copy=state.length}if(copy>left){copy=left}left-=copy;state.length-=copy;do{output[put++]=from_source[from++]}while(--copy);if(state.length===0){state.mode=LEN}break;case LIT:if(left===0){break inf_leave}output[put++]=state.length;left--;state.mode=LEN;break;case CHECK:if(state.wrap){while(bits<32){if(have===0){break inf_leave}have--;hold|=input[next++]<<bits;bits+=8}_out-=left;strm.total_out+=_out;state.total+=_out;if(_out){strm.adler=state.check=state.flags?crc32(state.check,output,_out,put-_out):adler32(state.check,output,_out,put-_out)}_out=left;if((state.flags?hold:ZSWAP32(hold))!==state.check){strm.msg="incorrect data check";state.mode=BAD;break}hold=0;bits=0}state.mode=LENGTH;case LENGTH:if(state.wrap&&state.flags){while(bits<32){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if(hold!==(state.total&4294967295)){strm.msg="incorrect length check";state.mode=BAD;break}hold=0;bits=0}state.mode=DONE;case DONE:ret=Z_STREAM_END;break inf_leave;case BAD:ret=Z_DATA_ERROR;break inf_leave;case MEM:return Z_MEM_ERROR;case SYNC:default:return Z_STREAM_ERROR}}strm.next_out=put;strm.avail_out=left;strm.next_in=next;strm.avail_in=have;state.hold=hold;state.bits=bits;if(state.wsize||_out!==strm.avail_out&&state.mode<BAD&&(state.mode<CHECK||flush!==Z_FINISH)){if(updatewindow(strm,strm.output,strm.next_out,_out-strm.avail_out)){state.mode=MEM;return Z_MEM_ERROR}}_in-=strm.avail_in;_out-=strm.avail_out;strm.total_in+=_in;strm.total_out+=_out;state.total+=_out;if(state.wrap&&_out){strm.adler=state.check=state.flags?crc32(state.check,output,_out,strm.next_out-_out):adler32(state.check,output,_out,strm.next_out-_out)}strm.data_type=state.bits+(state.last?64:0)+(state.mode===TYPE?128:0)+(state.mode===LEN_||state.mode===COPY_?256:0);if((_in===0&&_out===0||flush===Z_FINISH)&&ret===Z_OK){ret=Z_BUF_ERROR}return ret}function inflateEnd(strm){if(!strm||!strm.state){return Z_STREAM_ERROR}var state=strm.state;if(state.window){state.window=null}strm.state=null;return Z_OK}function inflateGetHeader(strm,head){var state;if(!strm||!strm.state){return Z_STREAM_ERROR}state=strm.state;if((state.wrap&2)===0){return Z_STREAM_ERROR}state.head=head;head.done=false;return Z_OK}exports.inflateReset=inflateReset;exports.inflateReset2=inflateReset2;exports.inflateResetKeep=inflateResetKeep;exports.inflateInit=inflateInit;exports.inflateInit2=inflateInit2;exports.inflate=inflate;exports.inflateEnd=inflateEnd;exports.inflateGetHeader=inflateGetHeader;
+exports.inflateInfo="pako inflate (from Nodeca project)"},{"../utils/common":27,"./adler32":29,"./crc32":31,"./inffast":34,"./inftrees":36}],36:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("../utils/common");var MAXBITS=15;var ENOUGH_LENS=852;var ENOUGH_DISTS=592;var CODES=0;var LENS=1;var DISTS=2;var lbase=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0];var lext=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78];var dbase=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0];var dext=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];module.exports=function inflate_table(type,lens,lens_index,codes,table,table_index,work,opts){var bits=opts.bits;var len=0;var sym=0;var min=0,max=0;var root=0;var curr=0;var drop=0;var left=0;var used=0;var huff=0;var incr;var fill;var low;var mask;var next;var base=null;var base_index=0;var end;var count=new utils.Buf16(MAXBITS+1);var offs=new utils.Buf16(MAXBITS+1);var extra=null;var extra_index=0;var here_bits,here_op,here_val;for(len=0;len<=MAXBITS;len++){count[len]=0}for(sym=0;sym<codes;sym++){count[lens[lens_index+sym]]++}root=bits;for(max=MAXBITS;max>=1;max--){if(count[max]!==0){break}}if(root>max){root=max}if(max===0){table[table_index++]=1<<24|64<<16|0;table[table_index++]=1<<24|64<<16|0;opts.bits=1;return 0}for(min=1;min<max;min++){if(count[min]!==0){break}}if(root<min){root=min}left=1;for(len=1;len<=MAXBITS;len++){left<<=1;left-=count[len];if(left<0){return-1}}if(left>0&&(type===CODES||max!==1)){return-1}offs[1]=0;for(len=1;len<MAXBITS;len++){offs[len+1]=offs[len]+count[len]}for(sym=0;sym<codes;sym++){if(lens[lens_index+sym]!==0){work[offs[lens[lens_index+sym]]++]=sym}}if(type===CODES){base=extra=work;end=19}else if(type===LENS){base=lbase;base_index-=257;extra=lext;extra_index-=257;end=256}else{base=dbase;extra=dext;end=-1}huff=0;sym=0;len=min;next=table_index;curr=root;drop=0;low=-1;used=1<<root;mask=used-1;if(type===LENS&&used>ENOUGH_LENS||type===DISTS&&used>ENOUGH_DISTS){return 1}var i=0;for(;;){i++;here_bits=len-drop;if(work[sym]<end){here_op=0;here_val=work[sym]}else if(work[sym]>end){here_op=extra[extra_index+work[sym]];here_val=base[base_index+work[sym]]}else{here_op=32+64;here_val=0}incr=1<<len-drop;fill=1<<curr;min=fill;do{fill-=incr;table[next+(huff>>drop)+fill]=here_bits<<24|here_op<<16|here_val|0}while(fill!==0);incr=1<<len-1;while(huff&incr){incr>>=1}if(incr!==0){huff&=incr-1;huff+=incr}else{huff=0}sym++;if(--count[len]===0){if(len===max){break}len=lens[lens_index+work[sym]]}if(len>root&&(huff&mask)!==low){if(drop===0){drop=root}next+=min;curr=len-drop;left=1<<curr;while(curr+drop<max){left-=count[curr+drop];if(left<=0){break}curr++;left<<=1}used+=1<<curr;if(type===LENS&&used>ENOUGH_LENS||type===DISTS&&used>ENOUGH_DISTS){return 1}low=huff&mask;table[low]=root<<24|curr<<16|next-table_index|0}}if(huff!==0){table[next+huff]=len-drop<<24|64<<16|0}opts.bits=root;return 0}},{"../utils/common":27}],37:[function(_dereq_,module,exports){"use strict";module.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],38:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("../utils/common");var Z_FIXED=4;var Z_BINARY=0;var Z_TEXT=1;var Z_UNKNOWN=2;function zero(buf){var len=buf.length;while(--len>=0){buf[len]=0}}var STORED_BLOCK=0;var STATIC_TREES=1;var DYN_TREES=2;var MIN_MATCH=3;var MAX_MATCH=258;var LENGTH_CODES=29;var LITERALS=256;var L_CODES=LITERALS+1+LENGTH_CODES;var D_CODES=30;var BL_CODES=19;var HEAP_SIZE=2*L_CODES+1;var MAX_BITS=15;var Buf_size=16;var MAX_BL_BITS=7;var END_BLOCK=256;var REP_3_6=16;var REPZ_3_10=17;var REPZ_11_138=18;var extra_lbits=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];var extra_dbits=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];var extra_blbits=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];var bl_order=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];var DIST_CODE_LEN=512;var static_ltree=new Array((L_CODES+2)*2);zero(static_ltree);var static_dtree=new Array(D_CODES*2);zero(static_dtree);var _dist_code=new Array(DIST_CODE_LEN);zero(_dist_code);var _length_code=new Array(MAX_MATCH-MIN_MATCH+1);zero(_length_code);var base_length=new Array(LENGTH_CODES);zero(base_length);var base_dist=new Array(D_CODES);zero(base_dist);var StaticTreeDesc=function(static_tree,extra_bits,extra_base,elems,max_length){this.static_tree=static_tree;this.extra_bits=extra_bits;this.extra_base=extra_base;this.elems=elems;this.max_length=max_length;this.has_stree=static_tree&&static_tree.length};var static_l_desc;var static_d_desc;var static_bl_desc;var TreeDesc=function(dyn_tree,stat_desc){this.dyn_tree=dyn_tree;this.max_code=0;this.stat_desc=stat_desc};function d_code(dist){return dist<256?_dist_code[dist]:_dist_code[256+(dist>>>7)]}function put_short(s,w){s.pending_buf[s.pending++]=w&255;s.pending_buf[s.pending++]=w>>>8&255}function send_bits(s,value,length){if(s.bi_valid>Buf_size-length){s.bi_buf|=value<<s.bi_valid&65535;put_short(s,s.bi_buf);s.bi_buf=value>>Buf_size-s.bi_valid;s.bi_valid+=length-Buf_size}else{s.bi_buf|=value<<s.bi_valid&65535;s.bi_valid+=length}}function send_code(s,c,tree){send_bits(s,tree[c*2],tree[c*2+1])}function bi_reverse(code,len){var res=0;do{res|=code&1;code>>>=1;res<<=1}while(--len>0);return res>>>1}function bi_flush(s){if(s.bi_valid===16){put_short(s,s.bi_buf);s.bi_buf=0;s.bi_valid=0}else if(s.bi_valid>=8){s.pending_buf[s.pending++]=s.bi_buf&255;s.bi_buf>>=8;s.bi_valid-=8}}function gen_bitlen(s,desc){var tree=desc.dyn_tree;var max_code=desc.max_code;var stree=desc.stat_desc.static_tree;var has_stree=desc.stat_desc.has_stree;var extra=desc.stat_desc.extra_bits;var base=desc.stat_desc.extra_base;var max_length=desc.stat_desc.max_length;var h;var n,m;var bits;var xbits;var f;var overflow=0;for(bits=0;bits<=MAX_BITS;bits++){s.bl_count[bits]=0}tree[s.heap[s.heap_max]*2+1]=0;for(h=s.heap_max+1;h<HEAP_SIZE;h++){n=s.heap[h];bits=tree[tree[n*2+1]*2+1]+1;if(bits>max_length){bits=max_length;overflow++}tree[n*2+1]=bits;if(n>max_code){continue}s.bl_count[bits]++;xbits=0;if(n>=base){xbits=extra[n-base]}f=tree[n*2];s.opt_len+=f*(bits+xbits);if(has_stree){s.static_len+=f*(stree[n*2+1]+xbits)}}if(overflow===0){return}do{bits=max_length-1;while(s.bl_count[bits]===0){bits--}s.bl_count[bits]--;s.bl_count[bits+1]+=2;s.bl_count[max_length]--;overflow-=2}while(overflow>0);for(bits=max_length;bits!==0;bits--){n=s.bl_count[bits];while(n!==0){m=s.heap[--h];if(m>max_code){continue}if(tree[m*2+1]!==bits){s.opt_len+=(bits-tree[m*2+1])*tree[m*2];tree[m*2+1]=bits}n--}}}function gen_codes(tree,max_code,bl_count){var next_code=new Array(MAX_BITS+1);var code=0;var bits;var n;for(bits=1;bits<=MAX_BITS;bits++){next_code[bits]=code=code+bl_count[bits-1]<<1}for(n=0;n<=max_code;n++){var len=tree[n*2+1];if(len===0){continue}tree[n*2]=bi_reverse(next_code[len]++,len)}}function tr_static_init(){var n;var bits;var length;var code;var dist;var bl_count=new Array(MAX_BITS+1);length=0;for(code=0;code<LENGTH_CODES-1;code++){base_length[code]=length;for(n=0;n<1<<extra_lbits[code];n++){_length_code[length++]=code}}_length_code[length-1]=code;dist=0;for(code=0;code<16;code++){base_dist[code]=dist;for(n=0;n<1<<extra_dbits[code];n++){_dist_code[dist++]=code}}dist>>=7;for(;code<D_CODES;code++){base_dist[code]=dist<<7;for(n=0;n<1<<extra_dbits[code]-7;n++){_dist_code[256+dist++]=code}}for(bits=0;bits<=MAX_BITS;bits++){bl_count[bits]=0}n=0;while(n<=143){static_ltree[n*2+1]=8;n++;bl_count[8]++}while(n<=255){static_ltree[n*2+1]=9;n++;bl_count[9]++}while(n<=279){static_ltree[n*2+1]=7;n++;bl_count[7]++}while(n<=287){static_ltree[n*2+1]=8;n++;bl_count[8]++}gen_codes(static_ltree,L_CODES+1,bl_count);for(n=0;n<D_CODES;n++){static_dtree[n*2+1]=5;static_dtree[n*2]=bi_reverse(n,5)}static_l_desc=new StaticTreeDesc(static_ltree,extra_lbits,LITERALS+1,L_CODES,MAX_BITS);static_d_desc=new StaticTreeDesc(static_dtree,extra_dbits,0,D_CODES,MAX_BITS);static_bl_desc=new StaticTreeDesc(new Array(0),extra_blbits,0,BL_CODES,MAX_BL_BITS)}function init_block(s){var n;for(n=0;n<L_CODES;n++){s.dyn_ltree[n*2]=0}for(n=0;n<D_CODES;n++){s.dyn_dtree[n*2]=0}for(n=0;n<BL_CODES;n++){s.bl_tree[n*2]=0}s.dyn_ltree[END_BLOCK*2]=1;s.opt_len=s.static_len=0;s.last_lit=s.matches=0}function bi_windup(s){if(s.bi_valid>8){put_short(s,s.bi_buf)}else if(s.bi_valid>0){s.pending_buf[s.pending++]=s.bi_buf}s.bi_buf=0;s.bi_valid=0}function copy_block(s,buf,len,header){bi_windup(s);if(header){put_short(s,len);put_short(s,~len)}utils.arraySet(s.pending_buf,s.window,buf,len,s.pending);s.pending+=len}function smaller(tree,n,m,depth){var _n2=n*2;var _m2=m*2;return tree[_n2]<tree[_m2]||tree[_n2]===tree[_m2]&&depth[n]<=depth[m]}function pqdownheap(s,tree,k){var v=s.heap[k];var j=k<<1;while(j<=s.heap_len){if(j<s.heap_len&&smaller(tree,s.heap[j+1],s.heap[j],s.depth)){j++}if(smaller(tree,v,s.heap[j],s.depth)){break}s.heap[k]=s.heap[j];k=j;j<<=1}s.heap[k]=v}function compress_block(s,ltree,dtree){var dist;var lc;var lx=0;var code;var extra;if(s.last_lit!==0){do{dist=s.pending_buf[s.d_buf+lx*2]<<8|s.pending_buf[s.d_buf+lx*2+1];lc=s.pending_buf[s.l_buf+lx];lx++;if(dist===0){send_code(s,lc,ltree)}else{code=_length_code[lc];send_code(s,code+LITERALS+1,ltree);extra=extra_lbits[code];if(extra!==0){lc-=base_length[code];send_bits(s,lc,extra)}dist--;code=d_code(dist);send_code(s,code,dtree);extra=extra_dbits[code];if(extra!==0){dist-=base_dist[code];send_bits(s,dist,extra)}}}while(lx<s.last_lit)}send_code(s,END_BLOCK,ltree)}function build_tree(s,desc){var tree=desc.dyn_tree;var stree=desc.stat_desc.static_tree;var has_stree=desc.stat_desc.has_stree;var elems=desc.stat_desc.elems;var n,m;var max_code=-1;var node;s.heap_len=0;s.heap_max=HEAP_SIZE;for(n=0;n<elems;n++){if(tree[n*2]!==0){s.heap[++s.heap_len]=max_code=n;s.depth[n]=0}else{tree[n*2+1]=0}}while(s.heap_len<2){node=s.heap[++s.heap_len]=max_code<2?++max_code:0;tree[node*2]=1;s.depth[node]=0;s.opt_len--;if(has_stree){s.static_len-=stree[node*2+1]}}desc.max_code=max_code;for(n=s.heap_len>>1;n>=1;n--){pqdownheap(s,tree,n)}node=elems;do{n=s.heap[1];s.heap[1]=s.heap[s.heap_len--];pqdownheap(s,tree,1);m=s.heap[1];s.heap[--s.heap_max]=n;s.heap[--s.heap_max]=m;tree[node*2]=tree[n*2]+tree[m*2];s.depth[node]=(s.depth[n]>=s.depth[m]?s.depth[n]:s.depth[m])+1;tree[n*2+1]=tree[m*2+1]=node;s.heap[1]=node++;pqdownheap(s,tree,1)}while(s.heap_len>=2);s.heap[--s.heap_max]=s.heap[1];gen_bitlen(s,desc);gen_codes(tree,max_code,s.bl_count)}function scan_tree(s,tree,max_code){var n;var prevlen=-1;var curlen;var nextlen=tree[0*2+1];var count=0;var max_count=7;var min_count=4;if(nextlen===0){max_count=138;min_count=3}tree[(max_code+1)*2+1]=65535;for(n=0;n<=max_code;n++){curlen=nextlen;nextlen=tree[(n+1)*2+1];if(++count<max_count&&curlen===nextlen){continue}else if(count<min_count){s.bl_tree[curlen*2]+=count}else if(curlen!==0){if(curlen!==prevlen){s.bl_tree[curlen*2]++}s.bl_tree[REP_3_6*2]++}else if(count<=10){s.bl_tree[REPZ_3_10*2]++}else{s.bl_tree[REPZ_11_138*2]++}count=0;prevlen=curlen;if(nextlen===0){max_count=138;min_count=3}else if(curlen===nextlen){max_count=6;min_count=3}else{max_count=7;min_count=4}}}function send_tree(s,tree,max_code){var n;var prevlen=-1;var curlen;var nextlen=tree[0*2+1];var count=0;var max_count=7;var min_count=4;if(nextlen===0){max_count=138;min_count=3}for(n=0;n<=max_code;n++){curlen=nextlen;nextlen=tree[(n+1)*2+1];if(++count<max_count&&curlen===nextlen){continue}else if(count<min_count){do{send_code(s,curlen,s.bl_tree)}while(--count!==0)}else if(curlen!==0){if(curlen!==prevlen){send_code(s,curlen,s.bl_tree);count--}send_code(s,REP_3_6,s.bl_tree);send_bits(s,count-3,2)}else if(count<=10){send_code(s,REPZ_3_10,s.bl_tree);send_bits(s,count-3,3)}else{send_code(s,REPZ_11_138,s.bl_tree);send_bits(s,count-11,7)}count=0;prevlen=curlen;if(nextlen===0){max_count=138;min_count=3}else if(curlen===nextlen){max_count=6;min_count=3}else{max_count=7;min_count=4}}}function build_bl_tree(s){var max_blindex;scan_tree(s,s.dyn_ltree,s.l_desc.max_code);scan_tree(s,s.dyn_dtree,s.d_desc.max_code);build_tree(s,s.bl_desc);for(max_blindex=BL_CODES-1;max_blindex>=3;max_blindex--){if(s.bl_tree[bl_order[max_blindex]*2+1]!==0){break}}s.opt_len+=3*(max_blindex+1)+5+5+4;return max_blindex}function send_all_trees(s,lcodes,dcodes,blcodes){var rank;send_bits(s,lcodes-257,5);send_bits(s,dcodes-1,5);send_bits(s,blcodes-4,4);for(rank=0;rank<blcodes;rank++){send_bits(s,s.bl_tree[bl_order[rank]*2+1],3)}send_tree(s,s.dyn_ltree,lcodes-1);send_tree(s,s.dyn_dtree,dcodes-1)}function detect_data_type(s){var black_mask=4093624447;var n;for(n=0;n<=31;n++,black_mask>>>=1){if(black_mask&1&&s.dyn_ltree[n*2]!==0){return Z_BINARY}}if(s.dyn_ltree[9*2]!==0||s.dyn_ltree[10*2]!==0||s.dyn_ltree[13*2]!==0){return Z_TEXT}for(n=32;n<LITERALS;n++){if(s.dyn_ltree[n*2]!==0){return Z_TEXT}}return Z_BINARY}var static_init_done=false;function _tr_init(s){if(!static_init_done){tr_static_init();static_init_done=true}s.l_desc=new TreeDesc(s.dyn_ltree,static_l_desc);s.d_desc=new TreeDesc(s.dyn_dtree,static_d_desc);s.bl_desc=new TreeDesc(s.bl_tree,static_bl_desc);s.bi_buf=0;s.bi_valid=0;init_block(s)}function _tr_stored_block(s,buf,stored_len,last){send_bits(s,(STORED_BLOCK<<1)+(last?1:0),3);copy_block(s,buf,stored_len,true)}function _tr_align(s){send_bits(s,STATIC_TREES<<1,3);send_code(s,END_BLOCK,static_ltree);bi_flush(s)}function _tr_flush_block(s,buf,stored_len,last){var opt_lenb,static_lenb;var max_blindex=0;if(s.level>0){if(s.strm.data_type===Z_UNKNOWN){s.strm.data_type=detect_data_type(s)}build_tree(s,s.l_desc);build_tree(s,s.d_desc);max_blindex=build_bl_tree(s);opt_lenb=s.opt_len+3+7>>>3;static_lenb=s.static_len+3+7>>>3;if(static_lenb<=opt_lenb){opt_lenb=static_lenb}}else{opt_lenb=static_lenb=stored_len+5}if(stored_len+4<=opt_lenb&&buf!==-1){_tr_stored_block(s,buf,stored_len,last)}else if(s.strategy===Z_FIXED||static_lenb===opt_lenb){send_bits(s,(STATIC_TREES<<1)+(last?1:0),3);compress_block(s,static_ltree,static_dtree)}else{send_bits(s,(DYN_TREES<<1)+(last?1:0),3);send_all_trees(s,s.l_desc.max_code+1,s.d_desc.max_code+1,max_blindex+1);compress_block(s,s.dyn_ltree,s.dyn_dtree)}init_block(s);if(last){bi_windup(s)}}function _tr_tally(s,dist,lc){s.pending_buf[s.d_buf+s.last_lit*2]=dist>>>8&255;s.pending_buf[s.d_buf+s.last_lit*2+1]=dist&255;s.pending_buf[s.l_buf+s.last_lit]=lc&255;s.last_lit++;if(dist===0){s.dyn_ltree[lc*2]++}else{s.matches++;dist--;s.dyn_ltree[(_length_code[lc]+LITERALS+1)*2]++;s.dyn_dtree[d_code(dist)*2]++}return s.last_lit===s.lit_bufsize-1}exports._tr_init=_tr_init;exports._tr_stored_block=_tr_stored_block;exports._tr_flush_block=_tr_flush_block;exports._tr_tally=_tr_tally;exports._tr_align=_tr_align},{"../utils/common":27}],39:[function(_dereq_,module,exports){"use strict";function ZStream(){this.input=null;this.next_in=0;this.avail_in=0;this.total_in=0;this.output=null;this.next_out=0;this.avail_out=0;this.total_out=0;this.msg="";this.state=null;this.data_type=2;this.adler=0}module.exports=ZStream},{}]},{},[9])(9)});var XLSX={};(function make_xlsx(XLSX){XLSX.version="0.8.20";var current_codepage=1200,current_cptable;if(typeof module!=="undefined"&&typeof require!=="undefined"){if(typeof cptable==="undefined")cptable=require("./dist/cpexcel");current_cptable=cptable[current_codepage]}function reset_cp(){set_cp(1200)}var set_cp=function(cp){current_codepage=cp};function char_codes(data){var o=[];for(var i=0,len=data.length;i<len;++i)o[i]=data.charCodeAt(i);return o}var debom_xml=function(data){return data};var _getchar=function _gc1(x){return String.fromCharCode(x)};if(typeof cptable!=="undefined"){set_cp=function(cp){current_codepage=cp;current_cptable=cptable[cp]};debom_xml=function(data){if(data.charCodeAt(0)===255&&data.charCodeAt(1)===254){return cptable.utils.decode(1200,char_codes(data.substr(2)))}return data};_getchar=function _gc2(x){if(current_codepage===1200)return String.fromCharCode(x);return cptable.utils.decode(current_codepage,[x&255,x>>8])[0]}}var Base64=function make_b64(){var map="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";return{encode:function(input,utf8){var o="";var c1,c2,c3,e1,e2,e3,e4;for(var i=0;i<input.length;){c1=input.charCodeAt(i++);c2=input.charCodeAt(i++);c3=input.charCodeAt(i++);e1=c1>>2;e2=(c1&3)<<4|c2>>4;e3=(c2&15)<<2|c3>>6;e4=c3&63;if(isNaN(c2)){e3=e4=64}else if(isNaN(c3)){e4=64}o+=map.charAt(e1)+map.charAt(e2)+map.charAt(e3)+map.charAt(e4)}return o},decode:function b64_decode(input,utf8){var o="";var c1,c2,c3;var e1,e2,e3,e4;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");for(var i=0;i<input.length;){e1=map.indexOf(input.charAt(i++));e2=map.indexOf(input.charAt(i++));e3=map.indexOf(input.charAt(i++));e4=map.indexOf(input.charAt(i++));c1=e1<<2|e2>>4;c2=(e2&15)<<4|e3>>2;c3=(e3&3)<<6|e4;o+=String.fromCharCode(c1);if(e3!=64){o+=String.fromCharCode(c2)}if(e4!=64){o+=String.fromCharCode(c3)}}return o}}}();var has_buf=typeof Buffer!=="undefined";function new_raw_buf(len){return new(has_buf?Buffer:Array)(len)}function s2a(s){if(has_buf)return new Buffer(s,"binary");return s.split("").map(function(x){return x.charCodeAt(0)&255})}var bconcat=function(bufs){return[].concat.apply([],bufs)};var chr0=/\u0000/g,chr1=/[\u0001-\u0006]/;var SSF={};var make_ssf=function make_ssf(SSF){SSF.version="0.8.1";function _strrev(x){var o="",i=x.length-1;while(i>=0)o+=x.charAt(i--);return o}function fill(c,l){var o="";while(o.length<l)o+=c;return o}function pad0(v,d){var t=""+v;return t.length>=d?t:fill("0",d-t.length)+t}function pad_(v,d){var t=""+v;return t.length>=d?t:fill(" ",d-t.length)+t}function rpad_(v,d){var t=""+v;return t.length>=d?t:t+fill(" ",d-t.length)}function pad0r1(v,d){var t=""+Math.round(v);return t.length>=d?t:fill("0",d-t.length)+t}function pad0r2(v,d){var t=""+v;return t.length>=d?t:fill("0",d-t.length)+t}var p2_32=Math.pow(2,32);function pad0r(v,d){if(v>p2_32||v<-p2_32)return pad0r1(v,d);var i=Math.round(v);return pad0r2(i,d)}function isgeneral(s,i){return s.length>=7+i&&(s.charCodeAt(i)|32)===103&&(s.charCodeAt(i+1)|32)===101&&(s.charCodeAt(i+2)|32)===110&&(s.charCodeAt(i+3)|32)===101&&(s.charCodeAt(i+4)|32)===114&&(s.charCodeAt(i+5)|32)===97&&(s.charCodeAt(i+6)|32)===108}var opts_fmt=[["date1904",0],["output",""],["WTF",false]];function fixopts(o){for(var y=0;y!=opts_fmt.length;++y)if(o[opts_fmt[y][0]]===undefined)o[opts_fmt[y][0]]=opts_fmt[y][1]}SSF.opts=opts_fmt;var table_fmt={0:"General",1:"0",2:"0.00",3:"#,##0",4:"#,##0.00",9:"0%",10:"0.00%",11:"0.00E+00",12:"# ?/?",13:"# ??/??",14:"m/d/yy",15:"d-mmm-yy",16:"d-mmm",17:"mmm-yy",18:"h:mm AM/PM",19:"h:mm:ss AM/PM",20:"h:mm",21:"h:mm:ss",22:"m/d/yy h:mm",37:"#,##0 ;(#,##0)",38:"#,##0 ;[Red](#,##0)",39:"#,##0.00;(#,##0.00)",40:"#,##0.00;[Red](#,##0.00)",45:"mm:ss",46:"[h]:mm:ss",47:"mmss.0",48:"##0.0E+0",49:"@",56:'"涓婂崍/涓嬪崍 "hh"鏅�"mm"鍒�"ss"绉� "',65535:"General"};var days=[["Sun","Sunday"],["Mon","Monday"],["Tue","Tuesday"],["Wed","Wednesday"],["Thu","Thursday"],["Fri","Friday"],["Sat","Saturday"]];var months=[["J","Jan","January"],["F","Feb","February"],["M","Mar","March"],["A","Apr","April"],["M","May","May"],["J","Jun","June"],["J","Jul","July"],["A","Aug","August"],["S","Sep","September"],["O","Oct","October"],["N","Nov","November"],["D","Dec","December"]];function frac(x,D,mixed){var sgn=x<0?-1:1;var B=x*sgn;var P_2=0,P_1=1,P=0;var Q_2=1,Q_1=0,Q=0;var A=Math.floor(B);while(Q_1<D){A=Math.floor(B);P=A*P_1+P_2;Q=A*Q_1+Q_2;if(B-A<5e-10)break;B=1/(B-A);P_2=P_1;P_1=P;Q_2=Q_1;Q_1=Q}if(Q>D){Q=Q_1;P=P_1}if(Q>D){Q=Q_2;P=P_2}if(!mixed)return[0,sgn*P,Q];if(Q===0)throw"Unexpected state: "+P+" "+P_1+" "+P_2+" "+Q+" "+Q_1+" "+Q_2;var q=Math.floor(sgn*P/Q);return[q,sgn*P-q*Q,Q]}function general_fmt_int(v,opts){return""+v}SSF._general_int=general_fmt_int;var general_fmt_num=function make_general_fmt_num(){var gnr1=/\.(\d*[1-9])0+$/,gnr2=/\.0*$/,gnr4=/\.(\d*[1-9])0+/,gnr5=/\.0*[Ee]/,gnr6=/(E[+-])(\d)$/;function gfn2(v){var w=v<0?12:11;var o=gfn5(v.toFixed(12));if(o.length<=w)return o;o=v.toPrecision(10);if(o.length<=w)return o;return v.toExponential(5)}function gfn3(v){var o=v.toFixed(11).replace(gnr1,".$1");if(o.length>(v<0?12:11))o=v.toPrecision(6);return o}function gfn4(o){for(var i=0;i!=o.length;++i)if((o.charCodeAt(i)|32)===101)return o.replace(gnr4,".$1").replace(gnr5,"E").replace("e","E").replace(gnr6,"$10$2");return o}function gfn5(o){return o.indexOf(".")>-1?o.replace(gnr2,"").replace(gnr1,".$1"):o}return function general_fmt_num(v,opts){var V=Math.floor(Math.log(Math.abs(v))*Math.LOG10E),o;if(V>=-4&&V<=-1)o=v.toPrecision(10+V);else if(Math.abs(V)<=9)o=gfn2(v);else if(V===10)o=v.toFixed(10).substr(0,12);else o=gfn3(v);return gfn5(gfn4(o))}}();SSF._general_num=general_fmt_num;function general_fmt(v,opts){switch(typeof v){case"string":return v;case"boolean":return v?"TRUE":"FALSE";case"number":return(v|0)===v?general_fmt_int(v,opts):general_fmt_num(v,opts)}throw new Error("unsupported value in General format: "+v)}SSF._general=general_fmt;function fix_hijri(date,o){return 0}function parse_date_code(v,opts,b2){if(v>2958465||v<0)return null;var date=v|0,time=Math.floor(86400*(v-date)),dow=0;var dout=[];var out={D:date,T:time,u:86400*(v-date)-time,y:0,m:0,d:0,H:0,M:0,S:0,q:0};if(Math.abs(out.u)<1e-6)out.u=0;fixopts(opts!=null?opts:opts=[]);if(opts.date1904)date+=1462;if(out.u>.999){out.u=0;if(++time==86400){time=0;++date}}if(date===60){dout=b2?[1317,10,29]:[1900,2,29];dow=3}else if(date===0){dout=b2?[1317,8,29]:[1900,1,0];dow=6}else{if(date>60)--date;var d=new Date(1900,0,1);d.setDate(d.getDate()+date-1);dout=[d.getFullYear(),d.getMonth()+1,d.getDate()];dow=d.getDay();if(date<60)dow=(dow+6)%7;if(b2)dow=fix_hijri(d,dout)}out.y=dout[0];out.m=dout[1];out.d=dout[2];out.S=time%60;time=Math.floor(time/60);out.M=time%60;time=Math.floor(time/60);out.H=time;out.q=dow;return out}SSF.parse_date_code=parse_date_code;function write_date(type,fmt,val,ss0){var o="",ss=0,tt=0,y=val.y,out,outl=0;switch(type){case 98:y=val.y+543;case 121:switch(fmt.length){case 1:case 2:out=y%100;outl=2;break;default:out=y%1e4;outl=4;break}break;case 109:switch(fmt.length){case 1:case 2:out=val.m;outl=fmt.length;break;case 3:return months[val.m-1][1];case 5:return months[val.m-1][0];default:return months[val.m-1][2]}break;case 100:switch(fmt.length){case 1:case 2:out=val.d;outl=fmt.length;break;case 3:return days[val.q][0];default:return days[val.q][1]}break;case 104:switch(fmt.length){case 1:case 2:out=1+(val.H+11)%12;outl=fmt.length;break;default:throw"bad hour format: "+fmt}break;case 72:switch(fmt.length){case 1:case 2:out=val.H;outl=fmt.length;break;default:throw"bad hour format: "+fmt}break;case 77:switch(fmt.length){case 1:case 2:out=val.M;outl=fmt.length;break;default:throw"bad minute format: "+fmt}break;case 115:if(val.u===0)switch(fmt){case"s":case"ss":return pad0(val.S,fmt.length);case".0":case".00":case".000":}switch(fmt){case"s":case"ss":case".0":case".00":case".000":if(ss0>=2)tt=ss0===3?1e3:100;else tt=ss0===1?10:1;ss=Math.round(tt*(val.S+val.u));if(ss>=60*tt)ss=0;if(fmt==="s")return ss===0?"0":""+ss/tt;o=pad0(ss,2+ss0);if(fmt==="ss")return o.substr(0,2);return"."+o.substr(2,fmt.length-1);default:throw"bad second format: "+fmt}case 90:switch(fmt){case"[h]":case"[hh]":out=val.D*24+val.H;break;case"[m]":case"[mm]":out=(val.D*24+val.H)*60+val.M;break;case"[s]":case"[ss]":out=((val.D*24+val.H)*60+val.M)*60+Math.round(val.S+val.u);break;default:throw"bad abstime format: "+fmt}outl=fmt.length===3?1:2;break;case 101:out=y;outl=1}if(outl>0)return pad0(out,outl);else return""}function commaify(s){if(s.length<=3)return s;var j=s.length%3,o=s.substr(0,j);for(;j!=s.length;j+=3)o+=(o.length>0?",":"")+s.substr(j,3);return o}var write_num=function make_write_num(){var pct1=/%/g;function write_num_pct(type,fmt,val){var sfmt=fmt.replace(pct1,""),mul=fmt.length-sfmt.length;return write_num(type,sfmt,val*Math.pow(10,2*mul))+fill("%",mul)}function write_num_cm(type,fmt,val){var idx=fmt.length-1;while(fmt.charCodeAt(idx-1)===44)--idx;return write_num(type,fmt.substr(0,idx),val/Math.pow(10,3*(fmt.length-idx)))}function write_num_exp(fmt,val){var o;var idx=fmt.indexOf("E")-fmt.indexOf(".")-1;if(fmt.match(/^#+0.0E\+0$/)){var period=fmt.indexOf(".");if(period===-1)period=fmt.indexOf("E");var ee=Math.floor(Math.log(Math.abs(val))*Math.LOG10E)%period;if(ee<0)ee+=period;o=(val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);if(o.indexOf("e")===-1){var fakee=Math.floor(Math.log(Math.abs(val))*Math.LOG10E);if(o.indexOf(".")===-1)o=o[0]+"."+o.substr(1)+"E+"+(fakee-o.length+ee);else o+="E+"+(fakee-ee);while(o.substr(0,2)==="0."){o=o[0]+o.substr(2,period)+"."+o.substr(2+period);o=o.replace(/^0+([1-9])/,"$1").replace(/^0+\./,"0.")}o=o.replace(/\+-/,"-")}o=o.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/,function($$,$1,$2,$3){return $1+$2+$3.substr(0,(period+ee)%period)+"."+$3.substr(ee)+"E"})}else o=val.toExponential(idx);if(fmt.match(/E\+00$/)&&o.match(/e[+-]\d$/))o=o.substr(0,o.length-1)+"0"+o[o.length-1];if(fmt.match(/E\-/)&&o.match(/e\+/))o=o.replace(/e\+/,"e");return o.replace("e","E")}var frac1=/# (\?+)( ?)\/( ?)(\d+)/;function write_num_f1(r,aval,sign){var den=parseInt(r[4]),rr=Math.round(aval*den),base=Math.floor(rr/den);var myn=rr-base*den,myd=den;return sign+(base===0?"":""+base)+" "+(myn===0?fill(" ",r[1].length+1+r[4].length):pad_(myn,r[1].length)+r[2]+"/"+r[3]+pad0(myd,r[4].length))}function write_num_f2(r,aval,sign){return sign+(aval===0?"":""+aval)+fill(" ",r[1].length+2+r[4].length)}var dec1=/^#*0*\.(0+)/;var closeparen=/\).*[0#]/;var phone=/\(###\) ###\\?-####/;function hashq(str){var o="",cc;for(var i=0;i!=str.length;++i)switch(cc=str.charCodeAt(i)){case 35:break;case 63:o+=" ";break;case 48:o+="0";break;default:o+=String.fromCharCode(cc)}return o}function rnd(val,d){var dd=Math.pow(10,d);return""+Math.round(val*dd)/dd}function dec(val,d){return Math.round((val-Math.floor(val))*Math.pow(10,d))}function flr(val){if(val<2147483647&&val>-2147483648)return""+(val>=0?val|0:val-1|0);return""+Math.floor(val)}function write_num_flt(type,fmt,val){if(type.charCodeAt(0)===40&&!fmt.match(closeparen)){var ffmt=fmt.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,"");if(val>=0)return write_num_flt("n",ffmt,val);return"("+write_num_flt("n",ffmt,-val)+")"}if(fmt.charCodeAt(fmt.length-1)===44)return write_num_cm(type,fmt,val);if(fmt.indexOf("%")!==-1)return write_num_pct(type,fmt,val);if(fmt.indexOf("E")!==-1)return write_num_exp(fmt,val);if(fmt.charCodeAt(0)===36)return"$"+write_num_flt(type,fmt.substr(fmt[1]==" "?2:1),val);var o,oo;var r,ri,ff,aval=Math.abs(val),sign=val<0?"-":"";if(fmt.match(/^00+$/))return sign+pad0r(aval,fmt.length);if(fmt.match(/^[#?]+$/)){o=pad0r(val,0);if(o==="0")o="";return o.length>fmt.length?o:hashq(fmt.substr(0,fmt.length-o.length))+o}if((r=fmt.match(frac1))!==null)return write_num_f1(r,aval,sign);if(fmt.match(/^#+0+$/)!==null)return sign+pad0r(aval,fmt.length-fmt.indexOf("0"));if((r=fmt.match(dec1))!==null){o=rnd(val,r[1].length).replace(/^([^\.]+)$/,"$1."+r[1]).replace(/\.$/,"."+r[1]).replace(/\.(\d*)$/,function($$,$1){return"."+$1+fill("0",r[1].length-$1.length)});return fmt.indexOf("0.")!==-1?o:o.replace(/^0\./,".")}fmt=fmt.replace(/^#+([0.])/,"$1");if((r=fmt.match(/^(0*)\.(#*)$/))!==null){return sign+rnd(aval,r[2].length).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,r[1].length?"0.":".")}if((r=fmt.match(/^#,##0(\.?)$/))!==null)return sign+commaify(pad0r(aval,0));if((r=fmt.match(/^#,##0\.([#0]*0)$/))!==null){return val<0?"-"+write_num_flt(type,fmt,-val):commaify(""+Math.floor(val))+"."+pad0(dec(val,r[1].length),r[1].length)}if((r=fmt.match(/^#,#*,#0/))!==null)return write_num_flt(type,fmt.replace(/^#,#*,/,""),val);if((r=fmt.match(/^([0#]+)(\\?-([0#]+))+$/))!==null){o=_strrev(write_num_flt(type,fmt.replace(/[\\-]/g,""),val));ri=0;return _strrev(_strrev(fmt.replace(/\\/g,"")).replace(/[0#]/g,function(x){return ri<o.length?o[ri++]:x==="0"?"0":""}))}if(fmt.match(phone)!==null){o=write_num_flt(type,"##########",val);return"("+o.substr(0,3)+") "+o.substr(3,3)+"-"+o.substr(6)}var oa="";if((r=fmt.match(/^([#0?]+)( ?)\/( ?)([#0?]+)/))!==null){ri=Math.min(r[4].length,7);ff=frac(aval,Math.pow(10,ri)-1,false);o=""+sign;oa=write_num("n",r[1],ff[1]);if(oa[oa.length-1]==" ")oa=oa.substr(0,oa.length-1)+"0";o+=oa+r[2]+"/"+r[3];oa=rpad_(ff[2],ri);if(oa.length<r[4].length)oa=hashq(r[4].substr(r[4].length-oa.length))+oa;o+=oa;return o}if((r=fmt.match(/^# ([#0?]+)( ?)\/( ?)([#0?]+)/))!==null){ri=Math.min(Math.max(r[1].length,r[4].length),7);ff=frac(aval,Math.pow(10,ri)-1,true);return sign+(ff[0]||(ff[1]?"":"0"))+" "+(ff[1]?pad_(ff[1],ri)+r[2]+"/"+r[3]+rpad_(ff[2],ri):fill(" ",2*ri+1+r[2].length+r[3].length))}if((r=fmt.match(/^[#0?]+$/))!==null){o=pad0r(val,0);if(fmt.length<=o.length)return o;return hashq(fmt.substr(0,fmt.length-o.length))+o}if((r=fmt.match(/^([#0?]+)\.([#0]+)$/))!==null){o=""+val.toFixed(Math.min(r[2].length,10)).replace(/([^0])0+$/,"$1");ri=o.indexOf(".");var lres=fmt.indexOf(".")-ri,rres=fmt.length-o.length-lres;return hashq(fmt.substr(0,lres)+o+fmt.substr(fmt.length-rres))}if((r=fmt.match(/^00,000\.([#0]*0)$/))!==null){ri=dec(val,r[1].length);return val<0?"-"+write_num_flt(type,fmt,-val):commaify(flr(val)).replace(/^\d,\d{3}$/,"0$&").replace(/^\d*$/,function($$){return"00,"+($$.length<3?pad0(0,3-$$.length):"")+$$})+"."+pad0(ri,r[1].length)}switch(fmt){case"#,###":var x=commaify(pad0r(aval,0));return x!=="0"?sign+x:"";default:}throw new Error("unsupported format |"+fmt+"|")}function write_num_cm2(type,fmt,val){var idx=fmt.length-1;while(fmt.charCodeAt(idx-1)===44)--idx;return write_num(type,fmt.substr(0,idx),val/Math.pow(10,3*(fmt.length-idx)))}function write_num_pct2(type,fmt,val){var sfmt=fmt.replace(pct1,""),mul=fmt.length-sfmt.length;return write_num(type,sfmt,val*Math.pow(10,2*mul))+fill("%",mul)}function write_num_exp2(fmt,val){var o;var idx=fmt.indexOf("E")-fmt.indexOf(".")-1;if(fmt.match(/^#+0.0E\+0$/)){var period=fmt.indexOf(".");if(period===-1)period=fmt.indexOf("E");var ee=Math.floor(Math.log(Math.abs(val))*Math.LOG10E)%period;if(ee<0)ee+=period;o=(val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);if(!o.match(/[Ee]/)){var fakee=Math.floor(Math.log(Math.abs(val))*Math.LOG10E);if(o.indexOf(".")===-1)o=o[0]+"."+o.substr(1)+"E+"+(fakee-o.length+ee);else o+="E+"+(fakee-ee);o=o.replace(/\+-/,"-")}o=o.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/,function($$,$1,$2,$3){return $1+$2+$3.substr(0,(period+ee)%period)+"."+$3.substr(ee)+"E"})}else o=val.toExponential(idx);if(fmt.match(/E\+00$/)&&o.match(/e[+-]\d$/))o=o.substr(0,o.length-1)+"0"+o[o.length-1];if(fmt.match(/E\-/)&&o.match(/e\+/))o=o.replace(/e\+/,"e");return o.replace("e","E")}function write_num_int(type,fmt,val){if(type.charCodeAt(0)===40&&!fmt.match(closeparen)){var ffmt=fmt.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,"");if(val>=0)return write_num_int("n",ffmt,val);return"("+write_num_int("n",ffmt,-val)+")"}if(fmt.charCodeAt(fmt.length-1)===44)return write_num_cm2(type,fmt,val);if(fmt.indexOf("%")!==-1)return write_num_pct2(type,fmt,val);if(fmt.indexOf("E")!==-1)return write_num_exp2(fmt,val);if(fmt.charCodeAt(0)===36)return"$"+write_num_int(type,fmt.substr(fmt[1]==" "?2:1),val);var o;var r,ri,ff,aval=Math.abs(val),sign=val<0?"-":"";if(fmt.match(/^00+$/))return sign+pad0(aval,fmt.length);if(fmt.match(/^[#?]+$/)){o=""+val;if(val===0)o="";return o.length>fmt.length?o:hashq(fmt.substr(0,fmt.length-o.length))+o}if((r=fmt.match(frac1))!==null)return write_num_f2(r,aval,sign);if(fmt.match(/^#+0+$/)!==null)return sign+pad0(aval,fmt.length-fmt.indexOf("0"));if((r=fmt.match(dec1))!==null){o=(""+val).replace(/^([^\.]+)$/,"$1."+r[1]).replace(/\.$/,"."+r[1]).replace(/\.(\d*)$/,function($$,$1){return"."+$1+fill("0",r[1].length-$1.length)});return fmt.indexOf("0.")!==-1?o:o.replace(/^0\./,".");
+}fmt=fmt.replace(/^#+([0.])/,"$1");if((r=fmt.match(/^(0*)\.(#*)$/))!==null){return sign+(""+aval).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,r[1].length?"0.":".")}if((r=fmt.match(/^#,##0(\.?)$/))!==null)return sign+commaify(""+aval);if((r=fmt.match(/^#,##0\.([#0]*0)$/))!==null){return val<0?"-"+write_num_int(type,fmt,-val):commaify(""+val)+"."+fill("0",r[1].length)}if((r=fmt.match(/^#,#*,#0/))!==null)return write_num_int(type,fmt.replace(/^#,#*,/,""),val);if((r=fmt.match(/^([0#]+)(\\?-([0#]+))+$/))!==null){o=_strrev(write_num_int(type,fmt.replace(/[\\-]/g,""),val));ri=0;return _strrev(_strrev(fmt.replace(/\\/g,"")).replace(/[0#]/g,function(x){return ri<o.length?o[ri++]:x==="0"?"0":""}))}if(fmt.match(phone)!==null){o=write_num_int(type,"##########",val);return"("+o.substr(0,3)+") "+o.substr(3,3)+"-"+o.substr(6)}var oa="";if((r=fmt.match(/^([#0?]+)( ?)\/( ?)([#0?]+)/))!==null){ri=Math.min(r[4].length,7);ff=frac(aval,Math.pow(10,ri)-1,false);o=""+sign;oa=write_num("n",r[1],ff[1]);if(oa[oa.length-1]==" ")oa=oa.substr(0,oa.length-1)+"0";o+=oa+r[2]+"/"+r[3];oa=rpad_(ff[2],ri);if(oa.length<r[4].length)oa=hashq(r[4].substr(r[4].length-oa.length))+oa;o+=oa;return o}if((r=fmt.match(/^# ([#0?]+)( ?)\/( ?)([#0?]+)/))!==null){ri=Math.min(Math.max(r[1].length,r[4].length),7);ff=frac(aval,Math.pow(10,ri)-1,true);return sign+(ff[0]||(ff[1]?"":"0"))+" "+(ff[1]?pad_(ff[1],ri)+r[2]+"/"+r[3]+rpad_(ff[2],ri):fill(" ",2*ri+1+r[2].length+r[3].length))}if((r=fmt.match(/^[#0?]+$/))!==null){o=""+val;if(fmt.length<=o.length)return o;return hashq(fmt.substr(0,fmt.length-o.length))+o}if((r=fmt.match(/^([#0]+)\.([#0]+)$/))!==null){o=""+val.toFixed(Math.min(r[2].length,10)).replace(/([^0])0+$/,"$1");ri=o.indexOf(".");var lres=fmt.indexOf(".")-ri,rres=fmt.length-o.length-lres;return hashq(fmt.substr(0,lres)+o+fmt.substr(fmt.length-rres))}if((r=fmt.match(/^00,000\.([#0]*0)$/))!==null){return val<0?"-"+write_num_int(type,fmt,-val):commaify(""+val).replace(/^\d,\d{3}$/,"0$&").replace(/^\d*$/,function($$){return"00,"+($$.length<3?pad0(0,3-$$.length):"")+$$})+"."+pad0(0,r[1].length)}switch(fmt){case"#,###":var x=commaify(""+aval);return x!=="0"?sign+x:"";default:}throw new Error("unsupported format |"+fmt+"|")}return function write_num(type,fmt,val){return(val|0)===val?write_num_int(type,fmt,val):write_num_flt(type,fmt,val)}}();function split_fmt(fmt){var out=[];var in_str=false,cc;for(var i=0,j=0;i<fmt.length;++i)switch(cc=fmt.charCodeAt(i)){case 34:in_str=!in_str;break;case 95:case 42:case 92:++i;break;case 59:out[out.length]=fmt.substr(j,i-j);j=i+1}out[out.length]=fmt.substr(j);if(in_str===true)throw new Error("Format |"+fmt+"| unterminated string ");return out}SSF._split=split_fmt;var abstime=/\[[HhMmSs]*\]/;function eval_fmt(fmt,v,opts,flen){var out=[],o="",i=0,c="",lst="t",q,dt,j,cc;var hr="H";while(i<fmt.length){switch(c=fmt[i]){case"G":if(!isgeneral(fmt,i))throw new Error("unrecognized character "+c+" in "+fmt);out[out.length]={t:"G",v:"General"};i+=7;break;case'"':for(o="";(cc=fmt.charCodeAt(++i))!==34&&i<fmt.length;)o+=String.fromCharCode(cc);out[out.length]={t:"t",v:o};++i;break;case"\\":var w=fmt[++i],t=w==="("||w===")"?w:"t";out[out.length]={t:t,v:w};++i;break;case"_":out[out.length]={t:"t",v:" "};i+=2;break;case"@":out[out.length]={t:"T",v:v};++i;break;case"B":case"b":if(fmt[i+1]==="1"||fmt[i+1]==="2"){if(dt==null){dt=parse_date_code(v,opts,fmt[i+1]==="2");if(dt==null)return""}out[out.length]={t:"X",v:fmt.substr(i,2)};lst=c;i+=2;break}case"M":case"D":case"Y":case"H":case"S":case"E":c=c.toLowerCase();case"m":case"d":case"y":case"h":case"s":case"e":case"g":if(v<0)return"";if(dt==null){dt=parse_date_code(v,opts);if(dt==null)return""}o=c;while(++i<fmt.length&&fmt[i].toLowerCase()===c)o+=c;if(c==="m"&&lst.toLowerCase()==="h")c="M";if(c==="h")c=hr;out[out.length]={t:c,v:o};lst=c;break;case"A":q={t:c,v:"A"};if(dt==null)dt=parse_date_code(v,opts);if(fmt.substr(i,3)==="A/P"){if(dt!=null)q.v=dt.H>=12?"P":"A";q.t="T";hr="h";i+=3}else if(fmt.substr(i,5)==="AM/PM"){if(dt!=null)q.v=dt.H>=12?"PM":"AM";q.t="T";i+=5;hr="h"}else{q.t="t";++i}if(dt==null&&q.t==="T")return"";out[out.length]=q;lst=c;break;case"[":o=c;while(fmt[i++]!=="]"&&i<fmt.length)o+=fmt[i];if(o.substr(-1)!=="]")throw'unterminated "[" block: |'+o+"|";if(o.match(abstime)){if(dt==null){dt=parse_date_code(v,opts);if(dt==null)return""}out[out.length]={t:"Z",v:o.toLowerCase()}}else{o=""}break;case".":if(dt!=null){o=c;while((c=fmt[++i])==="0")o+=c;out[out.length]={t:"s",v:o};break}case"0":case"#":o=c;while("0#?.,E+-%".indexOf(c=fmt[++i])>-1||c=="\\"&&fmt[i+1]=="-"&&"0#".indexOf(fmt[i+2])>-1)o+=c;out[out.length]={t:"n",v:o};break;case"?":o=c;while(fmt[++i]===c)o+=c;q={t:c,v:o};out[out.length]=q;lst=c;break;case"*":++i;if(fmt[i]==" "||fmt[i]=="*")++i;break;case"(":case")":out[out.length]={t:flen===1?"t":c,v:c};++i;break;case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":o=c;while("0123456789".indexOf(fmt[++i])>-1)o+=fmt[i];out[out.length]={t:"D",v:o};break;case" ":out[out.length]={t:c,v:c};++i;break;default:if(",$-+/():!^&'~{}<>=鈧琣cfijklopqrtuvwxz".indexOf(c)===-1)throw new Error("unrecognized character "+c+" in "+fmt);out[out.length]={t:"t",v:c};++i;break}}var bt=0,ss0=0,ssm;for(i=out.length-1,lst="t";i>=0;--i){switch(out[i].t){case"h":case"H":out[i].t=hr;lst="h";if(bt<1)bt=1;break;case"s":if(ssm=out[i].v.match(/\.0+$/))ss0=Math.max(ss0,ssm[0].length-1);if(bt<3)bt=3;case"d":case"y":case"M":case"e":lst=out[i].t;break;case"m":if(lst==="s"){out[i].t="M";if(bt<2)bt=2}break;case"X":if(out[i].v==="B2");break;case"Z":if(bt<1&&out[i].v.match(/[Hh]/))bt=1;if(bt<2&&out[i].v.match(/[Mm]/))bt=2;if(bt<3&&out[i].v.match(/[Ss]/))bt=3}}switch(bt){case 0:break;case 1:if(dt.u>=.5){dt.u=0;++dt.S}if(dt.S>=60){dt.S=0;++dt.M}if(dt.M>=60){dt.M=0;++dt.H}break;case 2:if(dt.u>=.5){dt.u=0;++dt.S}if(dt.S>=60){dt.S=0;++dt.M}break}var nstr="",jj;for(i=0;i<out.length;++i){switch(out[i].t){case"t":case"T":case" ":case"D":break;case"X":out[i]=undefined;break;case"d":case"m":case"y":case"h":case"H":case"M":case"s":case"e":case"b":case"Z":out[i].v=write_date(out[i].t.charCodeAt(0),out[i].v,dt,ss0);out[i].t="t";break;case"n":case"(":case"?":jj=i+1;while(out[jj]!=null&&((c=out[jj].t)==="?"||c==="D"||(c===" "||c==="t")&&out[jj+1]!=null&&(out[jj+1].t==="?"||out[jj+1].t==="t"&&out[jj+1].v==="/")||out[i].t==="("&&(c===" "||c==="n"||c===")")||c==="t"&&(out[jj].v==="/"||"$鈧�".indexOf(out[jj].v)>-1||out[jj].v===" "&&out[jj+1]!=null&&out[jj+1].t=="?"))){out[i].v+=out[jj].v;out[jj]=undefined;++jj}nstr+=out[i].v;i=jj-1;break;case"G":out[i].t="t";out[i].v=general_fmt(v,opts);break}}var vv="",myv,ostr;if(nstr.length>0){myv=v<0&&nstr.charCodeAt(0)===45?-v:v;ostr=write_num(nstr.charCodeAt(0)===40?"(":"n",nstr,myv);jj=ostr.length-1;var decpt=out.length;for(i=0;i<out.length;++i)if(out[i]!=null&&out[i].v.indexOf(".")>-1){decpt=i;break}var lasti=out.length;if(decpt===out.length&&ostr.indexOf("E")===-1){for(i=out.length-1;i>=0;--i){if(out[i]==null||"n?(".indexOf(out[i].t)===-1)continue;if(jj>=out[i].v.length-1){jj-=out[i].v.length;out[i].v=ostr.substr(jj+1,out[i].v.length)}else if(jj<0)out[i].v="";else{out[i].v=ostr.substr(0,jj+1);jj=-1}out[i].t="t";lasti=i}if(jj>=0&&lasti<out.length)out[lasti].v=ostr.substr(0,jj+1)+out[lasti].v}else if(decpt!==out.length&&ostr.indexOf("E")===-1){jj=ostr.indexOf(".")-1;for(i=decpt;i>=0;--i){if(out[i]==null||"n?(".indexOf(out[i].t)===-1)continue;j=out[i].v.indexOf(".")>-1&&i===decpt?out[i].v.indexOf(".")-1:out[i].v.length-1;vv=out[i].v.substr(j+1);for(;j>=0;--j){if(jj>=0&&(out[i].v[j]==="0"||out[i].v[j]==="#"))vv=ostr[jj--]+vv}out[i].v=vv;out[i].t="t";lasti=i}if(jj>=0&&lasti<out.length)out[lasti].v=ostr.substr(0,jj+1)+out[lasti].v;jj=ostr.indexOf(".")+1;for(i=decpt;i<out.length;++i){if(out[i]==null||"n?(".indexOf(out[i].t)===-1&&i!==decpt)continue;j=out[i].v.indexOf(".")>-1&&i===decpt?out[i].v.indexOf(".")+1:0;vv=out[i].v.substr(0,j);for(;j<out[i].v.length;++j){if(jj<ostr.length)vv+=ostr[jj++]}out[i].v=vv;out[i].t="t";lasti=i}}}for(i=0;i<out.length;++i)if(out[i]!=null&&"n(?".indexOf(out[i].t)>-1){myv=flen>1&&v<0&&i>0&&out[i-1].v==="-"?-v:v;out[i].v=write_num(out[i].t,out[i].v,myv);out[i].t="t"}var retval="";for(i=0;i!==out.length;++i)if(out[i]!=null)retval+=out[i].v;return retval}SSF._eval=eval_fmt;var cfregex=/\[[=<>]/;var cfregex2=/\[([=<>]*)(-?\d+\.?\d*)\]/;function chkcond(v,rr){if(rr==null)return false;var thresh=parseFloat(rr[2]);switch(rr[1]){case"=":if(v==thresh)return true;break;case">":if(v>thresh)return true;break;case"<":if(v<thresh)return true;break;case"<>":if(v!=thresh)return true;break;case">=":if(v>=thresh)return true;break;case"<=":if(v<=thresh)return true;break}return false}function choose_fmt(f,v){var fmt=split_fmt(f);var l=fmt.length,lat=fmt[l-1].indexOf("@");if(l<4&&lat>-1)--l;if(fmt.length>4)throw"cannot find right format for |"+fmt+"|";if(typeof v!=="number")return[4,fmt.length===4||lat>-1?fmt[fmt.length-1]:"@"];switch(fmt.length){case 1:fmt=lat>-1?["General","General","General",fmt[0]]:[fmt[0],fmt[0],fmt[0],"@"];break;case 2:fmt=lat>-1?[fmt[0],fmt[0],fmt[0],fmt[1]]:[fmt[0],fmt[1],fmt[0],"@"];break;case 3:fmt=lat>-1?[fmt[0],fmt[1],fmt[0],fmt[2]]:[fmt[0],fmt[1],fmt[2],"@"];break;case 4:break}var ff=v>0?fmt[0]:v<0?fmt[1]:fmt[2];if(fmt[0].indexOf("[")===-1&&fmt[1].indexOf("[")===-1)return[l,ff];if(fmt[0].match(cfregex)!=null||fmt[1].match(cfregex)!=null){var m1=fmt[0].match(cfregex2);var m2=fmt[1].match(cfregex2);return chkcond(v,m1)?[l,fmt[0]]:chkcond(v,m2)?[l,fmt[1]]:[l,fmt[m1!=null&&m2!=null?2:1]]}return[l,ff]}function format(fmt,v,o){fixopts(o!=null?o:o=[]);var sfmt="";switch(typeof fmt){case"string":sfmt=fmt;break;case"number":sfmt=(o.table!=null?o.table:table_fmt)[fmt];break}if(isgeneral(sfmt,0))return general_fmt(v,o);var f=choose_fmt(sfmt,v);if(isgeneral(f[1]))return general_fmt(v,o);if(v===true)v="TRUE";else if(v===false)v="FALSE";else if(v===""||v==null)return"";return eval_fmt(f[1],v,o,f[0])}SSF._table=table_fmt;SSF.load=function load_entry(fmt,idx){table_fmt[idx]=fmt};SSF.format=format;SSF.get_table=function get_table(){return table_fmt};SSF.load_table=function load_table(tbl){for(var i=0;i!=392;++i)if(tbl[i]!==undefined)SSF.load(tbl[i],i)}};make_ssf(SSF);var XLMLFormatMap={"General Number":"General","General Date":SSF._table[22],"Long Date":"dddd, mmmm dd, yyyy","Medium Date":SSF._table[15],"Short Date":SSF._table[14],"Long Time":SSF._table[19],"Medium Time":SSF._table[18],"Short Time":SSF._table[20],Currency:'"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',Fixed:SSF._table[2],Standard:SSF._table[4],Percent:SSF._table[10],Scientific:SSF._table[11],"Yes/No":'"Yes";"Yes";"No";@',"True/False":'"True";"True";"False";@',"On/Off":'"Yes";"Yes";"No";@'};var DO_NOT_EXPORT_CFB=true;var CFB=function _CFB(){var exports={};exports.version="0.10.2";function parse(file){var mver=3;var ssz=512;var nmfs=0;var ndfs=0;var dir_start=0;var minifat_start=0;var difat_start=0;var fat_addrs=[];var blob=file.slice(0,512);prep_blob(blob,0);var mv=check_get_mver(blob);mver=mv[0];switch(mver){case 3:ssz=512;break;case 4:ssz=4096;break;default:throw"Major Version: Expected 3 or 4 saw "+mver}if(ssz!==512){blob=file.slice(0,ssz);prep_blob(blob,28)}var header=file.slice(0,ssz);check_shifts(blob,mver);var nds=blob.read_shift(4,"i");if(mver===3&&nds!==0)throw"# Directory Sectors: Expected 0 saw "+nds;blob.l+=4;dir_start=blob.read_shift(4,"i");blob.l+=4;blob.chk("00100000","Mini Stream Cutoff Size: ");minifat_start=blob.read_shift(4,"i");nmfs=blob.read_shift(4,"i");difat_start=blob.read_shift(4,"i");ndfs=blob.read_shift(4,"i");for(var q,j=0;j<109;++j){q=blob.read_shift(4,"i");if(q<0)break;fat_addrs[j]=q}var sectors=sectorify(file,ssz);sleuth_fat(difat_start,ndfs,sectors,ssz,fat_addrs);var sector_list=make_sector_list(sectors,dir_start,fat_addrs,ssz);sector_list[dir_start].name="!Directory";if(nmfs>0&&minifat_start!==ENDOFCHAIN)sector_list[minifat_start].name="!MiniFAT";sector_list[fat_addrs[0]].name="!FAT";sector_list.fat_addrs=fat_addrs;sector_list.ssz=ssz;var files={},Paths=[],FileIndex=[],FullPaths=[],FullPathDir={};read_directory(dir_start,sector_list,sectors,Paths,nmfs,files,FileIndex);build_full_paths(FileIndex,FullPathDir,FullPaths,Paths);var root_name=Paths.shift();Paths.root=root_name;var find_path=make_find_path(FullPaths,Paths,FileIndex,files,root_name);return{raw:{header:header,sectors:sectors},FileIndex:FileIndex,FullPaths:FullPaths,FullPathDir:FullPathDir,find:find_path}}function check_get_mver(blob){blob.chk(HEADER_SIGNATURE,"Header Signature: ");blob.chk(HEADER_CLSID,"CLSID: ");var mver=blob.read_shift(2,"u");return[blob.read_shift(2,"u"),mver]}function check_shifts(blob,mver){var shift=9;blob.chk("feff","Byte Order: ");switch(shift=blob.read_shift(2)){case 9:if(mver!==3)throw"MajorVersion/SectorShift Mismatch";break;case 12:if(mver!==4)throw"MajorVersion/SectorShift Mismatch";break;default:throw"Sector Shift: Expected 9 or 12 saw "+shift}blob.chk("0600","Mini Sector Shift: ");blob.chk("000000000000","Reserved: ")}function sectorify(file,ssz){var nsectors=Math.ceil(file.length/ssz)-1;var sectors=new Array(nsectors);for(var i=1;i<nsectors;++i)sectors[i-1]=file.slice(i*ssz,(i+1)*ssz);sectors[nsectors-1]=file.slice(nsectors*ssz);return sectors}function build_full_paths(FI,FPD,FP,Paths){var i=0,L=0,R=0,C=0,j=0,pl=Paths.length;var dad=new Array(pl),q=new Array(pl);for(;i<pl;++i){dad[i]=q[i]=i;FP[i]=Paths[i]}for(;j<q.length;++j){i=q[j];L=FI[i].L;R=FI[i].R;C=FI[i].C;if(dad[i]===i){if(L!==-1&&dad[L]!==L)dad[i]=dad[L];if(R!==-1&&dad[R]!==R)dad[i]=dad[R]}if(C!==-1)dad[C]=i;if(L!==-1){dad[L]=dad[i];q.push(L)}if(R!==-1){dad[R]=dad[i];q.push(R)}}for(i=1;i!==pl;++i)if(dad[i]===i){if(R!==-1&&dad[R]!==R)dad[i]=dad[R];else if(L!==-1&&dad[L]!==L)dad[i]=dad[L]}for(i=1;i<pl;++i){if(FI[i].type===0)continue;j=dad[i];if(j===0)FP[i]=FP[0]+"/"+FP[i];else while(j!==0){FP[i]=FP[j]+"/"+FP[i];j=dad[j]}dad[i]=0}FP[0]+="/";for(i=1;i<pl;++i){if(FI[i].type!==2)FP[i]+="/";FPD[FP[i]]=FI[i]}}function make_find_path(FullPaths,Paths,FileIndex,files,root_name){var UCFullPaths=new Array(FullPaths.length);var UCPaths=new Array(Paths.length),i;for(i=0;i<FullPaths.length;++i)UCFullPaths[i]=FullPaths[i].toUpperCase().replace(chr0,"").replace(chr1,"!");for(i=0;i<Paths.length;++i)UCPaths[i]=Paths[i].toUpperCase().replace(chr0,"").replace(chr1,"!");return function find_path(path){var k;if(path.charCodeAt(0)===47){k=true;path=root_name+path}else k=path.indexOf("/")!==-1;var UCPath=path.toUpperCase().replace(chr0,"").replace(chr1,"!");var w=k===true?UCFullPaths.indexOf(UCPath):UCPaths.indexOf(UCPath);if(w===-1)return null;return k===true?FileIndex[w]:files[Paths[w]]}}function sleuth_fat(idx,cnt,sectors,ssz,fat_addrs){var q;if(idx===ENDOFCHAIN){if(cnt!==0)throw"DIFAT chain shorter than expected"}else if(idx!==-1){var sector=sectors[idx],m=(ssz>>>2)-1;for(var i=0;i<m;++i){if((q=__readInt32LE(sector,i*4))===ENDOFCHAIN)break;fat_addrs.push(q)}sleuth_fat(__readInt32LE(sector,ssz-4),cnt-1,sectors,ssz,fat_addrs)}}function get_sector_list(sectors,start,fat_addrs,ssz,chkd){var sl=sectors.length;var buf,buf_chain;if(!chkd)chkd=new Array(sl);var modulus=ssz-1,j,jj;buf=[];buf_chain=[];for(j=start;j>=0;){chkd[j]=true;buf[buf.length]=j;buf_chain.push(sectors[j]);var addr=fat_addrs[Math.floor(j*4/ssz)];jj=j*4&modulus;if(ssz<4+jj)throw"FAT boundary crossed: "+j+" 4 "+ssz;j=__readInt32LE(sectors[addr],jj)}return{nodes:buf,data:__toBuffer([buf_chain])}}function make_sector_list(sectors,dir_start,fat_addrs,ssz){var sl=sectors.length,sector_list=new Array(sl);var chkd=new Array(sl),buf,buf_chain;var modulus=ssz-1,i,j,k,jj;for(i=0;i<sl;++i){buf=[];k=i+dir_start;if(k>=sl)k-=sl;if(chkd[k]===true)continue;buf_chain=[];for(j=k;j>=0;){chkd[j]=true;buf[buf.length]=j;buf_chain.push(sectors[j]);var addr=fat_addrs[Math.floor(j*4/ssz)];jj=j*4&modulus;if(ssz<4+jj)throw"FAT boundary crossed: "+j+" 4 "+ssz;j=__readInt32LE(sectors[addr],jj)}sector_list[k]={nodes:buf,data:__toBuffer([buf_chain])}}return sector_list}function read_directory(dir_start,sector_list,sectors,Paths,nmfs,files,FileIndex){var blob;var minifat_store=0,pl=Paths.length?2:0;var sector=sector_list[dir_start].data;var i=0,namelen=0,name,o,ctime,mtime;for(;i<sector.length;i+=128){blob=sector.slice(i,i+128);prep_blob(blob,64);namelen=blob.read_shift(2);if(namelen===0)continue;name=__utf16le(blob,0,namelen-pl);Paths.push(name);o={name:name,type:blob.read_shift(1),color:blob.read_shift(1),L:blob.read_shift(4,"i"),R:blob.read_shift(4,"i"),C:blob.read_shift(4,"i"),clsid:blob.read_shift(16),state:blob.read_shift(4,"i")};ctime=blob.read_shift(2)+blob.read_shift(2)+blob.read_shift(2)+blob.read_shift(2);if(ctime!==0){o.ctime=ctime;o.ct=read_date(blob,blob.l-8)}mtime=blob.read_shift(2)+blob.read_shift(2)+blob.read_shift(2)+blob.read_shift(2);if(mtime!==0){o.mtime=mtime;o.mt=read_date(blob,blob.l-8)}o.start=blob.read_shift(4,"i");o.size=blob.read_shift(4,"i");if(o.type===5){minifat_store=o.start;if(nmfs>0&&minifat_store!==ENDOFCHAIN)sector_list[minifat_store].name="!StreamData"}else if(o.size>=4096){o.storage="fat";if(sector_list[o.start]===undefined)sector_list[o.start]=get_sector_list(sectors,o.start,sector_list.fat_addrs,sector_list.ssz);sector_list[o.start].name=o.name;o.content=sector_list[o.start].data.slice(0,o.size);prep_blob(o.content,0)}else{o.storage="minifat";if(minifat_store!==ENDOFCHAIN&&o.start!==ENDOFCHAIN){o.content=sector_list[minifat_store].data.slice(o.start*MSSZ,o.start*MSSZ+o.size);prep_blob(o.content,0)}}files[name]=o;FileIndex.push(o)}}function read_date(blob,offset){return new Date((__readUInt32LE(blob,offset+4)/1e7*Math.pow(2,32)+__readUInt32LE(blob,offset)/1e7-11644473600)*1e3)}var fs;function readFileSync(filename,options){if(fs===undefined)fs=require("fs");return parse(fs.readFileSync(filename),options)}function readSync(blob,options){switch(options!==undefined&&options.type!==undefined?options.type:"base64"){case"file":return readFileSync(blob,options);case"base64":return parse(s2a(Base64.decode(blob)),options);case"binary":return parse(s2a(blob),options)}return parse(blob)}var MSSZ=64;var ENDOFCHAIN=-2;var HEADER_SIGNATURE="d0cf11e0a1b11ae1";var HEADER_CLSID="00000000000000000000000000000000";var consts={MAXREGSECT:-6,DIFSECT:-4,FATSECT:-3,ENDOFCHAIN:ENDOFCHAIN,FREESECT:-1,HEADER_SIGNATURE:HEADER_SIGNATURE,HEADER_MINOR_VERSION:"3e00",MAXREGSID:-6,NOSTREAM:-1,HEADER_CLSID:HEADER_CLSID,EntryTypes:["unknown","storage","stream","lockbytes","property","root"]};exports.read=readSync;exports.parse=parse;exports.utils={ReadShift:ReadShift,CheckField:CheckField,prep_blob:prep_blob,bconcat:bconcat,consts:consts};return exports}();if(typeof require!=="undefined"&&typeof module!=="undefined"&&typeof DO_NOT_EXPORT_CFB==="undefined"){module.exports=CFB}function isval(x){return x!==undefined&&x!==null}function keys(o){return Object.keys(o)}function evert_key(obj,key){var o=[],K=keys(obj);for(var i=0;i!==K.length;++i)o[obj[K[i]][key]]=K[i];return o}function evert(obj){var o=[],K=keys(obj);for(var i=0;i!==K.length;++i)o[obj[K[i]]]=K[i];return o}function evert_num(obj){var o=[],K=keys(obj);for(var i=0;i!==K.length;++i)o[obj[K[i]]]=parseInt(K[i],10);return o}function evert_arr(obj){var o=[],K=keys(obj);for(var i=0;i!==K.length;++i){if(o[obj[K[i]]]==null)o[obj[K[i]]]=[];o[obj[K[i]]].push(K[i])}return o}function datenum(v,date1904){if(date1904)v+=1462;var epoch=Date.parse(v);return(epoch+22091616e5)/(24*60*60*1e3)}function cc2str(arr){var o="";for(var i=0;i!=arr.length;++i)o+=String.fromCharCode(arr[i]);return o}function getdata(data){if(!data)return null;if(data.name.substr(-4)===".bin"){if(data.data)return char_codes(data.data);if(data.asNodeBuffer&&has_buf)return data.asNodeBuffer();if(data._data&&data._data.getContent)return Array.prototype.slice.call(data._data.getContent())}else{if(data.data)return data.name.substr(-4)!==".bin"?debom_xml(data.data):char_codes(data.data);if(data.asNodeBuffer&&has_buf)return debom_xml(data.asNodeBuffer().toString("binary"));if(data.asBinary)return debom_xml(data.asBinary());if(data._data&&data._data.getContent)return debom_xml(cc2str(Array.prototype.slice.call(data._data.getContent(),0)))}return null}function safegetzipfile(zip,file){var f=file;if(zip.files[f])return zip.files[f];var lowerCaseFiles={};for(var key in zip.files){lowerCaseFiles[key.toLowerCase()]=zip.files[key]}f=file.toLowerCase();if(lowerCaseFiles[f])return lowerCaseFiles[f];f=f.replace(/\//g,"\\");if(lowerCaseFiles[f])return lowerCaseFiles[f];return null}function getzipfile(zip,file){var o=safegetzipfile(zip,file);if(o==null)throw new Error("Cannot find file "+file+" in zip");return o}function getzipdata(zip,file,safe){if(!safe)return getdata(getzipfile(zip,file));if(!file)return null;try{return getzipdata(zip,file)}catch(e){return null}}var _fs,jszip;if(typeof JSZip!=="undefined")jszip=JSZip;if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports){if(has_buf&&typeof jszip==="undefined")jszip=require("js"+"zip");if(typeof jszip==="undefined")jszip=require("./js"+"zip").JSZip;_fs=require("f"+"s")}}var attregexg=/([\w:]+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:'))/g;var tagregex=/<[^>]*>/g;var nsregex=/<\w*:/,nsregex2=/<(\/?)\w+:/;function parsexmltag(tag,skip_root){var z=[];var eq=0,c=0;for(;eq!==tag.length;++eq)if((c=tag.charCodeAt(eq))===32||c===10||c===13)break;if(!skip_root)z[0]=tag.substr(0,eq);if(eq===tag.length)return z;var m=tag.match(attregexg),j=0,w="",v="",i=0,q="",cc="";if(m)for(i=0;i!=m.length;++i){cc=m[i];for(c=0;c!=cc.length;++c)if(cc.charCodeAt(c)===61)break;q=cc.substr(0,c);v=cc.substring(c+2,cc.length-1);for(j=0;j!=q.length;++j)if(q.charCodeAt(j)===58)break;if(j===q.length)z[q]=v;else z[(j===5&&q.substr(0,5)==="xmlns"?"xmlns":"")+q.substr(j+1)]=v}return z}function strip_ns(x){return x.replace(nsregex2,"<$1")}var encodings={"&quot;":'"',"&apos;":"'","&gt;":">","&lt;":"<","&amp;":"&"};var rencoding=evert(encodings);var rencstr="&<>'\"".split("");var unescapexml=function(){var encregex=/&[a-z]*;/g,coderegex=/_x([\da-fA-F]+)_/g;return function unescapexml(text){var s=text+"";return s.replace(encregex,function($$){return encodings[$$]}).replace(coderegex,function(m,c){return String.fromCharCode(parseInt(c,16))})}}();var decregex=/[&<>'"]/g,charegex=/[\u0000-\u0008\u000b-\u001f]/g;function escapexml(text){var s=text+"";return s.replace(decregex,function(y){return rencoding[y]}).replace(charegex,function(s){return"_x"+("000"+s.charCodeAt(0).toString(16)).substr(-4)+"_"})}var xlml_fixstr=function(){var entregex=/&#(\d+);/g;function entrepl($$,$1){return String.fromCharCode(parseInt($1,10))}return function xlml_fixstr(str){return str.replace(entregex,entrepl)}}();function parsexmlbool(value,tag){switch(value){case"1":case"true":case"TRUE":return true;default:return false}}var utf8read=function utf8reada(orig){var out="",i=0,c=0,d=0,e=0,f=0,w=0;while(i<orig.length){c=orig.charCodeAt(i++);if(c<128){out+=String.fromCharCode(c);continue}d=orig.charCodeAt(i++);if(c>191&&c<224){out+=String.fromCharCode((c&31)<<6|d&63);continue}e=orig.charCodeAt(i++);if(c<240){out+=String.fromCharCode((c&15)<<12|(d&63)<<6|e&63);continue}f=orig.charCodeAt(i++);w=((c&7)<<18|(d&63)<<12|(e&63)<<6|f&63)-65536;out+=String.fromCharCode(55296+(w>>>10&1023));out+=String.fromCharCode(56320+(w&1023))}return out};if(has_buf){var utf8readb=function utf8readb(data){var out=new Buffer(2*data.length),w,i,j=1,k=0,ww=0,c;for(i=0;i<data.length;i+=j){j=1;if((c=data.charCodeAt(i))<128)w=c;else if(c<224){w=(c&31)*64+(data.charCodeAt(i+1)&63);j=2}else if(c<240){w=(c&15)*4096+(data.charCodeAt(i+1)&63)*64+(data.charCodeAt(i+2)&63);j=3}else{j=4;w=(c&7)*262144+(data.charCodeAt(i+1)&63)*4096+(data.charCodeAt(i+2)&63)*64+(data.charCodeAt(i+3)&63);w-=65536;ww=55296+(w>>>10&1023);w=56320+(w&1023)}if(ww!==0){out[k++]=ww&255;out[k++]=ww>>>8;ww=0}out[k++]=w%256;out[k++]=w>>>8}out.length=k;return out.toString("ucs2")};var corpus="foo bar baz芒聵聝冒聼聧拢";if(utf8read(corpus)==utf8readb(corpus))utf8read=utf8readb;var utf8readc=function utf8readc(data){return Buffer(data,"binary").toString("utf8")};if(utf8read(corpus)==utf8readc(corpus))utf8read=utf8readc}var matchtag=function(){var mtcache={};return function matchtag(f,g){var t=f+"|"+g;if(mtcache[t]!==undefined)return mtcache[t];return mtcache[t]=new RegExp("<(?:\\w+:)?"+f+'(?: xml:space="preserve")?(?:[^>]*)>([^鈽僝*)</(?:\\w+:)?'+f+">",g||"")}}();var vtregex=function(){var vt_cache={};return function vt_regex(bt){if(vt_cache[bt]!==undefined)return vt_cache[bt];return vt_cache[bt]=new RegExp("<vt:"+bt+">(.*?)</vt:"+bt+">","g")}}();var vtvregex=/<\/?vt:variant>/g,vtmregex=/<vt:([^>]*)>(.*)</;function parseVector(data){var h=parsexmltag(data);var matches=data.match(vtregex(h.baseType))||[];if(matches.length!=h.size)throw"unexpected vector length "+matches.length+" != "+h.size;var res=[];matches.forEach(function(x){var v=x.replace(vtvregex,"").match(vtmregex);res.push({v:v[2],t:v[1]})});return res}var wtregex=/(^\s|\s$|\n)/;function writetag(f,g){return"<"+f+(g.match(wtregex)?' xml:space="preserve"':"")+">"+g+"</"+f+">"}function wxt_helper(h){return keys(h).map(function(k){return" "+k+'="'+h[k]+'"'}).join("")}function writextag(f,g,h){return"<"+f+(isval(h)?wxt_helper(h):"")+(isval(g)?(g.match(wtregex)?' xml:space="preserve"':"")+">"+g+"</"+f:"/")+">"}function write_w3cdtf(d,t){try{return d.toISOString().replace(/\.\d*/,"")}catch(e){if(t)throw e}}function write_vt(s){switch(typeof s){case"string":return writextag("vt:lpwstr",s);case"number":return writextag((s|0)==s?"vt:i4":"vt:r8",String(s));case"boolean":return writextag("vt:bool",s?"true":"false")}if(s instanceof Date)return writextag("vt:filetime",write_w3cdtf(s));throw new Error("Unable to serialize "+s)}var XML_HEADER='<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\r\n';var XMLNS={dc:"http://purl.org/dc/elements/1.1/",dcterms:"http://purl.org/dc/terms/",dcmitype:"http://purl.org/dc/dcmitype/",mx:"http://schemas.microsoft.com/office/mac/excel/2008/main",r:"http://schemas.openxmlformats.org/officeDocument/2006/relationships",sjs:"http://schemas.openxmlformats.org/package/2006/sheetjs/core-properties",vt:"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes",xsi:"http://www.w3.org/2001/XMLSchema-instance",xsd:"http://www.w3.org/2001/XMLSchema"};XMLNS.main=["http://schemas.openxmlformats.org/spreadsheetml/2006/main","http://purl.oclc.org/ooxml/spreadsheetml/main","http://schemas.microsoft.com/office/excel/2006/main","http://schemas.microsoft.com/office/excel/2006/2"];function readIEEE754(buf,idx,isLE,nl,ml){if(isLE===undefined)isLE=true;if(!nl)nl=8;if(!ml&&nl===8)ml=52;var e,m,el=nl*8-ml-1,eMax=(1<<el)-1,eBias=eMax>>1;var bits=-7,d=isLE?-1:1,i=isLE?nl-1:0,s=buf[idx+i];i+=d;e=s&(1<<-bits)-1;s>>>=-bits;bits+=el;for(;bits>0;e=e*256+buf[idx+i],i+=d,bits-=8);m=e&(1<<-bits)-1;e>>>=-bits;bits+=ml;for(;bits>0;m=m*256+buf[idx+i],i+=d,bits-=8);if(e===eMax)return m?NaN:(s?-1:1)*Infinity;else if(e===0)e=1-eBias;else{m=m+Math.pow(2,ml);e=e-eBias}return(s?-1:1)*m*Math.pow(2,e-ml)}var __toBuffer,___toBuffer;__toBuffer=___toBuffer=function toBuffer_(bufs){var x=[];for(var i=0;i<bufs[0].length;++i){x.push.apply(x,bufs[0][i])}return x};var __utf16le,___utf16le;__utf16le=___utf16le=function utf16le_(b,s,e){var ss=[];for(var i=s;i<e;i+=2)ss.push(String.fromCharCode(__readUInt16LE(b,i)));return ss.join("")};var __hexlify,___hexlify;__hexlify=___hexlify=function hexlify_(b,s,l){return b.slice(s,s+l).map(function(x){return(x<16?"0":"")+x.toString(16)}).join("")};var __utf8,___utf8;__utf8=___utf8=function(b,s,e){var ss=[];for(var i=s;i<e;i++)ss.push(String.fromCharCode(__readUInt8(b,i)));return ss.join("")};var __lpstr,___lpstr;__lpstr=___lpstr=function lpstr_(b,i){var len=__readUInt32LE(b,i);return len>0?__utf8(b,i+4,i+4+len-1):""};var __lpwstr,___lpwstr;__lpwstr=___lpwstr=function lpwstr_(b,i){var len=2*__readUInt32LE(b,i);return len>0?__utf8(b,i+4,i+4+len-1):""};var __double,___double;__double=___double=function(b,idx){return readIEEE754(b,idx)};var is_buf=function is_buf_a(a){return Array.isArray(a)};if(has_buf){__utf16le=function utf16le_b(b,s,e){if(!Buffer.isBuffer(b))return ___utf16le(b,s,e);return b.toString("utf16le",s,e)};__hexlify=function(b,s,l){return Buffer.isBuffer(b)?b.toString("hex",s,s+l):___hexlify(b,s,l)};__lpstr=function lpstr_b(b,i){if(!Buffer.isBuffer(b))return ___lpstr(b,i);var len=b.readUInt32LE(i);return len>0?b.toString("utf8",i+4,i+4+len-1):""};__lpwstr=function lpwstr_b(b,i){if(!Buffer.isBuffer(b))return ___lpwstr(b,i);var len=2*b.readUInt32LE(i);return b.toString("utf16le",i+4,i+4+len-1)};__utf8=function utf8_b(s,e){return this.toString("utf8",s,e)};__toBuffer=function(bufs){return bufs[0].length>0&&Buffer.isBuffer(bufs[0][0])?Buffer.concat(bufs[0]):___toBuffer(bufs)};bconcat=function(bufs){return Buffer.isBuffer(bufs[0])?Buffer.concat(bufs):[].concat.apply([],bufs)};__double=function double_(b,i){if(Buffer.isBuffer(b))return b.readDoubleLE(i);return ___double(b,i)};is_buf=function is_buf_b(a){return Buffer.isBuffer(a)||Array.isArray(a)}}if(typeof cptable!=="undefined"){__utf16le=function(b,s,e){return cptable.utils.decode(1200,b.slice(s,e))};__utf8=function(b,s,e){return cptable.utils.decode(65001,b.slice(s,e))};__lpstr=function(b,i){var len=__readUInt32LE(b,i);return len>0?cptable.utils.decode(current_codepage,b.slice(i+4,i+4+len-1)):""};__lpwstr=function(b,i){var len=2*__readUInt32LE(b,i);return len>0?cptable.utils.decode(1200,b.slice(i+4,i+4+len-1)):""}}var __readUInt8=function(b,idx){return b[idx]};var __readUInt16LE=function(b,idx){return b[idx+1]*(1<<8)+b[idx]};var __readInt16LE=function(b,idx){var u=b[idx+1]*(1<<8)+b[idx];return u<32768?u:(65535-u+1)*-1};var __readUInt32LE=function(b,idx){return b[idx+3]*(1<<24)+(b[idx+2]<<16)+(b[idx+1]<<8)+b[idx]};var __readInt32LE=function(b,idx){return b[idx+3]<<24|b[idx+2]<<16|b[idx+1]<<8|b[idx]};var ___unhexlify=function(s){return s.match(/../g).map(function(x){return parseInt(x,16)})};var __unhexlify=typeof Buffer!=="undefined"?function(s){return Buffer.isBuffer(s)?new Buffer(s,"hex"):___unhexlify(s)}:___unhexlify;function ReadShift(size,t){var o="",oI,oR,oo=[],w,vv,i,loc;switch(t){case"dbcs":loc=this.l;if(has_buf&&Buffer.isBuffer(this))o=this.slice(this.l,this.l+2*size).toString("utf16le");else for(i=0;i!=size;++i){o+=String.fromCharCode(__readUInt16LE(this,loc));loc+=2}size*=2;break;case"utf8":o=__utf8(this,this.l,this.l+size);break;case"utf16le":size*=2;o=__utf16le(this,this.l,this.l+size);break;case"lpstr":o=__lpstr(this,this.l);size=5+o.length;break;case"lpwstr":o=__lpwstr(this,this.l);size=5+o.length;if(o[o.length-1]=="\0")size+=2;break;case"cstr":size=0;o="";while((w=__readUInt8(this,this.l+size++))!==0)oo.push(_getchar(w));o=oo.join("");break;case"wstr":size=0;o="";while((w=__readUInt16LE(this,this.l+size))!==0){oo.push(_getchar(w));size+=2}size+=2;o=oo.join("");break;case"dbcs-cont":o="";loc=this.l;for(i=0;i!=size;++i){if(this.lens&&this.lens.indexOf(loc)!==-1){w=__readUInt8(this,loc);this.l=loc+1;vv=ReadShift.call(this,size-i,w?"dbcs-cont":"sbcs-cont");return oo.join("")+vv}oo.push(_getchar(__readUInt16LE(this,loc)));loc+=2}o=oo.join("");size*=2;break;case"sbcs-cont":o="";loc=this.l;for(i=0;i!=size;++i){if(this.lens&&this.lens.indexOf(loc)!==-1){w=__readUInt8(this,loc);this.l=loc+1;vv=ReadShift.call(this,size-i,w?"dbcs-cont":"sbcs-cont");return oo.join("")+vv}oo.push(_getchar(__readUInt8(this,loc)));loc+=1}o=oo.join("");break;default:switch(size){case 1:oI=__readUInt8(this,this.l);this.l++;return oI;case 2:oI=(t==="i"?__readInt16LE:__readUInt16LE)(this,this.l);this.l+=2;return oI;case 4:if(t==="i"||(this[this.l+3]&128)===0){oI=__readInt32LE(this,this.l);this.l+=4;return oI}else{oR=__readUInt32LE(this,this.l);this.l+=4;return oR}break;case 8:if(t==="f"){oR=__double(this,this.l);this.l+=8;return oR}case 16:o=__hexlify(this,this.l,size);break}}this.l+=size;return o}function WriteShift(t,val,f){var size,i;if(f==="dbcs"){for(i=0;i!=val.length;++i)this.writeUInt16LE(val.charCodeAt(i),this.l+2*i);size=2*val.length;
+}else switch(t){case 1:size=1;this[this.l]=val&255;break;case 3:size=3;this[this.l+2]=val&255;val>>>=8;this[this.l+1]=val&255;val>>>=8;this[this.l]=val&255;break;case 4:size=4;this.writeUInt32LE(val,this.l);break;case 8:size=8;if(f==="f"){this.writeDoubleLE(val,this.l);break}case 16:break;case-4:size=4;this.writeInt32LE(val,this.l);break}this.l+=size;return this}function CheckField(hexstr,fld){var m=__hexlify(this,this.l,hexstr.length>>1);if(m!==hexstr)throw fld+"Expected "+hexstr+" saw "+m;this.l+=hexstr.length>>1}function prep_blob(blob,pos){blob.l=pos;blob.read_shift=ReadShift;blob.chk=CheckField;blob.write_shift=WriteShift}function parsenoop(blob,length){blob.l+=length}function writenoop(blob,length){blob.l+=length}function new_buf(sz){var o=new_raw_buf(sz);prep_blob(o,0);return o}function recordhopper(data,cb,opts){var tmpbyte,cntbyte,length;prep_blob(data,data.l||0);while(data.l<data.length){var RT=data.read_shift(1);if(RT&128)RT=(RT&127)+((data.read_shift(1)&127)<<7);var R=XLSBRecordEnum[RT]||XLSBRecordEnum[65535];tmpbyte=data.read_shift(1);length=tmpbyte&127;for(cntbyte=1;cntbyte<4&&tmpbyte&128;++cntbyte)length+=((tmpbyte=data.read_shift(1))&127)<<7*cntbyte;var d=R.f(data,length,opts);if(cb(d,R,RT))return}}function buf_array(){var bufs=[],blksz=2048;var newblk=function ba_newblk(sz){var o=new_buf(sz);prep_blob(o,0);return o};var curbuf=newblk(blksz);var endbuf=function ba_endbuf(){curbuf.length=curbuf.l;if(curbuf.length>0)bufs.push(curbuf);curbuf=null};var next=function ba_next(sz){if(sz<curbuf.length-curbuf.l)return curbuf;endbuf();return curbuf=newblk(Math.max(sz+1,blksz))};var end=function ba_end(){endbuf();return __toBuffer([bufs])};var push=function ba_push(buf){endbuf();curbuf=buf;next(blksz)};return{next:next,push:push,end:end,_bufs:bufs}}function write_record(ba,type,payload,length){var t=evert_RE[type],l;if(!length)length=XLSBRecordEnum[t].p||(payload||[]).length||0;l=1+(t>=128?1:0)+1+length;if(length>=128)++l;if(length>=16384)++l;if(length>=2097152)++l;var o=ba.next(l);if(t<=127)o.write_shift(1,t);else{o.write_shift(1,(t&127)+128);o.write_shift(1,t>>7)}for(var i=0;i!=4;++i){if(length>=128){o.write_shift(1,(length&127)+128);length>>=7}else{o.write_shift(1,length);break}}if(length>0&&is_buf(payload))ba.push(payload)}function shift_cell_xls(cell,tgt){if(tgt.s){if(cell.cRel)cell.c+=tgt.s.c;if(cell.rRel)cell.r+=tgt.s.r}else{cell.c+=tgt.c;cell.r+=tgt.r}cell.cRel=cell.rRel=0;while(cell.c>=256)cell.c-=256;while(cell.r>=65536)cell.r-=65536;return cell}function shift_range_xls(cell,range){cell.s=shift_cell_xls(cell.s,range.s);cell.e=shift_cell_xls(cell.e,range.s);return cell}var OFFCRYPTO={};var make_offcrypto=function(O,_crypto){var crypto;if(typeof _crypto!=="undefined")crypto=_crypto;else if(typeof require!=="undefined"){try{crypto=require("cry"+"pto")}catch(e){crypto=null}}O.rc4=function(key,data){var S=new Array(256);var c=0,i=0,j=0,t=0;for(i=0;i!=256;++i)S[i]=i;for(i=0;i!=256;++i){j=j+S[i]+key[i%key.length].charCodeAt(0)&255;t=S[i];S[i]=S[j];S[j]=t}i=j=0;out=Buffer(data.length);for(c=0;c!=data.length;++c){i=i+1&255;j=(j+S[i])%256;t=S[i];S[i]=S[j];S[j]=t;out[c]=data[c]^S[S[i]+S[j]&255]}return out};if(crypto){O.md5=function(hex){return crypto.createHash("md5").update(hex).digest("hex")}}else{O.md5=function(hex){throw"unimplemented"}}};make_offcrypto(OFFCRYPTO,typeof crypto!=="undefined"?crypto:undefined);function parse_StrRun(data,length){return{ich:data.read_shift(2),ifnt:data.read_shift(2)}}function parse_RichStr(data,length){var start=data.l;var flags=data.read_shift(1);var str=parse_XLWideString(data);var rgsStrRun=[];var z={t:str,h:str};if((flags&1)!==0){var dwSizeStrRun=data.read_shift(4);for(var i=0;i!=dwSizeStrRun;++i)rgsStrRun.push(parse_StrRun(data));z.r=rgsStrRun}else z.r="<t>"+escapexml(str)+"</t>";if((flags&2)!==0){}data.l=start+length;return z}function write_RichStr(str,o){if(o==null)o=new_buf(5+2*str.t.length);o.write_shift(1,0);write_XLWideString(str.t,o);return o}function parse_XLSBCell(data){var col=data.read_shift(4);var iStyleRef=data.read_shift(2);iStyleRef+=data.read_shift(1)<<16;var fPhShow=data.read_shift(1);return{c:col,iStyleRef:iStyleRef}}function write_XLSBCell(cell,o){if(o==null)o=new_buf(8);o.write_shift(-4,cell.c);o.write_shift(3,cell.iStyleRef===undefined?cell.iStyleRef:cell.s);o.write_shift(1,0);return o}function parse_XLSBCodeName(data,length){return parse_XLWideString(data,length)}function parse_XLNullableWideString(data){var cchCharacters=data.read_shift(4);return cchCharacters===0||cchCharacters===4294967295?"":data.read_shift(cchCharacters,"dbcs")}function write_XLNullableWideString(data,o){if(!o)o=new_buf(127);o.write_shift(4,data.length>0?data.length:4294967295);if(data.length>0)o.write_shift(0,data,"dbcs");return o}function parse_XLWideString(data){var cchCharacters=data.read_shift(4);return cchCharacters===0?"":data.read_shift(cchCharacters,"dbcs")}function write_XLWideString(data,o){if(o==null)o=new_buf(4+2*data.length);o.write_shift(4,data.length);if(data.length>0)o.write_shift(0,data,"dbcs");return o}var parse_RelID=parse_XLNullableWideString;var write_RelID=write_XLNullableWideString;function parse_RkNumber(data){var b=data.slice(data.l,data.l+4);var fX100=b[0]&1,fInt=b[0]&2;data.l+=4;b[0]&=252;var RK=fInt===0?__double([0,0,0,0,b[0],b[1],b[2],b[3]],0):__readInt32LE(b,0)>>2;return fX100?RK/100:RK}function parse_UncheckedRfX(data){var cell={s:{},e:{}};cell.s.r=data.read_shift(4);cell.e.r=data.read_shift(4);cell.s.c=data.read_shift(4);cell.e.c=data.read_shift(4);return cell}function write_UncheckedRfX(r,o){if(!o)o=new_buf(16);o.write_shift(4,r.s.r);o.write_shift(4,r.e.r);o.write_shift(4,r.s.c);o.write_shift(4,r.e.c);return o}function parse_Xnum(data,length){return data.read_shift(8,"f")}function write_Xnum(data,o){return(o||new_buf(8)).write_shift(8,"f",data)}var BErr={0:"#NULL!",7:"#DIV/0!",15:"#VALUE!",23:"#REF!",29:"#NAME?",36:"#NUM!",42:"#N/A",43:"#GETTING_DATA",255:"#WTF?"};var RBErr=evert_num(BErr);function parse_BrtColor(data,length){var out={};var d=data.read_shift(1);out.fValidRGB=d&1;out.xColorType=d>>>1;out.index=data.read_shift(1);out.nTintAndShade=data.read_shift(2,"i");out.bRed=data.read_shift(1);out.bGreen=data.read_shift(1);out.bBlue=data.read_shift(1);out.bAlpha=data.read_shift(1)}function parse_FontFlags(data,length){var d=data.read_shift(1);data.l++;var out={fItalic:d&2,fStrikeout:d&8,fOutline:d&16,fShadow:d&32,fCondense:d&64,fExtend:d&128};return out}{var VT_EMPTY=0;var VT_NULL=1;var VT_I2=2;var VT_I4=3;var VT_R4=4;var VT_R8=5;var VT_CY=6;var VT_DATE=7;var VT_BSTR=8;var VT_ERROR=10;var VT_BOOL=11;var VT_VARIANT=12;var VT_DECIMAL=14;var VT_I1=16;var VT_UI1=17;var VT_UI2=18;var VT_UI4=19;var VT_I8=20;var VT_UI8=21;var VT_INT=22;var VT_UINT=23;var VT_LPSTR=30;var VT_LPWSTR=31;var VT_FILETIME=64;var VT_BLOB=65;var VT_STREAM=66;var VT_STORAGE=67;var VT_STREAMED_Object=68;var VT_STORED_Object=69;var VT_BLOB_Object=70;var VT_CF=71;var VT_CLSID=72;var VT_VERSIONED_STREAM=73;var VT_VECTOR=4096;var VT_ARRAY=8192;var VT_STRING=80;var VT_USTR=81;var VT_CUSTOM=[VT_STRING,VT_USTR]}var DocSummaryPIDDSI={1:{n:"CodePage",t:VT_I2},2:{n:"Category",t:VT_STRING},3:{n:"PresentationFormat",t:VT_STRING},4:{n:"ByteCount",t:VT_I4},5:{n:"LineCount",t:VT_I4},6:{n:"ParagraphCount",t:VT_I4},7:{n:"SlideCount",t:VT_I4},8:{n:"NoteCount",t:VT_I4},9:{n:"HiddenCount",t:VT_I4},10:{n:"MultimediaClipCount",t:VT_I4},11:{n:"Scale",t:VT_BOOL},12:{n:"HeadingPair",t:VT_VECTOR|VT_VARIANT},13:{n:"DocParts",t:VT_VECTOR|VT_LPSTR},14:{n:"Manager",t:VT_STRING},15:{n:"Company",t:VT_STRING},16:{n:"LinksDirty",t:VT_BOOL},17:{n:"CharacterCount",t:VT_I4},19:{n:"SharedDoc",t:VT_BOOL},22:{n:"HLinksChanged",t:VT_BOOL},23:{n:"AppVersion",t:VT_I4,p:"version"},26:{n:"ContentType",t:VT_STRING},27:{n:"ContentStatus",t:VT_STRING},28:{n:"Language",t:VT_STRING},29:{n:"Version",t:VT_STRING},255:{}};var SummaryPIDSI={1:{n:"CodePage",t:VT_I2},2:{n:"Title",t:VT_STRING},3:{n:"Subject",t:VT_STRING},4:{n:"Author",t:VT_STRING},5:{n:"Keywords",t:VT_STRING},6:{n:"Comments",t:VT_STRING},7:{n:"Template",t:VT_STRING},8:{n:"LastAuthor",t:VT_STRING},9:{n:"RevNumber",t:VT_STRING},10:{n:"EditTime",t:VT_FILETIME},11:{n:"LastPrinted",t:VT_FILETIME},12:{n:"CreatedDate",t:VT_FILETIME},13:{n:"ModifiedDate",t:VT_FILETIME},14:{n:"PageCount",t:VT_I4},15:{n:"WordCount",t:VT_I4},16:{n:"CharCount",t:VT_I4},17:{n:"Thumbnail",t:VT_CF},18:{n:"ApplicationName",t:VT_LPSTR},19:{n:"DocumentSecurity",t:VT_I4},255:{}};var SpecialProperties={2147483648:{n:"Locale",t:VT_UI4},2147483651:{n:"Behavior",t:VT_UI4},1919054434:{}};(function(){for(var y in SpecialProperties)if(SpecialProperties.hasOwnProperty(y))DocSummaryPIDDSI[y]=SummaryPIDSI[y]=SpecialProperties[y]})();var CountryEnum={1:"US",2:"CA",3:"",7:"RU",20:"EG",30:"GR",31:"NL",32:"BE",33:"FR",34:"ES",36:"HU",39:"IT",41:"CH",43:"AT",44:"GB",45:"DK",46:"SE",47:"NO",48:"PL",49:"DE",52:"MX",55:"BR",61:"AU",64:"NZ",66:"TH",81:"JP",82:"KR",84:"VN",86:"CN",90:"TR",105:"JS",213:"DZ",216:"MA",218:"LY",351:"PT",354:"IS",358:"FI",420:"CZ",886:"TW",961:"LB",962:"JO",963:"SY",964:"IQ",965:"KW",966:"SA",971:"AE",972:"IL",974:"QA",981:"IR",65535:"US"};var XLSFillPattern=[null,"solid","mediumGray","darkGray","lightGray","darkHorizontal","darkVertical","darkDown","darkUp","darkGrid","darkTrellis","lightHorizontal","lightVertical","lightDown","lightUp","lightGrid","lightTrellis","gray125","gray0625"];function rgbify(arr){return arr.map(function(x){return[x>>16&255,x>>8&255,x&255]})}var XLSIcv=rgbify([0,16777215,16711680,65280,255,16776960,16711935,65535,0,16777215,16711680,65280,255,16776960,16711935,65535,8388608,32768,128,8421376,8388736,32896,12632256,8421504,10066431,10040166,16777164,13434879,6684774,16744576,26316,13421823,128,16711935,16776960,65535,8388736,8388608,32896,255,52479,13434879,13434828,16777113,10079487,16751052,13408767,16764057,3368703,3394764,10079232,16763904,16750848,16737792,6710937,9868950,13158,3381606,13056,3355392,10040064,10040166,3355545,3355443,16777215,0]);var ct2type={"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":"workbooks","application/vnd.ms-excel.binIndexWs":"TODO","application/vnd.ms-excel.chartsheet":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":"TODO","application/vnd.ms-excel.dialogsheet":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":"TODO","application/vnd.ms-excel.macrosheet":"TODO","application/vnd.ms-excel.macrosheet+xml":"TODO","application/vnd.ms-excel.intlmacrosheet":"TODO","application/vnd.ms-excel.binIndexMs":"TODO","application/vnd.openxmlformats-package.core-properties+xml":"coreprops","application/vnd.openxmlformats-officedocument.custom-properties+xml":"custprops","application/vnd.openxmlformats-officedocument.extended-properties+xml":"extprops","application/vnd.openxmlformats-officedocument.customXmlProperties+xml":"TODO","application/vnd.ms-excel.comments":"comments","application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":"comments","application/vnd.ms-excel.pivotTable":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml":"TODO","application/vnd.ms-excel.calcChain":"calcchains","application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml":"calcchains","application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings":"TODO","application/vnd.ms-office.activeX":"TODO","application/vnd.ms-office.activeX+xml":"TODO","application/vnd.ms-excel.attachedToolbars":"TODO","application/vnd.ms-excel.connections":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":"TODO","application/vnd.ms-excel.externalLink":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml":"TODO","application/vnd.ms-excel.sheetMetadata":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml":"TODO","application/vnd.ms-excel.pivotCacheDefinition":"TODO","application/vnd.ms-excel.pivotCacheRecords":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml":"TODO","application/vnd.ms-excel.queryTable":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml":"TODO","application/vnd.ms-excel.userNames":"TODO","application/vnd.ms-excel.revisionHeaders":"TODO","application/vnd.ms-excel.revisionLog":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml":"TODO","application/vnd.ms-excel.tableSingleCells":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml":"TODO","application/vnd.ms-excel.slicer":"TODO","application/vnd.ms-excel.slicerCache":"TODO","application/vnd.ms-excel.slicer+xml":"TODO","application/vnd.ms-excel.slicerCache+xml":"TODO","application/vnd.ms-excel.wsSortMap":"TODO","application/vnd.ms-excel.table":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":"TODO","application/vnd.openxmlformats-officedocument.theme+xml":"themes","application/vnd.ms-excel.Timeline+xml":"TODO","application/vnd.ms-excel.TimelineCache+xml":"TODO","application/vnd.ms-office.vbaProject":"vba","application/vnd.ms-office.vbaProjectSignature":"vba","application/vnd.ms-office.volatileDependencies":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml":"TODO","application/vnd.ms-excel.controlproperties+xml":"TODO","application/vnd.openxmlformats-officedocument.model+data":"TODO","application/vnd.ms-excel.Survey+xml":"TODO","application/vnd.openxmlformats-officedocument.drawing+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.chart+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml":"TODO","application/vnd.openxmlformats-officedocument.vmlDrawing":"TODO","application/vnd.openxmlformats-package.relationships+xml":"rels","application/vnd.openxmlformats-officedocument.oleObject":"TODO",sheet:"js"};var CT_LIST=function(){var o={workbooks:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml",xlsm:"application/vnd.ms-excel.sheet.macroEnabled.main+xml",xlsb:"application/vnd.ms-excel.sheet.binary.macroEnabled.main",xltx:"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml"},strs:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml",xlsb:"application/vnd.ms-excel.sharedStrings"},sheets:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml",xlsb:"application/vnd.ms-excel.worksheet"},styles:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml",xlsb:"application/vnd.ms-excel.styles"}};keys(o).forEach(function(k){if(!o[k].xlsm)o[k].xlsm=o[k].xlsx});keys(o).forEach(function(k){keys(o[k]).forEach(function(v){ct2type[o[k][v]]=k})});return o}();var type2ct=evert_arr(ct2type);XMLNS.CT="http://schemas.openxmlformats.org/package/2006/content-types";function parse_ct(data,opts){var ctext={};if(!data||!data.match)return data;var ct={workbooks:[],sheets:[],calcchains:[],themes:[],styles:[],coreprops:[],extprops:[],custprops:[],strs:[],comments:[],vba:[],TODO:[],rels:[],xmlns:""};(data.match(tagregex)||[]).forEach(function(x){var y=parsexmltag(x);switch(y[0].replace(nsregex,"<")){case"<?xml":break;case"<Types":ct.xmlns=y["xmlns"+(y[0].match(/<(\w+):/)||["",""])[1]];break;case"<Default":ctext[y.Extension]=y.ContentType;break;case"<Override":if(ct[ct2type[y.ContentType]]!==undefined)ct[ct2type[y.ContentType]].push(y.PartName);else if(opts.WTF)console.error(y);break}});if(ct.xmlns!==XMLNS.CT)throw new Error("Unknown Namespace: "+ct.xmlns);ct.calcchain=ct.calcchains.length>0?ct.calcchains[0]:"";ct.sst=ct.strs.length>0?ct.strs[0]:"";ct.style=ct.styles.length>0?ct.styles[0]:"";ct.defaults=ctext;delete ct.calcchains;return ct}var CTYPE_XML_ROOT=writextag("Types",null,{xmlns:XMLNS.CT,"xmlns:xsd":XMLNS.xsd,"xmlns:xsi":XMLNS.xsi});var CTYPE_DEFAULTS=[["xml","application/xml"],["bin","application/vnd.ms-excel.sheet.binary.macroEnabled.main"],["rels",type2ct.rels[0]]].map(function(x){return writextag("Default",null,{Extension:x[0],ContentType:x[1]})});function write_ct(ct,opts){var o=[],v;o[o.length]=XML_HEADER;o[o.length]=CTYPE_XML_ROOT;o=o.concat(CTYPE_DEFAULTS);var f1=function(w){if(ct[w]&&ct[w].length>0){v=ct[w][0];o[o.length]=writextag("Override",null,{PartName:(v[0]=="/"?"":"/")+v,ContentType:CT_LIST[w][opts.bookType||"xlsx"]})}};var f2=function(w){ct[w].forEach(function(v){o[o.length]=writextag("Override",null,{PartName:(v[0]=="/"?"":"/")+v,ContentType:CT_LIST[w][opts.bookType||"xlsx"]})})};var f3=function(t){(ct[t]||[]).forEach(function(v){o[o.length]=writextag("Override",null,{PartName:(v[0]=="/"?"":"/")+v,ContentType:type2ct[t][0]})})};f1("workbooks");f2("sheets");f3("themes");["strs","styles"].forEach(f1);["coreprops","extprops","custprops"].forEach(f3);if(o.length>2){o[o.length]="</Types>";o[1]=o[1].replace("/>",">")}return o.join("")}var RELS={WB:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",SHEET:"http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument"};function parse_rels(data,currentFilePath){if(!data)return data;if(currentFilePath.charAt(0)!=="/"){currentFilePath="/"+currentFilePath}var rels={};var hash={};var resolveRelativePathIntoAbsolute=function(to){var toksFrom=currentFilePath.split("/");toksFrom.pop();var toksTo=to.split("/");var reversed=[];while(toksTo.length!==0){var tokTo=toksTo.shift();if(tokTo===".."){toksFrom.pop()}else if(tokTo!=="."){toksFrom.push(tokTo)}}return toksFrom.join("/")};data.match(tagregex).forEach(function(x){var y=parsexmltag(x);if(y[0]==="<Relationship"){var rel={};rel.Type=y.Type;rel.Target=y.Target;rel.Id=y.Id;rel.TargetMode=y.TargetMode;var canonictarget=y.TargetMode==="External"?y.Target:resolveRelativePathIntoAbsolute(y.Target);rels[canonictarget]=rel;hash[y.Id]=rel}});rels["!id"]=hash;return rels}XMLNS.RELS="http://schemas.openxmlformats.org/package/2006/relationships";var RELS_ROOT=writextag("Relationships",null,{xmlns:XMLNS.RELS});function write_rels(rels){var o=[];o[o.length]=XML_HEADER;o[o.length]=RELS_ROOT;keys(rels["!id"]).forEach(function(rid){var rel=rels["!id"][rid];o[o.length]=writextag("Relationship",null,rel)});if(o.length>2){o[o.length]="</Relationships>";o[1]=o[1].replace("/>",">")}return o.join("")}var CORE_PROPS=[["cp:category","Category"],["cp:contentStatus","ContentStatus"],["cp:keywords","Keywords"],["cp:lastModifiedBy","LastAuthor"],["cp:lastPrinted","LastPrinted"],["cp:revision","RevNumber"],["cp:version","Version"],["dc:creator","Author"],["dc:description","Comments"],["dc:identifier","Identifier"],["dc:language","Language"],["dc:subject","Subject"],["dc:title","Title"],["dcterms:created","CreatedDate","date"],["dcterms:modified","ModifiedDate","date"]];XMLNS.CORE_PROPS="http://schemas.openxmlformats.org/package/2006/metadata/core-properties";RELS.CORE_PROPS="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties";var CORE_PROPS_REGEX=function(){var r=new Array(CORE_PROPS.length);for(var i=0;i<CORE_PROPS.length;++i){var f=CORE_PROPS[i];var g="(?:"+f[0].substr(0,f[0].indexOf(":"))+":)"+f[0].substr(f[0].indexOf(":")+1);r[i]=new RegExp("<"+g+"[^>]*>(.*)</"+g+">")}return r}();function parse_core_props(data){var p={};for(var i=0;i<CORE_PROPS.length;++i){var f=CORE_PROPS[i],cur=data.match(CORE_PROPS_REGEX[i]);if(cur!=null&&cur.length>0)p[f[1]]=cur[1];if(f[2]==="date"&&p[f[1]])p[f[1]]=new Date(p[f[1]])}return p}var CORE_PROPS_XML_ROOT=writextag("cp:coreProperties",null,{"xmlns:cp":XMLNS.CORE_PROPS,"xmlns:dc":XMLNS.dc,"xmlns:dcterms":XMLNS.dcterms,"xmlns:dcmitype":XMLNS.dcmitype,"xmlns:xsi":XMLNS.xsi});function cp_doit(f,g,h,o,p){if(p[f]!=null||g==null||g==="")return;p[f]=g;o[o.length]=h?writextag(f,g,h):writetag(f,g)}function write_core_props(cp,opts){var o=[XML_HEADER,CORE_PROPS_XML_ROOT],p={};if(opts&&opts.Props){if(opts.Props.title)o[o.length]="<dc:title>"+opts.Props.title+"</dc:title>";if(opts.Props.subject)o[o.length]="<dc:subject>"+opts.Props.subject+"</dc:subject>";if(opts.Props.creator)o[o.length]="<dc:creator>"+opts.Props.creator+"</dc:creator>";if(opts.Props.keywords)o[o.length]="<cp:keywords>"+opts.Props.keywords+"</cp:keywords>";if(opts.Props.description)o[o.length]="<dc:description>"+opts.Props.description+"</dc:description>"}if(cp){if(cp.CreatedDate!=null)cp_doit("dcterms:created",typeof cp.CreatedDate==="string"?cp.CreatedDate:write_w3cdtf(cp.CreatedDate,opts.WTF),{"xsi:type":"dcterms:W3CDTF"},o,p);if(cp.ModifiedDate!=null)cp_doit("dcterms:modified",typeof cp.ModifiedDate==="string"?cp.ModifiedDate:write_w3cdtf(cp.ModifiedDate,opts.WTF),{"xsi:type":"dcterms:W3CDTF"},o,p);for(var i=0;i!=CORE_PROPS.length;++i){var f=CORE_PROPS[i];cp_doit(f[0],cp[f[1]],null,o,p)}}if(o.length>2){o[o.length]="</cp:coreProperties>";o[1]=o[1].replace("/>",">")}return o.join("")}var EXT_PROPS=[["Application","Application","string"],["AppVersion","AppVersion","string"],["Company","Company","string"],["DocSecurity","DocSecurity","string"],["Manager","Manager","string"],["HyperlinksChanged","HyperlinksChanged","bool"],["SharedDoc","SharedDoc","bool"],["LinksUpToDate","LinksUpToDate","bool"],["ScaleCrop","ScaleCrop","bool"],["HeadingPairs","HeadingPairs","raw"],["TitlesOfParts","TitlesOfParts","raw"]];XMLNS.EXT_PROPS="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties";RELS.EXT_PROPS="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties";function parse_ext_props(data,p){var q={};if(!p)p={};EXT_PROPS.forEach(function(f){switch(f[2]){case"string":p[f[1]]=(data.match(matchtag(f[0]))||[])[1];break;case"bool":p[f[1]]=(data.match(matchtag(f[0]))||[])[1]==="true";break;case"raw":var cur=data.match(new RegExp("<"+f[0]+"[^>]*>(.*)</"+f[0]+">"));if(cur&&cur.length>0)q[f[1]]=cur[1];break}});if(q.HeadingPairs&&q.TitlesOfParts){var v=parseVector(q.HeadingPairs);var j=0,widx=0;for(var i=0;i!==v.length;++i){switch(v[i].v){case"Worksheets":widx=j;p.Worksheets=+v[++i].v;break;case"Named Ranges":++i;break}}var parts=parseVector(q.TitlesOfParts).map(function(x){return utf8read(x.v)});p.SheetNames=parts.slice(widx,widx+p.Worksheets)}return p}var EXT_PROPS_XML_ROOT=writextag("Properties",null,{xmlns:XMLNS.EXT_PROPS,"xmlns:vt":XMLNS.vt});function write_ext_props(cp,opts){var o=[],p={},W=writextag;if(!cp)cp={};cp.Application="SheetJS";o[o.length]=XML_HEADER;o[o.length]=EXT_PROPS_XML_ROOT;EXT_PROPS.forEach(function(f){if(cp[f[1]]===undefined)return;var v;switch(f[2]){case"string":v=cp[f[1]];break;case"bool":v=cp[f[1]]?"true":"false";break}if(v!==undefined)o[o.length]=W(f[0],v)});o[o.length]=W("HeadingPairs",W("vt:vector",W("vt:variant","<vt:lpstr>Worksheets</vt:lpstr>")+W("vt:variant",W("vt:i4",String(cp.Worksheets))),{size:2,baseType:"variant"}));o[o.length]=W("TitlesOfParts",W("vt:vector",cp.SheetNames.map(function(s){return"<vt:lpstr>"+s+"</vt:lpstr>"}).join(""),{size:cp.Worksheets,baseType:"lpstr"}));if(o.length>2){o[o.length]="</Properties>";o[1]=o[1].replace("/>",">")}return o.join("")}XMLNS.CUST_PROPS="http://schemas.openxmlformats.org/officeDocument/2006/custom-properties";RELS.CUST_PROPS="http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties";var custregex=/<[^>]+>[^<]*/g;function parse_cust_props(data,opts){var p={},name;var m=data.match(custregex);if(m)for(var i=0;i!=m.length;++i){var x=m[i],y=parsexmltag(x);switch(y[0]){case"<?xml":break;case"<Properties":if(y.xmlns!==XMLNS.CUST_PROPS)throw"unrecognized xmlns "+y.xmlns;if(y.xmlnsvt&&y.xmlnsvt!==XMLNS.vt)throw"unrecognized vt "+y.xmlnsvt;break;case"<property":name=y.name;break;case"</property>":name=null;break;default:if(x.indexOf("<vt:")===0){var toks=x.split(">");var type=toks[0].substring(4),text=toks[1];switch(type){case"lpstr":case"lpwstr":case"bstr":case"lpwstr":p[name]=unescapexml(text);break;case"bool":p[name]=parsexmlbool(text,"<vt:bool>");break;case"i1":case"i2":case"i4":case"i8":case"int":case"uint":p[name]=parseInt(text,10);break;case"r4":case"r8":case"decimal":p[name]=parseFloat(text);break;case"filetime":case"date":p[name]=new Date(text);break;case"cy":case"error":p[name]=unescapexml(text);break;default:if(typeof console!=="undefined")console.warn("Unexpected",x,type,toks)}}else if(x.substr(0,2)==="</"){}else if(opts.WTF)throw new Error(x)}}return p}var CUST_PROPS_XML_ROOT=writextag("Properties",null,{xmlns:XMLNS.CUST_PROPS,"xmlns:vt":XMLNS.vt});function write_cust_props(cp,opts){var o=[XML_HEADER,CUST_PROPS_XML_ROOT];if(!cp)return o.join("");var pid=1;keys(cp).forEach(function custprop(k){++pid;o[o.length]=writextag("property",write_vt(cp[k]),{fmtid:"{D5CDD505-2E9C-101B-9397-08002B2CF9AE}",pid:pid,name:k})});if(o.length>2){o[o.length]="</Properties>";o[1]=o[1].replace("/>",">")}return o.join("")}function xlml_set_prop(Props,tag,val){switch(tag){case"Description":tag="Comments";break}Props[tag]=val}function parse_FILETIME(blob){var dwLowDateTime=blob.read_shift(4),dwHighDateTime=blob.read_shift(4);return new Date((dwHighDateTime/1e7*Math.pow(2,32)+dwLowDateTime/1e7-11644473600)*1e3).toISOString().replace(/\.000/,"")}function parse_lpstr(blob,type,pad){var str=blob.read_shift(0,"lpstr");if(pad)blob.l+=4-(str.length+1&3)&3;return str}function parse_lpwstr(blob,type,pad){var str=blob.read_shift(0,"lpwstr");if(pad)blob.l+=4-(str.length+1&3)&3;return str}function parse_VtStringBase(blob,stringType,pad){if(stringType===31)return parse_lpwstr(blob);return parse_lpstr(blob,stringType,pad)}function parse_VtString(blob,t,pad){return parse_VtStringBase(blob,t,pad===false?0:4)}function parse_VtUnalignedString(blob,t){if(!t)throw new Error("dafuq?");return parse_VtStringBase(blob,t,0)}function parse_VtVecUnalignedLpstrValue(blob){var length=blob.read_shift(4);var ret=[];for(var i=0;i!=length;++i)ret[i]=blob.read_shift(0,"lpstr");return ret}function parse_VtVecUnalignedLpstr(blob){return parse_VtVecUnalignedLpstrValue(blob)}function parse_VtHeadingPair(blob){var headingString=parse_TypedPropertyValue(blob,VT_USTR);var headerParts=parse_TypedPropertyValue(blob,VT_I4);return[headingString,headerParts]}function parse_VtVecHeadingPairValue(blob){var cElements=blob.read_shift(4);var out=[];for(var i=0;i!=cElements/2;++i)out.push(parse_VtHeadingPair(blob));return out}function parse_VtVecHeadingPair(blob){return parse_VtVecHeadingPairValue(blob)}function parse_dictionary(blob,CodePage){var cnt=blob.read_shift(4);var dict={};for(var j=0;j!=cnt;++j){var pid=blob.read_shift(4);var len=blob.read_shift(4);dict[pid]=blob.read_shift(len,CodePage===1200?"utf16le":"utf8").replace(chr0,"").replace(chr1,"!")}if(blob.l&3)blob.l=blob.l>>2+1<<2;return dict}function parse_BLOB(blob){var size=blob.read_shift(4);var bytes=blob.slice(blob.l,blob.l+size);if(size&3>0)blob.l+=4-(size&3)&3;return bytes}function parse_ClipboardData(blob){var o={};o.Size=blob.read_shift(4);blob.l+=o.Size;return o}function parse_VtVector(blob,cb){}function parse_TypedPropertyValue(blob,type,_opts){var t=blob.read_shift(2),ret,opts=_opts||{};blob.l+=2;if(type!==VT_VARIANT)if(t!==type&&VT_CUSTOM.indexOf(type)===-1)throw new Error("Expected type "+type+" saw "+t);switch(type===VT_VARIANT?t:type){case 2:ret=blob.read_shift(2,"i");if(!opts.raw)blob.l+=2;return ret;case 3:ret=blob.read_shift(4,"i");return ret;case 11:return blob.read_shift(4)!==0;case 19:ret=blob.read_shift(4);return ret;case 30:return parse_lpstr(blob,t,4).replace(chr0,"");case 31:return parse_lpwstr(blob);case 64:return parse_FILETIME(blob);case 65:return parse_BLOB(blob);case 71:return parse_ClipboardData(blob);case 80:return parse_VtString(blob,t,!opts.raw&&4).replace(chr0,"");case 81:return parse_VtUnalignedString(blob,t,4).replace(chr0,"");case 4108:return parse_VtVecHeadingPair(blob);case 4126:return parse_VtVecUnalignedLpstr(blob);default:throw new Error("TypedPropertyValue unrecognized type "+type+" "+t)}}function parse_PropertySet(blob,PIDSI){var start_addr=blob.l;var size=blob.read_shift(4);var NumProps=blob.read_shift(4);var Props=[],i=0;var CodePage=0;var Dictionary=-1,DictObj;for(i=0;i!=NumProps;++i){var PropID=blob.read_shift(4);var Offset=blob.read_shift(4);Props[i]=[PropID,Offset+start_addr]}var PropH={};for(i=0;i!=NumProps;++i){if(blob.l!==Props[i][1]){var fail=true;if(i>0&&PIDSI)switch(PIDSI[Props[i-1][0]].t){case 2:if(blob.l+2===Props[i][1]){blob.l+=2;fail=false}break;case 80:if(blob.l<=Props[i][1]){blob.l=Props[i][1];fail=false}break;case 4108:if(blob.l<=Props[i][1]){blob.l=Props[i][1];fail=false}break}if(!PIDSI&&blob.l<=Props[i][1]){fail=false;blob.l=Props[i][1]}if(fail)throw new Error("Read Error: Expected address "+Props[i][1]+" at "+blob.l+" :"+i)}if(PIDSI){var piddsi=PIDSI[Props[i][0]];PropH[piddsi.n]=parse_TypedPropertyValue(blob,piddsi.t,{raw:true});if(piddsi.p==="version")PropH[piddsi.n]=String(PropH[piddsi.n]>>16)+"."+String(PropH[piddsi.n]&65535);if(piddsi.n=="CodePage")switch(PropH[piddsi.n]){case 0:PropH[piddsi.n]=1252;case 1e4:case 1252:case 874:case 1250:case 1251:case 1253:case 1254:case 1255:case 1256:case 1257:case 1258:case 932:case 936:case 949:case 950:case 1200:case 1201:case 65e3:case-536:case 65001:case-535:set_cp(CodePage=PropH[piddsi.n]);break;default:throw new Error("Unsupported CodePage: "+PropH[piddsi.n])}}else{if(Props[i][0]===1){CodePage=PropH.CodePage=parse_TypedPropertyValue(blob,VT_I2);set_cp(CodePage);if(Dictionary!==-1){var oldpos=blob.l;blob.l=Props[Dictionary][1];DictObj=parse_dictionary(blob,CodePage);blob.l=oldpos}}else if(Props[i][0]===0){if(CodePage===0){Dictionary=i;blob.l=Props[i+1][1];continue}DictObj=parse_dictionary(blob,CodePage)}else{var name=DictObj[Props[i][0]];var val;switch(blob[blob.l]){case 65:blob.l+=4;val=parse_BLOB(blob);break;case 30:blob.l+=4;val=parse_VtString(blob,blob[blob.l-4]);break;case 31:blob.l+=4;val=parse_VtString(blob,blob[blob.l-4]);break;case 3:blob.l+=4;val=blob.read_shift(4,"i");break;case 19:blob.l+=4;val=blob.read_shift(4);break;case 5:blob.l+=4;val=blob.read_shift(8,"f");break;case 11:blob.l+=4;val=parsebool(blob,4);break;case 64:blob.l+=4;val=new Date(parse_FILETIME(blob));break;default:throw new Error("unparsed value: "+blob[blob.l])}PropH[name]=val}}}blob.l=start_addr+size;return PropH}function parse_PropertySetStream(file,PIDSI){var blob=file.content;prep_blob(blob,0);var NumSets,FMTID0,FMTID1,Offset0,Offset1;blob.chk("feff","Byte Order: ");var vers=blob.read_shift(2);var SystemIdentifier=blob.read_shift(4);blob.chk(CFB.utils.consts.HEADER_CLSID,"CLSID: ");NumSets=blob.read_shift(4);if(NumSets!==1&&NumSets!==2)throw"Unrecognized #Sets: "+NumSets;FMTID0=blob.read_shift(16);Offset0=blob.read_shift(4);if(NumSets===1&&Offset0!==blob.l)throw"Length mismatch";else if(NumSets===2){FMTID1=blob.read_shift(16);Offset1=blob.read_shift(4)}var PSet0=parse_PropertySet(blob,PIDSI);var rval={SystemIdentifier:SystemIdentifier};for(var y in PSet0)rval[y]=PSet0[y];rval.FMTID=FMTID0;if(NumSets===1)return rval;if(blob.l!==Offset1)throw"Length mismatch 2: "+blob.l+" !== "+Offset1;var PSet1;try{PSet1=parse_PropertySet(blob,null)}catch(e){}for(y in PSet1)rval[y]=PSet1[y];rval.FMTID=[FMTID0,FMTID1];return rval}function parsenoop2(blob,length){blob.read_shift(length);return null}function parslurp(blob,length,cb){var arr=[],target=blob.l+length;while(blob.l<target)arr.push(cb(blob,target-blob.l));if(target!==blob.l)throw new Error("Slurp error");
+return arr}function parslurp2(blob,length,cb){var arr=[],target=blob.l+length,len=blob.read_shift(2);while(len--!==0)arr.push(cb(blob,target-blob.l));if(target!==blob.l)throw new Error("Slurp error");return arr}function parsebool(blob,length){return blob.read_shift(length)===1}function parseuint16(blob){return blob.read_shift(2,"u")}function parseuint16a(blob,length){return parslurp(blob,length,parseuint16)}var parse_Boolean=parsebool;function parse_Bes(blob){var v=blob.read_shift(1),t=blob.read_shift(1);return t===1?v:v===1}function parse_ShortXLUnicodeString(blob,length,opts){var cch=blob.read_shift(1);var width=1,encoding="sbcs-cont";var cp=current_codepage;if(opts&&opts.biff>=8)current_codepage=1200;if(opts===undefined||opts.biff!==5){var fHighByte=blob.read_shift(1);if(fHighByte){width=2;encoding="dbcs-cont"}}var o=cch?blob.read_shift(cch,encoding):"";current_codepage=cp;return o}function parse_XLUnicodeRichExtendedString(blob){var cp=current_codepage;current_codepage=1200;var cch=blob.read_shift(2),flags=blob.read_shift(1);var fHighByte=flags&1,fExtSt=flags&4,fRichSt=flags&8;var width=1+(flags&1);var cRun,cbExtRst;var z={};if(fRichSt)cRun=blob.read_shift(2);if(fExtSt)cbExtRst=blob.read_shift(4);var encoding=flags&1?"dbcs-cont":"sbcs-cont";var msg=cch===0?"":blob.read_shift(cch,encoding);if(fRichSt)blob.l+=4*cRun;if(fExtSt)blob.l+=cbExtRst;z.t=msg;if(!fRichSt){z.raw="<t>"+z.t+"</t>";z.r=z.t}current_codepage=cp;return z}function parse_XLUnicodeStringNoCch(blob,cch,opts){var retval;var fHighByte=blob.read_shift(1);if(fHighByte===0){retval=blob.read_shift(cch,"sbcs-cont")}else{retval=blob.read_shift(cch,"dbcs-cont")}return retval}function parse_XLUnicodeString(blob,length,opts){var cch=blob.read_shift(opts!==undefined&&opts.biff>0&&opts.biff<8?1:2);if(cch===0){blob.l++;return""}return parse_XLUnicodeStringNoCch(blob,cch,opts)}function parse_XLUnicodeString2(blob,length,opts){if(opts.biff!==5&&opts.biff!==2)return parse_XLUnicodeString(blob,length,opts);var cch=blob.read_shift(1);if(cch===0){blob.l++;return""}return blob.read_shift(cch,"sbcs-cont")}var parse_ControlInfo=parsenoop;var parse_URLMoniker=function(blob,length){var len=blob.read_shift(4),start=blob.l;var extra=false;if(len>24){blob.l+=len-24;if(blob.read_shift(16)==="795881f43b1d7f48af2c825dc4852763")extra=true;blob.l=start}var url=blob.read_shift((extra?len-24:len)>>1,"utf16le").replace(chr0,"");if(extra)blob.l+=24;return url};var parse_FileMoniker=function(blob,length){var cAnti=blob.read_shift(2);var ansiLength=blob.read_shift(4);var ansiPath=blob.read_shift(ansiLength,"cstr");var endServer=blob.read_shift(2);var versionNumber=blob.read_shift(2);var cbUnicodePathSize=blob.read_shift(4);if(cbUnicodePathSize===0)return ansiPath.replace(/\\/g,"/");var cbUnicodePathBytes=blob.read_shift(4);var usKeyValue=blob.read_shift(2);var unicodePath=blob.read_shift(cbUnicodePathBytes>>1,"utf16le").replace(chr0,"");return unicodePath};var parse_HyperlinkMoniker=function(blob,length){var clsid=blob.read_shift(16);length-=16;switch(clsid){case"e0c9ea79f9bace118c8200aa004ba90b":return parse_URLMoniker(blob,length);case"0303000000000000c000000000000046":return parse_FileMoniker(blob,length);default:throw"unsupported moniker "+clsid}};var parse_HyperlinkString=function(blob,length){var len=blob.read_shift(4);var o=blob.read_shift(len,"utf16le").replace(chr0,"");return o};var parse_Hyperlink=function(blob,length){var end=blob.l+length;var sVer=blob.read_shift(4);if(sVer!==2)throw new Error("Unrecognized streamVersion: "+sVer);var flags=blob.read_shift(2);blob.l+=2;var displayName,targetFrameName,moniker,oleMoniker,location,guid,fileTime;if(flags&16)displayName=parse_HyperlinkString(blob,end-blob.l);if(flags&128)targetFrameName=parse_HyperlinkString(blob,end-blob.l);if((flags&257)===257)moniker=parse_HyperlinkString(blob,end-blob.l);if((flags&257)===1)oleMoniker=parse_HyperlinkMoniker(blob,end-blob.l);if(flags&8)location=parse_HyperlinkString(blob,end-blob.l);if(flags&32)guid=blob.read_shift(16);if(flags&64)fileTime=parse_FILETIME(blob,8);blob.l=end;var target=targetFrameName||moniker||oleMoniker;if(location)target+="#"+location;return{Target:target}};function parse_LongRGBA(blob,length){var r=blob.read_shift(1),g=blob.read_shift(1),b=blob.read_shift(1),a=blob.read_shift(1);return[r,g,b,a]}function parse_LongRGB(blob,length){var x=parse_LongRGBA(blob,length);x[3]=0;return x}function parse_XLSCell(blob,length){var rw=blob.read_shift(2);var col=blob.read_shift(2);var ixfe=blob.read_shift(2);return{r:rw,c:col,ixfe:ixfe}}function parse_frtHeader(blob){var rt=blob.read_shift(2);var flags=blob.read_shift(2);blob.l+=8;return{type:rt,flags:flags}}function parse_OptXLUnicodeString(blob,length,opts){return length===0?"":parse_XLUnicodeString2(blob,length,opts)}var HIDEOBJENUM=["SHOWALL","SHOWPLACEHOLDER","HIDEALL"];var parse_HideObjEnum=parseuint16;function parse_XTI(blob,length){var iSupBook=blob.read_shift(2),itabFirst=blob.read_shift(2,"i"),itabLast=blob.read_shift(2,"i");return[iSupBook,itabFirst,itabLast]}function parse_RkRec(blob,length){var ixfe=blob.read_shift(2);var RK=parse_RkNumber(blob);return[ixfe,RK]}function parse_AddinUdf(blob,length){blob.l+=4;length-=4;var l=blob.l+length;var udfName=parse_ShortXLUnicodeString(blob,length);var cb=blob.read_shift(2);l-=blob.l;if(cb!==l)throw"Malformed AddinUdf: padding = "+l+" != "+cb;blob.l+=cb;return udfName}function parse_Ref8U(blob,length){var rwFirst=blob.read_shift(2);var rwLast=blob.read_shift(2);var colFirst=blob.read_shift(2);var colLast=blob.read_shift(2);return{s:{c:colFirst,r:rwFirst},e:{c:colLast,r:rwLast}}}function parse_RefU(blob,length){var rwFirst=blob.read_shift(2);var rwLast=blob.read_shift(2);var colFirst=blob.read_shift(1);var colLast=blob.read_shift(1);return{s:{c:colFirst,r:rwFirst},e:{c:colLast,r:rwLast}}}var parse_Ref=parse_RefU;function parse_FtCmo(blob,length){blob.l+=4;var ot=blob.read_shift(2);var id=blob.read_shift(2);var flags=blob.read_shift(2);blob.l+=12;return[id,ot,flags]}function parse_FtNts(blob,length){var out={};blob.l+=4;blob.l+=16;out.fSharedNote=blob.read_shift(2);blob.l+=4;return out}function parse_FtCf(blob,length){var out={};blob.l+=4;blob.cf=blob.read_shift(2);return out}var FtTab={21:parse_FtCmo,19:parsenoop,18:function(blob,length){blob.l+=12},17:function(blob,length){blob.l+=8},16:parsenoop,15:parsenoop,13:parse_FtNts,12:function(blob,length){blob.l+=24},11:function(blob,length){blob.l+=10},10:function(blob,length){blob.l+=16},9:parsenoop,8:function(blob,length){blob.l+=6},7:parse_FtCf,6:function(blob,length){blob.l+=6},4:parsenoop,0:function(blob,length){blob.l+=4}};function parse_FtArray(blob,length,ot){var s=blob.l;var fts=[];while(blob.l<s+length){var ft=blob.read_shift(2);blob.l-=2;try{fts.push(FtTab[ft](blob,s+length-blob.l))}catch(e){blob.l=s+length;return fts}}if(blob.l!=s+length)blob.l=s+length;return fts}var parse_FontIndex=parseuint16;function parse_BOF(blob,length){var o={};o.BIFFVer=blob.read_shift(2);length-=2;switch(o.BIFFVer){case 1536:case 1280:case 2:case 7:break;default:throw"Unexpected BIFF Ver "+o.BIFFVer}blob.read_shift(length);return o}function parse_InterfaceHdr(blob,length){if(length===0)return 1200;var q;if((q=blob.read_shift(2))!==1200)throw"InterfaceHdr codePage "+q;return 1200}function parse_WriteAccess(blob,length,opts){if(opts.enc){blob.l+=length;return""}var l=blob.l;var UserName=parse_XLUnicodeString(blob,0,opts);blob.read_shift(length+l-blob.l);return UserName}function parse_BoundSheet8(blob,length,opts){var pos=blob.read_shift(4);var hidden=blob.read_shift(1)>>6;var dt=blob.read_shift(1);switch(dt){case 0:dt="Worksheet";break;case 1:dt="Macrosheet";break;case 2:dt="Chartsheet";break;case 6:dt="VBAModule";break}var name=parse_ShortXLUnicodeString(blob,0,opts);if(name.length===0)name="Sheet1";return{pos:pos,hs:hidden,dt:dt,name:name}}function parse_SST(blob,length){var cnt=blob.read_shift(4);var ucnt=blob.read_shift(4);var strs=[];for(var i=0;i!=ucnt;++i){strs.push(parse_XLUnicodeRichExtendedString(blob))}strs.Count=cnt;strs.Unique=ucnt;return strs}function parse_ExtSST(blob,length){var extsst={};extsst.dsst=blob.read_shift(2);blob.l+=length-2;return extsst}function parse_Row(blob,length){var rw=blob.read_shift(2),col=blob.read_shift(2),Col=blob.read_shift(2),rht=blob.read_shift(2);blob.read_shift(4);var flags=blob.read_shift(1);blob.read_shift(1);blob.read_shift(2);return{r:rw,c:col,cnt:Col-col}}function parse_ForceFullCalculation(blob,length){var header=parse_frtHeader(blob);if(header.type!=2211)throw"Invalid Future Record "+header.type;var fullcalc=blob.read_shift(4);return fullcalc!==0}var parse_CompressPictures=parsenoop2;function parse_RecalcId(blob,length){blob.read_shift(2);return blob.read_shift(4)}function parse_DefaultRowHeight(blob,length){var f=blob.read_shift(2),miyRw;miyRw=blob.read_shift(2);var fl={Unsynced:f&1,DyZero:(f&2)>>1,ExAsc:(f&4)>>2,ExDsc:(f&8)>>3};return[fl,miyRw]}function parse_Window1(blob,length){var xWn=blob.read_shift(2),yWn=blob.read_shift(2),dxWn=blob.read_shift(2),dyWn=blob.read_shift(2);var flags=blob.read_shift(2),iTabCur=blob.read_shift(2),iTabFirst=blob.read_shift(2);var ctabSel=blob.read_shift(2),wTabRatio=blob.read_shift(2);return{Pos:[xWn,yWn],Dim:[dxWn,dyWn],Flags:flags,CurTab:iTabCur,FirstTab:iTabFirst,Selected:ctabSel,TabRatio:wTabRatio}}function parse_Font(blob,length,opts){blob.l+=14;var name=parse_ShortXLUnicodeString(blob,0,opts);return name}function parse_LabelSst(blob,length){var cell=parse_XLSCell(blob);cell.isst=blob.read_shift(4);return cell}function parse_Label(blob,length,opts){var cell=parse_XLSCell(blob,6);var str=parse_XLUnicodeString(blob,length-6,opts);cell.val=str;return cell}function parse_Format(blob,length,opts){var ifmt=blob.read_shift(2);var fmtstr=parse_XLUnicodeString2(blob,0,opts);return[ifmt,fmtstr]}function parse_Dimensions(blob,length){var w=length===10?2:4;var r=blob.read_shift(w),R=blob.read_shift(w),c=blob.read_shift(2),C=blob.read_shift(2);blob.l+=2;return{s:{r:r,c:c},e:{r:R,c:C}}}function parse_RK(blob,length){var rw=blob.read_shift(2),col=blob.read_shift(2);var rkrec=parse_RkRec(blob);return{r:rw,c:col,ixfe:rkrec[0],rknum:rkrec[1]}}function parse_MulRk(blob,length){var target=blob.l+length-2;var rw=blob.read_shift(2),col=blob.read_shift(2);var rkrecs=[];while(blob.l<target)rkrecs.push(parse_RkRec(blob));if(blob.l!==target)throw"MulRK read error";var lastcol=blob.read_shift(2);if(rkrecs.length!=lastcol-col+1)throw"MulRK length mismatch";return{r:rw,c:col,C:lastcol,rkrec:rkrecs}}function parse_CellStyleXF(blob,length,style){var o={};var a=blob.read_shift(4),b=blob.read_shift(4);var c=blob.read_shift(4),d=blob.read_shift(2);o.patternType=XLSFillPattern[c>>26];o.icvFore=d&127;o.icvBack=d>>7&127;return o}function parse_CellXF(blob,length){return parse_CellStyleXF(blob,length,0)}function parse_StyleXF(blob,length){return parse_CellStyleXF(blob,length,1)}function parse_XF(blob,length){var o={};o.ifnt=blob.read_shift(2);o.ifmt=blob.read_shift(2);o.flags=blob.read_shift(2);o.fStyle=o.flags>>2&1;length-=6;o.data=parse_CellStyleXF(blob,length,o.fStyle);return o}function parse_Guts(blob,length){blob.l+=4;var out=[blob.read_shift(2),blob.read_shift(2)];if(out[0]!==0)out[0]--;if(out[1]!==0)out[1]--;if(out[0]>7||out[1]>7)throw"Bad Gutters: "+out;return out}function parse_BoolErr(blob,length){var cell=parse_XLSCell(blob,6);var val=parse_Bes(blob,2);cell.val=val;cell.t=val===true||val===false?"b":"e";return cell}function parse_Number(blob,length){var cell=parse_XLSCell(blob,6);var xnum=parse_Xnum(blob,8);cell.val=xnum;return cell}var parse_XLHeaderFooter=parse_OptXLUnicodeString;function parse_SupBook(blob,length,opts){var end=blob.l+length;var ctab=blob.read_shift(2);var cch=blob.read_shift(2);var virtPath;if(cch>=1&&cch<=255)virtPath=parse_XLUnicodeStringNoCch(blob,cch);var rgst=blob.read_shift(end-blob.l);opts.sbcch=cch;return[cch,ctab,virtPath,rgst]}function parse_ExternName(blob,length,opts){var flags=blob.read_shift(2);var body;var o={fBuiltIn:flags&1,fWantAdvise:flags>>>1&1,fWantPict:flags>>>2&1,fOle:flags>>>3&1,fOleLink:flags>>>4&1,cf:flags>>>5&1023,fIcon:flags>>>15&1};if(opts.sbcch===14849)body=parse_AddinUdf(blob,length-2);o.body=body||blob.read_shift(length-2);return o}function parse_Lbl(blob,length,opts){if(opts.biff<8)return parse_Label(blob,length,opts);var target=blob.l+length;var flags=blob.read_shift(2);var chKey=blob.read_shift(1);var cch=blob.read_shift(1);var cce=blob.read_shift(2);blob.l+=2;var itab=blob.read_shift(2);blob.l+=4;var name=parse_XLUnicodeStringNoCch(blob,cch,opts);var rgce=parse_NameParsedFormula(blob,target-blob.l,opts,cce);return{chKey:chKey,Name:name,rgce:rgce}}function parse_ExternSheet(blob,length,opts){if(opts.biff<8)return parse_ShortXLUnicodeString(blob,length,opts);var o=parslurp2(blob,length,parse_XTI);var oo=[];if(opts.sbcch===1025){for(var i=0;i!=o.length;++i)oo.push(opts.snames[o[i][1]]);return oo}else return o}function parse_ShrFmla(blob,length,opts){var ref=parse_RefU(blob,6);blob.l++;var cUse=blob.read_shift(1);length-=8;return[parse_SharedParsedFormula(blob,length,opts),cUse]}function parse_Array(blob,length,opts){var ref=parse_Ref(blob,6);blob.l+=6;length-=12;return[ref,parse_ArrayParsedFormula(blob,length,opts,ref)]}function parse_MTRSettings(blob,length){var fMTREnabled=blob.read_shift(4)!==0;var fUserSetThreadCount=blob.read_shift(4)!==0;var cUserThreadCount=blob.read_shift(4);return[fMTREnabled,fUserSetThreadCount,cUserThreadCount]}function parse_NoteSh(blob,length,opts){if(opts.biff<8)return;var row=blob.read_shift(2),col=blob.read_shift(2);var flags=blob.read_shift(2),idObj=blob.read_shift(2);var stAuthor=parse_XLUnicodeString2(blob,0,opts);if(opts.biff<8)blob.read_shift(1);return[{r:row,c:col},stAuthor,idObj,flags]}function parse_Note(blob,length,opts){return parse_NoteSh(blob,length,opts)}function parse_MergeCells(blob,length){var merges=[];var cmcs=blob.read_shift(2);while(cmcs--)merges.push(parse_Ref8U(blob,length));return merges}function parse_Obj(blob,length){var cmo=parse_FtCmo(blob,22);var fts=parse_FtArray(blob,length-22,cmo[1]);return{cmo:cmo,ft:fts}}function parse_TxO(blob,length,opts){var s=blob.l;try{blob.l+=4;var ot=(opts.lastobj||{cmo:[0,0]}).cmo[1];var controlInfo;if([0,5,7,11,12,14].indexOf(ot)==-1)blob.l+=6;else controlInfo=parse_ControlInfo(blob,6,opts);var cchText=blob.read_shift(2);var cbRuns=blob.read_shift(2);var ifntEmpty=parse_FontIndex(blob,2);var len=blob.read_shift(2);blob.l+=len;var texts="";for(var i=1;i<blob.lens.length-1;++i){if(blob.l-s!=blob.lens[i])throw"TxO: bad continue record";var hdr=blob[blob.l];var t=parse_XLUnicodeStringNoCch(blob,blob.lens[i+1]-blob.lens[i]-1);texts+=t;if(texts.length>=(hdr?cchText:2*cchText))break}if(texts.length!==cchText&&texts.length!==cchText*2){throw"cchText: "+cchText+" != "+texts.length}blob.l=s+length;return{t:texts}}catch(e){blob.l=s+length;return{t:texts||""}}}var parse_HLink=function(blob,length){var ref=parse_Ref8U(blob,8);blob.l+=16;var hlink=parse_Hyperlink(blob,length-24);return[ref,hlink]};var parse_HLinkTooltip=function(blob,length){var end=blob.l+length;blob.read_shift(2);var ref=parse_Ref8U(blob,8);var wzTooltip=blob.read_shift((length-10)/2,"dbcs-cont");wzTooltip=wzTooltip.replace(chr0,"");return[ref,wzTooltip]};function parse_Country(blob,length){var o=[],d;d=blob.read_shift(2);o[0]=CountryEnum[d]||d;d=blob.read_shift(2);o[1]=CountryEnum[d]||d;return o}function parse_ClrtClient(blob,length){var ccv=blob.read_shift(2);var o=[];while(ccv-- >0)o.push(parse_LongRGB(blob,8));return o}function parse_Palette(blob,length){var ccv=blob.read_shift(2);var o=[];while(ccv-- >0)o.push(parse_LongRGB(blob,8));return o}function parse_XFCRC(blob,length){blob.l+=2;var o={cxfs:0,crc:0};o.cxfs=blob.read_shift(2);o.crc=blob.read_shift(4);return o}var parse_Style=parsenoop;var parse_StyleExt=parsenoop;var parse_ColInfo=parsenoop;var parse_Window2=parsenoop;var parse_Backup=parsebool;var parse_Blank=parse_XLSCell;var parse_BottomMargin=parse_Xnum;var parse_BuiltInFnGroupCount=parseuint16;var parse_CalcCount=parseuint16;var parse_CalcDelta=parse_Xnum;var parse_CalcIter=parsebool;var parse_CalcMode=parseuint16;var parse_CalcPrecision=parsebool;var parse_CalcRefMode=parsenoop2;var parse_CalcSaveRecalc=parsebool;var parse_CodePage=parseuint16;var parse_Compat12=parsebool;var parse_Date1904=parsebool;var parse_DefColWidth=parseuint16;var parse_DSF=parsenoop2;var parse_EntExU2=parsenoop2;var parse_EOF=parsenoop2;var parse_Excel9File=parsenoop2;var parse_FeatHdr=parsenoop2;var parse_FontX=parseuint16;var parse_Footer=parse_XLHeaderFooter;var parse_GridSet=parseuint16;var parse_HCenter=parsebool;var parse_Header=parse_XLHeaderFooter;var parse_HideObj=parse_HideObjEnum;var parse_InterfaceEnd=parsenoop2;var parse_LeftMargin=parse_Xnum;var parse_Mms=parsenoop2;var parse_ObjProtect=parsebool;var parse_Password=parseuint16;var parse_PrintGrid=parsebool;var parse_PrintRowCol=parsebool;var parse_PrintSize=parseuint16;var parse_Prot4Rev=parsebool;var parse_Prot4RevPass=parseuint16;var parse_Protect=parsebool;var parse_RefreshAll=parsebool;var parse_RightMargin=parse_Xnum;var parse_RRTabId=parseuint16a;var parse_ScenarioProtect=parsebool;var parse_Scl=parseuint16a;var parse_String=parse_XLUnicodeString;var parse_SxBool=parsebool;var parse_TopMargin=parse_Xnum;var parse_UsesELFs=parsebool;var parse_VCenter=parsebool;var parse_WinProtect=parsebool;var parse_WriteProtect=parsenoop;var parse_VerticalPageBreaks=parsenoop;var parse_HorizontalPageBreaks=parsenoop;var parse_Selection=parsenoop;var parse_Continue=parsenoop;var parse_Pane=parsenoop;var parse_Pls=parsenoop;var parse_DCon=parsenoop;var parse_DConRef=parsenoop;var parse_DConName=parsenoop;var parse_XCT=parsenoop;var parse_CRN=parsenoop;var parse_FileSharing=parsenoop;var parse_Uncalced=parsenoop;var parse_Template=parsenoop;var parse_Intl=parsenoop;var parse_WsBool=parsenoop;var parse_Sort=parsenoop;var parse_Sync=parsenoop;var parse_LPr=parsenoop;var parse_DxGCol=parsenoop;var parse_FnGroupName=parsenoop;var parse_FilterMode=parsenoop;var parse_AutoFilterInfo=parsenoop;var parse_AutoFilter=parsenoop;var parse_Setup=parsenoop;var parse_ScenMan=parsenoop;var parse_SCENARIO=parsenoop;var parse_SxView=parsenoop;var parse_Sxvd=parsenoop;var parse_SXVI=parsenoop;var parse_SxIvd=parsenoop;var parse_SXLI=parsenoop;var parse_SXPI=parsenoop;var parse_DocRoute=parsenoop;var parse_RecipName=parsenoop;var parse_MulBlank=parsenoop;var parse_SXDI=parsenoop;var parse_SXDB=parsenoop;var parse_SXFDB=parsenoop;var parse_SXDBB=parsenoop;var parse_SXNum=parsenoop;var parse_SxErr=parsenoop;var parse_SXInt=parsenoop;var parse_SXString=parsenoop;var parse_SXDtr=parsenoop;var parse_SxNil=parsenoop;var parse_SXTbl=parsenoop;var parse_SXTBRGIITM=parsenoop;var parse_SxTbpg=parsenoop;var parse_ObProj=parsenoop;var parse_SXStreamID=parsenoop;var parse_DBCell=parsenoop;var parse_SXRng=parsenoop;var parse_SxIsxoper=parsenoop;var parse_BookBool=parsenoop;var parse_DbOrParamQry=parsenoop;var parse_OleObjectSize=parsenoop;var parse_SXVS=parsenoop;var parse_BkHim=parsenoop;var parse_MsoDrawingGroup=parsenoop;var parse_MsoDrawing=parsenoop;var parse_MsoDrawingSelection=parsenoop;var parse_PhoneticInfo=parsenoop;var parse_SxRule=parsenoop;var parse_SXEx=parsenoop;var parse_SxFilt=parsenoop;var parse_SxDXF=parsenoop;var parse_SxItm=parsenoop;var parse_SxName=parsenoop;var parse_SxSelect=parsenoop;var parse_SXPair=parsenoop;var parse_SxFmla=parsenoop;var parse_SxFormat=parsenoop;var parse_SXVDEx=parsenoop;var parse_SXFormula=parsenoop;var parse_SXDBEx=parsenoop;var parse_RRDInsDel=parsenoop;var parse_RRDHead=parsenoop;var parse_RRDChgCell=parsenoop;var parse_RRDRenSheet=parsenoop;var parse_RRSort=parsenoop;var parse_RRDMove=parsenoop;var parse_RRFormat=parsenoop;var parse_RRAutoFmt=parsenoop;var parse_RRInsertSh=parsenoop;var parse_RRDMoveBegin=parsenoop;var parse_RRDMoveEnd=parsenoop;var parse_RRDInsDelBegin=parsenoop;var parse_RRDInsDelEnd=parsenoop;var parse_RRDConflict=parsenoop;var parse_RRDDefName=parsenoop;var parse_RRDRstEtxp=parsenoop;var parse_LRng=parsenoop;var parse_CUsr=parsenoop;var parse_CbUsr=parsenoop;var parse_UsrInfo=parsenoop;var parse_UsrExcl=parsenoop;var parse_FileLock=parsenoop;var parse_RRDInfo=parsenoop;var parse_BCUsrs=parsenoop;var parse_UsrChk=parsenoop;var parse_UserBView=parsenoop;var parse_UserSViewBegin=parsenoop;var parse_UserSViewEnd=parsenoop;var parse_RRDUserView=parsenoop;var parse_Qsi=parsenoop;var parse_CondFmt=parsenoop;var parse_CF=parsenoop;var parse_DVal=parsenoop;var parse_DConBin=parsenoop;var parse_Lel=parsenoop;var parse_XLSCodeName=parse_XLUnicodeString;var parse_SXFDBType=parsenoop;var parse_ObNoMacros=parsenoop;var parse_Dv=parsenoop;var parse_Index=parsenoop;var parse_Table=parsenoop;var parse_BigName=parsenoop;var parse_ContinueBigName=parsenoop;var parse_WebPub=parsenoop;var parse_QsiSXTag=parsenoop;var parse_DBQueryExt=parsenoop;var parse_ExtString=parsenoop;var parse_TxtQry=parsenoop;var parse_Qsir=parsenoop;var parse_Qsif=parsenoop;var parse_RRDTQSIF=parsenoop;var parse_OleDbConn=parsenoop;var parse_WOpt=parsenoop;var parse_SXViewEx=parsenoop;var parse_SXTH=parsenoop;var parse_SXPIEx=parsenoop;var parse_SXVDTEx=parsenoop;var parse_SXViewEx9=parsenoop;var parse_ContinueFrt=parsenoop;var parse_RealTimeData=parsenoop;var parse_ChartFrtInfo=parsenoop;var parse_FrtWrapper=parsenoop;var parse_StartBlock=parsenoop;var parse_EndBlock=parsenoop;var parse_StartObject=parsenoop;var parse_EndObject=parsenoop;var parse_CatLab=parsenoop;var parse_YMult=parsenoop;var parse_SXViewLink=parsenoop;var parse_PivotChartBits=parsenoop;var parse_FrtFontList=parsenoop;var parse_SheetExt=parsenoop;var parse_BookExt=parsenoop;var parse_SXAddl=parsenoop;var parse_CrErr=parsenoop;var parse_HFPicture=parsenoop;var parse_Feat=parsenoop;var parse_DataLabExt=parsenoop;var parse_DataLabExtContents=parsenoop;var parse_CellWatch=parsenoop;var parse_FeatHdr11=parsenoop;var parse_Feature11=parsenoop;var parse_DropDownObjIds=parsenoop;var parse_ContinueFrt11=parsenoop;var parse_DConn=parsenoop;var parse_List12=parsenoop;var parse_Feature12=parsenoop;var parse_CondFmt12=parsenoop;var parse_CF12=parsenoop;var parse_CFEx=parsenoop;var parse_AutoFilter12=parsenoop;var parse_ContinueFrt12=parsenoop;var parse_MDTInfo=parsenoop;var parse_MDXStr=parsenoop;var parse_MDXTuple=parsenoop;var parse_MDXSet=parsenoop;var parse_MDXProp=parsenoop;var parse_MDXKPI=parsenoop;var parse_MDB=parsenoop;var parse_PLV=parsenoop;var parse_DXF=parsenoop;var parse_TableStyles=parsenoop;var parse_TableStyle=parsenoop;var parse_TableStyleElement=parsenoop;var parse_NamePublish=parsenoop;var parse_NameCmt=parsenoop;var parse_SortData=parsenoop;var parse_GUIDTypeLib=parsenoop;var parse_FnGrp12=parsenoop;var parse_NameFnGrp12=parsenoop;var parse_HeaderFooter=parsenoop;var parse_CrtLayout12=parsenoop;var parse_CrtMlFrt=parsenoop;var parse_CrtMlFrtContinue=parsenoop;var parse_ShapePropsStream=parsenoop;var parse_TextPropsStream=parsenoop;var parse_RichTextStream=parsenoop;var parse_CrtLayout12A=parsenoop;var parse_Units=parsenoop;var parse_Chart=parsenoop;var parse_Series=parsenoop;var parse_DataFormat=parsenoop;var parse_LineFormat=parsenoop;var parse_MarkerFormat=parsenoop;var parse_AreaFormat=parsenoop;var parse_PieFormat=parsenoop;var parse_AttachedLabel=parsenoop;var parse_SeriesText=parsenoop;var parse_ChartFormat=parsenoop;var parse_Legend=parsenoop;var parse_SeriesList=parsenoop;var parse_Bar=parsenoop;var parse_Line=parsenoop;var parse_Pie=parsenoop;var parse_Area=parsenoop;var parse_Scatter=parsenoop;var parse_CrtLine=parsenoop;var parse_Axis=parsenoop;var parse_Tick=parsenoop;var parse_ValueRange=parsenoop;var parse_CatSerRange=parsenoop;var parse_AxisLine=parsenoop;var parse_CrtLink=parsenoop;var parse_DefaultText=parsenoop;var parse_Text=parsenoop;var parse_ObjectLink=parsenoop;var parse_Frame=parsenoop;var parse_Begin=parsenoop;var parse_End=parsenoop;var parse_PlotArea=parsenoop;var parse_Chart3d=parsenoop;var parse_PicF=parsenoop;var parse_DropBar=parsenoop;var parse_Radar=parsenoop;var parse_Surf=parsenoop;var parse_RadarArea=parsenoop;var parse_AxisParent=parsenoop;var parse_LegendException=parsenoop;var parse_ShtProps=parsenoop;var parse_SerToCrt=parsenoop;var parse_AxesUsed=parsenoop;var parse_SBaseRef=parsenoop;var parse_SerParent=parsenoop;var parse_SerAuxTrend=parsenoop;var parse_IFmtRecord=parsenoop;var parse_Pos=parsenoop;var parse_AlRuns=parsenoop;var parse_BRAI=parsenoop;var parse_SerAuxErrBar=parsenoop;var parse_SerFmt=parsenoop;var parse_Chart3DBarShape=parsenoop;var parse_Fbi=parsenoop;var parse_BopPop=parsenoop;var parse_AxcExt=parsenoop;var parse_Dat=parsenoop;var parse_PlotGrowth=parsenoop;var parse_SIIndex=parsenoop;var parse_GelFrame=parsenoop;var parse_BopPopCustom=parsenoop;var parse_Fbi2=parsenoop;function parse_BIFF5String(blob){var len=blob.read_shift(1);return blob.read_shift(len,"sbcs-cont")}function parse_BIFF2STR(blob,length,opts){var cell=parse_XLSCell(blob,6);++blob.l;var str=parse_XLUnicodeString2(blob,length-7,opts);cell.val=str;return cell}function parse_BIFF2NUM(blob,length,opts){var cell=parse_XLSCell(blob,6);++blob.l;var num=parse_Xnum(blob,8);cell.val=num;return cell}var CS2CP={0:1252,1:65001,2:65001,77:1e4,128:932,129:949,130:1361,134:936,136:950,161:1253,162:1254,163:1258,177:1255,178:1256,186:1257,204:1251,222:874,238:1250,255:1252,69:6969};var parse_rs=function parse_rs_factory(){var tregex=matchtag("t"),rpregex=matchtag("rPr"),rregex=/<r>/g,rend=/<\/r>/,nlregex=/\r\n/g;var parse_rpr=function parse_rpr(rpr,intro,outro){var font={},cp=65001;var m=rpr.match(tagregex),i=0;if(m)for(;i!=m.length;++i){var y=parsexmltag(m[i]);switch(y[0]){case"<condense":break;case"<extend":break;case"<shadow":case"<shadow/>":break;case"<charset":if(y.val=="1")break;cp=CS2CP[parseInt(y.val,10)];break;case"<outline":case"<outline/>":break;case"<rFont":font.name=y.val;break;case"<sz":font.sz=y.val;break;case"<strike":if(!y.val)break;case"<strike/>":font.strike=1;break;case"</strike>":break;case"<u":if(!y.val)break;case"<u/>":font.u=1;break;case"</u>":break;case"<b":if(!y.val)break;case"<b/>":font.b=1;break;case"</b>":break;case"<i":if(!y.val)break;case"<i/>":font.i=1;break;case"</i>":break;case"<color":if(y.rgb)font.color=y.rgb.substr(2,6);break;case"<family":font.family=y.val;break;case"<vertAlign":break;case"<scheme":break;default:if(y[0].charCodeAt(1)!==47)throw"Unrecognized rich format "+y[0]}}var style=[];if(font.b)style.push("font-weight: bold;");if(font.i)style.push("font-style: italic;");intro.push('<span style="'+style.join("")+'">');outro.push("</span>");return cp};function parse_r(r){var terms=[[],"",[]];var t=r.match(tregex),cp=65001;if(!isval(t))return"";terms[1]=t[1];var rpr=r.match(rpregex);if(isval(rpr))cp=parse_rpr(rpr[1],terms[0],terms[2]);return terms[0].join("")+terms[1].replace(nlregex,"<br/>")+terms[2].join("")}return function parse_rs(rs){return rs.replace(rregex,"").split(rend).map(parse_r).join("")}}();var sitregex=/<t[^>]*>([^<]*)<\/t>/g,sirregex=/<r>/;function parse_si(x,opts){var html=opts?opts.cellHTML:true;var z={};if(!x)return null;var y;if(x.charCodeAt(1)===116){z.t=utf8read(unescapexml(x.substr(x.indexOf(">")+1).split(/<\/t>/)[0]));z.r=x;if(html)z.h=z.t}else if(y=x.match(sirregex)){z.r=x;z.t=utf8read(unescapexml(x.match(sitregex).join("").replace(tagregex,"")));if(html)z.h=parse_rs(x)}return z}var sstr0=/<sst([^>]*)>([\s\S]*)<\/sst>/;var sstr1=/<(?:si|sstItem)>/g;var sstr2=/<\/(?:si|sstItem)>/;function parse_sst_xml(data,opts){var s=[],ss;var sst=data.match(sstr0);if(isval(sst)){ss=sst[2].replace(sstr1,"").split(sstr2);for(var i=0;i!=ss.length;++i){var o=parse_si(ss[i],opts);if(o!=null)s[s.length]=o}sst=parsexmltag(sst[1]);s.Count=sst.count;s.Unique=sst.uniqueCount}return s}RELS.SST="http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings";var straywsregex=/^\s|\s$|[\t\n\r]/;function write_sst_xml(sst,opts){if(!opts.bookSST)return"";var o=[XML_HEADER];o[o.length]=writextag("sst",null,{xmlns:XMLNS.main[0],count:sst.Count,uniqueCount:sst.Unique});for(var i=0;i!=sst.length;++i){if(sst[i]==null)continue;var s=sst[i];var sitag="<si>";if(s.r)sitag+=s.r;else{sitag+="<t";if(s.t.match(straywsregex))sitag+=' xml:space="preserve"';sitag+=">"+escapexml(s.t)+"</t>"}sitag+="</si>";o[o.length]=sitag}if(o.length>2){o[o.length]="</sst>";o[1]=o[1].replace("/>",">")}return o.join("")}function parse_BrtBeginSst(data,length){return[data.read_shift(4),data.read_shift(4)]}function parse_sst_bin(data,opts){var s=[];var pass=false;recordhopper(data,function hopper_sst(val,R,RT){switch(R.n){case"BrtBeginSst":s.Count=val[0];s.Unique=val[1];break;case"BrtSSTItem":s.push(val);break;case"BrtEndSst":return true;case"BrtFRTBegin":pass=true;break;case"BrtFRTEnd":pass=false;break;default:if(!pass||opts.WTF)throw new Error("Unexpected record "+RT+" "+R.n)}});return s}function write_BrtBeginSst(sst,o){if(!o)o=new_buf(8);o.write_shift(4,sst.Count);o.write_shift(4,sst.Unique);return o}var write_BrtSSTItem=write_RichStr;function write_sst_bin(sst,opts){var ba=buf_array();write_record(ba,"BrtBeginSst",write_BrtBeginSst(sst));for(var i=0;i<sst.length;++i)write_record(ba,"BrtSSTItem",write_BrtSSTItem(sst[i]));write_record(ba,"BrtEndSst");return ba.end()}function _JS2ANSI(str){if(typeof cptable!=="undefined")return cptable.utils.encode(1252,str);return str.split("").map(function(x){return x.charCodeAt(0)})}function parse_Version(blob,length){var o={};o.Major=blob.read_shift(2);o.Minor=blob.read_shift(2);return o}function parse_EncryptionHeader(blob,length){var o={};o.Flags=blob.read_shift(4);var tmp=blob.read_shift(4);if(tmp!==0)throw"Unrecognized SizeExtra: "+tmp;o.AlgID=blob.read_shift(4);switch(o.AlgID){case 0:case 26625:case 26126:case 26127:case 26128:break;default:throw"Unrecognized encryption algorithm: "+o.AlgID}parsenoop(blob,length-12);return o}function parse_EncryptionVerifier(blob,length){return parsenoop(blob,length)}function parse_RC4CryptoHeader(blob,length){var o={};var vers=o.EncryptionVersionInfo=parse_Version(blob,4);length-=4;if(vers.Minor!=2)throw"unrecognized minor version code: "+vers.Minor;if(vers.Major>4||vers.Major<2)throw"unrecognized major version code: "+vers.Major;o.Flags=blob.read_shift(4);length-=4;var sz=blob.read_shift(4);length-=4;o.EncryptionHeader=parse_EncryptionHeader(blob,sz);length-=sz;o.EncryptionVerifier=parse_EncryptionVerifier(blob,length);return o}function parse_RC4Header(blob,length){var o={};var vers=o.EncryptionVersionInfo=parse_Version(blob,4);length-=4;if(vers.Major!=1||vers.Minor!=1)throw"unrecognized version code "+vers.Major+" : "+vers.Minor;o.Salt=blob.read_shift(16);o.EncryptedVerifier=blob.read_shift(16);o.EncryptedVerifierHash=blob.read_shift(16);return o}function crypto_CreatePasswordVerifier_Method1(Password){var Verifier=0,PasswordArray;var PasswordDecoded=_JS2ANSI(Password);var len=PasswordDecoded.length+1,i,PasswordByte;var Intermediate1,Intermediate2,Intermediate3;PasswordArray=new_raw_buf(len);PasswordArray[0]=PasswordDecoded.length;for(i=1;i!=len;++i)PasswordArray[i]=PasswordDecoded[i-1];for(i=len-1;i>=0;--i){PasswordByte=PasswordArray[i];Intermediate1=(Verifier&16384)===0?0:1;Intermediate2=Verifier<<1&32767;Intermediate3=Intermediate1|Intermediate2;Verifier=Intermediate3^PasswordByte}return Verifier^52811}var crypto_CreateXorArray_Method1=function(){var PadArray=[187,255,255,186,255,255,185,128,0,190,15,0,191,15,0];var InitialCode=[57840,7439,52380,33984,4364,3600,61902,12606,6258,57657,54287,34041,10252,43370,20163];var XorMatrix=[44796,19929,39858,10053,20106,40212,10761,31585,63170,64933,60267,50935,40399,11199,17763,35526,1453,2906,5812,11624,23248,885,1770,3540,7080,14160,28320,56640,55369,41139,20807,41614,21821,43642,17621,28485,56970,44341,19019,38038,14605,29210,60195,50791,40175,10751,21502,43004,24537,18387,36774,3949,7898,15796,31592,63184,47201,24803,49606,37805,14203,28406,56812,17824,35648,1697,3394,6788,13576,27152,43601,17539,35078,557,1114,2228,4456,30388,60776,51953,34243,7079,14158,28316,14128,28256,56512,43425,17251,34502,7597,13105,26210,52420,35241,883,1766,3532,4129,8258,16516,33032,4657,9314,18628];
+var Ror=function(Byte){return(Byte/2|Byte*128)&255};var XorRor=function(byte1,byte2){return Ror(byte1^byte2)};var CreateXorKey_Method1=function(Password){var XorKey=InitialCode[Password.length-1];var CurrentElement=104;for(var i=Password.length-1;i>=0;--i){var Char=Password[i];for(var j=0;j!=7;++j){if(Char&64)XorKey^=XorMatrix[CurrentElement];Char*=2;--CurrentElement}}return XorKey};return function(password){var Password=_JS2ANSI(password);var XorKey=CreateXorKey_Method1(Password);var Index=Password.length;var ObfuscationArray=new_raw_buf(16);for(var i=0;i!=16;++i)ObfuscationArray[i]=0;var Temp,PasswordLastChar,PadIndex;if((Index&1)===1){Temp=XorKey>>8;ObfuscationArray[Index]=XorRor(PadArray[0],Temp);--Index;Temp=XorKey&255;PasswordLastChar=Password[Password.length-1];ObfuscationArray[Index]=XorRor(PasswordLastChar,Temp)}while(Index>0){--Index;Temp=XorKey>>8;ObfuscationArray[Index]=XorRor(Password[Index],Temp);--Index;Temp=XorKey&255;ObfuscationArray[Index]=XorRor(Password[Index],Temp)}Index=15;PadIndex=15-Password.length;while(PadIndex>0){Temp=XorKey>>8;ObfuscationArray[Index]=XorRor(PadArray[PadIndex],Temp);--Index;--PadIndex;Temp=XorKey&255;ObfuscationArray[Index]=XorRor(Password[Index],Temp);--Index;--PadIndex}return ObfuscationArray}}();var crypto_DecryptData_Method1=function(password,Data,XorArrayIndex,XorArray,O){if(!O)O=Data;if(!XorArray)XorArray=crypto_CreateXorArray_Method1(password);var Index,Value;for(Index=0;Index!=Data.length;++Index){Value=Data[Index];Value^=XorArray[XorArrayIndex];Value=(Value>>5|Value<<3)&255;O[Index]=Value;++XorArrayIndex}return[O,XorArrayIndex,XorArray]};var crypto_MakeXorDecryptor=function(password){var XorArrayIndex=0,XorArray=crypto_CreateXorArray_Method1(password);return function(Data){var O=crypto_DecryptData_Method1(null,Data,XorArrayIndex,XorArray);XorArrayIndex=O[1];return O[0]}};function parse_XORObfuscation(blob,length,opts,out){var o={key:parseuint16(blob),verificationBytes:parseuint16(blob)};if(opts.password)o.verifier=crypto_CreatePasswordVerifier_Method1(opts.password);out.valid=o.verificationBytes===o.verifier;if(out.valid)out.insitu_decrypt=crypto_MakeXorDecryptor(opts.password);return o}function parse_FilePassHeader(blob,length,oo){var o=oo||{};o.Info=blob.read_shift(2);blob.l-=2;if(o.Info===1)o.Data=parse_RC4Header(blob,length);else o.Data=parse_RC4CryptoHeader(blob,length);return o}function parse_FilePass(blob,length,opts){var o={Type:blob.read_shift(2)};if(o.Type)parse_FilePassHeader(blob,length-2,o);else parse_XORObfuscation(blob,length-2,opts,o);return o}function hex2RGB(h){var o=h.substr(h[0]==="#"?1:0,6);return[parseInt(o.substr(0,2),16),parseInt(o.substr(2,2),16),parseInt(o.substr(4,2),16)]}function rgb2Hex(rgb){for(var i=0,o=1;i!=3;++i)o=o*256+(rgb[i]>255?255:rgb[i]<0?0:rgb[i]);return o.toString(16).toUpperCase().substr(1)}function rgb2HSL(rgb){var R=rgb[0]/255,G=rgb[1]/255,B=rgb[2]/255;var M=Math.max(R,G,B),m=Math.min(R,G,B),C=M-m;if(C===0)return[0,0,R];var H6=0,S=0,L2=M+m;S=C/(L2>1?2-L2:L2);switch(M){case R:H6=((G-B)/C+6)%6;break;case G:H6=(B-R)/C+2;break;case B:H6=(R-G)/C+4;break}return[H6/6,S,L2/2]}function hsl2RGB(hsl){var H=hsl[0],S=hsl[1],L=hsl[2];var C=S*2*(L<.5?L:1-L),m=L-C/2;var rgb=[m,m,m],h6=6*H;var X;if(S!==0)switch(h6|0){case 0:case 6:X=C*h6;rgb[0]+=C;rgb[1]+=X;break;case 1:X=C*(2-h6);rgb[0]+=X;rgb[1]+=C;break;case 2:X=C*(h6-2);rgb[1]+=C;rgb[2]+=X;break;case 3:X=C*(4-h6);rgb[1]+=X;rgb[2]+=C;break;case 4:X=C*(h6-4);rgb[2]+=C;rgb[0]+=X;break;case 5:X=C*(6-h6);rgb[2]+=X;rgb[0]+=C;break}for(var i=0;i!=3;++i)rgb[i]=Math.round(rgb[i]*255);return rgb}function rgb_tint(hex,tint){if(tint==0)return hex;var hsl=rgb2HSL(hex2RGB(hex));if(tint<0)hsl[2]=hsl[2]*(1+tint);else hsl[2]=1-(1-hsl[2])*(1-tint);var rev=rgb2Hex(hsl2RGB(hsl));return rev}var DEF_MDW=7,MAX_MDW=15,MIN_MDW=1,MDW=DEF_MDW;function width2px(width){return(width+(128/MDW|0)/256)*MDW|0}function px2char(px){return((px-5)/MDW*100+.5|0)/100}function char2width(chr){return((chr*MDW+5)/MDW*256|0)/256}function cycle_width(collw){return char2width(px2char(width2px(collw)))}function find_mdw(collw,coll){if(cycle_width(collw)!=collw){for(MDW=DEF_MDW;MDW>MIN_MDW;--MDW)if(cycle_width(collw)===collw)break;if(MDW===MIN_MDW)for(MDW=DEF_MDW+1;MDW<MAX_MDW;++MDW)if(cycle_width(collw)===collw)break;if(MDW===MAX_MDW)MDW=DEF_MDW}}var XLMLPatternTypeMap={None:"none",Solid:"solid",Gray50:"mediumGray",Gray75:"darkGray",Gray25:"lightGray",HorzStripe:"darkHorizontal",VertStripe:"darkVertical",ReverseDiagStripe:"darkDown",DiagStripe:"darkUp",DiagCross:"darkGrid",ThickDiagCross:"darkTrellis",ThinHorzStripe:"lightHorizontal",ThinVertStripe:"lightVertical",ThinReverseDiagStripe:"lightDown",ThinHorzCross:"lightGrid"};var styles={};var themes={};function parse_fills(t,opts){styles.Fills=[];var fill={};t[0].match(tagregex).forEach(function(x){var y=parsexmltag(x);switch(y[0]){case"<fills":case"<fills>":case"</fills>":break;case"<fill>":break;case"</fill>":styles.Fills.push(fill);fill={};break;case"<patternFill":if(y.patternType)fill.patternType=y.patternType;break;case"<patternFill/>":case"</patternFill>":break;case"<bgColor":if(!fill.bgColor)fill.bgColor={};if(y.indexed)fill.bgColor.indexed=parseInt(y.indexed,10);if(y.theme)fill.bgColor.theme=parseInt(y.theme,10);if(y.tint)fill.bgColor.tint=parseFloat(y.tint);if(y.theme&&themes.themeElements&&themes.themeElements.clrScheme){fill.bgColor.rgb=rgb_tint(themes.themeElements.clrScheme[fill.bgColor.theme].rgb,fill.bgColor.tint||0);if(opts.WTF)fill.bgColor.raw_rgb=rgb_tint(themes.themeElements.clrScheme[fill.bgColor.theme].rgb,0)}if(y.rgb)fill.bgColor.rgb=y.rgb;break;case"<bgColor/>":case"</bgColor>":break;case"<fgColor":if(!fill.fgColor)fill.fgColor={};if(y.theme)fill.fgColor.theme=parseInt(y.theme,10);if(y.tint)fill.fgColor.tint=parseFloat(y.tint);if(y.theme&&themes.themeElements&&themes.themeElements.clrScheme){fill.fgColor.rgb=rgb_tint(themes.themeElements.clrScheme[fill.fgColor.theme].rgb,fill.fgColor.tint||0);if(opts.WTF)fill.fgColor.raw_rgb=rgb_tint(themes.themeElements.clrScheme[fill.fgColor.theme].rgb,0)}if(y.rgb)fill.fgColor.rgb=y.rgb;break;case"<fgColor/>":case"</fgColor>":break;default:if(opts.WTF)throw"unrecognized "+y[0]+" in fills"}})}function parse_fonts(t,opts){styles.Fonts=[];var font={};t[0].match(tagregex).forEach(function(x){var y=parsexmltag(x);switch(y[0]){case"<fonts":case"<fonts>":case"</fonts>":break;case"<font":break;case"</font>":styles.Fonts.push(font);font={};break;case"<name":if(y.val)font.name=y.val;break;case"<name/>":case"</name>":break;case"<b/>":font.bold=true;break;case"<u/>":font.underline=true;break;case"<i/>":font.italic=true;break;case"<strike/>":font.strike=true;break;case"<outline/>":font.outline=true;break;case"<shadow/>":font.shadow=true;break;case"<sz":if(y.val)font.sz=y.val;break;case"<sz/>":case"</sz>":break;case"<vertAlign":if(y.val)font.vertAlign=y.val;break;case"<vertAlign/>":case"</vertAlign>":break;case"<color":if(!font.color)font.color={};if(y.theme)font.color.theme=y.theme;if(y.tint)font.color.tint=y.tint;if(y.theme&&themes.themeElements&&themes.themeElements.clrScheme){font.color.rgb=rgb_tint(themes.themeElements.clrScheme[font.color.theme].rgb,font.color.tint||0)}if(y.rgb)font.color.rgb=y.rgb;break;case"<color/>":case"</color>":break}})}function parse_borders(t,opts){styles.Borders=[];var border={},sub_border={};t[0].match(tagregex).forEach(function(x){var y=parsexmltag(x);switch(y[0]){case"<borders":case"<borders>":case"</borders>":break;case"<border":case"<border>":border={};if(y.diagonalUp){border.diagonalUp=y.diagonalUp}if(y.diagonalDown){border.diagonalDown=y.diagonalDown}styles.Borders.push(border);break;break;case"</border>":break;case"<left":sub_border=border.left={};if(y.style){sub_border.style=y.style}break;case"<right":sub_border=border.right={};if(y.style){sub_border.style=y.style}break;case"<top":sub_border=border.top={};if(y.style){sub_border.style=y.style}break;case"<bottom":sub_border=border.bottom={};if(y.style){sub_border.style=y.style}break;case"<diagonal":sub_border=border.diagonal={};if(y.style){sub_border.style=y.style}break;case"<color":sub_border.color={};if(y.theme)sub_border.color.theme=y.theme;if(y.theme&&themes.themeElements&&themes.themeElements.clrScheme){sub_border.color.rgb=rgb_tint(themes.themeElements.clrScheme[sub_border.color.theme].rgb,sub_border.color.tint||0)}if(y.tint)sub_border.color.tint=y.tint;if(y.rgb)sub_border.color.rgb=y.rgb;if(y.auto)sub_border.color.auto=y.auto;break;case"<name/>":case"</name>":break;default:break}})}function parse_numFmts(t,opts){styles.NumberFmt=[];var k=keys(SSF._table);for(var i=0;i<k.length;++i)styles.NumberFmt[k[i]]=SSF._table[k[i]];var m=t[0].match(tagregex);for(i=0;i<m.length;++i){var y=parsexmltag(m[i]);switch(y[0]){case"<numFmts":case"</numFmts>":case"<numFmts/>":case"<numFmts>":break;case"<numFmt":{var f=unescapexml(utf8read(y.formatCode)),j=parseInt(y.numFmtId,10);styles.NumberFmt[j]=f;if(j>0)SSF.load(f,j)}break;default:if(opts.WTF)throw"unrecognized "+y[0]+" in numFmts"}}}function write_numFmts(NF,opts){var o=["<numFmts>"];[[5,8],[23,26],[41,44],[63,66],[164,392]].forEach(function(r){for(var i=r[0];i<=r[1];++i)if(NF[i]!==undefined)o[o.length]=writextag("numFmt",null,{numFmtId:i,formatCode:escapexml(NF[i])})});if(o.length===1)return"";o[o.length]="</numFmts>";o[0]=writextag("numFmts",null,{count:o.length-2}).replace("/>",">");return o.join("")}function parse_cellXfs(t,opts){styles.CellXf=[];var xf;t[0].match(tagregex).forEach(function(x){var y=parsexmltag(x);switch(y[0]){case"<cellXfs":case"<cellXfs>":case"<cellXfs/>":case"</cellXfs>":break;case"<xf":xf=y;delete xf[0];delete y[0];if(xf.numFmtId)xf.numFmtId=parseInt(xf.numFmtId,10);if(xf.fillId)xf.fillId=parseInt(xf.fillId,10);styles.CellXf.push(xf);break;case"</xf>":break;case"<alignment":case"<alignment/>":var alignment={};if(y.vertical){alignment.vertical=y.vertical}if(y.horizontal){alignment.horizontal=y.horizontal}if(y.textRotation!=undefined){alignment.textRotation=y.textRotation}if(y.indent){alignment.indent=y.indent}if(y.wrapText){alignment.wrapText=y.wrapText}xf.alignment=alignment;break;case"<protection":case"</protection>":case"<protection/>":break;case"<extLst":case"</extLst>":break;case"<ext":break;default:if(opts.WTF)throw"unrecognized "+y[0]+" in cellXfs"}})}function write_cellXfs(cellXfs){var o=[];o[o.length]=writextag("cellXfs",null);cellXfs.forEach(function(c){o[o.length]=writextag("xf",null,c)});o[o.length]="</cellXfs>";if(o.length===2)return"";o[0]=writextag("cellXfs",null,{count:o.length-2}).replace("/>",">");return o.join("")}var parse_sty_xml=function make_pstyx(){var numFmtRegex=/<numFmts([^>]*)>.*<\/numFmts>/;var cellXfRegex=/<cellXfs([^>]*)>.*<\/cellXfs>/;var fillsRegex=/<fills([^>]*)>.*<\/fills>/;var bordersRegex=/<borders([^>]*)>.*<\/borders>/;return function parse_sty_xml(data,opts){var t;if(t=data.match(numFmtRegex))parse_numFmts(t,opts);if(t=data.match(/<fonts([^>]*)>.*<\/fonts>/))parse_fonts(t,opts);if(t=data.match(fillsRegex))parse_fills(t,opts);if(t=data.match(bordersRegex))parse_borders(t,opts);if(t=data.match(cellXfRegex))parse_cellXfs(t,opts);return styles}}();var STYLES_XML_ROOT=writextag("styleSheet",null,{xmlns:XMLNS.main[0],"xmlns:vt":XMLNS.vt});RELS.STY="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles";function write_sty_xml(wb,opts){if(typeof style_builder!="undefined"&&typeof"require"!="undefined"){return style_builder.toXml()}var o=[XML_HEADER,STYLES_XML_ROOT],w;if((w=write_numFmts(wb.SSF))!=null)o[o.length]=w;o[o.length]='<fonts count="1"><font><sz val="12"/><color theme="1"/><name val="Calibri"/><family val="2"/><scheme val="minor"/></font></fonts>';o[o.length]='<fills count="2"><fill><patternFill patternType="none"/></fill><fill><patternFill patternType="gray125"/></fill></fills>';o[o.length]='<borders count="1"><border><left/><right/><top/><bottom/><diagonal/></border></borders>';o[o.length]='<cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0"/></cellStyleXfs>';if(w=write_cellXfs(opts.cellXfs))o[o.length]=w;o[o.length]='<cellStyles count="1"><cellStyle name="Normal" xfId="0" builtinId="0"/></cellStyles>';o[o.length]='<dxfs count="0"/>';o[o.length]='<tableStyles count="0" defaultTableStyle="TableStyleMedium9" defaultPivotStyle="PivotStyleMedium4"/>';if(o.length>2){o[o.length]="</styleSheet>";o[1]=o[1].replace("/>",">")}return o.join("")}function parse_BrtFmt(data,length){var ifmt=data.read_shift(2);var stFmtCode=parse_XLWideString(data,length-2);return[ifmt,stFmtCode]}function parse_BrtFont(data,length){var out={flags:{}};out.dyHeight=data.read_shift(2);out.grbit=parse_FontFlags(data,2);out.bls=data.read_shift(2);out.sss=data.read_shift(2);out.uls=data.read_shift(1);out.bFamily=data.read_shift(1);out.bCharSet=data.read_shift(1);data.l++;out.brtColor=parse_BrtColor(data,8);out.bFontScheme=data.read_shift(1);out.name=parse_XLWideString(data,length-21);out.flags.Bold=out.bls===700;out.flags.Italic=out.grbit.fItalic;out.flags.Strikeout=out.grbit.fStrikeout;out.flags.Outline=out.grbit.fOutline;out.flags.Shadow=out.grbit.fShadow;out.flags.Condense=out.grbit.fCondense;out.flags.Extend=out.grbit.fExtend;out.flags.Sub=out.sss&2;out.flags.Sup=out.sss&1;return out}function parse_BrtXF(data,length){var ixfeParent=data.read_shift(2);var ifmt=data.read_shift(2);parsenoop(data,length-4);return{ixfe:ixfeParent,ifmt:ifmt}}function parse_sty_bin(data,opts){styles.NumberFmt=[];for(var y in SSF._table)styles.NumberFmt[y]=SSF._table[y];styles.CellXf=[];var state="";var pass=false;recordhopper(data,function hopper_sty(val,R,RT){switch(R.n){case"BrtFmt":styles.NumberFmt[val[0]]=val[1];SSF.load(val[1],val[0]);break;case"BrtFont":break;case"BrtKnownFonts":break;case"BrtFill":break;case"BrtBorder":break;case"BrtXF":if(state==="CELLXFS"){styles.CellXf.push(val)}break;case"BrtStyle":break;case"BrtDXF":break;case"BrtMRUColor":break;case"BrtIndexedColor":break;case"BrtBeginStyleSheet":break;case"BrtEndStyleSheet":break;case"BrtBeginTableStyle":break;case"BrtTableStyleElement":break;case"BrtEndTableStyle":break;case"BrtBeginFmts":state="FMTS";break;case"BrtEndFmts":state="";break;case"BrtBeginFonts":state="FONTS";break;case"BrtEndFonts":state="";break;case"BrtACBegin":state="ACFONTS";break;case"BrtACEnd":state="";break;case"BrtBeginFills":state="FILLS";break;case"BrtEndFills":state="";break;case"BrtBeginBorders":state="BORDERS";break;case"BrtEndBorders":state="";break;case"BrtBeginCellStyleXFs":state="CELLSTYLEXFS";break;case"BrtEndCellStyleXFs":state="";break;case"BrtBeginCellXFs":state="CELLXFS";break;case"BrtEndCellXFs":state="";break;case"BrtBeginStyles":state="STYLES";break;case"BrtEndStyles":state="";break;case"BrtBeginDXFs":state="DXFS";break;case"BrtEndDXFs":state="";break;case"BrtBeginTableStyles":state="TABLESTYLES";break;case"BrtEndTableStyles":state="";break;case"BrtBeginColorPalette":state="COLORPALETTE";break;case"BrtEndColorPalette":state="";break;case"BrtBeginIndexedColors":state="INDEXEDCOLORS";break;case"BrtEndIndexedColors":state="";break;case"BrtBeginMRUColors":state="MRUCOLORS";break;case"BrtEndMRUColors":state="";break;case"BrtFRTBegin":pass=true;break;case"BrtFRTEnd":pass=false;break;case"BrtBeginStyleSheetExt14":break;case"BrtBeginSlicerStyles":break;case"BrtEndSlicerStyles":break;case"BrtBeginTimelineStylesheetExt15":break;case"BrtEndTimelineStylesheetExt15":break;case"BrtBeginTimelineStyles":break;case"BrtEndTimelineStyles":break;case"BrtEndStyleSheetExt14":break;default:if(!pass||opts.WTF)throw new Error("Unexpected record "+RT+" "+R.n)}});return styles}function write_sty_bin(data,opts){var ba=buf_array();write_record(ba,"BrtBeginStyleSheet");write_record(ba,"BrtEndStyleSheet");return ba.end()}RELS.THEME="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme";function parse_clrScheme(t,opts){themes.themeElements.clrScheme=[];var color={};t[0].match(tagregex).forEach(function(x){var y=parsexmltag(x);switch(y[0]){case"<a:clrScheme":case"</a:clrScheme>":break;case"<a:srgbClr":color.rgb=y.val;break;case"<a:sysClr":color.rgb=y.lastClr;break;case"<a:dk1>":case"</a:dk1>":case"<a:dk2>":case"</a:dk2>":case"<a:lt1>":case"</a:lt1>":case"<a:lt2>":case"</a:lt2>":case"<a:accent1>":case"</a:accent1>":case"<a:accent2>":case"</a:accent2>":case"<a:accent3>":case"</a:accent3>":case"<a:accent4>":case"</a:accent4>":case"<a:accent5>":case"</a:accent5>":case"<a:accent6>":case"</a:accent6>":case"<a:hlink>":case"</a:hlink>":case"<a:folHlink>":case"</a:folHlink>":if(y[0][1]==="/"){themes.themeElements.clrScheme.push(color);color={}}else{color.name=y[0].substring(3,y[0].length-1)}break;default:if(opts.WTF)throw"unrecognized "+y[0]+" in clrScheme"}})}function parse_fontScheme(t,opts){}function parse_fmtScheme(t,opts){}var clrsregex=/<a:clrScheme([^>]*)>[^\u2603]*<\/a:clrScheme>/;var fntsregex=/<a:fontScheme([^>]*)>[^\u2603]*<\/a:fontScheme>/;var fmtsregex=/<a:fmtScheme([^>]*)>[^\u2603]*<\/a:fmtScheme>/;function parse_themeElements(data,opts){themes.themeElements={};var t;[["clrScheme",clrsregex,parse_clrScheme],["fontScheme",fntsregex,parse_fontScheme],["fmtScheme",fmtsregex,parse_fmtScheme]].forEach(function(m){if(!(t=data.match(m[1])))throw m[0]+" not found in themeElements";m[2](t,opts)})}var themeltregex=/<a:themeElements([^>]*)>[^\u2603]*<\/a:themeElements>/;function parse_theme_xml(data,opts){if(!data||data.length===0)return themes;var t;if(!(t=data.match(themeltregex)))throw"themeElements not found in theme";parse_themeElements(t[0],opts);return themes}function write_theme(opts){if(opts.themeXml){return opts.themeXml}return'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n<a:theme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="Office Theme"><a:themeElements><a:clrScheme name="Office"><a:dk1><a:sysClr val="windowText" lastClr="000000"/></a:dk1><a:lt1><a:sysClr val="window" lastClr="FFFFFF"/></a:lt1><a:dk2><a:srgbClr val="1F497D"/></a:dk2><a:lt2><a:srgbClr val="EEECE1"/></a:lt2><a:accent1><a:srgbClr val="4F81BD"/></a:accent1><a:accent2><a:srgbClr val="C0504D"/></a:accent2><a:accent3><a:srgbClr val="9BBB59"/></a:accent3><a:accent4><a:srgbClr val="8064A2"/></a:accent4><a:accent5><a:srgbClr val="4BACC6"/></a:accent5><a:accent6><a:srgbClr val="F79646"/></a:accent6><a:hlink><a:srgbClr val="0000FF"/></a:hlink><a:folHlink><a:srgbClr val="800080"/></a:folHlink></a:clrScheme><a:fontScheme name="Office"><a:majorFont><a:latin typeface="Cambria"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Jpan" typeface="锛汲 锛般偞銈枫儍銈�"/><a:font script="Hang" typeface="毵戩潃 瓿犽敃"/><a:font script="Hans" typeface="瀹嬩綋"/><a:font script="Hant" typeface="鏂扮窗鏄庨珨"/><a:font script="Arab" typeface="Times New Roman"/><a:font script="Hebr" typeface="Times New Roman"/><a:font script="Thai" typeface="Tahoma"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="MoolBoran"/><a:font script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Times New Roman"/><a:font script="Uigh" typeface="Microsoft Uighur"/><a:font script="Geor" typeface="Sylfaen"/></a:majorFont><a:minorFont><a:latin typeface="Calibri"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Jpan" typeface="锛汲 锛般偞銈枫儍銈�"/><a:font script="Hang" typeface="毵戩潃 瓿犽敃"/><a:font script="Hans" typeface="瀹嬩綋"/><a:font script="Hant" typeface="鏂扮窗鏄庨珨"/><a:font script="Arab" typeface="Arial"/><a:font script="Hebr" typeface="Arial"/><a:font script="Thai" typeface="Tahoma"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="DaunPenh"/><a:font script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Arial"/><a:font script="Uigh" typeface="Microsoft Uighur"/><a:font script="Geor" typeface="Sylfaen"/></a:minorFont></a:fontScheme><a:fmtScheme name="Office"><a:fillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="50000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="35000"><a:schemeClr val="phClr"><a:tint val="37000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:tint val="15000"/><a:satMod val="350000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="16200000" scaled="1"/></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="100000"/><a:shade val="100000"/><a:satMod val="130000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:tint val="50000"/><a:shade val="100000"/><a:satMod val="350000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="16200000" scaled="0"/></a:gradFill></a:fillStyleLst><a:lnStyleLst><a:ln w="9525" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"><a:shade val="95000"/><a:satMod val="105000"/></a:schemeClr></a:solidFill><a:prstDash val="solid"/></a:ln><a:ln w="25400" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln><a:ln w="38100" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln></a:lnStyleLst><a:effectStyleLst><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="20000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="38000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw></a:effectLst><a:scene3d><a:camera prst="orthographicFront"><a:rot lat="0" lon="0" rev="0"/></a:camera><a:lightRig rig="threePt" dir="t"><a:rot lat="0" lon="0" rev="1200000"/></a:lightRig></a:scene3d><a:sp3d><a:bevelT w="63500" h="25400"/></a:sp3d></a:effectStyle></a:effectStyleLst><a:bgFillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="40000"/><a:satMod val="350000"/></a:schemeClr></a:gs><a:gs pos="40000"><a:schemeClr val="phClr"><a:tint val="45000"/><a:shade val="99000"/><a:satMod val="350000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="20000"/><a:satMod val="255000"/></a:schemeClr></a:gs></a:gsLst><a:path path="circle"><a:fillToRect l="50000" t="-80000" r="50000" b="180000"/></a:path></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="80000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="30000"/><a:satMod val="200000"/></a:schemeClr></a:gs></a:gsLst><a:path path="circle"><a:fillToRect l="50000" t="50000" r="50000" b="50000"/></a:path></a:gradFill></a:bgFillStyleLst></a:fmtScheme></a:themeElements><a:objectDefaults><a:spDef><a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx="1"><a:schemeClr val="accent1"/></a:lnRef><a:fillRef idx="3"><a:schemeClr val="accent1"/></a:fillRef><a:effectRef idx="2"><a:schemeClr val="accent1"/></a:effectRef><a:fontRef idx="minor"><a:schemeClr val="lt1"/></a:fontRef></a:style></a:spDef><a:lnDef><a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx="2"><a:schemeClr val="accent1"/></a:lnRef><a:fillRef idx="0"><a:schemeClr val="accent1"/></a:fillRef><a:effectRef idx="1"><a:schemeClr val="accent1"/></a:effectRef><a:fontRef idx="minor"><a:schemeClr val="tx1"/></a:fontRef></a:style></a:lnDef></a:objectDefaults><a:extraClrSchemeLst/></a:theme>'}function parse_Theme(blob,length){var dwThemeVersion=blob.read_shift(4);if(dwThemeVersion===124226)return;blob.l+=length-4}function parse_ColorTheme(blob,length){return blob.read_shift(4)}function parse_FullColorExt(blob,length){var o={};o.xclrType=blob.read_shift(2);o.nTintShade=blob.read_shift(2);switch(o.xclrType){case 0:blob.l+=4;break;case 1:o.xclrValue=parse_IcvXF(blob,4);break;case 2:o.xclrValue=parse_LongRGBA(blob,4);break;case 3:o.xclrValue=parse_ColorTheme(blob,4);break;case 4:blob.l+=4;break}blob.l+=8;return o}function parse_IcvXF(blob,length){return parsenoop(blob,length)}function parse_XFExtGradient(blob,length){return parsenoop(blob,length)}function parse_ExtProp(blob,length){var extType=blob.read_shift(2);var cb=blob.read_shift(2);var o=[extType];switch(extType){case 4:case 5:case 7:case 8:case 9:case 10:case 11:case 13:o[1]=parse_FullColorExt(blob,cb);break;case 6:o[1]=parse_XFExtGradient(blob,cb);break;case 14:case 15:o[1]=blob.read_shift(cb===5?1:2);break;default:throw new Error("Unrecognized ExtProp type: "+extType+" "+cb)}return o}function parse_XFExt(blob,length){var end=blob.l+length;blob.l+=2;var ixfe=blob.read_shift(2);blob.l+=2;var cexts=blob.read_shift(2);var ext=[];while(cexts-- >0)ext.push(parse_ExtProp(blob,end-blob.l));return{ixfe:ixfe,ext:ext}}function update_xfext(xf,xfext){xfext.forEach(function(xfe){switch(xfe[0]){case 4:break;case 5:break;case 7:case 8:case 9:case 10:break;case 13:break;case 14:break;default:throw"bafuq"+xfe[0].toString(16)}})}function parse_cc_xml(data,opts){var d=[];var l=0,i=1;(data.match(tagregex)||[]).forEach(function(x){var y=parsexmltag(x);switch(y[0]){case"<?xml":break;case"<calcChain":case"<calcChain>":case"</calcChain>":break;case"<c":delete y[0];if(y.i)i=y.i;else y.i=i;d.push(y);break}});return d}function write_cc_xml(data,opts){}function parse_BrtCalcChainItem$(data,length){var out={};out.i=data.read_shift(4);var cell={};cell.r=data.read_shift(4);cell.c=data.read_shift(4);out.r=encode_cell(cell);var flags=data.read_shift(1);if(flags&2)out.l="1";if(flags&8)out.a="1";return out}function parse_cc_bin(data,opts){var out=[];var pass=false;recordhopper(data,function hopper_cc(val,R,RT){switch(R.n){case"BrtCalcChainItem$":out.push(val);break;case"BrtBeginCalcChain$":break;case"BrtEndCalcChain$":break;default:if(!pass||opts.WTF)throw new Error("Unexpected record "+RT+" "+R.n)}});return out}function write_cc_bin(data,opts){}function parse_comments(zip,dirComments,sheets,sheetRels,opts){for(var i=0;i!=dirComments.length;++i){var canonicalpath=dirComments[i];var comments=parse_cmnt(getzipdata(zip,canonicalpath.replace(/^\//,""),true),canonicalpath,opts);if(!comments||!comments.length)continue;var sheetNames=keys(sheets);for(var j=0;j!=sheetNames.length;++j){var sheetName=sheetNames[j];var rels=sheetRels[sheetName];if(rels){var rel=rels[canonicalpath];if(rel)insertCommentsIntoSheet(sheetName,sheets[sheetName],comments)}}}}function insertCommentsIntoSheet(sheetName,sheet,comments){comments.forEach(function(comment){var cell=sheet[comment.ref];if(!cell){cell={};sheet[comment.ref]=cell;var range=safe_decode_range(sheet["!ref"]||"BDWGO1000001:A1");var thisCell=decode_cell(comment.ref);if(range.s.r>thisCell.r)range.s.r=thisCell.r;if(range.e.r<thisCell.r)range.e.r=thisCell.r;if(range.s.c>thisCell.c)range.s.c=thisCell.c;if(range.e.c<thisCell.c)range.e.c=thisCell.c;var encoded=encode_range(range);if(encoded!==sheet["!ref"])sheet["!ref"]=encoded}if(!cell.c)cell.c=[];var o={a:comment.author,t:comment.t,r:comment.r};if(comment.h)o.h=comment.h;cell.c.push(o)})}function parse_comments_xml(data,opts){if(data.match(/<(?:\w+:)?comments *\/>/))return[];var authors=[];var commentList=[];data.match(/<(?:\w+:)?authors>([^\u2603]*)<\/(?:\w+:)?authors>/)[1].split(/<\/\w*:?author>/).forEach(function(x){if(x===""||x.trim()==="")return;authors.push(x.match(/<(?:\w+:)?author[^>]*>(.*)/)[1])});(data.match(/<(?:\w+:)?commentList>([^\u2603]*)<\/(?:\w+:)?commentList>/)||["",""])[1].split(/<\/\w*:?comment>/).forEach(function(x,index){if(x===""||x.trim()==="")return;var y=parsexmltag(x.match(/<(?:\w+:)?comment[^>]*>/)[0]);var comment={author:y.authorId&&authors[y.authorId]?authors[y.authorId]:undefined,ref:y.ref,guid:y.guid};var cell=decode_cell(y.ref);if(opts.sheetRows&&opts.sheetRows<=cell.r)return;var textMatch=x.match(/<text>([^\u2603]*)<\/text>/);if(!textMatch||!textMatch[1])return;var rt=parse_si(textMatch[1]);comment.r=rt.r;comment.t=rt.t;if(opts.cellHTML)comment.h=rt.h;commentList.push(comment)});return commentList}function write_comments_xml(data,opts){}function parse_BrtBeginComment(data,length){var out={};out.iauthor=data.read_shift(4);var rfx=parse_UncheckedRfX(data,16);out.rfx=rfx.s;out.ref=encode_cell(rfx.s);data.l+=16;return out}var parse_BrtCommentAuthor=parse_XLWideString;var parse_BrtCommentText=parse_RichStr;function parse_comments_bin(data,opts){var out=[];var authors=[];var c={};var pass=false;recordhopper(data,function hopper_cmnt(val,R,RT){switch(R.n){case"BrtCommentAuthor":authors.push(val);break;case"BrtBeginComment":c=val;break;case"BrtCommentText":c.t=val.t;c.h=val.h;c.r=val.r;break;case"BrtEndComment":c.author=authors[c.iauthor];delete c.iauthor;if(opts.sheetRows&&opts.sheetRows<=c.rfx.r)break;delete c.rfx;out.push(c);break;case"BrtBeginComments":break;case"BrtEndComments":break;case"BrtBeginCommentAuthors":break;case"BrtEndCommentAuthors":break;case"BrtBeginCommentList":break;case"BrtEndCommentList":break;default:if(!pass||opts.WTF)throw new Error("Unexpected record "+RT+" "+R.n)}});return out}function write_comments_bin(data,opts){}var rc_to_a1=function(){var rcregex=/(^|[^A-Za-z])R(\[?)(-?\d+|)\]?C(\[?)(-?\d+|)\]?/g;var rcbase;function rcfunc($$,$1,$2,$3,$4,$5){var R=$3.length>0?parseInt($3,10)|0:0,C=$5.length>0?parseInt($5,10)|0:0;if(C<0&&$4.length===0)C=0;if($4.length>0)C+=rcbase.c;if($2.length>0)R+=rcbase.r;return $1+encode_col(C)+encode_row(R)}return function rc_to_a1(fstr,base){rcbase=base;return fstr.replace(rcregex,rcfunc)}}();function parseread(l){return function(blob,length){blob.l+=l;return}}function parseread1(blob,length){blob.l+=1;return}function parse_ColRelU(blob,length){var c=blob.read_shift(2);return[c&16383,c>>14&1,c>>15&1]}function parse_RgceArea(blob,length){var r=blob.read_shift(2),R=blob.read_shift(2);var c=parse_ColRelU(blob,2);var C=parse_ColRelU(blob,2);return{s:{r:r,c:c[0],cRel:c[1],rRel:c[2]},e:{r:R,c:C[0],cRel:C[1],rRel:C[2]}}}function parse_RgceAreaRel(blob,length){var r=blob.read_shift(2),R=blob.read_shift(2);var c=parse_ColRelU(blob,2);var C=parse_ColRelU(blob,2);return{s:{r:r,c:c[0],cRel:c[1],rRel:c[2]},e:{r:R,c:C[0],cRel:C[1],rRel:C[2]}}}function parse_RgceLoc(blob,length){var r=blob.read_shift(2);var c=parse_ColRelU(blob,2);return{r:r,c:c[0],cRel:c[1],rRel:c[2]}}function parse_RgceLocRel(blob,length){var r=blob.read_shift(2);var cl=blob.read_shift(2);
+var cRel=(cl&32768)>>15,rRel=(cl&16384)>>14;cl&=16383;if(cRel!==0)while(cl>=256)cl-=256;return{r:r,c:cl,cRel:cRel,rRel:rRel}}function parse_PtgArea(blob,length){var type=(blob[blob.l++]&96)>>5;var area=parse_RgceArea(blob,8);return[type,area]}function parse_PtgArea3d(blob,length){var type=(blob[blob.l++]&96)>>5;var ixti=blob.read_shift(2);var area=parse_RgceArea(blob,8);return[type,ixti,area]}function parse_PtgAreaErr(blob,length){var type=(blob[blob.l++]&96)>>5;blob.l+=8;return[type]}function parse_PtgAreaErr3d(blob,length){var type=(blob[blob.l++]&96)>>5;var ixti=blob.read_shift(2);blob.l+=8;return[type,ixti]}function parse_PtgAreaN(blob,length){var type=(blob[blob.l++]&96)>>5;var area=parse_RgceAreaRel(blob,8);return[type,area]}function parse_PtgArray(blob,length){var type=(blob[blob.l++]&96)>>5;blob.l+=7;return[type]}function parse_PtgAttrBaxcel(blob,length){var bitSemi=blob[blob.l+1]&1;var bitBaxcel=1;blob.l+=4;return[bitSemi,bitBaxcel]}function parse_PtgAttrChoose(blob,length){blob.l+=2;var offset=blob.read_shift(2);var o=[];for(var i=0;i<=offset;++i)o.push(blob.read_shift(2));return o}function parse_PtgAttrGoto(blob,length){var bitGoto=blob[blob.l+1]&255?1:0;blob.l+=2;return[bitGoto,blob.read_shift(2)]}function parse_PtgAttrIf(blob,length){var bitIf=blob[blob.l+1]&255?1:0;blob.l+=2;return[bitIf,blob.read_shift(2)]}function parse_PtgAttrSemi(blob,length){var bitSemi=blob[blob.l+1]&255?1:0;blob.l+=4;return[bitSemi]}function parse_PtgAttrSpaceType(blob,length){var type=blob.read_shift(1),cch=blob.read_shift(1);return[type,cch]}function parse_PtgAttrSpace(blob,length){blob.read_shift(2);return parse_PtgAttrSpaceType(blob,2)}function parse_PtgAttrSpaceSemi(blob,length){blob.read_shift(2);return parse_PtgAttrSpaceType(blob,2)}function parse_PtgRef(blob,length){var ptg=blob[blob.l]&31;var type=(blob[blob.l]&96)>>5;blob.l+=1;var loc=parse_RgceLoc(blob,4);return[type,loc]}function parse_PtgRefN(blob,length){var ptg=blob[blob.l]&31;var type=(blob[blob.l]&96)>>5;blob.l+=1;var loc=parse_RgceLocRel(blob,4);return[type,loc]}function parse_PtgRef3d(blob,length){var ptg=blob[blob.l]&31;var type=(blob[blob.l]&96)>>5;blob.l+=1;var ixti=blob.read_shift(2);var loc=parse_RgceLoc(blob,4);return[type,ixti,loc]}function parse_PtgFunc(blob,length){var ptg=blob[blob.l]&31;var type=(blob[blob.l]&96)>>5;blob.l+=1;var iftab=blob.read_shift(2);return[FtabArgc[iftab],Ftab[iftab]]}function parse_PtgFuncVar(blob,length){blob.l++;var cparams=blob.read_shift(1),tab=parsetab(blob);return[cparams,(tab[0]===0?Ftab:Cetab)[tab[1]]]}function parsetab(blob,length){return[blob[blob.l+1]>>7,blob.read_shift(2)&32767]}var parse_PtgAttrSum=parseread(4);var parse_PtgConcat=parseread1;function parse_PtgExp(blob,length){blob.l++;var row=blob.read_shift(2);var col=blob.read_shift(2);return[row,col]}function parse_PtgErr(blob,length){blob.l++;return BErr[blob.read_shift(1)]}function parse_PtgInt(blob,length){blob.l++;return blob.read_shift(2)}function parse_PtgBool(blob,length){blob.l++;return blob.read_shift(1)!==0}function parse_PtgNum(blob,length){blob.l++;return parse_Xnum(blob,8)}function parse_PtgStr(blob,length){blob.l++;return parse_ShortXLUnicodeString(blob)}function parse_SerAr(blob){var val=[];switch(val[0]=blob.read_shift(1)){case 4:val[1]=parsebool(blob,1)?"TRUE":"FALSE";blob.l+=7;break;case 16:val[1]=BErr[blob[blob.l]];blob.l+=8;break;case 0:blob.l+=8;break;case 1:val[1]=parse_Xnum(blob,8);break;case 2:val[1]=parse_XLUnicodeString(blob);break}return val}function parse_PtgExtraMem(blob,cce){var count=blob.read_shift(2);var out=[];for(var i=0;i!=count;++i)out.push(parse_Ref8U(blob,8));return out}function parse_PtgExtraArray(blob){var cols=1+blob.read_shift(1);var rows=1+blob.read_shift(2);for(var i=0,o=[];i!=rows&&(o[i]=[]);++i)for(var j=0;j!=cols;++j)o[i][j]=parse_SerAr(blob);return o}function parse_PtgName(blob,length){var type=blob.read_shift(1)>>>5&3;var nameindex=blob.read_shift(4);return[type,0,nameindex]}function parse_PtgNameX(blob,length){var type=blob.read_shift(1)>>>5&3;var ixti=blob.read_shift(2);var nameindex=blob.read_shift(4);return[type,ixti,nameindex]}function parse_PtgMemArea(blob,length){var type=blob.read_shift(1)>>>5&3;blob.l+=4;var cce=blob.read_shift(2);return[type,cce]}function parse_PtgMemFunc(blob,length){var type=blob.read_shift(1)>>>5&3;var cce=blob.read_shift(2);return[type,cce]}function parse_PtgRefErr(blob,length){var type=blob.read_shift(1)>>>5&3;blob.l+=4;return[type]}var parse_PtgAdd=parseread1;var parse_PtgDiv=parseread1;var parse_PtgEq=parseread1;var parse_PtgGe=parseread1;var parse_PtgGt=parseread1;var parse_PtgIsect=parseread1;var parse_PtgLe=parseread1;var parse_PtgLt=parseread1;var parse_PtgMissArg=parseread1;var parse_PtgMul=parseread1;var parse_PtgNe=parseread1;var parse_PtgParen=parseread1;var parse_PtgPercent=parseread1;var parse_PtgPower=parseread1;var parse_PtgRange=parseread1;var parse_PtgSub=parseread1;var parse_PtgUminus=parseread1;var parse_PtgUnion=parseread1;var parse_PtgUplus=parseread1;var parse_PtgMemErr=parsenoop;var parse_PtgMemNoMem=parsenoop;var parse_PtgRefErr3d=parsenoop;var parse_PtgTbl=parsenoop;var PtgTypes={1:{n:"PtgExp",f:parse_PtgExp},2:{n:"PtgTbl",f:parse_PtgTbl},3:{n:"PtgAdd",f:parse_PtgAdd},4:{n:"PtgSub",f:parse_PtgSub},5:{n:"PtgMul",f:parse_PtgMul},6:{n:"PtgDiv",f:parse_PtgDiv},7:{n:"PtgPower",f:parse_PtgPower},8:{n:"PtgConcat",f:parse_PtgConcat},9:{n:"PtgLt",f:parse_PtgLt},10:{n:"PtgLe",f:parse_PtgLe},11:{n:"PtgEq",f:parse_PtgEq},12:{n:"PtgGe",f:parse_PtgGe},13:{n:"PtgGt",f:parse_PtgGt},14:{n:"PtgNe",f:parse_PtgNe},15:{n:"PtgIsect",f:parse_PtgIsect},16:{n:"PtgUnion",f:parse_PtgUnion},17:{n:"PtgRange",f:parse_PtgRange},18:{n:"PtgUplus",f:parse_PtgUplus},19:{n:"PtgUminus",f:parse_PtgUminus},20:{n:"PtgPercent",f:parse_PtgPercent},21:{n:"PtgParen",f:parse_PtgParen},22:{n:"PtgMissArg",f:parse_PtgMissArg},23:{n:"PtgStr",f:parse_PtgStr},28:{n:"PtgErr",f:parse_PtgErr},29:{n:"PtgBool",f:parse_PtgBool},30:{n:"PtgInt",f:parse_PtgInt},31:{n:"PtgNum",f:parse_PtgNum},32:{n:"PtgArray",f:parse_PtgArray},33:{n:"PtgFunc",f:parse_PtgFunc},34:{n:"PtgFuncVar",f:parse_PtgFuncVar},35:{n:"PtgName",f:parse_PtgName},36:{n:"PtgRef",f:parse_PtgRef},37:{n:"PtgArea",f:parse_PtgArea},38:{n:"PtgMemArea",f:parse_PtgMemArea},39:{n:"PtgMemErr",f:parse_PtgMemErr},40:{n:"PtgMemNoMem",f:parse_PtgMemNoMem},41:{n:"PtgMemFunc",f:parse_PtgMemFunc},42:{n:"PtgRefErr",f:parse_PtgRefErr},43:{n:"PtgAreaErr",f:parse_PtgAreaErr},44:{n:"PtgRefN",f:parse_PtgRefN},45:{n:"PtgAreaN",f:parse_PtgAreaN},57:{n:"PtgNameX",f:parse_PtgNameX},58:{n:"PtgRef3d",f:parse_PtgRef3d},59:{n:"PtgArea3d",f:parse_PtgArea3d},60:{n:"PtgRefErr3d",f:parse_PtgRefErr3d},61:{n:"PtgAreaErr3d",f:parse_PtgAreaErr3d},255:{}};var PtgDupes={64:32,96:32,65:33,97:33,66:34,98:34,67:35,99:35,68:36,100:36,69:37,101:37,70:38,102:38,71:39,103:39,72:40,104:40,73:41,105:41,74:42,106:42,75:43,107:43,76:44,108:44,77:45,109:45,89:57,121:57,90:58,122:58,91:59,123:59,92:60,124:60,93:61,125:61};(function(){for(var y in PtgDupes)PtgTypes[y]=PtgTypes[PtgDupes[y]]})();var Ptg18={};var Ptg19={1:{n:"PtgAttrSemi",f:parse_PtgAttrSemi},2:{n:"PtgAttrIf",f:parse_PtgAttrIf},4:{n:"PtgAttrChoose",f:parse_PtgAttrChoose},8:{n:"PtgAttrGoto",f:parse_PtgAttrGoto},16:{n:"PtgAttrSum",f:parse_PtgAttrSum},32:{n:"PtgAttrBaxcel",f:parse_PtgAttrBaxcel},64:{n:"PtgAttrSpace",f:parse_PtgAttrSpace},65:{n:"PtgAttrSpaceSemi",f:parse_PtgAttrSpaceSemi},255:{}};function parse_Formula(blob,length,opts){var cell=parse_XLSCell(blob,6);var val=parse_FormulaValue(blob,8);var flags=blob.read_shift(1);blob.read_shift(1);var chn=blob.read_shift(4);var cbf="";if(opts.biff===5)blob.l+=length-20;else cbf=parse_XLSCellParsedFormula(blob,length-20,opts);return{cell:cell,val:val[0],formula:cbf,shared:flags>>3&1,tt:val[1]}}function parse_FormulaValue(blob){var b;if(__readUInt16LE(blob,blob.l+6)!==65535)return[parse_Xnum(blob),"n"];switch(blob[blob.l]){case 0:blob.l+=8;return["String","s"];case 1:b=blob[blob.l+2]===1;blob.l+=8;return[b,"b"];case 2:b=blob[blob.l+2];blob.l+=8;return[b,"e"];case 3:blob.l+=8;return["","s"]}}function parse_RgbExtra(blob,length,rgce,opts){if(opts.biff<8)return parsenoop(blob,length);var target=blob.l+length;var o=[];for(var i=0;i!==rgce.length;++i){switch(rgce[i][0]){case"PtgArray":rgce[i][1]=parse_PtgExtraArray(blob);o.push(rgce[i][1]);break;case"PtgMemArea":rgce[i][2]=parse_PtgExtraMem(blob,rgce[i][1]);o.push(rgce[i][2]);break;default:break}}length=target-blob.l;if(length!==0)o.push(parsenoop(blob,length));return o}function parse_NameParsedFormula(blob,length,opts,cce){var target=blob.l+length;var rgce=parse_Rgce(blob,cce);var rgcb;if(target!==blob.l)rgcb=parse_RgbExtra(blob,target-blob.l,rgce,opts);return[rgce,rgcb]}function parse_XLSCellParsedFormula(blob,length,opts){var target=blob.l+length;var rgcb,cce=blob.read_shift(2);if(cce==65535)return[[],parsenoop(blob,length-2)];var rgce=parse_Rgce(blob,cce);if(length!==cce+2)rgcb=parse_RgbExtra(blob,length-cce-2,rgce,opts);return[rgce,rgcb]}function parse_SharedParsedFormula(blob,length,opts){var target=blob.l+length;var rgcb,cce=blob.read_shift(2);var rgce=parse_Rgce(blob,cce);if(cce==65535)return[[],parsenoop(blob,length-2)];if(length!==cce+2)rgcb=parse_RgbExtra(blob,target-cce-2,rgce,opts);return[rgce,rgcb]}function parse_ArrayParsedFormula(blob,length,opts,ref){var target=blob.l+length;var rgcb,cce=blob.read_shift(2);if(cce==65535)return[[],parsenoop(blob,length-2)];var rgce=parse_Rgce(blob,cce);if(length!==cce+2)rgcb=parse_RgbExtra(blob,target-cce-2,rgce,opts);return[rgce,rgcb]}function parse_Rgce(blob,length){var target=blob.l+length;var R,id,ptgs=[];while(target!=blob.l){length=target-blob.l;id=blob[blob.l];R=PtgTypes[id];if(id===24||id===25){id=blob[blob.l+1];R=(id===24?Ptg18:Ptg19)[id]}if(!R||!R.f){ptgs.push(parsenoop(blob,length))}else{ptgs.push([R.n,R.f(blob,length)])}}return ptgs}function mapper(x){return x.map(function f2(y){return y[1]}).join(",")}function stringify_formula(formula,range,cell,supbooks,opts){if(opts!==undefined&&opts.biff===5)return"BIFF5??";var _range=range!==undefined?range:{s:{c:0,r:0}};var stack=[],e1,e2,type,c,ixti,nameidx,r;if(!formula[0]||!formula[0][0])return"";for(var ff=0,fflen=formula[0].length;ff<fflen;++ff){var f=formula[0][ff];switch(f[0]){case"PtgUminus":stack.push("-"+stack.pop());break;case"PtgUplus":stack.push("+"+stack.pop());break;case"PtgPercent":stack.push(stack.pop()+"%");break;case"PtgAdd":e1=stack.pop();e2=stack.pop();stack.push(e2+"+"+e1);break;case"PtgSub":e1=stack.pop();e2=stack.pop();stack.push(e2+"-"+e1);break;case"PtgMul":e1=stack.pop();e2=stack.pop();stack.push(e2+"*"+e1);break;case"PtgDiv":e1=stack.pop();e2=stack.pop();stack.push(e2+"/"+e1);break;case"PtgPower":e1=stack.pop();e2=stack.pop();stack.push(e2+"^"+e1);break;case"PtgConcat":e1=stack.pop();e2=stack.pop();stack.push(e2+"&"+e1);break;case"PtgLt":e1=stack.pop();e2=stack.pop();stack.push(e2+"<"+e1);break;case"PtgLe":e1=stack.pop();e2=stack.pop();stack.push(e2+"<="+e1);break;case"PtgEq":e1=stack.pop();e2=stack.pop();stack.push(e2+"="+e1);break;case"PtgGe":e1=stack.pop();e2=stack.pop();stack.push(e2+">="+e1);break;case"PtgGt":e1=stack.pop();e2=stack.pop();stack.push(e2+">"+e1);break;case"PtgNe":e1=stack.pop();e2=stack.pop();stack.push(e2+"<>"+e1);break;case"PtgIsect":e1=stack.pop();e2=stack.pop();stack.push(e2+" "+e1);break;case"PtgUnion":e1=stack.pop();e2=stack.pop();stack.push(e2+","+e1);break;case"PtgRange":break;case"PtgAttrChoose":break;case"PtgAttrGoto":break;case"PtgAttrIf":break;case"PtgRef":type=f[1][0];c=shift_cell_xls(decode_cell(encode_cell(f[1][1])),_range);stack.push(encode_cell(c));break;case"PtgRefN":type=f[1][0];c=shift_cell_xls(decode_cell(encode_cell(f[1][1])),cell);stack.push(encode_cell(c));break;case"PtgRef3d":type=f[1][0];ixti=f[1][1];c=shift_cell_xls(f[1][2],_range);stack.push(supbooks[1][ixti+1]+"!"+encode_cell(c));break;case"PtgFunc":case"PtgFuncVar":var argc=f[1][0],func=f[1][1];if(!argc)argc=0;var args=stack.slice(-argc);stack.length-=argc;if(func==="User")func=args.shift();stack.push(func+"("+args.join(",")+")");break;case"PtgBool":stack.push(f[1]?"TRUE":"FALSE");break;case"PtgInt":stack.push(f[1]);break;case"PtgNum":stack.push(String(f[1]));break;case"PtgStr":stack.push('"'+f[1]+'"');break;case"PtgErr":stack.push(f[1]);break;case"PtgArea":type=f[1][0];r=shift_range_xls(f[1][1],_range);stack.push(encode_range(r));break;case"PtgArea3d":type=f[1][0];ixti=f[1][1];r=f[1][2];stack.push(supbooks[1][ixti+1]+"!"+encode_range(r));break;case"PtgAttrSum":stack.push("SUM("+stack.pop()+")");break;case"PtgAttrSemi":break;case"PtgName":nameidx=f[1][2];var lbl=supbooks[0][nameidx];var name=lbl.Name;if(name in XLSXFutureFunctions)name=XLSXFutureFunctions[name];stack.push(name);break;case"PtgNameX":var bookidx=f[1][1];nameidx=f[1][2];var externbook;if(supbooks[bookidx+1])externbook=supbooks[bookidx+1][nameidx];else if(supbooks[bookidx-1])externbook=supbooks[bookidx-1][nameidx];if(!externbook)externbook={body:"??NAMEX??"};stack.push(externbook.body);break;case"PtgParen":stack.push("("+stack.pop()+")");break;case"PtgRefErr":stack.push("#REF!");break;case"PtgExp":c={c:f[1][1],r:f[1][0]};var q={c:cell.c,r:cell.r};if(supbooks.sharedf[encode_cell(c)]){var parsedf=supbooks.sharedf[encode_cell(c)];stack.push(stringify_formula(parsedf,_range,q,supbooks,opts))}else{var fnd=false;for(e1=0;e1!=supbooks.arrayf.length;++e1){e2=supbooks.arrayf[e1];if(c.c<e2[0].s.c||c.c>e2[0].e.c)continue;if(c.r<e2[0].s.r||c.r>e2[0].e.r)continue;stack.push(stringify_formula(e2[1],_range,q,supbooks,opts))}if(!fnd)stack.push(f[1])}break;case"PtgArray":stack.push("{"+f[1].map(mapper).join(";")+"}");break;case"PtgMemArea":break;case"PtgAttrSpace":break;case"PtgTbl":break;case"PtgMemErr":break;case"PtgMissArg":stack.push("");break;case"PtgAreaErr":break;case"PtgAreaN":stack.push("");break;case"PtgRefErr3d":break;case"PtgMemFunc":break;default:throw"Unrecognized Formula Token: "+f}}return stack[0]}function parse_XLSBCellParsedFormula(data,length){var cce=data.read_shift(4);return parsenoop(data,length-4)}var PtgDataType={1:"REFERENCE",2:"VALUE",3:"ARRAY"};var Cetab={0:"BEEP",1:"OPEN",2:"OPEN.LINKS",3:"CLOSE.ALL",4:"SAVE",5:"SAVE.AS",6:"FILE.DELETE",7:"PAGE.SETUP",8:"PRINT",9:"PRINTER.SETUP",10:"QUIT",11:"NEW.WINDOW",12:"ARRANGE.ALL",13:"WINDOW.SIZE",14:"WINDOW.MOVE",15:"FULL",16:"CLOSE",17:"RUN",22:"SET.PRINT.AREA",23:"SET.PRINT.TITLES",24:"SET.PAGE.BREAK",25:"REMOVE.PAGE.BREAK",26:"FONT",27:"DISPLAY",28:"PROTECT.DOCUMENT",29:"PRECISION",30:"A1.R1C1",31:"CALCULATE.NOW",32:"CALCULATION",34:"DATA.FIND",35:"EXTRACT",36:"DATA.DELETE",37:"SET.DATABASE",38:"SET.CRITERIA",39:"SORT",40:"DATA.SERIES",41:"TABLE",42:"FORMAT.NUMBER",43:"ALIGNMENT",44:"STYLE",45:"BORDER",46:"CELL.PROTECTION",47:"COLUMN.WIDTH",48:"UNDO",49:"CUT",50:"COPY",51:"PASTE",52:"CLEAR",53:"PASTE.SPECIAL",54:"EDIT.DELETE",55:"INSERT",56:"FILL.RIGHT",57:"FILL.DOWN",61:"DEFINE.NAME",62:"CREATE.NAMES",63:"FORMULA.GOTO",64:"FORMULA.FIND",65:"SELECT.LAST.CELL",66:"SHOW.ACTIVE.CELL",67:"GALLERY.AREA",68:"GALLERY.BAR",69:"GALLERY.COLUMN",70:"GALLERY.LINE",71:"GALLERY.PIE",72:"GALLERY.SCATTER",73:"COMBINATION",74:"PREFERRED",75:"ADD.OVERLAY",76:"GRIDLINES",77:"SET.PREFERRED",78:"AXES",79:"LEGEND",80:"ATTACH.TEXT",81:"ADD.ARROW",82:"SELECT.CHART",83:"SELECT.PLOT.AREA",84:"PATTERNS",85:"MAIN.CHART",86:"OVERLAY",87:"SCALE",88:"FORMAT.LEGEND",89:"FORMAT.TEXT",90:"EDIT.REPEAT",91:"PARSE",92:"JUSTIFY",93:"HIDE",94:"UNHIDE",95:"WORKSPACE",96:"FORMULA",97:"FORMULA.FILL",98:"FORMULA.ARRAY",99:"DATA.FIND.NEXT",100:"DATA.FIND.PREV",101:"FORMULA.FIND.NEXT",102:"FORMULA.FIND.PREV",103:"ACTIVATE",104:"ACTIVATE.NEXT",105:"ACTIVATE.PREV",106:"UNLOCKED.NEXT",107:"UNLOCKED.PREV",108:"COPY.PICTURE",109:"SELECT",110:"DELETE.NAME",111:"DELETE.FORMAT",112:"VLINE",113:"HLINE",114:"VPAGE",115:"HPAGE",116:"VSCROLL",117:"HSCROLL",118:"ALERT",119:"NEW",120:"CANCEL.COPY",121:"SHOW.CLIPBOARD",122:"MESSAGE",124:"PASTE.LINK",125:"APP.ACTIVATE",126:"DELETE.ARROW",127:"ROW.HEIGHT",128:"FORMAT.MOVE",129:"FORMAT.SIZE",130:"FORMULA.REPLACE",131:"SEND.KEYS",132:"SELECT.SPECIAL",133:"APPLY.NAMES",134:"REPLACE.FONT",135:"FREEZE.PANES",136:"SHOW.INFO",137:"SPLIT",138:"ON.WINDOW",139:"ON.DATA",140:"DISABLE.INPUT",142:"OUTLINE",143:"LIST.NAMES",144:"FILE.CLOSE",145:"SAVE.WORKBOOK",146:"DATA.FORM",147:"COPY.CHART",148:"ON.TIME",149:"WAIT",150:"FORMAT.FONT",151:"FILL.UP",152:"FILL.LEFT",153:"DELETE.OVERLAY",155:"SHORT.MENUS",159:"SET.UPDATE.STATUS",161:"COLOR.PALETTE",162:"DELETE.STYLE",163:"WINDOW.RESTORE",164:"WINDOW.MAXIMIZE",166:"CHANGE.LINK",167:"CALCULATE.DOCUMENT",168:"ON.KEY",169:"APP.RESTORE",170:"APP.MOVE",171:"APP.SIZE",172:"APP.MINIMIZE",173:"APP.MAXIMIZE",174:"BRING.TO.FRONT",175:"SEND.TO.BACK",185:"MAIN.CHART.TYPE",186:"OVERLAY.CHART.TYPE",187:"SELECT.END",188:"OPEN.MAIL",189:"SEND.MAIL",190:"STANDARD.FONT",191:"CONSOLIDATE",192:"SORT.SPECIAL",193:"GALLERY.3D.AREA",194:"GALLERY.3D.COLUMN",195:"GALLERY.3D.LINE",196:"GALLERY.3D.PIE",197:"VIEW.3D",198:"GOAL.SEEK",199:"WORKGROUP",200:"FILL.GROUP",201:"UPDATE.LINK",202:"PROMOTE",203:"DEMOTE",204:"SHOW.DETAIL",206:"UNGROUP",207:"OBJECT.PROPERTIES",208:"SAVE.NEW.OBJECT",209:"SHARE",210:"SHARE.NAME",211:"DUPLICATE",212:"APPLY.STYLE",213:"ASSIGN.TO.OBJECT",214:"OBJECT.PROTECTION",215:"HIDE.OBJECT",216:"SET.EXTRACT",217:"CREATE.PUBLISHER",218:"SUBSCRIBE.TO",219:"ATTRIBUTES",220:"SHOW.TOOLBAR",222:"PRINT.PREVIEW",223:"EDIT.COLOR",224:"SHOW.LEVELS",225:"FORMAT.MAIN",226:"FORMAT.OVERLAY",227:"ON.RECALC",228:"EDIT.SERIES",229:"DEFINE.STYLE",240:"LINE.PRINT",243:"ENTER.DATA",249:"GALLERY.RADAR",250:"MERGE.STYLES",251:"EDITION.OPTIONS",252:"PASTE.PICTURE",253:"PASTE.PICTURE.LINK",254:"SPELLING",256:"ZOOM",259:"INSERT.OBJECT",260:"WINDOW.MINIMIZE",265:"SOUND.NOTE",266:"SOUND.PLAY",267:"FORMAT.SHAPE",268:"EXTEND.POLYGON",269:"FORMAT.AUTO",272:"GALLERY.3D.BAR",273:"GALLERY.3D.SURFACE",274:"FILL.AUTO",276:"CUSTOMIZE.TOOLBAR",277:"ADD.TOOL",278:"EDIT.OBJECT",279:"ON.DOUBLECLICK",280:"ON.ENTRY",281:"WORKBOOK.ADD",282:"WORKBOOK.MOVE",283:"WORKBOOK.COPY",284:"WORKBOOK.OPTIONS",285:"SAVE.WORKSPACE",288:"CHART.WIZARD",289:"DELETE.TOOL",290:"MOVE.TOOL",291:"WORKBOOK.SELECT",292:"WORKBOOK.ACTIVATE",293:"ASSIGN.TO.TOOL",295:"COPY.TOOL",296:"RESET.TOOL",297:"CONSTRAIN.NUMERIC",298:"PASTE.TOOL",302:"WORKBOOK.NEW",305:"SCENARIO.CELLS",306:"SCENARIO.DELETE",307:"SCENARIO.ADD",308:"SCENARIO.EDIT",309:"SCENARIO.SHOW",310:"SCENARIO.SHOW.NEXT",311:"SCENARIO.SUMMARY",312:"PIVOT.TABLE.WIZARD",313:"PIVOT.FIELD.PROPERTIES",314:"PIVOT.FIELD",315:"PIVOT.ITEM",316:"PIVOT.ADD.FIELDS",318:"OPTIONS.CALCULATION",319:"OPTIONS.EDIT",320:"OPTIONS.VIEW",321:"ADDIN.MANAGER",322:"MENU.EDITOR",323:"ATTACH.TOOLBARS",324:"VBAActivate",325:"OPTIONS.CHART",328:"VBA.INSERT.FILE",330:"VBA.PROCEDURE.DEFINITION",336:"ROUTING.SLIP",338:"ROUTE.DOCUMENT",339:"MAIL.LOGON",342:"INSERT.PICTURE",343:"EDIT.TOOL",344:"GALLERY.DOUGHNUT",350:"CHART.TREND",352:"PIVOT.ITEM.PROPERTIES",354:"WORKBOOK.INSERT",355:"OPTIONS.TRANSITION",356:"OPTIONS.GENERAL",370:"FILTER.ADVANCED",373:"MAIL.ADD.MAILER",374:"MAIL.DELETE.MAILER",375:"MAIL.REPLY",376:"MAIL.REPLY.ALL",377:"MAIL.FORWARD",378:"MAIL.NEXT.LETTER",379:"DATA.LABEL",380:"INSERT.TITLE",381:"FONT.PROPERTIES",382:"MACRO.OPTIONS",383:"WORKBOOK.HIDE",384:"WORKBOOK.UNHIDE",385:"WORKBOOK.DELETE",386:"WORKBOOK.NAME",388:"GALLERY.CUSTOM",390:"ADD.CHART.AUTOFORMAT",391:"DELETE.CHART.AUTOFORMAT",392:"CHART.ADD.DATA",393:"AUTO.OUTLINE",394:"TAB.ORDER",395:"SHOW.DIALOG",396:"SELECT.ALL",397:"UNGROUP.SHEETS",398:"SUBTOTAL.CREATE",399:"SUBTOTAL.REMOVE",400:"RENAME.OBJECT",412:"WORKBOOK.SCROLL",413:"WORKBOOK.NEXT",414:"WORKBOOK.PREV",415:"WORKBOOK.TAB.SPLIT",416:"FULL.SCREEN",417:"WORKBOOK.PROTECT",420:"SCROLLBAR.PROPERTIES",421:"PIVOT.SHOW.PAGES",422:"TEXT.TO.COLUMNS",423:"FORMAT.CHARTTYPE",424:"LINK.FORMAT",425:"TRACER.DISPLAY",430:"TRACER.NAVIGATE",431:"TRACER.CLEAR",432:"TRACER.ERROR",433:"PIVOT.FIELD.GROUP",434:"PIVOT.FIELD.UNGROUP",435:"CHECKBOX.PROPERTIES",436:"LABEL.PROPERTIES",437:"LISTBOX.PROPERTIES",438:"EDITBOX.PROPERTIES",439:"PIVOT.REFRESH",440:"LINK.COMBO",441:"OPEN.TEXT",442:"HIDE.DIALOG",443:"SET.DIALOG.FOCUS",444:"ENABLE.OBJECT",445:"PUSHBUTTON.PROPERTIES",446:"SET.DIALOG.DEFAULT",447:"FILTER",448:"FILTER.SHOW.ALL",449:"CLEAR.OUTLINE",450:"FUNCTION.WIZARD",451:"ADD.LIST.ITEM",452:"SET.LIST.ITEM",453:"REMOVE.LIST.ITEM",454:"SELECT.LIST.ITEM",455:"SET.CONTROL.VALUE",456:"SAVE.COPY.AS",458:"OPTIONS.LISTS.ADD",459:"OPTIONS.LISTS.DELETE",460:"SERIES.AXES",461:"SERIES.X",462:"SERIES.Y",463:"ERRORBAR.X",464:"ERRORBAR.Y",465:"FORMAT.CHART",466:"SERIES.ORDER",467:"MAIL.LOGOFF",468:"CLEAR.ROUTING.SLIP",469:"APP.ACTIVATE.MICROSOFT",470:"MAIL.EDIT.MAILER",471:"ON.SHEET",472:"STANDARD.WIDTH",473:"SCENARIO.MERGE",474:"SUMMARY.INFO",475:"FIND.FILE",476:"ACTIVE.CELL.FONT",477:"ENABLE.TIPWIZARD",478:"VBA.MAKE.ADDIN",480:"INSERTDATATABLE",481:"WORKGROUP.OPTIONS",482:"MAIL.SEND.MAILER",485:"AUTOCORRECT",489:"POST.DOCUMENT",491:"PICKLIST",493:"VIEW.SHOW",494:"VIEW.DEFINE",495:"VIEW.DELETE",509:"SHEET.BACKGROUND",510:"INSERT.MAP.OBJECT",511:"OPTIONS.MENONO",517:"MSOCHECKS",518:"NORMAL",519:"LAYOUT",520:"RM.PRINT.AREA",521:"CLEAR.PRINT.AREA",522:"ADD.PRINT.AREA",523:"MOVE.BRK",545:"HIDECURR.NOTE",546:"HIDEALL.NOTES",547:"DELETE.NOTE",548:"TRAVERSE.NOTES",549:"ACTIVATE.NOTES",620:"PROTECT.REVISIONS",621:"UNPROTECT.REVISIONS",647:"OPTIONS.ME",653:"WEB.PUBLISH",667:"NEWWEBQUERY",673:"PIVOT.TABLE.CHART",753:"OPTIONS.SAVE",755:"OPTIONS.SPELL",808:"HIDEALL.INKANNOTS"};var Ftab={0:"COUNT",1:"IF",2:"ISNA",3:"ISERROR",4:"SUM",5:"AVERAGE",6:"MIN",7:"MAX",8:"ROW",9:"COLUMN",10:"NA",11:"NPV",12:"STDEV",13:"DOLLAR",14:"FIXED",15:"SIN",16:"COS",17:"TAN",18:"ATAN",19:"PI",20:"SQRT",21:"EXP",22:"LN",23:"LOG10",24:"ABS",25:"INT",26:"SIGN",27:"ROUND",28:"LOOKUP",29:"INDEX",30:"REPT",31:"MID",32:"LEN",33:"VALUE",34:"TRUE",35:"FALSE",36:"AND",37:"OR",38:"NOT",39:"MOD",40:"DCOUNT",41:"DSUM",42:"DAVERAGE",43:"DMIN",44:"DMAX",45:"DSTDEV",46:"VAR",47:"DVAR",48:"TEXT",49:"LINEST",50:"TREND",51:"LOGEST",52:"GROWTH",53:"GOTO",54:"HALT",55:"RETURN",56:"PV",57:"FV",58:"NPER",59:"PMT",60:"RATE",61:"MIRR",62:"IRR",63:"RAND",64:"MATCH",65:"DATE",66:"TIME",67:"DAY",68:"MONTH",69:"YEAR",70:"WEEKDAY",71:"HOUR",72:"MINUTE",73:"SECOND",74:"NOW",75:"AREAS",76:"ROWS",77:"COLUMNS",78:"OFFSET",79:"ABSREF",80:"RELREF",81:"ARGUMENT",82:"SEARCH",83:"TRANSPOSE",84:"ERROR",85:"STEP",86:"TYPE",87:"ECHO",88:"SET.NAME",89:"CALLER",90:"DEREF",91:"WINDOWS",92:"SERIES",93:"DOCUMENTS",94:"ACTIVE.CELL",95:"SELECTION",96:"RESULT",97:"ATAN2",98:"ASIN",99:"ACOS",100:"CHOOSE",101:"HLOOKUP",102:"VLOOKUP",103:"LINKS",104:"INPUT",105:"ISREF",106:"GET.FORMULA",107:"GET.NAME",108:"SET.VALUE",109:"LOG",110:"EXEC",111:"CHAR",112:"LOWER",113:"UPPER",114:"PROPER",115:"LEFT",116:"RIGHT",117:"EXACT",118:"TRIM",119:"REPLACE",120:"SUBSTITUTE",121:"CODE",122:"NAMES",123:"DIRECTORY",124:"FIND",125:"CELL",126:"ISERR",127:"ISTEXT",128:"ISNUMBER",129:"ISBLANK",130:"T",131:"N",132:"FOPEN",133:"FCLOSE",134:"FSIZE",135:"FREADLN",136:"FREAD",137:"FWRITELN",138:"FWRITE",139:"FPOS",140:"DATEVALUE",141:"TIMEVALUE",142:"SLN",143:"SYD",144:"DDB",145:"GET.DEF",146:"REFTEXT",147:"TEXTREF",148:"INDIRECT",149:"REGISTER",150:"CALL",151:"ADD.BAR",152:"ADD.MENU",153:"ADD.COMMAND",154:"ENABLE.COMMAND",155:"CHECK.COMMAND",156:"RENAME.COMMAND",157:"SHOW.BAR",158:"DELETE.MENU",159:"DELETE.COMMAND",160:"GET.CHART.ITEM",161:"DIALOG.BOX",162:"CLEAN",163:"MDETERM",164:"MINVERSE",165:"MMULT",166:"FILES",167:"IPMT",168:"PPMT",169:"COUNTA",170:"CANCEL.KEY",171:"FOR",172:"WHILE",173:"BREAK",174:"NEXT",175:"INITIATE",176:"REQUEST",177:"POKE",178:"EXECUTE",179:"TERMINATE",180:"RESTART",181:"HELP",182:"GET.BAR",183:"PRODUCT",184:"FACT",185:"GET.CELL",186:"GET.WORKSPACE",187:"GET.WINDOW",188:"GET.DOCUMENT",189:"DPRODUCT",190:"ISNONTEXT",191:"GET.NOTE",192:"NOTE",193:"STDEVP",194:"VARP",195:"DSTDEVP",196:"DVARP",197:"TRUNC",198:"ISLOGICAL",199:"DCOUNTA",200:"DELETE.BAR",201:"UNREGISTER",204:"USDOLLAR",205:"FINDB",206:"SEARCHB",207:"REPLACEB",208:"LEFTB",209:"RIGHTB",210:"MIDB",211:"LENB",212:"ROUNDUP",213:"ROUNDDOWN",214:"ASC",215:"DBCS",216:"RANK",219:"ADDRESS",220:"DAYS360",221:"TODAY",222:"VDB",223:"ELSE",224:"ELSE.IF",225:"END.IF",226:"FOR.CELL",227:"MEDIAN",228:"SUMPRODUCT",229:"SINH",230:"COSH",231:"TANH",232:"ASINH",233:"ACOSH",234:"ATANH",235:"DGET",236:"CREATE.OBJECT",237:"VOLATILE",238:"LAST.ERROR",239:"CUSTOM.UNDO",240:"CUSTOM.REPEAT",241:"FORMULA.CONVERT",242:"GET.LINK.INFO",243:"TEXT.BOX",244:"INFO",245:"GROUP",246:"GET.OBJECT",247:"DB",248:"PAUSE",251:"RESUME",252:"FREQUENCY",253:"ADD.TOOLBAR",254:"DELETE.TOOLBAR",255:"User",256:"RESET.TOOLBAR",257:"EVALUATE",258:"GET.TOOLBAR",259:"GET.TOOL",260:"SPELLING.CHECK",261:"ERROR.TYPE",262:"APP.TITLE",263:"WINDOW.TITLE",264:"SAVE.TOOLBAR",265:"ENABLE.TOOL",266:"PRESS.TOOL",267:"REGISTER.ID",268:"GET.WORKBOOK",269:"AVEDEV",270:"BETADIST",271:"GAMMALN",272:"BETAINV",273:"BINOMDIST",274:"CHIDIST",275:"CHIINV",276:"COMBIN",277:"CONFIDENCE",278:"CRITBINOM",279:"EVEN",280:"EXPONDIST",281:"FDIST",282:"FINV",283:"FISHER",284:"FISHERINV",285:"FLOOR",286:"GAMMADIST",287:"GAMMAINV",288:"CEILING",289:"HYPGEOMDIST",290:"LOGNORMDIST",291:"LOGINV",292:"NEGBINOMDIST",293:"NORMDIST",294:"NORMSDIST",295:"NORMINV",296:"NORMSINV",297:"STANDARDIZE",298:"ODD",299:"PERMUT",300:"POISSON",301:"TDIST",302:"WEIBULL",303:"SUMXMY2",304:"SUMX2MY2",305:"SUMX2PY2",306:"CHITEST",307:"CORREL",308:"COVAR",309:"FORECAST",310:"FTEST",311:"INTERCEPT",312:"PEARSON",313:"RSQ",314:"STEYX",315:"SLOPE",316:"TTEST",317:"PROB",318:"DEVSQ",319:"GEOMEAN",320:"HARMEAN",321:"SUMSQ",322:"KURT",323:"SKEW",324:"ZTEST",325:"LARGE",326:"SMALL",327:"QUARTILE",328:"PERCENTILE",329:"PERCENTRANK",330:"MODE",331:"TRIMMEAN",332:"TINV",334:"MOVIE.COMMAND",335:"GET.MOVIE",336:"CONCATENATE",337:"POWER",338:"PIVOT.ADD.DATA",339:"GET.PIVOT.TABLE",340:"GET.PIVOT.FIELD",341:"GET.PIVOT.ITEM",342:"RADIANS",343:"DEGREES",344:"SUBTOTAL",345:"SUMIF",346:"COUNTIF",347:"COUNTBLANK",348:"SCENARIO.GET",349:"OPTIONS.LISTS.GET",350:"ISPMT",351:"DATEDIF",352:"DATESTRING",353:"NUMBERSTRING",354:"ROMAN",355:"OPEN.DIALOG",356:"SAVE.DIALOG",357:"VIEW.GET",358:"GETPIVOTDATA",359:"HYPERLINK",360:"PHONETIC",361:"AVERAGEA",362:"MAXA",363:"MINA",364:"STDEVPA",365:"VARPA",366:"STDEVA",367:"VARA",368:"BAHTTEXT",369:"THAIDAYOFWEEK",370:"THAIDIGIT",371:"THAIMONTHOFYEAR",372:"THAINUMSOUND",373:"THAINUMSTRING",374:"THAISTRINGLENGTH",375:"ISTHAIDIGIT",376:"ROUNDBAHTDOWN",377:"ROUNDBAHTUP",378:"THAIYEAR",379:"RTD"};var FtabArgc={2:1,3:1,15:1,16:1,17:1,18:1,20:1,21:1,22:1,23:1,24:1,25:1,26:1,27:2,30:2,31:3,32:1,33:1,38:1,39:2,40:3,41:3,42:3,43:3,44:3,45:3,47:3,48:2,53:1,61:3,65:3,66:3,67:1,68:1,69:1,71:1,72:1,73:1,75:1,76:1,77:1,79:2,80:2,83:1,86:1,90:1,97:2,98:1,99:1,105:1,111:1,112:1,113:1,114:1,117:2,118:1,119:4,121:1,126:1,127:1,128:1,129:1,130:1,131:1,133:1,134:1,135:1,136:2,137:2,138:2,140:1,141:1,142:3,143:4,162:1,163:1,164:1,165:2,172:1,175:2,176:2,177:3,178:2,179:1,184:1,189:3,190:1,195:3,196:3,198:1,199:3,201:1,207:4,210:3,211:1,212:2,213:2,214:1,215:1,229:1,230:1,231:1,232:1,233:1,234:1,235:3,244:1,252:2,257:1,261:1,271:1,273:4,274:2,275:2,276:2,277:3,278:3,279:1,280:3,281:3,282:3,283:1,284:1,285:2,286:4,287:3,288:2,289:4,290:3,291:3,292:3,293:4,294:1,295:3,296:1,297:3,298:1,299:2,300:3,301:3,302:4,303:2,304:2,305:2,306:2,307:2,308:2,309:3,310:2,311:2,312:2,313:2,314:2,315:2,316:4,325:2,326:2,327:2,328:2,331:2,332:2,337:2,342:1,343:1,346:2,347:1,350:4,351:3,352:1,353:2,360:1,368:1,369:1,370:1,371:1,372:1,373:1,374:1,375:1,376:1,377:1,378:1,65535:0};var XLSXFutureFunctions={"_xlfn.ACOT":"ACOT","_xlfn.ACOTH":"ACOTH","_xlfn.AGGREGATE":"AGGREGATE","_xlfn.ARABIC":"ARABIC","_xlfn.AVERAGEIF":"AVERAGEIF","_xlfn.AVERAGEIFS":"AVERAGEIFS","_xlfn.BASE":"BASE","_xlfn.BETA.DIST":"BETA.DIST","_xlfn.BETA.INV":"BETA.INV","_xlfn.BINOM.DIST":"BINOM.DIST","_xlfn.BINOM.DIST.RANGE":"BINOM.DIST.RANGE","_xlfn.BINOM.INV":"BINOM.INV","_xlfn.BITAND":"BITAND","_xlfn.BITLSHIFT":"BITLSHIFT","_xlfn.BITOR":"BITOR","_xlfn.BITRSHIFT":"BITRSHIFT","_xlfn.BITXOR":"BITXOR","_xlfn.CEILING.MATH":"CEILING.MATH","_xlfn.CEILING.PRECISE":"CEILING.PRECISE","_xlfn.CHISQ.DIST":"CHISQ.DIST","_xlfn.CHISQ.DIST.RT":"CHISQ.DIST.RT","_xlfn.CHISQ.INV":"CHISQ.INV","_xlfn.CHISQ.INV.RT":"CHISQ.INV.RT","_xlfn.CHISQ.TEST":"CHISQ.TEST","_xlfn.COMBINA":"COMBINA","_xlfn.CONFIDENCE.NORM":"CONFIDENCE.NORM","_xlfn.CONFIDENCE.T":"CONFIDENCE.T","_xlfn.COT":"COT","_xlfn.COTH":"COTH","_xlfn.COUNTIFS":"COUNTIFS","_xlfn.COVARIANCE.P":"COVARIANCE.P","_xlfn.COVARIANCE.S":"COVARIANCE.S","_xlfn.CSC":"CSC","_xlfn.CSCH":"CSCH","_xlfn.DAYS":"DAYS","_xlfn.DECIMAL":"DECIMAL","_xlfn.ECMA.CEILING":"ECMA.CEILING","_xlfn.ERF.PRECISE":"ERF.PRECISE","_xlfn.ERFC.PRECISE":"ERFC.PRECISE","_xlfn.EXPON.DIST":"EXPON.DIST","_xlfn.F.DIST":"F.DIST","_xlfn.F.DIST.RT":"F.DIST.RT","_xlfn.F.INV":"F.INV","_xlfn.F.INV.RT":"F.INV.RT","_xlfn.F.TEST":"F.TEST","_xlfn.FILTERXML":"FILTERXML","_xlfn.FLOOR.MATH":"FLOOR.MATH","_xlfn.FLOOR.PRECISE":"FLOOR.PRECISE","_xlfn.FORMULATEXT":"FORMULATEXT","_xlfn.GAMMA":"GAMMA","_xlfn.GAMMA.DIST":"GAMMA.DIST","_xlfn.GAMMA.INV":"GAMMA.INV","_xlfn.GAMMALN.PRECISE":"GAMMALN.PRECISE","_xlfn.GAUSS":"GAUSS","_xlfn.HYPGEOM.DIST":"HYPGEOM.DIST","_xlfn.IFNA":"IFNA","_xlfn.IFERROR":"IFERROR","_xlfn.IMCOSH":"IMCOSH","_xlfn.IMCOT":"IMCOT","_xlfn.IMCSC":"IMCSC","_xlfn.IMCSCH":"IMCSCH","_xlfn.IMSEC":"IMSEC","_xlfn.IMSECH":"IMSECH","_xlfn.IMSINH":"IMSINH","_xlfn.IMTAN":"IMTAN","_xlfn.ISFORMULA":"ISFORMULA","_xlfn.ISO.CEILING":"ISO.CEILING","_xlfn.ISOWEEKNUM":"ISOWEEKNUM","_xlfn.LOGNORM.DIST":"LOGNORM.DIST","_xlfn.LOGNORM.INV":"LOGNORM.INV","_xlfn.MODE.MULT":"MODE.MULT","_xlfn.MODE.SNGL":"MODE.SNGL","_xlfn.MUNIT":"MUNIT","_xlfn.NEGBINOM.DIST":"NEGBINOM.DIST","_xlfn.NETWORKDAYS.INTL":"NETWORKDAYS.INTL","_xlfn.NIGBINOM":"NIGBINOM","_xlfn.NORM.DIST":"NORM.DIST","_xlfn.NORM.INV":"NORM.INV","_xlfn.NORM.S.DIST":"NORM.S.DIST","_xlfn.NORM.S.INV":"NORM.S.INV","_xlfn.NUMBERVALUE":"NUMBERVALUE","_xlfn.PDURATION":"PDURATION","_xlfn.PERCENTILE.EXC":"PERCENTILE.EXC","_xlfn.PERCENTILE.INC":"PERCENTILE.INC","_xlfn.PERCENTRANK.EXC":"PERCENTRANK.EXC","_xlfn.PERCENTRANK.INC":"PERCENTRANK.INC","_xlfn.PERMUTATIONA":"PERMUTATIONA","_xlfn.PHI":"PHI","_xlfn.POISSON.DIST":"POISSON.DIST","_xlfn.QUARTILE.EXC":"QUARTILE.EXC","_xlfn.QUARTILE.INC":"QUARTILE.INC","_xlfn.QUERYSTRING":"QUERYSTRING","_xlfn.RANK.AVG":"RANK.AVG","_xlfn.RANK.EQ":"RANK.EQ","_xlfn.RRI":"RRI","_xlfn.SEC":"SEC","_xlfn.SECH":"SECH","_xlfn.SHEET":"SHEET","_xlfn.SHEETS":"SHEETS","_xlfn.SKEW.P":"SKEW.P","_xlfn.STDEV.P":"STDEV.P","_xlfn.STDEV.S":"STDEV.S","_xlfn.SUMIFS":"SUMIFS","_xlfn.T.DIST":"T.DIST","_xlfn.T.DIST.2T":"T.DIST.2T","_xlfn.T.DIST.RT":"T.DIST.RT","_xlfn.T.INV":"T.INV","_xlfn.T.INV.2T":"T.INV.2T","_xlfn.T.TEST":"T.TEST","_xlfn.UNICHAR":"UNICHAR","_xlfn.UNICODE":"UNICODE","_xlfn.VAR.P":"VAR.P","_xlfn.VAR.S":"VAR.S","_xlfn.WEBSERVICE":"WEBSERVICE","_xlfn.WEIBULL.DIST":"WEIBULL.DIST","_xlfn.WORKDAY.INTL":"WORKDAY.INTL","_xlfn.XOR":"XOR","_xlfn.Z.TEST":"Z.TEST"};var strs={};var _ssfopts={};RELS.WS="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet";function get_sst_id(sst,str){for(var i=0,len=sst.length;i<len;++i)if(sst[i].t===str){sst.Count++;return i}sst[len]={t:str};sst.Count++;sst.Unique++;return len}function get_cell_style(styles,cell,opts){if(typeof style_builder!="undefined"){if(/^\d+$/.exec(cell.s)){return cell.s}if(cell.s&&cell.s==+cell.s){return cell.s}var s=cell.s||{};if(cell.z)s.numFmt=cell.z;return style_builder.addStyle(s)}else{var z=opts.revssf[cell.z!=null?cell.z:"General"];for(var i=0,len=styles.length;i!=len;++i)if(styles[i].numFmtId===z)return i;styles[len]={numFmtId:z,fontId:0,fillId:0,borderId:0,xfId:0,applyNumberFormat:1};return len}}function get_cell_style_csf(cellXf){if(cellXf){var s={};if(typeof cellXf.numFmtId!=undefined){s.numFmt=SSF._table[cellXf.numFmtId]}if(cellXf.fillId){s.fill=styles.Fills[cellXf.fillId]}if(cellXf.fontId){s.font=styles.Fonts[cellXf.fontId]}if(cellXf.borderId){s.border=styles.Borders[cellXf.borderId];
+}if(cellXf.applyAlignment==1){s.alignment=cellXf.alignment}return JSON.parse(JSON.stringify(s))}return null}function safe_format(p,fmtid,fillid,opts){try{if(p.t==="e")p.w=p.w||BErr[p.v];else if(fmtid===0){if(p.t==="n"){if((p.v|0)===p.v)p.w=SSF._general_int(p.v,_ssfopts);else p.w=SSF._general_num(p.v,_ssfopts)}else if(p.t==="d"){var dd=datenum(p.v);if((dd|0)===dd)p.w=SSF._general_int(dd,_ssfopts);else p.w=SSF._general_num(dd,_ssfopts)}else if(p.v===undefined)return"";else p.w=SSF._general(p.v,_ssfopts)}else if(p.t==="d")p.w=SSF.format(fmtid,datenum(p.v),_ssfopts);else p.w=SSF.format(fmtid,p.v,_ssfopts);if(opts.cellNF)p.z=SSF._table[fmtid]}catch(e){if(opts.WTF)throw e}}function parse_ws_xml_dim(ws,s){var d=safe_decode_range(s);if(d.s.r<=d.e.r&&d.s.c<=d.e.c&&d.s.r>=0&&d.s.c>=0)ws["!ref"]=encode_range(d)}var mergecregex=/<mergeCell ref="[A-Z0-9:]+"\s*\/>/g;var sheetdataregex=/<(?:\w+:)?sheetData>([^\u2603]*)<\/(?:\w+:)?sheetData>/;var hlinkregex=/<hyperlink[^>]*\/>/g;var dimregex=/"(\w*:\w*)"/;var colregex=/<col[^>]*\/>/g;function parse_ws_xml(data,opts,rels){if(!data)return data;var s={};var ridx=data.indexOf("<dimension");if(ridx>0){var ref=data.substr(ridx,50).match(dimregex);if(ref!=null)parse_ws_xml_dim(s,ref[1])}var mergecells=[];if(data.indexOf("</mergeCells>")!==-1){var merges=data.match(mergecregex);for(ridx=0;ridx!=merges.length;++ridx)mergecells[ridx]=safe_decode_range(merges[ridx].substr(merges[ridx].indexOf('"')+1))}var columns=[];if(opts.cellStyles&&data.indexOf("</cols>")!==-1){var cols=data.match(colregex);parse_ws_xml_cols(columns,cols)}var refguess={s:{r:1e6,c:1e6},e:{r:0,c:0}};var mtch=data.match(sheetdataregex);if(mtch)parse_ws_xml_data(mtch[1],s,opts,refguess);if(data.indexOf("</hyperlinks>")!==-1)parse_ws_xml_hlinks(s,data.match(hlinkregex),rels);if(!s["!ref"]&&refguess.e.c>=refguess.s.c&&refguess.e.r>=refguess.s.r)s["!ref"]=encode_range(refguess);if(opts.sheetRows>0&&s["!ref"]){var tmpref=safe_decode_range(s["!ref"]);if(opts.sheetRows<+tmpref.e.r){tmpref.e.r=opts.sheetRows-1;if(tmpref.e.r>refguess.e.r)tmpref.e.r=refguess.e.r;if(tmpref.e.r<tmpref.s.r)tmpref.s.r=tmpref.e.r;if(tmpref.e.c>refguess.e.c)tmpref.e.c=refguess.e.c;if(tmpref.e.c<tmpref.s.c)tmpref.s.c=tmpref.e.c;s["!fullref"]=s["!ref"];s["!ref"]=encode_range(tmpref)}}if(mergecells.length>0)s["!merges"]=mergecells;if(columns.length>0)s["!cols"]=columns;return s}function write_ws_xml_merges(merges){if(merges.length==0)return"";var o='<mergeCells count="'+merges.length+'">';for(var i=0;i!=merges.length;++i)o+='<mergeCell ref="'+encode_range(merges[i])+'"/>';return o+"</mergeCells>"}function write_ws_xml_pagesetup(setup){var pageSetup=writextag("pageSetup",null,{scale:setup.scale||"100",orientation:setup.orientation||"portrait",horizontalDpi:setup.horizontalDpi||"4294967292",verticalDpi:setup.verticalDpi||"4294967292"});return pageSetup}function parse_ws_xml_hlinks(s,data,rels){for(var i=0;i!=data.length;++i){var val=parsexmltag(data[i],true);if(!val.ref)return;var rel=rels?rels["!id"][val.id]:null;if(rel){val.Target=rel.Target;if(val.location)val.Target+="#"+val.location;val.Rel=rel}else{val.Target=val.location;rel={Target:val.location,TargetMode:"Internal"};val.Rel=rel}var rng=safe_decode_range(val.ref);for(var R=rng.s.r;R<=rng.e.r;++R)for(var C=rng.s.c;C<=rng.e.c;++C){var addr=encode_cell({c:C,r:R});if(!s[addr])s[addr]={t:"stub",v:undefined};s[addr].l=val}}}function parse_ws_xml_cols(columns,cols){var seencol=false;for(var coli=0;coli!=cols.length;++coli){var coll=parsexmltag(cols[coli],true);var colm=parseInt(coll.min,10)-1,colM=parseInt(coll.max,10)-1;delete coll.min;delete coll.max;if(!seencol&&coll.width){seencol=true;find_mdw(+coll.width,coll)}if(coll.width){coll.wpx=width2px(+coll.width);coll.wch=px2char(coll.wpx);coll.MDW=MDW}while(colm<=colM)columns[colm++]=coll}}function write_ws_xml_cols(ws,cols){var o=["<cols>"],col,width;for(var i=0;i!=cols.length;++i){if(!(col=cols[i]))continue;var p={min:i+1,max:i+1};width=-1;if(col.wpx)width=px2char(col.wpx);else if(col.wch)width=col.wch;if(width>-1){p.width=char2width(width);p.customWidth=1}o[o.length]=writextag("col",null,p)}o[o.length]="</cols>";return o.join("")}function write_ws_xml_cell(cell,ref,ws,opts,idx,wb){if(cell.v===undefined&&cell.s===undefined)return"";var vv="";var oldt=cell.t,oldv=cell.v;switch(cell.t){case"b":vv=cell.v?"1":"0";break;case"n":vv=""+cell.v;break;case"e":vv=BErr[cell.v];break;case"d":if(opts.cellDates)vv=new Date(cell.v).toISOString();else{cell.t="n";vv=""+(cell.v=datenum(cell.v));if(typeof cell.z==="undefined")cell.z=SSF._table[14]}break;default:vv=cell.v;break}var v=writetag("v",escapexml(vv)),o={r:ref};var os=get_cell_style(opts.cellXfs,cell,opts);if(os!==0)o.s=os;switch(cell.t){case"n":break;case"d":o.t="d";break;case"b":o.t="b";break;case"e":o.t="e";break;default:if(opts.bookSST){v=writetag("v",""+get_sst_id(opts.Strings,cell.v));o.t="s";break}o.t="str";break}if(cell.t!=oldt){cell.t=oldt;cell.v=oldv}return writextag("c",v,o)}var parse_ws_xml_data=function parse_ws_xml_data_factory(){var cellregex=/<(?:\w+:)?c[ >]/,rowregex=/<\/(?:\w+:)?row>/;var rregex=/r=["']([^"']*)["']/,isregex=/<is>([\S\s]*?)<\/is>/;var match_v=matchtag("v"),match_f=matchtag("f");return function parse_ws_xml_data(sdata,s,opts,guess){var ri=0,x="",cells=[],cref=[],idx=0,i=0,cc=0,d="",p;var tag,tagr=0,tagc=0;var sstr;var fmtid=0,fillid=0,do_format=Array.isArray(styles.CellXf),cf;for(var marr=sdata.split(rowregex),mt=0,marrlen=marr.length;mt!=marrlen;++mt){x=marr[mt].trim();var xlen=x.length;if(xlen===0)continue;for(ri=0;ri<xlen;++ri)if(x.charCodeAt(ri)===62)break;++ri;tag=parsexmltag(x.substr(0,ri),true);tagr=typeof tag.r!=="undefined"?parseInt(tag.r,10):tagr+1;tagc=-1;if(opts.sheetRows&&opts.sheetRows<tagr)continue;if(guess.s.r>tagr-1)guess.s.r=tagr-1;if(guess.e.r<tagr-1)guess.e.r=tagr-1;cells=x.substr(ri).split(cellregex);for(ri=typeof tag.r==="undefined"?0:1;ri!=cells.length;++ri){x=cells[ri].trim();if(x.length===0)continue;cref=x.match(rregex);idx=ri;i=0;cc=0;x="<c "+(x.substr(0,1)=="<"?">":"")+x;if(cref!==null&&cref.length===2){idx=0;d=cref[1];for(i=0;i!=d.length;++i){if((cc=d.charCodeAt(i)-64)<1||cc>26)break;idx=26*idx+cc}--idx;tagc=idx}else++tagc;for(i=0;i!=x.length;++i)if(x.charCodeAt(i)===62)break;++i;tag=parsexmltag(x.substr(0,i),true);if(!tag.r)tag.r=utils.encode_cell({r:tagr-1,c:tagc});d=x.substr(i);p={t:""};if((cref=d.match(match_v))!==null&&cref[1]!=="")p.v=unescapexml(cref[1]);if(opts.cellFormula&&(cref=d.match(match_f))!==null)p.f=unescapexml(cref[1]);if(tag.t===undefined&&tag.s===undefined&&p.v===undefined){if(!opts.sheetStubs)continue;p.t="stub"}else p.t=tag.t||"n";if(guess.s.c>idx)guess.s.c=idx;if(guess.e.c<idx)guess.e.c=idx;switch(p.t){case"n":p.v=parseFloat(p.v);if(isNaN(p.v))p.v="";break;case"s":sstr=strs[parseInt(p.v,10)];p.v=sstr.t;p.r=sstr.r;if(opts.cellHTML)p.h=sstr.h;break;case"str":p.t="s";p.v=p.v!=null?utf8read(p.v):"";if(opts.cellHTML)p.h=p.v;break;case"inlineStr":cref=d.match(isregex);p.t="s";if(cref!==null){sstr=parse_si(cref[1]);p.v=sstr.t}else p.v="";break;case"b":p.v=parsexmlbool(p.v);break;case"d":if(!opts.cellDates){p.v=datenum(p.v);p.t="n"}break;case"e":p.w=p.v;p.v=RBErr[p.v];break}fmtid=fillid=0;if(do_format&&tag.s!==undefined){cf=styles.CellXf[tag.s];if(opts.cellStyles){p.s=get_cell_style_csf(cf)}if(cf!=null){if(cf.numFmtId!=null)fmtid=cf.numFmtId;if(opts.cellStyles&&cf.fillId!=null)fillid=cf.fillId}}safe_format(p,fmtid,fillid,opts);s[tag.r]=p}}}}();function write_ws_xml_data(ws,opts,idx,wb){var o=[],r=[],range=safe_decode_range(ws["!ref"]),cell,ref,rr="",cols=[],R,C;for(C=range.s.c;C<=range.e.c;++C)cols[C]=encode_col(C);for(R=range.s.r;R<=range.e.r;++R){r=[];rr=encode_row(R);for(C=range.s.c;C<=range.e.c;++C){ref=cols[C]+rr;if(ws[ref]===undefined)continue;if((cell=write_ws_xml_cell(ws[ref],ref,ws,opts,idx,wb))!=null)r.push(cell)}if(r.length>0)o[o.length]=writextag("row",r.join(""),{r:rr})}return o.join("")}var WS_XML_ROOT=writextag("worksheet",null,{xmlns:XMLNS.main[0],"xmlns:r":XMLNS.r});function write_ws_xml(idx,opts,wb){var o=[XML_HEADER,WS_XML_ROOT];var s=wb.SheetNames[idx],sidx=0,rdata="";var ws=wb.Sheets[s];if(ws===undefined)ws={};var ref=ws["!ref"];if(ref===undefined)ref="A1";o[o.length]=writextag("dimension",null,{ref:ref});var kids=[];if(ws["!freeze"]){var pane="";pane=writextag("pane",null,ws["!freeze"]);kids.push(pane);var selection=writextag("selection",null,{pane:"topLeft"});kids.push(selection);var selection=writextag("selection",null,{pane:"bottomLeft"});kids.push(selection);var selection=writextag("selection",null,{pane:"bottomRight",activeCell:ws["!freeze"],sqref:ws["!freeze"]});kids.push(selection)}var sheetView=writextag("sheetView",kids.join("")||undefined,{showGridLines:opts.showGridLines==false?"0":"1",tabSelected:opts.tabSelected===undefined?"0":opts.tabSelected,workbookViewId:opts.workbookViewId===undefined?"0":opts.workbookViewId});o[o.length]=writextag("sheetViews",sheetView);if(ws["!cols"]!==undefined&&ws["!cols"].length>0)o[o.length]=write_ws_xml_cols(ws,ws["!cols"]);o[sidx=o.length]="<sheetData/>";if(ws["!ref"]!==undefined){rdata=write_ws_xml_data(ws,opts,idx,wb);if(rdata.length>0)o[o.length]=rdata}if(o.length>sidx+1){o[o.length]="</sheetData>";o[sidx]=o[sidx].replace("/>",">")}if(ws["!merges"]!==undefined&&ws["!merges"].length>0)o[o.length]=write_ws_xml_merges(ws["!merges"]);if(ws["!pageSetup"]!==undefined)o[o.length]=write_ws_xml_pagesetup(ws["!pageSetup"]);if(ws["!rowBreaks"]!==undefined)o[o.length]=write_ws_xml_row_breaks(ws["!rowBreaks"]);if(ws["!colBreaks"]!==undefined)o[o.length]=write_ws_xml_col_breaks(ws["!colBreaks"]);if(o.length>2){o[o.length]="</worksheet>";o[1]=o[1].replace("/>",">")}return o.join("")}function write_ws_xml_row_breaks(breaks){var brk=[];for(var i=0;i<breaks.length;i++){var thisBreak=""+breaks[i];var nextBreak=""+(breaks[i+1]||"16383");brk.push(writextag("brk",null,{id:thisBreak,max:nextBreak,man:"1"}))}return writextag("rowBreaks",brk.join(" "),{count:brk.length,manualBreakCount:brk.length})}function write_ws_xml_col_breaks(breaks){var brk=[];for(var i=0;i<breaks.length;i++){var thisBreak=""+breaks[i];var nextBreak=""+(breaks[i+1]||"1048575");brk.push(writextag("brk",null,{id:thisBreak,max:nextBreak,man:"1"}))}return writextag("colBreaks",brk.join(" "),{count:brk.length,manualBreakCount:brk.length})}function parse_BrtRowHdr(data,length){var z=[];z.r=data.read_shift(4);data.l+=length-4;return z}var parse_BrtWsDim=parse_UncheckedRfX;var write_BrtWsDim=write_UncheckedRfX;function parse_BrtWsProp(data,length){var z={};data.l+=19;z.name=parse_XLSBCodeName(data,length-19);return z}function parse_BrtCellBlank(data,length){var cell=parse_XLSBCell(data);return[cell]}function write_BrtCellBlank(cell,val,o){if(o==null)o=new_buf(8);return write_XLSBCell(val,o)}function parse_BrtCellBool(data,length){var cell=parse_XLSBCell(data);var fBool=data.read_shift(1);return[cell,fBool,"b"]}function parse_BrtCellError(data,length){var cell=parse_XLSBCell(data);var fBool=data.read_shift(1);return[cell,fBool,"e"]}function parse_BrtCellIsst(data,length){var cell=parse_XLSBCell(data);var isst=data.read_shift(4);return[cell,isst,"s"]}function parse_BrtCellReal(data,length){var cell=parse_XLSBCell(data);var value=parse_Xnum(data);return[cell,value,"n"]}function parse_BrtCellRk(data,length){var cell=parse_XLSBCell(data);var value=parse_RkNumber(data);return[cell,value,"n"]}function parse_BrtCellSt(data,length){var cell=parse_XLSBCell(data);var value=parse_XLWideString(data);return[cell,value,"str"]}function parse_BrtFmlaBool(data,length,opts){var cell=parse_XLSBCell(data);var value=data.read_shift(1);var o=[cell,value,"b"];if(opts.cellFormula){var formula=parse_XLSBCellParsedFormula(data,length-9);o[3]=""}else data.l+=length-9;return o}function parse_BrtFmlaError(data,length,opts){var cell=parse_XLSBCell(data);var value=data.read_shift(1);var o=[cell,value,"e"];if(opts.cellFormula){var formula=parse_XLSBCellParsedFormula(data,length-9);o[3]=""}else data.l+=length-9;return o}function parse_BrtFmlaNum(data,length,opts){var cell=parse_XLSBCell(data);var value=parse_Xnum(data);var o=[cell,value,"n"];if(opts.cellFormula){var formula=parse_XLSBCellParsedFormula(data,length-16);o[3]=""}else data.l+=length-16;return o}function parse_BrtFmlaString(data,length,opts){var start=data.l;var cell=parse_XLSBCell(data);var value=parse_XLWideString(data);var o=[cell,value,"str"];if(opts.cellFormula){var formula=parse_XLSBCellParsedFormula(data,start+length-data.l)}else data.l=start+length;return o}var parse_BrtMergeCell=parse_UncheckedRfX;function parse_BrtHLink(data,length,opts){var end=data.l+length;var rfx=parse_UncheckedRfX(data,16);var relId=parse_XLNullableWideString(data);var loc=parse_XLWideString(data);var tooltip=parse_XLWideString(data);var display=parse_XLWideString(data);data.l=end;return{rfx:rfx,relId:relId,loc:loc,tooltip:tooltip,display:display}}function parse_ws_bin(data,opts,rels){if(!data)return data;if(!rels)rels={"!id":{}};var s={};var ref;var refguess={s:{r:1e6,c:1e6},e:{r:0,c:0}};var pass=false,end=false;var row,p,cf,R,C,addr,sstr,rr;var mergecells=[];recordhopper(data,function ws_parse(val,R){if(end)return;switch(R.n){case"BrtWsDim":ref=val;break;case"BrtRowHdr":row=val;if(opts.sheetRows&&opts.sheetRows<=row.r)end=true;rr=encode_row(row.r);break;case"BrtFmlaBool":case"BrtFmlaError":case"BrtFmlaNum":case"BrtFmlaString":case"BrtCellBool":case"BrtCellError":case"BrtCellIsst":case"BrtCellReal":case"BrtCellRk":case"BrtCellSt":p={t:val[2]};switch(val[2]){case"n":p.v=val[1];break;case"s":sstr=strs[val[1]];p.v=sstr.t;p.r=sstr.r;break;case"b":p.v=val[1]?true:false;break;case"e":p.v=val[1];p.w=BErr[p.v];break;case"str":p.t="s";p.v=utf8read(val[1]);break}if(opts.cellFormula&&val.length>3)p.f=val[3];if(cf=styles.CellXf[val[0].iStyleRef])safe_format(p,cf.ifmt,null,opts);s[encode_col(C=val[0].c)+rr]=p;if(refguess.s.r>row.r)refguess.s.r=row.r;if(refguess.s.c>C)refguess.s.c=C;if(refguess.e.r<row.r)refguess.e.r=row.r;if(refguess.e.c<C)refguess.e.c=C;break;case"BrtCellBlank":if(!opts.sheetStubs)break;p={t:"s",v:undefined};s[encode_col(C=val[0].c)+rr]=p;if(refguess.s.r>row.r)refguess.s.r=row.r;if(refguess.s.c>C)refguess.s.c=C;if(refguess.e.r<row.r)refguess.e.r=row.r;if(refguess.e.c<C)refguess.e.c=C;break;case"BrtBeginMergeCells":break;case"BrtEndMergeCells":break;case"BrtMergeCell":mergecells.push(val);break;case"BrtHLink":var rel=rels["!id"][val.relId];if(rel){val.Target=rel.Target;if(val.loc)val.Target+="#"+val.loc;val.Rel=rel}for(R=val.rfx.s.r;R<=val.rfx.e.r;++R)for(C=val.rfx.s.c;C<=val.rfx.e.c;++C){addr=encode_cell({c:C,r:R});if(!s[addr])s[addr]={t:"s",v:undefined};s[addr].l=val}break;case"BrtArrFmla":break;case"BrtShrFmla":break;case"BrtBeginSheet":break;case"BrtWsProp":break;case"BrtSheetCalcProp":break;case"BrtBeginWsViews":break;case"BrtBeginWsView":break;case"BrtPane":break;case"BrtSel":break;case"BrtEndWsView":break;case"BrtEndWsViews":break;case"BrtACBegin":break;case"BrtRwDescent":break;case"BrtACEnd":break;case"BrtWsFmtInfoEx14":break;case"BrtWsFmtInfo":break;case"BrtBeginColInfos":break;case"BrtColInfo":break;case"BrtEndColInfos":break;case"BrtBeginSheetData":break;case"BrtEndSheetData":break;case"BrtSheetProtection":break;case"BrtPrintOptions":break;case"BrtMargins":break;case"BrtPageSetup":break;case"BrtFRTBegin":pass=true;break;case"BrtFRTEnd":pass=false;break;case"BrtEndSheet":break;case"BrtDrawing":break;case"BrtLegacyDrawing":break;case"BrtLegacyDrawingHF":break;case"BrtPhoneticInfo":break;case"BrtBeginHeaderFooter":break;case"BrtEndHeaderFooter":break;case"BrtBrk":break;case"BrtBeginRwBrk":break;case"BrtEndRwBrk":break;case"BrtBeginColBrk":break;case"BrtEndColBrk":break;case"BrtBeginUserShViews":break;case"BrtBeginUserShView":break;case"BrtEndUserShView":break;case"BrtEndUserShViews":break;case"BrtBkHim":break;case"BrtBeginOleObjects":break;case"BrtOleObject":break;case"BrtEndOleObjects":break;case"BrtBeginListParts":break;case"BrtListPart":break;case"BrtEndListParts":break;case"BrtBeginSortState":break;case"BrtBeginSortCond":break;case"BrtEndSortCond":break;case"BrtEndSortState":break;case"BrtBeginConditionalFormatting":break;case"BrtEndConditionalFormatting":break;case"BrtBeginCFRule":break;case"BrtEndCFRule":break;case"BrtBeginDVals":break;case"BrtDVal":break;case"BrtEndDVals":break;case"BrtRangeProtection":break;case"BrtBeginDCon":break;case"BrtEndDCon":break;case"BrtBeginDRefs":break;case"BrtDRef":break;case"BrtEndDRefs":break;case"BrtBeginActiveXControls":break;case"BrtActiveX":break;case"BrtEndActiveXControls":break;case"BrtBeginAFilter":break;case"BrtEndAFilter":break;case"BrtBeginFilterColumn":break;case"BrtBeginFilters":break;case"BrtFilter":break;case"BrtEndFilters":break;case"BrtEndFilterColumn":break;case"BrtDynamicFilter":break;case"BrtTop10Filter":break;case"BrtBeginCustomFilters":break;case"BrtCustomFilter":break;case"BrtEndCustomFilters":break;case"BrtBeginSmartTags":break;case"BrtBeginCellSmartTags":break;case"BrtBeginCellSmartTag":break;case"BrtCellSmartTagProperty":break;case"BrtEndCellSmartTag":break;case"BrtEndCellSmartTags":break;case"BrtEndSmartTags":break;case"BrtBeginCellWatches":break;case"BrtCellWatch":break;case"BrtEndCellWatches":break;case"BrtTable":break;case"BrtBeginCellIgnoreECs":break;case"BrtCellIgnoreEC":break;case"BrtEndCellIgnoreECs":break;default:if(!pass||opts.WTF)throw new Error("Unexpected record "+R.n)}},opts);if(!s["!ref"]&&(refguess.s.r<1e6||ref.e.r>0||ref.e.c>0||ref.s.r>0||ref.s.c>0))s["!ref"]=encode_range(ref);if(opts.sheetRows&&s["!ref"]){var tmpref=safe_decode_range(s["!ref"]);if(opts.sheetRows<+tmpref.e.r){tmpref.e.r=opts.sheetRows-1;if(tmpref.e.r>refguess.e.r)tmpref.e.r=refguess.e.r;if(tmpref.e.r<tmpref.s.r)tmpref.s.r=tmpref.e.r;if(tmpref.e.c>refguess.e.c)tmpref.e.c=refguess.e.c;if(tmpref.e.c<tmpref.s.c)tmpref.s.c=tmpref.e.c;s["!fullref"]=s["!ref"];s["!ref"]=encode_range(tmpref)}}if(mergecells.length>0)s["!merges"]=mergecells;return s}function write_ws_bin_cell(ba,cell,R,C,opts){if(cell.v===undefined)return"";var vv="";switch(cell.t){case"b":vv=cell.v?"1":"0";break;case"n":case"e":vv=""+cell.v;break;default:vv=cell.v;break}var o={r:R,c:C};o.s=get_cell_style(opts.cellXfs,cell,opts);switch(cell.t){case"s":case"str":if(opts.bookSST){vv=get_sst_id(opts.Strings,cell.v);o.t="s";break}o.t="str";break;case"n":break;case"b":o.t="b";break;case"e":o.t="e";break}write_record(ba,"BrtCellBlank",write_BrtCellBlank(cell,o))}function write_CELLTABLE(ba,ws,idx,opts,wb){var range=safe_decode_range(ws["!ref"]||"A1"),ref,rr="",cols=[];write_record(ba,"BrtBeginSheetData");for(var R=range.s.r;R<=range.e.r;++R){rr=encode_row(R);for(var C=range.s.c;C<=range.e.c;++C){if(R===range.s.r)cols[C]=encode_col(C);ref=cols[C]+rr;if(!ws[ref])continue;write_ws_bin_cell(ba,ws[ref],R,C,opts)}}write_record(ba,"BrtEndSheetData")}function write_ws_bin(idx,opts,wb){var ba=buf_array();var s=wb.SheetNames[idx],ws=wb.Sheets[s]||{};var r=safe_decode_range(ws["!ref"]||"A1");write_record(ba,"BrtBeginSheet");write_record(ba,"BrtWsDim",write_BrtWsDim(r));write_CELLTABLE(ba,ws,idx,opts,wb);write_record(ba,"BrtEndSheet");return ba.end()}var WBPropsDef=[["allowRefreshQuery","0"],["autoCompressPictures","1"],["backupFile","0"],["checkCompatibility","0"],["codeName",""],["date1904","0"],["dateCompatibility","1"],["filterPrivacy","0"],["hidePivotFieldList","0"],["promptedSolutions","0"],["publishItems","0"],["refreshAllConnections",false],["saveExternalLinkValues","1"],["showBorderUnselectedTables","1"],["showInkAnnotation","1"],["showObjects","all"],["showPivotChartFilter","0"]];var WBViewDef=[["activeTab","0"],["autoFilterDateGrouping","1"],["firstSheet","0"],["minimized","0"],["showHorizontalScroll","1"],["showSheetTabs","1"],["showVerticalScroll","1"],["tabRatio","600"],["visibility","visible"]];var SheetDef=[["state","visible"]];var CalcPrDef=[["calcCompleted","true"],["calcMode","auto"],["calcOnSave","true"],["concurrentCalc","true"],["fullCalcOnLoad","false"],["fullPrecision","true"],["iterate","false"],["iterateCount","100"],["iterateDelta","0.001"],["refMode","A1"]];var CustomWBViewDef=[["autoUpdate","false"],["changesSavedWin","false"],["includeHiddenRowCol","true"],["includePrintSettings","true"],["maximized","false"],["minimized","false"],["onlySync","false"],["personalView","false"],["showComments","commIndicator"],["showFormulaBar","true"],["showHorizontalScroll","true"],["showObjects","all"],["showSheetTabs","true"],["showStatusbar","true"],["showVerticalScroll","true"],["tabRatio","600"],["xWindow","0"],["yWindow","0"]];function push_defaults_array(target,defaults){for(var j=0;j!=target.length;++j){var w=target[j];for(var i=0;i!=defaults.length;++i){var z=defaults[i];if(w[z[0]]==null)w[z[0]]=z[1]}}}function push_defaults(target,defaults){for(var i=0;i!=defaults.length;++i){var z=defaults[i];if(target[z[0]]==null)target[z[0]]=z[1]}}function parse_wb_defaults(wb){push_defaults(wb.WBProps,WBPropsDef);push_defaults(wb.CalcPr,CalcPrDef);push_defaults_array(wb.WBView,WBViewDef);push_defaults_array(wb.Sheets,SheetDef);_ssfopts.date1904=parsexmlbool(wb.WBProps.date1904,"date1904")}var wbnsregex=/<\w+:workbook/;function parse_wb_xml(data,opts){var wb={AppVersion:{},WBProps:{},WBView:[],Sheets:[],CalcPr:{},xmlns:""};var pass=false,xmlns="xmlns";data.match(tagregex).forEach(function xml_wb(x){var y=parsexmltag(x);switch(strip_ns(y[0])){case"<?xml":break;case"<workbook":if(x.match(wbnsregex))xmlns="xmlns"+x.match(/<(\w+):/)[1];wb.xmlns=y[xmlns];break;case"</workbook>":break;case"<fileVersion":delete y[0];wb.AppVersion=y;break;case"<fileVersion/>":break;case"<fileSharing":case"<fileSharing/>":break;case"<workbookPr":delete y[0];wb.WBProps=y;break;case"<workbookPr/>":delete y[0];wb.WBProps=y;break;case"<workbookProtection":break;case"<workbookProtection/>":break;case"<bookViews>":case"</bookViews>":break;case"<workbookView":delete y[0];wb.WBView.push(y);break;case"<sheets>":case"</sheets>":break;case"<sheet":delete y[0];y.name=utf8read(y.name);wb.Sheets.push(y);break;case"<functionGroups":case"<functionGroups/>":break;case"<functionGroup":break;case"<externalReferences":case"</externalReferences>":case"<externalReferences>":break;case"<externalReference":break;case"<definedNames/>":break;case"<definedNames>":case"<definedNames":pass=true;break;case"</definedNames>":pass=false;break;case"<definedName":case"<definedName/>":case"</definedName>":break;case"<calcPr":delete y[0];wb.CalcPr=y;break;case"<calcPr/>":delete y[0];wb.CalcPr=y;break;case"<oleSize":break;case"<customWorkbookViews>":case"</customWorkbookViews>":case"<customWorkbookViews":break;case"<customWorkbookView":case"</customWorkbookView>":break;case"<pivotCaches>":case"</pivotCaches>":case"<pivotCaches":break;case"<pivotCache":break;case"<smartTagPr":case"<smartTagPr/>":break;case"<smartTagTypes":case"<smartTagTypes>":case"</smartTagTypes>":break;case"<smartTagType":break;case"<webPublishing":case"<webPublishing/>":break;case"<fileRecoveryPr":case"<fileRecoveryPr/>":break;case"<webPublishObjects>":case"<webPublishObjects":case"</webPublishObjects>":break;case"<webPublishObject":break;case"<extLst>":case"</extLst>":case"<extLst/>":break;case"<ext":pass=true;break;case"</ext>":pass=false;break;case"<ArchID":break;case"<AlternateContent":pass=true;break;case"</AlternateContent>":pass=false;break;default:if(!pass&&opts.WTF)throw"unrecognized "+y[0]+" in workbook"}});if(XMLNS.main.indexOf(wb.xmlns)===-1)throw new Error("Unknown Namespace: "+wb.xmlns);parse_wb_defaults(wb);return wb}var WB_XML_ROOT=writextag("workbook",null,{xmlns:XMLNS.main[0],"xmlns:r":XMLNS.r});function safe1904(wb){try{return parsexmlbool(wb.Workbook.WBProps.date1904)?"true":"false"}catch(e){return"false"}}function write_wb_xml(wb,opts){var o=[XML_HEADER];o[o.length]=WB_XML_ROOT;o[o.length]=writextag("workbookPr",null,{date1904:safe1904(wb)});o[o.length]="<sheets>";for(var i=0;i!=wb.SheetNames.length;++i)o[o.length]=writextag("sheet",null,{name:wb.SheetNames[i].substr(0,31),sheetId:""+(i+1),"r:id":"rId"+(i+1)});o[o.length]="</sheets>";var hasPrintHeaders=false;for(var i=0;i!=wb.SheetNames.length;++i){var sheetName=wb.SheetNames[i];var sheet=wb.Sheets[sheetName];if(sheet["!printHeader"]){if(sheet["!printHeader"].length!==2){throw"!printHeaders must be an array of length 2: "+sheet["!printHeader"]}hasPrintHeaders=true}}if(hasPrintHeaders){o[o.length]="<definedNames>";for(var i=0;i!=wb.SheetNames.length;++i){var sheetName=wb.SheetNames[i];var sheet=wb.Sheets[sheetName];if(sheet["!printHeader"]||sheet["!printColumns"]){var printHeader=sheet["!printHeader"];var printColumns=sheet["!printColumns"];var range="";if(printColumns)range+="'"+sheetName+"'!"+("$"+printColumns[0]+":$"+printColumns[1]);if(printColumns&&printHeader)range+=",";if(printHeader)range+="'"+sheetName+"'!"+("$"+printHeader[0]+":$"+printHeader[1]);console.log("-----------------------------");console.log(range);o[o.length]=writextag("definedName",range,{name:"_xlnm.Print_Titles",localSheetId:""+i})}}o[o.length]="</definedNames>"}if(o.length>2){o[o.length]="</workbook>";o[1]=o[1].replace("/>",">")}return o.join("")}function parse_BrtBundleSh(data,length){var z={};z.hsState=data.read_shift(4);z.iTabID=data.read_shift(4);z.strRelID=parse_RelID(data,length-8);z.name=parse_XLWideString(data);return z}function write_BrtBundleSh(data,o){if(!o)o=new_buf(127);o.write_shift(4,data.hsState);o.write_shift(4,data.iTabID);write_RelID(data.strRelID,o);write_XLWideString(data.name.substr(0,31),o);return o}function parse_BrtWbProp(data,length){data.read_shift(4);var dwThemeVersion=data.read_shift(4);var strName=length>8?parse_XLWideString(data):"";return[dwThemeVersion,strName]}function write_BrtWbProp(data,o){if(!o)o=new_buf(8);o.write_shift(4,0);o.write_shift(4,0);return o}function parse_BrtFRTArchID$(data,length){var o={};data.read_shift(4);o.ArchID=data.read_shift(4);data.l+=length-8;return o}function parse_wb_bin(data,opts){var wb={AppVersion:{},WBProps:{},WBView:[],Sheets:[],CalcPr:{},xmlns:""};var pass=false,z;recordhopper(data,function hopper_wb(val,R){switch(R.n){case"BrtBundleSh":wb.Sheets.push(val);break;case"BrtBeginBook":break;case"BrtFileVersion":break;case"BrtWbProp":break;case"BrtACBegin":break;case"BrtAbsPath15":break;case"BrtACEnd":break;case"BrtWbFactoid":break;case"BrtBookProtection":break;case"BrtBeginBookViews":break;case"BrtBookView":break;case"BrtEndBookViews":break;case"BrtBeginBundleShs":break;case"BrtEndBundleShs":break;case"BrtBeginFnGroup":break;case"BrtEndFnGroup":break;case"BrtBeginExternals":break;case"BrtSupSelf":break;case"BrtSupBookSrc":break;case"BrtExternSheet":break;case"BrtEndExternals":break;case"BrtName":break;case"BrtCalcProp":break;case"BrtUserBookView":break;case"BrtBeginPivotCacheIDs":break;case"BrtBeginPivotCacheID":break;case"BrtEndPivotCacheID":break;case"BrtEndPivotCacheIDs":break;case"BrtWebOpt":break;case"BrtFileRecover":break;case"BrtFileSharing":break;case"BrtBeginSmartTagTypes":break;case"BrtSmartTagType":break;case"BrtEndSmartTagTypes":break;case"BrtFRTBegin":pass=true;break;case"BrtFRTArchID$":break;case"BrtWorkBookPr15":break;case"BrtFRTEnd":pass=false;break;case"BrtEndBook":break;default:if(!pass||opts.WTF)throw new Error("Unexpected record "+R.n)}});parse_wb_defaults(wb);return wb}function write_BUNDLESHS(ba,wb,opts){write_record(ba,"BrtBeginBundleShs");for(var idx=0;idx!=wb.SheetNames.length;++idx){var d={hsState:0,iTabID:idx+1,strRelID:"rId"+(idx+1),name:wb.SheetNames[idx]};write_record(ba,"BrtBundleSh",write_BrtBundleSh(d))}write_record(ba,"BrtEndBundleShs")}function write_BrtFileVersion(data,o){if(!o)o=new_buf(127);for(var i=0;i!=4;++i)o.write_shift(4,0);write_XLWideString("SheetJS",o);write_XLWideString(XLSX.version,o);write_XLWideString(XLSX.version,o);write_XLWideString("7262",o);o.length=o.l;return o}function write_BOOKVIEWS(ba,wb,opts){write_record(ba,"BrtBeginBookViews");write_record(ba,"BrtEndBookViews")}function write_BrtCalcProp(data,o){if(!o)o=new_buf(26);o.write_shift(4,0);o.write_shift(4,1);o.write_shift(4,0);write_Xnum(0,o);o.write_shift(-4,1023);o.write_shift(1,51);o.write_shift(1,0);return o}function write_BrtFileRecover(data,o){if(!o)o=new_buf(1);o.write_shift(1,0);return o}function write_wb_bin(wb,opts){var ba=buf_array();write_record(ba,"BrtBeginBook");write_record(ba,"BrtFileVersion",write_BrtFileVersion());write_record(ba,"BrtWbProp",write_BrtWbProp());write_BOOKVIEWS(ba,wb,opts);write_BUNDLESHS(ba,wb,opts);write_record(ba,"BrtCalcProp",write_BrtCalcProp());write_record(ba,"BrtFileRecover",write_BrtFileRecover());write_record(ba,"BrtEndBook");return ba.end()}function parse_wb(data,name,opts){return(name.substr(-4)===".bin"?parse_wb_bin:parse_wb_xml)(data,opts)}function parse_ws(data,name,opts,rels){return(name.substr(-4)===".bin"?parse_ws_bin:parse_ws_xml)(data,opts,rels)}function parse_sty(data,name,opts){return(name.substr(-4)===".bin"?parse_sty_bin:parse_sty_xml)(data,opts)}function parse_theme(data,name,opts){return parse_theme_xml(data,opts)}function parse_sst(data,name,opts){return(name.substr(-4)===".bin"?parse_sst_bin:parse_sst_xml)(data,opts)}function parse_cmnt(data,name,opts){return(name.substr(-4)===".bin"?parse_comments_bin:parse_comments_xml)(data,opts)}function parse_cc(data,name,opts){return(name.substr(-4)===".bin"?parse_cc_bin:parse_cc_xml)(data,opts)}function write_wb(wb,name,opts){return(name.substr(-4)===".bin"?write_wb_bin:write_wb_xml)(wb,opts)}function write_ws(data,name,opts,wb){return(name.substr(-4)===".bin"?write_ws_bin:write_ws_xml)(data,opts,wb)}function write_sty(data,name,opts){return(name.substr(-4)===".bin"?write_sty_bin:write_sty_xml)(data,opts)}function write_sst(data,name,opts){return(name.substr(-4)===".bin"?write_sst_bin:write_sst_xml)(data,opts)}var attregexg2=/([\w:]+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:'))/g;var attregex2=/([\w:]+)=((?:")(?:[^"]*)(?:")|(?:')(?:[^']*)(?:'))/;var _chr=function(c){return String.fromCharCode(c)};function xlml_parsexmltag(tag,skip_root){var words=tag.split(/\s+/);var z=[];if(!skip_root)z[0]=words[0];if(words.length===1)return z;var m=tag.match(attregexg2),y,j,w,i;if(m)for(i=0;i!=m.length;++i){y=m[i].match(attregex2);if((j=y[1].indexOf(":"))===-1)z[y[1]]=y[2].substr(1,y[2].length-2);else{if(y[1].substr(0,6)==="xmlns:")w="xmlns"+y[1].substr(6);else w=y[1].substr(j+1);z[w]=y[2].substr(1,y[2].length-2)}}return z}function xlml_parsexmltagobj(tag){var words=tag.split(/\s+/);var z={};if(words.length===1)return z;var m=tag.match(attregexg2),y,j,w,i;if(m)for(i=0;i!=m.length;++i){y=m[i].match(attregex2);if((j=y[1].indexOf(":"))===-1)z[y[1]]=y[2].substr(1,y[2].length-2);else{if(y[1].substr(0,6)==="xmlns:")w="xmlns"+y[1].substr(6);else w=y[1].substr(j+1);z[w]=y[2].substr(1,y[2].length-2)}}return z}function xlml_format(format,value){var fmt=XLMLFormatMap[format]||unescapexml(format);if(fmt==="General")return SSF._general(value);return SSF.format(fmt,value)}function xlml_set_custprop(Custprops,Rn,cp,val){switch((cp[0].match(/dt:dt="([\w.]+)"/)||["",""])[1]){case"boolean":val=parsexmlbool(val);break;case"i2":case"int":val=parseInt(val,10);break;case"r4":case"float":val=parseFloat(val);break;case"date":case"dateTime.tz":val=new Date(val);break;case"i8":case"string":case"fixed":case"uuid":case"bin.base64":break;default:throw"bad custprop:"+cp[0]}Custprops[unescapexml(Rn[3])]=val}function safe_format_xlml(cell,nf,o){try{if(cell.t==="e"){cell.w=cell.w||BErr[cell.v]}else if(nf==="General"){if(cell.t==="n"){if((cell.v|0)===cell.v)cell.w=SSF._general_int(cell.v);else cell.w=SSF._general_num(cell.v)}else cell.w=SSF._general(cell.v)}else cell.w=xlml_format(nf||"General",cell.v);if(o.cellNF)cell.z=XLMLFormatMap[nf]||nf||"General"}catch(e){if(o.WTF)throw e}}function process_style_xlml(styles,stag,opts){if(opts.cellStyles){if(stag.Interior){var I=stag.Interior;if(I.Pattern)I.patternType=XLMLPatternTypeMap[I.Pattern]||I.Pattern}}styles[stag.ID]=stag}function parse_xlml_data(xml,ss,data,cell,base,styles,csty,row,o){var nf="General",sid=cell.StyleID,S={};o=o||{};var interiors=[];if(sid===undefined&&row)sid=row.StyleID;
+if(sid===undefined&&csty)sid=csty.StyleID;while(styles[sid]!==undefined){if(styles[sid].nf)nf=styles[sid].nf;if(styles[sid].Interior)interiors.push(styles[sid].Interior);if(!styles[sid].Parent)break;sid=styles[sid].Parent}switch(data.Type){case"Boolean":cell.t="b";cell.v=parsexmlbool(xml);break;case"String":cell.t="s";cell.r=xlml_fixstr(unescapexml(xml));cell.v=xml.indexOf("<")>-1?ss:cell.r;break;case"DateTime":cell.v=(Date.parse(xml)-new Date(Date.UTC(1899,11,30)))/(24*60*60*1e3);if(cell.v!==cell.v)cell.v=unescapexml(xml);else if(cell.v>=1&&cell.v<60)cell.v=cell.v-1;if(!nf||nf=="General")nf="yyyy-mm-dd";case"Number":if(cell.v===undefined)cell.v=+xml;if(!cell.t)cell.t="n";break;case"Error":cell.t="e";cell.v=RBErr[xml];cell.w=xml;break;default:cell.t="s";cell.v=xlml_fixstr(ss);break}safe_format_xlml(cell,nf,o);if(o.cellFormula!=null&&cell.Formula){cell.f=rc_to_a1(unescapexml(cell.Formula),base);cell.Formula=undefined}if(o.cellStyles){interiors.forEach(function(x){if(!S.patternType&&x.patternType)S.patternType=x.patternType});cell.s=S}cell.ixfe=cell.StyleID!==undefined?cell.StyleID:"Default"}function xlml_clean_comment(comment){comment.t=comment.v;comment.v=comment.w=comment.ixfe=undefined}function xlml_normalize(d){if(has_buf&&Buffer.isBuffer(d))return d.toString("utf8");if(typeof d==="string")return d;throw"badf"}var xlmlregex=/<(\/?)([a-z0-9]*:|)(\w+)[^>]*>/gm;function parse_xlml_xml(d,opts){var str=xlml_normalize(d);var Rn;var state=[],tmp;var sheets={},sheetnames=[],cursheet={},sheetname="";var table={},cell={},row={},dtag,didx;var c=0,r=0;var refguess={s:{r:1e6,c:1e6},e:{r:0,c:0}};var styles={},stag={};var ss="",fidx=0;var mergecells=[];var Props={},Custprops={},pidx=0,cp={};var comments=[],comment={};var cstys=[],csty;xlmlregex.lastIndex=0;while(Rn=xlmlregex.exec(str))switch(Rn[3]){case"Data":if(state[state.length-1][1])break;if(Rn[1]==="/")parse_xlml_data(str.slice(didx,Rn.index),ss,dtag,state[state.length-1][0]=="Comment"?comment:cell,{c:c,r:r},styles,cstys[c],row,opts);else{ss="";dtag=xlml_parsexmltag(Rn[0]);didx=Rn.index+Rn[0].length}break;case"Cell":if(Rn[1]==="/"){if(comments.length>0)cell.c=comments;if((!opts.sheetRows||opts.sheetRows>r)&&cell.v!==undefined)cursheet[encode_col(c)+encode_row(r)]=cell;if(cell.HRef){cell.l={Target:cell.HRef,tooltip:cell.HRefScreenTip};cell.HRef=cell.HRefScreenTip=undefined}if(cell.MergeAcross||cell.MergeDown){var cc=c+(parseInt(cell.MergeAcross,10)|0);var rr=r+(parseInt(cell.MergeDown,10)|0);mergecells.push({s:{c:c,r:r},e:{c:cc,r:rr}})}++c;if(cell.MergeAcross)c+=+cell.MergeAcross}else{cell=xlml_parsexmltagobj(Rn[0]);if(cell.Index)c=+cell.Index-1;if(c<refguess.s.c)refguess.s.c=c;if(c>refguess.e.c)refguess.e.c=c;if(Rn[0].substr(-2)==="/>")++c;comments=[]}break;case"Row":if(Rn[1]==="/"||Rn[0].substr(-2)==="/>"){if(r<refguess.s.r)refguess.s.r=r;if(r>refguess.e.r)refguess.e.r=r;if(Rn[0].substr(-2)==="/>"){row=xlml_parsexmltag(Rn[0]);if(row.Index)r=+row.Index-1}c=0;++r}else{row=xlml_parsexmltag(Rn[0]);if(row.Index)r=+row.Index-1}break;case"Worksheet":if(Rn[1]==="/"){if((tmp=state.pop())[0]!==Rn[3])throw"Bad state: "+tmp;sheetnames.push(sheetname);if(refguess.s.r<=refguess.e.r&&refguess.s.c<=refguess.e.c)cursheet["!ref"]=encode_range(refguess);if(mergecells.length)cursheet["!merges"]=mergecells;sheets[sheetname]=cursheet}else{refguess={s:{r:1e6,c:1e6},e:{r:0,c:0}};r=c=0;state.push([Rn[3],false]);tmp=xlml_parsexmltag(Rn[0]);sheetname=tmp.Name;cursheet={};mergecells=[]}break;case"Table":if(Rn[1]==="/"){if((tmp=state.pop())[0]!==Rn[3])throw"Bad state: "+tmp}else if(Rn[0].slice(-2)=="/>")break;else{table=xlml_parsexmltag(Rn[0]);state.push([Rn[3],false]);cstys=[]}break;case"Style":if(Rn[1]==="/")process_style_xlml(styles,stag,opts);else stag=xlml_parsexmltag(Rn[0]);break;case"NumberFormat":stag.nf=xlml_parsexmltag(Rn[0]).Format||"General";break;case"Column":if(state[state.length-1][0]!=="Table")break;csty=xlml_parsexmltag(Rn[0]);cstys[csty.Index-1||cstys.length]=csty;for(var i=0;i<+csty.Span;++i)cstys[cstys.length]=csty;break;case"NamedRange":break;case"NamedCell":break;case"B":break;case"I":break;case"U":break;case"S":break;case"Sub":break;case"Sup":break;case"Span":break;case"Border":break;case"Alignment":break;case"Borders":break;case"Font":if(Rn[0].substr(-2)==="/>")break;else if(Rn[1]==="/")ss+=str.slice(fidx,Rn.index);else fidx=Rn.index+Rn[0].length;break;case"Interior":if(!opts.cellStyles)break;stag.Interior=xlml_parsexmltag(Rn[0]);break;case"Protection":break;case"Author":case"Title":case"Description":case"Created":case"Keywords":case"Subject":case"Category":case"Company":case"LastAuthor":case"LastSaved":case"LastPrinted":case"Version":case"Revision":case"TotalTime":case"HyperlinkBase":case"Manager":if(Rn[0].substr(-2)==="/>")break;else if(Rn[1]==="/")xlml_set_prop(Props,Rn[3],str.slice(pidx,Rn.index));else pidx=Rn.index+Rn[0].length;break;case"Paragraphs":break;case"Styles":case"Workbook":if(Rn[1]==="/"){if((tmp=state.pop())[0]!==Rn[3])throw"Bad state: "+tmp}else state.push([Rn[3],false]);break;case"Comment":if(Rn[1]==="/"){if((tmp=state.pop())[0]!==Rn[3])throw"Bad state: "+tmp;xlml_clean_comment(comment);comments.push(comment)}else{state.push([Rn[3],false]);tmp=xlml_parsexmltag(Rn[0]);comment={a:tmp.Author}}break;case"Name":break;case"ComponentOptions":case"DocumentProperties":case"CustomDocumentProperties":case"OfficeDocumentSettings":case"PivotTable":case"PivotCache":case"Names":case"MapInfo":case"PageBreaks":case"QueryTable":case"DataValidation":case"AutoFilter":case"Sorting":case"Schema":case"data":case"ConditionalFormatting":case"SmartTagType":case"SmartTags":case"ExcelWorkbook":case"WorkbookOptions":case"WorksheetOptions":if(Rn[1]==="/"){if((tmp=state.pop())[0]!==Rn[3])throw"Bad state: "+tmp}else if(Rn[0].charAt(Rn[0].length-2)!=="/")state.push([Rn[3],true]);break;default:var seen=true;switch(state[state.length-1][0]){case"OfficeDocumentSettings":switch(Rn[3]){case"AllowPNG":break;case"RemovePersonalInformation":break;case"DownloadComponents":break;case"LocationOfComponents":break;case"Colors":break;case"Color":break;case"Index":break;case"RGB":break;case"PixelsPerInch":break;case"TargetScreenSize":break;case"ReadOnlyRecommended":break;default:seen=false}break;case"ComponentOptions":switch(Rn[3]){case"Toolbar":break;case"HideOfficeLogo":break;case"SpreadsheetAutoFit":break;case"Label":break;case"Caption":break;case"MaxHeight":break;case"MaxWidth":break;case"NextSheetNumber":break;default:seen=false}break;case"ExcelWorkbook":switch(Rn[3]){case"WindowHeight":break;case"WindowWidth":break;case"WindowTopX":break;case"WindowTopY":break;case"TabRatio":break;case"ProtectStructure":break;case"ProtectWindows":break;case"ActiveSheet":break;case"DisplayInkNotes":break;case"FirstVisibleSheet":break;case"SupBook":break;case"SheetName":break;case"SheetIndex":break;case"SheetIndexFirst":break;case"SheetIndexLast":break;case"Dll":break;case"AcceptLabelsInFormulas":break;case"DoNotSaveLinkValues":break;case"Date1904":break;case"Iteration":break;case"MaxIterations":break;case"MaxChange":break;case"Path":break;case"Xct":break;case"Count":break;case"SelectedSheets":break;case"Calculation":break;case"Uncalced":break;case"StartupPrompt":break;case"Crn":break;case"ExternName":break;case"Formula":break;case"ColFirst":break;case"ColLast":break;case"WantAdvise":break;case"Boolean":break;case"Error":break;case"Text":break;case"OLE":break;case"NoAutoRecover":break;case"PublishObjects":break;case"DoNotCalculateBeforeSave":break;case"Number":break;case"RefModeR1C1":break;case"EmbedSaveSmartTags":break;default:seen=false}break;case"WorkbookOptions":switch(Rn[3]){case"OWCVersion":break;case"Height":break;case"Width":break;default:seen=false}break;case"WorksheetOptions":switch(Rn[3]){case"Unsynced":break;case"Visible":break;case"Print":break;case"Panes":break;case"Scale":break;case"Pane":break;case"Number":break;case"Layout":break;case"Header":break;case"Footer":break;case"PageSetup":break;case"PageMargins":break;case"Selected":break;case"ProtectObjects":break;case"EnableSelection":break;case"ProtectScenarios":break;case"ValidPrinterInfo":break;case"HorizontalResolution":break;case"VerticalResolution":break;case"NumberofCopies":break;case"ActiveRow":break;case"ActiveCol":break;case"ActivePane":break;case"TopRowVisible":break;case"TopRowBottomPane":break;case"LeftColumnVisible":break;case"LeftColumnRightPane":break;case"FitToPage":break;case"RangeSelection":break;case"PaperSizeIndex":break;case"PageLayoutZoom":break;case"PageBreakZoom":break;case"FilterOn":break;case"DoNotDisplayGridlines":break;case"SplitHorizontal":break;case"SplitVertical":break;case"FreezePanes":break;case"FrozenNoSplit":break;case"FitWidth":break;case"FitHeight":break;case"CommentsLayout":break;case"Zoom":break;case"LeftToRight":break;case"Gridlines":break;case"AllowSort":break;case"AllowFilter":break;case"AllowInsertRows":break;case"AllowDeleteRows":break;case"AllowInsertCols":break;case"AllowDeleteCols":break;case"AllowInsertHyperlinks":break;case"AllowFormatCells":break;case"AllowSizeCols":break;case"AllowSizeRows":break;case"NoSummaryRowsBelowDetail":break;case"TabColorIndex":break;case"DoNotDisplayHeadings":break;case"ShowPageLayoutZoom":break;case"NoSummaryColumnsRightDetail":break;case"BlackAndWhite":break;case"DoNotDisplayZeros":break;case"DisplayPageBreak":break;case"RowColHeadings":break;case"DoNotDisplayOutline":break;case"NoOrientation":break;case"AllowUsePivotTables":break;case"ZeroHeight":break;case"ViewableRange":break;case"Selection":break;case"ProtectContents":break;default:seen=false}break;case"PivotTable":case"PivotCache":switch(Rn[3]){case"ImmediateItemsOnDrop":break;case"ShowPageMultipleItemLabel":break;case"CompactRowIndent":break;case"Location":break;case"PivotField":break;case"Orientation":break;case"LayoutForm":break;case"LayoutSubtotalLocation":break;case"LayoutCompactRow":break;case"Position":break;case"PivotItem":break;case"DataType":break;case"DataField":break;case"SourceName":break;case"ParentField":break;case"PTLineItems":break;case"PTLineItem":break;case"CountOfSameItems":break;case"Item":break;case"ItemType":break;case"PTSource":break;case"CacheIndex":break;case"ConsolidationReference":break;case"FileName":break;case"Reference":break;case"NoColumnGrand":break;case"NoRowGrand":break;case"BlankLineAfterItems":break;case"Hidden":break;case"Subtotal":break;case"BaseField":break;case"MapChildItems":break;case"Function":break;case"RefreshOnFileOpen":break;case"PrintSetTitles":break;case"MergeLabels":break;case"DefaultVersion":break;case"RefreshName":break;case"RefreshDate":break;case"RefreshDateCopy":break;case"VersionLastRefresh":break;case"VersionLastUpdate":break;case"VersionUpdateableMin":break;case"VersionRefreshableMin":break;case"Calculation":break;default:seen=false}break;case"PageBreaks":switch(Rn[3]){case"ColBreaks":break;case"ColBreak":break;case"RowBreaks":break;case"RowBreak":break;case"ColStart":break;case"ColEnd":break;case"RowEnd":break;default:seen=false}break;case"AutoFilter":switch(Rn[3]){case"AutoFilterColumn":break;case"AutoFilterCondition":break;case"AutoFilterAnd":break;case"AutoFilterOr":break;default:seen=false}break;case"QueryTable":switch(Rn[3]){case"Id":break;case"AutoFormatFont":break;case"AutoFormatPattern":break;case"QuerySource":break;case"QueryType":break;case"EnableRedirections":break;case"RefreshedInXl9":break;case"URLString":break;case"HTMLTables":break;case"Connection":break;case"CommandText":break;case"RefreshInfo":break;case"NoTitles":break;case"NextId":break;case"ColumnInfo":break;case"OverwriteCells":break;case"DoNotPromptForFile":break;case"TextWizardSettings":break;case"Source":break;case"Number":break;case"Decimal":break;case"ThousandSeparator":break;case"TrailingMinusNumbers":break;case"FormatSettings":break;case"FieldType":break;case"Delimiters":break;case"Tab":break;case"Comma":break;case"AutoFormatName":break;case"VersionLastEdit":break;case"VersionLastRefresh":break;default:seen=false}break;case"Sorting":case"ConditionalFormatting":case"DataValidation":switch(Rn[3]){case"Range":break;case"Type":break;case"Min":break;case"Max":break;case"Sort":break;case"Descending":break;case"Order":break;case"CaseSensitive":break;case"Value":break;case"ErrorStyle":break;case"ErrorMessage":break;case"ErrorTitle":break;case"CellRangeList":break;case"InputMessage":break;case"InputTitle":break;case"ComboHide":break;case"InputHide":break;case"Condition":break;case"Qualifier":break;case"UseBlank":break;case"Value1":break;case"Value2":break;case"Format":break;default:seen=false}break;case"MapInfo":case"Schema":case"data":switch(Rn[3]){case"Map":break;case"Entry":break;case"Range":break;case"XPath":break;case"Field":break;case"XSDType":break;case"FilterOn":break;case"Aggregate":break;case"ElementType":break;case"AttributeType":break;case"schema":case"element":case"complexType":case"datatype":case"all":case"attribute":case"extends":break;case"row":break;default:seen=false}break;case"SmartTags":break;default:seen=false;break}if(seen)break;if(!state[state.length-1][1])throw"Unrecognized tag: "+Rn[3]+"|"+state.join("|");if(state[state.length-1][0]==="CustomDocumentProperties"){if(Rn[0].substr(-2)==="/>")break;else if(Rn[1]==="/")xlml_set_custprop(Custprops,Rn,cp,str.slice(pidx,Rn.index));else{cp=Rn;pidx=Rn.index+Rn[0].length}break}if(opts.WTF)throw"Unrecognized tag: "+Rn[3]+"|"+state.join("|")}var out={};if(!opts.bookSheets&&!opts.bookProps)out.Sheets=sheets;out.SheetNames=sheetnames;out.SSF=SSF.get_table();out.Props=Props;out.Custprops=Custprops;return out}function parse_xlml(data,opts){fix_read_opts(opts=opts||{});switch(opts.type||"base64"){case"base64":return parse_xlml_xml(Base64.decode(data),opts);case"binary":case"buffer":case"file":return parse_xlml_xml(data,opts);case"array":return parse_xlml_xml(data.map(_chr).join(""),opts)}}function write_xlml(wb,opts){}function parse_compobj(obj){var v={};var o=obj.content;var l=28,m;m=__lpstr(o,l);l+=4+__readUInt32LE(o,l);v.UserType=m;m=__readUInt32LE(o,l);l+=4;switch(m){case 0:break;case 4294967295:case 4294967294:l+=4;break;default:if(m>400)throw new Error("Unsupported Clipboard: "+m.toString(16));l+=m}m=__lpstr(o,l);l+=m.length===0?0:5+m.length;v.Reserved1=m;if((m=__readUInt32LE(o,l))!==1907550708)return v;throw"Unsupported Unicode Extension"}function slurp(R,blob,length,opts){var l=length;var bufs=[];var d=blob.slice(blob.l,blob.l+l);if(opts&&opts.enc&&opts.enc.insitu_decrypt)switch(R.n){case"BOF":case"FilePass":case"FileLock":case"InterfaceHdr":case"RRDInfo":case"RRDHead":case"UsrExcl":break;default:if(d.length===0)break;opts.enc.insitu_decrypt(d)}bufs.push(d);blob.l+=l;var next=XLSRecordEnum[__readUInt16LE(blob,blob.l)];while(next!=null&&next.n==="Continue"){l=__readUInt16LE(blob,blob.l+2);bufs.push(blob.slice(blob.l+4,blob.l+4+l));blob.l+=4+l;next=XLSRecordEnum[__readUInt16LE(blob,blob.l)]}var b=bconcat(bufs);prep_blob(b,0);var ll=0;b.lens=[];for(var j=0;j<bufs.length;++j){b.lens.push(ll);ll+=bufs[j].length}return R.f(b,b.length,opts)}function safe_format_xf(p,opts,date1904){if(!p.XF)return;try{var fmtid=p.XF.ifmt||0;if(p.t==="e"){p.w=p.w||BErr[p.v]}else if(fmtid===0){if(p.t==="n"){if((p.v|0)===p.v)p.w=SSF._general_int(p.v);else p.w=SSF._general_num(p.v)}else p.w=SSF._general(p.v)}else p.w=SSF.format(fmtid,p.v,{date1904:date1904||false});if(opts.cellNF)p.z=SSF._table[fmtid]}catch(e){if(opts.WTF)throw e}}function make_cell(val,ixfe,t){return{v:val,ixfe:ixfe,t:t}}function parse_workbook(blob,options){var wb={opts:{}};var Sheets={};var out={};var Directory={};var found_sheet=false;var range={};var last_formula=null;var sst=[];var cur_sheet="";var Preamble={};var lastcell,last_cell,cc,cmnt,rng,rngC,rngR;var shared_formulae={};var array_formulae=[];var temp_val;var country;var cell_valid=true;var XFs=[];var palette=[];var get_rgb=function getrgb(icv){if(icv<8)return XLSIcv[icv];if(icv<64)return palette[icv-8]||XLSIcv[icv];return XLSIcv[icv]};var process_cell_style=function pcs(cell,line){var xfd=line.XF.data;if(!xfd||!xfd.patternType)return;line.s={};line.s.patternType=xfd.patternType;var t;if(t=rgb2Hex(get_rgb(xfd.icvFore))){line.s.fgColor={rgb:t}}if(t=rgb2Hex(get_rgb(xfd.icvBack))){line.s.bgColor={rgb:t}}};var addcell=function addcell(cell,line,options){if(!cell_valid)return;if(options.cellStyles&&line.XF&&line.XF.data)process_cell_style(cell,line);lastcell=cell;last_cell=encode_cell(cell);if(range.s){if(cell.r<range.s.r)range.s.r=cell.r;if(cell.c<range.s.c)range.s.c=cell.c}if(range.e){if(cell.r+1>range.e.r)range.e.r=cell.r+1;if(cell.c+1>range.e.c)range.e.c=cell.c+1}if(options.sheetRows&&lastcell.r>=options.sheetRows)cell_valid=false;else out[last_cell]=line};var opts={enc:false,sbcch:0,snames:[],sharedf:shared_formulae,arrayf:array_formulae,rrtabid:[],lastuser:"",biff:8,codepage:0,winlocked:0,wtf:false};if(options.password)opts.password=options.password;var mergecells=[];var objects=[];var supbooks=[[]];var sbc=0,sbci=0,sbcli=0;supbooks.SheetNames=opts.snames;supbooks.sharedf=opts.sharedf;supbooks.arrayf=opts.arrayf;var last_Rn="";var file_depth=0;opts.codepage=1200;set_cp(1200);while(blob.l<blob.length-1){var s=blob.l;var RecordType=blob.read_shift(2);if(RecordType===0&&last_Rn==="EOF")break;var length=blob.l===blob.length?0:blob.read_shift(2),y;var R=XLSRecordEnum[RecordType];if(R&&R.f){if(options.bookSheets){if(last_Rn==="BoundSheet8"&&R.n!=="BoundSheet8")break}last_Rn=R.n;if(R.r===2||R.r==12){var rt=blob.read_shift(2);length-=2;if(!opts.enc&&rt!==RecordType)throw"rt mismatch";if(R.r==12){blob.l+=10;length-=10}}var val;if(R.n==="EOF")val=R.f(blob,length,opts);else val=slurp(R,blob,length,opts);var Rn=R.n;if(opts.biff===5||opts.biff===2)switch(Rn){case"Lbl":Rn="Label";break}switch(Rn){case"Date1904":wb.opts.Date1904=val;break;case"WriteProtect":wb.opts.WriteProtect=true;break;case"FilePass":if(!opts.enc)blob.l=0;opts.enc=val;if(opts.WTF)console.error(val);if(!options.password)throw new Error("File is password-protected");if(val.Type!==0)throw new Error("Encryption scheme unsupported");if(!val.valid)throw new Error("Password is incorrect");break;case"WriteAccess":opts.lastuser=val;break;case"FileSharing":break;case"CodePage":if(val===21010)val=1200;else if(val===32769)val=1252;opts.codepage=val;set_cp(val);break;case"RRTabId":opts.rrtabid=val;break;case"WinProtect":opts.winlocked=val;break;case"Template":break;case"RefreshAll":wb.opts.RefreshAll=val;break;case"BookBool":break;case"UsesELFs":break;case"MTRSettings":{if(val[0]&&val[1])throw"Unsupported threads: "+val}break;case"CalcCount":wb.opts.CalcCount=val;break;case"CalcDelta":wb.opts.CalcDelta=val;break;case"CalcIter":wb.opts.CalcIter=val;break;case"CalcMode":wb.opts.CalcMode=val;break;case"CalcPrecision":wb.opts.CalcPrecision=val;break;case"CalcSaveRecalc":wb.opts.CalcSaveRecalc=val;break;case"CalcRefMode":opts.CalcRefMode=val;break;case"Uncalced":break;case"ForceFullCalculation":wb.opts.FullCalc=val;break;case"WsBool":break;case"XF":XFs.push(val);break;case"ExtSST":break;case"BookExt":break;case"RichTextStream":break;case"BkHim":break;case"SupBook":supbooks[++sbc]=[val];sbci=0;break;case"ExternName":supbooks[sbc][++sbci]=val;break;case"Index":break;case"Lbl":supbooks[0][++sbcli]=val;break;case"ExternSheet":supbooks[sbc]=supbooks[sbc].concat(val);sbci+=val.length;break;case"Protect":out["!protect"]=val;break;case"Password":if(val!==0&&opts.WTF)console.error("Password verifier: "+val);break;case"Prot4Rev":case"Prot4RevPass":break;case"BoundSheet8":{Directory[val.pos]=val;opts.snames.push(val.name)}break;case"EOF":{if(--file_depth)break;if(range.e){out["!range"]=range;if(range.e.r>0&&range.e.c>0){range.e.r--;range.e.c--;out["!ref"]=encode_range(range);range.e.r++;range.e.c++}if(mergecells.length>0)out["!merges"]=mergecells;if(objects.length>0)out["!objects"]=objects}if(cur_sheet==="")Preamble=out;else Sheets[cur_sheet]=out;out={}}break;case"BOF":{if(opts.biff!==8);else if(val.BIFFVer===1280)opts.biff=5;else if(val.BIFFVer===2)opts.biff=2;else if(val.BIFFVer===7)opts.biff=2;if(file_depth++)break;cell_valid=true;out={};if(opts.biff===2){if(cur_sheet==="")cur_sheet="Sheet1";range={s:{r:0,c:0},e:{r:0,c:0}}}else cur_sheet=(Directory[s]||{name:""}).name;mergecells=[];objects=[]}break;case"Number":case"BIFF2NUM":{temp_val={ixfe:val.ixfe,XF:XFs[val.ixfe],v:val.val,t:"n"};if(temp_val.XF)safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:val.c,r:val.r},temp_val,options)}break;case"BoolErr":{temp_val={ixfe:val.ixfe,XF:XFs[val.ixfe],v:val.val,t:val.t};if(temp_val.XF)safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:val.c,r:val.r},temp_val,options)}break;case"RK":{temp_val={ixfe:val.ixfe,XF:XFs[val.ixfe],v:val.rknum,t:"n"};if(temp_val.XF)safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:val.c,r:val.r},temp_val,options)}break;case"MulRk":{for(var j=val.c;j<=val.C;++j){var ixfe=val.rkrec[j-val.c][0];temp_val={ixfe:ixfe,XF:XFs[ixfe],v:val.rkrec[j-val.c][1],t:"n"};if(temp_val.XF)safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:j,r:val.r},temp_val,options)}}break;case"Formula":{switch(val.val){case"String":last_formula=val;break;case"Array Formula":throw"Array Formula unsupported";default:temp_val={v:val.val,ixfe:val.cell.ixfe,t:val.tt};temp_val.XF=XFs[temp_val.ixfe];if(options.cellFormula)temp_val.f="="+stringify_formula(val.formula,range,val.cell,supbooks,opts);if(temp_val.XF)safe_format_xf(temp_val,options,wb.opts.Date1904);addcell(val.cell,temp_val,options);last_formula=val}}break;case"String":{if(last_formula){last_formula.val=val;temp_val={v:last_formula.val,ixfe:last_formula.cell.ixfe,t:"s"};temp_val.XF=XFs[temp_val.ixfe];if(options.cellFormula)temp_val.f="="+stringify_formula(last_formula.formula,range,last_formula.cell,supbooks,opts);if(temp_val.XF)safe_format_xf(temp_val,options,wb.opts.Date1904);addcell(last_formula.cell,temp_val,options);last_formula=null}}break;case"Array":{array_formulae.push(val)}break;case"ShrFmla":{if(!cell_valid)break;shared_formulae[encode_cell(last_formula.cell)]=val[0]}break;case"LabelSst":temp_val=make_cell(sst[val.isst].t,val.ixfe,"s");temp_val.XF=XFs[temp_val.ixfe];if(temp_val.XF)safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:val.c,r:val.r},temp_val,options);break;case"Label":case"BIFF2STR":temp_val=make_cell(val.val,val.ixfe,"s");temp_val.XF=XFs[temp_val.ixfe];if(temp_val.XF)safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:val.c,r:val.r},temp_val,options);break;case"Dimensions":{if(file_depth===1)range=val}break;case"SST":{sst=val}break;case"Format":{SSF.load(val[1],val[0])}break;case"MergeCells":mergecells=mergecells.concat(val);break;case"Obj":objects[val.cmo[0]]=opts.lastobj=val;break;case"TxO":opts.lastobj.TxO=val;break;case"HLink":{for(rngR=val[0].s.r;rngR<=val[0].e.r;++rngR)for(rngC=val[0].s.c;rngC<=val[0].e.c;++rngC)if(out[encode_cell({c:rngC,r:rngR})])out[encode_cell({c:rngC,r:rngR})].l=val[1]}break;case"HLinkTooltip":{for(rngR=val[0].s.r;rngR<=val[0].e.r;++rngR)for(rngC=val[0].s.c;rngC<=val[0].e.c;++rngC)if(out[encode_cell({c:rngC,r:rngR})])out[encode_cell({c:rngC,r:rngR})].l.tooltip=val[1]}break;case"Note":{if(opts.biff<=5&&opts.biff>=2)break;cc=out[encode_cell(val[0])];var noteobj=objects[val[2]];if(!cc)break;if(!cc.c)cc.c=[];cmnt={a:val[1],t:noteobj.TxO.t};cc.c.push(cmnt)}break;default:switch(R.n){case"ClrtClient":break;case"XFExt":update_xfext(XFs[val.ixfe],val.ext);break;case"NameCmt":break;case"Header":break;case"Footer":break;case"HCenter":break;case"VCenter":break;case"Pls":break;case"Setup":break;case"DefColWidth":break;case"GCW":break;case"LHRecord":break;case"ColInfo":break;case"Row":break;case"DBCell":break;case"MulBlank":break;case"EntExU2":break;case"SxView":break;case"Sxvd":break;case"SXVI":break;case"SXVDEx":break;case"SxIvd":break;case"SXDI":break;case"SXLI":break;case"SXEx":break;case"QsiSXTag":break;case"Selection":break;case"Feat":break;case"FeatHdr":case"FeatHdr11":break;case"Feature11":case"Feature12":case"List12":break;case"Blank":break;case"Country":country=val;break;case"RecalcId":break;case"DefaultRowHeight":case"DxGCol":break;case"Fbi":case"Fbi2":case"GelFrame":break;case"Font":break;case"XFCRC":break;case"Style":break;case"StyleExt":break;case"Palette":palette=val;break;case"Theme":break;case"ScenarioProtect":break;case"ObjProtect":break;case"CondFmt12":break;case"Table":break;case"TableStyles":break;case"TableStyle":break;case"TableStyleElement":break;case"SXStreamID":break;case"SXVS":break;case"DConRef":break;case"SXAddl":break;case"DConBin":break;case"DConName":break;case"SXPI":break;case"SxFormat":break;case"SxSelect":break;case"SxRule":break;case"SxFilt":break;case"SxItm":break;case"SxDXF":break;case"ScenMan":break;case"DCon":break;case"CellWatch":break;case"PrintRowCol":break;case"PrintGrid":break;case"PrintSize":break;case"XCT":break;case"CRN":break;case"Scl":{}break;case"SheetExt":{}break;case"SheetExtOptional":{}break;case"ObNoMacros":{}break;case"ObProj":{}break;case"CodeName":{}break;case"GUIDTypeLib":{}break;case"WOpt":break;case"PhoneticInfo":break;case"OleObjectSize":break;case"DXF":case"DXFN":case"DXFN12":case"DXFN12List":case"DXFN12NoCB":break;case"Dv":case"DVal":break;case"BRAI":case"Series":case"SeriesText":break;case"DConn":break;case"DbOrParamQry":break;case"DBQueryExt":break;case"IFmtRecord":break;case"CondFmt":case"CF":case"CF12":case"CFEx":break;case"Excel9File":break;case"Units":break;case"InterfaceHdr":case"Mms":case"InterfaceEnd":case"DSF":case"BuiltInFnGroupCount":case"Window1":case"Window2":case"HideObj":case"GridSet":case"Guts":case"UserBView":case"UserSViewBegin":case"UserSViewEnd":case"Pane":break;default:switch(R.n){case"Dat":case"Begin":case"End":case"StartBlock":case"EndBlock":case"Frame":case"Area":case"Axis":case"AxisLine":case"Tick":break;case"AxesUsed":case"CrtLayout12":case"CrtLayout12A":case"CrtLink":case"CrtLine":case"CrtMlFrt":case"CrtMlFrtContinue":break;case"LineFormat":case"AreaFormat":case"Chart":case"Chart3d":case"Chart3DBarShape":case"ChartFormat":case"ChartFrtInfo":break;case"PlotArea":case"PlotGrowth":break;case"SeriesList":case"SerParent":case"SerAuxTrend":break;case"DataFormat":case"SerToCrt":case"FontX":break;case"CatSerRange":case"AxcExt":case"SerFmt":break;case"ShtProps":break;case"DefaultText":case"Text":case"CatLab":break;case"DataLabExtContents":break;case"Legend":case"LegendException":break;case"Pie":case"Scatter":break;case"PieFormat":case"MarkerFormat":break;case"StartObject":case"EndObject":break;case"AlRuns":case"ObjectLink":break;case"SIIndex":break;case"AttachedLabel":case"YMult":break;case"Line":case"Bar":break;case"Surf":break;case"AxisParent":break;case"Pos":break;case"ValueRange":break;case"SXViewEx9":break;case"SXViewLink":break;case"PivotChartBits":break;case"SBaseRef":break;case"TextPropsStream":break;case"LnExt":break;case"MkrExt":break;case"CrtCoopt":break;case"Qsi":case"Qsif":case"Qsir":case"QsiSXTag":break;case"TxtQry":break;case"FilterMode":break;case"AutoFilter":case"AutoFilterInfo":break;case"AutoFilter12":break;case"DropDownObjIds":break;case"Sort":break;case"SortData":break;case"ShapePropsStream":break;case"MsoDrawing":case"MsoDrawingGroup":case"MsoDrawingSelection":break;case"ImData":break;case"WebPub":case"AutoWebPub":case"RightMargin":case"LeftMargin":case"TopMargin":case"BottomMargin":case"HeaderFooter":case"HFPicture":case"PLV":case"HorizontalPageBreaks":case"VerticalPageBreaks":case"Backup":case"CompressPictures":case"Compat12":break;case"Continue":case"ContinueFrt12":break;case"FrtFontList":case"FrtWrapper":break;case"ExternCount":break;case"RString":break;case"TabIdConf":case"Radar":case"RadarArea":case"DropBar":case"Intl":case"CoordList":case"SerAuxErrBar":break;default:switch(R.n){case"SCENARIO":case"DConBin":case"PicF":case"DataLabExt":case"Lel":case"BopPop":case"BopPopCustom":case"RealTimeData":case"Name":break;default:if(options.WTF)throw"Unrecognized Record "+R.n}}}}}else blob.l+=length}var sheetnamesraw=opts.biff===2?["Sheet1"]:Object.keys(Directory).sort(function(a,b){return Number(a)-Number(b)}).map(function(x){return Directory[x].name});var sheetnames=sheetnamesraw.slice();wb.Directory=sheetnamesraw;wb.SheetNames=sheetnamesraw;if(!options.bookSheets)wb.Sheets=Sheets;wb.Preamble=Preamble;wb.Strings=sst;wb.SSF=SSF.get_table();if(opts.enc)wb.Encryption=opts.enc;wb.Metadata={};if(country!==undefined)wb.Metadata.Country=country;return wb}function parse_xlscfb(cfb,options){if(!options)options={};fix_read_opts(options);reset_cp();var CompObj,Summary,Workbook;if(cfb.find){CompObj=cfb.find("!CompObj");Summary=cfb.find("!SummaryInformation");Workbook=cfb.find("/Workbook")}else{prep_blob(cfb,0);Workbook={content:cfb}}if(!Workbook)Workbook=cfb.find("/Book");var CompObjP,SummaryP,WorkbookP;if(CompObj)CompObjP=parse_compobj(CompObj);if(options.bookProps&&!options.bookSheets)WorkbookP={};else{if(Workbook)WorkbookP=parse_workbook(Workbook.content,options,!!Workbook.find);else throw new Error("Cannot find Workbook stream")}if(cfb.find)parse_props(cfb);var props={};for(var y in cfb.Summary)props[y]=cfb.Summary[y];for(y in cfb.DocSummary)props[y]=cfb.DocSummary[y];WorkbookP.Props=WorkbookP.Custprops=props;if(options.bookFiles)WorkbookP.cfb=cfb;WorkbookP.CompObjP=CompObjP;return WorkbookP}function parse_props(cfb){var DSI=cfb.find("!DocumentSummaryInformation");if(DSI)try{cfb.DocSummary=parse_PropertySetStream(DSI,DocSummaryPIDDSI)}catch(e){}var SI=cfb.find("!SummaryInformation");if(SI)try{cfb.Summary=parse_PropertySetStream(SI,SummaryPIDSI)}catch(e){}}var XLSBRecordEnum={0:{n:"BrtRowHdr",f:parse_BrtRowHdr},1:{n:"BrtCellBlank",f:parse_BrtCellBlank},2:{n:"BrtCellRk",f:parse_BrtCellRk},3:{n:"BrtCellError",f:parse_BrtCellError},4:{n:"BrtCellBool",f:parse_BrtCellBool},5:{n:"BrtCellReal",f:parse_BrtCellReal},6:{n:"BrtCellSt",f:parse_BrtCellSt},7:{n:"BrtCellIsst",f:parse_BrtCellIsst},8:{n:"BrtFmlaString",f:parse_BrtFmlaString},9:{n:"BrtFmlaNum",f:parse_BrtFmlaNum},10:{n:"BrtFmlaBool",f:parse_BrtFmlaBool},11:{n:"BrtFmlaError",f:parse_BrtFmlaError},16:{n:"BrtFRTArchID$",f:parse_BrtFRTArchID$},19:{n:"BrtSSTItem",f:parse_RichStr},20:{n:"BrtPCDIMissing",f:parsenoop},21:{n:"BrtPCDINumber",f:parsenoop},22:{n:"BrtPCDIBoolean",f:parsenoop},23:{n:"BrtPCDIError",f:parsenoop},24:{n:"BrtPCDIString",f:parsenoop},25:{n:"BrtPCDIDatetime",f:parsenoop},26:{n:"BrtPCDIIndex",f:parsenoop},27:{n:"BrtPCDIAMissing",f:parsenoop},28:{n:"BrtPCDIANumber",f:parsenoop},29:{n:"BrtPCDIABoolean",f:parsenoop},30:{n:"BrtPCDIAError",f:parsenoop},31:{n:"BrtPCDIAString",f:parsenoop},32:{n:"BrtPCDIADatetime",f:parsenoop},33:{n:"BrtPCRRecord",f:parsenoop},34:{n:"BrtPCRRecordDt",f:parsenoop},35:{n:"BrtFRTBegin",f:parsenoop},36:{n:"BrtFRTEnd",f:parsenoop},37:{n:"BrtACBegin",f:parsenoop},38:{n:"BrtACEnd",f:parsenoop},39:{n:"BrtName",f:parsenoop},40:{n:"BrtIndexRowBlock",f:parsenoop},42:{n:"BrtIndexBlock",f:parsenoop},43:{n:"BrtFont",f:parse_BrtFont},44:{n:"BrtFmt",f:parse_BrtFmt},45:{n:"BrtFill",f:parsenoop},46:{n:"BrtBorder",f:parsenoop},47:{n:"BrtXF",f:parse_BrtXF},48:{n:"BrtStyle",f:parsenoop},49:{n:"BrtCellMeta",f:parsenoop},50:{n:"BrtValueMeta",f:parsenoop},51:{n:"BrtMdb",f:parsenoop},52:{n:"BrtBeginFmd",f:parsenoop},53:{n:"BrtEndFmd",f:parsenoop},54:{n:"BrtBeginMdx",f:parsenoop},55:{n:"BrtEndMdx",f:parsenoop},56:{n:"BrtBeginMdxTuple",f:parsenoop},57:{n:"BrtEndMdxTuple",f:parsenoop},58:{n:"BrtMdxMbrIstr",f:parsenoop},59:{n:"BrtStr",f:parsenoop},60:{n:"BrtColInfo",f:parsenoop},62:{n:"BrtCellRString",f:parsenoop},63:{n:"BrtCalcChainItem$",f:parse_BrtCalcChainItem$},64:{n:"BrtDVal",f:parsenoop},65:{n:"BrtSxvcellNum",f:parsenoop},66:{n:"BrtSxvcellStr",f:parsenoop},67:{n:"BrtSxvcellBool",f:parsenoop},68:{n:"BrtSxvcellErr",f:parsenoop},69:{n:"BrtSxvcellDate",f:parsenoop},70:{n:"BrtSxvcellNil",f:parsenoop},128:{n:"BrtFileVersion",f:parsenoop},129:{n:"BrtBeginSheet",f:parsenoop},130:{n:"BrtEndSheet",f:parsenoop},131:{n:"BrtBeginBook",f:parsenoop,p:0},132:{n:"BrtEndBook",f:parsenoop},133:{n:"BrtBeginWsViews",f:parsenoop},134:{n:"BrtEndWsViews",f:parsenoop},135:{n:"BrtBeginBookViews",f:parsenoop
+},136:{n:"BrtEndBookViews",f:parsenoop},137:{n:"BrtBeginWsView",f:parsenoop},138:{n:"BrtEndWsView",f:parsenoop},139:{n:"BrtBeginCsViews",f:parsenoop},140:{n:"BrtEndCsViews",f:parsenoop},141:{n:"BrtBeginCsView",f:parsenoop},142:{n:"BrtEndCsView",f:parsenoop},143:{n:"BrtBeginBundleShs",f:parsenoop},144:{n:"BrtEndBundleShs",f:parsenoop},145:{n:"BrtBeginSheetData",f:parsenoop},146:{n:"BrtEndSheetData",f:parsenoop},147:{n:"BrtWsProp",f:parse_BrtWsProp},148:{n:"BrtWsDim",f:parse_BrtWsDim,p:16},151:{n:"BrtPane",f:parsenoop},152:{n:"BrtSel",f:parsenoop},153:{n:"BrtWbProp",f:parse_BrtWbProp},154:{n:"BrtWbFactoid",f:parsenoop},155:{n:"BrtFileRecover",f:parsenoop},156:{n:"BrtBundleSh",f:parse_BrtBundleSh},157:{n:"BrtCalcProp",f:parsenoop},158:{n:"BrtBookView",f:parsenoop},159:{n:"BrtBeginSst",f:parse_BrtBeginSst},160:{n:"BrtEndSst",f:parsenoop},161:{n:"BrtBeginAFilter",f:parsenoop},162:{n:"BrtEndAFilter",f:parsenoop},163:{n:"BrtBeginFilterColumn",f:parsenoop},164:{n:"BrtEndFilterColumn",f:parsenoop},165:{n:"BrtBeginFilters",f:parsenoop},166:{n:"BrtEndFilters",f:parsenoop},167:{n:"BrtFilter",f:parsenoop},168:{n:"BrtColorFilter",f:parsenoop},169:{n:"BrtIconFilter",f:parsenoop},170:{n:"BrtTop10Filter",f:parsenoop},171:{n:"BrtDynamicFilter",f:parsenoop},172:{n:"BrtBeginCustomFilters",f:parsenoop},173:{n:"BrtEndCustomFilters",f:parsenoop},174:{n:"BrtCustomFilter",f:parsenoop},175:{n:"BrtAFilterDateGroupItem",f:parsenoop},176:{n:"BrtMergeCell",f:parse_BrtMergeCell},177:{n:"BrtBeginMergeCells",f:parsenoop},178:{n:"BrtEndMergeCells",f:parsenoop},179:{n:"BrtBeginPivotCacheDef",f:parsenoop},180:{n:"BrtEndPivotCacheDef",f:parsenoop},181:{n:"BrtBeginPCDFields",f:parsenoop},182:{n:"BrtEndPCDFields",f:parsenoop},183:{n:"BrtBeginPCDField",f:parsenoop},184:{n:"BrtEndPCDField",f:parsenoop},185:{n:"BrtBeginPCDSource",f:parsenoop},186:{n:"BrtEndPCDSource",f:parsenoop},187:{n:"BrtBeginPCDSRange",f:parsenoop},188:{n:"BrtEndPCDSRange",f:parsenoop},189:{n:"BrtBeginPCDFAtbl",f:parsenoop},190:{n:"BrtEndPCDFAtbl",f:parsenoop},191:{n:"BrtBeginPCDIRun",f:parsenoop},192:{n:"BrtEndPCDIRun",f:parsenoop},193:{n:"BrtBeginPivotCacheRecords",f:parsenoop},194:{n:"BrtEndPivotCacheRecords",f:parsenoop},195:{n:"BrtBeginPCDHierarchies",f:parsenoop},196:{n:"BrtEndPCDHierarchies",f:parsenoop},197:{n:"BrtBeginPCDHierarchy",f:parsenoop},198:{n:"BrtEndPCDHierarchy",f:parsenoop},199:{n:"BrtBeginPCDHFieldsUsage",f:parsenoop},200:{n:"BrtEndPCDHFieldsUsage",f:parsenoop},201:{n:"BrtBeginExtConnection",f:parsenoop},202:{n:"BrtEndExtConnection",f:parsenoop},203:{n:"BrtBeginECDbProps",f:parsenoop},204:{n:"BrtEndECDbProps",f:parsenoop},205:{n:"BrtBeginECOlapProps",f:parsenoop},206:{n:"BrtEndECOlapProps",f:parsenoop},207:{n:"BrtBeginPCDSConsol",f:parsenoop},208:{n:"BrtEndPCDSConsol",f:parsenoop},209:{n:"BrtBeginPCDSCPages",f:parsenoop},210:{n:"BrtEndPCDSCPages",f:parsenoop},211:{n:"BrtBeginPCDSCPage",f:parsenoop},212:{n:"BrtEndPCDSCPage",f:parsenoop},213:{n:"BrtBeginPCDSCPItem",f:parsenoop},214:{n:"BrtEndPCDSCPItem",f:parsenoop},215:{n:"BrtBeginPCDSCSets",f:parsenoop},216:{n:"BrtEndPCDSCSets",f:parsenoop},217:{n:"BrtBeginPCDSCSet",f:parsenoop},218:{n:"BrtEndPCDSCSet",f:parsenoop},219:{n:"BrtBeginPCDFGroup",f:parsenoop},220:{n:"BrtEndPCDFGroup",f:parsenoop},221:{n:"BrtBeginPCDFGItems",f:parsenoop},222:{n:"BrtEndPCDFGItems",f:parsenoop},223:{n:"BrtBeginPCDFGRange",f:parsenoop},224:{n:"BrtEndPCDFGRange",f:parsenoop},225:{n:"BrtBeginPCDFGDiscrete",f:parsenoop},226:{n:"BrtEndPCDFGDiscrete",f:parsenoop},227:{n:"BrtBeginPCDSDTupleCache",f:parsenoop},228:{n:"BrtEndPCDSDTupleCache",f:parsenoop},229:{n:"BrtBeginPCDSDTCEntries",f:parsenoop},230:{n:"BrtEndPCDSDTCEntries",f:parsenoop},231:{n:"BrtBeginPCDSDTCEMembers",f:parsenoop},232:{n:"BrtEndPCDSDTCEMembers",f:parsenoop},233:{n:"BrtBeginPCDSDTCEMember",f:parsenoop},234:{n:"BrtEndPCDSDTCEMember",f:parsenoop},235:{n:"BrtBeginPCDSDTCQueries",f:parsenoop},236:{n:"BrtEndPCDSDTCQueries",f:parsenoop},237:{n:"BrtBeginPCDSDTCQuery",f:parsenoop},238:{n:"BrtEndPCDSDTCQuery",f:parsenoop},239:{n:"BrtBeginPCDSDTCSets",f:parsenoop},240:{n:"BrtEndPCDSDTCSets",f:parsenoop},241:{n:"BrtBeginPCDSDTCSet",f:parsenoop},242:{n:"BrtEndPCDSDTCSet",f:parsenoop},243:{n:"BrtBeginPCDCalcItems",f:parsenoop},244:{n:"BrtEndPCDCalcItems",f:parsenoop},245:{n:"BrtBeginPCDCalcItem",f:parsenoop},246:{n:"BrtEndPCDCalcItem",f:parsenoop},247:{n:"BrtBeginPRule",f:parsenoop},248:{n:"BrtEndPRule",f:parsenoop},249:{n:"BrtBeginPRFilters",f:parsenoop},250:{n:"BrtEndPRFilters",f:parsenoop},251:{n:"BrtBeginPRFilter",f:parsenoop},252:{n:"BrtEndPRFilter",f:parsenoop},253:{n:"BrtBeginPNames",f:parsenoop},254:{n:"BrtEndPNames",f:parsenoop},255:{n:"BrtBeginPName",f:parsenoop},256:{n:"BrtEndPName",f:parsenoop},257:{n:"BrtBeginPNPairs",f:parsenoop},258:{n:"BrtEndPNPairs",f:parsenoop},259:{n:"BrtBeginPNPair",f:parsenoop},260:{n:"BrtEndPNPair",f:parsenoop},261:{n:"BrtBeginECWebProps",f:parsenoop},262:{n:"BrtEndECWebProps",f:parsenoop},263:{n:"BrtBeginEcWpTables",f:parsenoop},264:{n:"BrtEndECWPTables",f:parsenoop},265:{n:"BrtBeginECParams",f:parsenoop},266:{n:"BrtEndECParams",f:parsenoop},267:{n:"BrtBeginECParam",f:parsenoop},268:{n:"BrtEndECParam",f:parsenoop},269:{n:"BrtBeginPCDKPIs",f:parsenoop},270:{n:"BrtEndPCDKPIs",f:parsenoop},271:{n:"BrtBeginPCDKPI",f:parsenoop},272:{n:"BrtEndPCDKPI",f:parsenoop},273:{n:"BrtBeginDims",f:parsenoop},274:{n:"BrtEndDims",f:parsenoop},275:{n:"BrtBeginDim",f:parsenoop},276:{n:"BrtEndDim",f:parsenoop},277:{n:"BrtIndexPartEnd",f:parsenoop},278:{n:"BrtBeginStyleSheet",f:parsenoop},279:{n:"BrtEndStyleSheet",f:parsenoop},280:{n:"BrtBeginSXView",f:parsenoop},281:{n:"BrtEndSXVI",f:parsenoop},282:{n:"BrtBeginSXVI",f:parsenoop},283:{n:"BrtBeginSXVIs",f:parsenoop},284:{n:"BrtEndSXVIs",f:parsenoop},285:{n:"BrtBeginSXVD",f:parsenoop},286:{n:"BrtEndSXVD",f:parsenoop},287:{n:"BrtBeginSXVDs",f:parsenoop},288:{n:"BrtEndSXVDs",f:parsenoop},289:{n:"BrtBeginSXPI",f:parsenoop},290:{n:"BrtEndSXPI",f:parsenoop},291:{n:"BrtBeginSXPIs",f:parsenoop},292:{n:"BrtEndSXPIs",f:parsenoop},293:{n:"BrtBeginSXDI",f:parsenoop},294:{n:"BrtEndSXDI",f:parsenoop},295:{n:"BrtBeginSXDIs",f:parsenoop},296:{n:"BrtEndSXDIs",f:parsenoop},297:{n:"BrtBeginSXLI",f:parsenoop},298:{n:"BrtEndSXLI",f:parsenoop},299:{n:"BrtBeginSXLIRws",f:parsenoop},300:{n:"BrtEndSXLIRws",f:parsenoop},301:{n:"BrtBeginSXLICols",f:parsenoop},302:{n:"BrtEndSXLICols",f:parsenoop},303:{n:"BrtBeginSXFormat",f:parsenoop},304:{n:"BrtEndSXFormat",f:parsenoop},305:{n:"BrtBeginSXFormats",f:parsenoop},306:{n:"BrtEndSxFormats",f:parsenoop},307:{n:"BrtBeginSxSelect",f:parsenoop},308:{n:"BrtEndSxSelect",f:parsenoop},309:{n:"BrtBeginISXVDRws",f:parsenoop},310:{n:"BrtEndISXVDRws",f:parsenoop},311:{n:"BrtBeginISXVDCols",f:parsenoop},312:{n:"BrtEndISXVDCols",f:parsenoop},313:{n:"BrtEndSXLocation",f:parsenoop},314:{n:"BrtBeginSXLocation",f:parsenoop},315:{n:"BrtEndSXView",f:parsenoop},316:{n:"BrtBeginSXTHs",f:parsenoop},317:{n:"BrtEndSXTHs",f:parsenoop},318:{n:"BrtBeginSXTH",f:parsenoop},319:{n:"BrtEndSXTH",f:parsenoop},320:{n:"BrtBeginISXTHRws",f:parsenoop},321:{n:"BrtEndISXTHRws",f:parsenoop},322:{n:"BrtBeginISXTHCols",f:parsenoop},323:{n:"BrtEndISXTHCols",f:parsenoop},324:{n:"BrtBeginSXTDMPS",f:parsenoop},325:{n:"BrtEndSXTDMPs",f:parsenoop},326:{n:"BrtBeginSXTDMP",f:parsenoop},327:{n:"BrtEndSXTDMP",f:parsenoop},328:{n:"BrtBeginSXTHItems",f:parsenoop},329:{n:"BrtEndSXTHItems",f:parsenoop},330:{n:"BrtBeginSXTHItem",f:parsenoop},331:{n:"BrtEndSXTHItem",f:parsenoop},332:{n:"BrtBeginMetadata",f:parsenoop},333:{n:"BrtEndMetadata",f:parsenoop},334:{n:"BrtBeginEsmdtinfo",f:parsenoop},335:{n:"BrtMdtinfo",f:parsenoop},336:{n:"BrtEndEsmdtinfo",f:parsenoop},337:{n:"BrtBeginEsmdb",f:parsenoop},338:{n:"BrtEndEsmdb",f:parsenoop},339:{n:"BrtBeginEsfmd",f:parsenoop},340:{n:"BrtEndEsfmd",f:parsenoop},341:{n:"BrtBeginSingleCells",f:parsenoop},342:{n:"BrtEndSingleCells",f:parsenoop},343:{n:"BrtBeginList",f:parsenoop},344:{n:"BrtEndList",f:parsenoop},345:{n:"BrtBeginListCols",f:parsenoop},346:{n:"BrtEndListCols",f:parsenoop},347:{n:"BrtBeginListCol",f:parsenoop},348:{n:"BrtEndListCol",f:parsenoop},349:{n:"BrtBeginListXmlCPr",f:parsenoop},350:{n:"BrtEndListXmlCPr",f:parsenoop},351:{n:"BrtListCCFmla",f:parsenoop},352:{n:"BrtListTrFmla",f:parsenoop},353:{n:"BrtBeginExternals",f:parsenoop},354:{n:"BrtEndExternals",f:parsenoop},355:{n:"BrtSupBookSrc",f:parsenoop},357:{n:"BrtSupSelf",f:parsenoop},358:{n:"BrtSupSame",f:parsenoop},359:{n:"BrtSupTabs",f:parsenoop},360:{n:"BrtBeginSupBook",f:parsenoop},361:{n:"BrtPlaceholderName",f:parsenoop},362:{n:"BrtExternSheet",f:parsenoop},363:{n:"BrtExternTableStart",f:parsenoop},364:{n:"BrtExternTableEnd",f:parsenoop},366:{n:"BrtExternRowHdr",f:parsenoop},367:{n:"BrtExternCellBlank",f:parsenoop},368:{n:"BrtExternCellReal",f:parsenoop},369:{n:"BrtExternCellBool",f:parsenoop},370:{n:"BrtExternCellError",f:parsenoop},371:{n:"BrtExternCellString",f:parsenoop},372:{n:"BrtBeginEsmdx",f:parsenoop},373:{n:"BrtEndEsmdx",f:parsenoop},374:{n:"BrtBeginMdxSet",f:parsenoop},375:{n:"BrtEndMdxSet",f:parsenoop},376:{n:"BrtBeginMdxMbrProp",f:parsenoop},377:{n:"BrtEndMdxMbrProp",f:parsenoop},378:{n:"BrtBeginMdxKPI",f:parsenoop},379:{n:"BrtEndMdxKPI",f:parsenoop},380:{n:"BrtBeginEsstr",f:parsenoop},381:{n:"BrtEndEsstr",f:parsenoop},382:{n:"BrtBeginPRFItem",f:parsenoop},383:{n:"BrtEndPRFItem",f:parsenoop},384:{n:"BrtBeginPivotCacheIDs",f:parsenoop},385:{n:"BrtEndPivotCacheIDs",f:parsenoop},386:{n:"BrtBeginPivotCacheID",f:parsenoop},387:{n:"BrtEndPivotCacheID",f:parsenoop},388:{n:"BrtBeginISXVIs",f:parsenoop},389:{n:"BrtEndISXVIs",f:parsenoop},390:{n:"BrtBeginColInfos",f:parsenoop},391:{n:"BrtEndColInfos",f:parsenoop},392:{n:"BrtBeginRwBrk",f:parsenoop},393:{n:"BrtEndRwBrk",f:parsenoop},394:{n:"BrtBeginColBrk",f:parsenoop},395:{n:"BrtEndColBrk",f:parsenoop},396:{n:"BrtBrk",f:parsenoop},397:{n:"BrtUserBookView",f:parsenoop},398:{n:"BrtInfo",f:parsenoop},399:{n:"BrtCUsr",f:parsenoop},400:{n:"BrtUsr",f:parsenoop},401:{n:"BrtBeginUsers",f:parsenoop},403:{n:"BrtEOF",f:parsenoop},404:{n:"BrtUCR",f:parsenoop},405:{n:"BrtRRInsDel",f:parsenoop},406:{n:"BrtRREndInsDel",f:parsenoop},407:{n:"BrtRRMove",f:parsenoop},408:{n:"BrtRREndMove",f:parsenoop},409:{n:"BrtRRChgCell",f:parsenoop},410:{n:"BrtRREndChgCell",f:parsenoop},411:{n:"BrtRRHeader",f:parsenoop},412:{n:"BrtRRUserView",f:parsenoop},413:{n:"BrtRRRenSheet",f:parsenoop},414:{n:"BrtRRInsertSh",f:parsenoop},415:{n:"BrtRRDefName",f:parsenoop},416:{n:"BrtRRNote",f:parsenoop},417:{n:"BrtRRConflict",f:parsenoop},418:{n:"BrtRRTQSIF",f:parsenoop},419:{n:"BrtRRFormat",f:parsenoop},420:{n:"BrtRREndFormat",f:parsenoop},421:{n:"BrtRRAutoFmt",f:parsenoop},422:{n:"BrtBeginUserShViews",f:parsenoop},423:{n:"BrtBeginUserShView",f:parsenoop},424:{n:"BrtEndUserShView",f:parsenoop},425:{n:"BrtEndUserShViews",f:parsenoop},426:{n:"BrtArrFmla",f:parsenoop},427:{n:"BrtShrFmla",f:parsenoop},428:{n:"BrtTable",f:parsenoop},429:{n:"BrtBeginExtConnections",f:parsenoop},430:{n:"BrtEndExtConnections",f:parsenoop},431:{n:"BrtBeginPCDCalcMems",f:parsenoop},432:{n:"BrtEndPCDCalcMems",f:parsenoop},433:{n:"BrtBeginPCDCalcMem",f:parsenoop},434:{n:"BrtEndPCDCalcMem",f:parsenoop},435:{n:"BrtBeginPCDHGLevels",f:parsenoop},436:{n:"BrtEndPCDHGLevels",f:parsenoop},437:{n:"BrtBeginPCDHGLevel",f:parsenoop},438:{n:"BrtEndPCDHGLevel",f:parsenoop},439:{n:"BrtBeginPCDHGLGroups",f:parsenoop},440:{n:"BrtEndPCDHGLGroups",f:parsenoop},441:{n:"BrtBeginPCDHGLGroup",f:parsenoop},442:{n:"BrtEndPCDHGLGroup",f:parsenoop},443:{n:"BrtBeginPCDHGLGMembers",f:parsenoop},444:{n:"BrtEndPCDHGLGMembers",f:parsenoop},445:{n:"BrtBeginPCDHGLGMember",f:parsenoop},446:{n:"BrtEndPCDHGLGMember",f:parsenoop},447:{n:"BrtBeginQSI",f:parsenoop},448:{n:"BrtEndQSI",f:parsenoop},449:{n:"BrtBeginQSIR",f:parsenoop},450:{n:"BrtEndQSIR",f:parsenoop},451:{n:"BrtBeginDeletedNames",f:parsenoop},452:{n:"BrtEndDeletedNames",f:parsenoop},453:{n:"BrtBeginDeletedName",f:parsenoop},454:{n:"BrtEndDeletedName",f:parsenoop},455:{n:"BrtBeginQSIFs",f:parsenoop},456:{n:"BrtEndQSIFs",f:parsenoop},457:{n:"BrtBeginQSIF",f:parsenoop},458:{n:"BrtEndQSIF",f:parsenoop},459:{n:"BrtBeginAutoSortScope",f:parsenoop},460:{n:"BrtEndAutoSortScope",f:parsenoop},461:{n:"BrtBeginConditionalFormatting",f:parsenoop},462:{n:"BrtEndConditionalFormatting",f:parsenoop},463:{n:"BrtBeginCFRule",f:parsenoop},464:{n:"BrtEndCFRule",f:parsenoop},465:{n:"BrtBeginIconSet",f:parsenoop},466:{n:"BrtEndIconSet",f:parsenoop},467:{n:"BrtBeginDatabar",f:parsenoop},468:{n:"BrtEndDatabar",f:parsenoop},469:{n:"BrtBeginColorScale",f:parsenoop},470:{n:"BrtEndColorScale",f:parsenoop},471:{n:"BrtCFVO",f:parsenoop},472:{n:"BrtExternValueMeta",f:parsenoop},473:{n:"BrtBeginColorPalette",f:parsenoop},474:{n:"BrtEndColorPalette",f:parsenoop},475:{n:"BrtIndexedColor",f:parsenoop},476:{n:"BrtMargins",f:parsenoop},477:{n:"BrtPrintOptions",f:parsenoop},478:{n:"BrtPageSetup",f:parsenoop},479:{n:"BrtBeginHeaderFooter",f:parsenoop},480:{n:"BrtEndHeaderFooter",f:parsenoop},481:{n:"BrtBeginSXCrtFormat",f:parsenoop},482:{n:"BrtEndSXCrtFormat",f:parsenoop},483:{n:"BrtBeginSXCrtFormats",f:parsenoop},484:{n:"BrtEndSXCrtFormats",f:parsenoop},485:{n:"BrtWsFmtInfo",f:parsenoop},486:{n:"BrtBeginMgs",f:parsenoop},487:{n:"BrtEndMGs",f:parsenoop},488:{n:"BrtBeginMGMaps",f:parsenoop},489:{n:"BrtEndMGMaps",f:parsenoop},490:{n:"BrtBeginMG",f:parsenoop},491:{n:"BrtEndMG",f:parsenoop},492:{n:"BrtBeginMap",f:parsenoop},493:{n:"BrtEndMap",f:parsenoop},494:{n:"BrtHLink",f:parse_BrtHLink},495:{n:"BrtBeginDCon",f:parsenoop},496:{n:"BrtEndDCon",f:parsenoop},497:{n:"BrtBeginDRefs",f:parsenoop},498:{n:"BrtEndDRefs",f:parsenoop},499:{n:"BrtDRef",f:parsenoop},500:{n:"BrtBeginScenMan",f:parsenoop},501:{n:"BrtEndScenMan",f:parsenoop},502:{n:"BrtBeginSct",f:parsenoop},503:{n:"BrtEndSct",f:parsenoop},504:{n:"BrtSlc",f:parsenoop},505:{n:"BrtBeginDXFs",f:parsenoop},506:{n:"BrtEndDXFs",f:parsenoop},507:{n:"BrtDXF",f:parsenoop},508:{n:"BrtBeginTableStyles",f:parsenoop},509:{n:"BrtEndTableStyles",f:parsenoop},510:{n:"BrtBeginTableStyle",f:parsenoop},511:{n:"BrtEndTableStyle",f:parsenoop},512:{n:"BrtTableStyleElement",f:parsenoop},513:{n:"BrtTableStyleClient",f:parsenoop},514:{n:"BrtBeginVolDeps",f:parsenoop},515:{n:"BrtEndVolDeps",f:parsenoop},516:{n:"BrtBeginVolType",f:parsenoop},517:{n:"BrtEndVolType",f:parsenoop},518:{n:"BrtBeginVolMain",f:parsenoop},519:{n:"BrtEndVolMain",f:parsenoop},520:{n:"BrtBeginVolTopic",f:parsenoop},521:{n:"BrtEndVolTopic",f:parsenoop},522:{n:"BrtVolSubtopic",f:parsenoop},523:{n:"BrtVolRef",f:parsenoop},524:{n:"BrtVolNum",f:parsenoop},525:{n:"BrtVolErr",f:parsenoop},526:{n:"BrtVolStr",f:parsenoop},527:{n:"BrtVolBool",f:parsenoop},528:{n:"BrtBeginCalcChain$",f:parsenoop},529:{n:"BrtEndCalcChain$",f:parsenoop},530:{n:"BrtBeginSortState",f:parsenoop},531:{n:"BrtEndSortState",f:parsenoop},532:{n:"BrtBeginSortCond",f:parsenoop},533:{n:"BrtEndSortCond",f:parsenoop},534:{n:"BrtBookProtection",f:parsenoop},535:{n:"BrtSheetProtection",f:parsenoop},536:{n:"BrtRangeProtection",f:parsenoop},537:{n:"BrtPhoneticInfo",f:parsenoop},538:{n:"BrtBeginECTxtWiz",f:parsenoop},539:{n:"BrtEndECTxtWiz",f:parsenoop},540:{n:"BrtBeginECTWFldInfoLst",f:parsenoop},541:{n:"BrtEndECTWFldInfoLst",f:parsenoop},542:{n:"BrtBeginECTwFldInfo",f:parsenoop},548:{n:"BrtFileSharing",f:parsenoop},549:{n:"BrtOleSize",f:parsenoop},550:{n:"BrtDrawing",f:parsenoop},551:{n:"BrtLegacyDrawing",f:parsenoop},552:{n:"BrtLegacyDrawingHF",f:parsenoop},553:{n:"BrtWebOpt",f:parsenoop},554:{n:"BrtBeginWebPubItems",f:parsenoop},555:{n:"BrtEndWebPubItems",f:parsenoop},556:{n:"BrtBeginWebPubItem",f:parsenoop},557:{n:"BrtEndWebPubItem",f:parsenoop},558:{n:"BrtBeginSXCondFmt",f:parsenoop},559:{n:"BrtEndSXCondFmt",f:parsenoop},560:{n:"BrtBeginSXCondFmts",f:parsenoop},561:{n:"BrtEndSXCondFmts",f:parsenoop},562:{n:"BrtBkHim",f:parsenoop},564:{n:"BrtColor",f:parsenoop},565:{n:"BrtBeginIndexedColors",f:parsenoop},566:{n:"BrtEndIndexedColors",f:parsenoop},569:{n:"BrtBeginMRUColors",f:parsenoop},570:{n:"BrtEndMRUColors",f:parsenoop},572:{n:"BrtMRUColor",f:parsenoop},573:{n:"BrtBeginDVals",f:parsenoop},574:{n:"BrtEndDVals",f:parsenoop},577:{n:"BrtSupNameStart",f:parsenoop},578:{n:"BrtSupNameValueStart",f:parsenoop},579:{n:"BrtSupNameValueEnd",f:parsenoop},580:{n:"BrtSupNameNum",f:parsenoop},581:{n:"BrtSupNameErr",f:parsenoop},582:{n:"BrtSupNameSt",f:parsenoop},583:{n:"BrtSupNameNil",f:parsenoop},584:{n:"BrtSupNameBool",f:parsenoop},585:{n:"BrtSupNameFmla",f:parsenoop},586:{n:"BrtSupNameBits",f:parsenoop},587:{n:"BrtSupNameEnd",f:parsenoop},588:{n:"BrtEndSupBook",f:parsenoop},589:{n:"BrtCellSmartTagProperty",f:parsenoop},590:{n:"BrtBeginCellSmartTag",f:parsenoop},591:{n:"BrtEndCellSmartTag",f:parsenoop},592:{n:"BrtBeginCellSmartTags",f:parsenoop},593:{n:"BrtEndCellSmartTags",f:parsenoop},594:{n:"BrtBeginSmartTags",f:parsenoop},595:{n:"BrtEndSmartTags",f:parsenoop},596:{n:"BrtSmartTagType",f:parsenoop},597:{n:"BrtBeginSmartTagTypes",f:parsenoop},598:{n:"BrtEndSmartTagTypes",f:parsenoop},599:{n:"BrtBeginSXFilters",f:parsenoop},600:{n:"BrtEndSXFilters",f:parsenoop},601:{n:"BrtBeginSXFILTER",f:parsenoop},602:{n:"BrtEndSXFilter",f:parsenoop},603:{n:"BrtBeginFills",f:parsenoop},604:{n:"BrtEndFills",f:parsenoop},605:{n:"BrtBeginCellWatches",f:parsenoop},606:{n:"BrtEndCellWatches",f:parsenoop},607:{n:"BrtCellWatch",f:parsenoop},608:{n:"BrtBeginCRErrs",f:parsenoop},609:{n:"BrtEndCRErrs",f:parsenoop},610:{n:"BrtCrashRecErr",f:parsenoop},611:{n:"BrtBeginFonts",f:parsenoop},612:{n:"BrtEndFonts",f:parsenoop},613:{n:"BrtBeginBorders",f:parsenoop},614:{n:"BrtEndBorders",f:parsenoop},615:{n:"BrtBeginFmts",f:parsenoop},616:{n:"BrtEndFmts",f:parsenoop},617:{n:"BrtBeginCellXFs",f:parsenoop},618:{n:"BrtEndCellXFs",f:parsenoop},619:{n:"BrtBeginStyles",f:parsenoop},620:{n:"BrtEndStyles",f:parsenoop},625:{n:"BrtBigName",f:parsenoop},626:{n:"BrtBeginCellStyleXFs",f:parsenoop},627:{n:"BrtEndCellStyleXFs",f:parsenoop},628:{n:"BrtBeginComments",f:parsenoop},629:{n:"BrtEndComments",f:parsenoop},630:{n:"BrtBeginCommentAuthors",f:parsenoop},631:{n:"BrtEndCommentAuthors",f:parsenoop},632:{n:"BrtCommentAuthor",f:parse_BrtCommentAuthor},633:{n:"BrtBeginCommentList",f:parsenoop},634:{n:"BrtEndCommentList",f:parsenoop},635:{n:"BrtBeginComment",f:parse_BrtBeginComment},636:{n:"BrtEndComment",f:parsenoop},637:{n:"BrtCommentText",f:parse_BrtCommentText},638:{n:"BrtBeginOleObjects",f:parsenoop},639:{n:"BrtOleObject",f:parsenoop},640:{n:"BrtEndOleObjects",f:parsenoop},641:{n:"BrtBeginSxrules",f:parsenoop},642:{n:"BrtEndSxRules",f:parsenoop},643:{n:"BrtBeginActiveXControls",f:parsenoop},644:{n:"BrtActiveX",f:parsenoop},645:{n:"BrtEndActiveXControls",f:parsenoop},646:{n:"BrtBeginPCDSDTCEMembersSortBy",f:parsenoop},648:{n:"BrtBeginCellIgnoreECs",f:parsenoop},649:{n:"BrtCellIgnoreEC",f:parsenoop},650:{n:"BrtEndCellIgnoreECs",f:parsenoop},651:{n:"BrtCsProp",f:parsenoop},652:{n:"BrtCsPageSetup",f:parsenoop},653:{n:"BrtBeginUserCsViews",f:parsenoop},654:{n:"BrtEndUserCsViews",f:parsenoop},655:{n:"BrtBeginUserCsView",f:parsenoop},656:{n:"BrtEndUserCsView",f:parsenoop},657:{n:"BrtBeginPcdSFCIEntries",f:parsenoop},658:{n:"BrtEndPCDSFCIEntries",f:parsenoop},659:{n:"BrtPCDSFCIEntry",f:parsenoop},660:{n:"BrtBeginListParts",f:parsenoop},661:{n:"BrtListPart",f:parsenoop},662:{n:"BrtEndListParts",f:parsenoop},663:{n:"BrtSheetCalcProp",f:parsenoop},664:{n:"BrtBeginFnGroup",f:parsenoop},665:{n:"BrtFnGroup",f:parsenoop},666:{n:"BrtEndFnGroup",f:parsenoop},667:{n:"BrtSupAddin",f:parsenoop},668:{n:"BrtSXTDMPOrder",f:parsenoop},669:{n:"BrtCsProtection",f:parsenoop},671:{n:"BrtBeginWsSortMap",f:parsenoop},672:{n:"BrtEndWsSortMap",f:parsenoop},673:{n:"BrtBeginRRSort",f:parsenoop},674:{n:"BrtEndRRSort",f:parsenoop},675:{n:"BrtRRSortItem",f:parsenoop},676:{n:"BrtFileSharingIso",f:parsenoop},677:{n:"BrtBookProtectionIso",f:parsenoop},678:{n:"BrtSheetProtectionIso",f:parsenoop},679:{n:"BrtCsProtectionIso",f:parsenoop},680:{n:"BrtRangeProtectionIso",f:parsenoop},1024:{n:"BrtRwDescent",f:parsenoop},1025:{n:"BrtKnownFonts",f:parsenoop},1026:{n:"BrtBeginSXTupleSet",f:parsenoop},1027:{n:"BrtEndSXTupleSet",f:parsenoop},1028:{n:"BrtBeginSXTupleSetHeader",f:parsenoop},1029:{n:"BrtEndSXTupleSetHeader",f:parsenoop},1030:{n:"BrtSXTupleSetHeaderItem",f:parsenoop},1031:{n:"BrtBeginSXTupleSetData",f:parsenoop},1032:{n:"BrtEndSXTupleSetData",f:parsenoop},1033:{n:"BrtBeginSXTupleSetRow",f:parsenoop},1034:{n:"BrtEndSXTupleSetRow",f:parsenoop},1035:{n:"BrtSXTupleSetRowItem",f:parsenoop},1036:{n:"BrtNameExt",f:parsenoop},1037:{n:"BrtPCDH14",f:parsenoop},1038:{n:"BrtBeginPCDCalcMem14",f:parsenoop},1039:{n:"BrtEndPCDCalcMem14",f:parsenoop},1040:{n:"BrtSXTH14",f:parsenoop},1041:{n:"BrtBeginSparklineGroup",f:parsenoop},1042:{n:"BrtEndSparklineGroup",f:parsenoop},1043:{n:"BrtSparkline",f:parsenoop},1044:{n:"BrtSXDI14",f:parsenoop},1045:{n:"BrtWsFmtInfoEx14",f:parsenoop},1046:{n:"BrtBeginConditionalFormatting14",f:parsenoop},1047:{n:"BrtEndConditionalFormatting14",f:parsenoop},1048:{n:"BrtBeginCFRule14",f:parsenoop},1049:{n:"BrtEndCFRule14",f:parsenoop},1050:{n:"BrtCFVO14",f:parsenoop},1051:{n:"BrtBeginDatabar14",f:parsenoop},1052:{n:"BrtBeginIconSet14",f:parsenoop},1053:{n:"BrtDVal14",f:parsenoop},1054:{n:"BrtBeginDVals14",f:parsenoop},1055:{n:"BrtColor14",f:parsenoop},1056:{n:"BrtBeginSparklines",f:parsenoop},1057:{n:"BrtEndSparklines",f:parsenoop},1058:{n:"BrtBeginSparklineGroups",f:parsenoop},1059:{n:"BrtEndSparklineGroups",f:parsenoop},1061:{n:"BrtSXVD14",f:parsenoop},1062:{n:"BrtBeginSxview14",f:parsenoop},1063:{n:"BrtEndSxview14",f:parsenoop},1066:{n:"BrtBeginPCD14",f:parsenoop},1067:{n:"BrtEndPCD14",f:parsenoop},1068:{n:"BrtBeginExtConn14",f:parsenoop},1069:{n:"BrtEndExtConn14",f:parsenoop},1070:{n:"BrtBeginSlicerCacheIDs",f:parsenoop},1071:{n:"BrtEndSlicerCacheIDs",f:parsenoop},1072:{n:"BrtBeginSlicerCacheID",f:parsenoop},1073:{n:"BrtEndSlicerCacheID",f:parsenoop},1075:{n:"BrtBeginSlicerCache",f:parsenoop},1076:{n:"BrtEndSlicerCache",f:parsenoop},1077:{n:"BrtBeginSlicerCacheDef",f:parsenoop},1078:{n:"BrtEndSlicerCacheDef",f:parsenoop},1079:{n:"BrtBeginSlicersEx",f:parsenoop},1080:{n:"BrtEndSlicersEx",f:parsenoop},1081:{n:"BrtBeginSlicerEx",f:parsenoop},1082:{n:"BrtEndSlicerEx",f:parsenoop},1083:{n:"BrtBeginSlicer",f:parsenoop},1084:{n:"BrtEndSlicer",f:parsenoop},1085:{n:"BrtSlicerCachePivotTables",f:parsenoop},1086:{n:"BrtBeginSlicerCacheOlapImpl",f:parsenoop},1087:{n:"BrtEndSlicerCacheOlapImpl",f:parsenoop},1088:{n:"BrtBeginSlicerCacheLevelsData",f:parsenoop},1089:{n:"BrtEndSlicerCacheLevelsData",f:parsenoop},1090:{n:"BrtBeginSlicerCacheLevelData",f:parsenoop},1091:{n:"BrtEndSlicerCacheLevelData",f:parsenoop},1092:{n:"BrtBeginSlicerCacheSiRanges",f:parsenoop},1093:{n:"BrtEndSlicerCacheSiRanges",f:parsenoop},1094:{n:"BrtBeginSlicerCacheSiRange",f:parsenoop},1095:{n:"BrtEndSlicerCacheSiRange",f:parsenoop},1096:{n:"BrtSlicerCacheOlapItem",f:parsenoop},1097:{n:"BrtBeginSlicerCacheSelections",f:parsenoop},1098:{n:"BrtSlicerCacheSelection",f:parsenoop},1099:{n:"BrtEndSlicerCacheSelections",f:parsenoop},1100:{n:"BrtBeginSlicerCacheNative",f:parsenoop},1101:{n:"BrtEndSlicerCacheNative",f:parsenoop},1102:{n:"BrtSlicerCacheNativeItem",f:parsenoop},1103:{n:"BrtRangeProtection14",f:parsenoop},1104:{n:"BrtRangeProtectionIso14",f:parsenoop},1105:{n:"BrtCellIgnoreEC14",f:parsenoop},1111:{n:"BrtList14",f:parsenoop},1112:{n:"BrtCFIcon",f:parsenoop},1113:{n:"BrtBeginSlicerCachesPivotCacheIDs",f:parsenoop},1114:{n:"BrtEndSlicerCachesPivotCacheIDs",f:parsenoop},1115:{n:"BrtBeginSlicers",f:parsenoop},1116:{n:"BrtEndSlicers",f:parsenoop},1117:{n:"BrtWbProp14",f:parsenoop},1118:{n:"BrtBeginSXEdit",f:parsenoop},1119:{n:"BrtEndSXEdit",f:parsenoop},1120:{n:"BrtBeginSXEdits",f:parsenoop},1121:{n:"BrtEndSXEdits",f:parsenoop},1122:{n:"BrtBeginSXChange",f:parsenoop},1123:{n:"BrtEndSXChange",f:parsenoop},1124:{n:"BrtBeginSXChanges",f:parsenoop},1125:{n:"BrtEndSXChanges",f:parsenoop},1126:{n:"BrtSXTupleItems",f:parsenoop},1128:{n:"BrtBeginSlicerStyle",f:parsenoop},1129:{n:"BrtEndSlicerStyle",f:parsenoop},1130:{n:"BrtSlicerStyleElement",f:parsenoop},1131:{n:"BrtBeginStyleSheetExt14",f:parsenoop},1132:{n:"BrtEndStyleSheetExt14",f:parsenoop},1133:{n:"BrtBeginSlicerCachesPivotCacheID",f:parsenoop},1134:{n:"BrtEndSlicerCachesPivotCacheID",f:parsenoop},1135:{n:"BrtBeginConditionalFormattings",f:parsenoop},1136:{n:"BrtEndConditionalFormattings",f:parsenoop},1137:{n:"BrtBeginPCDCalcMemExt",f:parsenoop},1138:{n:"BrtEndPCDCalcMemExt",f:parsenoop},1139:{n:"BrtBeginPCDCalcMemsExt",f:parsenoop},1140:{n:"BrtEndPCDCalcMemsExt",f:parsenoop},1141:{n:"BrtPCDField14",f:parsenoop},1142:{n:"BrtBeginSlicerStyles",f:parsenoop},1143:{n:"BrtEndSlicerStyles",f:parsenoop},1144:{n:"BrtBeginSlicerStyleElements",f:parsenoop},1145:{n:"BrtEndSlicerStyleElements",f:parsenoop},1146:{n:"BrtCFRuleExt",f:parsenoop},1147:{n:"BrtBeginSXCondFmt14",f:parsenoop},1148:{n:"BrtEndSXCondFmt14",f:parsenoop},1149:{n:"BrtBeginSXCondFmts14",f:parsenoop},1150:{n:"BrtEndSXCondFmts14",f:parsenoop},1152:{n:"BrtBeginSortCond14",f:parsenoop},1153:{n:"BrtEndSortCond14",f:parsenoop},1154:{n:"BrtEndDVals14",f:parsenoop},1155:{n:"BrtEndIconSet14",f:parsenoop},1156:{n:"BrtEndDatabar14",f:parsenoop},1157:{n:"BrtBeginColorScale14",f:parsenoop},1158:{n:"BrtEndColorScale14",f:parsenoop},1159:{n:"BrtBeginSxrules14",f:parsenoop},1160:{n:"BrtEndSxrules14",f:parsenoop},1161:{n:"BrtBeginPRule14",f:parsenoop},1162:{n:"BrtEndPRule14",f:parsenoop},1163:{n:"BrtBeginPRFilters14",f:parsenoop},1164:{n:"BrtEndPRFilters14",f:parsenoop},1165:{n:"BrtBeginPRFilter14",f:parsenoop},1166:{n:"BrtEndPRFilter14",f:parsenoop},1167:{n:"BrtBeginPRFItem14",f:parsenoop},1168:{n:"BrtEndPRFItem14",f:parsenoop},1169:{n:"BrtBeginCellIgnoreECs14",f:parsenoop},1170:{n:"BrtEndCellIgnoreECs14",f:parsenoop},1171:{n:"BrtDxf14",f:parsenoop},1172:{n:"BrtBeginDxF14s",f:parsenoop},1173:{n:"BrtEndDxf14s",f:parsenoop},1177:{n:"BrtFilter14",f:parsenoop},1178:{n:"BrtBeginCustomFilters14",f:parsenoop},1180:{n:"BrtCustomFilter14",f:parsenoop},1181:{n:"BrtIconFilter14",f:parsenoop},1182:{n:"BrtPivotCacheConnectionName",f:parsenoop},2048:{n:"BrtBeginDecoupledPivotCacheIDs",f:parsenoop},2049:{n:"BrtEndDecoupledPivotCacheIDs",f:parsenoop},2050:{n:"BrtDecoupledPivotCacheID",f:parsenoop},2051:{n:"BrtBeginPivotTableRefs",f:parsenoop},2052:{n:"BrtEndPivotTableRefs",f:parsenoop},2053:{n:"BrtPivotTableRef",f:parsenoop},2054:{n:"BrtSlicerCacheBookPivotTables",f:parsenoop},2055:{n:"BrtBeginSxvcells",f:parsenoop},2056:{n:"BrtEndSxvcells",f:parsenoop},2057:{n:"BrtBeginSxRow",f:parsenoop},2058:{n:"BrtEndSxRow",f:parsenoop},2060:{n:"BrtPcdCalcMem15",f:parsenoop},2067:{n:"BrtQsi15",f:parsenoop},2068:{n:"BrtBeginWebExtensions",f:parsenoop},2069:{n:"BrtEndWebExtensions",f:parsenoop},2070:{n:"BrtWebExtension",f:parsenoop},2071:{n:"BrtAbsPath15",f:parsenoop},2072:{n:"BrtBeginPivotTableUISettings",f:parsenoop},2073:{n:"BrtEndPivotTableUISettings",f:parsenoop},2075:{n:"BrtTableSlicerCacheIDs",f:parsenoop},2076:{n:"BrtTableSlicerCacheID",f:parsenoop},2077:{n:"BrtBeginTableSlicerCache",f:parsenoop},2078:{n:"BrtEndTableSlicerCache",f:parsenoop},2079:{n:"BrtSxFilter15",f:parsenoop},2080:{n:"BrtBeginTimelineCachePivotCacheIDs",f:parsenoop},2081:{n:"BrtEndTimelineCachePivotCacheIDs",f:parsenoop},2082:{n:"BrtTimelineCachePivotCacheID",f:parsenoop},2083:{n:"BrtBeginTimelineCacheIDs",f:parsenoop},2084:{n:"BrtEndTimelineCacheIDs",f:parsenoop},2085:{n:"BrtBeginTimelineCacheID",f:parsenoop},2086:{n:"BrtEndTimelineCacheID",f:parsenoop},2087:{n:"BrtBeginTimelinesEx",f:parsenoop},2088:{n:"BrtEndTimelinesEx",f:parsenoop},2089:{n:"BrtBeginTimelineEx",f:parsenoop},2090:{n:"BrtEndTimelineEx",f:parsenoop},2091:{n:"BrtWorkBookPr15",f:parsenoop},2092:{n:"BrtPCDH15",f:parsenoop},2093:{n:"BrtBeginTimelineStyle",f:parsenoop},2094:{n:"BrtEndTimelineStyle",f:parsenoop},2095:{n:"BrtTimelineStyleElement",f:parsenoop},2096:{n:"BrtBeginTimelineStylesheetExt15",f:parsenoop},2097:{n:"BrtEndTimelineStylesheetExt15",f:parsenoop},2098:{n:"BrtBeginTimelineStyles",f:parsenoop},2099:{n:"BrtEndTimelineStyles",f:parsenoop},2100:{n:"BrtBeginTimelineStyleElements",f:parsenoop},2101:{n:"BrtEndTimelineStyleElements",f:parsenoop},2102:{n:"BrtDxf15",f:parsenoop},2103:{n:"BrtBeginDxfs15",f:parsenoop},2104:{n:"brtEndDxfs15",f:parsenoop},2105:{n:"BrtSlicerCacheHideItemsWithNoData",f:parsenoop},2106:{n:"BrtBeginItemUniqueNames",f:parsenoop},2107:{n:"BrtEndItemUniqueNames",f:parsenoop},2108:{n:"BrtItemUniqueName",f:parsenoop},2109:{n:"BrtBeginExtConn15",f:parsenoop},2110:{n:"BrtEndExtConn15",f:parsenoop},2111:{n:"BrtBeginOledbPr15",f:parsenoop},2112:{n:"BrtEndOledbPr15",f:parsenoop},2113:{n:"BrtBeginDataFeedPr15",f:parsenoop},2114:{n:"BrtEndDataFeedPr15",f:parsenoop},2115:{n:"BrtTextPr15",f:parsenoop},2116:{n:"BrtRangePr15",f:parsenoop},2117:{n:"BrtDbCommand15",f:parsenoop},2118:{n:"BrtBeginDbTables15",f:parsenoop},2119:{n:"BrtEndDbTables15",f:parsenoop},2120:{n:"BrtDbTable15",f:parsenoop},2121:{n:"BrtBeginDataModel",f:parsenoop},2122:{n:"BrtEndDataModel",f:parsenoop},2123:{n:"BrtBeginModelTables",f:parsenoop},2124:{n:"BrtEndModelTables",f:parsenoop},2125:{n:"BrtModelTable",f:parsenoop},2126:{n:"BrtBeginModelRelationships",f:parsenoop},2127:{n:"BrtEndModelRelationships",f:parsenoop},2128:{n:"BrtModelRelationship",f:parsenoop},2129:{n:"BrtBeginECTxtWiz15",f:parsenoop},2130:{n:"BrtEndECTxtWiz15",f:parsenoop},2131:{n:"BrtBeginECTWFldInfoLst15",f:parsenoop},2132:{n:"BrtEndECTWFldInfoLst15",f:parsenoop},2133:{n:"BrtBeginECTWFldInfo15",f:parsenoop},2134:{n:"BrtFieldListActiveItem",f:parsenoop},2135:{n:"BrtPivotCacheIdVersion",f:parsenoop},2136:{n:"BrtSXDI15",f:parsenoop},65535:{n:"",f:parsenoop}};var evert_RE=evert_key(XLSBRecordEnum,"n");var XLSRecordEnum={3:{n:"BIFF2NUM",f:parse_BIFF2NUM},4:{n:"BIFF2STR",f:parse_BIFF2STR},6:{n:"Formula",f:parse_Formula},9:{n:"BOF",f:parse_BOF},10:{n:"EOF",f:parse_EOF},12:{n:"CalcCount",f:parse_CalcCount},13:{n:"CalcMode",f:parse_CalcMode},14:{n:"CalcPrecision",f:parse_CalcPrecision},15:{n:"CalcRefMode",f:parse_CalcRefMode},16:{n:"CalcDelta",f:parse_CalcDelta},17:{n:"CalcIter",f:parse_CalcIter},18:{n:"Protect",f:parse_Protect},19:{n:"Password",f:parse_Password},20:{n:"Header",f:parse_Header},21:{n:"Footer",f:parse_Footer},23:{n:"ExternSheet",f:parse_ExternSheet},24:{n:"Lbl",f:parse_Lbl},25:{n:"WinProtect",f:parse_WinProtect},26:{n:"VerticalPageBreaks",f:parse_VerticalPageBreaks},27:{n:"HorizontalPageBreaks",f:parse_HorizontalPageBreaks},28:{n:"Note",f:parse_Note},29:{n:"Selection",f:parse_Selection},34:{n:"Date1904",f:parse_Date1904},35:{n:"ExternName",f:parse_ExternName},38:{n:"LeftMargin",f:parse_LeftMargin},39:{n:"RightMargin",f:parse_RightMargin},40:{n:"TopMargin",f:parse_TopMargin},41:{n:"BottomMargin",f:parse_BottomMargin},42:{n:"PrintRowCol",f:parse_PrintRowCol},43:{n:"PrintGrid",f:parse_PrintGrid},47:{n:"FilePass",f:parse_FilePass},49:{n:"Font",f:parse_Font},51:{n:"PrintSize",f:parse_PrintSize},60:{n:"Continue",f:parse_Continue},61:{n:"Window1",f:parse_Window1},64:{n:"Backup",f:parse_Backup},65:{n:"Pane",f:parse_Pane},66:{n:"CodePage",f:parse_CodePage},77:{n:"Pls",f:parse_Pls},80:{n:"DCon",f:parse_DCon},81:{n:"DConRef",f:parse_DConRef},82:{n:"DConName",f:parse_DConName},85:{n:"DefColWidth",f:parse_DefColWidth},89:{n:"XCT",f:parse_XCT},90:{n:"CRN",f:parse_CRN},91:{n:"FileSharing",f:parse_FileSharing},92:{n:"WriteAccess",f:parse_WriteAccess},93:{n:"Obj",f:parse_Obj},94:{n:"Uncalced",f:parse_Uncalced},95:{n:"CalcSaveRecalc",f:parse_CalcSaveRecalc},96:{n:"Template",f:parse_Template},97:{n:"Intl",f:parse_Intl},99:{n:"ObjProtect",f:parse_ObjProtect},125:{n:"ColInfo",f:parse_ColInfo},128:{n:"Guts",f:parse_Guts},129:{n:"WsBool",f:parse_WsBool},130:{n:"GridSet",f:parse_GridSet},131:{n:"HCenter",f:parse_HCenter},132:{n:"VCenter",f:parse_VCenter},133:{n:"BoundSheet8",f:parse_BoundSheet8},134:{n:"WriteProtect",f:parse_WriteProtect},140:{n:"Country",f:parse_Country},141:{n:"HideObj",f:parse_HideObj},144:{n:"Sort",f:parse_Sort},146:{n:"Palette",f:parse_Palette},151:{n:"Sync",f:parse_Sync},
+152:{n:"LPr",f:parse_LPr},153:{n:"DxGCol",f:parse_DxGCol},154:{n:"FnGroupName",f:parse_FnGroupName},155:{n:"FilterMode",f:parse_FilterMode},156:{n:"BuiltInFnGroupCount",f:parse_BuiltInFnGroupCount},157:{n:"AutoFilterInfo",f:parse_AutoFilterInfo},158:{n:"AutoFilter",f:parse_AutoFilter},160:{n:"Scl",f:parse_Scl},161:{n:"Setup",f:parse_Setup},174:{n:"ScenMan",f:parse_ScenMan},175:{n:"SCENARIO",f:parse_SCENARIO},176:{n:"SxView",f:parse_SxView},177:{n:"Sxvd",f:parse_Sxvd},178:{n:"SXVI",f:parse_SXVI},180:{n:"SxIvd",f:parse_SxIvd},181:{n:"SXLI",f:parse_SXLI},182:{n:"SXPI",f:parse_SXPI},184:{n:"DocRoute",f:parse_DocRoute},185:{n:"RecipName",f:parse_RecipName},189:{n:"MulRk",f:parse_MulRk},190:{n:"MulBlank",f:parse_MulBlank},193:{n:"Mms",f:parse_Mms},197:{n:"SXDI",f:parse_SXDI},198:{n:"SXDB",f:parse_SXDB},199:{n:"SXFDB",f:parse_SXFDB},200:{n:"SXDBB",f:parse_SXDBB},201:{n:"SXNum",f:parse_SXNum},202:{n:"SxBool",f:parse_SxBool},203:{n:"SxErr",f:parse_SxErr},204:{n:"SXInt",f:parse_SXInt},205:{n:"SXString",f:parse_SXString},206:{n:"SXDtr",f:parse_SXDtr},207:{n:"SxNil",f:parse_SxNil},208:{n:"SXTbl",f:parse_SXTbl},209:{n:"SXTBRGIITM",f:parse_SXTBRGIITM},210:{n:"SxTbpg",f:parse_SxTbpg},211:{n:"ObProj",f:parse_ObProj},213:{n:"SXStreamID",f:parse_SXStreamID},215:{n:"DBCell",f:parse_DBCell},216:{n:"SXRng",f:parse_SXRng},217:{n:"SxIsxoper",f:parse_SxIsxoper},218:{n:"BookBool",f:parse_BookBool},220:{n:"DbOrParamQry",f:parse_DbOrParamQry},221:{n:"ScenarioProtect",f:parse_ScenarioProtect},222:{n:"OleObjectSize",f:parse_OleObjectSize},224:{n:"XF",f:parse_XF},225:{n:"InterfaceHdr",f:parse_InterfaceHdr},226:{n:"InterfaceEnd",f:parse_InterfaceEnd},227:{n:"SXVS",f:parse_SXVS},229:{n:"MergeCells",f:parse_MergeCells},233:{n:"BkHim",f:parse_BkHim},235:{n:"MsoDrawingGroup",f:parse_MsoDrawingGroup},236:{n:"MsoDrawing",f:parse_MsoDrawing},237:{n:"MsoDrawingSelection",f:parse_MsoDrawingSelection},239:{n:"PhoneticInfo",f:parse_PhoneticInfo},240:{n:"SxRule",f:parse_SxRule},241:{n:"SXEx",f:parse_SXEx},242:{n:"SxFilt",f:parse_SxFilt},244:{n:"SxDXF",f:parse_SxDXF},245:{n:"SxItm",f:parse_SxItm},246:{n:"SxName",f:parse_SxName},247:{n:"SxSelect",f:parse_SxSelect},248:{n:"SXPair",f:parse_SXPair},249:{n:"SxFmla",f:parse_SxFmla},251:{n:"SxFormat",f:parse_SxFormat},252:{n:"SST",f:parse_SST},253:{n:"LabelSst",f:parse_LabelSst},255:{n:"ExtSST",f:parse_ExtSST},256:{n:"SXVDEx",f:parse_SXVDEx},259:{n:"SXFormula",f:parse_SXFormula},290:{n:"SXDBEx",f:parse_SXDBEx},311:{n:"RRDInsDel",f:parse_RRDInsDel},312:{n:"RRDHead",f:parse_RRDHead},315:{n:"RRDChgCell",f:parse_RRDChgCell},317:{n:"RRTabId",f:parse_RRTabId},318:{n:"RRDRenSheet",f:parse_RRDRenSheet},319:{n:"RRSort",f:parse_RRSort},320:{n:"RRDMove",f:parse_RRDMove},330:{n:"RRFormat",f:parse_RRFormat},331:{n:"RRAutoFmt",f:parse_RRAutoFmt},333:{n:"RRInsertSh",f:parse_RRInsertSh},334:{n:"RRDMoveBegin",f:parse_RRDMoveBegin},335:{n:"RRDMoveEnd",f:parse_RRDMoveEnd},336:{n:"RRDInsDelBegin",f:parse_RRDInsDelBegin},337:{n:"RRDInsDelEnd",f:parse_RRDInsDelEnd},338:{n:"RRDConflict",f:parse_RRDConflict},339:{n:"RRDDefName",f:parse_RRDDefName},340:{n:"RRDRstEtxp",f:parse_RRDRstEtxp},351:{n:"LRng",f:parse_LRng},352:{n:"UsesELFs",f:parse_UsesELFs},353:{n:"DSF",f:parse_DSF},401:{n:"CUsr",f:parse_CUsr},402:{n:"CbUsr",f:parse_CbUsr},403:{n:"UsrInfo",f:parse_UsrInfo},404:{n:"UsrExcl",f:parse_UsrExcl},405:{n:"FileLock",f:parse_FileLock},406:{n:"RRDInfo",f:parse_RRDInfo},407:{n:"BCUsrs",f:parse_BCUsrs},408:{n:"UsrChk",f:parse_UsrChk},425:{n:"UserBView",f:parse_UserBView},426:{n:"UserSViewBegin",f:parse_UserSViewBegin},427:{n:"UserSViewEnd",f:parse_UserSViewEnd},428:{n:"RRDUserView",f:parse_RRDUserView},429:{n:"Qsi",f:parse_Qsi},430:{n:"SupBook",f:parse_SupBook},431:{n:"Prot4Rev",f:parse_Prot4Rev},432:{n:"CondFmt",f:parse_CondFmt},433:{n:"CF",f:parse_CF},434:{n:"DVal",f:parse_DVal},437:{n:"DConBin",f:parse_DConBin},438:{n:"TxO",f:parse_TxO},439:{n:"RefreshAll",f:parse_RefreshAll},440:{n:"HLink",f:parse_HLink},441:{n:"Lel",f:parse_Lel},442:{n:"CodeName",f:parse_XLSCodeName},443:{n:"SXFDBType",f:parse_SXFDBType},444:{n:"Prot4RevPass",f:parse_Prot4RevPass},445:{n:"ObNoMacros",f:parse_ObNoMacros},446:{n:"Dv",f:parse_Dv},448:{n:"Excel9File",f:parse_Excel9File},449:{n:"RecalcId",f:parse_RecalcId,r:2},450:{n:"EntExU2",f:parse_EntExU2},512:{n:"Dimensions",f:parse_Dimensions},513:{n:"Blank",f:parse_Blank},515:{n:"Number",f:parse_Number},516:{n:"Label",f:parse_Label},517:{n:"BoolErr",f:parse_BoolErr},519:{n:"String",f:parse_String},520:{n:"Row",f:parse_Row},523:{n:"Index",f:parse_Index},545:{n:"Array",f:parse_Array},549:{n:"DefaultRowHeight",f:parse_DefaultRowHeight},566:{n:"Table",f:parse_Table},574:{n:"Window2",f:parse_Window2},638:{n:"RK",f:parse_RK},659:{n:"Style",f:parse_Style},1048:{n:"BigName",f:parse_BigName},1054:{n:"Format",f:parse_Format},1084:{n:"ContinueBigName",f:parse_ContinueBigName},1212:{n:"ShrFmla",f:parse_ShrFmla},2048:{n:"HLinkTooltip",f:parse_HLinkTooltip},2049:{n:"WebPub",f:parse_WebPub},2050:{n:"QsiSXTag",f:parse_QsiSXTag},2051:{n:"DBQueryExt",f:parse_DBQueryExt},2052:{n:"ExtString",f:parse_ExtString},2053:{n:"TxtQry",f:parse_TxtQry},2054:{n:"Qsir",f:parse_Qsir},2055:{n:"Qsif",f:parse_Qsif},2056:{n:"RRDTQSIF",f:parse_RRDTQSIF},2057:{n:"BOF",f:parse_BOF},2058:{n:"OleDbConn",f:parse_OleDbConn},2059:{n:"WOpt",f:parse_WOpt},2060:{n:"SXViewEx",f:parse_SXViewEx},2061:{n:"SXTH",f:parse_SXTH},2062:{n:"SXPIEx",f:parse_SXPIEx},2063:{n:"SXVDTEx",f:parse_SXVDTEx},2064:{n:"SXViewEx9",f:parse_SXViewEx9},2066:{n:"ContinueFrt",f:parse_ContinueFrt},2067:{n:"RealTimeData",f:parse_RealTimeData},2128:{n:"ChartFrtInfo",f:parse_ChartFrtInfo},2129:{n:"FrtWrapper",f:parse_FrtWrapper},2130:{n:"StartBlock",f:parse_StartBlock},2131:{n:"EndBlock",f:parse_EndBlock},2132:{n:"StartObject",f:parse_StartObject},2133:{n:"EndObject",f:parse_EndObject},2134:{n:"CatLab",f:parse_CatLab},2135:{n:"YMult",f:parse_YMult},2136:{n:"SXViewLink",f:parse_SXViewLink},2137:{n:"PivotChartBits",f:parse_PivotChartBits},2138:{n:"FrtFontList",f:parse_FrtFontList},2146:{n:"SheetExt",f:parse_SheetExt},2147:{n:"BookExt",f:parse_BookExt,r:12},2148:{n:"SXAddl",f:parse_SXAddl},2149:{n:"CrErr",f:parse_CrErr},2150:{n:"HFPicture",f:parse_HFPicture},2151:{n:"FeatHdr",f:parse_FeatHdr},2152:{n:"Feat",f:parse_Feat},2154:{n:"DataLabExt",f:parse_DataLabExt},2155:{n:"DataLabExtContents",f:parse_DataLabExtContents},2156:{n:"CellWatch",f:parse_CellWatch},2161:{n:"FeatHdr11",f:parse_FeatHdr11},2162:{n:"Feature11",f:parse_Feature11},2164:{n:"DropDownObjIds",f:parse_DropDownObjIds},2165:{n:"ContinueFrt11",f:parse_ContinueFrt11},2166:{n:"DConn",f:parse_DConn},2167:{n:"List12",f:parse_List12},2168:{n:"Feature12",f:parse_Feature12},2169:{n:"CondFmt12",f:parse_CondFmt12},2170:{n:"CF12",f:parse_CF12},2171:{n:"CFEx",f:parse_CFEx},2172:{n:"XFCRC",f:parse_XFCRC,r:12},2173:{n:"XFExt",f:parse_XFExt,r:12},2174:{n:"AutoFilter12",f:parse_AutoFilter12},2175:{n:"ContinueFrt12",f:parse_ContinueFrt12},2180:{n:"MDTInfo",f:parse_MDTInfo},2181:{n:"MDXStr",f:parse_MDXStr},2182:{n:"MDXTuple",f:parse_MDXTuple},2183:{n:"MDXSet",f:parse_MDXSet},2184:{n:"MDXProp",f:parse_MDXProp},2185:{n:"MDXKPI",f:parse_MDXKPI},2186:{n:"MDB",f:parse_MDB},2187:{n:"PLV",f:parse_PLV},2188:{n:"Compat12",f:parse_Compat12,r:12},2189:{n:"DXF",f:parse_DXF},2190:{n:"TableStyles",f:parse_TableStyles,r:12},2191:{n:"TableStyle",f:parse_TableStyle},2192:{n:"TableStyleElement",f:parse_TableStyleElement},2194:{n:"StyleExt",f:parse_StyleExt},2195:{n:"NamePublish",f:parse_NamePublish},2196:{n:"NameCmt",f:parse_NameCmt},2197:{n:"SortData",f:parse_SortData},2198:{n:"Theme",f:parse_Theme,r:12},2199:{n:"GUIDTypeLib",f:parse_GUIDTypeLib},2200:{n:"FnGrp12",f:parse_FnGrp12},2201:{n:"NameFnGrp12",f:parse_NameFnGrp12},2202:{n:"MTRSettings",f:parse_MTRSettings,r:12},2203:{n:"CompressPictures",f:parse_CompressPictures},2204:{n:"HeaderFooter",f:parse_HeaderFooter},2205:{n:"CrtLayout12",f:parse_CrtLayout12},2206:{n:"CrtMlFrt",f:parse_CrtMlFrt},2207:{n:"CrtMlFrtContinue",f:parse_CrtMlFrtContinue},2211:{n:"ForceFullCalculation",f:parse_ForceFullCalculation},2212:{n:"ShapePropsStream",f:parse_ShapePropsStream},2213:{n:"TextPropsStream",f:parse_TextPropsStream},2214:{n:"RichTextStream",f:parse_RichTextStream},2215:{n:"CrtLayout12A",f:parse_CrtLayout12A},4097:{n:"Units",f:parse_Units},4098:{n:"Chart",f:parse_Chart},4099:{n:"Series",f:parse_Series},4102:{n:"DataFormat",f:parse_DataFormat},4103:{n:"LineFormat",f:parse_LineFormat},4105:{n:"MarkerFormat",f:parse_MarkerFormat},4106:{n:"AreaFormat",f:parse_AreaFormat},4107:{n:"PieFormat",f:parse_PieFormat},4108:{n:"AttachedLabel",f:parse_AttachedLabel},4109:{n:"SeriesText",f:parse_SeriesText},4116:{n:"ChartFormat",f:parse_ChartFormat},4117:{n:"Legend",f:parse_Legend},4118:{n:"SeriesList",f:parse_SeriesList},4119:{n:"Bar",f:parse_Bar},4120:{n:"Line",f:parse_Line},4121:{n:"Pie",f:parse_Pie},4122:{n:"Area",f:parse_Area},4123:{n:"Scatter",f:parse_Scatter},4124:{n:"CrtLine",f:parse_CrtLine},4125:{n:"Axis",f:parse_Axis},4126:{n:"Tick",f:parse_Tick},4127:{n:"ValueRange",f:parse_ValueRange},4128:{n:"CatSerRange",f:parse_CatSerRange},4129:{n:"AxisLine",f:parse_AxisLine},4130:{n:"CrtLink",f:parse_CrtLink},4132:{n:"DefaultText",f:parse_DefaultText},4133:{n:"Text",f:parse_Text},4134:{n:"FontX",f:parse_FontX},4135:{n:"ObjectLink",f:parse_ObjectLink},4146:{n:"Frame",f:parse_Frame},4147:{n:"Begin",f:parse_Begin},4148:{n:"End",f:parse_End},4149:{n:"PlotArea",f:parse_PlotArea},4154:{n:"Chart3d",f:parse_Chart3d},4156:{n:"PicF",f:parse_PicF},4157:{n:"DropBar",f:parse_DropBar},4158:{n:"Radar",f:parse_Radar},4159:{n:"Surf",f:parse_Surf},4160:{n:"RadarArea",f:parse_RadarArea},4161:{n:"AxisParent",f:parse_AxisParent},4163:{n:"LegendException",f:parse_LegendException},4164:{n:"ShtProps",f:parse_ShtProps},4165:{n:"SerToCrt",f:parse_SerToCrt},4166:{n:"AxesUsed",f:parse_AxesUsed},4168:{n:"SBaseRef",f:parse_SBaseRef},4170:{n:"SerParent",f:parse_SerParent},4171:{n:"SerAuxTrend",f:parse_SerAuxTrend},4174:{n:"IFmtRecord",f:parse_IFmtRecord},4175:{n:"Pos",f:parse_Pos},4176:{n:"AlRuns",f:parse_AlRuns},4177:{n:"BRAI",f:parse_BRAI},4187:{n:"SerAuxErrBar",f:parse_SerAuxErrBar},4188:{n:"ClrtClient",f:parse_ClrtClient},4189:{n:"SerFmt",f:parse_SerFmt},4191:{n:"Chart3DBarShape",f:parse_Chart3DBarShape},4192:{n:"Fbi",f:parse_Fbi},4193:{n:"BopPop",f:parse_BopPop},4194:{n:"AxcExt",f:parse_AxcExt},4195:{n:"Dat",f:parse_Dat},4196:{n:"PlotGrowth",f:parse_PlotGrowth},4197:{n:"SIIndex",f:parse_SIIndex},4198:{n:"GelFrame",f:parse_GelFrame},4199:{n:"BopPopCustom",f:parse_BopPopCustom},4200:{n:"Fbi2",f:parse_Fbi2},22:{n:"ExternCount",f:parsenoop},126:{n:"RK",f:parsenoop},127:{n:"ImData",f:parsenoop},135:{n:"Addin",f:parsenoop},136:{n:"Edg",f:parsenoop},137:{n:"Pub",f:parsenoop},145:{n:"Sub",f:parsenoop},148:{n:"LHRecord",f:parsenoop},149:{n:"LHNGraph",f:parsenoop},150:{n:"Sound",f:parsenoop},169:{n:"CoordList",f:parsenoop},171:{n:"GCW",f:parsenoop},188:{n:"ShrFmla",f:parsenoop},194:{n:"AddMenu",f:parsenoop},195:{n:"DelMenu",f:parsenoop},214:{n:"RString",f:parsenoop},223:{n:"UDDesc",f:parsenoop},234:{n:"TabIdConf",f:parsenoop},354:{n:"XL5Modify",f:parsenoop},421:{n:"FileSharing2",f:parsenoop},536:{n:"Name",f:parsenoop},547:{n:"ExternName",f:parse_ExternName},561:{n:"Font",f:parsenoop},1030:{n:"Formula",f:parse_Formula},2157:{n:"FeatInfo",f:parsenoop},2163:{n:"FeatInfo11",f:parsenoop},2177:{n:"SXAddl12",f:parsenoop},2240:{n:"AutoWebPub",f:parsenoop},2241:{n:"ListObj",f:parsenoop},2242:{n:"ListField",f:parsenoop},2243:{n:"ListDV",f:parsenoop},2244:{n:"ListCondFmt",f:parsenoop},2245:{n:"ListCF",f:parsenoop},2246:{n:"FMQry",f:parsenoop},2247:{n:"FMSQry",f:parsenoop},2248:{n:"PLV",f:parsenoop},2249:{n:"LnExt",f:parsenoop},2250:{n:"MkrExt",f:parsenoop},2251:{n:"CrtCoopt",f:parsenoop},0:{}};function parse_ods(zip,opts){if(typeof module!=="undefined"&&typeof require!=="undefined"&&typeof ODS==="undefined")ODS=require("./od"+"s");if(typeof ODS==="undefined"||!ODS.parse_ods)throw new Error("Unsupported ODS");return ODS.parse_ods(zip,opts)}function fix_opts_func(defaults){return function fix_opts(opts){for(var i=0;i!=defaults.length;++i){var d=defaults[i];if(opts[d[0]]===undefined)opts[d[0]]=d[1];if(d[2]==="n")opts[d[0]]=Number(opts[d[0]])}}}var fix_read_opts=fix_opts_func([["cellNF",false],["cellHTML",true],["cellFormula",true],["cellStyles",false],["cellDates",false],["sheetStubs",false],["sheetRows",0,"n"],["bookDeps",false],["bookSheets",false],["bookProps",false],["bookFiles",false],["bookVBA",false],["password",""],["WTF",false]]);var fix_write_opts=fix_opts_func([["cellDates",false],["bookSST",false],["bookType","xlsx"],["WTF",false]]);function safe_parse_wbrels(wbrels,sheets){if(!wbrels)return 0;try{wbrels=sheets.map(function pwbr(w){return[w.name,wbrels["!id"][w.id].Target]})}catch(e){return null}return!wbrels||wbrels.length===0?null:wbrels}function safe_parse_ws(zip,path,relsPath,sheet,sheetRels,sheets,opts){try{sheetRels[sheet]=parse_rels(getzipdata(zip,relsPath,true),path);sheets[sheet]=parse_ws(getzipdata(zip,path),path,opts,sheetRels[sheet])}catch(e){if(opts.WTF)throw e}}var nodirs=function nodirs(x){return x.substr(-1)!="/"};function parse_zip(zip,opts){make_ssf(SSF);opts=opts||{};fix_read_opts(opts);reset_cp();if(safegetzipfile(zip,"META-INF/manifest.xml"))return parse_ods(zip,opts);var entries=keys(zip.files).filter(nodirs).sort();var dir=parse_ct(getzipdata(zip,"[Content_Types].xml"),opts);var xlsb=false;var sheets,binname;if(dir.workbooks.length===0){binname="xl/workbook.xml";if(getzipdata(zip,binname,true))dir.workbooks.push(binname)}if(dir.workbooks.length===0){binname="xl/workbook.bin";if(!getzipfile(zip,binname,true))throw new Error("Could not find workbook");dir.workbooks.push(binname);xlsb=true}if(dir.workbooks[0].substr(-3)=="bin")xlsb=true;if(xlsb)set_cp(1200);if(!opts.bookSheets&&!opts.bookProps){strs=[];if(dir.sst)strs=parse_sst(getzipdata(zip,dir.sst.replace(/^\//,"")),dir.sst,opts);themes={};if(opts.cellStyles&&dir.themes.length)themes=parse_theme(getzipdata(zip,dir.themes[0].replace(/^\//,""),true),dir.themes[0],opts);styles={};if(dir.style)styles=parse_sty(getzipdata(zip,dir.style.replace(/^\//,"")),dir.style,opts)}var wb=parse_wb(getzipdata(zip,dir.workbooks[0].replace(/^\//,"")),dir.workbooks[0],opts);var props={},propdata="";if(dir.coreprops.length!==0){propdata=getzipdata(zip,dir.coreprops[0].replace(/^\//,""),true);if(propdata)props=parse_core_props(propdata);if(dir.extprops.length!==0){propdata=getzipdata(zip,dir.extprops[0].replace(/^\//,""),true);if(propdata)parse_ext_props(propdata,props)}}var custprops={};if(!opts.bookSheets||opts.bookProps){if(dir.custprops.length!==0){propdata=getzipdata(zip,dir.custprops[0].replace(/^\//,""),true);if(propdata)custprops=parse_cust_props(propdata,opts)}}var out={};if(opts.bookSheets||opts.bookProps){if(props.Worksheets&&props.SheetNames.length>0)sheets=props.SheetNames;else if(wb.Sheets)sheets=wb.Sheets.map(function pluck(x){return x.name});if(opts.bookProps){out.Props=props;out.Custprops=custprops}if(typeof sheets!=="undefined")out.SheetNames=sheets;if(opts.bookSheets?out.SheetNames:opts.bookProps)return out}sheets={};var deps={};if(opts.bookDeps&&dir.calcchain)deps=parse_cc(getzipdata(zip,dir.calcchain.replace(/^\//,"")),dir.calcchain,opts);var i=0;var sheetRels={};var path,relsPath;if(!props.Worksheets){var wbsheets=wb.Sheets;props.Worksheets=wbsheets.length;props.SheetNames=[];for(var j=0;j!=wbsheets.length;++j){props.SheetNames[j]=wbsheets[j].name}}var wbext=xlsb?"bin":"xml";var wbrelsfile="xl/_rels/workbook."+wbext+".rels";var wbrels=parse_rels(getzipdata(zip,wbrelsfile,true),wbrelsfile);if(wbrels)wbrels=safe_parse_wbrels(wbrels,wb.Sheets);var nmode=getzipdata(zip,"xl/worksheets/sheet.xml",true)?1:0;for(i=0;i!=props.Worksheets;++i){if(wbrels)path="xl/"+wbrels[i][1].replace(/[\/]?xl\//,"");else{path="xl/worksheets/sheet"+(i+1-nmode)+"."+wbext;path=path.replace(/sheet0\./,"sheet.")}relsPath=path.replace(/^(.*)(\/)([^\/]*)$/,"$1/_rels/$3.rels");safe_parse_ws(zip,path,relsPath,props.SheetNames[i],sheetRels,sheets,opts)}if(dir.comments)parse_comments(zip,dir.comments,sheets,sheetRels,opts);out={Directory:dir,Workbook:wb,Props:props,Custprops:custprops,Deps:deps,Sheets:sheets,SheetNames:props.SheetNames,Strings:strs,Styles:styles,Themes:themes,SSF:SSF.get_table()};if(opts.bookFiles){out.keys=entries;out.files=zip.files}if(opts.bookVBA){if(dir.vba.length>0)out.vbaraw=getzipdata(zip,dir.vba[0],true);else if(dir.defaults.bin==="application/vnd.ms-office.vbaProject")out.vbaraw=getzipdata(zip,"xl/vbaProject.bin",true)}return out}function add_rels(rels,rId,f,type,relobj){if(!relobj)relobj={};if(!rels["!id"])rels["!id"]={};relobj.Id="rId"+rId;relobj.Type=type;relobj.Target=f;if(rels["!id"][relobj.Id])throw new Error("Cannot rewrite rId "+rId);rels["!id"][relobj.Id]=relobj;rels[("/"+relobj.Target).replace("//","/")]=relobj}function write_zip(wb,opts){if(wb&&!wb.SSF){wb.SSF=SSF.get_table()}if(wb&&wb.SSF){make_ssf(SSF);SSF.load_table(wb.SSF);opts.revssf=evert_num(wb.SSF);opts.revssf[wb.SSF[65535]]=0}opts.rels={};opts.wbrels={};opts.Strings=[];opts.Strings.Count=0;opts.Strings.Unique=0;var wbext=opts.bookType=="xlsb"?"bin":"xml";var ct={workbooks:[],sheets:[],calcchains:[],themes:[],styles:[],coreprops:[],extprops:[],custprops:[],strs:[],comments:[],vba:[],TODO:[],rels:[],xmlns:""};fix_write_opts(opts=opts||{});var zip=new jszip;var f="",rId=0;opts.cellXfs=[];get_cell_style(opts.cellXfs,{},{revssf:{General:0}});f="docProps/core.xml";zip.file(f,write_core_props(wb.Props,opts));ct.coreprops.push(f);add_rels(opts.rels,2,f,RELS.CORE_PROPS);f="docProps/app.xml";if(!wb.Props)wb.Props={};wb.Props.SheetNames=wb.SheetNames;wb.Props.Worksheets=wb.SheetNames.length;zip.file(f,write_ext_props(wb.Props,opts));ct.extprops.push(f);add_rels(opts.rels,3,f,RELS.EXT_PROPS);if(wb.Custprops!==wb.Props&&keys(wb.Custprops||{}).length>0){f="docProps/custom.xml";zip.file(f,write_cust_props(wb.Custprops,opts));ct.custprops.push(f);add_rels(opts.rels,4,f,RELS.CUST_PROPS)}f="xl/workbook."+wbext;zip.file(f,write_wb(wb,f,opts));ct.workbooks.push(f);add_rels(opts.rels,1,f,RELS.WB);for(rId=1;rId<=wb.SheetNames.length;++rId){f="xl/worksheets/sheet"+rId+"."+wbext;zip.file(f,write_ws(rId-1,f,opts,wb));ct.sheets.push(f);add_rels(opts.wbrels,rId,"worksheets/sheet"+rId+"."+wbext,RELS.WS)}if(opts.Strings!=null&&opts.Strings.length>0){f="xl/sharedStrings."+wbext;zip.file(f,write_sst(opts.Strings,f,opts));ct.strs.push(f);add_rels(opts.wbrels,++rId,"sharedStrings."+wbext,RELS.SST)}f="xl/theme/theme1.xml";zip.file(f,write_theme(opts));ct.themes.push(f);add_rels(opts.wbrels,++rId,"theme/theme1.xml",RELS.THEME);f="xl/styles."+wbext;zip.file(f,write_sty(wb,f,opts));ct.styles.push(f);add_rels(opts.wbrels,++rId,"styles."+wbext,RELS.STY);zip.file("[Content_Types].xml",write_ct(ct,opts));zip.file("_rels/.rels",write_rels(opts.rels));zip.file("xl/_rels/workbook."+wbext+".rels",write_rels(opts.wbrels));return zip}function firstbyte(f,o){switch((o||{}).type||"base64"){case"buffer":return f[0];case"base64":return Base64.decode(f.substr(0,12)).charCodeAt(0);case"binary":return f.charCodeAt(0);case"array":return f[0];default:throw new Error("Unrecognized type "+o.type)}}function read_zip(data,opts){var zip,d=data;var o=opts||{};if(!o.type)o.type=has_buf&&Buffer.isBuffer(data)?"buffer":"base64";switch(o.type){case"base64":zip=new jszip(d,{base64:true});break;case"binary":case"array":zip=new jszip(d,{base64:false});break;case"buffer":zip=new jszip(d);break;case"file":zip=new jszip(d=_fs.readFileSync(data));break;default:throw new Error("Unrecognized type "+o.type)}return parse_zip(zip,o)}function readSync(data,opts){var zip,d=data,isfile=false,n;var o=opts||{};if(!o.type)o.type=has_buf&&Buffer.isBuffer(data)?"buffer":"base64";if(o.type=="file"){isfile=true;o.type="buffer";d=_fs.readFileSync(data)}switch(n=firstbyte(d,o)){case 208:if(isfile)o.type="file";return parse_xlscfb(CFB.read(data,o),o);case 9:return parse_xlscfb(s2a(o.type==="base64"?Base64.decode(data):data),o);case 60:return parse_xlml(d,o);case 80:if(isfile)o.type="file";return read_zip(data,opts);default:throw new Error("Unsupported file "+n)}}function readFileSync(data,opts){var o=opts||{};o.type="file";var wb=readSync(data,o);wb.FILENAME=data;return wb}function write_zip_type(wb,opts){var o=opts||{};style_builder=new StyleBuilder(opts);var z=write_zip(wb,o);switch(o.type){case"base64":return z.generate({type:"base64"});case"binary":return z.generate({type:"string"});case"buffer":return z.generate({type:"nodebuffer"});case"file":return _fs.writeFileSync(o.file,z.generate({type:"nodebuffer"}));default:throw new Error("Unrecognized type "+o.type)}}function writeSync(wb,opts){var o=opts||{};switch(o.bookType){case"xml":return write_xlml(wb,o);default:return write_zip_type(wb,o)}}function writeFileSync(wb,filename,opts){var o=opts||{};o.type="file";o.file=filename;switch(o.file.substr(-5).toLowerCase()){case".xlsx":o.bookType="xlsx";break;case".xlsm":o.bookType="xlsm";break;case".xlsb":o.bookType="xlsb";break;default:switch(o.file.substr(-4).toLowerCase()){case".xls":o.bookType="xls";break;case".xml":o.bookType="xml";break}}return writeSync(wb,o)}function decode_row(rowstr){return parseInt(unfix_row(rowstr),10)-1}function encode_row(row){return""+(row+1)}function fix_row(cstr){return cstr.replace(/([A-Z]|^)(\d+)$/,"$1$$$2")}function unfix_row(cstr){return cstr.replace(/\$(\d+)$/,"$1")}function decode_col(colstr){var c=unfix_col(colstr),d=0,i=0;for(;i!==c.length;++i)d=26*d+c.charCodeAt(i)-64;return d-1}function encode_col(col){var s="";for(++col;col;col=Math.floor((col-1)/26))s=String.fromCharCode((col-1)%26+65)+s;return s}function fix_col(cstr){return cstr.replace(/^([A-Z])/,"$$$1")}function unfix_col(cstr){return cstr.replace(/^\$([A-Z])/,"$1")}function split_cell(cstr){return cstr.replace(/(\$?[A-Z]*)(\$?\d*)/,"$1,$2").split(",")}function decode_cell(cstr){var splt=split_cell(cstr);return{c:decode_col(splt[0]),r:decode_row(splt[1])}}function encode_cell(cell){return encode_col(cell.c)+encode_row(cell.r)}function fix_cell(cstr){return fix_col(fix_row(cstr))}function unfix_cell(cstr){return unfix_col(unfix_row(cstr))}function decode_range(range){var x=range.split(":").map(decode_cell);return{s:x[0],e:x[x.length-1]}}function encode_range(cs,ce){if(ce===undefined||typeof ce==="number")return encode_range(cs.s,cs.e);if(typeof cs!=="string")cs=encode_cell(cs);if(typeof ce!=="string")ce=encode_cell(ce);return cs==ce?cs:cs+":"+ce}function safe_decode_range(range){var o={s:{c:0,r:0},e:{c:0,r:0}};var idx=0,i=0,cc=0;var len=range.length;for(idx=0;i<len;++i){if((cc=range.charCodeAt(i)-64)<1||cc>26)break;idx=26*idx+cc}o.s.c=--idx;for(idx=0;i<len;++i){if((cc=range.charCodeAt(i)-48)<0||cc>9)break;idx=10*idx+cc}o.s.r=--idx;if(i===len||range.charCodeAt(++i)===58){o.e.c=o.s.c;o.e.r=o.s.r;return o}for(idx=0;i!=len;++i){if((cc=range.charCodeAt(i)-64)<1||cc>26)break;idx=26*idx+cc}o.e.c=--idx;for(idx=0;i!=len;++i){if((cc=range.charCodeAt(i)-48)<0||cc>9)break;idx=10*idx+cc}o.e.r=--idx;return o}function safe_format_cell(cell,v){if(cell.z!==undefined)try{return cell.w=SSF.format(cell.z,v)}catch(e){}if(!cell.XF)return v;try{return cell.w=SSF.format(cell.XF.ifmt||0,v)}catch(e){return""+v}}function format_cell(cell,v){if(cell==null||cell.t==null)return"";if(cell.w!==undefined)return cell.w;if(v===undefined)return safe_format_cell(cell,cell.v);return safe_format_cell(cell,v)}function sheet_to_json(sheet,opts){var val,row,range,header=0,offset=1,r,hdr=[],isempty,R,C,v;var o=opts!=null?opts:{};var raw=o.raw;if(sheet==null||sheet["!ref"]==null)return[];range=o.range!==undefined?o.range:sheet["!ref"];if(o.header===1)header=1;else if(o.header==="A")header=2;else if(Array.isArray(o.header))header=3;switch(typeof range){case"string":r=safe_decode_range(range);break;case"number":r=safe_decode_range(sheet["!ref"]);r.s.r=range;break;default:r=range}if(header>0)offset=0;var rr=encode_row(r.s.r);var cols=new Array(r.e.c-r.s.c+1);var out=new Array(r.e.r-r.s.r-offset+1);var outi=0;for(C=r.s.c;C<=r.e.c;++C){cols[C]=encode_col(C);val=sheet[cols[C]+rr];switch(header){case 1:hdr[C]=C;break;case 2:hdr[C]=cols[C];break;case 3:hdr[C]=o.header[C-r.s.c];break;default:if(val===undefined)continue;hdr[C]=format_cell(val)}}for(R=r.s.r+offset;R<=r.e.r;++R){rr=encode_row(R);isempty=true;if(header===1)row=[];else{row={};if(Object.defineProperty)Object.defineProperty(row,"__rowNum__",{value:R,enumerable:false});else row.__rowNum__=R}for(C=r.s.c;C<=r.e.c;++C){val=sheet[cols[C]+rr];if(val===undefined||val.t===undefined)continue;v=val.v;switch(val.t){case"e":continue;case"s":break;case"b":case"n":break;default:throw"unrecognized type "+val.t}if(v!==undefined){row[hdr[C]]=raw?v:format_cell(val,v);isempty=false}}if(isempty===false||header===1)out[outi++]=row}out.length=outi;return out}function sheet_to_row_object_array(sheet,opts){return sheet_to_json(sheet,opts!=null?opts:{})}function sheet_to_csv(sheet,opts){var out="",txt="",qreg=/"/g;var o=opts==null?{}:opts;if(sheet==null||sheet["!ref"]==null)return"";var r=safe_decode_range(sheet["!ref"]);var FS=o.FS!==undefined?o.FS:",",fs=FS.charCodeAt(0);var RS=o.RS!==undefined?o.RS:"\n",rs=RS.charCodeAt(0);var row="",rr="",cols=[];var i=0,cc=0,val;var R=0,C=0;for(C=r.s.c;C<=r.e.c;++C)cols[C]=encode_col(C);for(R=r.s.r;R<=r.e.r;++R){row="";rr=encode_row(R);for(C=r.s.c;C<=r.e.c;++C){val=sheet[cols[C]+rr];txt=val!==undefined?""+format_cell(val):"";for(i=0,cc=0;i!==txt.length;++i)if((cc=txt.charCodeAt(i))===fs||cc===rs||cc===34){txt='"'+txt.replace(qreg,'""')+'"';break}row+=(C===r.s.c?"":FS)+txt}out+=row+RS}return out}var make_csv=sheet_to_csv;function sheet_to_formulae(sheet){var cmds,y="",x,val="";if(sheet==null||sheet["!ref"]==null)return"";var r=safe_decode_range(sheet["!ref"]),rr="",cols=[],C;cmds=new Array((r.e.r-r.s.r+1)*(r.e.c-r.s.c+1));var i=0;for(C=r.s.c;C<=r.e.c;++C)cols[C]=encode_col(C);for(var R=r.s.r;R<=r.e.r;++R){rr=encode_row(R);for(C=r.s.c;C<=r.e.c;++C){y=cols[C]+rr;x=sheet[y];val="";if(x===undefined)continue;if(x.f!=null)val=x.f;else if(x.w!==undefined)val="'"+x.w;else if(x.v===undefined)continue;else val=""+x.v;cmds[i++]=y+"="+val}}cmds.length=i;return cmds}var utils={encode_col:encode_col,encode_row:encode_row,encode_cell:encode_cell,encode_range:encode_range,decode_col:decode_col,decode_row:decode_row,split_cell:split_cell,decode_cell:decode_cell,decode_range:decode_range,format_cell:format_cell,get_formulae:sheet_to_formulae,make_csv:sheet_to_csv,make_json:sheet_to_json,make_formulae:sheet_to_formulae,sheet_to_csv:sheet_to_csv,sheet_to_json:sheet_to_json,sheet_to_formulae:sheet_to_formulae,sheet_to_row_object_array:sheet_to_row_object_array};var XmlNode=function(){function XmlNode(tagName,attributes,children){if(!(this instanceof XmlNode)){return new XmlNode(tagName,attributes,children)}this.tagName=tagName;this._attributes=attributes||{};this._children=children||[];this._prefix="";return this}XmlNode.prototype.createElement=function(){return new XmlNode(arguments)};XmlNode.prototype.children=function(){return this._children};XmlNode.prototype.append=function(node){this._children.push(node);return this};XmlNode.prototype.prefix=function(prefix){if(arguments.length==0){return this._prefix}this._prefix=prefix;return this};XmlNode.prototype.attr=function(attr,value){if(value==undefined){delete this._attributes[attr];return this}if(arguments.length==0){return this._attributes}else if(typeof attr=="string"&&arguments.length==1){return this._attributes.attr[attr]}if(typeof attr=="object"&&arguments.length==1){for(var key in attr){this._attributes[key]=attr[key]}}else if(arguments.length==2&&typeof attr=="string"){this._attributes[attr]=value}return this};var APOS="'";QUOTE='"';var ESCAPED_QUOTE={};ESCAPED_QUOTE[QUOTE]="&quot;";ESCAPED_QUOTE[APOS]="&apos;";XmlNode.prototype.escapeAttributeValue=function(att_value){return'"'+att_value.replace(/\"/g,"&quot;")+'"'};XmlNode.prototype.toXml=function(node){if(!node)node=this;var xml=node._prefix;xml+="<"+node.tagName;if(node._attributes){for(var key in node._attributes){xml+=" "+key+"="+this.escapeAttributeValue(""+node._attributes[key])+""}}if(node._children&&node._children.length>0){xml+=">";for(var i=0;i<node._children.length;i++){xml+=this.toXml(node._children[i])}xml+="</"+node.tagName+">"}else{xml+="/>"}return xml};return XmlNode}();var StyleBuilder=function(options){var customNumFmtId=164;var table_fmt={0:"General",1:"0",2:"0.00",3:"#,##0",4:"#,##0.00",9:"0%",10:"0.00%",11:"0.00E+00",12:"# ?/?",13:"# ??/??",14:"m/d/yy",15:"d-mmm-yy",16:"d-mmm",17:"mmm-yy",18:"h:mm AM/PM",19:"h:mm:ss AM/PM",20:"h:mm",21:"h:mm:ss",22:"m/d/yy h:mm",37:"#,##0 ;(#,##0)",38:"#,##0 ;[Red](#,##0)",39:"#,##0.00;(#,##0.00)",40:"#,##0.00;[Red](#,##0.00)",45:"mm:ss",46:"[h]:mm:ss",47:"mmss.0",48:"##0.0E+0",49:"@",56:'"涓婂崍/涓嬪崍 "hh"鏅�"mm"鍒�"ss"绉� "'};var fmt_table={};for(var idx in table_fmt){fmt_table[table_fmt[idx]]=idx}_hashIndex={};_listIndex=[];return{initialize:function(options){this.$fonts=XmlNode("fonts").attr("count",0).attr("x14ac:knownFonts","1");this.$fills=XmlNode("fills").attr("count",0);this.$borders=XmlNode("borders").attr("count",0);this.$numFmts=XmlNode("numFmts").attr("count",0);this.$cellStyleXfs=XmlNode("cellStyleXfs");this.$xf=XmlNode("xf").attr("numFmtId",0).attr("fontId",0).attr("fillId",0).attr("borderId",0);this.$cellXfs=XmlNode("cellXfs").attr("count",0);this.$cellStyles=XmlNode("cellStyles").append(XmlNode("cellStyle").attr("name","Normal").attr("xfId",0).attr("builtinId",0));this.$dxfs=XmlNode("dxfs").attr("count","0");this.$tableStyles=XmlNode("tableStyles").attr("count","0").attr("defaultTableStyle","TableStyleMedium9").attr("defaultPivotStyle","PivotStyleMedium4");this.$styles=XmlNode("styleSheet").attr("xmlns:mc","http://schemas.openxmlformats.org/markup-compatibility/2006").attr("xmlns:x14ac","http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac").attr("xmlns","http://schemas.openxmlformats.org/spreadsheetml/2006/main").attr("mc:Ignorable","x14ac").prefix('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>').append(this.$numFmts).append(this.$fonts).append(this.$fills).append(this.$borders).append(this.$cellStyleXfs.append(this.$xf)).append(this.$cellXfs).append(this.$cellStyles).append(this.$dxfs).append(this.$tableStyles);var defaultStyle=options.defaultCellStyle||{};if(!defaultStyle.font)defaultStyle.font={name:"Calibri",sz:"12"};if(!defaultStyle.font.name)defaultStyle.font.name="Calibri";if(!defaultStyle.font.sz)defaultStyle.font.sz=11;if(!defaultStyle.fill)defaultStyle.fill={patternType:"none",fgColor:{}};if(!defaultStyle.border)defaultStyle.border={};if(!defaultStyle.numFmt)defaultStyle.numFmt=0;this.defaultStyle=defaultStyle;var gray125Style=JSON.parse(JSON.stringify(defaultStyle));gray125Style.fill={patternType:"gray125",fgColor:{}};this.addStyles([defaultStyle,gray125Style]);return this},addStyle:function(attributes){var hashKey=JSON.stringify(attributes);var index=_hashIndex[hashKey];if(index==undefined){index=this._addXf(attributes);_hashIndex[hashKey]=index}else{index=_hashIndex[hashKey]}return index},addStyles:function(styles){var self=this;return styles.map(function(style){return self.addStyle(style)})},_duckTypeStyle:function(attributes){if(typeof attributes=="object"&&(attributes.patternFill||attributes.fgColor)){return{fill:attributes}}else if(attributes.font||attributes.numFmt||attributes.border||attributes.fill){return attributes}else{return this._getStyleCSS(attributes)}},_getStyleCSS:function(css){return css},_addXf:function(attributes){var fontId=this._addFont(attributes.font);var fillId=this._addFill(attributes.fill);var borderId=this._addBorder(attributes.border);var numFmtId=this._addNumFmt(attributes.numFmt);var $xf=XmlNode("xf").attr("numFmtId",numFmtId).attr("fontId",fontId).attr("fillId",fillId).attr("borderId",borderId).attr("xfId","0");if(fontId>0){$xf.attr("applyFont","1")}if(fillId>0){$xf.attr("applyFill","1")}if(borderId>0){$xf.attr("applyBorder","1")}if(numFmtId>0){$xf.attr("applyNumberFormat","1")}if(attributes.alignment){
+var $alignment=XmlNode("alignment");if(attributes.alignment.horizontal){$alignment.attr("horizontal",attributes.alignment.horizontal)}if(attributes.alignment.vertical){$alignment.attr("vertical",attributes.alignment.vertical)}if(attributes.alignment.indent){$alignment.attr("indent",attributes.alignment.indent)}if(attributes.alignment.readingOrder){$alignment.attr("readingOrder",attributes.alignment.readingOrder)}if(attributes.alignment.wrapText){$alignment.attr("wrapText",attributes.alignment.wrapText)}if(attributes.alignment.textRotation!=undefined){$alignment.attr("textRotation",attributes.alignment.textRotation)}$xf.append($alignment).attr("applyAlignment",1)}this.$cellXfs.append($xf);var count=+this.$cellXfs.children().length;this.$cellXfs.attr("count",count);return count-1},_addFont:function(attributes){if(!attributes){return 0}var $font=XmlNode("font").append(XmlNode("sz").attr("val",attributes.sz||this.defaultStyle.font.sz)).append(XmlNode("name").attr("val",attributes.name||this.defaultStyle.font.name));if(attributes.bold)$font.append(XmlNode("b"));if(attributes.underline)$font.append(XmlNode("u"));if(attributes.italic)$font.append(XmlNode("i"));if(attributes.strike)$font.append(XmlNode("strike"));if(attributes.outline)$font.append(XmlNode("outline"));if(attributes.shadow)$font.append(XmlNode("shadow"));if(attributes.vertAlign){$font.append(XmlNode("vertAlign").attr("val",attributes.vertAlign))}if(attributes.color){if(attributes.color.theme){$font.append(XmlNode("color").attr("theme",attributes.color.theme));if(attributes.color.tint){$font.append(XmlNode("tint").attr("theme",attributes.color.tint))}}else if(attributes.color.rgb){$font.append(XmlNode("color").attr("rgb",attributes.color.rgb))}}this.$fonts.append($font);var count=this.$fonts.children().length;this.$fonts.attr("count",count);return count-1},_addNumFmt:function(numFmt){if(!numFmt){return 0}if(typeof numFmt=="string"){var numFmtIdx=fmt_table[numFmt];if(numFmtIdx>=0){return numFmtIdx}}if(/^[0-9]+$/.exec(numFmt)){return numFmt}numFmt=numFmt.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;");var $numFmt=XmlNode("numFmt").attr("numFmtId",++customNumFmtId).attr("formatCode",numFmt);this.$numFmts.append($numFmt);var count=this.$numFmts.children().length;this.$numFmts.attr("count",count);return customNumFmtId},_addFill:function(attributes){if(!attributes){return 0}var $patternFill=XmlNode("patternFill").attr("patternType",attributes.patternType||"solid");if(attributes.fgColor){var $fgColor=XmlNode("fgColor");if(attributes.fgColor.rgb){if(attributes.fgColor.rgb.length==6){attributes.fgColor.rgb="FF"+attributes.fgColor.rgb}$fgColor.attr("rgb",attributes.fgColor.rgb);$patternFill.append($fgColor)}else if(attributes.fgColor.theme){$fgColor.attr("theme",attributes.fgColor.theme);if(attributes.fgColor.tint){$fgColor.attr("tint",attributes.fgColor.tint)}$patternFill.append($fgColor)}if(!attributes.bgColor){attributes.bgColor={indexed:"64"}}}if(attributes.bgColor){var $bgColor=XmlNode("bgColor").attr(attributes.bgColor);$patternFill.append($bgColor)}var $fill=XmlNode("fill").append($patternFill);this.$fills.append($fill);var count=this.$fills.children().length;this.$fills.attr("count",count);return count-1},_getSubBorder:function(direction,spec){var $direction=XmlNode(direction);if(spec){if(spec.style)$direction.attr("style",spec.style);if(spec.color){var $color=XmlNode("color");if(spec.color.auto){$color.attr("auto",spec.color.auto)}else if(spec.color.rgb){$color.attr("rgb",spec.color.rgb)}else if(spec.color.theme||spec.color.tint){$color.attr("theme",spec.color.theme||"1");$color.attr("tint",spec.color.tint||"0")}$direction.append($color)}}return $direction},_addBorder:function(attributes){if(!attributes){return 0}var self=this;var $border=XmlNode("border").attr("diagonalUp",attributes.diagonalUp).attr("diagonalDown",attributes.diagonalDown);var directions=["left","right","top","bottom","diagonal"];directions.forEach(function(direction){$border.append(self._getSubBorder(direction,attributes[direction]))});this.$borders.append($border);var count=this.$borders.children().length;this.$borders.attr("count",count);return count-1},toXml:function(){return this.$styles.toXml()}}.initialize(options||{})};XLSX.parse_xlscfb=parse_xlscfb;XLSX.parse_zip=parse_zip;XLSX.read=readSync;XLSX.readFile=readFileSync;XLSX.readFileSync=readFileSync;XLSX.write=writeSync;XLSX.writeFile=writeFileSync;XLSX.writeFileSync=writeFileSync;XLSX.utils=utils;XLSX.CFB=CFB;XLSX.SSF=SSF})(typeof exports!=="undefined"?exports:XLSX);var XLS=XLSX;
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/dist/xlsx.core.min.map b/Source/UBCS-WEB/src/config/js-xlsx-master/dist/xlsx.core.min.map
new file mode 100644
index 0000000..e27f874
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/dist/xlsx.core.min.map
@@ -0,0 +1 @@
+{"version":3,"sources":["jszip.js","xlsx.js"],"names":["e","exports","module","define","amd","f","window","global","self","JSZip","t","n","r","s","o","u","a","require","i","Error","call","length","1","_dereq_","_keyStr","encode","input","utf8","output","chr1","chr2","chr3","enc1","enc2","enc3","enc4","charCodeAt","isNaN","charAt","decode","replace","indexOf","String","fromCharCode","2","CompressedObject","this","compressedSize","uncompressedSize","crc32","compressionMethod","compressedContent","prototype","getContent","getCompressedContent","3","STORE","magic","compress","content","uncompress","compressInputType","uncompressInputType","DEFLATE","./flate","4","utils","table","crc","isArray","getTypeOf","x","y","b","iTop","./utils","5","DataReader","data","index","checkOffset","offset","checkIndex","newIndex","setIndex","skip","byteAt","readInt","size","result","readString","transformTo","readData","lastIndexOfSignature","sig","readDate","dostime","Date","6","base64","binary","dir","createFolders","date","compression","comment","7","string2binary","str","string2Uint8Array","uint8Array2String","array","string2Blob","buffer","arrayBuffer2Blob","outputType","checkSupport","type","MAX_VALUE_16BITS","MAX_VALUE_32BITS","pretty","findCompression","isRegExp","object","8","USE_TYPEDARRAY","Uint8Array","Uint16Array","Uint32Array","pako","deflateRaw","inflateRaw","9","options","files","root","load","clone","newObj","support","defaults","compressions","./base64","./compressions","./defaults","./deprecatedPublicUtils","./load","./object","./support","10","ZipEntries","zipEntries","file","fileName","decompressed","optimizedBinaryString","fileComment","zipComment","./zipEntries","11","Buffer","encoding","test","isBuffer","undefined","12","Uint8ArrayReader","NodeBufferReader","slice","./uint8ArrayReader","13","signature","nodeBuffer","StringWriter","Uint8ArrayWriter","getRawData","_data","copy","set","getBinaryData","nodebuffer","asBinary","dataToString","asUTF8","out","utf8decode","utf8encode","ZipObject","name","_initialMetadata","asText","asNodeBuffer","asUint8Array","asArrayBuffer","decToHex","dec","bytes","hex","extend","attr","arguments","hasOwnProperty","prepareFileAttrs","toUpperCase","fileAdd","dataType","parent","parentFolder","folderAdd","path","substring","lastSlash","lastIndexOf","generateCompressedObjectFrom","generateZipParts","compressedObject","utfEncodedFileName","utfEncodedComment","useUTF8ForFileName","useUTF8ForComment","dosTime","dosDate","extraFields","unicodePathExtraField","unicodeCommentExtraField","getHours","getMinutes","getSeconds","getFullYear","getMonth","getDate","header","fileRecord","LOCAL_FILE_HEADER","dirRecord","CENTRAL_FILE_HEADER","stream","filter","search","filename","relativePath","fileClone","push","regexp","folder","arg","newFolder","ret","remove","kids","generate","zipData","localDirLength","centralDirLength","writer","compressionName","zipPart","dirEnd","CENTRAL_DIRECTORY_END","typeName","toLowerCase","append","zip","finalize","string","./compressedObject","./crc32","./nodeBuffer","./signature","./stringWriter","./uint8ArrayWriter","./utf8","14","ZIP64_CENTRAL_DIRECTORY_LOCATOR","ZIP64_CENTRAL_DIRECTORY_END","DATA_DESCRIPTOR","15","StringReader","./dataReader","16","join","17","arraybuffer","ArrayBuffer","uint8array","blob","Blob","Builder","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","builder","getBlob","18","sig0","sig1","sig2","sig3","subarray","19","20","_utf8len","Array","string2buf","buf","c","c2","m_pos","str_len","buf_len","utf8border","max","pos","buf2string","c_len","len","utf16buf","applyFromCharCode","toString","k","chunk","nextBoundary","Math","min","21","identity","stringToArrayLike","arrayLikeToString","canUseApply","apply","resultStr","floor","arrayLikeToArrayLike","arrayFrom","arrayTo","transform","byteLength","inputType","Object","supported","res","code","method","22","ZipEntry","jszipProto","loadOptions","checkSignature","expectedSignature","reader","readBlockEndOfCentral","diskNumber","diskWithCentralDirStart","centralDirRecordsOnThisDisk","centralDirRecords","centralDirSize","centralDirOffset","zipCommentLength","readBlockZip64EndOfCentral","zip64EndOfCentralSize","versionMadeBy","versionNeeded","zip64ExtensibleData","extraDataSize","extraFieldId","extraFieldLength","extraFieldValue","id","value","readBlockZip64EndOfCentralLocator","diskWithZip64CentralDirStart","relativeOffsetEndOfZip64CentralDir","disksCount","readLocalFiles","localHeaderOffset","readLocalPart","handleUTF8","readCentralDir","zip64","readCentralPart","readEndOfCentral","prepareReader","./nodeBufferReader","./stringReader","./zipEntry","23","isEncrypted","bitFlag","useUTF8","prepareCompressedContent","from","previousIndex","compressedFileData","prepareContent","uncompressedFileData","localExtraFieldsLength","fileNameLength","checkCRC32","extraFieldsLength","fileCommentLength","diskNumberStart","internalFileAttributes","externalFileAttributes","readExtraFields","parseZIP64ExtraField","extraReader","start","upath","findExtraFieldUnicodePath","ucomment","findExtraFieldUnicodeComment","upathField","ucommentField","24","assign","deflate","inflate","constants","./lib/deflate","./lib/inflate","./lib/utils/common","./lib/zlib/constants","25","zlib_deflate","strings","msg","zstream","Z_NO_FLUSH","Z_FINISH","Z_OK","Z_STREAM_END","Z_DEFAULT_COMPRESSION","Z_DEFAULT_STRATEGY","Z_DEFLATED","Deflate","level","chunkSize","windowBits","memLevel","strategy","to","opt","raw","gzip","err","ended","chunks","strm","avail_out","status","deflateInit2","deflateSetHeader","mode","_mode","next_in","avail_in","Buf8","next_out","onEnd","onData","buf2binstring","shrinkBuf","deflateEnd","flattenChunks","deflator","./utils/common","./utils/strings","./zlib/deflate.js","./zlib/messages","./zlib/zstream","26","zlib_inflate","gzheader","Inflate","inflateInit2","inflateGetHeader","next_out_utf8","tail","utf8str","binstring2buf","arraySet","inflateEnd","inflator","ungzip","./zlib/constants","./zlib/gzheader","./zlib/inflate.js","27","TYPED_OK","Int32Array","obj","sources","source","shift","TypeError","p","fnTyped","dest","src","src_offs","dest_offs","l","fnUntyped","concat","setTyped","on","Buf16","Buf32","28","STR_APPLY_OK","STR_APPLY_UIA_OK","__","./common","29","adler32","adler","s1","s2","30","Z_PARTIAL_FLUSH","Z_SYNC_FLUSH","Z_FULL_FLUSH","Z_BLOCK","Z_TREES","Z_NEED_DICT","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_BUF_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_BINARY","Z_TEXT","Z_UNKNOWN","31","makeTable","crcTable","end","32","trees","MAX_MEM_LEVEL","MAX_WBITS","DEF_MEM_LEVEL","LENGTH_CODES","LITERALS","L_CODES","D_CODES","BL_CODES","HEAP_SIZE","MAX_BITS","MIN_MATCH","MAX_MATCH","MIN_LOOKAHEAD","PRESET_DICT","INIT_STATE","EXTRA_STATE","NAME_STATE","COMMENT_STATE","HCRC_STATE","BUSY_STATE","FINISH_STATE","BS_NEED_MORE","BS_BLOCK_DONE","BS_FINISH_STARTED","BS_FINISH_DONE","OS_CODE","errorCode","rank","zero","flush_pending","state","pending","pending_buf","pending_out","total_out","flush_block_only","last","_tr_flush_block","block_start","strstart","put_byte","putShortMSB","read_buf","wrap","total_in","longest_match","cur_match","chain_length","max_chain_length","scan","match","best_len","prev_length","nice_match","limit","w_size","_win","wmask","w_mask","prev","strend","scan_end1","scan_end","good_match","lookahead","match_start","fill_window","_w_size","m","more","window_size","hash_size","head","insert","ins_h","hash_shift","hash_mask","deflate_stored","flush","max_block_size","pending_buf_size","max_start","deflate_fast","hash_head","bflush","match_length","_tr_tally","max_lazy_match","last_lit","deflate_slow","max_insert","prev_match","match_available","deflate_rle","deflate_huff","Config","good_length","max_lazy","nice_length","max_chain","func","configuration_table","lm_init","DeflateState","gzhead","gzindex","last_flush","w_bits","hash_bits","dyn_ltree","dyn_dtree","bl_tree","l_desc","d_desc","bl_desc","bl_count","heap","heap_len","heap_max","depth","l_buf","lit_bufsize","d_buf","opt_len","static_len","matches","bi_buf","bi_valid","deflateResetKeep","data_type","_tr_init","deflateReset","deflateInit","old_flush","beg","val","text","hcrc","extra","time","os","level_flags","bstate","_tr_align","_tr_stored_block","deflateInfo","../utils/common","./adler32","./messages","./trees","33","GZheader","xflags","extra_len","done","34","BAD","TYPE","inflate_fast","_in","_out","dmax","wsize","whave","wnext","hold","bits","lcode","dcode","lmask","dmask","here","op","dist","from_source","lencode","distcode","lenbits","distbits","top","dolen","dodist","sane","35","inflate_table","CODES","LENS","DISTS","Z_MEM_ERROR","HEAD","FLAGS","TIME","OS","EXLEN","EXTRA","NAME","COMMENT","HCRC","DICTID","DICT","TYPEDO","STORED","COPY_","COPY","TABLE","LENLENS","CODELENS","LEN_","LEN","LENEXT","DIST","DISTEXT","MATCH","LIT","CHECK","LENGTH","DONE","MEM","SYNC","ENOUGH_LENS","ENOUGH_DISTS","DEF_WBITS","ZSWAP32","q","InflateState","havedict","flags","check","total","wbits","ncode","nlen","ndist","have","next","lens","work","lendyn","distdyn","back","was","inflateResetKeep","inflateReset","inflateReset2","inflateInit","virgin","lenfix","distfix","fixedtables","sym","updatewindow","put","left","here_bits","here_op","here_val","last_bits","last_op","last_val","hbuf","opts","order","inf_leave","inflateInfo","./inffast","./inftrees","36","MAXBITS","lbase","lext","dbase","dext","lens_index","codes","table_index","curr","drop","used","huff","incr","fill","low","mask","base","base_index","count","offs","extra_index","37","0","-1","-2","-3","-4","-5","-6","38","STORED_BLOCK","STATIC_TREES","DYN_TREES","Buf_size","MAX_BL_BITS","END_BLOCK","REP_3_6","REPZ_3_10","REPZ_11_138","extra_lbits","extra_dbits","extra_blbits","bl_order","DIST_CODE_LEN","static_ltree","static_dtree","_dist_code","_length_code","base_length","base_dist","StaticTreeDesc","static_tree","extra_bits","extra_base","elems","max_length","has_stree","static_l_desc","static_d_desc","static_bl_desc","TreeDesc","dyn_tree","stat_desc","max_code","d_code","put_short","w","send_bits","send_code","tree","bi_reverse","bi_flush","gen_bitlen","desc","stree","h","xbits","overflow","gen_codes","next_code","tr_static_init","init_block","bi_windup","copy_block","smaller","_n2","_m2","pqdownheap","v","j","compress_block","ltree","dtree","lc","lx","build_tree","node","scan_tree","prevlen","curlen","nextlen","max_count","min_count","send_tree","build_bl_tree","max_blindex","send_all_trees","lcodes","dcodes","blcodes","detect_data_type","black_mask","static_init_done","stored_len","opt_lenb","static_lenb","39","ZStream","XLSX","make_xlsx","version","current_codepage","current_cptable","cptable","reset_cp","set_cp","cp","char_codes","debom_xml","_getchar","_gc1","substr","_gc2","Base64","make_b64","map","c1","c3","e1","e2","e3","e4","b64_decode","has_buf","new_raw_buf","s2a","split","bconcat","bufs","chr0","SSF","make_ssf","_strrev","pad0","d","pad_","rpad_","pad0r1","round","pad0r2","p2_32","pow","pad0r","isgeneral","opts_fmt","fixopts","table_fmt","40","45","46","47","48","49","56","65535","days","months","frac","D","mixed","sgn","B","P_2","P_1","P","Q_2","Q_1","Q","A","general_fmt_int","_general_int","general_fmt_num","make_general_fmt_num","gnr1","gnr2","gnr4","gnr5","gnr6","gfn2","gfn5","toFixed","toPrecision","toExponential","gfn3","gfn4","V","log","abs","LOG10E","_general_num","general_fmt","_general","fix_hijri","parse_date_code","b2","dow","dout","T","H","M","S","date1904","setDate","getDay","write_date","fmt","ss0","ss","tt","outl","commaify","write_num","make_write_num","pct1","write_num_pct","sfmt","mul","write_num_cm","idx","write_num_exp","period","ee","fakee","$$","$1","$2","$3","frac1","write_num_f1","aval","sign","den","parseInt","rr","myn","myd","write_num_f2","dec1","closeparen","phone","hashq","cc","rnd","dd","flr","write_num_flt","ffmt","oo","ri","ff","oa","lres","rres","write_num_cm2","write_num_pct2","write_num_exp2","write_num_int","split_fmt","in_str","_split","abstime","eval_fmt","flen","lst","dt","hr","bt","ssm","nstr","jj","vv","myv","ostr","decpt","lasti","retval","_eval","cfregex","cfregex2","chkcond","thresh","parseFloat","choose_fmt","lat","m1","m2","format","_table","load_entry","get_table","load_table","tbl","XLMLFormatMap","General Number","General Date","Long Date","Medium Date","Short Date","Long Time","Medium Time","Short Time","Currency","Fixed","Standard","Percent","Scientific","Yes/No","True/False","On/Off","DO_NOT_EXPORT_CFB","CFB","_CFB","parse","mver","ssz","nmfs","ndfs","dir_start","minifat_start","difat_start","fat_addrs","prep_blob","mv","check_get_mver","check_shifts","nds","read_shift","chk","sectors","sectorify","sleuth_fat","sector_list","make_sector_list","ENDOFCHAIN","Paths","FileIndex","FullPaths","FullPathDir","read_directory","build_full_paths","root_name","find_path","make_find_path","find","HEADER_SIGNATURE","HEADER_CLSID","nsectors","ceil","FI","FPD","FP","L","R","C","pl","dad","UCFullPaths","UCPaths","UCPath","cnt","sector","__readInt32LE","get_sector_list","chkd","sl","buf_chain","modulus","addr","nodes","__toBuffer","minifat_store","namelen","ctime","mtime","__utf16le","color","clsid","ct","read_date","mt","storage","MSSZ","__readUInt32LE","fs","readFileSync","readSync","consts","MAXREGSECT","DIFSECT","FATSECT","FREESECT","HEADER_MINOR_VERSION","MAXREGSID","NOSTREAM","EntryTypes","read","ReadShift","CheckField","isval","keys","evert_key","key","K","evert","evert_num","evert_arr","datenum","epoch","cc2str","arr","getdata","safegetzipfile","lowerCaseFiles","getzipfile","getzipdata","safe","_fs","jszip","attregexg","tagregex","nsregex","nsregex2","parsexmltag","tag","skip_root","z","eq","strip_ns","encodings","&quot;","&apos;","&gt;","&lt;","&amp;","rencoding","rencstr","unescapexml","encregex","coderegex","decregex","charegex","escapexml","xlml_fixstr","entregex","entrepl","parsexmlbool","utf8read","utf8reada","orig","utf8readb","ww","corpus","utf8readc","matchtag","mtcache","g","RegExp","vtregex","vt_cache","vt_regex","vtvregex","vtmregex","parseVector","baseType","forEach","wtregex","writetag","wxt_helper","writextag","write_w3cdtf","toISOString","write_vt","XML_HEADER","XMLNS","dc","dcterms","dcmitype","mx","sjs","vt","xsi","xsd","main","readIEEE754","isLE","nl","ml","el","eMax","eBias","NaN","Infinity","___toBuffer","toBuffer_","___utf16le","utf16le_","__readUInt16LE","__hexlify","___hexlify","hexlify_","__utf8","___utf8","__readUInt8","__lpstr","___lpstr","lpstr_","__lpwstr","___lpwstr","lpwstr_","__double","___double","is_buf","is_buf_a","utf16le_b","lpstr_b","readUInt32LE","lpwstr_b","utf8_b","double_","readDoubleLE","is_buf_b","__readInt16LE","___unhexlify","__unhexlify","oI","oR","loc","WriteShift","writeUInt16LE","writeUInt32LE","writeDoubleLE","writeInt32LE","hexstr","fld","write_shift","parsenoop","writenoop","new_buf","sz","recordhopper","cb","tmpbyte","cntbyte","RT","XLSBRecordEnum","buf_array","blksz","newblk","ba_newblk","curbuf","endbuf","ba_endbuf","ba_next","ba_end","ba_push","_bufs","write_record","ba","payload","evert_RE","shift_cell_xls","cell","tgt","cRel","rRel","shift_range_xls","range","OFFCRYPTO","make_offcrypto","O","_crypto","crypto","rc4","md5","createHash","update","digest","parse_StrRun","ich","ifnt","parse_RichStr","parse_XLWideString","rgsStrRun","dwSizeStrRun","write_RichStr","write_XLWideString","parse_XLSBCell","col","iStyleRef","fPhShow","write_XLSBCell","parse_XLSBCodeName","parse_XLNullableWideString","cchCharacters","write_XLNullableWideString","parse_RelID","write_RelID","parse_RkNumber","fX100","fInt","RK","parse_UncheckedRfX","write_UncheckedRfX","parse_Xnum","write_Xnum","BErr","42","43","255","RBErr","parse_BrtColor","fValidRGB","xColorType","nTintAndShade","bRed","bGreen","bBlue","bAlpha","parse_FontFlags","fItalic","fStrikeout","fOutline","fShadow","fCondense","fExtend","VT_EMPTY","VT_NULL","VT_I2","VT_I4","VT_R4","VT_R8","VT_CY","VT_DATE","VT_BSTR","VT_ERROR","VT_BOOL","VT_VARIANT","VT_DECIMAL","VT_I1","VT_UI1","VT_UI2","VT_UI4","VT_I8","VT_UI8","VT_INT","VT_UINT","VT_LPSTR","VT_LPWSTR","VT_FILETIME","VT_BLOB","VT_STREAM","VT_STORAGE","VT_STREAMED_Object","VT_STORED_Object","VT_BLOB_Object","VT_CF","VT_CLSID","VT_VERSIONED_STREAM","VT_VECTOR","VT_ARRAY","VT_STRING","VT_USTR","VT_CUSTOM","DocSummaryPIDDSI","SummaryPIDSI","SpecialProperties","2147483648","2147483651","1919054434","CountryEnum","41","44","52","55","61","64","66","81","82","84","86","90","105","213","216","218","351","354","358","420","886","961","962","963","964","965","966","971","972","974","981","XLSFillPattern","rgbify","XLSIcv","ct2type","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml","application/vnd.ms-excel.binIndexWs","application/vnd.ms-excel.chartsheet","application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml","application/vnd.ms-excel.dialogsheet","application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml","application/vnd.ms-excel.macrosheet","application/vnd.ms-excel.macrosheet+xml","application/vnd.ms-excel.intlmacrosheet","application/vnd.ms-excel.binIndexMs","application/vnd.openxmlformats-package.core-properties+xml","application/vnd.openxmlformats-officedocument.custom-properties+xml","application/vnd.openxmlformats-officedocument.extended-properties+xml","application/vnd.openxmlformats-officedocument.customXmlProperties+xml","application/vnd.ms-excel.comments","application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml","application/vnd.ms-excel.pivotTable","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml","application/vnd.ms-excel.calcChain","application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml","application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings","application/vnd.ms-office.activeX","application/vnd.ms-office.activeX+xml","application/vnd.ms-excel.attachedToolbars","application/vnd.ms-excel.connections","application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml","application/vnd.ms-excel.externalLink","application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml","application/vnd.ms-excel.sheetMetadata","application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml","application/vnd.ms-excel.pivotCacheDefinition","application/vnd.ms-excel.pivotCacheRecords","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml","application/vnd.ms-excel.queryTable","application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml","application/vnd.ms-excel.userNames","application/vnd.ms-excel.revisionHeaders","application/vnd.ms-excel.revisionLog","application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml","application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml","application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml","application/vnd.ms-excel.tableSingleCells","application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml","application/vnd.ms-excel.slicer","application/vnd.ms-excel.slicerCache","application/vnd.ms-excel.slicer+xml","application/vnd.ms-excel.slicerCache+xml","application/vnd.ms-excel.wsSortMap","application/vnd.ms-excel.table","application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml","application/vnd.openxmlformats-officedocument.theme+xml","application/vnd.ms-excel.Timeline+xml","application/vnd.ms-excel.TimelineCache+xml","application/vnd.ms-office.vbaProject","application/vnd.ms-office.vbaProjectSignature","application/vnd.ms-office.volatileDependencies","application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml","application/vnd.ms-excel.controlproperties+xml","application/vnd.openxmlformats-officedocument.model+data","application/vnd.ms-excel.Survey+xml","application/vnd.openxmlformats-officedocument.drawing+xml","application/vnd.openxmlformats-officedocument.drawingml.chart+xml","application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml","application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml","application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml","application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml","application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml","application/vnd.openxmlformats-officedocument.vmlDrawing","application/vnd.openxmlformats-package.relationships+xml","application/vnd.openxmlformats-officedocument.oleObject","sheet","CT_LIST","workbooks","xlsx","xlsm","xlsb","xltx","strs","sheets","styles","type2ct","CT","parse_ct","ctext","calcchains","themes","coreprops","extprops","custprops","comments","vba","TODO","rels","xmlns","Extension","ContentType","PartName","WTF","console","error","calcchain","sst","style","CTYPE_XML_ROOT","xmlns:xsd","xmlns:xsi","CTYPE_DEFAULTS","write_ct","f1","bookType","f2","f3","RELS","WB","SHEET","parse_rels","currentFilePath","hash","resolveRelativePathIntoAbsolute","toksFrom","pop","toksTo","reversed","tokTo","rel","Type","Target","Id","TargetMode","canonictarget","RELS_ROOT","write_rels","rid","CORE_PROPS","CORE_PROPS_REGEX","parse_core_props","cur","CORE_PROPS_XML_ROOT","xmlns:cp","xmlns:dc","xmlns:dcterms","xmlns:dcmitype","cp_doit","write_core_props","Props","title","subject","creator","keywords","description","CreatedDate","xsi:type","ModifiedDate","EXT_PROPS","parse_ext_props","HeadingPairs","TitlesOfParts","widx","Worksheets","parts","SheetNames","EXT_PROPS_XML_ROOT","xmlns:vt","write_ext_props","W","Application","CUST_PROPS","custregex","parse_cust_props","xmlnsvt","toks","warn","CUST_PROPS_XML_ROOT","write_cust_props","pid","custprop","fmtid","xlml_set_prop","parse_FILETIME","dwLowDateTime","dwHighDateTime","parse_lpstr","pad","parse_lpwstr","parse_VtStringBase","stringType","parse_VtString","parse_VtUnalignedString","parse_VtVecUnalignedLpstrValue","parse_VtVecUnalignedLpstr","parse_VtHeadingPair","headingString","parse_TypedPropertyValue","headerParts","parse_VtVecHeadingPairValue","cElements","parse_VtVecHeadingPair","parse_dictionary","CodePage","dict","parse_BLOB","parse_ClipboardData","Size","parse_VtVector","_opts","parse_PropertySet","PIDSI","start_addr","NumProps","Dictionary","DictObj","PropID","Offset","PropH","fail","piddsi","oldpos","parsebool","parse_PropertySetStream","NumSets","FMTID0","FMTID1","Offset0","Offset1","vers","SystemIdentifier","PSet0","rval","FMTID","PSet1","parsenoop2","parslurp","target","parslurp2","parseuint16","parseuint16a","parse_Boolean","parse_Bes","parse_ShortXLUnicodeString","cch","width","biff","fHighByte","parse_XLUnicodeRichExtendedString","fExtSt","fRichSt","cRun","cbExtRst","parse_XLUnicodeStringNoCch","parse_XLUnicodeString","parse_XLUnicodeString2","parse_ControlInfo","parse_URLMoniker","url","parse_FileMoniker","cAnti","ansiLength","ansiPath","endServer","versionNumber","cbUnicodePathSize","cbUnicodePathBytes","usKeyValue","unicodePath","parse_HyperlinkMoniker","parse_HyperlinkString","parse_Hyperlink","sVer","displayName","targetFrameName","moniker","oleMoniker","location","guid","fileTime","parse_LongRGBA","parse_LongRGB","parse_XLSCell","rw","ixfe","parse_frtHeader","rt","parse_OptXLUnicodeString","HIDEOBJENUM","parse_HideObjEnum","parse_XTI","iSupBook","itabFirst","itabLast","parse_RkRec","parse_AddinUdf","udfName","parse_Ref8U","rwFirst","rwLast","colFirst","colLast","parse_RefU","parse_Ref","parse_FtCmo","ot","parse_FtNts","fSharedNote","parse_FtCf","cf","FtTab","parse_FtArray","fts","ft","parse_FontIndex","parse_BOF","BIFFVer","parse_InterfaceHdr","parse_WriteAccess","enc","UserName","parse_BoundSheet8","hidden","hs","parse_SST","ucnt","Count","Unique","parse_ExtSST","extsst","dsst","parse_Row","Col","rht","parse_ForceFullCalculation","fullcalc","parse_CompressPictures","parse_RecalcId","parse_DefaultRowHeight","miyRw","fl","Unsynced","DyZero","ExAsc","ExDsc","parse_Window1","xWn","yWn","dxWn","dyWn","iTabCur","iTabFirst","ctabSel","wTabRatio","Pos","Dim","Flags","CurTab","FirstTab","Selected","TabRatio","parse_Font","parse_LabelSst","isst","parse_Label","parse_Format","ifmt","fmtstr","parse_Dimensions","parse_RK","rkrec","rknum","parse_MulRk","rkrecs","lastcol","parse_CellStyleXF","patternType","icvFore","icvBack","parse_CellXF","parse_StyleXF","parse_XF","fStyle","parse_Guts","parse_BoolErr","parse_Number","xnum","parse_XLHeaderFooter","parse_SupBook","ctab","virtPath","rgst","sbcch","parse_ExternName","body","fBuiltIn","fWantAdvise","fWantPict","fOle","fOleLink","fIcon","parse_Lbl","chKey","cce","itab","rgce","parse_NameParsedFormula","Name","parse_ExternSheet","snames","parse_ShrFmla","ref","cUse","parse_SharedParsedFormula","parse_Array","parse_ArrayParsedFormula","parse_MTRSettings","fMTREnabled","fUserSetThreadCount","cUserThreadCount","parse_NoteSh","row","idObj","stAuthor","parse_Note","parse_MergeCells","merges","cmcs","parse_Obj","cmo","parse_TxO","lastobj","controlInfo","cchText","cbRuns","ifntEmpty","texts","hdr","parse_HLink","hlink","parse_HLinkTooltip","wzTooltip","parse_Country","parse_ClrtClient","ccv","parse_Palette","parse_XFCRC","cxfs","parse_Style","parse_StyleExt","parse_ColInfo","parse_Window2","parse_Backup","parse_Blank","parse_BottomMargin","parse_BuiltInFnGroupCount","parse_CalcCount","parse_CalcDelta","parse_CalcIter","parse_CalcMode","parse_CalcPrecision","parse_CalcRefMode","parse_CalcSaveRecalc","parse_CodePage","parse_Compat12","parse_Date1904","parse_DefColWidth","parse_DSF","parse_EntExU2","parse_EOF","parse_Excel9File","parse_FeatHdr","parse_FontX","parse_Footer","parse_GridSet","parse_HCenter","parse_Header","parse_HideObj","parse_InterfaceEnd","parse_LeftMargin","parse_Mms","parse_ObjProtect","parse_Password","parse_PrintGrid","parse_PrintRowCol","parse_PrintSize","parse_Prot4Rev","parse_Prot4RevPass","parse_Protect","parse_RefreshAll","parse_RightMargin","parse_RRTabId","parse_ScenarioProtect","parse_Scl","parse_String","parse_SxBool","parse_TopMargin","parse_UsesELFs","parse_VCenter","parse_WinProtect","parse_WriteProtect","parse_VerticalPageBreaks","parse_HorizontalPageBreaks","parse_Selection","parse_Continue","parse_Pane","parse_Pls","parse_DCon","parse_DConRef","parse_DConName","parse_XCT","parse_CRN","parse_FileSharing","parse_Uncalced","parse_Template","parse_Intl","parse_WsBool","parse_Sort","parse_Sync","parse_LPr","parse_DxGCol","parse_FnGroupName","parse_FilterMode","parse_AutoFilterInfo","parse_AutoFilter","parse_Setup","parse_ScenMan","parse_SCENARIO","parse_SxView","parse_Sxvd","parse_SXVI","parse_SxIvd","parse_SXLI","parse_SXPI","parse_DocRoute","parse_RecipName","parse_MulBlank","parse_SXDI","parse_SXDB","parse_SXFDB","parse_SXDBB","parse_SXNum","parse_SxErr","parse_SXInt","parse_SXString","parse_SXDtr","parse_SxNil","parse_SXTbl","parse_SXTBRGIITM","parse_SxTbpg","parse_ObProj","parse_SXStreamID","parse_DBCell","parse_SXRng","parse_SxIsxoper","parse_BookBool","parse_DbOrParamQry","parse_OleObjectSize","parse_SXVS","parse_BkHim","parse_MsoDrawingGroup","parse_MsoDrawing","parse_MsoDrawingSelection","parse_PhoneticInfo","parse_SxRule","parse_SXEx","parse_SxFilt","parse_SxDXF","parse_SxItm","parse_SxName","parse_SxSelect","parse_SXPair","parse_SxFmla","parse_SxFormat","parse_SXVDEx","parse_SXFormula","parse_SXDBEx","parse_RRDInsDel","parse_RRDHead","parse_RRDChgCell","parse_RRDRenSheet","parse_RRSort","parse_RRDMove","parse_RRFormat","parse_RRAutoFmt","parse_RRInsertSh","parse_RRDMoveBegin","parse_RRDMoveEnd","parse_RRDInsDelBegin","parse_RRDInsDelEnd","parse_RRDConflict","parse_RRDDefName","parse_RRDRstEtxp","parse_LRng","parse_CUsr","parse_CbUsr","parse_UsrInfo","parse_UsrExcl","parse_FileLock","parse_RRDInfo","parse_BCUsrs","parse_UsrChk","parse_UserBView","parse_UserSViewBegin","parse_UserSViewEnd","parse_RRDUserView","parse_Qsi","parse_CondFmt","parse_CF","parse_DVal","parse_DConBin","parse_Lel","parse_XLSCodeName","parse_SXFDBType","parse_ObNoMacros","parse_Dv","parse_Index","parse_Table","parse_BigName","parse_ContinueBigName","parse_WebPub","parse_QsiSXTag","parse_DBQueryExt","parse_ExtString","parse_TxtQry","parse_Qsir","parse_Qsif","parse_RRDTQSIF","parse_OleDbConn","parse_WOpt","parse_SXViewEx","parse_SXTH","parse_SXPIEx","parse_SXVDTEx","parse_SXViewEx9","parse_ContinueFrt","parse_RealTimeData","parse_ChartFrtInfo","parse_FrtWrapper","parse_StartBlock","parse_EndBlock","parse_StartObject","parse_EndObject","parse_CatLab","parse_YMult","parse_SXViewLink","parse_PivotChartBits","parse_FrtFontList","parse_SheetExt","parse_BookExt","parse_SXAddl","parse_CrErr","parse_HFPicture","parse_Feat","parse_DataLabExt","parse_DataLabExtContents","parse_CellWatch","parse_FeatHdr11","parse_Feature11","parse_DropDownObjIds","parse_ContinueFrt11","parse_DConn","parse_List12","parse_Feature12","parse_CondFmt12","parse_CF12","parse_CFEx","parse_AutoFilter12","parse_ContinueFrt12","parse_MDTInfo","parse_MDXStr","parse_MDXTuple","parse_MDXSet","parse_MDXProp","parse_MDXKPI","parse_MDB","parse_PLV","parse_DXF","parse_TableStyles","parse_TableStyle","parse_TableStyleElement","parse_NamePublish","parse_NameCmt","parse_SortData","parse_GUIDTypeLib","parse_FnGrp12","parse_NameFnGrp12","parse_HeaderFooter","parse_CrtLayout12","parse_CrtMlFrt","parse_CrtMlFrtContinue","parse_ShapePropsStream","parse_TextPropsStream","parse_RichTextStream","parse_CrtLayout12A","parse_Units","parse_Chart","parse_Series","parse_DataFormat","parse_LineFormat","parse_MarkerFormat","parse_AreaFormat","parse_PieFormat","parse_AttachedLabel","parse_SeriesText","parse_ChartFormat","parse_Legend","parse_SeriesList","parse_Bar","parse_Line","parse_Pie","parse_Area","parse_Scatter","parse_CrtLine","parse_Axis","parse_Tick","parse_ValueRange","parse_CatSerRange","parse_AxisLine","parse_CrtLink","parse_DefaultText","parse_Text","parse_ObjectLink","parse_Frame","parse_Begin","parse_End","parse_PlotArea","parse_Chart3d","parse_PicF","parse_DropBar","parse_Radar","parse_Surf","parse_RadarArea","parse_AxisParent","parse_LegendException","parse_ShtProps","parse_SerToCrt","parse_AxesUsed","parse_SBaseRef","parse_SerParent","parse_SerAuxTrend","parse_IFmtRecord","parse_Pos","parse_AlRuns","parse_BRAI","parse_SerAuxErrBar","parse_SerFmt","parse_Chart3DBarShape","parse_Fbi","parse_BopPop","parse_AxcExt","parse_Dat","parse_PlotGrowth","parse_SIIndex","parse_GelFrame","parse_BopPopCustom","parse_Fbi2","parse_BIFF5String","parse_BIFF2STR","parse_BIFF2NUM","num","CS2CP","77","128","129","130","134","136","161","162","163","177","178","186","204","222","238","69","parse_rs","parse_rs_factory","tregex","rpregex","rregex","rend","nlregex","parse_rpr","rpr","intro","outro","font","strike","rgb","family","parse_r","terms","rs","sitregex","sirregex","parse_si","html","cellHTML","sstr0","sstr1","sstr2","parse_sst_xml","uniqueCount","SST","straywsregex","write_sst_xml","bookSST","sitag","parse_BrtBeginSst","parse_sst_bin","pass","hopper_sst","write_BrtBeginSst","write_BrtSSTItem","write_sst_bin","_JS2ANSI","parse_Version","Major","Minor","parse_EncryptionHeader","tmp","AlgID","parse_EncryptionVerifier","parse_RC4CryptoHeader","EncryptionVersionInfo","EncryptionHeader","EncryptionVerifier","parse_RC4Header","Salt","EncryptedVerifier","EncryptedVerifierHash","crypto_CreatePasswordVerifier_Method1","Password","Verifier","PasswordArray","PasswordDecoded","PasswordByte","Intermediate1","Intermediate2","Intermediate3","crypto_CreateXorArray_Method1","PadArray","InitialCode","XorMatrix","Ror","Byte","XorRor","byte1","byte2","CreateXorKey_Method1","XorKey","CurrentElement","Char","password","Index","ObfuscationArray","Temp","PasswordLastChar","PadIndex","crypto_DecryptData_Method1","Data","XorArrayIndex","XorArray","Value","crypto_MakeXorDecryptor","parse_XORObfuscation","verificationBytes","verifier","valid","insitu_decrypt","parse_FilePassHeader","Info","parse_FilePass","hex2RGB","rgb2Hex","rgb2HSL","G","H6","L2","hsl2RGB","hsl","h6","X","rgb_tint","tint","rev","DEF_MDW","MAX_MDW","MIN_MDW","MDW","width2px","px2char","px","char2width","chr","cycle_width","collw","find_mdw","coll","XLMLPatternTypeMap","None","Solid","Gray50","Gray75","Gray25","HorzStripe","VertStripe","ReverseDiagStripe","DiagStripe","DiagCross","ThickDiagCross","ThinHorzStripe","ThinVertStripe","ThinReverseDiagStripe","ThinHorzCross","parse_fills","Fills","bgColor","indexed","theme","themeElements","clrScheme","raw_rgb","fgColor","parse_fonts","Fonts","bold","underline","italic","outline","shadow","vertAlign","parse_borders","Borders","border","sub_border","diagonalUp","diagonalDown","right","bottom","diagonal","auto","parse_numFmts","NumberFmt","formatCode","numFmtId","write_numFmts","NF","parse_cellXfs","CellXf","xf","fillId","alignment","vertical","horizontal","textRotation","indent","wrapText","write_cellXfs","cellXfs","parse_sty_xml","make_pstyx","numFmtRegex","cellXfRegex","fillsRegex","bordersRegex","STYLES_XML_ROOT","STY","write_sty_xml","wb","style_builder","toXml","parse_BrtFmt","stFmtCode","parse_BrtFont","dyHeight","grbit","bls","sss","uls","bFamily","bCharSet","brtColor","bFontScheme","Bold","Italic","Strikeout","Outline","Shadow","Condense","Extend","Sub","Sup","parse_BrtXF","ixfeParent","parse_sty_bin","hopper_sty","write_sty_bin","THEME","parse_clrScheme","lastClr","parse_fontScheme","parse_fmtScheme","clrsregex","fntsregex","fmtsregex","parse_themeElements","themeltregex","parse_theme_xml","write_theme","themeXml","parse_Theme","dwThemeVersion","parse_ColorTheme","parse_FullColorExt","xclrType","nTintShade","xclrValue","parse_IcvXF","parse_XFExtGradient","parse_ExtProp","extType","parse_XFExt","cexts","ext","update_xfext","xfext","xfe","parse_cc_xml","write_cc_xml","parse_BrtCalcChainItem$","encode_cell","parse_cc_bin","hopper_cc","write_cc_bin","parse_comments","dirComments","sheetRels","canonicalpath","parse_cmnt","sheetNames","sheetName","insertCommentsIntoSheet","safe_decode_range","thisCell","decode_cell","encoded","encode_range","author","parse_comments_xml","authors","commentList","trim","authorId","sheetRows","textMatch","write_comments_xml","parse_BrtBeginComment","iauthor","rfx","parse_BrtCommentAuthor","parse_BrtCommentText","parse_comments_bin","hopper_cmnt","write_comments_bin","rc_to_a1","rcregex","rcbase","rcfunc","$4","$5","encode_col","encode_row","fstr","parseread","parseread1","parse_ColRelU","parse_RgceArea","parse_RgceAreaRel","parse_RgceLoc","parse_RgceLocRel","cl","parse_PtgArea","area","parse_PtgArea3d","ixti","parse_PtgAreaErr","parse_PtgAreaErr3d","parse_PtgAreaN","parse_PtgArray","parse_PtgAttrBaxcel","bitSemi","bitBaxcel","parse_PtgAttrChoose","parse_PtgAttrGoto","bitGoto","parse_PtgAttrIf","bitIf","parse_PtgAttrSemi","parse_PtgAttrSpaceType","parse_PtgAttrSpace","parse_PtgAttrSpaceSemi","parse_PtgRef","ptg","parse_PtgRefN","parse_PtgRef3d","parse_PtgFunc","iftab","FtabArgc","Ftab","parse_PtgFuncVar","cparams","tab","parsetab","Cetab","parse_PtgAttrSum","parse_PtgConcat","parse_PtgExp","parse_PtgErr","parse_PtgInt","parse_PtgBool","parse_PtgNum","parse_PtgStr","parse_SerAr","parse_PtgExtraMem","parse_PtgExtraArray","cols","rows","parse_PtgName","nameindex","parse_PtgNameX","parse_PtgMemArea","parse_PtgMemFunc","parse_PtgRefErr","parse_PtgAdd","parse_PtgDiv","parse_PtgEq","parse_PtgGe","parse_PtgGt","parse_PtgIsect","parse_PtgLe","parse_PtgLt","parse_PtgMissArg","parse_PtgMul","parse_PtgNe","parse_PtgParen","parse_PtgPercent","parse_PtgPower","parse_PtgRange","parse_PtgSub","parse_PtgUminus","parse_PtgUnion","parse_PtgUplus","parse_PtgMemErr","parse_PtgMemNoMem","parse_PtgRefErr3d","parse_PtgTbl","PtgTypes","57","58","59","60","PtgDupes","96","65","97","98","67","99","68","100","101","70","102","71","103","72","104","73","74","106","75","107","76","108","109","89","121","122","91","123","92","124","93","125","Ptg18","Ptg19","parse_Formula","parse_FormulaValue","chn","cbf","parse_XLSCellParsedFormula","formula","shared","parse_RgbExtra","parse_Rgce","rgcb","ptgs","mapper","stringify_formula","supbooks","_range","stack","nameidx","fflen","argc","args","lbl","XLSXFutureFunctions","bookidx","externbook","sharedf","parsedf","fnd","arrayf","parse_XLSBCellParsedFormula","PtgDataType","50","51","53","54","62","63","78","79","80","83","85","87","88","94","95","110","111","112","113","114","115","116","117","118","119","120","126","127","131","132","133","135","137","138","139","140","142","143","144","145","146","147","148","149","150","151","152","153","155","159","164","166","167","168","169","170","171","172","173","174","175","185","187","188","189","190","191","192","193","194","195","196","197","198","199","200","201","202","203","206","207","208","209","210","211","212","214","215","217","219","220","223","224","225","226","227","228","229","240","243","249","250","251","252","253","254","256","259","260","265","266","267","268","269","272","273","274","276","277","278","279","280","281","282","283","284","285","288","289","290","291","292","293","295","296","297","298","302","305","306","307","308","309","310","311","312","313","314","315","316","318","319","320","321","322","323","324","325","328","330","336","338","339","342","343","344","350","352","355","356","370","373","374","375","376","377","378","379","380","381","382","383","384","385","386","388","390","391","392","393","394","395","396","397","398","399","400","412","413","414","415","416","417","421","422","423","424","425","430","431","432","433","434","435","436","437","438","439","440","441","442","443","444","445","446","447","448","449","450","451","452","453","454","455","456","458","459","460","461","462","463","464","465","466","467","468","469","470","471","472","473","474","475","476","477","478","480","481","482","485","489","491","493","494","495","509","510","511","517","518","519","520","521","522","523","545","546","547","548","549","620","621","647","653","667","673","753","755","808","141","154","156","157","158","160","165","176","179","180","181","182","183","184","205","221","230","231","232","233","234","235","236","237","239","241","242","244","245","246","247","248","257","258","261","262","263","264","270","271","275","286","287","294","299","300","301","303","304","317","326","327","329","331","332","334","335","337","340","341","345","346","347","348","349","353","357","359","360","361","362","363","364","365","366","367","368","369","371","372","_xlfn.ACOT","_xlfn.ACOTH","_xlfn.AGGREGATE","_xlfn.ARABIC","_xlfn.AVERAGEIF","_xlfn.AVERAGEIFS","_xlfn.BASE","_xlfn.BETA.DIST","_xlfn.BETA.INV","_xlfn.BINOM.DIST","_xlfn.BINOM.DIST.RANGE","_xlfn.BINOM.INV","_xlfn.BITAND","_xlfn.BITLSHIFT","_xlfn.BITOR","_xlfn.BITRSHIFT","_xlfn.BITXOR","_xlfn.CEILING.MATH","_xlfn.CEILING.PRECISE","_xlfn.CHISQ.DIST","_xlfn.CHISQ.DIST.RT","_xlfn.CHISQ.INV","_xlfn.CHISQ.INV.RT","_xlfn.CHISQ.TEST","_xlfn.COMBINA","_xlfn.CONFIDENCE.NORM","_xlfn.CONFIDENCE.T","_xlfn.COT","_xlfn.COTH","_xlfn.COUNTIFS","_xlfn.COVARIANCE.P","_xlfn.COVARIANCE.S","_xlfn.CSC","_xlfn.CSCH","_xlfn.DAYS","_xlfn.DECIMAL","_xlfn.ECMA.CEILING","_xlfn.ERF.PRECISE","_xlfn.ERFC.PRECISE","_xlfn.EXPON.DIST","_xlfn.F.DIST","_xlfn.F.DIST.RT","_xlfn.F.INV","_xlfn.F.INV.RT","_xlfn.F.TEST","_xlfn.FILTERXML","_xlfn.FLOOR.MATH","_xlfn.FLOOR.PRECISE","_xlfn.FORMULATEXT","_xlfn.GAMMA","_xlfn.GAMMA.DIST","_xlfn.GAMMA.INV","_xlfn.GAMMALN.PRECISE","_xlfn.GAUSS","_xlfn.HYPGEOM.DIST","_xlfn.IFNA","_xlfn.IFERROR","_xlfn.IMCOSH","_xlfn.IMCOT","_xlfn.IMCSC","_xlfn.IMCSCH","_xlfn.IMSEC","_xlfn.IMSECH","_xlfn.IMSINH","_xlfn.IMTAN","_xlfn.ISFORMULA","_xlfn.ISO.CEILING","_xlfn.ISOWEEKNUM","_xlfn.LOGNORM.DIST","_xlfn.LOGNORM.INV","_xlfn.MODE.MULT","_xlfn.MODE.SNGL","_xlfn.MUNIT","_xlfn.NEGBINOM.DIST","_xlfn.NETWORKDAYS.INTL","_xlfn.NIGBINOM","_xlfn.NORM.DIST","_xlfn.NORM.INV","_xlfn.NORM.S.DIST","_xlfn.NORM.S.INV","_xlfn.NUMBERVALUE","_xlfn.PDURATION","_xlfn.PERCENTILE.EXC","_xlfn.PERCENTILE.INC","_xlfn.PERCENTRANK.EXC","_xlfn.PERCENTRANK.INC","_xlfn.PERMUTATIONA","_xlfn.PHI","_xlfn.POISSON.DIST","_xlfn.QUARTILE.EXC","_xlfn.QUARTILE.INC","_xlfn.QUERYSTRING","_xlfn.RANK.AVG","_xlfn.RANK.EQ","_xlfn.RRI","_xlfn.SEC","_xlfn.SECH","_xlfn.SHEET","_xlfn.SHEETS","_xlfn.SKEW.P","_xlfn.STDEV.P","_xlfn.STDEV.S","_xlfn.SUMIFS","_xlfn.T.DIST","_xlfn.T.DIST.2T","_xlfn.T.DIST.RT","_xlfn.T.INV","_xlfn.T.INV.2T","_xlfn.T.TEST","_xlfn.UNICHAR","_xlfn.UNICODE","_xlfn.VAR.P","_xlfn.VAR.S","_xlfn.WEBSERVICE","_xlfn.WEIBULL.DIST","_xlfn.WORKDAY.INTL","_xlfn.XOR","_xlfn.Z.TEST","_ssfopts","WS","get_sst_id","get_cell_style","exec","numFmt","addStyle","revssf","fontId","borderId","xfId","applyNumberFormat","get_cell_style_csf","cellXf","applyAlignment","JSON","stringify","safe_format","fillid","cellNF","parse_ws_xml_dim","ws","mergecregex","sheetdataregex","hlinkregex","dimregex","colregex","parse_ws_xml","ridx","mergecells","columns","cellStyles","parse_ws_xml_cols","refguess","mtch","parse_ws_xml_data","parse_ws_xml_hlinks","tmpref","write_ws_xml_merges","write_ws_xml_pagesetup","setup","pageSetup","scale","orientation","horizontalDpi","verticalDpi","Rel","rng","seencol","coli","colm","colM","wpx","wch","write_ws_xml_cols","customWidth","write_ws_xml_cell","oldt","oldv","cellDates","Strings","parse_ws_xml_data_factory","cellregex","rowregex","isregex","match_v","match_f","sdata","guess","cells","cref","tagr","tagc","sstr","do_format","marr","marrlen","xlen","cellFormula","sheetStubs","write_ws_xml_data","WS_XML_ROOT","xmlns:r","write_ws_xml","sidx","rdata","Sheets","pane","selection","activeCell","sqref","sheetView","showGridLines","tabSelected","workbookViewId","write_ws_xml_row_breaks","write_ws_xml_col_breaks","breaks","brk","thisBreak","nextBreak","man","manualBreakCount","parse_BrtRowHdr","parse_BrtWsDim","write_BrtWsDim","parse_BrtWsProp","parse_BrtCellBlank","write_BrtCellBlank","parse_BrtCellBool","fBool","parse_BrtCellError","parse_BrtCellIsst","parse_BrtCellReal","parse_BrtCellRk","parse_BrtCellSt","parse_BrtFmlaBool","parse_BrtFmlaError","parse_BrtFmlaNum","parse_BrtFmlaString","parse_BrtMergeCell","parse_BrtHLink","relId","tooltip","display","parse_ws_bin","!id","ws_parse","write_ws_bin_cell","write_CELLTABLE","write_ws_bin","WBPropsDef","WBViewDef","SheetDef","CalcPrDef","CustomWBViewDef","push_defaults_array","push_defaults","parse_wb_defaults","WBProps","CalcPr","WBView","wbnsregex","parse_wb_xml","AppVersion","xml_wb","WB_XML_ROOT","safe1904","Workbook","write_wb_xml","sheetId","r:id","hasPrintHeaders","printHeader","printColumns","localSheetId","parse_BrtBundleSh","hsState","iTabID","strRelID","write_BrtBundleSh","parse_BrtWbProp","strName","write_BrtWbProp","parse_BrtFRTArchID$","ArchID","parse_wb_bin","hopper_wb","write_BUNDLESHS","write_BrtFileVersion","write_BOOKVIEWS","write_BrtCalcProp","write_BrtFileRecover","write_wb_bin","parse_wb","parse_ws","parse_sty","parse_theme","parse_sst","parse_cc","write_wb","write_ws","write_sty","write_sst","attregexg2","attregex2","_chr","xlml_parsexmltag","words","xlml_parsexmltagobj","xlml_format","xlml_set_custprop","Custprops","Rn","safe_format_xlml","nf","process_style_xlml","stag","Interior","I","Pattern","ID","parse_xlml_data","xml","csty","sid","StyleID","interiors","Parent","UTC","Formula","xlml_clean_comment","xlml_normalize","xlmlregex","parse_xlml_xml","sheetnames","cursheet","sheetname","dtag","didx","fidx","pidx","cstys","lastIndex","HRef","HRefScreenTip","MergeAcross","MergeDown","Format","Span","Author","seen","bookSheets","bookProps","parse_xlml","fix_read_opts","write_xlml","parse_compobj","UserType","Reserved1","slurp","XLSRecordEnum","ll","safe_format_xf","XF","make_cell","parse_workbook","Directory","found_sheet","last_formula","cur_sheet","Preamble","lastcell","last_cell","cmnt","rngC","rngR","shared_formulae","array_formulae","temp_val","country","cell_valid","XFs","palette","get_rgb","getrgb","icv","process_cell_style","pcs","line","xfd","addcell","rrtabid","lastuser","codepage","winlocked","wtf","objects","sbc","sbci","sbcli","last_Rn","file_depth","RecordType","Date1904","WriteProtect","RefreshAll","CalcCount","CalcDelta","CalcIter","CalcMode","CalcPrecision","CalcSaveRecalc","CalcRefMode","FullCalc","TxO","noteobj","sheetnamesraw","sort","Number","Encryption","Metadata","Country","parse_xlscfb","cfb","CompObj","Summary","CompObjP","SummaryP","WorkbookP","parse_props","props","DocSummary","bookFiles","DSI","SI","333","387","389","401","403","404","405","406","407","408","409","410","411","418","419","426","427","428","429","457","479","483","484","486","487","488","490","492","496","497","498","499","500","501","502","503","504","505","506","507","508","512","513","514","515","516","524","525","526","527","528","529","530","531","532","533","534","535","536","537","538","539","540","541","542","550","551","552","553","554","555","556","557","558","559","560","561","562","564","565","566","569","570","572","573","574","577","578","579","580","581","582","583","584","585","586","587","588","589","590","591","592","593","594","595","596","597","598","599","600","601","602","603","604","605","606","607","608","609","610","611","612","613","614","615","616","617","618","619","625","626","627","628","629","630","631","632","633","634","635","636","637","638","639","640","641","642","643","644","645","646","648","649","650","651","652","654","655","656","657","658","659","660","661","662","663","664","665","666","668","669","671","672","674","675","676","677","678","679","680","1024","1025","1026","1027","1028","1029","1030","1031","1032","1033","1034","1035","1036","1037","1038","1039","1040","1041","1042","1043","1044","1045","1046","1047","1048","1049","1050","1051","1052","1053","1054","1055","1056","1057","1058","1059","1061","1062","1063","1066","1067","1068","1069","1070","1071","1072","1073","1075","1076","1077","1078","1079","1080","1081","1082","1083","1084","1085","1086","1087","1088","1089","1090","1091","1092","1093","1094","1095","1096","1097","1098","1099","1100","1101","1102","1103","1104","1105","1111","1112","1113","1114","1115","1116","1117","1118","1119","1120","1121","1122","1123","1124","1125","1126","1128","1129","1130","1131","1132","1133","1134","1135","1136","1137","1138","1139","1140","1141","1142","1143","1144","1145","1146","1147","1148","1149","1150","1152","1153","1154","1155","1156","1157","1158","1159","1160","1161","1162","1163","1164","1165","1166","1167","1168","1169","1170","1171","1172","1173","1177","1178","1180","1181","1182","2048","2049","2050","2051","2052","2053","2054","2055","2056","2057","2058","2060","2067","2068","2069","2070","2071","2072","2073","2075","2076","2077","2078","2079","2080","2081","2082","2083","2084","2085","2086","2087","2088","2089","2090","2091","2092","2093","2094","2095","2096","2097","2098","2099","2100","2101","2102","2103","2104","2105","2106","2107","2108","2109","2110","2111","2112","2113","2114","2115","2116","2117","2118","2119","2120","2121","2122","2123","2124","2125","2126","2127","2128","2129","2130","2131","2132","2133","2134","2135","2136","402","1212","2059","2061","2062","2063","2064","2066","2137","2138","2146","2147","2148","2149","2150","2151","2152","2154","2155","2156","2161","2162","2164","2165","2166","2167","2168","2169","2170","2171","2172","2173","2174","2175","2180","2181","2182","2183","2184","2185","2186","2187","2188","2189","2190","2191","2192","2194","2195","2196","2197","2198","2199","2200","2201","2202","2203","2204","2205","2206","2207","2211","2212","2213","2214","2215","4097","4098","4099","4102","4103","4105","4106","4107","4108","4109","4116","4117","4118","4119","4120","4121","4122","4123","4124","4125","4126","4127","4128","4129","4130","4132","4133","4134","4135","4146","4147","4148","4149","4154","4156","4157","4158","4159","4160","4161","4163","4164","4165","4166","4168","4170","4171","4174","4175","4176","4177","4187","4188","4189","4191","4192","4193","4194","4195","4196","4197","4198","4199","4200","2157","2163","2177","2240","2241","2242","2243","2244","2245","2246","2247","2248","2249","2250","2251","parse_ods","ODS","fix_opts_func","fix_opts","fix_write_opts","safe_parse_wbrels","wbrels","pwbr","safe_parse_ws","relsPath","nodirs","parse_zip","entries","binname","propdata","pluck","deps","bookDeps","wbsheets","wbext","wbrelsfile","nmode","Deps","Styles","Themes","bookVBA","vbaraw","bin","add_rels","rId","relobj","write_zip","General","firstbyte","read_zip","isfile","FILENAME","write_zip_type","StyleBuilder","writeFileSync","writeSync","decode_row","rowstr","unfix_row","fix_row","cstr","decode_col","colstr","unfix_col","fix_col","split_cell","splt","fix_cell","unfix_cell","decode_range","cs","ce","safe_format_cell","format_cell","sheet_to_json","isempty","outi","defineProperty","enumerable","__rowNum__","sheet_to_row_object_array","sheet_to_csv","txt","qreg","FS","RS","make_csv","sheet_to_formulae","cmds","get_formulae","make_json","make_formulae","XmlNode","tagName","attributes","children","_attributes","_children","_prefix","createElement","prefix","APOS","QUOTE","ESCAPED_QUOTE","escapeAttributeValue","att_value","customNumFmtId","fmt_table","_hashIndex","_listIndex","initialize","$fonts","$fills","$borders","$numFmts","$cellStyleXfs","$xf","$cellXfs","$cellStyles","$dxfs","$tableStyles","$styles","defaultStyle","defaultCellStyle","gray125Style","addStyles","hashKey","_addXf","_duckTypeStyle","patternFill","_getStyleCSS","css","_addFont","_addFill","_addBorder","_addNumFmt","$alignment","readingOrder","$font","numFmtIdx","$numFmt","$patternFill","$fgColor","$bgColor","$fill","_getSubBorder","direction","spec","$direction","$color","$border","directions","readFile","write","writeFile","XLS"],"mappings":"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AAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,SAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,SAAY,WACpC,WAAY,WAAY,SAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,SACpC,WAAY,WAAY,WAAY,SACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY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","file":"dist/xlsx.core.min.js"}
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/dist/xlsx.full.min.js b/Source/UBCS-WEB/src/config/js-xlsx-master/dist/xlsx.full.min.js
new file mode 100644
index 0000000..a343649
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/dist/xlsx.full.min.js
@@ -0,0 +1,20 @@
+/* xlsx.js (C) 2013-2015 SheetJS -- http://sheetjs.com */
+!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.JSZip=e()}}(function(){var define,module,exports;return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(_dereq_,module,exports){"use strict";var _keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";exports.encode=function(input,utf8){var output="";var chr1,chr2,chr3,enc1,enc2,enc3,enc4;var i=0;while(i<input.length){chr1=input.charCodeAt(i++);chr2=input.charCodeAt(i++);chr3=input.charCodeAt(i++);enc1=chr1>>2;enc2=(chr1&3)<<4|chr2>>4;enc3=(chr2&15)<<2|chr3>>6;enc4=chr3&63;if(isNaN(chr2)){enc3=enc4=64}else if(isNaN(chr3)){enc4=64}output=output+_keyStr.charAt(enc1)+_keyStr.charAt(enc2)+_keyStr.charAt(enc3)+_keyStr.charAt(enc4)}return output};exports.decode=function(input,utf8){var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");while(i<input.length){enc1=_keyStr.indexOf(input.charAt(i++));enc2=_keyStr.indexOf(input.charAt(i++));enc3=_keyStr.indexOf(input.charAt(i++));enc4=_keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!=64){output=output+String.fromCharCode(chr2)}if(enc4!=64){output=output+String.fromCharCode(chr3)}}return output}},{}],2:[function(_dereq_,module,exports){"use strict";function CompressedObject(){this.compressedSize=0;this.uncompressedSize=0;this.crc32=0;this.compressionMethod=null;this.compressedContent=null}CompressedObject.prototype={getContent:function(){return null},getCompressedContent:function(){return null}};module.exports=CompressedObject},{}],3:[function(_dereq_,module,exports){"use strict";exports.STORE={magic:"\0\0",compress:function(content){return content},uncompress:function(content){return content},compressInputType:null,uncompressInputType:null};exports.DEFLATE=_dereq_("./flate")},{"./flate":8}],4:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("./utils");var table=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117];module.exports=function crc32(input,crc){if(typeof input==="undefined"||!input.length){return 0}var isArray=utils.getTypeOf(input)!=="string";if(typeof crc=="undefined"){crc=0}var x=0;var y=0;var b=0;crc=crc^-1;for(var i=0,iTop=input.length;i<iTop;i++){b=isArray?input[i]:input.charCodeAt(i);y=(crc^b)&255;x=table[y];crc=crc>>>8^x}return crc^-1}},{"./utils":21}],5:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("./utils");function DataReader(data){this.data=null;this.length=0;this.index=0}DataReader.prototype={checkOffset:function(offset){this.checkIndex(this.index+offset)},checkIndex:function(newIndex){if(this.length<newIndex||newIndex<0){throw new Error("End of data reached (data length = "+this.length+", asked index = "+newIndex+"). Corrupted zip ?")}},setIndex:function(newIndex){this.checkIndex(newIndex);this.index=newIndex},skip:function(n){this.setIndex(this.index+n)},byteAt:function(i){},readInt:function(size){var result=0,i;this.checkOffset(size);for(i=this.index+size-1;i>=this.index;i--){result=(result<<8)+this.byteAt(i)}this.index+=size;return result},readString:function(size){return utils.transformTo("string",this.readData(size))},readData:function(size){},lastIndexOfSignature:function(sig){},readDate:function(){var dostime=this.readInt(4);return new Date((dostime>>25&127)+1980,(dostime>>21&15)-1,dostime>>16&31,dostime>>11&31,dostime>>5&63,(dostime&31)<<1)}};module.exports=DataReader},{"./utils":21}],6:[function(_dereq_,module,exports){"use strict";exports.base64=false;exports.binary=false;exports.dir=false;exports.createFolders=false;exports.date=null;exports.compression=null;exports.comment=null},{}],7:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("./utils");exports.string2binary=function(str){return utils.string2binary(str)};exports.string2Uint8Array=function(str){return utils.transformTo("uint8array",str)};exports.uint8Array2String=function(array){return utils.transformTo("string",array)};exports.string2Blob=function(str){var buffer=utils.transformTo("arraybuffer",str);return utils.arrayBuffer2Blob(buffer)};exports.arrayBuffer2Blob=function(buffer){return utils.arrayBuffer2Blob(buffer)};exports.transformTo=function(outputType,input){return utils.transformTo(outputType,input)};exports.getTypeOf=function(input){return utils.getTypeOf(input)};exports.checkSupport=function(type){return utils.checkSupport(type)};exports.MAX_VALUE_16BITS=utils.MAX_VALUE_16BITS;exports.MAX_VALUE_32BITS=utils.MAX_VALUE_32BITS;exports.pretty=function(str){return utils.pretty(str)};exports.findCompression=function(compressionMethod){return utils.findCompression(compressionMethod)};exports.isRegExp=function(object){return utils.isRegExp(object)}},{"./utils":21}],8:[function(_dereq_,module,exports){"use strict";var USE_TYPEDARRAY=typeof Uint8Array!=="undefined"&&typeof Uint16Array!=="undefined"&&typeof Uint32Array!=="undefined";var pako=_dereq_("pako");exports.uncompressInputType=USE_TYPEDARRAY?"uint8array":"array";exports.compressInputType=USE_TYPEDARRAY?"uint8array":"array";exports.magic="\b\0";exports.compress=function(input){return pako.deflateRaw(input)};exports.uncompress=function(input){return pako.inflateRaw(input)}},{pako:24}],9:[function(_dereq_,module,exports){"use strict";var base64=_dereq_("./base64");function JSZip(data,options){if(!(this instanceof JSZip))return new JSZip(data,options);this.files={};this.comment=null;this.root="";if(data){this.load(data,options)}this.clone=function(){var newObj=new JSZip;for(var i in this){if(typeof this[i]!=="function"){newObj[i]=this[i]}}return newObj}}JSZip.prototype=_dereq_("./object");JSZip.prototype.load=_dereq_("./load");JSZip.support=_dereq_("./support");JSZip.defaults=_dereq_("./defaults");JSZip.utils=_dereq_("./deprecatedPublicUtils");JSZip.base64={encode:function(input){return base64.encode(input)},decode:function(input){return base64.decode(input)}};JSZip.compressions=_dereq_("./compressions");module.exports=JSZip},{"./base64":1,"./compressions":3,"./defaults":6,"./deprecatedPublicUtils":7,"./load":10,"./object":13,"./support":17}],10:[function(_dereq_,module,exports){"use strict";var base64=_dereq_("./base64");var ZipEntries=_dereq_("./zipEntries");module.exports=function(data,options){var files,zipEntries,i,input;options=options||{};if(options.base64){data=base64.decode(data)}zipEntries=new ZipEntries(data,options);files=zipEntries.files;for(i=0;i<files.length;i++){input=files[i];this.file(input.fileName,input.decompressed,{binary:true,optimizedBinaryString:true,date:input.date,dir:input.dir,comment:input.fileComment.length?input.fileComment:null,createFolders:options.createFolders})}if(zipEntries.zipComment.length){this.comment=zipEntries.zipComment}return this}},{"./base64":1,"./zipEntries":22}],11:[function(_dereq_,module,exports){(function(Buffer){"use strict";module.exports=function(data,encoding){return new Buffer(data,encoding)};module.exports.test=function(b){return Buffer.isBuffer(b)}}).call(this,typeof Buffer!=="undefined"?Buffer:undefined)},{}],12:[function(_dereq_,module,exports){"use strict";var Uint8ArrayReader=_dereq_("./uint8ArrayReader");function NodeBufferReader(data){this.data=data;this.length=this.data.length;this.index=0}NodeBufferReader.prototype=new Uint8ArrayReader;NodeBufferReader.prototype.readData=function(size){this.checkOffset(size);var result=this.data.slice(this.index,this.index+size);this.index+=size;return result};module.exports=NodeBufferReader},{"./uint8ArrayReader":18}],13:[function(_dereq_,module,exports){"use strict";var support=_dereq_("./support");var utils=_dereq_("./utils");var crc32=_dereq_("./crc32");var signature=_dereq_("./signature");var defaults=_dereq_("./defaults");var base64=_dereq_("./base64");var compressions=_dereq_("./compressions");var CompressedObject=_dereq_("./compressedObject");var nodeBuffer=_dereq_("./nodeBuffer");var utf8=_dereq_("./utf8");var StringWriter=_dereq_("./stringWriter");var Uint8ArrayWriter=_dereq_("./uint8ArrayWriter");var getRawData=function(file){if(file._data instanceof CompressedObject){file._data=file._data.getContent();file.options.binary=true;file.options.base64=false;if(utils.getTypeOf(file._data)==="uint8array"){var copy=file._data;file._data=new Uint8Array(copy.length);if(copy.length!==0){file._data.set(copy,0)}}}return file._data};var getBinaryData=function(file){var result=getRawData(file),type=utils.getTypeOf(result);if(type==="string"){if(!file.options.binary){if(support.nodebuffer){return nodeBuffer(result,"utf-8")}}return file.asBinary()}return result};var dataToString=function(asUTF8){var result=getRawData(this);if(result===null||typeof result==="undefined"){return""}if(this.options.base64){result=base64.decode(result)}if(asUTF8&&this.options.binary){result=out.utf8decode(result)}else{result=utils.transformTo("string",result)}if(!asUTF8&&!this.options.binary){result=utils.transformTo("string",out.utf8encode(result))}return result};var ZipObject=function(name,data,options){this.name=name;this.dir=options.dir;this.date=options.date;this.comment=options.comment;this._data=data;this.options=options;this._initialMetadata={dir:options.dir,date:options.date}};ZipObject.prototype={asText:function(){return dataToString.call(this,true)},asBinary:function(){return dataToString.call(this,false)},asNodeBuffer:function(){var result=getBinaryData(this);return utils.transformTo("nodebuffer",result)},asUint8Array:function(){var result=getBinaryData(this);return utils.transformTo("uint8array",result)},asArrayBuffer:function(){return this.asUint8Array().buffer}};var decToHex=function(dec,bytes){var hex="",i;for(i=0;i<bytes;i++){hex+=String.fromCharCode(dec&255);dec=dec>>>8}return hex};var extend=function(){var result={},i,attr;for(i=0;i<arguments.length;i++){for(attr in arguments[i]){if(arguments[i].hasOwnProperty(attr)&&typeof result[attr]==="undefined"){result[attr]=arguments[i][attr]}}}return result};var prepareFileAttrs=function(o){o=o||{};if(o.base64===true&&(o.binary===null||o.binary===undefined)){o.binary=true}o=extend(o,defaults);o.date=o.date||new Date;if(o.compression!==null)o.compression=o.compression.toUpperCase();return o};var fileAdd=function(name,data,o){var dataType=utils.getTypeOf(data),parent;o=prepareFileAttrs(o);if(o.createFolders&&(parent=parentFolder(name))){folderAdd.call(this,parent,true)}if(o.dir||data===null||typeof data==="undefined"){o.base64=false;o.binary=false;data=null}else if(dataType==="string"){if(o.binary&&!o.base64){if(o.optimizedBinaryString!==true){data=utils.string2binary(data)}}}else{o.base64=false;o.binary=true;if(!dataType&&!(data instanceof CompressedObject)){throw new Error("The data of '"+name+"' is in an unsupported format !")}if(dataType==="arraybuffer"){data=utils.transformTo("uint8array",data)}}var object=new ZipObject(name,data,o);this.files[name]=object;return object};var parentFolder=function(path){if(path.slice(-1)=="/"){path=path.substring(0,path.length-1)}var lastSlash=path.lastIndexOf("/");return lastSlash>0?path.substring(0,lastSlash):""};var folderAdd=function(name,createFolders){if(name.slice(-1)!="/"){name+="/"}createFolders=typeof createFolders!=="undefined"?createFolders:false;if(!this.files[name]){fileAdd.call(this,name,null,{dir:true,createFolders:createFolders})}return this.files[name]};var generateCompressedObjectFrom=function(file,compression){var result=new CompressedObject,content;if(file._data instanceof CompressedObject){result.uncompressedSize=file._data.uncompressedSize;result.crc32=file._data.crc32;if(result.uncompressedSize===0||file.dir){compression=compressions["STORE"];result.compressedContent="";result.crc32=0}else if(file._data.compressionMethod===compression.magic){result.compressedContent=file._data.getCompressedContent()}else{content=file._data.getContent();result.compressedContent=compression.compress(utils.transformTo(compression.compressInputType,content))}}else{content=getBinaryData(file);if(!content||content.length===0||file.dir){compression=compressions["STORE"];content=""}result.uncompressedSize=content.length;result.crc32=crc32(content);result.compressedContent=compression.compress(utils.transformTo(compression.compressInputType,content))}result.compressedSize=result.compressedContent.length;result.compressionMethod=compression.magic;return result};var generateZipParts=function(name,file,compressedObject,offset){var data=compressedObject.compressedContent,utfEncodedFileName=utils.transformTo("string",utf8.utf8encode(file.name)),comment=file.comment||"",utfEncodedComment=utils.transformTo("string",utf8.utf8encode(comment)),useUTF8ForFileName=utfEncodedFileName.length!==file.name.length,useUTF8ForComment=utfEncodedComment.length!==comment.length,o=file.options,dosTime,dosDate,extraFields="",unicodePathExtraField="",unicodeCommentExtraField="",dir,date;if(file._initialMetadata.dir!==file.dir){dir=file.dir}else{dir=o.dir}if(file._initialMetadata.date!==file.date){date=file.date}else{date=o.date}dosTime=date.getHours();dosTime=dosTime<<6;dosTime=dosTime|date.getMinutes();dosTime=dosTime<<5;dosTime=dosTime|date.getSeconds()/2;dosDate=date.getFullYear()-1980;dosDate=dosDate<<4;dosDate=dosDate|date.getMonth()+1;dosDate=dosDate<<5;dosDate=dosDate|date.getDate();if(useUTF8ForFileName){unicodePathExtraField=decToHex(1,1)+decToHex(crc32(utfEncodedFileName),4)+utfEncodedFileName;extraFields+="up"+decToHex(unicodePathExtraField.length,2)+unicodePathExtraField}if(useUTF8ForComment){unicodeCommentExtraField=decToHex(1,1)+decToHex(this.crc32(utfEncodedComment),4)+utfEncodedComment;extraFields+="uc"+decToHex(unicodeCommentExtraField.length,2)+unicodeCommentExtraField}var header="";header+="\n\0";header+=useUTF8ForFileName||useUTF8ForComment?"\0\b":"\0\0";header+=compressedObject.compressionMethod;header+=decToHex(dosTime,2);header+=decToHex(dosDate,2);header+=decToHex(compressedObject.crc32,4);header+=decToHex(compressedObject.compressedSize,4);header+=decToHex(compressedObject.uncompressedSize,4);header+=decToHex(utfEncodedFileName.length,2);header+=decToHex(extraFields.length,2);var fileRecord=signature.LOCAL_FILE_HEADER+header+utfEncodedFileName+extraFields;var dirRecord=signature.CENTRAL_FILE_HEADER+"\0"+header+decToHex(utfEncodedComment.length,2)+"\0\0"+"\0\0"+(dir===true?"\0\0\0":"\0\0\0\0")+decToHex(offset,4)+utfEncodedFileName+extraFields+utfEncodedComment;return{fileRecord:fileRecord,dirRecord:dirRecord,compressedObject:compressedObject}};var out={load:function(stream,options){throw new Error("Load method is not defined. Is the file jszip-load.js included ?")},filter:function(search){var result=[],filename,relativePath,file,fileClone;for(filename in this.files){if(!this.files.hasOwnProperty(filename)){continue}file=this.files[filename];fileClone=new ZipObject(file.name,file._data,extend(file.options));relativePath=filename.slice(this.root.length,filename.length);if(filename.slice(0,this.root.length)===this.root&&search(relativePath,fileClone)){result.push(fileClone)}}return result},file:function(name,data,o){if(arguments.length===1){if(utils.isRegExp(name)){var regexp=name;return this.filter(function(relativePath,file){return!file.dir&&regexp.test(relativePath)})}else{return this.filter(function(relativePath,file){return!file.dir&&relativePath===name})[0]||null}}else{name=this.root+name;fileAdd.call(this,name,data,o)}return this},folder:function(arg){if(!arg){return this}if(utils.isRegExp(arg)){return this.filter(function(relativePath,file){return file.dir&&arg.test(relativePath)})}var name=this.root+arg;var newFolder=folderAdd.call(this,name);var ret=this.clone();ret.root=newFolder.name;return ret},remove:function(name){name=this.root+name;var file=this.files[name];if(!file){if(name.slice(-1)!="/"){name+="/"}file=this.files[name]}if(file&&!file.dir){delete this.files[name]}else{var kids=this.filter(function(relativePath,file){return file.name.slice(0,name.length)===name});for(var i=0;i<kids.length;i++){delete this.files[kids[i].name]}}return this},generate:function(options){options=extend(options||{},{base64:true,compression:"STORE",type:"base64",comment:null});utils.checkSupport(options.type);var zipData=[],localDirLength=0,centralDirLength=0,writer,i,utfEncodedComment=utils.transformTo("string",this.utf8encode(options.comment||this.comment||""));for(var name in this.files){if(!this.files.hasOwnProperty(name)){continue}var file=this.files[name];var compressionName=file.options.compression||options.compression.toUpperCase();var compression=compressions[compressionName];if(!compression){throw new Error(compressionName+" is not a valid compression method !")}var compressedObject=generateCompressedObjectFrom.call(this,file,compression);var zipPart=generateZipParts.call(this,name,file,compressedObject,localDirLength);localDirLength+=zipPart.fileRecord.length+compressedObject.compressedSize;centralDirLength+=zipPart.dirRecord.length;zipData.push(zipPart)}var dirEnd="";dirEnd=signature.CENTRAL_DIRECTORY_END+"\0\0"+"\0\0"+decToHex(zipData.length,2)+decToHex(zipData.length,2)+decToHex(centralDirLength,4)+decToHex(localDirLength,4)+decToHex(utfEncodedComment.length,2)+utfEncodedComment;var typeName=options.type.toLowerCase();if(typeName==="uint8array"||typeName==="arraybuffer"||typeName==="blob"||typeName==="nodebuffer"){writer=new Uint8ArrayWriter(localDirLength+centralDirLength+dirEnd.length)}else{writer=new StringWriter(localDirLength+centralDirLength+dirEnd.length)}for(i=0;i<zipData.length;i++){writer.append(zipData[i].fileRecord);writer.append(zipData[i].compressedObject.compressedContent)}for(i=0;i<zipData.length;i++){writer.append(zipData[i].dirRecord)}writer.append(dirEnd);var zip=writer.finalize();switch(options.type.toLowerCase()){case"uint8array":case"arraybuffer":case"nodebuffer":return utils.transformTo(options.type.toLowerCase(),zip);case"blob":return utils.arrayBuffer2Blob(utils.transformTo("arraybuffer",zip));case"base64":return options.base64?base64.encode(zip):zip;default:return zip}},crc32:function(input,crc){return crc32(input,crc)},utf8encode:function(string){return utils.transformTo("string",utf8.utf8encode(string))},utf8decode:function(input){return utf8.utf8decode(input)}};module.exports=out},{"./base64":1,"./compressedObject":2,"./compressions":3,"./crc32":4,"./defaults":6,"./nodeBuffer":11,"./signature":14,"./stringWriter":16,"./support":17,"./uint8ArrayWriter":19,"./utf8":20,"./utils":21}],14:[function(_dereq_,module,exports){"use strict";exports.LOCAL_FILE_HEADER="PK";exports.CENTRAL_FILE_HEADER="PK";exports.CENTRAL_DIRECTORY_END="PK";exports.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK";exports.ZIP64_CENTRAL_DIRECTORY_END="PK";exports.DATA_DESCRIPTOR="PK\b"},{}],15:[function(_dereq_,module,exports){"use strict";var DataReader=_dereq_("./dataReader");var utils=_dereq_("./utils");function StringReader(data,optimizedBinaryString){this.data=data;if(!optimizedBinaryString){this.data=utils.string2binary(this.data)}this.length=this.data.length;this.index=0}StringReader.prototype=new DataReader;StringReader.prototype.byteAt=function(i){return this.data.charCodeAt(i)};StringReader.prototype.lastIndexOfSignature=function(sig){return this.data.lastIndexOf(sig)};StringReader.prototype.readData=function(size){this.checkOffset(size);var result=this.data.slice(this.index,this.index+size);this.index+=size;return result};module.exports=StringReader},{"./dataReader":5,"./utils":21}],16:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("./utils");var StringWriter=function(){this.data=[]};StringWriter.prototype={append:function(input){input=utils.transformTo("string",input);this.data.push(input)},finalize:function(){return this.data.join("")}};module.exports=StringWriter},{"./utils":21}],17:[function(_dereq_,module,exports){(function(Buffer){"use strict";exports.base64=true;exports.array=true;exports.string=true;exports.arraybuffer=typeof ArrayBuffer!=="undefined"&&typeof Uint8Array!=="undefined";exports.nodebuffer=typeof Buffer!=="undefined";exports.uint8array=typeof Uint8Array!=="undefined";if(typeof ArrayBuffer==="undefined"){exports.blob=false}else{var buffer=new ArrayBuffer(0);try{exports.blob=new Blob([buffer],{type:"application/zip"}).size===0}catch(e){try{var Builder=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder;var builder=new Builder;builder.append(buffer);exports.blob=builder.getBlob("application/zip").size===0}catch(e){exports.blob=false}}}}).call(this,typeof Buffer!=="undefined"?Buffer:undefined)},{}],18:[function(_dereq_,module,exports){"use strict";var DataReader=_dereq_("./dataReader");function Uint8ArrayReader(data){if(data){this.data=data;this.length=this.data.length;this.index=0}}Uint8ArrayReader.prototype=new DataReader;Uint8ArrayReader.prototype.byteAt=function(i){return this.data[i]};Uint8ArrayReader.prototype.lastIndexOfSignature=function(sig){var sig0=sig.charCodeAt(0),sig1=sig.charCodeAt(1),sig2=sig.charCodeAt(2),sig3=sig.charCodeAt(3);for(var i=this.length-4;i>=0;--i){if(this.data[i]===sig0&&this.data[i+1]===sig1&&this.data[i+2]===sig2&&this.data[i+3]===sig3){return i}}return-1};Uint8ArrayReader.prototype.readData=function(size){this.checkOffset(size);if(size===0){return new Uint8Array(0)}var result=this.data.subarray(this.index,this.index+size);this.index+=size;return result};module.exports=Uint8ArrayReader},{"./dataReader":5}],19:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("./utils");var Uint8ArrayWriter=function(length){this.data=new Uint8Array(length);this.index=0};Uint8ArrayWriter.prototype={append:function(input){if(input.length!==0){input=utils.transformTo("uint8array",input);this.data.set(input,this.index);this.index+=input.length}},finalize:function(){return this.data}};module.exports=Uint8ArrayWriter},{"./utils":21}],20:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("./utils");var support=_dereq_("./support");var nodeBuffer=_dereq_("./nodeBuffer");var _utf8len=new Array(256);for(var i=0;i<256;i++){_utf8len[i]=i>=252?6:i>=248?5:i>=240?4:i>=224?3:i>=192?2:1}_utf8len[254]=_utf8len[254]=1;var string2buf=function(str){var buf,c,c2,m_pos,i,str_len=str.length,buf_len=0;for(m_pos=0;m_pos<str_len;m_pos++){c=str.charCodeAt(m_pos);if((c&64512)===55296&&m_pos+1<str_len){c2=str.charCodeAt(m_pos+1);if((c2&64512)===56320){c=65536+(c-55296<<10)+(c2-56320);m_pos++}}buf_len+=c<128?1:c<2048?2:c<65536?3:4}if(support.uint8array){buf=new Uint8Array(buf_len)}else{buf=new Array(buf_len)}for(i=0,m_pos=0;i<buf_len;m_pos++){c=str.charCodeAt(m_pos);if((c&64512)===55296&&m_pos+1<str_len){c2=str.charCodeAt(m_pos+1);if((c2&64512)===56320){c=65536+(c-55296<<10)+(c2-56320);m_pos++}}if(c<128){buf[i++]=c}else if(c<2048){buf[i++]=192|c>>>6;buf[i++]=128|c&63}else if(c<65536){buf[i++]=224|c>>>12;buf[i++]=128|c>>>6&63;buf[i++]=128|c&63}else{buf[i++]=240|c>>>18;buf[i++]=128|c>>>12&63;buf[i++]=128|c>>>6&63;buf[i++]=128|c&63}}return buf};var utf8border=function(buf,max){var pos;max=max||buf.length;if(max>buf.length){max=buf.length}pos=max-1;while(pos>=0&&(buf[pos]&192)===128){pos--}if(pos<0){return max}if(pos===0){return max}return pos+_utf8len[buf[pos]]>max?pos:max};var buf2string=function(buf){var str,i,out,c,c_len;var len=buf.length;var utf16buf=new Array(len*2);for(out=0,i=0;i<len;){c=buf[i++];if(c<128){utf16buf[out++]=c;continue}c_len=_utf8len[c];if(c_len>4){utf16buf[out++]=65533;i+=c_len-1;continue}c&=c_len===2?31:c_len===3?15:7;while(c_len>1&&i<len){c=c<<6|buf[i++]&63;c_len--}if(c_len>1){utf16buf[out++]=65533;continue}if(c<65536){utf16buf[out++]=c}else{c-=65536;utf16buf[out++]=55296|c>>10&1023;utf16buf[out++]=56320|c&1023}}if(utf16buf.length!==out){if(utf16buf.subarray){utf16buf=utf16buf.subarray(0,out)}else{utf16buf.length=out}}return utils.applyFromCharCode(utf16buf)};exports.utf8encode=function utf8encode(str){if(support.nodebuffer){return nodeBuffer(str,"utf-8")}return string2buf(str)};exports.utf8decode=function utf8decode(buf){if(support.nodebuffer){return utils.transformTo("nodebuffer",buf).toString("utf-8")}buf=utils.transformTo(support.uint8array?"uint8array":"array",buf);var result=[],k=0,len=buf.length,chunk=65536;while(k<len){var nextBoundary=utf8border(buf,Math.min(k+chunk,len));if(support.uint8array){result.push(buf2string(buf.subarray(k,nextBoundary)))}else{result.push(buf2string(buf.slice(k,nextBoundary)))}k=nextBoundary}return result.join("")}},{"./nodeBuffer":11,"./support":17,"./utils":21}],21:[function(_dereq_,module,exports){"use strict";var support=_dereq_("./support");var compressions=_dereq_("./compressions");var nodeBuffer=_dereq_("./nodeBuffer");exports.string2binary=function(str){var result="";for(var i=0;i<str.length;i++){result+=String.fromCharCode(str.charCodeAt(i)&255)}return result};exports.arrayBuffer2Blob=function(buffer){exports.checkSupport("blob");try{return new Blob([buffer],{type:"application/zip"})}catch(e){try{var Builder=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder;var builder=new Builder;builder.append(buffer);return builder.getBlob("application/zip")}catch(e){throw new Error("Bug : can't construct the Blob.")}}};function identity(input){return input}function stringToArrayLike(str,array){for(var i=0;i<str.length;++i){array[i]=str.charCodeAt(i)&255}return array}function arrayLikeToString(array){var chunk=65536;var result=[],len=array.length,type=exports.getTypeOf(array),k=0,canUseApply=true;try{switch(type){case"uint8array":String.fromCharCode.apply(null,new Uint8Array(0));break;case"nodebuffer":String.fromCharCode.apply(null,nodeBuffer(0));break}}catch(e){canUseApply=false}if(!canUseApply){var resultStr="";for(var i=0;i<array.length;i++){resultStr+=String.fromCharCode(array[i])}return resultStr}while(k<len&&chunk>1){try{if(type==="array"||type==="nodebuffer"){result.push(String.fromCharCode.apply(null,array.slice(k,Math.min(k+chunk,len))))}else{result.push(String.fromCharCode.apply(null,array.subarray(k,Math.min(k+chunk,len))))}k+=chunk}catch(e){chunk=Math.floor(chunk/2)}}return result.join("")}exports.applyFromCharCode=arrayLikeToString;function arrayLikeToArrayLike(arrayFrom,arrayTo){for(var i=0;i<arrayFrom.length;i++){arrayTo[i]=arrayFrom[i]}return arrayTo}var transform={};transform["string"]={string:identity,array:function(input){return stringToArrayLike(input,new Array(input.length))},arraybuffer:function(input){return transform["string"]["uint8array"](input).buffer},uint8array:function(input){return stringToArrayLike(input,new Uint8Array(input.length))},nodebuffer:function(input){return stringToArrayLike(input,nodeBuffer(input.length))}};transform["array"]={string:arrayLikeToString,array:identity,arraybuffer:function(input){return new Uint8Array(input).buffer},uint8array:function(input){return new Uint8Array(input)},nodebuffer:function(input){return nodeBuffer(input)}};transform["arraybuffer"]={string:function(input){return arrayLikeToString(new Uint8Array(input))},array:function(input){return arrayLikeToArrayLike(new Uint8Array(input),new Array(input.byteLength))},arraybuffer:identity,uint8array:function(input){return new Uint8Array(input)},nodebuffer:function(input){return nodeBuffer(new Uint8Array(input))}};transform["uint8array"]={string:arrayLikeToString,array:function(input){return arrayLikeToArrayLike(input,new Array(input.length))},arraybuffer:function(input){return input.buffer},uint8array:identity,nodebuffer:function(input){return nodeBuffer(input)}};transform["nodebuffer"]={string:arrayLikeToString,array:function(input){return arrayLikeToArrayLike(input,new Array(input.length))},arraybuffer:function(input){return transform["nodebuffer"]["uint8array"](input).buffer},uint8array:function(input){return arrayLikeToArrayLike(input,new Uint8Array(input.length))},nodebuffer:identity};exports.transformTo=function(outputType,input){if(!input){input=""}if(!outputType){return input}exports.checkSupport(outputType);var inputType=exports.getTypeOf(input);var result=transform[inputType][outputType](input);return result};exports.getTypeOf=function(input){if(typeof input==="string"){return"string"}if(Object.prototype.toString.call(input)==="[object Array]"){return"array"}if(support.nodebuffer&&nodeBuffer.test(input)){return"nodebuffer"}if(support.uint8array&&input instanceof Uint8Array){return"uint8array"}if(support.arraybuffer&&input instanceof ArrayBuffer){return"arraybuffer"}};exports.checkSupport=function(type){var supported=support[type.toLowerCase()];if(!supported){throw new Error(type+" is not supported by this browser")}};exports.MAX_VALUE_16BITS=65535;exports.MAX_VALUE_32BITS=-1;exports.pretty=function(str){var res="",code,i;for(i=0;i<(str||"").length;i++){code=str.charCodeAt(i);res+="\\x"+(code<16?"0":"")+code.toString(16).toUpperCase()}return res;
+};exports.findCompression=function(compressionMethod){for(var method in compressions){if(!compressions.hasOwnProperty(method)){continue}if(compressions[method].magic===compressionMethod){return compressions[method]}}return null};exports.isRegExp=function(object){return Object.prototype.toString.call(object)==="[object RegExp]"}},{"./compressions":3,"./nodeBuffer":11,"./support":17}],22:[function(_dereq_,module,exports){"use strict";var StringReader=_dereq_("./stringReader");var NodeBufferReader=_dereq_("./nodeBufferReader");var Uint8ArrayReader=_dereq_("./uint8ArrayReader");var utils=_dereq_("./utils");var sig=_dereq_("./signature");var ZipEntry=_dereq_("./zipEntry");var support=_dereq_("./support");var jszipProto=_dereq_("./object");function ZipEntries(data,loadOptions){this.files=[];this.loadOptions=loadOptions;if(data){this.load(data)}}ZipEntries.prototype={checkSignature:function(expectedSignature){var signature=this.reader.readString(4);if(signature!==expectedSignature){throw new Error("Corrupted zip or bug : unexpected signature "+"("+utils.pretty(signature)+", expected "+utils.pretty(expectedSignature)+")")}},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2);this.diskWithCentralDirStart=this.reader.readInt(2);this.centralDirRecordsOnThisDisk=this.reader.readInt(2);this.centralDirRecords=this.reader.readInt(2);this.centralDirSize=this.reader.readInt(4);this.centralDirOffset=this.reader.readInt(4);this.zipCommentLength=this.reader.readInt(2);this.zipComment=this.reader.readString(this.zipCommentLength);this.zipComment=jszipProto.utf8decode(this.zipComment)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8);this.versionMadeBy=this.reader.readString(2);this.versionNeeded=this.reader.readInt(2);this.diskNumber=this.reader.readInt(4);this.diskWithCentralDirStart=this.reader.readInt(4);this.centralDirRecordsOnThisDisk=this.reader.readInt(8);this.centralDirRecords=this.reader.readInt(8);this.centralDirSize=this.reader.readInt(8);this.centralDirOffset=this.reader.readInt(8);this.zip64ExtensibleData={};var extraDataSize=this.zip64EndOfCentralSize-44,index=0,extraFieldId,extraFieldLength,extraFieldValue;while(index<extraDataSize){extraFieldId=this.reader.readInt(2);extraFieldLength=this.reader.readInt(4);extraFieldValue=this.reader.readString(extraFieldLength);this.zip64ExtensibleData[extraFieldId]={id:extraFieldId,length:extraFieldLength,value:extraFieldValue}}},readBlockZip64EndOfCentralLocator:function(){this.diskWithZip64CentralDirStart=this.reader.readInt(4);this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8);this.disksCount=this.reader.readInt(4);if(this.disksCount>1){throw new Error("Multi-volumes zip are not supported")}},readLocalFiles:function(){var i,file;for(i=0;i<this.files.length;i++){file=this.files[i];this.reader.setIndex(file.localHeaderOffset);this.checkSignature(sig.LOCAL_FILE_HEADER);file.readLocalPart(this.reader);file.handleUTF8()}},readCentralDir:function(){var file;this.reader.setIndex(this.centralDirOffset);while(this.reader.readString(4)===sig.CENTRAL_FILE_HEADER){file=new ZipEntry({zip64:this.zip64},this.loadOptions);file.readCentralPart(this.reader);this.files.push(file)}},readEndOfCentral:function(){var offset=this.reader.lastIndexOfSignature(sig.CENTRAL_DIRECTORY_END);if(offset===-1){throw new Error("Corrupted zip : can't find end of central directory")}this.reader.setIndex(offset);this.checkSignature(sig.CENTRAL_DIRECTORY_END);this.readBlockEndOfCentral();if(this.diskNumber===utils.MAX_VALUE_16BITS||this.diskWithCentralDirStart===utils.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===utils.MAX_VALUE_16BITS||this.centralDirRecords===utils.MAX_VALUE_16BITS||this.centralDirSize===utils.MAX_VALUE_32BITS||this.centralDirOffset===utils.MAX_VALUE_32BITS){this.zip64=true;offset=this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);if(offset===-1){throw new Error("Corrupted zip : can't find the ZIP64 end of central directory locator")}this.reader.setIndex(offset);this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);this.readBlockZip64EndOfCentralLocator();this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir);this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_END);this.readBlockZip64EndOfCentral()}},prepareReader:function(data){var type=utils.getTypeOf(data);if(type==="string"&&!support.uint8array){this.reader=new StringReader(data,this.loadOptions.optimizedBinaryString)}else if(type==="nodebuffer"){this.reader=new NodeBufferReader(data)}else{this.reader=new Uint8ArrayReader(utils.transformTo("uint8array",data))}},load:function(data){this.prepareReader(data);this.readEndOfCentral();this.readCentralDir();this.readLocalFiles()}};module.exports=ZipEntries},{"./nodeBufferReader":12,"./object":13,"./signature":14,"./stringReader":15,"./support":17,"./uint8ArrayReader":18,"./utils":21,"./zipEntry":23}],23:[function(_dereq_,module,exports){"use strict";var StringReader=_dereq_("./stringReader");var utils=_dereq_("./utils");var CompressedObject=_dereq_("./compressedObject");var jszipProto=_dereq_("./object");function ZipEntry(options,loadOptions){this.options=options;this.loadOptions=loadOptions}ZipEntry.prototype={isEncrypted:function(){return(this.bitFlag&1)===1},useUTF8:function(){return(this.bitFlag&2048)===2048},prepareCompressedContent:function(reader,from,length){return function(){var previousIndex=reader.index;reader.setIndex(from);var compressedFileData=reader.readData(length);reader.setIndex(previousIndex);return compressedFileData}},prepareContent:function(reader,from,length,compression,uncompressedSize){return function(){var compressedFileData=utils.transformTo(compression.uncompressInputType,this.getCompressedContent());var uncompressedFileData=compression.uncompress(compressedFileData);if(uncompressedFileData.length!==uncompressedSize){throw new Error("Bug : uncompressed data size mismatch")}return uncompressedFileData}},readLocalPart:function(reader){var compression,localExtraFieldsLength;reader.skip(22);this.fileNameLength=reader.readInt(2);localExtraFieldsLength=reader.readInt(2);this.fileName=reader.readString(this.fileNameLength);reader.skip(localExtraFieldsLength);if(this.compressedSize==-1||this.uncompressedSize==-1){throw new Error("Bug or corrupted zip : didn't get enough informations from the central directory "+"(compressedSize == -1 || uncompressedSize == -1)")}compression=utils.findCompression(this.compressionMethod);if(compression===null){throw new Error("Corrupted zip : compression "+utils.pretty(this.compressionMethod)+" unknown (inner file : "+this.fileName+")")}this.decompressed=new CompressedObject;this.decompressed.compressedSize=this.compressedSize;this.decompressed.uncompressedSize=this.uncompressedSize;this.decompressed.crc32=this.crc32;this.decompressed.compressionMethod=this.compressionMethod;this.decompressed.getCompressedContent=this.prepareCompressedContent(reader,reader.index,this.compressedSize,compression);this.decompressed.getContent=this.prepareContent(reader,reader.index,this.compressedSize,compression,this.uncompressedSize);if(this.loadOptions.checkCRC32){this.decompressed=utils.transformTo("string",this.decompressed.getContent());if(jszipProto.crc32(this.decompressed)!==this.crc32){throw new Error("Corrupted zip : CRC32 mismatch")}}},readCentralPart:function(reader){this.versionMadeBy=reader.readString(2);this.versionNeeded=reader.readInt(2);this.bitFlag=reader.readInt(2);this.compressionMethod=reader.readString(2);this.date=reader.readDate();this.crc32=reader.readInt(4);this.compressedSize=reader.readInt(4);this.uncompressedSize=reader.readInt(4);this.fileNameLength=reader.readInt(2);this.extraFieldsLength=reader.readInt(2);this.fileCommentLength=reader.readInt(2);this.diskNumberStart=reader.readInt(2);this.internalFileAttributes=reader.readInt(2);this.externalFileAttributes=reader.readInt(4);this.localHeaderOffset=reader.readInt(4);if(this.isEncrypted()){throw new Error("Encrypted zip are not supported")}this.fileName=reader.readString(this.fileNameLength);this.readExtraFields(reader);this.parseZIP64ExtraField(reader);this.fileComment=reader.readString(this.fileCommentLength);this.dir=this.externalFileAttributes&16?true:false},parseZIP64ExtraField:function(reader){if(!this.extraFields[1]){return}var extraReader=new StringReader(this.extraFields[1].value);if(this.uncompressedSize===utils.MAX_VALUE_32BITS){this.uncompressedSize=extraReader.readInt(8)}if(this.compressedSize===utils.MAX_VALUE_32BITS){this.compressedSize=extraReader.readInt(8)}if(this.localHeaderOffset===utils.MAX_VALUE_32BITS){this.localHeaderOffset=extraReader.readInt(8)}if(this.diskNumberStart===utils.MAX_VALUE_32BITS){this.diskNumberStart=extraReader.readInt(4)}},readExtraFields:function(reader){var start=reader.index,extraFieldId,extraFieldLength,extraFieldValue;this.extraFields=this.extraFields||{};while(reader.index<start+this.extraFieldsLength){extraFieldId=reader.readInt(2);extraFieldLength=reader.readInt(2);extraFieldValue=reader.readString(extraFieldLength);this.extraFields[extraFieldId]={id:extraFieldId,length:extraFieldLength,value:extraFieldValue}}},handleUTF8:function(){if(this.useUTF8()){this.fileName=jszipProto.utf8decode(this.fileName);this.fileComment=jszipProto.utf8decode(this.fileComment)}else{var upath=this.findExtraFieldUnicodePath();if(upath!==null){this.fileName=upath}var ucomment=this.findExtraFieldUnicodeComment();if(ucomment!==null){this.fileComment=ucomment}}},findExtraFieldUnicodePath:function(){var upathField=this.extraFields[28789];if(upathField){var extraReader=new StringReader(upathField.value);if(extraReader.readInt(1)!==1){return null}if(jszipProto.crc32(this.fileName)!==extraReader.readInt(4)){return null}return jszipProto.utf8decode(extraReader.readString(upathField.length-5))}return null},findExtraFieldUnicodeComment:function(){var ucommentField=this.extraFields[25461];if(ucommentField){var extraReader=new StringReader(ucommentField.value);if(extraReader.readInt(1)!==1){return null}if(jszipProto.crc32(this.fileComment)!==extraReader.readInt(4)){return null}return jszipProto.utf8decode(extraReader.readString(ucommentField.length-5))}return null}};module.exports=ZipEntry},{"./compressedObject":2,"./object":13,"./stringReader":15,"./utils":21}],24:[function(_dereq_,module,exports){"use strict";var assign=_dereq_("./lib/utils/common").assign;var deflate=_dereq_("./lib/deflate");var inflate=_dereq_("./lib/inflate");var constants=_dereq_("./lib/zlib/constants");var pako={};assign(pako,deflate,inflate,constants);module.exports=pako},{"./lib/deflate":25,"./lib/inflate":26,"./lib/utils/common":27,"./lib/zlib/constants":30}],25:[function(_dereq_,module,exports){"use strict";var zlib_deflate=_dereq_("./zlib/deflate.js");var utils=_dereq_("./utils/common");var strings=_dereq_("./utils/strings");var msg=_dereq_("./zlib/messages");var zstream=_dereq_("./zlib/zstream");var Z_NO_FLUSH=0;var Z_FINISH=4;var Z_OK=0;var Z_STREAM_END=1;var Z_DEFAULT_COMPRESSION=-1;var Z_DEFAULT_STRATEGY=0;var Z_DEFLATED=8;var Deflate=function(options){this.options=utils.assign({level:Z_DEFAULT_COMPRESSION,method:Z_DEFLATED,chunkSize:16384,windowBits:15,memLevel:8,strategy:Z_DEFAULT_STRATEGY,to:""},options||{});var opt=this.options;if(opt.raw&&opt.windowBits>0){opt.windowBits=-opt.windowBits}else if(opt.gzip&&opt.windowBits>0&&opt.windowBits<16){opt.windowBits+=16}this.err=0;this.msg="";this.ended=false;this.chunks=[];this.strm=new zstream;this.strm.avail_out=0;var status=zlib_deflate.deflateInit2(this.strm,opt.level,opt.method,opt.windowBits,opt.memLevel,opt.strategy);if(status!==Z_OK){throw new Error(msg[status])}if(opt.header){zlib_deflate.deflateSetHeader(this.strm,opt.header)}};Deflate.prototype.push=function(data,mode){var strm=this.strm;var chunkSize=this.options.chunkSize;var status,_mode;if(this.ended){return false}_mode=mode===~~mode?mode:mode===true?Z_FINISH:Z_NO_FLUSH;if(typeof data==="string"){strm.input=strings.string2buf(data)}else{strm.input=data}strm.next_in=0;strm.avail_in=strm.input.length;do{if(strm.avail_out===0){strm.output=new utils.Buf8(chunkSize);strm.next_out=0;strm.avail_out=chunkSize}status=zlib_deflate.deflate(strm,_mode);if(status!==Z_STREAM_END&&status!==Z_OK){this.onEnd(status);this.ended=true;return false}if(strm.avail_out===0||strm.avail_in===0&&_mode===Z_FINISH){if(this.options.to==="string"){this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output,strm.next_out)))}else{this.onData(utils.shrinkBuf(strm.output,strm.next_out))}}}while((strm.avail_in>0||strm.avail_out===0)&&status!==Z_STREAM_END);if(_mode===Z_FINISH){status=zlib_deflate.deflateEnd(this.strm);this.onEnd(status);this.ended=true;return status===Z_OK}return true};Deflate.prototype.onData=function(chunk){this.chunks.push(chunk)};Deflate.prototype.onEnd=function(status){if(status===Z_OK){if(this.options.to==="string"){this.result=this.chunks.join("")}else{this.result=utils.flattenChunks(this.chunks)}}this.chunks=[];this.err=status;this.msg=this.strm.msg};function deflate(input,options){var deflator=new Deflate(options);deflator.push(input,true);if(deflator.err){throw deflator.msg}return deflator.result}function deflateRaw(input,options){options=options||{};options.raw=true;return deflate(input,options)}function gzip(input,options){options=options||{};options.gzip=true;return deflate(input,options)}exports.Deflate=Deflate;exports.deflate=deflate;exports.deflateRaw=deflateRaw;exports.gzip=gzip},{"./utils/common":27,"./utils/strings":28,"./zlib/deflate.js":32,"./zlib/messages":37,"./zlib/zstream":39}],26:[function(_dereq_,module,exports){"use strict";var zlib_inflate=_dereq_("./zlib/inflate.js");var utils=_dereq_("./utils/common");var strings=_dereq_("./utils/strings");var c=_dereq_("./zlib/constants");var msg=_dereq_("./zlib/messages");var zstream=_dereq_("./zlib/zstream");var gzheader=_dereq_("./zlib/gzheader");var Inflate=function(options){this.options=utils.assign({chunkSize:16384,windowBits:0,to:""},options||{});var opt=this.options;if(opt.raw&&opt.windowBits>=0&&opt.windowBits<16){opt.windowBits=-opt.windowBits;if(opt.windowBits===0){opt.windowBits=-15}}if(opt.windowBits>=0&&opt.windowBits<16&&!(options&&options.windowBits)){opt.windowBits+=32}if(opt.windowBits>15&&opt.windowBits<48){if((opt.windowBits&15)===0){opt.windowBits|=15}}this.err=0;this.msg="";this.ended=false;this.chunks=[];this.strm=new zstream;this.strm.avail_out=0;var status=zlib_inflate.inflateInit2(this.strm,opt.windowBits);if(status!==c.Z_OK){throw new Error(msg[status])}this.header=new gzheader;zlib_inflate.inflateGetHeader(this.strm,this.header)};Inflate.prototype.push=function(data,mode){var strm=this.strm;var chunkSize=this.options.chunkSize;var status,_mode;var next_out_utf8,tail,utf8str;if(this.ended){return false}_mode=mode===~~mode?mode:mode===true?c.Z_FINISH:c.Z_NO_FLUSH;if(typeof data==="string"){strm.input=strings.binstring2buf(data)}else{strm.input=data}strm.next_in=0;strm.avail_in=strm.input.length;do{if(strm.avail_out===0){strm.output=new utils.Buf8(chunkSize);strm.next_out=0;strm.avail_out=chunkSize}status=zlib_inflate.inflate(strm,c.Z_NO_FLUSH);if(status!==c.Z_STREAM_END&&status!==c.Z_OK){this.onEnd(status);this.ended=true;return false}if(strm.next_out){if(strm.avail_out===0||status===c.Z_STREAM_END||strm.avail_in===0&&_mode===c.Z_FINISH){if(this.options.to==="string"){next_out_utf8=strings.utf8border(strm.output,strm.next_out);tail=strm.next_out-next_out_utf8;utf8str=strings.buf2string(strm.output,next_out_utf8);strm.next_out=tail;strm.avail_out=chunkSize-tail;if(tail){utils.arraySet(strm.output,strm.output,next_out_utf8,tail,0)}this.onData(utf8str)}else{this.onData(utils.shrinkBuf(strm.output,strm.next_out))}}}}while(strm.avail_in>0&&status!==c.Z_STREAM_END);if(status===c.Z_STREAM_END){_mode=c.Z_FINISH}if(_mode===c.Z_FINISH){status=zlib_inflate.inflateEnd(this.strm);this.onEnd(status);this.ended=true;return status===c.Z_OK}return true};Inflate.prototype.onData=function(chunk){this.chunks.push(chunk)};Inflate.prototype.onEnd=function(status){if(status===c.Z_OK){if(this.options.to==="string"){this.result=this.chunks.join("")}else{this.result=utils.flattenChunks(this.chunks)}}this.chunks=[];this.err=status;this.msg=this.strm.msg};function inflate(input,options){var inflator=new Inflate(options);inflator.push(input,true);if(inflator.err){throw inflator.msg}return inflator.result}function inflateRaw(input,options){options=options||{};options.raw=true;return inflate(input,options)}exports.Inflate=Inflate;exports.inflate=inflate;exports.inflateRaw=inflateRaw;exports.ungzip=inflate},{"./utils/common":27,"./utils/strings":28,"./zlib/constants":30,"./zlib/gzheader":33,"./zlib/inflate.js":35,"./zlib/messages":37,"./zlib/zstream":39}],27:[function(_dereq_,module,exports){"use strict";var TYPED_OK=typeof Uint8Array!=="undefined"&&typeof Uint16Array!=="undefined"&&typeof Int32Array!=="undefined";exports.assign=function(obj){var sources=Array.prototype.slice.call(arguments,1);while(sources.length){var source=sources.shift();if(!source){continue}if(typeof source!=="object"){throw new TypeError(source+"must be non-object")}for(var p in source){if(source.hasOwnProperty(p)){obj[p]=source[p]}}}return obj};exports.shrinkBuf=function(buf,size){if(buf.length===size){return buf}if(buf.subarray){return buf.subarray(0,size)}buf.length=size;return buf};var fnTyped={arraySet:function(dest,src,src_offs,len,dest_offs){if(src.subarray&&dest.subarray){dest.set(src.subarray(src_offs,src_offs+len),dest_offs);return}for(var i=0;i<len;i++){dest[dest_offs+i]=src[src_offs+i]}},flattenChunks:function(chunks){var i,l,len,pos,chunk,result;len=0;for(i=0,l=chunks.length;i<l;i++){len+=chunks[i].length}result=new Uint8Array(len);pos=0;for(i=0,l=chunks.length;i<l;i++){chunk=chunks[i];result.set(chunk,pos);pos+=chunk.length}return result}};var fnUntyped={arraySet:function(dest,src,src_offs,len,dest_offs){for(var i=0;i<len;i++){dest[dest_offs+i]=src[src_offs+i]}},flattenChunks:function(chunks){return[].concat.apply([],chunks)}};exports.setTyped=function(on){if(on){exports.Buf8=Uint8Array;exports.Buf16=Uint16Array;exports.Buf32=Int32Array;exports.assign(exports,fnTyped)}else{exports.Buf8=Array;exports.Buf16=Array;exports.Buf32=Array;exports.assign(exports,fnUntyped)}};exports.setTyped(TYPED_OK)},{}],28:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("./common");var STR_APPLY_OK=true;var STR_APPLY_UIA_OK=true;try{String.fromCharCode.apply(null,[0])}catch(__){STR_APPLY_OK=false}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(__){STR_APPLY_UIA_OK=false}var _utf8len=new utils.Buf8(256);for(var i=0;i<256;i++){_utf8len[i]=i>=252?6:i>=248?5:i>=240?4:i>=224?3:i>=192?2:1}_utf8len[254]=_utf8len[254]=1;exports.string2buf=function(str){var buf,c,c2,m_pos,i,str_len=str.length,buf_len=0;for(m_pos=0;m_pos<str_len;m_pos++){c=str.charCodeAt(m_pos);if((c&64512)===55296&&m_pos+1<str_len){c2=str.charCodeAt(m_pos+1);if((c2&64512)===56320){c=65536+(c-55296<<10)+(c2-56320);m_pos++}}buf_len+=c<128?1:c<2048?2:c<65536?3:4}buf=new utils.Buf8(buf_len);for(i=0,m_pos=0;i<buf_len;m_pos++){c=str.charCodeAt(m_pos);if((c&64512)===55296&&m_pos+1<str_len){c2=str.charCodeAt(m_pos+1);if((c2&64512)===56320){c=65536+(c-55296<<10)+(c2-56320);m_pos++}}if(c<128){buf[i++]=c}else if(c<2048){buf[i++]=192|c>>>6;buf[i++]=128|c&63}else if(c<65536){buf[i++]=224|c>>>12;buf[i++]=128|c>>>6&63;buf[i++]=128|c&63}else{buf[i++]=240|c>>>18;buf[i++]=128|c>>>12&63;buf[i++]=128|c>>>6&63;buf[i++]=128|c&63}}return buf};function buf2binstring(buf,len){if(len<65537){if(buf.subarray&&STR_APPLY_UIA_OK||!buf.subarray&&STR_APPLY_OK){return String.fromCharCode.apply(null,utils.shrinkBuf(buf,len))}}var result="";for(var i=0;i<len;i++){result+=String.fromCharCode(buf[i])}return result}exports.buf2binstring=function(buf){return buf2binstring(buf,buf.length)};exports.binstring2buf=function(str){var buf=new utils.Buf8(str.length);for(var i=0,len=buf.length;i<len;i++){buf[i]=str.charCodeAt(i)}return buf};exports.buf2string=function(buf,max){var i,out,c,c_len;var len=max||buf.length;var utf16buf=new Array(len*2);for(out=0,i=0;i<len;){c=buf[i++];if(c<128){utf16buf[out++]=c;continue}c_len=_utf8len[c];if(c_len>4){utf16buf[out++]=65533;i+=c_len-1;continue}c&=c_len===2?31:c_len===3?15:7;while(c_len>1&&i<len){c=c<<6|buf[i++]&63;c_len--}if(c_len>1){utf16buf[out++]=65533;continue}if(c<65536){utf16buf[out++]=c}else{c-=65536;utf16buf[out++]=55296|c>>10&1023;utf16buf[out++]=56320|c&1023}}return buf2binstring(utf16buf,out)};exports.utf8border=function(buf,max){var pos;max=max||buf.length;if(max>buf.length){max=buf.length}pos=max-1;while(pos>=0&&(buf[pos]&192)===128){pos--}if(pos<0){return max}if(pos===0){return max}return pos+_utf8len[buf[pos]]>max?pos:max}},{"./common":27}],29:[function(_dereq_,module,exports){"use strict";function adler32(adler,buf,len,pos){var s1=adler&65535|0,s2=adler>>>16&65535|0,n=0;while(len!==0){n=len>2e3?2e3:len;len-=n;do{s1=s1+buf[pos++]|0;s2=s2+s1|0}while(--n);s1%=65521;s2%=65521}return s1|s2<<16|0}module.exports=adler32},{}],30:[function(_dereq_,module,exports){module.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],31:[function(_dereq_,module,exports){"use strict";function makeTable(){var c,table=[];for(var n=0;n<256;n++){c=n;for(var k=0;k<8;k++){c=c&1?3988292384^c>>>1:c>>>1}table[n]=c}return table}var crcTable=makeTable();function crc32(crc,buf,len,pos){var t=crcTable,end=pos+len;crc=crc^-1;for(var i=pos;i<end;i++){crc=crc>>>8^t[(crc^buf[i])&255]}return crc^-1}module.exports=crc32},{}],32:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("../utils/common");var trees=_dereq_("./trees");var adler32=_dereq_("./adler32");var crc32=_dereq_("./crc32");var msg=_dereq_("./messages");var Z_NO_FLUSH=0;var Z_PARTIAL_FLUSH=1;var Z_FULL_FLUSH=3;var Z_FINISH=4;var Z_BLOCK=5;var Z_OK=0;var Z_STREAM_END=1;var Z_STREAM_ERROR=-2;var Z_DATA_ERROR=-3;var Z_BUF_ERROR=-5;var Z_DEFAULT_COMPRESSION=-1;var Z_FILTERED=1;var Z_HUFFMAN_ONLY=2;var Z_RLE=3;var Z_FIXED=4;var Z_DEFAULT_STRATEGY=0;var Z_UNKNOWN=2;var Z_DEFLATED=8;var MAX_MEM_LEVEL=9;var MAX_WBITS=15;var DEF_MEM_LEVEL=8;var LENGTH_CODES=29;var LITERALS=256;var L_CODES=LITERALS+1+LENGTH_CODES;var D_CODES=30;var BL_CODES=19;var HEAP_SIZE=2*L_CODES+1;var MAX_BITS=15;var MIN_MATCH=3;var MAX_MATCH=258;var MIN_LOOKAHEAD=MAX_MATCH+MIN_MATCH+1;var PRESET_DICT=32;var INIT_STATE=42;var EXTRA_STATE=69;var NAME_STATE=73;var COMMENT_STATE=91;var HCRC_STATE=103;var BUSY_STATE=113;var FINISH_STATE=666;var BS_NEED_MORE=1;var BS_BLOCK_DONE=2;var BS_FINISH_STARTED=3;var BS_FINISH_DONE=4;var OS_CODE=3;function err(strm,errorCode){strm.msg=msg[errorCode];return errorCode}function rank(f){return(f<<1)-(f>4?9:0)}function zero(buf){var len=buf.length;while(--len>=0){buf[len]=0}}function flush_pending(strm){var s=strm.state;var len=s.pending;if(len>strm.avail_out){len=strm.avail_out}if(len===0){return}utils.arraySet(strm.output,s.pending_buf,s.pending_out,len,strm.next_out);strm.next_out+=len;s.pending_out+=len;strm.total_out+=len;strm.avail_out-=len;s.pending-=len;if(s.pending===0){s.pending_out=0}}function flush_block_only(s,last){trees._tr_flush_block(s,s.block_start>=0?s.block_start:-1,s.strstart-s.block_start,last);s.block_start=s.strstart;flush_pending(s.strm)}function put_byte(s,b){s.pending_buf[s.pending++]=b}function putShortMSB(s,b){s.pending_buf[s.pending++]=b>>>8&255;s.pending_buf[s.pending++]=b&255}function read_buf(strm,buf,start,size){var len=strm.avail_in;if(len>size){len=size}if(len===0){return 0}strm.avail_in-=len;utils.arraySet(buf,strm.input,strm.next_in,len,start);if(strm.state.wrap===1){strm.adler=adler32(strm.adler,buf,len,start)}else if(strm.state.wrap===2){strm.adler=crc32(strm.adler,buf,len,start)}strm.next_in+=len;strm.total_in+=len;return len}function longest_match(s,cur_match){var chain_length=s.max_chain_length;var scan=s.strstart;var match;var len;var best_len=s.prev_length;var nice_match=s.nice_match;var limit=s.strstart>s.w_size-MIN_LOOKAHEAD?s.strstart-(s.w_size-MIN_LOOKAHEAD):0;var _win=s.window;var wmask=s.w_mask;var prev=s.prev;var strend=s.strstart+MAX_MATCH;var scan_end1=_win[scan+best_len-1];var scan_end=_win[scan+best_len];if(s.prev_length>=s.good_match){chain_length>>=2}if(nice_match>s.lookahead){nice_match=s.lookahead}do{match=cur_match;if(_win[match+best_len]!==scan_end||_win[match+best_len-1]!==scan_end1||_win[match]!==_win[scan]||_win[++match]!==_win[scan+1]){continue}scan+=2;match++;do{}while(_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&scan<strend);len=MAX_MATCH-(strend-scan);scan=strend-MAX_MATCH;if(len>best_len){s.match_start=cur_match;best_len=len;if(len>=nice_match){break}scan_end1=_win[scan+best_len-1];scan_end=_win[scan+best_len]}}while((cur_match=prev[cur_match&wmask])>limit&&--chain_length!==0);if(best_len<=s.lookahead){return best_len}return s.lookahead}function fill_window(s){var _w_size=s.w_size;var p,n,m,more,str;do{more=s.window_size-s.lookahead-s.strstart;if(s.strstart>=_w_size+(_w_size-MIN_LOOKAHEAD)){utils.arraySet(s.window,s.window,_w_size,_w_size,0);s.match_start-=_w_size;s.strstart-=_w_size;s.block_start-=_w_size;n=s.hash_size;p=n;do{m=s.head[--p];s.head[p]=m>=_w_size?m-_w_size:0}while(--n);n=_w_size;p=n;do{m=s.prev[--p];s.prev[p]=m>=_w_size?m-_w_size:0}while(--n);more+=_w_size}if(s.strm.avail_in===0){break}n=read_buf(s.strm,s.window,s.strstart+s.lookahead,more);s.lookahead+=n;if(s.lookahead+s.insert>=MIN_MATCH){str=s.strstart-s.insert;s.ins_h=s.window[str];s.ins_h=(s.ins_h<<s.hash_shift^s.window[str+1])&s.hash_mask;while(s.insert){s.ins_h=(s.ins_h<<s.hash_shift^s.window[str+MIN_MATCH-1])&s.hash_mask;s.prev[str&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=str;str++;s.insert--;if(s.lookahead+s.insert<MIN_MATCH){break}}}}while(s.lookahead<MIN_LOOKAHEAD&&s.strm.avail_in!==0)}function deflate_stored(s,flush){var max_block_size=65535;if(max_block_size>s.pending_buf_size-5){max_block_size=s.pending_buf_size-5}for(;;){if(s.lookahead<=1){fill_window(s);if(s.lookahead===0&&flush===Z_NO_FLUSH){return BS_NEED_MORE}if(s.lookahead===0){break}}s.strstart+=s.lookahead;s.lookahead=0;var max_start=s.block_start+max_block_size;if(s.strstart===0||s.strstart>=max_start){s.lookahead=s.strstart-max_start;s.strstart=max_start;flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}if(s.strstart-s.block_start>=s.w_size-MIN_LOOKAHEAD){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}}s.insert=0;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED}return BS_FINISH_DONE}if(s.strstart>s.block_start){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}return BS_NEED_MORE}function deflate_fast(s,flush){var hash_head;var bflush;for(;;){if(s.lookahead<MIN_LOOKAHEAD){fill_window(s);if(s.lookahead<MIN_LOOKAHEAD&&flush===Z_NO_FLUSH){return BS_NEED_MORE}if(s.lookahead===0){break}}hash_head=0;if(s.lookahead>=MIN_MATCH){s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+MIN_MATCH-1])&s.hash_mask;hash_head=s.prev[s.strstart&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=s.strstart}if(hash_head!==0&&s.strstart-hash_head<=s.w_size-MIN_LOOKAHEAD){s.match_length=longest_match(s,hash_head)}if(s.match_length>=MIN_MATCH){bflush=trees._tr_tally(s,s.strstart-s.match_start,s.match_length-MIN_MATCH);s.lookahead-=s.match_length;if(s.match_length<=s.max_lazy_match&&s.lookahead>=MIN_MATCH){s.match_length--;do{s.strstart++;s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+MIN_MATCH-1])&s.hash_mask;hash_head=s.prev[s.strstart&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=s.strstart}while(--s.match_length!==0);s.strstart++}else{s.strstart+=s.match_length;s.match_length=0;s.ins_h=s.window[s.strstart];s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+1])&s.hash_mask}}else{bflush=trees._tr_tally(s,0,s.window[s.strstart]);s.lookahead--;s.strstart++}if(bflush){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}}s.insert=s.strstart<MIN_MATCH-1?s.strstart:MIN_MATCH-1;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED}return BS_FINISH_DONE}if(s.last_lit){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}return BS_BLOCK_DONE}function deflate_slow(s,flush){var hash_head;var bflush;var max_insert;for(;;){if(s.lookahead<MIN_LOOKAHEAD){fill_window(s);if(s.lookahead<MIN_LOOKAHEAD&&flush===Z_NO_FLUSH){return BS_NEED_MORE}if(s.lookahead===0){break}}hash_head=0;if(s.lookahead>=MIN_MATCH){s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+MIN_MATCH-1])&s.hash_mask;hash_head=s.prev[s.strstart&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=s.strstart}s.prev_length=s.match_length;s.prev_match=s.match_start;s.match_length=MIN_MATCH-1;if(hash_head!==0&&s.prev_length<s.max_lazy_match&&s.strstart-hash_head<=s.w_size-MIN_LOOKAHEAD){s.match_length=longest_match(s,hash_head);if(s.match_length<=5&&(s.strategy===Z_FILTERED||s.match_length===MIN_MATCH&&s.strstart-s.match_start>4096)){s.match_length=MIN_MATCH-1}}if(s.prev_length>=MIN_MATCH&&s.match_length<=s.prev_length){max_insert=s.strstart+s.lookahead-MIN_MATCH;bflush=trees._tr_tally(s,s.strstart-1-s.prev_match,s.prev_length-MIN_MATCH);s.lookahead-=s.prev_length-1;s.prev_length-=2;do{if(++s.strstart<=max_insert){s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+MIN_MATCH-1])&s.hash_mask;hash_head=s.prev[s.strstart&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=s.strstart}}while(--s.prev_length!==0);s.match_available=0;s.match_length=MIN_MATCH-1;s.strstart++;if(bflush){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}}else if(s.match_available){bflush=trees._tr_tally(s,0,s.window[s.strstart-1]);if(bflush){flush_block_only(s,false)}s.strstart++;s.lookahead--;if(s.strm.avail_out===0){return BS_NEED_MORE}}else{s.match_available=1;s.strstart++;s.lookahead--}}if(s.match_available){bflush=trees._tr_tally(s,0,s.window[s.strstart-1]);s.match_available=0}s.insert=s.strstart<MIN_MATCH-1?s.strstart:MIN_MATCH-1;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED}return BS_FINISH_DONE}if(s.last_lit){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}return BS_BLOCK_DONE}function deflate_rle(s,flush){var bflush;var prev;var scan,strend;var _win=s.window;for(;;){if(s.lookahead<=MAX_MATCH){fill_window(s);if(s.lookahead<=MAX_MATCH&&flush===Z_NO_FLUSH){return BS_NEED_MORE}if(s.lookahead===0){break}}s.match_length=0;if(s.lookahead>=MIN_MATCH&&s.strstart>0){scan=s.strstart-1;prev=_win[scan];if(prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]){strend=s.strstart+MAX_MATCH;do{}while(prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&scan<strend);s.match_length=MAX_MATCH-(strend-scan);if(s.match_length>s.lookahead){s.match_length=s.lookahead}}}if(s.match_length>=MIN_MATCH){bflush=trees._tr_tally(s,1,s.match_length-MIN_MATCH);s.lookahead-=s.match_length;s.strstart+=s.match_length;s.match_length=0}else{bflush=trees._tr_tally(s,0,s.window[s.strstart]);s.lookahead--;s.strstart++}if(bflush){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}}s.insert=0;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED}return BS_FINISH_DONE}if(s.last_lit){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}return BS_BLOCK_DONE}function deflate_huff(s,flush){
+var bflush;for(;;){if(s.lookahead===0){fill_window(s);if(s.lookahead===0){if(flush===Z_NO_FLUSH){return BS_NEED_MORE}break}}s.match_length=0;bflush=trees._tr_tally(s,0,s.window[s.strstart]);s.lookahead--;s.strstart++;if(bflush){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}}s.insert=0;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED}return BS_FINISH_DONE}if(s.last_lit){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}return BS_BLOCK_DONE}var Config=function(good_length,max_lazy,nice_length,max_chain,func){this.good_length=good_length;this.max_lazy=max_lazy;this.nice_length=nice_length;this.max_chain=max_chain;this.func=func};var configuration_table;configuration_table=[new Config(0,0,0,0,deflate_stored),new Config(4,4,8,4,deflate_fast),new Config(4,5,16,8,deflate_fast),new Config(4,6,32,32,deflate_fast),new Config(4,4,16,16,deflate_slow),new Config(8,16,32,32,deflate_slow),new Config(8,16,128,128,deflate_slow),new Config(8,32,128,256,deflate_slow),new Config(32,128,258,1024,deflate_slow),new Config(32,258,258,4096,deflate_slow)];function lm_init(s){s.window_size=2*s.w_size;zero(s.head);s.max_lazy_match=configuration_table[s.level].max_lazy;s.good_match=configuration_table[s.level].good_length;s.nice_match=configuration_table[s.level].nice_length;s.max_chain_length=configuration_table[s.level].max_chain;s.strstart=0;s.block_start=0;s.lookahead=0;s.insert=0;s.match_length=s.prev_length=MIN_MATCH-1;s.match_available=0;s.ins_h=0}function DeflateState(){this.strm=null;this.status=0;this.pending_buf=null;this.pending_buf_size=0;this.pending_out=0;this.pending=0;this.wrap=0;this.gzhead=null;this.gzindex=0;this.method=Z_DEFLATED;this.last_flush=-1;this.w_size=0;this.w_bits=0;this.w_mask=0;this.window=null;this.window_size=0;this.prev=null;this.head=null;this.ins_h=0;this.hash_size=0;this.hash_bits=0;this.hash_mask=0;this.hash_shift=0;this.block_start=0;this.match_length=0;this.prev_match=0;this.match_available=0;this.strstart=0;this.match_start=0;this.lookahead=0;this.prev_length=0;this.max_chain_length=0;this.max_lazy_match=0;this.level=0;this.strategy=0;this.good_match=0;this.nice_match=0;this.dyn_ltree=new utils.Buf16(HEAP_SIZE*2);this.dyn_dtree=new utils.Buf16((2*D_CODES+1)*2);this.bl_tree=new utils.Buf16((2*BL_CODES+1)*2);zero(this.dyn_ltree);zero(this.dyn_dtree);zero(this.bl_tree);this.l_desc=null;this.d_desc=null;this.bl_desc=null;this.bl_count=new utils.Buf16(MAX_BITS+1);this.heap=new utils.Buf16(2*L_CODES+1);zero(this.heap);this.heap_len=0;this.heap_max=0;this.depth=new utils.Buf16(2*L_CODES+1);zero(this.depth);this.l_buf=0;this.lit_bufsize=0;this.last_lit=0;this.d_buf=0;this.opt_len=0;this.static_len=0;this.matches=0;this.insert=0;this.bi_buf=0;this.bi_valid=0}function deflateResetKeep(strm){var s;if(!strm||!strm.state){return err(strm,Z_STREAM_ERROR)}strm.total_in=strm.total_out=0;strm.data_type=Z_UNKNOWN;s=strm.state;s.pending=0;s.pending_out=0;if(s.wrap<0){s.wrap=-s.wrap}s.status=s.wrap?INIT_STATE:BUSY_STATE;strm.adler=s.wrap===2?0:1;s.last_flush=Z_NO_FLUSH;trees._tr_init(s);return Z_OK}function deflateReset(strm){var ret=deflateResetKeep(strm);if(ret===Z_OK){lm_init(strm.state)}return ret}function deflateSetHeader(strm,head){if(!strm||!strm.state){return Z_STREAM_ERROR}if(strm.state.wrap!==2){return Z_STREAM_ERROR}strm.state.gzhead=head;return Z_OK}function deflateInit2(strm,level,method,windowBits,memLevel,strategy){if(!strm){return Z_STREAM_ERROR}var wrap=1;if(level===Z_DEFAULT_COMPRESSION){level=6}if(windowBits<0){wrap=0;windowBits=-windowBits}else if(windowBits>15){wrap=2;windowBits-=16}if(memLevel<1||memLevel>MAX_MEM_LEVEL||method!==Z_DEFLATED||windowBits<8||windowBits>15||level<0||level>9||strategy<0||strategy>Z_FIXED){return err(strm,Z_STREAM_ERROR)}if(windowBits===8){windowBits=9}var s=new DeflateState;strm.state=s;s.strm=strm;s.wrap=wrap;s.gzhead=null;s.w_bits=windowBits;s.w_size=1<<s.w_bits;s.w_mask=s.w_size-1;s.hash_bits=memLevel+7;s.hash_size=1<<s.hash_bits;s.hash_mask=s.hash_size-1;s.hash_shift=~~((s.hash_bits+MIN_MATCH-1)/MIN_MATCH);s.window=new utils.Buf8(s.w_size*2);s.head=new utils.Buf16(s.hash_size);s.prev=new utils.Buf16(s.w_size);s.lit_bufsize=1<<memLevel+6;s.pending_buf_size=s.lit_bufsize*4;s.pending_buf=new utils.Buf8(s.pending_buf_size);s.d_buf=s.lit_bufsize>>1;s.l_buf=(1+2)*s.lit_bufsize;s.level=level;s.strategy=strategy;s.method=method;return deflateReset(strm)}function deflateInit(strm,level){return deflateInit2(strm,level,Z_DEFLATED,MAX_WBITS,DEF_MEM_LEVEL,Z_DEFAULT_STRATEGY)}function deflate(strm,flush){var old_flush,s;var beg,val;if(!strm||!strm.state||flush>Z_BLOCK||flush<0){return strm?err(strm,Z_STREAM_ERROR):Z_STREAM_ERROR}s=strm.state;if(!strm.output||!strm.input&&strm.avail_in!==0||s.status===FINISH_STATE&&flush!==Z_FINISH){return err(strm,strm.avail_out===0?Z_BUF_ERROR:Z_STREAM_ERROR)}s.strm=strm;old_flush=s.last_flush;s.last_flush=flush;if(s.status===INIT_STATE){if(s.wrap===2){strm.adler=0;put_byte(s,31);put_byte(s,139);put_byte(s,8);if(!s.gzhead){put_byte(s,0);put_byte(s,0);put_byte(s,0);put_byte(s,0);put_byte(s,0);put_byte(s,s.level===9?2:s.strategy>=Z_HUFFMAN_ONLY||s.level<2?4:0);put_byte(s,OS_CODE);s.status=BUSY_STATE}else{put_byte(s,(s.gzhead.text?1:0)+(s.gzhead.hcrc?2:0)+(!s.gzhead.extra?0:4)+(!s.gzhead.name?0:8)+(!s.gzhead.comment?0:16));put_byte(s,s.gzhead.time&255);put_byte(s,s.gzhead.time>>8&255);put_byte(s,s.gzhead.time>>16&255);put_byte(s,s.gzhead.time>>24&255);put_byte(s,s.level===9?2:s.strategy>=Z_HUFFMAN_ONLY||s.level<2?4:0);put_byte(s,s.gzhead.os&255);if(s.gzhead.extra&&s.gzhead.extra.length){put_byte(s,s.gzhead.extra.length&255);put_byte(s,s.gzhead.extra.length>>8&255)}if(s.gzhead.hcrc){strm.adler=crc32(strm.adler,s.pending_buf,s.pending,0)}s.gzindex=0;s.status=EXTRA_STATE}}else{var header=Z_DEFLATED+(s.w_bits-8<<4)<<8;var level_flags=-1;if(s.strategy>=Z_HUFFMAN_ONLY||s.level<2){level_flags=0}else if(s.level<6){level_flags=1}else if(s.level===6){level_flags=2}else{level_flags=3}header|=level_flags<<6;if(s.strstart!==0){header|=PRESET_DICT}header+=31-header%31;s.status=BUSY_STATE;putShortMSB(s,header);if(s.strstart!==0){putShortMSB(s,strm.adler>>>16);putShortMSB(s,strm.adler&65535)}strm.adler=1}}if(s.status===EXTRA_STATE){if(s.gzhead.extra){beg=s.pending;while(s.gzindex<(s.gzhead.extra.length&65535)){if(s.pending===s.pending_buf_size){if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}flush_pending(strm);beg=s.pending;if(s.pending===s.pending_buf_size){break}}put_byte(s,s.gzhead.extra[s.gzindex]&255);s.gzindex++}if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}if(s.gzindex===s.gzhead.extra.length){s.gzindex=0;s.status=NAME_STATE}}else{s.status=NAME_STATE}}if(s.status===NAME_STATE){if(s.gzhead.name){beg=s.pending;do{if(s.pending===s.pending_buf_size){if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}flush_pending(strm);beg=s.pending;if(s.pending===s.pending_buf_size){val=1;break}}if(s.gzindex<s.gzhead.name.length){val=s.gzhead.name.charCodeAt(s.gzindex++)&255}else{val=0}put_byte(s,val)}while(val!==0);if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}if(val===0){s.gzindex=0;s.status=COMMENT_STATE}}else{s.status=COMMENT_STATE}}if(s.status===COMMENT_STATE){if(s.gzhead.comment){beg=s.pending;do{if(s.pending===s.pending_buf_size){if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}flush_pending(strm);beg=s.pending;if(s.pending===s.pending_buf_size){val=1;break}}if(s.gzindex<s.gzhead.comment.length){val=s.gzhead.comment.charCodeAt(s.gzindex++)&255}else{val=0}put_byte(s,val)}while(val!==0);if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}if(val===0){s.status=HCRC_STATE}}else{s.status=HCRC_STATE}}if(s.status===HCRC_STATE){if(s.gzhead.hcrc){if(s.pending+2>s.pending_buf_size){flush_pending(strm)}if(s.pending+2<=s.pending_buf_size){put_byte(s,strm.adler&255);put_byte(s,strm.adler>>8&255);strm.adler=0;s.status=BUSY_STATE}}else{s.status=BUSY_STATE}}if(s.pending!==0){flush_pending(strm);if(strm.avail_out===0){s.last_flush=-1;return Z_OK}}else if(strm.avail_in===0&&rank(flush)<=rank(old_flush)&&flush!==Z_FINISH){return err(strm,Z_BUF_ERROR)}if(s.status===FINISH_STATE&&strm.avail_in!==0){return err(strm,Z_BUF_ERROR)}if(strm.avail_in!==0||s.lookahead!==0||flush!==Z_NO_FLUSH&&s.status!==FINISH_STATE){var bstate=s.strategy===Z_HUFFMAN_ONLY?deflate_huff(s,flush):s.strategy===Z_RLE?deflate_rle(s,flush):configuration_table[s.level].func(s,flush);if(bstate===BS_FINISH_STARTED||bstate===BS_FINISH_DONE){s.status=FINISH_STATE}if(bstate===BS_NEED_MORE||bstate===BS_FINISH_STARTED){if(strm.avail_out===0){s.last_flush=-1}return Z_OK}if(bstate===BS_BLOCK_DONE){if(flush===Z_PARTIAL_FLUSH){trees._tr_align(s)}else if(flush!==Z_BLOCK){trees._tr_stored_block(s,0,0,false);if(flush===Z_FULL_FLUSH){zero(s.head);if(s.lookahead===0){s.strstart=0;s.block_start=0;s.insert=0}}}flush_pending(strm);if(strm.avail_out===0){s.last_flush=-1;return Z_OK}}}if(flush!==Z_FINISH){return Z_OK}if(s.wrap<=0){return Z_STREAM_END}if(s.wrap===2){put_byte(s,strm.adler&255);put_byte(s,strm.adler>>8&255);put_byte(s,strm.adler>>16&255);put_byte(s,strm.adler>>24&255);put_byte(s,strm.total_in&255);put_byte(s,strm.total_in>>8&255);put_byte(s,strm.total_in>>16&255);put_byte(s,strm.total_in>>24&255)}else{putShortMSB(s,strm.adler>>>16);putShortMSB(s,strm.adler&65535)}flush_pending(strm);if(s.wrap>0){s.wrap=-s.wrap}return s.pending!==0?Z_OK:Z_STREAM_END}function deflateEnd(strm){var status;if(!strm||!strm.state){return Z_STREAM_ERROR}status=strm.state.status;if(status!==INIT_STATE&&status!==EXTRA_STATE&&status!==NAME_STATE&&status!==COMMENT_STATE&&status!==HCRC_STATE&&status!==BUSY_STATE&&status!==FINISH_STATE){return err(strm,Z_STREAM_ERROR)}strm.state=null;return status===BUSY_STATE?err(strm,Z_DATA_ERROR):Z_OK}exports.deflateInit=deflateInit;exports.deflateInit2=deflateInit2;exports.deflateReset=deflateReset;exports.deflateResetKeep=deflateResetKeep;exports.deflateSetHeader=deflateSetHeader;exports.deflate=deflate;exports.deflateEnd=deflateEnd;exports.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":27,"./adler32":29,"./crc32":31,"./messages":37,"./trees":38}],33:[function(_dereq_,module,exports){"use strict";function GZheader(){this.text=0;this.time=0;this.xflags=0;this.os=0;this.extra=null;this.extra_len=0;this.name="";this.comment="";this.hcrc=0;this.done=false}module.exports=GZheader},{}],34:[function(_dereq_,module,exports){"use strict";var BAD=30;var TYPE=12;module.exports=function inflate_fast(strm,start){var state;var _in;var last;var _out;var beg;var end;var dmax;var wsize;var whave;var wnext;var window;var hold;var bits;var lcode;var dcode;var lmask;var dmask;var here;var op;var len;var dist;var from;var from_source;var input,output;state=strm.state;_in=strm.next_in;input=strm.input;last=_in+(strm.avail_in-5);_out=strm.next_out;output=strm.output;beg=_out-(start-strm.avail_out);end=_out+(strm.avail_out-257);dmax=state.dmax;wsize=state.wsize;whave=state.whave;wnext=state.wnext;window=state.window;hold=state.hold;bits=state.bits;lcode=state.lencode;dcode=state.distcode;lmask=(1<<state.lenbits)-1;dmask=(1<<state.distbits)-1;top:do{if(bits<15){hold+=input[_in++]<<bits;bits+=8;hold+=input[_in++]<<bits;bits+=8}here=lcode[hold&lmask];dolen:for(;;){op=here>>>24;hold>>>=op;bits-=op;op=here>>>16&255;if(op===0){output[_out++]=here&65535}else if(op&16){len=here&65535;op&=15;if(op){if(bits<op){hold+=input[_in++]<<bits;bits+=8}len+=hold&(1<<op)-1;hold>>>=op;bits-=op}if(bits<15){hold+=input[_in++]<<bits;bits+=8;hold+=input[_in++]<<bits;bits+=8}here=dcode[hold&dmask];dodist:for(;;){op=here>>>24;hold>>>=op;bits-=op;op=here>>>16&255;if(op&16){dist=here&65535;op&=15;if(bits<op){hold+=input[_in++]<<bits;bits+=8;if(bits<op){hold+=input[_in++]<<bits;bits+=8}}dist+=hold&(1<<op)-1;if(dist>dmax){strm.msg="invalid distance too far back";state.mode=BAD;break top}hold>>>=op;bits-=op;op=_out-beg;if(dist>op){op=dist-op;if(op>whave){if(state.sane){strm.msg="invalid distance too far back";state.mode=BAD;break top}}from=0;from_source=window;if(wnext===0){from+=wsize-op;if(op<len){len-=op;do{output[_out++]=window[from++]}while(--op);from=_out-dist;from_source=output}}else if(wnext<op){from+=wsize+wnext-op;op-=wnext;if(op<len){len-=op;do{output[_out++]=window[from++]}while(--op);from=0;if(wnext<len){op=wnext;len-=op;do{output[_out++]=window[from++]}while(--op);from=_out-dist;from_source=output}}}else{from+=wnext-op;if(op<len){len-=op;do{output[_out++]=window[from++]}while(--op);from=_out-dist;from_source=output}}while(len>2){output[_out++]=from_source[from++];output[_out++]=from_source[from++];output[_out++]=from_source[from++];len-=3}if(len){output[_out++]=from_source[from++];if(len>1){output[_out++]=from_source[from++]}}}else{from=_out-dist;do{output[_out++]=output[from++];output[_out++]=output[from++];output[_out++]=output[from++];len-=3}while(len>2);if(len){output[_out++]=output[from++];if(len>1){output[_out++]=output[from++]}}}}else if((op&64)===0){here=dcode[(here&65535)+(hold&(1<<op)-1)];continue dodist}else{strm.msg="invalid distance code";state.mode=BAD;break top}break}}else if((op&64)===0){here=lcode[(here&65535)+(hold&(1<<op)-1)];continue dolen}else if(op&32){state.mode=TYPE;break top}else{strm.msg="invalid literal/length code";state.mode=BAD;break top}break}}while(_in<last&&_out<end);len=bits>>3;_in-=len;bits-=len<<3;hold&=(1<<bits)-1;strm.next_in=_in;strm.next_out=_out;strm.avail_in=_in<last?5+(last-_in):5-(_in-last);strm.avail_out=_out<end?257+(end-_out):257-(_out-end);state.hold=hold;state.bits=bits;return}},{}],35:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("../utils/common");var adler32=_dereq_("./adler32");var crc32=_dereq_("./crc32");var inflate_fast=_dereq_("./inffast");var inflate_table=_dereq_("./inftrees");var CODES=0;var LENS=1;var DISTS=2;var Z_FINISH=4;var Z_BLOCK=5;var Z_TREES=6;var Z_OK=0;var Z_STREAM_END=1;var Z_NEED_DICT=2;var Z_STREAM_ERROR=-2;var Z_DATA_ERROR=-3;var Z_MEM_ERROR=-4;var Z_BUF_ERROR=-5;var Z_DEFLATED=8;var HEAD=1;var FLAGS=2;var TIME=3;var OS=4;var EXLEN=5;var EXTRA=6;var NAME=7;var COMMENT=8;var HCRC=9;var DICTID=10;var DICT=11;var TYPE=12;var TYPEDO=13;var STORED=14;var COPY_=15;var COPY=16;var TABLE=17;var LENLENS=18;var CODELENS=19;var LEN_=20;var LEN=21;var LENEXT=22;var DIST=23;var DISTEXT=24;var MATCH=25;var LIT=26;var CHECK=27;var LENGTH=28;var DONE=29;var BAD=30;var MEM=31;var SYNC=32;var ENOUGH_LENS=852;var ENOUGH_DISTS=592;var MAX_WBITS=15;var DEF_WBITS=MAX_WBITS;function ZSWAP32(q){return(q>>>24&255)+(q>>>8&65280)+((q&65280)<<8)+((q&255)<<24)}function InflateState(){this.mode=0;this.last=false;this.wrap=0;this.havedict=false;this.flags=0;this.dmax=0;this.check=0;this.total=0;this.head=null;this.wbits=0;this.wsize=0;this.whave=0;this.wnext=0;this.window=null;this.hold=0;this.bits=0;this.length=0;this.offset=0;this.extra=0;this.lencode=null;this.distcode=null;this.lenbits=0;this.distbits=0;this.ncode=0;this.nlen=0;this.ndist=0;this.have=0;this.next=null;this.lens=new utils.Buf16(320);this.work=new utils.Buf16(288);this.lendyn=null;this.distdyn=null;this.sane=0;this.back=0;this.was=0}function inflateResetKeep(strm){var state;if(!strm||!strm.state){return Z_STREAM_ERROR}state=strm.state;strm.total_in=strm.total_out=state.total=0;strm.msg="";if(state.wrap){strm.adler=state.wrap&1}state.mode=HEAD;state.last=0;state.havedict=0;state.dmax=32768;state.head=null;state.hold=0;state.bits=0;state.lencode=state.lendyn=new utils.Buf32(ENOUGH_LENS);state.distcode=state.distdyn=new utils.Buf32(ENOUGH_DISTS);state.sane=1;state.back=-1;return Z_OK}function inflateReset(strm){var state;if(!strm||!strm.state){return Z_STREAM_ERROR}state=strm.state;state.wsize=0;state.whave=0;state.wnext=0;return inflateResetKeep(strm)}function inflateReset2(strm,windowBits){var wrap;var state;if(!strm||!strm.state){return Z_STREAM_ERROR}state=strm.state;if(windowBits<0){wrap=0;windowBits=-windowBits}else{wrap=(windowBits>>4)+1;if(windowBits<48){windowBits&=15}}if(windowBits&&(windowBits<8||windowBits>15)){return Z_STREAM_ERROR}if(state.window!==null&&state.wbits!==windowBits){state.window=null}state.wrap=wrap;state.wbits=windowBits;return inflateReset(strm)}function inflateInit2(strm,windowBits){var ret;var state;if(!strm){return Z_STREAM_ERROR}state=new InflateState;strm.state=state;state.window=null;ret=inflateReset2(strm,windowBits);if(ret!==Z_OK){strm.state=null}return ret}function inflateInit(strm){return inflateInit2(strm,DEF_WBITS)}var virgin=true;var lenfix,distfix;function fixedtables(state){if(virgin){var sym;lenfix=new utils.Buf32(512);distfix=new utils.Buf32(32);sym=0;while(sym<144){state.lens[sym++]=8}while(sym<256){state.lens[sym++]=9}while(sym<280){state.lens[sym++]=7}while(sym<288){state.lens[sym++]=8}inflate_table(LENS,state.lens,0,288,lenfix,0,state.work,{bits:9});sym=0;while(sym<32){state.lens[sym++]=5}inflate_table(DISTS,state.lens,0,32,distfix,0,state.work,{bits:5});virgin=false}state.lencode=lenfix;state.lenbits=9;state.distcode=distfix;state.distbits=5}function updatewindow(strm,src,end,copy){var dist;var state=strm.state;if(state.window===null){state.wsize=1<<state.wbits;state.wnext=0;state.whave=0;state.window=new utils.Buf8(state.wsize)}if(copy>=state.wsize){utils.arraySet(state.window,src,end-state.wsize,state.wsize,0);state.wnext=0;state.whave=state.wsize}else{dist=state.wsize-state.wnext;if(dist>copy){dist=copy}utils.arraySet(state.window,src,end-copy,dist,state.wnext);copy-=dist;if(copy){utils.arraySet(state.window,src,end-copy,copy,0);state.wnext=copy;state.whave=state.wsize}else{state.wnext+=dist;if(state.wnext===state.wsize){state.wnext=0}if(state.whave<state.wsize){state.whave+=dist}}}return 0}function inflate(strm,flush){var state;var input,output;var next;var put;var have,left;var hold;var bits;var _in,_out;var copy;var from;var from_source;var here=0;var here_bits,here_op,here_val;var last_bits,last_op,last_val;var len;var ret;var hbuf=new utils.Buf8(4);var opts;var n;var order=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!strm||!strm.state||!strm.output||!strm.input&&strm.avail_in!==0){return Z_STREAM_ERROR}state=strm.state;if(state.mode===TYPE){state.mode=TYPEDO}put=strm.next_out;output=strm.output;left=strm.avail_out;next=strm.next_in;input=strm.input;have=strm.avail_in;hold=state.hold;bits=state.bits;_in=have;_out=left;ret=Z_OK;inf_leave:for(;;){switch(state.mode){case HEAD:if(state.wrap===0){state.mode=TYPEDO;break}while(bits<16){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if(state.wrap&2&&hold===35615){state.check=0;hbuf[0]=hold&255;hbuf[1]=hold>>>8&255;state.check=crc32(state.check,hbuf,2,0);hold=0;bits=0;state.mode=FLAGS;break}state.flags=0;if(state.head){state.head.done=false}if(!(state.wrap&1)||(((hold&255)<<8)+(hold>>8))%31){strm.msg="incorrect header check";state.mode=BAD;break}if((hold&15)!==Z_DEFLATED){strm.msg="unknown compression method";state.mode=BAD;break}hold>>>=4;bits-=4;len=(hold&15)+8;if(state.wbits===0){state.wbits=len}else if(len>state.wbits){strm.msg="invalid window size";state.mode=BAD;break}state.dmax=1<<len;strm.adler=state.check=1;state.mode=hold&512?DICTID:TYPE;hold=0;bits=0;break;case FLAGS:while(bits<16){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}state.flags=hold;if((state.flags&255)!==Z_DEFLATED){strm.msg="unknown compression method";state.mode=BAD;break}if(state.flags&57344){strm.msg="unknown header flags set";state.mode=BAD;break}if(state.head){state.head.text=hold>>8&1}if(state.flags&512){hbuf[0]=hold&255;hbuf[1]=hold>>>8&255;state.check=crc32(state.check,hbuf,2,0)}hold=0;bits=0;state.mode=TIME;case TIME:while(bits<32){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if(state.head){state.head.time=hold}if(state.flags&512){hbuf[0]=hold&255;hbuf[1]=hold>>>8&255;hbuf[2]=hold>>>16&255;hbuf[3]=hold>>>24&255;state.check=crc32(state.check,hbuf,4,0)}hold=0;bits=0;state.mode=OS;case OS:while(bits<16){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if(state.head){state.head.xflags=hold&255;state.head.os=hold>>8}if(state.flags&512){hbuf[0]=hold&255;hbuf[1]=hold>>>8&255;state.check=crc32(state.check,hbuf,2,0)}hold=0;bits=0;state.mode=EXLEN;case EXLEN:if(state.flags&1024){while(bits<16){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}state.length=hold;if(state.head){state.head.extra_len=hold}if(state.flags&512){hbuf[0]=hold&255;hbuf[1]=hold>>>8&255;state.check=crc32(state.check,hbuf,2,0)}hold=0;bits=0}else if(state.head){state.head.extra=null}state.mode=EXTRA;case EXTRA:if(state.flags&1024){copy=state.length;if(copy>have){copy=have}if(copy){if(state.head){len=state.head.extra_len-state.length;if(!state.head.extra){state.head.extra=new Array(state.head.extra_len)}utils.arraySet(state.head.extra,input,next,copy,len)}if(state.flags&512){state.check=crc32(state.check,input,copy,next)}have-=copy;next+=copy;state.length-=copy}if(state.length){break inf_leave}}state.length=0;state.mode=NAME;case NAME:if(state.flags&2048){if(have===0){break inf_leave}copy=0;do{len=input[next+copy++];if(state.head&&len&&state.length<65536){state.head.name+=String.fromCharCode(len)}}while(len&&copy<have);if(state.flags&512){state.check=crc32(state.check,input,copy,next)}have-=copy;next+=copy;if(len){break inf_leave}}else if(state.head){state.head.name=null}state.length=0;state.mode=COMMENT;case COMMENT:if(state.flags&4096){if(have===0){break inf_leave}copy=0;do{len=input[next+copy++];if(state.head&&len&&state.length<65536){state.head.comment+=String.fromCharCode(len)}}while(len&&copy<have);if(state.flags&512){state.check=crc32(state.check,input,copy,next)}have-=copy;next+=copy;if(len){break inf_leave}}else if(state.head){state.head.comment=null}state.mode=HCRC;case HCRC:if(state.flags&512){while(bits<16){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if(hold!==(state.check&65535)){strm.msg="header crc mismatch";state.mode=BAD;break}hold=0;bits=0}if(state.head){state.head.hcrc=state.flags>>9&1;state.head.done=true}strm.adler=state.check=0;state.mode=TYPE;break;case DICTID:while(bits<32){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}strm.adler=state.check=ZSWAP32(hold);hold=0;bits=0;state.mode=DICT;case DICT:if(state.havedict===0){strm.next_out=put;strm.avail_out=left;strm.next_in=next;strm.avail_in=have;state.hold=hold;state.bits=bits;return Z_NEED_DICT}strm.adler=state.check=1;state.mode=TYPE;case TYPE:if(flush===Z_BLOCK||flush===Z_TREES){break inf_leave}case TYPEDO:if(state.last){hold>>>=bits&7;bits-=bits&7;state.mode=CHECK;break}while(bits<3){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}state.last=hold&1;hold>>>=1;bits-=1;switch(hold&3){case 0:state.mode=STORED;break;case 1:fixedtables(state);state.mode=LEN_;if(flush===Z_TREES){hold>>>=2;bits-=2;break inf_leave}break;case 2:state.mode=TABLE;break;case 3:strm.msg="invalid block type";state.mode=BAD}hold>>>=2;bits-=2;break;case STORED:hold>>>=bits&7;bits-=bits&7;while(bits<32){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if((hold&65535)!==(hold>>>16^65535)){strm.msg="invalid stored block lengths";state.mode=BAD;break}state.length=hold&65535;hold=0;bits=0;state.mode=COPY_;if(flush===Z_TREES){break inf_leave}case COPY_:state.mode=COPY;case COPY:copy=state.length;if(copy){if(copy>have){copy=have}if(copy>left){copy=left}if(copy===0){break inf_leave}utils.arraySet(output,input,next,copy,put);have-=copy;next+=copy;left-=copy;put+=copy;state.length-=copy;break}state.mode=TYPE;break;case TABLE:while(bits<14){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}state.nlen=(hold&31)+257;hold>>>=5;bits-=5;state.ndist=(hold&31)+1;hold>>>=5;bits-=5;state.ncode=(hold&15)+4;hold>>>=4;bits-=4;if(state.nlen>286||state.ndist>30){strm.msg="too many length or distance symbols";state.mode=BAD;break}state.have=0;state.mode=LENLENS;case LENLENS:while(state.have<state.ncode){while(bits<3){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}state.lens[order[state.have++]]=hold&7;hold>>>=3;bits-=3}while(state.have<19){state.lens[order[state.have++]]=0}state.lencode=state.lendyn;state.lenbits=7;opts={bits:state.lenbits};ret=inflate_table(CODES,state.lens,0,19,state.lencode,0,state.work,opts);state.lenbits=opts.bits;if(ret){strm.msg="invalid code lengths set";state.mode=BAD;break}state.have=0;state.mode=CODELENS;case CODELENS:while(state.have<state.nlen+state.ndist){for(;;){here=state.lencode[hold&(1<<state.lenbits)-1];here_bits=here>>>24;here_op=here>>>16&255;here_val=here&65535;if(here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if(here_val<16){hold>>>=here_bits;bits-=here_bits;state.lens[state.have++]=here_val}else{if(here_val===16){n=here_bits+2;while(bits<n){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}hold>>>=here_bits;bits-=here_bits;if(state.have===0){strm.msg="invalid bit length repeat";state.mode=BAD;break}len=state.lens[state.have-1];copy=3+(hold&3);hold>>>=2;bits-=2}else if(here_val===17){n=here_bits+3;while(bits<n){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}hold>>>=here_bits;bits-=here_bits;len=0;copy=3+(hold&7);hold>>>=3;bits-=3}else{n=here_bits+7;while(bits<n){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}hold>>>=here_bits;bits-=here_bits;len=0;copy=11+(hold&127);hold>>>=7;bits-=7}if(state.have+copy>state.nlen+state.ndist){strm.msg="invalid bit length repeat";state.mode=BAD;break}while(copy--){state.lens[state.have++]=len}}}if(state.mode===BAD){break}if(state.lens[256]===0){strm.msg="invalid code -- missing end-of-block";state.mode=BAD;break}state.lenbits=9;opts={bits:state.lenbits};ret=inflate_table(LENS,state.lens,0,state.nlen,state.lencode,0,state.work,opts);state.lenbits=opts.bits;if(ret){strm.msg="invalid literal/lengths set";state.mode=BAD;break}state.distbits=6;state.distcode=state.distdyn;opts={bits:state.distbits};ret=inflate_table(DISTS,state.lens,state.nlen,state.ndist,state.distcode,0,state.work,opts);state.distbits=opts.bits;if(ret){strm.msg="invalid distances set";state.mode=BAD;break}state.mode=LEN_;if(flush===Z_TREES){break inf_leave}case LEN_:state.mode=LEN;case LEN:if(have>=6&&left>=258){strm.next_out=put;strm.avail_out=left;strm.next_in=next;strm.avail_in=have;state.hold=hold;state.bits=bits;inflate_fast(strm,_out);put=strm.next_out;output=strm.output;left=strm.avail_out;next=strm.next_in;input=strm.input;have=strm.avail_in;hold=state.hold;bits=state.bits;if(state.mode===TYPE){state.back=-1}break}state.back=0;for(;;){here=state.lencode[hold&(1<<state.lenbits)-1];here_bits=here>>>24;here_op=here>>>16&255;here_val=here&65535;if(here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if(here_op&&(here_op&240)===0){last_bits=here_bits;last_op=here_op;last_val=here_val;for(;;){here=state.lencode[last_val+((hold&(1<<last_bits+last_op)-1)>>last_bits)];here_bits=here>>>24;here_op=here>>>16&255;here_val=here&65535;if(last_bits+here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}hold>>>=last_bits;bits-=last_bits;state.back+=last_bits}hold>>>=here_bits;bits-=here_bits;state.back+=here_bits;state.length=here_val;if(here_op===0){state.mode=LIT;break}if(here_op&32){state.back=-1;state.mode=TYPE;break}if(here_op&64){strm.msg="invalid literal/length code";state.mode=BAD;break}state.extra=here_op&15;state.mode=LENEXT;case LENEXT:if(state.extra){n=state.extra;while(bits<n){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}state.length+=hold&(1<<state.extra)-1;hold>>>=state.extra;bits-=state.extra;state.back+=state.extra}state.was=state.length;state.mode=DIST;case DIST:for(;;){here=state.distcode[hold&(1<<state.distbits)-1];here_bits=here>>>24;here_op=here>>>16&255;here_val=here&65535;if(here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if((here_op&240)===0){last_bits=here_bits;last_op=here_op;last_val=here_val;for(;;){here=state.distcode[last_val+((hold&(1<<last_bits+last_op)-1)>>last_bits)];here_bits=here>>>24;here_op=here>>>16&255;here_val=here&65535;if(last_bits+here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}hold>>>=last_bits;bits-=last_bits;state.back+=last_bits}hold>>>=here_bits;bits-=here_bits;state.back+=here_bits;if(here_op&64){strm.msg="invalid distance code";state.mode=BAD;break}state.offset=here_val;state.extra=here_op&15;state.mode=DISTEXT;case DISTEXT:if(state.extra){n=state.extra;while(bits<n){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}state.offset+=hold&(1<<state.extra)-1;hold>>>=state.extra;bits-=state.extra;state.back+=state.extra}if(state.offset>state.dmax){strm.msg="invalid distance too far back";state.mode=BAD;break}state.mode=MATCH;case MATCH:if(left===0){break inf_leave}copy=_out-left;if(state.offset>copy){copy=state.offset-copy;if(copy>state.whave){if(state.sane){strm.msg="invalid distance too far back";state.mode=BAD;break}}if(copy>state.wnext){copy-=state.wnext;from=state.wsize-copy}else{from=state.wnext-copy}if(copy>state.length){copy=state.length}from_source=state.window}else{from_source=output;from=put-state.offset;copy=state.length}if(copy>left){copy=left}left-=copy;state.length-=copy;do{output[put++]=from_source[from++]}while(--copy);if(state.length===0){state.mode=LEN}break;case LIT:if(left===0){break inf_leave}output[put++]=state.length;left--;state.mode=LEN;break;case CHECK:if(state.wrap){while(bits<32){if(have===0){break inf_leave}have--;hold|=input[next++]<<bits;bits+=8}_out-=left;strm.total_out+=_out;state.total+=_out;if(_out){strm.adler=state.check=state.flags?crc32(state.check,output,_out,put-_out):adler32(state.check,output,_out,put-_out)}_out=left;if((state.flags?hold:ZSWAP32(hold))!==state.check){strm.msg="incorrect data check";state.mode=BAD;break}hold=0;bits=0}state.mode=LENGTH;case LENGTH:if(state.wrap&&state.flags){while(bits<32){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if(hold!==(state.total&4294967295)){strm.msg="incorrect length check";state.mode=BAD;break}hold=0;bits=0}state.mode=DONE;case DONE:ret=Z_STREAM_END;break inf_leave;case BAD:ret=Z_DATA_ERROR;break inf_leave;case MEM:return Z_MEM_ERROR;case SYNC:default:return Z_STREAM_ERROR}}strm.next_out=put;strm.avail_out=left;strm.next_in=next;strm.avail_in=have;state.hold=hold;state.bits=bits;if(state.wsize||_out!==strm.avail_out&&state.mode<BAD&&(state.mode<CHECK||flush!==Z_FINISH)){if(updatewindow(strm,strm.output,strm.next_out,_out-strm.avail_out)){state.mode=MEM;return Z_MEM_ERROR}}_in-=strm.avail_in;_out-=strm.avail_out;strm.total_in+=_in;strm.total_out+=_out;state.total+=_out;if(state.wrap&&_out){strm.adler=state.check=state.flags?crc32(state.check,output,_out,strm.next_out-_out):adler32(state.check,output,_out,strm.next_out-_out)}strm.data_type=state.bits+(state.last?64:0)+(state.mode===TYPE?128:0)+(state.mode===LEN_||state.mode===COPY_?256:0);if((_in===0&&_out===0||flush===Z_FINISH)&&ret===Z_OK){ret=Z_BUF_ERROR}return ret}function inflateEnd(strm){if(!strm||!strm.state){return Z_STREAM_ERROR}var state=strm.state;if(state.window){state.window=null}strm.state=null;return Z_OK}function inflateGetHeader(strm,head){var state;if(!strm||!strm.state){return Z_STREAM_ERROR}state=strm.state;if((state.wrap&2)===0){return Z_STREAM_ERROR}state.head=head;head.done=false;return Z_OK}exports.inflateReset=inflateReset;exports.inflateReset2=inflateReset2;exports.inflateResetKeep=inflateResetKeep;exports.inflateInit=inflateInit;exports.inflateInit2=inflateInit2;exports.inflate=inflate;exports.inflateEnd=inflateEnd;exports.inflateGetHeader=inflateGetHeader;
+exports.inflateInfo="pako inflate (from Nodeca project)"},{"../utils/common":27,"./adler32":29,"./crc32":31,"./inffast":34,"./inftrees":36}],36:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("../utils/common");var MAXBITS=15;var ENOUGH_LENS=852;var ENOUGH_DISTS=592;var CODES=0;var LENS=1;var DISTS=2;var lbase=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0];var lext=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78];var dbase=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0];var dext=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];module.exports=function inflate_table(type,lens,lens_index,codes,table,table_index,work,opts){var bits=opts.bits;var len=0;var sym=0;var min=0,max=0;var root=0;var curr=0;var drop=0;var left=0;var used=0;var huff=0;var incr;var fill;var low;var mask;var next;var base=null;var base_index=0;var end;var count=new utils.Buf16(MAXBITS+1);var offs=new utils.Buf16(MAXBITS+1);var extra=null;var extra_index=0;var here_bits,here_op,here_val;for(len=0;len<=MAXBITS;len++){count[len]=0}for(sym=0;sym<codes;sym++){count[lens[lens_index+sym]]++}root=bits;for(max=MAXBITS;max>=1;max--){if(count[max]!==0){break}}if(root>max){root=max}if(max===0){table[table_index++]=1<<24|64<<16|0;table[table_index++]=1<<24|64<<16|0;opts.bits=1;return 0}for(min=1;min<max;min++){if(count[min]!==0){break}}if(root<min){root=min}left=1;for(len=1;len<=MAXBITS;len++){left<<=1;left-=count[len];if(left<0){return-1}}if(left>0&&(type===CODES||max!==1)){return-1}offs[1]=0;for(len=1;len<MAXBITS;len++){offs[len+1]=offs[len]+count[len]}for(sym=0;sym<codes;sym++){if(lens[lens_index+sym]!==0){work[offs[lens[lens_index+sym]]++]=sym}}if(type===CODES){base=extra=work;end=19}else if(type===LENS){base=lbase;base_index-=257;extra=lext;extra_index-=257;end=256}else{base=dbase;extra=dext;end=-1}huff=0;sym=0;len=min;next=table_index;curr=root;drop=0;low=-1;used=1<<root;mask=used-1;if(type===LENS&&used>ENOUGH_LENS||type===DISTS&&used>ENOUGH_DISTS){return 1}var i=0;for(;;){i++;here_bits=len-drop;if(work[sym]<end){here_op=0;here_val=work[sym]}else if(work[sym]>end){here_op=extra[extra_index+work[sym]];here_val=base[base_index+work[sym]]}else{here_op=32+64;here_val=0}incr=1<<len-drop;fill=1<<curr;min=fill;do{fill-=incr;table[next+(huff>>drop)+fill]=here_bits<<24|here_op<<16|here_val|0}while(fill!==0);incr=1<<len-1;while(huff&incr){incr>>=1}if(incr!==0){huff&=incr-1;huff+=incr}else{huff=0}sym++;if(--count[len]===0){if(len===max){break}len=lens[lens_index+work[sym]]}if(len>root&&(huff&mask)!==low){if(drop===0){drop=root}next+=min;curr=len-drop;left=1<<curr;while(curr+drop<max){left-=count[curr+drop];if(left<=0){break}curr++;left<<=1}used+=1<<curr;if(type===LENS&&used>ENOUGH_LENS||type===DISTS&&used>ENOUGH_DISTS){return 1}low=huff&mask;table[low]=root<<24|curr<<16|next-table_index|0}}if(huff!==0){table[next+huff]=len-drop<<24|64<<16|0}opts.bits=root;return 0}},{"../utils/common":27}],37:[function(_dereq_,module,exports){"use strict";module.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],38:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("../utils/common");var Z_FIXED=4;var Z_BINARY=0;var Z_TEXT=1;var Z_UNKNOWN=2;function zero(buf){var len=buf.length;while(--len>=0){buf[len]=0}}var STORED_BLOCK=0;var STATIC_TREES=1;var DYN_TREES=2;var MIN_MATCH=3;var MAX_MATCH=258;var LENGTH_CODES=29;var LITERALS=256;var L_CODES=LITERALS+1+LENGTH_CODES;var D_CODES=30;var BL_CODES=19;var HEAP_SIZE=2*L_CODES+1;var MAX_BITS=15;var Buf_size=16;var MAX_BL_BITS=7;var END_BLOCK=256;var REP_3_6=16;var REPZ_3_10=17;var REPZ_11_138=18;var extra_lbits=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];var extra_dbits=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];var extra_blbits=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];var bl_order=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];var DIST_CODE_LEN=512;var static_ltree=new Array((L_CODES+2)*2);zero(static_ltree);var static_dtree=new Array(D_CODES*2);zero(static_dtree);var _dist_code=new Array(DIST_CODE_LEN);zero(_dist_code);var _length_code=new Array(MAX_MATCH-MIN_MATCH+1);zero(_length_code);var base_length=new Array(LENGTH_CODES);zero(base_length);var base_dist=new Array(D_CODES);zero(base_dist);var StaticTreeDesc=function(static_tree,extra_bits,extra_base,elems,max_length){this.static_tree=static_tree;this.extra_bits=extra_bits;this.extra_base=extra_base;this.elems=elems;this.max_length=max_length;this.has_stree=static_tree&&static_tree.length};var static_l_desc;var static_d_desc;var static_bl_desc;var TreeDesc=function(dyn_tree,stat_desc){this.dyn_tree=dyn_tree;this.max_code=0;this.stat_desc=stat_desc};function d_code(dist){return dist<256?_dist_code[dist]:_dist_code[256+(dist>>>7)]}function put_short(s,w){s.pending_buf[s.pending++]=w&255;s.pending_buf[s.pending++]=w>>>8&255}function send_bits(s,value,length){if(s.bi_valid>Buf_size-length){s.bi_buf|=value<<s.bi_valid&65535;put_short(s,s.bi_buf);s.bi_buf=value>>Buf_size-s.bi_valid;s.bi_valid+=length-Buf_size}else{s.bi_buf|=value<<s.bi_valid&65535;s.bi_valid+=length}}function send_code(s,c,tree){send_bits(s,tree[c*2],tree[c*2+1])}function bi_reverse(code,len){var res=0;do{res|=code&1;code>>>=1;res<<=1}while(--len>0);return res>>>1}function bi_flush(s){if(s.bi_valid===16){put_short(s,s.bi_buf);s.bi_buf=0;s.bi_valid=0}else if(s.bi_valid>=8){s.pending_buf[s.pending++]=s.bi_buf&255;s.bi_buf>>=8;s.bi_valid-=8}}function gen_bitlen(s,desc){var tree=desc.dyn_tree;var max_code=desc.max_code;var stree=desc.stat_desc.static_tree;var has_stree=desc.stat_desc.has_stree;var extra=desc.stat_desc.extra_bits;var base=desc.stat_desc.extra_base;var max_length=desc.stat_desc.max_length;var h;var n,m;var bits;var xbits;var f;var overflow=0;for(bits=0;bits<=MAX_BITS;bits++){s.bl_count[bits]=0}tree[s.heap[s.heap_max]*2+1]=0;for(h=s.heap_max+1;h<HEAP_SIZE;h++){n=s.heap[h];bits=tree[tree[n*2+1]*2+1]+1;if(bits>max_length){bits=max_length;overflow++}tree[n*2+1]=bits;if(n>max_code){continue}s.bl_count[bits]++;xbits=0;if(n>=base){xbits=extra[n-base]}f=tree[n*2];s.opt_len+=f*(bits+xbits);if(has_stree){s.static_len+=f*(stree[n*2+1]+xbits)}}if(overflow===0){return}do{bits=max_length-1;while(s.bl_count[bits]===0){bits--}s.bl_count[bits]--;s.bl_count[bits+1]+=2;s.bl_count[max_length]--;overflow-=2}while(overflow>0);for(bits=max_length;bits!==0;bits--){n=s.bl_count[bits];while(n!==0){m=s.heap[--h];if(m>max_code){continue}if(tree[m*2+1]!==bits){s.opt_len+=(bits-tree[m*2+1])*tree[m*2];tree[m*2+1]=bits}n--}}}function gen_codes(tree,max_code,bl_count){var next_code=new Array(MAX_BITS+1);var code=0;var bits;var n;for(bits=1;bits<=MAX_BITS;bits++){next_code[bits]=code=code+bl_count[bits-1]<<1}for(n=0;n<=max_code;n++){var len=tree[n*2+1];if(len===0){continue}tree[n*2]=bi_reverse(next_code[len]++,len)}}function tr_static_init(){var n;var bits;var length;var code;var dist;var bl_count=new Array(MAX_BITS+1);length=0;for(code=0;code<LENGTH_CODES-1;code++){base_length[code]=length;for(n=0;n<1<<extra_lbits[code];n++){_length_code[length++]=code}}_length_code[length-1]=code;dist=0;for(code=0;code<16;code++){base_dist[code]=dist;for(n=0;n<1<<extra_dbits[code];n++){_dist_code[dist++]=code}}dist>>=7;for(;code<D_CODES;code++){base_dist[code]=dist<<7;for(n=0;n<1<<extra_dbits[code]-7;n++){_dist_code[256+dist++]=code}}for(bits=0;bits<=MAX_BITS;bits++){bl_count[bits]=0}n=0;while(n<=143){static_ltree[n*2+1]=8;n++;bl_count[8]++}while(n<=255){static_ltree[n*2+1]=9;n++;bl_count[9]++}while(n<=279){static_ltree[n*2+1]=7;n++;bl_count[7]++}while(n<=287){static_ltree[n*2+1]=8;n++;bl_count[8]++}gen_codes(static_ltree,L_CODES+1,bl_count);for(n=0;n<D_CODES;n++){static_dtree[n*2+1]=5;static_dtree[n*2]=bi_reverse(n,5)}static_l_desc=new StaticTreeDesc(static_ltree,extra_lbits,LITERALS+1,L_CODES,MAX_BITS);static_d_desc=new StaticTreeDesc(static_dtree,extra_dbits,0,D_CODES,MAX_BITS);static_bl_desc=new StaticTreeDesc(new Array(0),extra_blbits,0,BL_CODES,MAX_BL_BITS)}function init_block(s){var n;for(n=0;n<L_CODES;n++){s.dyn_ltree[n*2]=0}for(n=0;n<D_CODES;n++){s.dyn_dtree[n*2]=0}for(n=0;n<BL_CODES;n++){s.bl_tree[n*2]=0}s.dyn_ltree[END_BLOCK*2]=1;s.opt_len=s.static_len=0;s.last_lit=s.matches=0}function bi_windup(s){if(s.bi_valid>8){put_short(s,s.bi_buf)}else if(s.bi_valid>0){s.pending_buf[s.pending++]=s.bi_buf}s.bi_buf=0;s.bi_valid=0}function copy_block(s,buf,len,header){bi_windup(s);if(header){put_short(s,len);put_short(s,~len)}utils.arraySet(s.pending_buf,s.window,buf,len,s.pending);s.pending+=len}function smaller(tree,n,m,depth){var _n2=n*2;var _m2=m*2;return tree[_n2]<tree[_m2]||tree[_n2]===tree[_m2]&&depth[n]<=depth[m]}function pqdownheap(s,tree,k){var v=s.heap[k];var j=k<<1;while(j<=s.heap_len){if(j<s.heap_len&&smaller(tree,s.heap[j+1],s.heap[j],s.depth)){j++}if(smaller(tree,v,s.heap[j],s.depth)){break}s.heap[k]=s.heap[j];k=j;j<<=1}s.heap[k]=v}function compress_block(s,ltree,dtree){var dist;var lc;var lx=0;var code;var extra;if(s.last_lit!==0){do{dist=s.pending_buf[s.d_buf+lx*2]<<8|s.pending_buf[s.d_buf+lx*2+1];lc=s.pending_buf[s.l_buf+lx];lx++;if(dist===0){send_code(s,lc,ltree)}else{code=_length_code[lc];send_code(s,code+LITERALS+1,ltree);extra=extra_lbits[code];if(extra!==0){lc-=base_length[code];send_bits(s,lc,extra)}dist--;code=d_code(dist);send_code(s,code,dtree);extra=extra_dbits[code];if(extra!==0){dist-=base_dist[code];send_bits(s,dist,extra)}}}while(lx<s.last_lit)}send_code(s,END_BLOCK,ltree)}function build_tree(s,desc){var tree=desc.dyn_tree;var stree=desc.stat_desc.static_tree;var has_stree=desc.stat_desc.has_stree;var elems=desc.stat_desc.elems;var n,m;var max_code=-1;var node;s.heap_len=0;s.heap_max=HEAP_SIZE;for(n=0;n<elems;n++){if(tree[n*2]!==0){s.heap[++s.heap_len]=max_code=n;s.depth[n]=0}else{tree[n*2+1]=0}}while(s.heap_len<2){node=s.heap[++s.heap_len]=max_code<2?++max_code:0;tree[node*2]=1;s.depth[node]=0;s.opt_len--;if(has_stree){s.static_len-=stree[node*2+1]}}desc.max_code=max_code;for(n=s.heap_len>>1;n>=1;n--){pqdownheap(s,tree,n)}node=elems;do{n=s.heap[1];s.heap[1]=s.heap[s.heap_len--];pqdownheap(s,tree,1);m=s.heap[1];s.heap[--s.heap_max]=n;s.heap[--s.heap_max]=m;tree[node*2]=tree[n*2]+tree[m*2];s.depth[node]=(s.depth[n]>=s.depth[m]?s.depth[n]:s.depth[m])+1;tree[n*2+1]=tree[m*2+1]=node;s.heap[1]=node++;pqdownheap(s,tree,1)}while(s.heap_len>=2);s.heap[--s.heap_max]=s.heap[1];gen_bitlen(s,desc);gen_codes(tree,max_code,s.bl_count)}function scan_tree(s,tree,max_code){var n;var prevlen=-1;var curlen;var nextlen=tree[0*2+1];var count=0;var max_count=7;var min_count=4;if(nextlen===0){max_count=138;min_count=3}tree[(max_code+1)*2+1]=65535;for(n=0;n<=max_code;n++){curlen=nextlen;nextlen=tree[(n+1)*2+1];if(++count<max_count&&curlen===nextlen){continue}else if(count<min_count){s.bl_tree[curlen*2]+=count}else if(curlen!==0){if(curlen!==prevlen){s.bl_tree[curlen*2]++}s.bl_tree[REP_3_6*2]++}else if(count<=10){s.bl_tree[REPZ_3_10*2]++}else{s.bl_tree[REPZ_11_138*2]++}count=0;prevlen=curlen;if(nextlen===0){max_count=138;min_count=3}else if(curlen===nextlen){max_count=6;min_count=3}else{max_count=7;min_count=4}}}function send_tree(s,tree,max_code){var n;var prevlen=-1;var curlen;var nextlen=tree[0*2+1];var count=0;var max_count=7;var min_count=4;if(nextlen===0){max_count=138;min_count=3}for(n=0;n<=max_code;n++){curlen=nextlen;nextlen=tree[(n+1)*2+1];if(++count<max_count&&curlen===nextlen){continue}else if(count<min_count){do{send_code(s,curlen,s.bl_tree)}while(--count!==0)}else if(curlen!==0){if(curlen!==prevlen){send_code(s,curlen,s.bl_tree);count--}send_code(s,REP_3_6,s.bl_tree);send_bits(s,count-3,2)}else if(count<=10){send_code(s,REPZ_3_10,s.bl_tree);send_bits(s,count-3,3)}else{send_code(s,REPZ_11_138,s.bl_tree);send_bits(s,count-11,7)}count=0;prevlen=curlen;if(nextlen===0){max_count=138;min_count=3}else if(curlen===nextlen){max_count=6;min_count=3}else{max_count=7;min_count=4}}}function build_bl_tree(s){var max_blindex;scan_tree(s,s.dyn_ltree,s.l_desc.max_code);scan_tree(s,s.dyn_dtree,s.d_desc.max_code);build_tree(s,s.bl_desc);for(max_blindex=BL_CODES-1;max_blindex>=3;max_blindex--){if(s.bl_tree[bl_order[max_blindex]*2+1]!==0){break}}s.opt_len+=3*(max_blindex+1)+5+5+4;return max_blindex}function send_all_trees(s,lcodes,dcodes,blcodes){var rank;send_bits(s,lcodes-257,5);send_bits(s,dcodes-1,5);send_bits(s,blcodes-4,4);for(rank=0;rank<blcodes;rank++){send_bits(s,s.bl_tree[bl_order[rank]*2+1],3)}send_tree(s,s.dyn_ltree,lcodes-1);send_tree(s,s.dyn_dtree,dcodes-1)}function detect_data_type(s){var black_mask=4093624447;var n;for(n=0;n<=31;n++,black_mask>>>=1){if(black_mask&1&&s.dyn_ltree[n*2]!==0){return Z_BINARY}}if(s.dyn_ltree[9*2]!==0||s.dyn_ltree[10*2]!==0||s.dyn_ltree[13*2]!==0){return Z_TEXT}for(n=32;n<LITERALS;n++){if(s.dyn_ltree[n*2]!==0){return Z_TEXT}}return Z_BINARY}var static_init_done=false;function _tr_init(s){if(!static_init_done){tr_static_init();static_init_done=true}s.l_desc=new TreeDesc(s.dyn_ltree,static_l_desc);s.d_desc=new TreeDesc(s.dyn_dtree,static_d_desc);s.bl_desc=new TreeDesc(s.bl_tree,static_bl_desc);s.bi_buf=0;s.bi_valid=0;init_block(s)}function _tr_stored_block(s,buf,stored_len,last){send_bits(s,(STORED_BLOCK<<1)+(last?1:0),3);copy_block(s,buf,stored_len,true)}function _tr_align(s){send_bits(s,STATIC_TREES<<1,3);send_code(s,END_BLOCK,static_ltree);bi_flush(s)}function _tr_flush_block(s,buf,stored_len,last){var opt_lenb,static_lenb;var max_blindex=0;if(s.level>0){if(s.strm.data_type===Z_UNKNOWN){s.strm.data_type=detect_data_type(s)}build_tree(s,s.l_desc);build_tree(s,s.d_desc);max_blindex=build_bl_tree(s);opt_lenb=s.opt_len+3+7>>>3;static_lenb=s.static_len+3+7>>>3;if(static_lenb<=opt_lenb){opt_lenb=static_lenb}}else{opt_lenb=static_lenb=stored_len+5}if(stored_len+4<=opt_lenb&&buf!==-1){_tr_stored_block(s,buf,stored_len,last)}else if(s.strategy===Z_FIXED||static_lenb===opt_lenb){send_bits(s,(STATIC_TREES<<1)+(last?1:0),3);compress_block(s,static_ltree,static_dtree)}else{send_bits(s,(DYN_TREES<<1)+(last?1:0),3);send_all_trees(s,s.l_desc.max_code+1,s.d_desc.max_code+1,max_blindex+1);compress_block(s,s.dyn_ltree,s.dyn_dtree)}init_block(s);if(last){bi_windup(s)}}function _tr_tally(s,dist,lc){s.pending_buf[s.d_buf+s.last_lit*2]=dist>>>8&255;s.pending_buf[s.d_buf+s.last_lit*2+1]=dist&255;s.pending_buf[s.l_buf+s.last_lit]=lc&255;s.last_lit++;if(dist===0){s.dyn_ltree[lc*2]++}else{s.matches++;dist--;s.dyn_ltree[(_length_code[lc]+LITERALS+1)*2]++;s.dyn_dtree[d_code(dist)*2]++}return s.last_lit===s.lit_bufsize-1}exports._tr_init=_tr_init;exports._tr_stored_block=_tr_stored_block;exports._tr_flush_block=_tr_flush_block;exports._tr_tally=_tr_tally;exports._tr_align=_tr_align},{"../utils/common":27}],39:[function(_dereq_,module,exports){"use strict";function ZStream(){this.input=null;this.next_in=0;this.avail_in=0;this.total_in=0;this.output=null;this.next_out=0;this.avail_out=0;this.total_out=0;this.msg="";this.state=null;this.data_type=2;this.adler=0}module.exports=ZStream},{}]},{},[9])(9)});var cptable={version:"1.3.7"};cptable[874]=function(){var d="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~鈧拷锟斤拷锟解�︼拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鈥樷�欌�溾�濃�⑩�撯�旓拷锟斤拷锟斤拷锟斤拷锟铰犩竵喔傕竷喔勦竻喔嗋竾喔堗笁喔娻笅喔屶笉喔庎笍喔愢笐喔掄笓喔斷笗喔栢笚喔樴笝喔氞笡喔溹笣喔炧笩喔犩浮喔⑧福喔む弗喔︵抚喔ㄠ俯喔斧喔腑喔腐喔班副喔侧赋喔脆傅喔多阜喔膏腹喔猴拷锟斤拷锟洁缚喙�喙佮箓喙冟箘喙呧箚喙囙箞喙夃箠喙嬥箤喙嵿箮喙忇箰喙戉箳喙撪箶喙曕箹喙椸箻喙權箽喙涳拷锟斤拷锟�",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d[i]]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[932]=function(){var d=[],e={},D=[],j;D[0]="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤健锝剑锝わ渐锝︼涧锝僵锝将锝江锝蒋锝帮奖锝诧匠锝达降锝讹椒锝革焦锝猴交锝硷浇锝撅娇锞�锞侊緜锞冿緞锞咃締锞囷緢锞夛緤锞嬶緦锞嶏編锞忥緪锞戯緬锞擄緮锞曪緰锞楋緲锞欙練锞涳緶锞濓緸锞燂拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");for(j=0;j!=D[0].length;++j)if(D[0][j].charCodeAt(0)!==65533){e[D[0][j]]=0+j;d[0+j]=D[0][j]}D[129]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷銆�銆併�傦紝锛庛兓锛氾紱锛燂紒銈涖倻麓锝�篓锛撅浚锛裤兘銉俱倽銈炪�冧粷銆呫�嗐�囥兗鈥曗�愶紡锛硷綖鈭ワ綔鈥︹�モ�樷�欌�溾�濓紙锛夈�斻�曪蓟锛斤經锝濄�堛�夈�娿�嬨�屻�嶃�庛�忋�愩�戯紜锛嵚泵楋拷梅锛濃墵锛滐紴鈮︹墽鈭炩埓鈾傗檧掳鈥测�斥剝锟ワ紕锟狅俊锛咃純锛嗭紛锛犅р槅鈽呪棆鈼忊棊鈼団梿鈻♀枲鈻斥柌鈻解柤鈥汇�掆啋鈫愨啈鈫撱�擄拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鈭堚垕鈯嗏妵鈯傗妰鈭埄锟斤拷锟斤拷锟斤拷锟斤拷鈭р埁锟⑩噿鈬斺垁鈭冿拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鈭犫姤鈱掆垈鈭団墶鈮掆壀鈮垰鈭解垵鈭碘埆鈭拷锟斤拷锟斤拷锟斤拷鈩�扳櫙鈾櫔鈥犫�÷讹拷锟斤拷锟解棷锟斤拷锟�".split("");for(j=0;j!=D[129].length;++j)if(D[129][j].charCodeAt(0)!==65533){e[D[129][j]]=33024+j;d[33024+j]=D[129][j]}D[130]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤紣锛戯紥锛擄紨锛曪紪锛楋紭锛欙拷锟斤拷锟斤拷锟斤拷锛★饥锛o激锛ワ鸡锛э绩锛╋吉锛棘锛籍锛及锛憋疾锛筹即锛碉级锛凤几锛癸己锟斤拷锟斤拷锟斤拷锟斤絹锝傦絻锝勶絽锝嗭絿锝堬綁锝婏綃锝岋綅锝庯綇锝愶綉锝掞綋锝旓綍锝栵綏锝橈綑锝氾拷锟斤拷锟姐亖銇傘亙銇勩亝銇嗐亣銇堛亯銇娿亱銇屻亶銇庛亸銇愩亼銇掋亾銇斻仌銇栥仐銇樸仚銇氥仜銇溿仢銇炪仧銇犮仭銇€仯銇ゃ仴銇︺仹銇ㄣ仼銇伀銇伃銇伅銇般伇銇层伋銇淬伒銇躲伔銇搞伖銇恒伝銇笺伣銇俱伩銈�銈併倐銈冦倓銈呫倖銈囥倛銈夈倞銈嬨倢銈嶃値銈忋倫銈戙倰銈擄拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");for(j=0;j!=D[130].length;++j)if(D[130][j].charCodeAt(0)!==65533){e[D[130][j]]=33280+j;d[33280+j]=D[130][j]}D[131]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷銈°偄銈c偆銈ャ偊銈с偍銈┿偑銈偓銈偖銈偘銈便偛銈炽偞銈点偠銈枫偢銈广偤銈汇偧銈姐偩銈裤儉銉併儌銉冦儎銉呫儐銉囥儓銉夈儕銉嬨儗銉嶃儙銉忋儛銉戙儝銉撱償銉曘儢銉椼儤銉欍儦銉涖儨銉濄優銉燂拷銉犮儭銉€儯銉ゃ儱銉︺儳銉ㄣ儵銉儷銉儹銉儻銉般儽銉层兂銉淬兊銉讹拷锟斤拷锟斤拷锟斤拷锟轿懳捨撐斘曃栁椢樜櫸毼浳溛澪炍熚犖∥Nのノξㄎ╋拷锟斤拷锟斤拷锟斤拷锟轿蔽参澄次滴段肺肝刮何晃嘉轿疚肯�蟻蟽蟿蠀蠁蠂蠄蠅锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");for(j=0;j!=D[131].length;++j)if(D[131][j].charCodeAt(0)!==65533){e[D[131][j]]=33536+j;d[33536+j]=D[131][j]}D[132]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷袗袘袙袚袛袝衼袞袟袠袡袣袥袦袧袨袩袪小孝校肖啸笑效楔些歇蝎鞋协挟携锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟叫靶毙残承葱笛懶缎沸感剐盒恍夹斤拷芯锌褉褋褌褍褎褏褑褔褕褖褗褘褜褝褞褟锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟解攢鈹傗攲鈹愨敇鈹斺敎鈹敜鈹粹敿鈹佲攦鈹忊敁鈹涒敆鈹b敵鈹敾鈺嬧敔鈹敤鈹封斂鈹濃敯鈹モ敻鈺傦拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷".split("");for(j=0;j!=D[132].length;++j)if(D[132][j].charCodeAt(0)!==65533){e[D[132][j]]=33792+j;d[33792+j]=D[132][j]}D[135]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鈶犫憽鈶⑩懀鈶も懃鈶︹懅鈶ㄢ懇鈶懌鈶懎鈶懐鈶扳懕鈶测懗鈪犫叀鈪⑩叄鈪も叆鈪︹収鈪ㄢ叐锟姐崏銓斻將銔嶃寴銓с寖銓躲崙銔椼實銓︺專銓崐銓汇帨銕濄帪銕庛帍銖勩帯锟斤拷锟斤拷锟斤拷锟斤拷銔伙拷銆濄�熲剸銖嶁劇銑ゃ姤銑︺姧銑ㄣ埍銏层埞銔俱嵔銔尖墥鈮♀埆鈭垜鈭氣姤鈭犫垷鈯库埖鈭┾埅锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");for(j=0;j!=D[135].length;++j)if(D[135][j].charCodeAt(0)!==65533){e[D[135][j]]=34560+j;d[34560+j]=D[135][j]}D[136]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟戒簻鍞栧▋闃垮搥鎰涙尐濮堕�㈣懙鑼滅鎮彙娓ユ棴钁﹁姦榀垫鍦ф枴鎵卞疀濮愯櫥椋寸耽缍鹃畮鎴栫矡琚峰畨搴垫寜鏆楁闂囬瀺鏉忎互浼婁綅渚濆亯鍥插し濮斿▉灏夋儫鎰忔叞鏄撴鐐虹晱鐣扮Щ缍矾鑳冭悗琛h瑐閬曢伜鍖讳簳浜ュ煙鑲查儊纾竴澹辨孩閫哥ú鑼ㄨ妺榘厑鍗板捊鍝″洜濮诲紩椋叉帆鑳よ敪锟斤拷锟�".split("");for(j=0;j!=D[136].length;++j)if(D[136][j].charCodeAt(0)!==65533){e[D[136][j]]=34816+j;d[34816+j]=D[136][j]}D[137]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷闄㈤櫚闅犻熁鍚嬪彸瀹囩儚缇借總闆ㄥ嵂榈滅涓戠鑷兼甫鍢樺攧娆濊敋榘诲Д鍘╂郸鐡滈枏鍣備簯閬嬮洸鑽忛鍙″柖瀣板奖鏄犳洺鏍勬案娉虫穿鐟涚泩绌庨牬鑻辫瑭犻嫮娑茬柅鐩婇鎮﹁瑏瓒婇柌姒庡幁鍐嗭拷鍦掑牥濂勫寤舵�ㄦ帺鎻存部婕旂値鐒旂厵鐕曠尶绺佽壎鑻戣枟閬犻墰榇涘々鏂兼睔鐢ュ嚬澶ゥ寰�蹇滄娂鏃烘í娆ф鐜嬬縼瑗栭船榇庨粍宀℃矕鑽诲剟灞嬫喍鑷嗘《鐗′箼淇哄嵏鎭╂俯绌忛煶涓嬪寲浠綍浼戒尽浣冲姞鍙槈澶忓珌瀹跺绉戞殗鏋滄灦姝屾渤鐏弬绂嶇绋肩畤鑺辫嫑鑼勮嵎鑿彄铦﹁鍢╄波杩﹂亷闇炶殜淇勫敞鎴戠墮鐢昏嚗鑺借浘璩�闆呴椐曚粙浼氳В鍥炲澹婂换蹇�倲鎭㈡噽鎴掓嫄鏀癸拷锟斤拷".split("");for(j=0;j!=D[137].length;++j)if(D[137][j].charCodeAt(0)!==65533){e[D[137][j]]=35072+j;d[35072+j]=D[137][j]}D[138]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷榄佹櫐姊版捣鐏扮晫鐨嗙档鑺ヨ煿闁嬮殠璨濆嚤鍔惧鍜冲宕栨叏姒傛动纰嶈搵琛楄┎閹ч娴Θ铔欏灒鏌胯泿閳庡妰鍤囧悇寤撴嫛鎾规牸鏍告鐛茬⒑绌瑙掕但杓冮儹闁i殧闈╁宀虫ソ椤嶉鎺涚瑺妯拷姗挎⒍榘嶆綗鍓插枬鎭版嫭娲绘竾婊戣憶瑜愯絼涓旈肮鍙舵妯洪瀯鏍厹绔冭挷閲滈帉鍣涢川鏍㈣寘钀辩播鍒堣媴鐡︿咕渚冨啝瀵掑垔鍕樺嫥宸诲枤鍫Е瀹屽畼瀵涘共骞规偅鎰熸叄鎲炬彌鏁㈡煈妗撴:娆炬瓝姹楁饥婢楁絽鐠扮敇鐩g湅绔跨绨$珐缂剁堪鑲濊墻鑾炶Τ璜岃搏閭勯憫闁撻枒闁㈤櫏闊撻え鑸樹父鍚哺宸岀帺鐧岀溂宀╃揩璐嬮泚闋戦椤樹紒浼庡嵄鍠滃櫒鍩哄瀣夊瘎宀愬笇骞惧繉鎻満鏃楁棦鏈熸妫勶拷锟斤拷".split("");for(j=0;j!=D[138].length;++j)if(D[138][j].charCodeAt(0)!==65533){e[D[138][j]]=35328+j;d[35328+j]=D[138][j]}D[139]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷姗熷赴姣呮皸姹界暱绁堝绋�绱�寰借瑷樿泊璧疯粚杓濋"楱庨浜�鍋藉剙濡撳疁鎴妧鎿鐘犵枒绁囩京锜昏璀版幀鑿婇灎鍚夊悆鍠姗樿┌鐮ф澋榛嶅嵈瀹㈣剼铏愰�嗕笜涔呬粐浼戝強鍚稿寮撴�ユ晳锟芥溄姹傛辈娉g伕鐞冪┒绐瑘绱氱尘绲︽棫鐗涘幓灞呭法鎷掓嫚鎸欐笭铏氳ū璺濋嫺婕佺Ζ榄氫酣浜含渚涗緺鍍戝厙绔跺叡鍑跺崝鍖″嵖鍙柆澧冨场寮峰綂鎬亹鎭専鏁欐娉佺媯鐙煰鑳歌剠鑸堣晭閮烽彙闊块椹氫话鍑濆碍鏆佹キ灞�鏇叉サ鐜夋绮佸儏鍕ゅ潎宸鹃對鏂ゆ娆界惔绂佺绛嬬穵鑺硅弻琛胯璎硅繎閲戝悷閵�涔濆�跺彞鍖虹嫍鐜栫煩鑻﹁函椐嗛椐掑叿鎰氳櫈鍠扮┖鍋跺瘬閬囬殔涓叉珱閲у睉灞堬拷锟斤拷".split("");for(j=0;j!=D[139].length;++j)if(D[139][j].charCodeAt(0)!==65533){e[D[139][j]]=35584+j;d[35584+j]=D[139][j]}D[140]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鎺樼獰娌撻澊杞$鐔婇殘绮傛牀绻版閸嫴鍚涜柅瑷撶兢杌嶉儭鍗﹁绁佷總鍌惧垜鍏勫晸鍦彧鍨嬪褰㈠緞鎭垫叾鎱ф啯鎺叉惡鏁櫙妗傛笓鐣︾ń绯荤祵缍欑箣缃寧鑽婅泹瑷堣璀﹁唤闋氶稄鑺歌繋榀拷鍔囨垷鎾冩縺闅欐鍌戞瑺姹烘綌绌寸祼琛�瑷f湀浠跺�瑰�﹀仴鍏煎埜鍓e枾鍦忓爡瀚屽缓鎲叉嚫鎷虫嵅妞滄ī鐗界姮鐚爺纭倒鐪岃偐瑕嬭瑱璩㈣粧閬i嵉闄洪楱撻垢鍏冨師鍘冲够寮︽笡婧愮巹鐝剧祪鑸疯█璜洪檺涔庡�嬪彜鍛煎浐濮戝宸卞韩寮ф埜鏁呮灟婀栫嫄绯婅⒋鑲¤儭鑿拌檸瑾囪法閳烽泧椤ч紦浜斾簰浼嶅崍鍛夊惥濞緦寰℃偀姊ф獛鐟氱瑾炶璀烽啇涔為瘔浜や郊渚�欏�栧厜鍏姛鍔瑰嬀鍘氬彛鍚戯拷锟斤拷".split("");for(j=0;j!=D[140].length;++j)if(D[140][j].charCodeAt(0)!==65533){e[D[140][j]]=35840+j;d[35840+j]=D[140][j]}D[141]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍚庡枆鍧戝灑濂藉瓟瀛濆畯宸ュ阀宸峰垢搴冨簹搴峰紭鎭掓厡鎶楁嫎鎺ф敾鏄傛檭鏇存澀鏍℃妲嬫睙娲旦娓簼鐢茬殗纭绯犵磪绱樼禐缍辫�曡�冭偗鑲辫厰鑶忚埅鑽掕琛¤瑳璨㈣臣閮婇叺閴辩牽閶奸枻闄嶏拷闋呴楂橀椿鍓涘姭鍙峰悎澹曟嫹婵犺豹杞熼汗鍏嬪埢鍛婂浗绌�閰烽禒榛掔崉婕夎叞鐢戝拷鎯氶鐙涜炯姝ら爟浠婂洶鍧ゅ⒕濠氭仺鎳囨槒鏄嗘牴姊辨贩鐥曠春鑹瓊浜涗綈鍙夊攩宓乏宸熁娌欑懗鐮傝閹栬鍧愬骇鎸偟鍌啀鏈�鍝夊濡诲褰╂墠鎺℃牻姝虫笀鐏介噰鐘�鐮曠牔绁枎绱拌彍瑁佽級闅涘墹鍦ㄦ潗缃病鍐村潅闃牶姒婅偞鍜插磶鍩肩榉轰綔鍓婂拫鎼炬槰鏈旀煹绐勭瓥绱㈤尟妗滈绗瑰寵鍐婂埛锟斤拷锟�".split("");for(j=0;j!=D[141].length;++j)if(D[141][j].charCodeAt(0)!==65533){e[D[141][j]]=36096+j;d[36096+j]=D[141][j]}D[142]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷瀵熸嫸鎾摝鏈钖╅洃鐨愰瘱鎹岄寙楫毧鏅掍笁鍌樺弬灞辨儴鎾掓暎妗熺嚘鐝婄敚绠楃簜铓曡畠璩涢吀椁愭柆鏆畫浠曚粩浼轰娇鍒哄徃鍙插棧鍥涘+濮嬪濮垮瓙灞嶅競甯織鎬濇寚鏀瓬鏂柦鏃ㄦ灊姝拷姝绘皬鐛呯绉佺掣绱欑传鑲㈣剛鑷宠瑭炶┅瑭﹁獙璜硣璩滈泴椋兼浜嬩技渚嶅厫瀛楀鎱堟寔鏅傛婊嬫不鐖剧捊鐥旂绀鸿�岃�宠嚜钂旇緸姹愰箍寮忚瓨榇杌稿畭闆竷鍙卞煼澶卞珘瀹ゆ倝婀挎紗鐤捐唱瀹熻攢绡犲伈鏌磋姖灞¤晩绺炶垘鍐欏皠鎹ㄨ郸鏂滅叜绀剧礂鑰呰瑵杌婇伄铔囬偑鍊熷嫼灏烘潛鐏肩埖閰岄噲閷嫢瀵傚急鎯逛富鍙栧畧鎵嬫湵娈婄嫨鐝犵ó鑵叮閰掗鍎掑彈鍛鎺堟ü缍渶鍥氬弾鍛拷锟斤拷".split("");for(j=0;j!=D[142].length;++j)if(D[142][j].charCodeAt(0)!==65533){e[D[142][j]]=36352+j;d[36352+j]=D[142][j]}D[143]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷瀹楀氨宸炰慨鎰佹嬀娲茬绉嬬祩绻嶇繏鑷垷钂愯瑗茶異韫磋集閫遍厠閰泦閱滀粈浣忓厖鍗佸緭鎴庢煍姹佹笅鐛g甫閲嶉妰鍙斿瀹挎窇绁濈府绮涘【鐔熷嚭琛撹堪淇婂郴鏄ョ灛绔h垳椐垮噯寰棳妤畨娣筹拷婧栨饯鐩剧磾宸¢伒閱囬爢鍑﹀垵鎵�鏆戞洐娓氬憾绶掔讲鏇歌柉钘疯鍔╁彊濂冲簭寰愭仌閶ら櫎鍌峰劅鍕濆尃鍗囧彫鍝ㄥ晢鍞卞槜濂ㄥ濞煎灏嗗皬灏戝皻搴勫簥寤犲桨鎵挎妱鎷涙帉鎹锋槆鏄屾槶鏅舵澗姊㈡妯垫布娑堟笁婀樼劶鐒︾収鐥囩渷纭濈绁ョО绔犵瑧绮х垂鑲栬彇钂嬭晧琛濊3瑷熻瑭旇┏璞¤碁閱ら墻閸鹃悩闅滈灅涓婁笀涓炰箺鍐楀壈鍩庡牬澹屽甯告儏鎿炬潯鏉栨祫鐘剁暢绌h捀璀查喐閷犲槺鍩撮>锟斤拷锟�".split("");for(j=0;j!=D[143].length;++j)if(D[143][j].charCodeAt(0)!==65533){e[D[143][j]]=36608+j;d[36608+j]=D[143][j]}D[144]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鎷娈栫嚟绻旇伔鑹茶Е椋熻潟杈卞盎浼镐俊渚靛攪濞犲瘽瀵╁績鎱庢尟鏂版檵妫娴告繁鐢崇柟鐪熺绉︾闯鑷h姱钖Κ瑷鸿韩杈涢�查嚌闇囦汉浠佸垉濉靛,灏嬬敋灏借厧瑷婅繀闄i澀绗ヨ珡闋堥參鍥冲帹锟介�楀惞鍨傚弗鎺ㄦ按鐐婄潯绮嬬繝琛伴亗閰旈寪閷橀殢鐟為珓宕囧旦鏁版灑瓒ㄩ洓鎹潐妞欒弲闋楅泙瑁炬緞鎽哄涓栫�暆鏄噭鍒跺嫝濮撳緛鎬ф垚鏀挎暣鏄熸櫞妫叉爾姝f竻鐗茬敓鐩涚簿鑱栧0瑁借タ瑾犺獡璜嬮�濋啋闈掗潤鏂夌◣鑴嗛毣甯儨鎴氭枼鏄旀瀽鐭崇绫嶇妇鑴婅铂璧よ贰韫熺ⅸ鍒囨嫏鎺ユ憘鎶樿ō绐冪瘈瑾洩绲惰垖铦変粰鍏堝崈鍗犲灏傚皷宸濇垿鎵囨挵鏍撴牬娉夋祬娲楁煋娼滅厧鐓芥棆绌跨绶氾拷锟斤拷".split("");for(j=0;j!=D[144].length;++j)if(D[144][j].charCodeAt(0)!==65533){e[D[144][j]]=36864+j;d[36864+j]=D[144][j]}D[145]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绻婄鲸鑵鸿垱鑸硅枽瑭硯璺甸伕閬烽姯閵戦杻楫墠鍠勬几鐒跺叏绂呯箷鑶崇硯鍣屽宀ㄦ帾鏇炬浗妤氱嫏鐤忕枎绀庣绉熺矖绱犵祫铇囪ù闃婚仭榧犲儳鍓靛弻鍙㈠�夊柂澹鐖藉畫灞ゅ対鎯f兂鎹滄巸鎸挎幓锟芥搷鏃╂浌宸f妲芥紩鐕ヤ簤鐥╃浉绐撶碂绶忕稖鑱¤崏鑽樿懍钂艰椈瑁呰蛋閫侀伃閹楅湝楱掑儚澧楁啂鑷撹數璐堥�犱績鍋村墖鍗虫伅鎹夋潫娓冻閫熶織灞炶硦鏃忕稓鍗掕鍏舵弮瀛樺灏婃悕鏉戦仠浠栧澶卑瑭戝斁鍫曞Ε鎯版墦鏌佽埖妤曢檧椐勯è浣撳爢瀵捐�愬脖甯緟鎬犳厠鎴存浛娉版粸鑳庤吙鑻旇璨搁��閫殜榛涢瘺浠e彴澶х閱嶉榉规粷鐎у崜鍟勫畢鎵樻姙鎷撴并婵悽瑷楅惛婵佽鑼稿嚙铔稿彧锟斤拷锟�".split("");for(j=0;j!=D[145].length;++j)if(D[145][j].charCodeAt(0)!==65533){e[D[145][j]]=37120+j;d[37120+j]=D[145][j]}D[146]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍙╀絾閬旇景濂劚宸界杈挎璋风嫺楸堟ń瑾颁腹鍗樺槅鍧︽媴鎺㈡棪姝庢贰婀涚偔鐭绠痘鑰借儐铔嬭獣閸涘洠澹囧季鏂殩妾�娈电敺璜囧�ょ煡鍦板紱鎭ユ櫤姹犵棿绋氱疆鑷磋湗閬呴Τ绡夌暅绔圭瓚钃勶拷閫愮З绐掕尪瀚$潃涓徊瀹欏繝鎶芥樇鏌辨敞铏》瑷婚厧閶抽妯楃�︾尓鑻ц憲璨竵鍏嗗噵鍠嬪甯栧赋搴佸紨寮靛将寰存嚥鎸戞殺鏈濇疆鐗掔敽鐪鸿伌鑴硅吀铦惰璜滆秴璺抽姎闀烽爞槌ュ媴鎹楃洿鏈曟矆鐝嶈硟閹櫝娲ュ妞庢杩介帤鐥涢�氬鏍傛幋妲讳絻婕煒杈昏敠缍撮崝妞挎桨鍧7瀣船鐖悐閲i洞浜綆鍋滃伒鍓冭矠鍛堝牑瀹氬笣搴曞涵寤峰紵鎮屾姷鎸烘彁姊眬纰囩绋嬬窢鑹囪▊璜﹁箘閫擄拷锟斤拷".split("");for(j=0;j!=D[146].length;++j)if(D[146][j].charCodeAt(0)!==65533){e[D[146][j]]=37376+j;d[37376+j]=D[146][j]}D[147]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷閭搁劖閲橀紟娉ユ憳鎿㈡暤婊寸殑绗涢仼閺戞汉鍝插竟鎾よ綅杩墑鍏稿~澶╁睍搴楁坊绾忕敎璨艰虎椤涚偣浼濇婢辩敯闆诲厧鍚愬牭濉楀Μ灞犲緬鏂楁潨娓$櫥鑿熻抄閫旈兘閸嶇牓鐮哄姫搴﹀湡濂存�掑�掑厷鍐拷鍑嶅垁鍞愬濉樺瀹曞扯宥嬫偧鎶曟惌鏉辨姊兼鐩楁窐婀稕鐏噲褰撶棙绁风瓑绛旂瓛绯栫当鍒拌懀钑╄棨瑷庤瑒璞嗚笍閫冮�忛悪闄堕牠楱伴棙鍍嶅嫊鍚屽爞灏庢啩鎾炴礊鐬崇鑳磋悇閬撻妳宄犻磭鍖垮緱寰虫稖鐗圭潱绂跨姣掔嫭瑾爟姗″嚫绐佹ご灞婇扯鑻瘏閰夌�炲櫢灞儑鏁︽矊璞氶亖闋撳憫鏇囬垗濂堥偅鍐呬箥鍑枡璎庣仒鎹洪崑妤㈤Υ绺勭暦鍗楁杌熼洠姹濅簩灏煎紣杩╁寕璩戣倝铏瑰豢鏃ヤ钩鍏ワ拷锟斤拷".split("");for(j=0;j!=D[147].length;++j)if(D[147][j].charCodeAt(0)!==65533){e[D[147][j]]=37632+j;d[37632+j]=D[147][j]}D[148]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷濡傚翱闊换濡婂繊瑾嶆俊绂扮ア瀵ц懕鐚啽骞村康鎹绘挌鐕冪矘涔冨患涔嬪煖鍤㈡偐婵冪磵鑳借劤鑶胯静瑕楄殼宸存妸鎾鏉锋尝娲剧惗鐮村﹩缃佃姯棣砍寤冩嫕鎺掓晽鏉泝鐗岃儗鑲鸿缉閰嶅�嶅煿濯掓锟芥コ鐓ょ嫿璨峰2璩犻櫔閫欒澘绉ょ煣钀╀集鍓ュ崥鎷嶆煆娉婄櫧绠旂矔鑸惰杽杩洕婕犵垎绺涜帿椐侀害鍑界纭茬鑲囩瓐娅ㄥ埂鑲岀晳鐣犲叓閴㈡簩鐧洪啑楂紣缃版姕绛忛枼槌╁櫤濉欒洡闅间即鍒ゅ崐鍙嶅彌甯嗘惉鏂戞澘姘炬睅鐗堢姱鐝晹绻佽埇钘╄博绡勯噯鐓╅爳椋尳鏅╃暘鐩ょ钑冭洰鍖崙鍚﹀搴囧郊鎮叉墘鎵规姭鏂愭瘮娉岀柌鐨绉樼穻缃疯偉琚璨婚伩闈為妯嬬案鍌欏熬寰瀲姣樼惖鐪夌編锟斤拷锟�".split("");for(j=0;j!=D[148].length;++j)if(D[148][j].charCodeAt(0)!==65533){e[D[148][j]]=37888+j;d[37888+j]=D[148][j]}D[149]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷榧绘煀绋楀尮鐤嬮褰﹁啙鑿辫倶寮煎繀鐣㈢瓎閫兼¨濮獩绱愮櫨璎康褰姘锋紓鐡㈢エ琛ㄨ璞瑰粺鎻忕梾绉掕嫍閷ㄩ嫴钂滆洯榘搧褰枌娴滅�曡钵璩撻牷鏁忕摱涓嶄粯鍩犲か濠﹀瘜鍐ㄥ竷搴滄�栨壎鏁凤拷鏂ф櫘娴埗绗﹁厫鑶氳姍璀滆矤璩﹁荡闃滈檮渚挮姝﹁垶钁¤暘閮ㄥ皝妤撻ⅷ钁鸿晽浼忓壇寰╁箙鏈嶇鑵硅瑕嗘返寮楁墪娌镐粡鐗╅畳鍒嗗惢鍣村⒊鎲ゆ壆鐒氬ギ绮夌碁绱涢洶鏂囪仦涓欎降鍏靛骞e钩寮婃焺涓﹁斀闁夐櫅绫抽爜鍍诲鐧栫ⅶ鍒ョ灔钄戠畣鍋忓鐗囩瘒绶ㄨ竞杩旈亶渚垮媺濞╁紒闉繚鑸楅嫪鍦冩崟姝╃敨瑁滆紨绌傚嫙澧撴厱鎴婃毊姣嶇翱鑿╁�d扛鍖呭憜鍫卞瀹濆嘲宄穿搴栨姳鎹ф斁鏂规湅锟斤拷锟�".split("");for(j=0;j!=D[149].length;++j)if(D[149][j].charCodeAt(0)!==65533){e[D[149][j]]=38144+j;d[38144+j]=D[149][j]}D[150]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷娉曟场鐑圭牪绺優鑺宠悓钃渹瑜掕í璞婇偊閶掗=槌抽惮涔忎骸鍌嶅墫鍧婂Θ甯藉繕蹇欐埧鏆存湜鏌愭鍐掔础鑲啫璎�璨岃部閴鹃槻鍚犻牞鍖楀儠鍗滃ⅷ鎾叉湸鐗х潶绌嗛嚘鍕冩病娈嗗爛骞屽鏈炕鍑$泦锟芥懇纾ㄩ瓟楹诲煁濡规槯鏋氭瘞鍝╂骞曡啘鏋曢鏌鹃睊妗濅害淇e張鎶规湯娌縿渚弓楹夸竾鎱㈡簚婕敁鍛虫湭榄呭烦绠曞铂瀵嗚湝婀婅搼绋旇剤濡欑矋姘戠湢鍕欏あ鐒$墴鐭涢湩榈℃濠垮鍐ュ悕鍛芥槑鐩熻糠閵橀炒濮墲婊呭厤妫夌犊绶潰楹烘懜妯¤寕濡勫瓱姣涚寷鐩茬恫鑰楄挋鍎叉湪榛欑洰鏉㈠嬁椁呭挨鎴荤本璨板晱鎮剁磱闁�鍖佷篃鍐跺鐖鸿�堕噹寮ョ煝鍘勫焦绱勮柆瑷宠簫闈栨煶钖憮鎰夋剤娌圭檼锟斤拷锟�".split("");for(j=0;j!=D[150].length;++j)if(D[150][j].charCodeAt(0)!==65533){e[D[150][j]]=38400+j;d[38400+j]=D[150][j]}D[151]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷璜几鍞綉鍎媷鍙嬪骞芥偁鎲傛彇鏈夋煔婀ф秾鐚剁尫鐢辩瑁曡獦閬婇倯閮甸泟铻嶅浜堜綑涓庤獕杓块爯鍌辜濡栧搴告彋鎻烘搧鏇滄妲樻磱婧剁啍鐢ㄧ缇婅��钁夎搲瑕佽韪婇仴闄介鎱炬姂娆诧拷娌冩荡缈岀考娣�缇呰灪瑁告潵鑾遍牸闆锋礇绲¤惤閰贡鍗靛祼娆勬揩钘嶈槶瑕у埄鍚忓饱鏉庢ⅷ鐞嗙拑鐥㈣瑁¢噷闆㈤櫢寰嬬巼绔嬭憥鎺犵暐鍔夋祦婧滅悏鐣欑~绮掗殕绔滈緧渚舵叜鏃呰櫆浜嗕寒鍍氫浮鍑屽鏂欐娑肩専鐧傜灜绋滅厂鑹珤閬奸噺闄甸牁鍔涚窇鍊帢鏋楁穻鐕愮惓鑷ㄨ吉闅i睏楹熺憼濉佹稒绱浠や级渚嬪喎鍔卞逗鎬滅幉绀艰嫇閳撮毞闆堕湂楹楅舰鏆︽鍒楀姡鐑堣寤夋亱鎲愭迹鐓夌熬绶磋伅锟斤拷锟�".split("");for(j=0;j!=D[151].length;++j)if(D[151][j].charCodeAt(0)!==65533){e[D[151][j]]=38656+j;d[38656+j]=D[151][j]}D[152]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷钃�i尙鍛傞娅撶倝璩傝矾闇插姶濠佸粖寮勬湕妤兼娴紡鐗㈢嫾绡�佽伨铦嬮儙鍏簱绂勮倠閷茶珫鍊拰瑭辨璩勮剣鎯戞灎榉蹭簷浜橀皭瑭梺钑ㄦ婀剧鑵曪拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉紝涓愪笗涓副涓朵讣涓夸箓涔栦箻浜備簠璞簥鑸掑紞浜庝簽浜熶籂浜喊浜充憾浠庝粛浠勪粏浠備粭浠炰画浠熶环浼変綒浼颁經浣濅綏浣囦蕉渚堜緩渚樹交浣╀桨渚戜蒋渚嗕緰鍎樹繑淇熶繋淇樹繘淇戜繗淇愪郡淇ュ�氬�ㄥ�斿��ュ�呬紲淇跺�″�╁�烤淇�戝�嗗亙鍋囨渻鍋曞亹鍋堝仛鍋栧伂鍋稿個鍌氬倕鍌村偛锟斤拷锟�".split("");for(j=0;j!=D[152].length;++j)if(D[152][j].charCodeAt(0)!==65533){e[D[152][j]]=38912+j;d[38912+j]=D[152][j]}D[153]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍍夊儕鍌冲儌鍍栧優鍍ュ儹鍍e儺鍍瑰兊鍎夊剚鍎傚剸鍎曞剶鍎氬劇鍎哄劮鍎煎劵鍎垮厐鍏掑厡鍏斿參绔稿叐鍏叜鍐�鍐傚洏鍐屽唹鍐忓啈鍐撳啎鍐栧啢鍐﹀啟鍐╁啰鍐喅鍐卞啿鍐板喌鍐藉噮鍑夊嚊鍑犺檿鍑╁嚟锟藉嚢鍑靛嚲鍒勫垕鍒斿垘鍒у埅鍒埑鍒瑰墢鍓勫墜鍓屽墳鍓斿壀鍓村墿鍓冲壙鍓藉妽鍔斿姃鍓卞妶鍔戣鲸杈у姮鍔娂鍔靛媮鍕嶅嫍鍕炲嫞鍕﹂-鍕犲嫵鍕靛嫺鍕瑰寙鍖堢敻鍖嶅寪鍖忓寱鍖氬專鍖尡鍖冲尭鍗�鍗嗗崊涓楀崏鍗嶅嚃鍗炲崺鍗鍗诲嵎鍘傚帠鍘犲帵鍘ュ幃鍘板幎鍙冪皰闆欏彑鏇肩嚠鍙彣鍙徍鍚佸惤鍛�鍚惌鍚煎惍鍚跺惄鍚濆憥鍜忓懙鍜庡憻鍛卞懛鍛板拻鍛诲拃鍛跺拕鍜愬拞鍝囧挗鍜稿挜鍜搫鍝堝挩锟斤拷锟�".split("");for(j=0;j!=D[153].length;++j)if(D[153][j].charCodeAt(0)!==65533){e[D[153][j]]=39168+j;d[39168+j]=D[153][j]}D[154]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍜搨鍜ゅ捑鍜煎摌鍝ュ摝鍞忓敂鍝藉摦鍝摵鍝㈠敼鍟�鍟e晫鍞暅鍟呭晼鍟楀敻鍞冲暆鍠欏杸鍜枈鍠熷暬鍟惧枠鍠炲柈鍟煎杻鍠╁枃鍠ㄥ棜鍡呭棢鍡勫棞鍡ゅ棓鍢斿椃鍢栧椌鍡藉槢鍡瑰檸鍣愮嚐鍢村樁鍢插樃锟藉櫕鍣ゅ槸鍣櫔鍤嗗殌鍤婂殸鍤斿殢鍤ュ毊鍤跺毚鍥傚毤鍥佸泝鍥�鍥堝泿鍥戝洆鍥楀洰鍥瑰渶鍥垮渼鍦夊湀鍦嬪湇鍦撳湗鍦栧棁鍦滃湨鍦峰湼鍧庡溁鍧�鍧忓潻鍩�鍨堝潯鍧垮瀴鍨撳灎鍨冲灓鍨灠鍩冨焼鍩斿煉鍩撳爦鍩栧煟鍫嬪牂鍫濆〔鍫″、濉嬪“姣�濉掑牻濉瑰澧瑰澧⒑澹炲⒒澧稿澹呭澹戝澹欏澹ュ澹ゅ澹:澹瑰;澹煎=澶傚澶愬姊﹀ぅ澶き澶插じ澶剧珤濂曞濂庡濂樺ア濂犲ェ濂ォ锟斤拷锟�".split("");for(j=0;j!=D[154].length;++j)if(D[154][j].charCodeAt(0)!==65533){e[D[154][j]]=39424+j;d[39424+j]=D[154][j]}D[155]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷濂稿濡濅綖渚Γ濡插濮ㄥ濡嶅濮氬ē濞熷☉濞滃▔濞氬﹢濠濞靛ǘ濠㈠┆濯氬濯惧珛瀚傚瀚e珬瀚﹀瀚栧瀚诲瑢瀣嬪瑬瀣插珢瀣瀣惧瓋瀛呭瓈瀛戝瓡瀛氬瓫瀛ュ瀛板瀛靛鏂堝瀹�锟藉畠瀹﹀瀵冨瘒瀵夊瘮瀵愬瀵﹀瀵炲瀵瀵跺灏呭皣灏堝皪灏撳盃灏㈠皑灏稿肮灞佸眴灞庡睋灞愬睆瀛卞爆灞耿灞跺惫宀屽矐宀斿宀不宀跺布宀峰硡宀惧硣宄欏畅宄藉澈宄秾宄磱宕曞礂宓滃礋宕涘磻宕斿储宕氬礄宕樺祵宓掑祹宓嬪惮宓冲刀宥囧秳宥傚盯宥濆冬宥督宥愬斗宥煎穳宸嶅窊宸掑窎宸涘帆宸插返甯嬪笟甯欏笐甯涘付甯峰箘骞冨箑骞庡箺骞斿篃骞㈠工骞囧沟骞跺购楹煎箍搴犲粊寤傚粓寤愬粡锟斤拷锟�".split("");for(j=0;j!=D[155].length;++j)if(D[155][j].charCodeAt(0)!==65533){e[D[155][j]]=39680+j;d[39680+j]=D[155][j]}D[156]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷寤栧唬寤濆粴寤涘虎寤″花寤╁滑寤卞怀寤板淮寤稿痪寮冨級褰濆綔寮嬪紤寮栧缉寮几褰佸綀褰屽綆寮綉褰栧綏褰欏健褰匠褰峰緝寰傚娇寰婂緢寰戝緡寰炲緳寰樺緺寰ㄥ经寰煎繓蹇诲郡蹇稿勘蹇濇偝蹇挎�℃仩锟芥�欐�愭�╂�庢�辨�涙�曟��︽�忔�烘仛鎭佹仾鎭锋仧鎭婃亞鎭嶆仯鎭冩仱鎭傛伂鎭仚鎮佹倣鎯ф們鎮氭倓鎮涙倴鎮楁倰鎮ф倠鎯℃偢鎯犳儞鎮村堪鎮芥儐鎮垫儤鎱嶆剷鎰嗘兌鎯锋剙鎯存兒鎰冩劇鎯绘儽鎰嶆剮鎱囨劸鎰ㄦ劎鎱婃効鎰兼劕鎰存劷鎱傛厔鎱虫叿鎱樻厵鎱氭叓鎱存叝鎱ユ叡鎱熸厺鎱撴叺鎲欐問鎲囨啲鎲旀啔鎲婃啈鎲啴鎳屾噴鎳夋嚪鎳堟噧鎳嗘喓鎳嬬焦鎳嶆嚘鎳f嚩鎳烘嚧鎳挎嚱鎳兼嚲鎴�鎴堟垑鎴嶆垖鎴旀垱锟斤拷锟�".split("");for(j=0;j!=D[156].length;++j)if(D[156][j].charCodeAt(0)!==65533){e[D[156][j]]=39936+j;d[39936+j]=D[156][j]}D[157]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鎴炴垺鎴埉鎴版埐鎴虫墎鎵庢墳鎵f墰鎵犳墾鎵兼妭鎶夋壘鎶掓姄鎶栨嫈鎶冩姅鎷楁嫅鎶绘嫃鎷挎媶鎿旀媹鎷滄媽鎷婃媯鎷囨姏鎷夋寣鎷嫳鎸ф寕鎸堟嫰鎷垫崘鎸炬崓鎼滄崗鎺栨帋鎺�鎺嵍鎺f帍鎺夋師鎺垫崼锟芥崺鎺炬彥鎻�鎻嗘彛鎻夋彃鎻舵弰鎼栨惔鎼嗘悡鎼︽惗鏀濇悧鎼ㄦ悘鎽ф懐鎽舵憥鏀挄鎾撴挜鎾╂拡鎾兼摎鎿掓搮鎿囨捇鎿樻搨鎿辨摟鑸夋摖鎿℃姮鎿f摨鏀摱鎿存摬鎿烘攢鎿芥敇鏀滄攨鏀ゆ敚鏀敶鏀垫敺鏀舵敻鐣嬫晥鏁栨晻鏁嶆晿鏁炴暆鏁叉暩鏂傛杻璁婃枦鏂熸柅鏂锋梼鏃嗘梺鏃勬棇鏃掓棝鏃欐棤鏃℃棻鏉叉槉鏄冩椈鏉虫樀鏄舵槾鏄滄檹鏅勬檳鏅佹櫈鏅濇櫎鏅ф櫒鏅熸櫌鏅版殐鏆堟殠鏆夋殑鏆樻殱鏇佹毠鏇夋毦鏆硷拷锟斤拷".split("");for(j=0;j!=D[157].length;++j)if(D[157][j].charCodeAt(0)!==65533){e[D[157][j]]=40192+j;d[40192+j]=D[157][j]}D[158]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鏇勬毟鏇栨洑鏇犳樋鏇︽洨鏇版浀鏇锋湉鏈栨湠鏈︽湩闇告湲鏈挎湺鏉佹湼鏈锋潌鏉炴潬鏉欐潱鏉ゆ瀴鏉版灘鏉兼潽鏋屾瀷鏋︽灐鏋呮灧鏌灤鏌灣鏌╂灨鏌ゆ煘鏌濇煝鏌灩鏌庢焼鏌ф獪鏍炴鏍╂妗嶆牪妗庯拷姊虫牜妗欐。妗锋】姊熸姊姊濇姊冩姊规〈姊垫姊烘姊嶆【妞佹妞堟妞㈡う妫℃妫嶆妫ф妞舵妞勬妫fぅ妫规妫え妞妞fぁ妫嗘ス妤锋妤告カ妤旀ゾ妤す妤存そ妤欐ぐ妤℃妤濇妤Σ姒姒挎妲撴妲庡妲婃姒绘姒фó姒戞姒滄姒存妲ㄦ▊妯涙Э娆婃Ч妲叉Ё妯呮Ρ妯炴Л妯旀Й妯婃♁娅佹ǎ妯撴﹦妯屾┎妯舵└姗囨姗欐│姗堟ǜ妯㈡獝妾嶆獱妾勬妾o拷锟斤拷".split("");for(j=0;j!=D[158].length;++j)if(D[158][j].charCodeAt(0)!==65533){e[D[158][j]]=40448+j;d[40448+j]=D[158][j]}D[159]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷妾楄槜妾绘珒娅傛妾虫娅炴珣娅熸娅氭娅绘瑓铇栨娆掓瑬楝辨瑹娆告鐩滄椋瓏姝冩瓑姝愭瓩姝旀瓫姝熸姝告姝挎畝娈勬畠娈嶆畼娈曟疄娈ゆ娈娈叉娈虫娈兼瘑姣嬫瘬姣熸姣姣拷楹炬皥姘撴皵姘涙挨姘f睘姹曟雹姹矀娌嶆矚娌佹矝姹炬报姹虫矑娌愭硠娉辨硴娌芥硹娉呮碀娌脖娌炬埠娉涙朝娉欐唱娲熻娲舵传娲芥锤娲欐吹娲虫磼娲屾担娑撴丹娴氭倒娴欐稁娑曟郡娑呮饭娓曟笂娑垫穱娣︽陡娣嗘番娣炴穼娣ㄦ窉娣呮泛娣欐筏娣曟藩娣腑婀府娓欐共婀熸妇娓f公娓苟婀嶆笩婀冩负婀庢袱婊挎笣娓告簜婧簶婊夋悍婊撴航婧粍婧叉粩婊曟簭婧ユ粋婧熸絹婕戠亴婊桓婊炬伎婊叉急婊疾婊岋拷锟斤拷".split("");for(j=0;j!=D[159].length;++j)if(D[159][j].charCodeAt(0)!==65533){e[D[159][j]]=40704+j;d[40704+j]=D[159][j]}D[224]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷婕炬紦婊锋締娼烘礁婢佹線娼經婵虫江婢傛郊娼樻編婢戞總娼︽境婢f尽婢ゆ竟婵嗘惊婵熸繒婵繑婵樻勘婵繘鐎夌�嬫亢鐎戠�佺�忔烤鐎涚�氭酱鐎濈�樼�熺�扮�剧�茬亼鐏g倷鐐掔偗鐑辩偓鐐哥偝鐐儫鐑嬬儩锟界儥鐒夌兘鐒滅剻鐓ョ厱鐔堢叇鐓㈢厡鐓栫叕鐔忕嚮鐔勭啎鐔ㄧ啲鐕楃喒鐔剧噿鐕夌嚁鐕庣嚑鐕嚙鐕电嚰鐕圭嚳鐖嶇垚鐖涚埁鐖埇鐖扮埐鐖荤埣鐖跨墍鐗嗙墜鐗樼壌鐗剧妭鐘佺妵鐘掔姈鐘㈢姧鐘圭姴鐙冪媶鐙勭嫀鐙掔嫝鐙犵嫛鐙圭嫹鍊忕寳鐚婄寽鐚栫対鐚寸尟鐚╃尌鐚剧崕鐛忛粯鐛楃崻鐛ㄧ嵃鐛哥嵉鐛荤嵑鐝堢幊鐝庣幓鐝�鐝ョ彯鐝炵挗鐞呯懐鐞ョ徃鐞茬惡鐟曠惪鐟熺憴鐟佺憸鐟╃懓鐟g應鐟剁懢鐠嬬挒鐠х搳鐡忕摂鐝憋拷锟斤拷".split("");for(j=0;j!=D[224].length;++j)if(D[224][j].charCodeAt(0)!==65533){e[D[224][j]]=57344+j;d[57344+j]=D[224][j]}D[225]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐡犵摚鐡х摡鐡摬鐡扮摫鐡哥摲鐢勭攦鐢呯攲鐢庣攳鐢曠敁鐢炵敠鐢敿鐣勭晬鐣婄晧鐣涚晢鐣氱暕鐣ょ暓鐣暛鐣哥暥鐤嗙枃鐣寸枈鐤夌杺鐤旂枤鐤濈枼鐤g梻鐤崇梼鐤电柦鐤哥柤鐤辩棈鐥婄棐鐥欑棧鐥炵椌鐥匡拷鐥肩榿鐥扮椇鐥茬棾鐦嬬槏鐦夌槦鐦х槧鐦$槩鐦ょ槾鐦扮樆鐧囩檲鐧嗙櫆鐧樼櫋鐧㈢櫒鐧╃櫔鐧х櫖鐧扮櫜鐧剁櫢鐧肩殌鐨冪殘鐨嬬殠鐨栫殦鐨欑殮鐨扮毚鐨哥毠鐨虹泜鐩嶇洊鐩掔洖鐩$洢鐩х洩铇浕鐪堢渿鐪勭湬鐪ょ湠鐪ョ湨鐪涚湻鐪哥潎鐫氱潹鐫潧鐫ョ澘鐫剧澒鐬庣瀷鐬戠灎鐬炵灠鐬剁灩鐬跨灱鐬界灮鐭囩煃鐭楃煔鐭滅煟鐭熂鐮岀爳绀︾牋绀纰庣〈纰嗙〖纰氱纰g⒌纰纾戠纾嬬纰剧⒓纾呯纾拷锟斤拷".split("");for(j=0;j!=D[225].length;++j)if(D[225][j].charCodeAt(0)!==65533){e[D[225][j]]=57600+j;d[57600+j]=D[225][j]}D[226]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷纾х纾界4绀囩绀戠绀か绁�绁犵绁熺绁曠绁虹タ绂婄绂ч綃绂Ξ绂崇绂虹绉曠Ё绉А绉g▓绋嶇绋欑绋熺绋辩ɑ绋剧ǚ绌冪绌夌绌㈢┅榫濈┌绌圭┙绐堢獥绐曠獦绐栫绔堢锟界绔呯珓绐块們绔囩珚绔嶇珡绔曠珦绔欑珰绔濈绔㈢绔绗傜瑥绗婄瑔绗崇瑯绗欑瑸绗电绗剁瓙绛虹瑒绛嶇瑡绛岀瓍绛电绛寸绛扮绛绠濈畼绠熺畭绠滅畾绠嬬畳绠忕瓭绠欑瘚绡佺瘜绡忕绡嗙瘽绡╃皯绨旂绡ョ睜绨�绨囩皳绡崇绨楃皪绡剁埃绨х蔼绨熺胺绨敖绫岀眱绫旂睆绫�绫愮睒绫熺堡绫栫饱绫钡绮冪矏绮ょ箔绮㈢搏绮$波绮崇膊绮辩伯绮圭步绯�绯呯硞绯樼硳绯滅尝楝荤朝绯茬炒绯剁澈绱嗭拷锟斤拷".split("");for(j=0;j!=D[226].length;++j)if(D[226][j].charCodeAt(0)!==65533){e[D[226][j]]=57856+j;d[57856+j]=D[226][j]}D[227]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绱傜礈绱曠磰绲呯祴绱床绱跨吹绲嗙党绲栫祹绲茬胆绲祻绲g稉缍夌禌缍忕到缍涚逗缍叮缍电穱缍界东绺界盯缍窚缍哥稛缍扮窐绶濈筏绶炵坊绶茬贰绺呯笂绺g浮绺掔副绺熺笁绺嬬涪绻嗙功绺荤傅绺圭箖绺凤拷绺茬负绻х節绻栫篂绻欑箽绻圭躬绻╃辜绻荤簝绶曠菇杈箍绾堢簤绾岀簰绾愮簱绾旂簴绾庣簺绾滅几缂虹絽缃岀綅缃庣綈缃戠綍缃旂綐缃熺綘缃ㄧ僵缃х礁缇傜締缇冪緢缇囩緦缇旂緸缇濈練缇g警缇茬竟缇径缇歌缈呯繂缈婄繒缈旂俊缈︾咯缈崇抗椋滆�嗚�勮�嬭�掕�樿�欒�滆�¤�ㄨ�胯�昏亰鑱嗚亽鑱樿仛鑱熻仮鑱ㄨ伋鑱茶伆鑱惰伖鑱借伩鑲勮倖鑲呰倹鑲撹倸鑲啇鑲儧鑳ヨ儥鑳濊儎鑳氳儢鑴夎儻鑳辫剾鑴╄劊鑴厠锟斤拷锟�".split("");for(j=0;j!=D[227].length;++j)if(D[227][j].charCodeAt(0)!==65533){e[D[227][j]]=58112+j;d[58112+j]=D[227][j]}D[228]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷闅嬭厗鑴捐厯鑵戣兗鑵辫叜鑵ヨ叇鑵磋唭鑶堣唺鑶�鑶傝啝鑶曡啢鑶h厽鑶撹啯鑶拌喌鑶捐喐鑶借噣鑷傝喓鑷夎噸鑷戣嚈鑷樿噲鑷氳嚐鑷犺嚙鑷鸿嚮鑷捐垇鑸傝垍鑸囪垔鑸嶈垚鑸栬埄鑸埜鑸宠墍鑹欒墭鑹濊墯鑹熻墹锟借墷鑹ㄨ壀鑹埉鑹辫壏鑹歌壘鑺嶈姃鑺姛鑺昏姮鑻¤嫞鑻熻嫆鑻磋嫵鑻鸿帗鑼冭嫽鑻硅嫗鑼嗚嫓鑼夎嫏鑼佃尨鑼栬尣鑼辫崁鑼硅崘鑽呰尟鑼寳鑼樿巺鑾氳帾鑾熻帰鑾栬專鑾庤巼鑾婅嵓鑾佃嵆鑽佃帬鑾夎帹鑿磋悡鑿弾鑿借悆鑿樿悑鑿佽彿钀囪彔鑿茶悕钀㈣悹鑾借惛钄嗚徎钁惇钀艰暁钂勮懛钁挱钁拏钁╄憜钀懐钁硅惖钃婅憿钂硅捒钂熻摍钃嶈捇钃氳搻钃佽搯钃栬挕钄¤摽钃磋敆钄樿敩钄熻敃钄旇摷钑�钑h晿钑堬拷锟斤拷".split("");for(j=0;j!=D[228].length;++j)if(D[228][j].charCodeAt(0)!==65533){e[D[228][j]]=58368+j;d[58368+j]=D[228][j]}D[229]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷钑佽槀钑嬭晻钖�钖よ枅钖戣枈钖ㄨ暛钖旇枦钘枃钖滆暦钑捐枑钘夎柡钘忚柟钘愯棔钘濊棩钘滆椆铇婅槗铇嬭椌钘鸿槅铇㈣槡铇拌樋铏嶄箷铏旇櫉铏ц櫛铓撹殻铓╄毆铓嬭殞铓惰毌铔勮泦铓拌泬锠h毇铔旇洖铔╄洭锟借洘铔涜洴铚掕渾铚堣渶铚冭浕铚戣湁铚嶈浌铚婅湸铚胯湻铚昏湧铚╄湚铦犺潫铦歌潓铦庤澊铦楄潹铦潤铦撹潱铦爡铻㈣灍铻傝灟锜嬭灲锜�锜愰洊铻焺铻宠焽锜嗚灮锜煵锜犺爮锠嶈熅锜惰煼锠庤煉锠戣爾锠曡牏锠¤牨锠惰牴锠ц牷琛勮琛掕琛炶、琛琛捐琛佃〗琚佃〔琚傝琚掕琚欒ⅱ琚嶈ⅳ琚拌⒖琚辫瑁勮瑁樿瑁濊9瑜傝<瑁磋(瑁茶瑜岃瑜撹瑜炶ぅ瑜か瑗佽瑜昏ざ瑜歌瑜濊瑗烇拷锟斤拷".split("");for(j=0;j!=D[229].length;++j)if(D[229][j].charCodeAt(0)!==65533){e[D[229][j]]=58624+j;d[58624+j]=D[229][j]}D[230]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷瑗﹁イ瑗オ瑗ゴ瑗疯ゾ瑕冭瑕婅瑕樿Α瑕╄Ζ瑕Ο瑕茶瑕借瑙�瑙氳瑙濊Ё瑙磋Ц瑷冭瑷愯▽瑷涜瑷ヨǘ瑭佽瑭掕﹩瑭堣┘瑭┈瑭㈣獏瑾傝獎瑾ㄨ瑾戣瑾﹁獨瑾h珓璜嶈珎璜氳璜宠锟借璜辫瑪璜犺璜疯珵璜涜瑢璎囪瑲璜¤瑬璎愯瑮璎犺闉璎璎ㄨ瓉璀岃瓘璀庤瓑璀栬瓫璀氳璀熻璀璀借畝璁岃畮璁掕畵璁栬畽璁氳昂璞佽翱璞堣睂璞庤睈璞曡雹璞备璞鸿矀璨夎矃璨婅矋璨庤矓璞艰矘鎴濊箔璨步璨茶渤璨捕璩堣硜璩よ常璩氳辰璩鸿郴璐勮磪璐婅磭璐忚磵璐愰綆璐撹硩璐旇礀璧ц淡璧辫党瓒佽稒璺傝毒瓒鸿窂璺氳窎璺岃窙璺嬭藩璺窡璺h芳韪堣笁璺胯笣韪炶笎韪熻箓韪佃赴韪磋箠锟斤拷锟�".split("");for(j=0;j!=D[230].length;++j)if(D[230][j].charCodeAt(0)!==65533){e[D[230][j]]=58880+j;d[58880+j]=D[230][j]}D[231]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷韫囪箟韫岃箰韫堣箼韫よ範韪梗韫曡苟韫茶辜韬佽簢韬呰簞韬嬭簥韬撹簯韬旇簷韬骸韬喊杌嗚罕韬捐粎杌堣粙杌涜唬杌艰换杌痪杓婅紖杓曡紥杓欒紦杓滆紵杓涜紝杓﹁汲杓昏脊杞呰絺杓捐綄杞夎絾杞庤綏杞滐拷杞㈣剑杞よ緶杈熻荆杈警杈疯繗杩ヨ竣杩刊閭囪看閫呰抗杩洪�戦�曢�¢�嶉�為�栭�嬮�ч�堕�甸�硅扛閬忛亹閬戦亽閫庨亯閫鹃仏閬橀仦閬ㄩ伅閬堕毃閬查倐閬介倎閭�閭婇倝閭忛偍閭偙閭甸儮閮ゆ増閮涢剛閯掗剻閯查劙閰婇厲閰橀叄閰ラ叐閰抽叢閱嬮唹閱傞啟閱啹閱喌閱撮喓閲�閲侀噳閲嬮噽閲栭嚐閲¢嚊閲奸嚨閲堕垶閲块垟閳垥閳戦墳閴楅墔閴夐墹閴堥姇閳块墜閴愰姕閵栭姄閵涢墯閶忛姽閵烽嫨閷忛嫼閸勯尞锟斤拷锟�".split("");for(j=0;j!=D[231].length;++j)if(D[231][j].charCodeAt(0)!==65533){e[D[231][j]]=59136+j;d[59136+j]=D[231][j]}D[232]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷閷欓將閷氶專閷洪尩閷婚崪閸犻嵓閸崠閹伴幀閹帞閹归彇閺楅彣閺ラ彉閺冮彎閺愰張閺ら悮閻旈悡閻冮悋閻愰惗閻惖閻¢惡閼侀憭閼勯憶閼犻憿閼為應閳╅懓閼甸懛閼介憵閼奸懢閽侀懣闁傞枃闁婇枖闁栭枠闁欙拷闁犻枿闁ч柇闁奸柣闁归柧闂婃慷闂冮棈闂岄棔闂旈棖闂滈棥闂ラ棦闃¢槰闃槸闄傞檶闄忛檵闄烽櫆闄為櫇闄熼櫐闄查櫖闅嶉殬闅曢殫闅毀闅遍毑闅伴毚闅堕毟闅归泿闆嬮泬闆嶈闆滈湇闆曢浌闇勯渾闇堥湏闇庨湋闇忛湒闇欓湦闇湴闇归溄闇鹃潉闈嗛潏闈傞潐闈滈潬闈ら潶闈ㄥ嫆闈澅闈归瀰闈奸瀬闈洪瀱闉嬮瀼闉愰灉闉ㄩ灕闉i灣闉撮焹闊嗛焾闊嬮煖闊綇闊茬珶闊堕煹闋忛爩闋搁牑闋¢牱闋介椤忛椤’椤帮拷锟斤拷".split("");for(j=0;j!=D[232].length;++j)if(D[232][j].charCodeAt(0)!==65533){e[D[232][j]]=59392+j;d[59392+j]=D[232][j]}D[233]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷椤遍〈椤抽ⅹ棰⒈棰堕椋冮椋╅+椁冮椁掗椁橀ぁ椁濋椁ら椁ぎ椁介ぞ楗傞楗呴楗嬮楗掗楗曢棣橀Ε棣Ξ棣奸椐涢椐橀椐М椐遍Р椐婚Ц楱侀◤楱呴Б楱欓ǐ楱烽﹨椹傞﹢椹冿拷楱鹃椹嶉椹楅椹㈤━椹ら┅椹┆楠楠奸珋楂忛珣楂撻珨楂為珶楂㈤楂﹂楂楂撮楂烽楝嗛瑯楝氶瑹楝㈤楝ラ楝ㄩ楝楝榄勯瓋榄忛瓖榄庨瓚榄橀楫撻畠楫戦畺楫楅疅楫犻楫撮瘈榀婇榀嗛瘡榀戦瘨榀i榀ら瘮榀¢昂榀查榀伴皶榘旈皦榘撻皩榘嗛皥榘掗皧榘勯爱榘涢哎榘ら啊榘伴眹榘查眴榘鹃睔楸犻抱楸堕备槌ч超槌伴磯榇堥倡榇冮磫榇处槎矗榇熼祫榇曢磼榈侀纯榇鹃祮榈堬拷锟斤拷".split("");for(j=0;j!=D[233].length;++j)if(D[233][j].charCodeAt(0)!==65533){e[D[233][j]]=59648+j;d[59648+j]=D[233][j]}D[234]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷榈濋禐榈ら祽榈愰禉榈查秹槎囬东榈岛槎氶钉槎╅恫榉勯穪槎婚陡槎洪穯榉忛穫榉欓窊榉搁乏榉矾榉介笟楦涢笧楣甸构楣介簛楹堥簨楹岄簰楹曢簯楹濋亥楹╅焊楹涵闈¢粚榛庨粡榛愰粩榛滈粸榛濋粻榛ラ花榛拷榛撮欢榛烽还榛婚患榛介紘榧堢毞榧曢肌榧季榻婇綊榻旈剑榻熼綘榻¢溅榻ч浆榻椒榻查蕉榫曢緶榫犲牤妲囬仚鐟ゅ嚋鐔欙拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷".split("");for(j=0;j!=D[234].length;++j)if(D[234][j].charCodeAt(0)!==65533){e[D[234][j]]=59904+j;d[59904+j]=D[234][j]}D[237]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绾婅閸堥妶钃滀繅鐐绘槺妫堥嫻鏇诲絽涓ㄤ弧浠间紑浼冧脊浣栦緬渚婁練渚斾繊鍋�鍊靠鍊炲亞鍋板亗鍌斿兇鍍樺厞鍏ゅ啙鍐惧嚞鍒曞姕鍔﹀媭鍕涘寑鍖囧尋鍗插帗鍘插彎铷庡挏鍜婂挬鍝垮枂鍧欏潵鍨焾鍩囷◤锟斤◥澧炲⒉澶嬪濂涘濂eΔ濡哄瓥瀵�鐢瘶瀵盀宀﹀埠宄靛揣宓擄☉宓傚淡宥稿豆宸愬肌寮村涧寰峰繛鎭濇倕鎮婃優鎯曟劆鎯叉剳鎰锋劙鎲樻垞鎶︽彽鎽犳挐鎿庢晭鏄�鏄曟樆鏄夋槷鏄炴槫鏅ユ櫁鏅欙♁鏅虫殭鏆犳毑鏆挎浐鏈庯ぉ鏉︽灮妗掓焵鏍佹妫忥〒妤〝姒樻Б妯版┇姗嗘┏姗炬娅ゆ瘱姘挎睖娌嗘悲娉氭磩娑囨弹娑栨冬娣忔犯娣叉芳娓规箿娓ф讣婧挎緢婢垫康鐎呯�囩�ㄧ倕鐐剰鐒勭厹鐓嗙厙铷曠噥鐕剧姳锟斤拷锟�".split("");for(j=0;j!=D[237].length;++j)if(D[237][j].charCodeAt(0)!==65533){e[D[237][j]]=60672+j;d[60672+j]=D[237][j]}D[238]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐘剧尋铷栫嵎鐜界弶鐝栫彛鐝掔悋鐝电惁鐞惄鐞憿鐠夌挓鐢佺暞鐨傜殰鐨炵殯鐨︼鐫嗗姱鐮$纭ょ『绀帮铷欙绂旓绂涚珣绔э绔疄铷濈祱绲滅斗缍犵窎绻掔絿缇★鑼佽崲鑽胯弴鑿惰憟钂磋晸钑欙拷钑钖帮铷¤爣瑁佃♁瑷疯┕瑾ц璜燂á璜惰瓝璀胯嘲璩磋磼璧讹ǎ杌忥à铷ラ仹閮烇é閯曢劎閲氶嚄閲為嚟閲嚖閲ラ垎閳愰垔閳洪墍閳奸墡閴欓墤閳归墽閵ч壏閴搁嫥閶楅嫏閶愶ě閶曢嫚閶撻尌閷¢嫽铷ㄩ尀閶块対閷傞嵃閸楅帳閺嗛彏閺搁惐閼呴憟闁掞铷╅殱闅湷闇婚潈闈嶉潖闈戦潟椤楅ˉ铷ǐ椁эì棣為楂欓珳榄甸楫忛楫婚皜榈伴但铷笝榛戯拷锟解叞鈪扁叢鈪斥叴鈪碘叾鈪封吀鈪癸竣锟わ紘锛傦拷锟斤拷".split("");
+for(j=0;j!=D[238].length;++j)if(D[238][j].charCodeAt(0)!==65533){e[D[238][j]]=60928+j;d[60928+j]=D[238][j]}D[250]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鈪扳叡鈪测叧鈪粹叺鈪垛叿鈪糕吂鈪犫叀鈪⑩叄鈪も叆鈪︹収鈪ㄢ叐锟郡锛囷紓銏扁剸鈩♀埖绾婅閸堥妶钃滀繅鐐绘槺妫堥嫻鏇诲絽涓ㄤ弧浠间紑浼冧脊浣栦緬渚婁練渚斾繊鍋�鍊靠鍊炲亞鍋板亗鍌斿兇鍍樺厞锟藉叅鍐濆喚鍑垥鍔滃姦鍕�鍕涘寑鍖囧尋鍗插帗鍘插彎铷庡挏鍜婂挬鍝垮枂鍧欏潵鍨焾鍩囷◤铷愬澧插濂撳濂濆ィ濡ゅ瀛栧瘈鐢瘶瀵盀宀﹀埠宄靛揣宓擄☉宓傚淡宥稿豆宸愬肌寮村涧寰峰繛鎭濇倕鎮婃優鎯曟劆鎯叉剳鎰锋劙鎲樻垞鎶︽彽鎽犳挐鎿庢晭鏄�鏄曟樆鏄夋槷鏄炴槫鏅ユ櫁鏅欙♁鏅虫殭鏆犳毑鏆挎浐鏈庯ぉ鏉︽灮妗掓焵鏍佹妫忥〒妤〝姒樻Б妯版┇姗嗘┏姗炬娅ゆ瘱姘挎睖娌嗘悲娉氭磩娑囨弹锟斤拷锟�".split("");for(j=0;j!=D[250].length;++j)if(D[250][j].charCodeAt(0)!==65533){e[D[250][j]]=64e3+j;d[64e3+j]=D[250][j]}D[251]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷娑栨冬娣忔犯娣叉芳娓规箿娓ф讣婧挎緢婢垫康鐎呯�囩�ㄧ倕鐐剰鐒勭厹鐓嗙厙铷曠噥鐕剧姳鐘剧尋铷栫嵎鐜界弶鐝栫彛鐝掔悋鐝电惁鐞惄鐞憿鐠夌挓鐢佺暞鐨傜殰鐨炵殯鐨︼鐫嗗姱鐮$纭ょ『绀帮铷欙拷铷氱铷涚绔戠铷滅绠烇绲堢禍缍风稜绶栫箳缃囩尽铷炶寔鑽㈣嵖鑿囪彾钁堣挻钑撹暀钑钖帮铷¤爣瑁佃♁瑷疯┕瑾ц璜燂á璜惰瓝璀胯嘲璩磋磼璧讹ǎ杌忥à铷ラ仹閮烇é閯曢劎閲氶嚄閲為嚟閲嚖閲ラ垎閳愰垔閳洪墍閳奸墡閴欓墤閳归墽閵ч壏閴搁嫥閶楅嫏閶愶ě閶曢嫚閶撻尌閷¢嫽铷ㄩ尀閶块対閷傞嵃閸楅帳閺嗛彏閺搁惐閼呴憟闁掞铷╅殱闅湷闇婚潈闈嶉潖闈戦潟椤楅ˉ铷ǐ椁эì棣為楂欙拷锟斤拷".split("");for(j=0;j!=D[251].length;++j)if(D[251][j].charCodeAt(0)!==65533){e[D[251][j]]=64256+j;d[64256+j]=D[251][j]}D[252]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷楂滈榄查畯楫遍榘�榈伴但铷笝榛戯拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");for(j=0;j!=D[252].length;++j)if(D[252][j].charCodeAt(0)!==65533){e[D[252][j]]=64512+j;d[64512+j]=D[252][j]}return{enc:e,dec:d}}();cptable[936]=function(){var d=[],e={},D=[],j;D[0]="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~鈧拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷".split("");for(j=0;j!=D[0].length;++j)if(D[0][j].charCodeAt(0)!==65533){e[D[0][j]]=0+j;d[0+j]=D[0][j]}D[129]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷涓備竸涓呬竼涓忎笒涓椾笩涓犱浮涓d甫涓╀府涓副涓充傅涓蜂讣涔�涔佷箓涔勪箚涔婁箲涔曚箺涔氫箾涔梗涔や攻涔т龚涔公涔弓涔汞涔蹭勾涔典苟涔蜂垢涔逛购涔讳辜涔戒箍浜�浜佷簜浜冧簞浜呬簢浜婏拷浜愪簴浜椾簷浜滀簼浜炰海浜函浜颁罕浜翠憾浜蜂焊浜逛杭浜戒壕浠堜粚浠忎粣浠掍粴浠涗粶浠犱虎浠︿户浠╀画浠化浠变淮浠镐还浠轰患浠句紑浼備純浼勪紖浼嗕紘浼堜紜浼屼紥浼撲紨浼曚紪浼滀紳浼′迹浼ㄤ缉浼辑浼急浼充嫉浼蜂脊浼讳季浼夸絸浣佷絺浣勪絽浣囦綀浣変綂浣嬩綄浣掍綌浣栦健浣溅浣ㄤ姜浣江浣奖浣蹭降浣蜂礁浣逛胶浣戒線渚佷緜渚呬締渚囦緤渚屼編渚愪緬渚撲緯渚栦緲渚欎練渚滀緸渚熶尽渚拷".split("");for(j=0;j!=D[129].length;++j)if(D[129][j].charCodeAt(0)!==65533){e[D[129][j]]=33024+j;d[33024+j]=D[129][j]}D[130]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷渚や精渚景渚变静渚充敬渚朵痉渚镐竟渚轰净渚间窘渚句縺淇佷總淇嗕繃淇堜繅淇嬩繉淇嶄繏淇撲繑淇曚繓淇欎繘淇犱竣淇や骏淇т揩淇堪淇蹭看淇典慷淇蜂抗淇讳考淇戒靠鍊�鍊佸�傚�冨�勫�呭�嗗�囧�堝�夊�婏拷鍊嬪�庡�愬�戝�撳�曞�栧�楀�涘�濆�炲�犲�㈠�e�ゅ�у���板�卞�插�冲�村�靛�跺�峰�稿�瑰�诲�藉�垮亐鍋佸亗鍋勫亝鍋嗗亯鍋婂亱鍋嶅亹鍋戝亽鍋撳仈鍋栧仐鍋樺仚鍋涘仢鍋炲仧鍋犲仭鍋㈠仯鍋ゅ仸鍋у仺鍋╁仾鍋伃鍋伅鍋板伇鍋插伋鍋村伒鍋稿伖鍋哄伡鍋藉倎鍌傚們鍌勫倖鍌囧倝鍌婂倠鍌屽値鍌忓倫鍌戝倰鍌撳倲鍌曞倴鍌楀倶鍌欏倸鍌涘倻鍌濆倿鍌熷偁鍌″偄鍌ゅ偊鍌偒鍌偖鍌偘鍌卞偝鍌村偟鍌跺偡鍌稿偣鍌硷拷".split("");for(j=0;j!=D[130].length;++j)if(D[130][j].charCodeAt(0)!==65533){e[D[130][j]]=33280+j;d[33280+j]=D[130][j]}D[131]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍌藉偩鍌垮儉鍍佸儌鍍冨儎鍍呭儐鍍囧儓鍍夊儕鍍嬪儗鍍嶅儙鍍愬儜鍍掑儞鍍斿儠鍍楀儤鍍欏儧鍍滃儩鍍炲儫鍍犲儭鍍㈠儯鍍ゅ儱鍍ㄥ儵鍍儷鍍儼鍍卞儾鍍村兌鍍峰兏鍍瑰兒鍍煎兘鍍惧兛鍎�鍎佸剛鍎冨剟鍎呭剤锟藉剦鍎婂剬鍎嶅剮鍎忓剱鍎戝創鍎斿剷鍎栧剹鍎樺剻鍎氬剾鍎滃劃鍎炲劅鍎犲劉鍎e劋鍎ュ劍鍎у劏鍎╁劒鍎劕鍎劗鍎劙鍎卞劜鍎冲劥鍎靛劧鍎峰劯鍎瑰労鍎诲劶鍎藉劸鍏傚厙鍏婂厡鍏庡厪鍏愬厭鍏撳厳鍏樺厵鍏涘厺鍏炲厽鍏犲叀鍏e叅鍏﹀収鍏╁叒鍏叢鍏哄吘鍏垮唭鍐勫唵鍐囧唺鍐嬪啂鍐忓啇鍐戝啌鍐斿啒鍐氬啙鍐炲啛鍐″啠鍐﹀啩鍐ㄥ啯鍐啳鍐喆鍐稿喒鍐哄喚鍐垮噥鍑傚噧鍑呭噲鍑婂噸鍑庡噽鍑掑嚀鍑斿嚂鍑栧嚄锟�".split("");for(j=0;j!=D[131].length;++j)if(D[131][j].charCodeAt(0)!==65533){e[D[131][j]]=33536+j;d[33536+j]=D[131][j]}D[132]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍑樺嚈鍑氬嚋鍑炲嚐鍑㈠嚕鍑ュ嚘鍑у嚚鍑╁嚜鍑嚠鍑卞嚥鍑村嚪鍑惧垊鍒呭垑鍒嬪垖鍒忓垚鍒撳垟鍒曞垳鍒炲垷鍒″垻鍒e垾鍒﹀埀鍒埇鍒埍鍒插埓鍒靛埣鍒惧墑鍓呭墕鍓囧増鍓夊墜鍓庡墢鍓掑墦鍓曞墬鍓橈拷鍓欏墯鍓涘墲鍓熷墵鍓㈠墸鍓ゅ墻鍓ㄥ壂鍓壄鍓壈鍓卞壋鍓村壍鍓跺壏鍓稿壒鍓哄壔鍓煎壘鍔�鍔冨妱鍔呭妴鍔囧妷鍔婂妺鍔屽妽鍔庡姀鍔戝姃鍔斿姇鍔栧姉鍔樺姍鍔氬姕鍔ゅ姤鍔﹀姧鍔姱鍔板姶鍔靛姸鍔峰姼鍔瑰姾鍔诲娂鍔藉媭鍕佸媯鍕勫媴鍕嗗媹鍕婂媽鍕嶅嫀鍕忓嫅鍕撳嫈鍕曞嫍鍕欏嫐鍕涘嫓鍕濆嫗鍕犲嫛鍕㈠嫞鍕ュ嫤鍕у嫧鍕╁嫪鍕嫭鍕嫯鍕嫳鍕插嫵鍕村嫷鍕跺嫹鍕稿嫽鍕煎嫿鍖佸寕鍖冨寗鍖囧寜鍖婂寢鍖屽寧锟�".split("");for(j=0;j!=D[132].length;++j)if(D[132][j].charCodeAt(0)!==65533){e[D[132][j]]=33792+j;d[33792+j]=D[132][j]}D[133]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍖戝寬鍖撳寯鍖樺寷鍖滃尀鍖熷將鍖ゅ尌鍖у尐鍖╁尗鍖尛鍖尠鍖卞尣鍖冲尨鍖靛尪鍖峰尭鍖煎尳鍗�鍗傚崉鍗嗗崑鍗屽崓鍗愬崝鍗樺崣鍗涘崫鍗ュ崹鍗崿鍗嵅鍗跺嵐鍗诲嵓鍗藉嵕鍘�鍘佸巸鍘囧巿鍘婂帋鍘忥拷鍘愬帒鍘掑帗鍘斿帠鍘楀帣鍘涘帨鍘炲帬鍘″帳鍘у帾鍘幀鍘幆鍘板幈鍘插幊鍘村幍鍘峰幐鍘瑰幒鍘煎幗鍘惧弨鍙冨弰鍙呭弳鍙囧弾鍙忓彁鍙掑彄鍙曞彋鍙滃彎鍙炲彙鍙㈠彠鍙村徍鍙惧徔鍚�鍚傚悈鍚囧悑鍚斿悩鍚欏悮鍚滃悽鍚ゅ惀鍚惏鍚冲惗鍚峰惡鍚藉惪鍛佸憘鍛勫憛鍛囧憠鍛屽憤鍛庡憦鍛戝憵鍛濆憺鍛熷憼鍛″懀鍛ュ懅鍛╁應鍛懍鍛懏鍛懓鍛村懝鍛哄懢鍛垮拋鍜冨拝鍜囧拡鍜夊拪鍜嶅拺鍜撳挆鍜樺挏鍜炲挓鍜犲挕锟�".split("");for(j=0;j!=D[133].length;++j)if(D[133][j].charCodeAt(0)!==65533){e[D[133][j]]=34048+j;d[34048+j]=D[133][j]}D[134]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍜㈠挜鍜挵鍜插挼鍜跺挿鍜瑰捄鍜煎捑鍝冨搮鍝婂搵鍝栧摌鍝涘摖鍝″摙鍝e摛鍝摤鍝摪鍝卞摯鍝靛摱鍝峰摳鍝瑰摶鍝惧攢鍞傚攦鍞勫攨鍞堝攰鍞嬪攲鍞嶅攷鍞掑敁鍞曞敄鍞楀敇鍞欏敋鍞滃敐鍞炲敓鍞″敟鍞︼拷鍞ㄥ敥鍞敪鍞插敶鍞靛敹鍞稿敼鍞哄敾鍞藉晙鍟傚晠鍟囧晥鍟嬪晫鍟嶅晭鍟忓晳鍟掑晸鍟斿晽鍟樺暀鍟氬暃鍟濆暈鍟熷暊鍟㈠暎鍟ㄥ暕鍟暞鍟板暠鍟插暢鍟村暪鍟哄暯鍟垮枀鍠嗗枌鍠嶅枎鍠愬枓鍠撳枙鍠栧枟鍠氬枦鍠炲枲鍠″枹鍠e枻鍠ュ枽鍠ㄥ柀鍠柅鍠柇鍠柉鍠板柌鍠村柖鍠稿柡鍠煎柨鍡�鍡佸梻鍡冨梿鍡囧棃鍡婂棆鍡庡棌鍡愬棔鍡楀棙鍡欏棜鍡涘棡鍡犲棦鍡у棭鍡棶鍡板棻鍡村椂鍡稿椆鍡哄椈鍡煎椏鍢傚槂鍢勫槄锟�".split("");for(j=0;j!=D[134].length;++j)if(D[134][j].charCodeAt(0)!==65533){e[D[134][j]]=34304+j;d[34304+j]=D[134][j]}D[135]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍢嗗槆鍢婂構鍢嶅槓鍢戝槖鍢撳様鍢曞槚鍢楀槞鍢氬槣鍢濆槧鍢″槩鍢ュ槮鍢ㄥ槱鍢槴鍢槸鍢板槼鍢靛樂鍢稿樅鍢煎樈鍢惧檧鍣佸檪鍣冨檮鍣呭檰鍣囧檲鍣夊檴鍣嬪檹鍣愬檻鍣掑檽鍣曞櫀鍣氬櫅鍣濆櫈鍣熷櫊鍣★拷鍣e櫏鍣﹀櫑鍣櫘鍣櫚鍣插櫝鍣村櫟鍣峰櫢鍣瑰櫤鍣藉櫨鍣垮殌鍤佸殏鍤冨殑鍤囧殘鍤夊殜鍤嬪殞鍤嶅殣鍤戝殥鍤斿殨鍤栧殫鍤樺殭鍤氬殯鍤滃殱鍤炲殶鍤犲殹鍤㈠殼鍤ュ殾鍤у毃鍤╁毆鍤毈鍤毊鍤板毐鍤插毘鍤村毜鍤跺毟鍤瑰毢鍤诲毥鍤惧毧鍥�鍥佸泜鍥冨泟鍥呭泦鍥囧泩鍥夊泲鍥屽泹鍥庡洀鍥愬洃鍥掑洆鍥曞洊鍥樺洐鍥滃洠鍥ュ洣鍥у洦鍥╁洩鍥洰鍥洸鍥冲浂鍥峰浉鍥诲浖鍦�鍦佸渹鍦呭渿鍦嬪湆鍦嶅湈鍦忓湊鍦戯拷".split("");for(j=0;j!=D[135].length;++j)if(D[135][j].charCodeAt(0)!==65533){e[D[135][j]]=34560+j;d[34560+j]=D[135][j]}D[136]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍦掑湏鍦斿湑鍦栧湕鍦樺湙鍦氬湜鍦濆湠鍦犲湣鍦㈠湦鍦ュ湨鍦у湯鍦卞湶鍦村湹鍦跺湻鍦稿溂鍦藉溈鍧佸潈鍧勫潊鍧嗗潏鍧夊潒鍧掑潛鍧斿潟鍧栧潣鍧欏潰鍧e潵鍧у潿鍧澃鍧卞澆鍧村澋鍧稿澒鍧哄澖鍧惧澘鍨�锟藉瀬鍨囧瀳鍨夊瀶鍨嶅瀻鍨忓瀽鍨戝灁鍨曞灃鍨楀灅鍨欏灇鍨滃灊鍨炲灍鍨ュ灗鍨灛鍨灠鍨卞灣鍨靛灦鍨峰灩鍨哄灮鍨煎灲鍨惧灴鍩�鍩佸焺鍩呭焼鍩囧焾鍩夊煀鍩屽煃鍩愬煈鍩撳煐鍩楀煕鍩滃煘鍩″煝鍩e煡鍩﹀煣鍩ㄥ煩鍩煫鍩煯鍩板煴鍩插煶鍩靛煻鍩峰熁鍩煎熅鍩垮爜鍫冨爠鍫呭爤鍫夊爦鍫屽爭鍫忓爯鍫掑爴鍫斿爾鍫楀牁鍫氬牄鍫滃牆鍫熷牏鍫e牓鍫﹀牕鍫ㄥ牘鍫牞鍫牣鍫牨鍫插牫鍫村牰鍫峰牳鍫瑰牶鍫诲牸鍫斤拷".split("");for(j=0;j!=D[136].length;++j)if(D[136][j].charCodeAt(0)!==65533){e[D[136][j]]=34816+j;d[34816+j]=D[136][j]}D[137]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍫惧牽濉�濉佸濉冨濉嗗濉堝濉婂濉庡濉愬濉撳濉栧濉欏濉涘濉濆濉犲 濉㈠。濉ゅˇ濉у〃濉╁—濉‘濉“濉卞〔濉冲〈濉靛《濉峰「濉瑰『濉诲〖濉藉】澧傚澧嗗澧堝澧嬪锟藉澧庡澧愬澧斿澧栧澧樺澧滃澧犲ⅰ澧㈠ⅲ澧ゅⅴ澧﹀ⅶ澧澧澧澧板⒈澧插⒊澧村⒌澧跺⒎澧稿⒐澧哄⒒澧藉⒕澧垮澹傚澹勫澹囧澹夊澹嬪澹嶅澹忓澹掑澹斿澹楀澹欏澹涘澹濆澹熷澹″"澹e%澹﹀'澹ㄥ)澹-澹1澹插4澹靛7澹稿:澹诲<澹藉>澹垮澶佸澶呭澶堝澶婂澶屽澶愬澶掑澶楀澶涘澶炲澶″あ澶eう澶ㄥが澶板げ澶冲さ澶跺せ锟�".split("");for(j=0;j!=D[137].length;++j)if(D[137][j].charCodeAt(0)!==65533){e[D[137][j]]=35072+j;d[35072+j]=D[137][j]}D[138]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷澶藉ぞ澶垮濂冨濂嗗濂屽濂愬濂撳濂涘濂濆濂熷ァ濂eイ濂﹀ェ濂ㄥォ濂カ濂キ濂ク濂板ケ濂插サ濂峰ズ濂诲ゼ濂惧タ濡�濡呭濡嬪濡庡濡愬濡斿濡樺濡涘濡濆濡犲Α濡㈠Ζ锟藉Η濡Ν濡板Ρ濡冲Υ濡靛Χ濡峰Ω濡哄濡藉濮�濮佸濮冨濮呭濮堝濮屽濮庡濮曞濮欏濮炲濮犲А濮㈠Г濮﹀Ё濮╁И濮Л濮Н濮板П濮插С濮村У濮跺Х濮稿Ш濮煎Ы濮惧█濞傚▕濞嬪◢濞庡◤濞愬♁濞斿〞濞栧濞欏濞涘濞炲ā濞㈠à濞﹀ě濞ㄥí濞ì濞ó濞ò濞冲ǖ濞峰ǜ濞瑰ê濞诲ń濞惧濠佸﹤濠冨﹦濠呭﹪濠堝濠屽濠庡濠愬濠掑濠斿〇濠楀濠欏濠滃濠炲濠狅拷".split("");for(j=0;j!=D[138].length;++j)if(D[138][j].charCodeAt(0)!==65533){e[D[138][j]]=35328+j;d[35328+j]=D[138][j]}D[139]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷濠″濠ゅ━濠﹀┄濠╁┇濠┉濠┋濠板┍濠插┏濠稿┕濠诲┘濠藉┚濯�濯佸獋濯冨獎濯呭獑濯囧獔濯夊獖濯嬪獙濯嶅獛濯忓獝濯戝獡濯斿獣濯栧獥濯樺獧濯滃獫濯炲獰濯犲濯㈠濯ゅ濯﹀濯ㄥ濯锟藉濯濯板濯村濯峰濯哄濯煎濯垮珋瀚冨珓瀚呭珕瀚囧珗瀚婂珛瀚嶅珟瀚忓珢瀚戝珦瀚曞珬瀚欏珰瀚涘珴瀚炲珶瀚㈠瀚ュ瀚ㄥ瀚瀚瀚板瀚冲瀚靛瀚峰瀚瑰瀚诲瀚藉瀚垮瑎瀣佸瑐瀣冨瑒瀣呭瑔瀣囧瑘瀣婂瑡瀣屽瑣瀣庡瑥瀣愬瑧瀣掑瑩瀣斿瑫瀣樺瑱瀣氬瑳瀣滃瑵瀣炲瑹瀣犲瀣㈠瀣ゅ瀣﹀瀣ㄥ瀣瀣瀣瀣板瀣冲瀣跺瀣瑰瀣诲瀣藉瀣垮瓉瀛傚瓋瀛勫瓍瀛嗗瓏锟�".split("");for(j=0;j!=D[139].length;++j)if(D[139][j].charCodeAt(0)!==65533){e[D[139][j]]=35584+j;d[35584+j]=D[139][j]}D[140]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷瀛堝瓑瀛婂瓔瀛屽瓖瀛庡瓘瀛掑瓥瀛炲瓲瀛″瀛ㄥ瀛瀛瀛村瀛峰瀛瑰瀛煎瀛垮畟瀹嗗畩瀹嶅畮瀹愬畱瀹掑當瀹栧疅瀹у瀹╁瀹瀹瀹插瀹哄瀹煎瘈瀵佸瘍瀵堝瘔瀵婂瘚瀵嶅瘞瀵忥拷瀵戝瘮瀵曞瘱瀵楀瘶瀵欏瘹瀵涘瘻瀵犲瀵e瀵у瀵瀵瀵瀵插瀵村瀵跺瀵藉灏�灏傚皟灏呭皣灏堝皨灏屽皪灏庡皭灏掑皳灏楀皺灏涘盀灏熷盃灏″埃灏﹀皑灏╁蔼灏碍灏隘灏板安灏冲暗灏跺胺灞冨眲灞嗗眹灞屽睄灞掑睋灞斿睎灞楀睒灞氬睕灞滃睗灞熷雹灞ゅ抱灞ㄥ暴灞鲍灞杯灞板辈灞冲贝灞靛倍灞峰备灞诲奔灞藉本宀�宀冨矂宀呭矄宀囧矇宀婂矉宀庡矎宀掑矒宀曞矟宀炲矡宀犲病宀ゅ播宀﹀钵宀拷".split("");for(j=0;j!=D[140].length;++j)if(D[140][j].charCodeAt(0)!==65533){e[D[140][j]]=35840+j;d[35840+j]=D[140][j]}D[141]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷宀伯宀舶宀插泊宀跺补宀哄不宀煎簿宄�宄傚硟宄呭硢宄囧硤宄夊硦宄屽硩宄庡硰宄愬硲宄撳硵宄曞硸宄楀硺宄氬硾宄滃碀宄炲碂宄犲尝宄e厂宄╁倡宄钞宄潮宄插吵宄村车宄跺撤宄稿彻宄哄臣宄藉尘宄垮磤锟藉磥宕勫磪宕堝磯宕婂磱宕屽磵宕忓磹宕戝磼宕撳磿宕楀礃宕欏礆宕滃礉宕熷礌宕″储宕e触宕ㄥ椽宕船宕窗宕卞床宕冲吹宕跺捶宕稿垂宕哄椿宕煎纯宓�宓佸祩宓冨祫宓呭祮宓堝祲宓嶅祹宓忓祼宓戝祾宓撳禂宓曞禆宓楀禉宓氬禍宓炲禑宓犲怠宓㈠担宓ゅ单宓﹀掸宓ㄥ氮宓诞宓板当宓插党宓靛刀宓峰蹈宓瑰岛宓诲导宓藉稻宓垮秬宥佸秲宥勫秴宥嗗秶宥堝秹宥婂秼宥屽秿宥庡稄宥愬稇宥掑稉宥斿稌宥栧稐宥樺稓宥涘稖宥炲稛宥狅拷".split("");for(j=0;j!=D[141].length;++j)if(D[141][j].charCodeAt(0)!==65533){e[D[141][j]]=36096+j;d[36096+j]=D[141][j]}D[142]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷宥″盯宥e钉宥ュ鼎宥у定宥╁丢宥冬宥懂宥栋宥卞恫宥冲洞宥靛抖宥稿豆宥哄痘宥煎督宥惧犊宸�宸佸穫宸冨穭宸嗗穱宸堝穳宸婂穻宸屽穾宸忓窅宸戝窉宸撳窋宸曞窎宸楀窐宸欏窔宸滃窡宸犲罚宸ゅ藩宸翻锟藉钒宸靛范宸稿饭宸哄坊宸煎房甯�甯勫竾甯夊笂甯嬪笉甯庡笒甯撳笚甯炲笩甯犲浮甯㈠福甯ゅ弗甯ㄥ俯甯斧甯腐甯板覆甯冲复甯靛付甯瑰负甯惧缚骞�骞佸箖骞嗗箛骞堝箟骞婂箣骞嶅箮骞忓箰骞戝箳骞撳箹骞楀箻骞欏箽骞滃節骞熷範骞e工骞ュ功骞у龚骞╁躬骞宫骞巩骞拱骞卞沟骞峰构骞惧簛搴傚簝搴呭簣搴夊簩搴嶅簬搴掑簶搴涘簼搴″孩搴e氦搴ㄥ憨搴韩搴寒搴喊搴卞翰搴村汉搴诲杭搴藉嚎寤�寤佸粋寤冨粍寤咃拷".split("");for(j=0;j!=D[142].length;++j)if(D[142][j].charCodeAt(0)!==65533){e[D[142][j]]=36352+j;d[36352+j]=D[142][j]}D[143]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷寤嗗粐寤堝粙寤屽粛寤庡粡寤愬粩寤曞粭寤樺粰寤氬粶寤濆粸寤熷粻寤″虎寤e护寤ュ沪寤у哗寤滑寤划寤话寤卞徊寤冲坏寤稿还寤诲患寤藉紖寮嗗紘寮夊紝寮嶅紟寮愬紥寮斿紪寮欏細寮滃紳寮炲肌寮㈠迹寮わ拷寮ㄥ极寮籍寮板疾寮冲即寮靛级寮峰几寮诲冀寮惧伎褰佸絺褰冨絼褰呭絾褰囧綀褰夊綂褰嬪綄褰嶅綆褰忓綉褰斿綑褰氬經褰滃綖褰熷綘褰e渐褰у建褰疆褰讲褰村降褰跺礁褰哄浇褰惧娇寰冨締寰嶅編寰忓緫寰撳緮寰栧練寰涘緷寰炲緹寰犲劲寰e兢寰ュ睛寰у京寰粳寰景寰卞静寰冲敬寰跺靖寰瑰竞寰诲揪寰垮縺蹇佸總蹇囧繄蹇婂繈蹇庡繐蹇斿繒蹇氬繘蹇滃繛蹇熷竣蹇e骏蹇﹀卡蹇╁楷蹇堪蹇插砍蹇村慷蹇峰抗蹇哄考鎬囷拷".split("");for(j=0;j!=D[143].length;++j)if(D[143][j].charCodeAt(0)!==65533){e[D[143][j]]=36608+j;d[36608+j]=D[143][j]}D[144]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鎬堟�夋�嬫�屾�愭�戞�撴�楁�樻�氭�炴�熸�㈡�f�ゆ����版�辨�叉�虫�存�舵�锋�告�规�烘�芥�炬亐鎭勬亝鎭嗘亣鎭堟亯鎭婃亴鎭庢亸鎭戞亾鎭旀仏鎭楁仒鎭涙仠鎭炴仧鎭犳仭鎭ユ仸鎭伇鎭叉伌鎭垫伔鎭炬個锟芥倎鎮傛倕鎮嗘倗鎮堟倞鎮嬫値鎮忔倫鎮戞倱鎮曟倵鎮樻倷鎮滄倿鎮℃偄鎮ゆ偉鎮ф偐鎮偖鎮版偝鎮垫偠鎮锋偣鎮烘偨鎮炬偪鎯�鎯佹儌鎯冩儎鎯囨儓鎯夋儗鎯嶆儙鎯忔儛鎯掓儞鎯旀儢鎯楁儥鎯涙優鎯℃儮鎯f儰鎯ユ儶鎯辨儾鎯垫兎鎯告兓鎯兼兘鎯炬兛鎰傛剝鎰勬剠鎰囨剨鎰嬫剬鎰愭剳鎰掓創鎰旀剸鎰楁剺鎰欐剾鎰滄劃鎰炴劇鎰㈡劌鎰ㄦ劑鎰劕鎰劗鎰劙鎰辨劜鎰虫劥鎰垫劧鎰锋劯鎰规労鎰绘劶鎰芥劸鎱�鎱佹厒鎱冩厔鎱呮厗锟�".split("");for(j=0;j!=D[144].length;++j)if(D[144][j].charCodeAt(0)!==65533){e[D[144][j]]=36864+j;d[36864+j]=D[144][j]}D[145]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鎱囨厜鎱嬫厤鎱忔厫鎱掓厯鎱旀厲鎱楁厴鎱欐厷鎱涙厹鎱炴厽鎱犳叀鎱f叅鎱ユ叇鎱╂叒鎱叕鎱叜鎱叡鎱叉叧鎱存叾鎱告吂鎱烘吇鎱兼吔鎱炬吙鎲�鎲佹唫鎲冩唲鎲呮唵鎲囨唸鎲夋唺鎲屾啀鎲忔啇鎲戞啋鎲撴啎锟芥問鎲楁啒鎲欐啔鎲涙啘鎲炴啛鎲犳啞鎲㈡啠鎲ゆ啣鎲︽啰鎲啳鎲啹鎲版啽鎲叉喅鎲存喌鎲舵喐鎲规喓鎲绘喖鎲芥喛鎳�鎳佹噧鎳勬噮鎳嗘噰鎳夋噷鎳嶆噹鎳忔噽鎳撴嚂鎳栨嚄鎳樻嚈鎳氭嚊鎳滄嚌鎳炴嚐鎳犳嚒鎳㈡嚕鎳ゆ嚗鎳ф嚚鎳╂嚜鎳嚞鎳嚠鎳嚢鎳辨嚥鎳虫嚧鎳舵嚪鎳告嚬鎳烘嚮鎳兼嚱鎳炬垁鎴佹垈鎴冩垊鎴呮垏鎴夋垞鎴旀垯鎴滄垵鎴炴垹鎴f垿鎴ф埁鎴╂埆鎴埊鎴版埍鎴叉埖鎴舵埜鎴规埡鎴绘埣鎵傛墑鎵呮墕鎵婏拷".split("");for(j=0;j!=D[145].length;++j)if(D[145][j].charCodeAt(0)!==65533){e[D[145][j]]=37120+j;d[37120+j]=D[145][j]}D[146]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鎵忔墣鎵曟墫鎵楁墮鎵氭墱鎵濇墳鎵熸墵鎵℃墷鎵ゆ墺鎵ㄦ壉鎵叉壌鎵垫壏鎵告壓鎵绘壗鎶佹妭鎶冩妳鎶嗘妵鎶堟妺鎶屾妽鎶庢姀鎶愭姅鎶欐姕鎶濇姙鎶f姦鎶ф姪鎶姯鎶姱鎶版姴鎶虫姶鎶舵姺鎶告姾鎶炬媭鎷侊拷鎷冩媼鎷忔嫅鎷曟嫕鎷炴嫚鎷℃嫟鎷嫬鎷版嫴鎷垫嫺鎷规嫼鎷绘寑鎸冩寗鎸呮寙鎸婃寢鎸屾實鎸忔寪鎸掓寭鎸旀寱鎸楁寴鎸欐寽鎸︽導鎸╂尙鎸尞鎸版尡鎸虫尨鎸垫尪鎸锋尭鎸绘尲鎸炬尶鎹�鎹佹崉鎹囨崍鎹婃崙鎹掓崜鎹旀崠鎹楁崢鎹欐崥鎹涙崪鎹濇崰鎹ゆ崶鎹︽崹鎹崼鎹嵂鎹版嵅鎹虫嵈鎹垫嵏鎹规嵓鎹芥嵕鎹挎巵鎺冩巹鎺呮巻鎺嬫帊鎺戞帗鎺旀帟鎺楁帣鎺氭帥鎺滄帩鎺炴師鎺℃帳鎺︽帿鎺幈鎺叉幍鎺舵幑鎺绘幗鎺挎弨锟�".split("");for(j=0;j!=D[146].length;++j)if(D[146][j].charCodeAt(0)!==65533){e[D[146][j]]=37376+j;d[37376+j]=D[146][j]}D[147]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鎻佹弬鎻冩弲鎻囨張鎻婃弸鎻屾彂鎻撴彅鎻曟彈鎻樻彊鎻氭彌鎻滄彎鎻熸彚鎻ゆ彞鎻︽彠鎻ㄦ彨鎻彯鎻彴鎻辨彸鎻垫彿鎻规徍鎻绘徏鎻炬悆鎼勬悊鎼囨悎鎼夋悐鎼嶆悗鎼戞悞鎼曟悥鎼楁悩鎼欐悮鎼濇悷鎼㈡悾鎼わ拷鎼ユ惂鎼ㄦ惄鎼惍鎼惏鎼辨惒鎼虫惖鎼舵惙鎼告惞鎼绘惣鎼炬憖鎽傛憙鎽夋憢鎽屾憤鎽庢憦鎽愭憫鎽撴憰鎽栨憲鎽欐憵鎽涙憸鎽濇憻鎽犳憽鎽㈡懀鎽ゆ懃鎽︽懆鎽懌鎽懏鎽懓鎽辨懖鎽虫懘鎽垫懚鎽锋懟鎽兼懡鎽炬懣鎾�鎾佹拑鎾嗘拡鎾夋拪鎾嬫拰鎾嶆拵鎾忔拹鎾撴挃鎾楁挊鎾氭挍鎾滄挐鎾熸挔鎾℃挗鎾f挜鎾︽挧鎾ㄦ挭鎾挴鎾辨挷鎾虫挻鎾舵捁鎾绘捊鎾炬捒鎿佹搩鎿勬搯鎿囨搱鎿夋搳鎿嬫搶鎿忔搼鎿撴摂鎿曟摉鎿欐摎锟�".split("");for(j=0;j!=D[147].length;++j)if(D[147][j].charCodeAt(0)!==65533){e[D[147][j]]=37632+j;d[37632+j]=D[147][j]}D[148]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鎿涙摐鎿濇摕鎿犳摗鎿f摜鎿ф摠鎿╂摢鎿摤鎿摦鎿摪鎿辨摬鎿虫摯鎿垫摱鎿锋摳鎿规摵鎿绘摷鎿芥摼鎿挎攣鏀傛攦鏀勬攨鏀嗘攪鏀堟攰鏀嬫攲鏀嶆攷鏀忔攼鏀戞敁鏀旀敃鏀栨敆鏀欐敋鏀涙敎鏀濇敒鏀熸敔鏀★拷鏀㈡敚鏀ゆ敠鏀ф敤鏀╂敧鏀敪鏀版敱鏀叉敵鏀锋敽鏀兼斀鏁�鏁佹晜鏁冩晞鏁嗘晣鏁婃晪鏁嶆晭鏁愭晵鏁撴晹鏁楁晿鏁氭暅鏁熸暊鏁℃暏鏁ユ暓鏁ㄦ暕鏁暛鏁暞鏁辨暢鏁垫暥鏁告暪鏁烘暬鏁兼暯鏁炬暱鏂�鏂佹杺鏂冩杽鏂呮枂鏂堟枆鏂婃枍鏂庢枏鏂掓枖鏂曟枛鏂樻枤鏂濇枮鏂犳枹鏂f枽鏂ㄦ柂鏂柈鏂辨柌鏂虫柎鏂垫柖鏂锋柛鏂烘柣鏂炬柨鏃�鏃傛棁鏃堟棄鏃婃棈鏃愭棏鏃撴棓鏃曟棙鏃欐棜鏃涙棞鏃濇棡鏃熸棥鏃f棨鏃棲锟�".split("");for(j=0;j!=D[148].length;++j)if(D[148][j].charCodeAt(0)!==65533){e[D[148][j]]=37888+j;d[37888+j]=D[148][j]}D[149]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鏃叉棾鏃存椀鏃告椆鏃绘椉鏃芥椌鏃挎榿鏄勬槄鏄囨槇鏄夋構鏄嶆槓鏄戞槖鏄栨槜鏄樻槡鏄涙槣鏄炴槨鏄㈡槪鏄ゆ槮鏄╂槳鏄槵鏄槹鏄叉槼鏄锋樃鏄规樅鏄绘樈鏄挎檧鏅傛檮鏅呮檰鏅囨檲鏅夋檴鏅嶆檸鏅愭檻鏅橈拷鏅欐櫅鏅滄櫇鏅炴櫊鏅㈡櫍鏅ユ櫑鏅╂櫔鏅櫖鏅櫛鏅叉櫝鏅垫櫢鏅规櫥鏅兼櫧鏅挎殌鏆佹殐鏆呮殕鏆堟殙鏆婃殝鏆嶆殠鏆忔殣鏆掓殦鏆旀殨鏆樻殭鏆氭殯鏆滄殲鏆熸殸鏆℃殺鏆f殼鏆ユ殾鏆╂毆鏆毈鏆毌鏆版毐鏆叉毘鏆垫毝鏆锋毟鏆烘毣鏆兼毥鏆挎泙鏇佹泜鏇冩泟鏇呮泦鏇囨泩鏇夋泭鏇嬫泴鏇嶆泿鏇忔洂鏇戞洅鏇撴洈鏇曟洊鏇楁洏鏇氭洖鏇熸洜鏇℃洟鏇f洡鏇ユ洤鏇ㄦ洩鏇洭鏇洰鏇洷鏇垫浂鏇告浐鏇绘浗鏈佹渹鏈冿拷".split("");for(j=0;j!=D[149].length;++j)if(D[149][j].charCodeAt(0)!==65533){e[D[149][j]]=38144+j;d[38144+j]=D[149][j]}D[150]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鏈勬渽鏈嗘渿鏈屾湈鏈忔湋鏈掓湏鏈栨湗鏈欐湚鏈滄湠鏈犳湣鏈㈡湥鏈ゆ湧鏈ф湬鏈湴鏈叉湷鏈舵湻鏈告湽鏈绘溂鏈炬溈鏉佹潉鏉呮潎鏉婃潒鏉嶆潚鏉旀潟鏉楁潣鏉欐潥鏉涙潩鏉㈡潱鏉ゆ潶鏉ф潾鏉澁鏉辨澊鏉讹拷鏉告澒鏉烘澔鏉芥瀫鏋傛瀮鏋呮瀱鏋堟瀶鏋屾瀺鏋庢瀼鏋戞瀿鏋撴灁鏋栨灆鏋涙灍鏋犳灐鏋ゆ灕鏋╂灛鏋灡鏋叉灤鏋规灪鏋绘灱鏋芥灳鏋挎焵鏌傛焻鏌嗘焽鏌堟焿鏌婃煁鏌屾煃鏌庢煏鏌栨煑鏌涙煙鏌℃煟鏌ゆ煢鏌ф煥鏌煫鏌煯鏌叉煹鏌舵煼鏌告煿鏌烘熁鏌兼熅鏍佹爞鏍冩爠鏍嗘爫鏍愭爳鏍旀爼鏍樻牂鏍氭牄鏍滄牉鏍熸牋鏍㈡牐鏍ゆ牓鏍︽牕鏍ㄦ牜鏍牠鏍牤鏍版牨鏍存牭鏍舵牶鏍绘牽妗囨妗嶆妗掓妗楁妗欐妗涳拷".split("");for(j=0;j!=D[150].length;++j)if(D[150][j].charCodeAt(0)!==65533){e[D[150][j]]=38400+j;d[38400+j]=D[150][j]}D[151]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷妗滄妗炴妗‖妗‘妗“妗辨〔妗虫〉妗告」妗烘』妗兼〗妗炬】姊�姊傛姊囨姊夋姊嬫姊嶆姊愭姊掓姊曟姊樻姊氭姊滄姊炴姊犳ⅰ姊fⅳ姊ユⅸ姊姊姊辨⒉姊存⒍姊锋⒏锟芥⒐姊烘⒒姊兼⒔姊炬⒖妫佹妫勬妫嗘妫堟妫屾妫忔妫戞妫旀妫楁妫涙妫濇妫熸!妫㈡¥妫ユ&妫ф(妫╂*妫,妫/妫叉3妫存6妫锋8妫绘=妫炬?妞�妞傛妞勬妞囨妞夋妞屾妞戞妞旀妞栨妞樻妞氭妞滄妞炴ぁ妞㈡ぃ妞ユう妞фえ妞╂お妞が妞く妞辨げ妞虫さ妞舵し妞告ず妞绘ぜ妞炬妤佹妤勬妤嗘妤堟妤婃妤屾妤庢妤愭妤掓妤曟妤樻妤涙妤燂拷".split("");for(j=0;j!=D[151].length;++j)if(D[151][j].charCodeAt(0)!==65533){e[D[151][j]]=38656+j;d[38656+j]=D[151][j]}D[152]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷妤℃ア妤ゆゥ妤фエ妤╂オ妤キ妤グ妤叉コ妤存サ妤舵ズ妤绘ソ妤炬タ姒佹姒呮姒嬫姒庢姒愭姒掓姒栨姒欐姒濇姒熸姒℃Β姒fΔ姒ユΖ姒╂Κ姒Ξ姒Π姒叉Τ姒垫Χ姒告姒烘姒斤拷姒炬妲�妲傛妲勬妲嗘妲堟妲嬫妲忔妲掓妲曟妲楁妲欐妲滄妲炴А妲㈡В妲ゆД妲︽Ё妲ㄦЗ妲Й妲М妲О妲辨С妲存У妲舵Х妲告Ч妲烘Щ妲兼Ь妯�妯佹▊妯冩▌妯呮▎妯囨▓妯夋▼妯屾◢妯庢◤妯愭☉妯掓〒妯旀〞妯栨妯氭妯滄妯炴妯㈡ǎ妯ゆē妯︽ě妯╂ǐ妯ō妯ò妯叉ǔ妯存ǘ妯锋ǜ妯规ê妯绘妯挎﹢姗佹﹤姗冩﹨姗嗘﹫姗夋姗嬫姗嶆姗忔姗掓姗旀姗栨姗氾拷".split("");for(j=0;j!=D[152].length;++j)if(D[152][j].charCodeAt(0)!==65533){e[D[152][j]]=38912+j;d[38912+j]=D[152][j]}D[153]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷姗滄姗炴姗犳姗f─姗︽┃姗ㄦ┅姗┇姗┉姗┋姗版┎姗虫┐姗垫┒姗锋└姗烘┗姗芥┚姗挎獊妾傛獌妾呮獑妾囨獔妾夋獖妾嬫獙妾嶆獜妾掓獡妾旀獣妾栨獦妾欐獨妾涙獪妾濇獮妾熸妾㈡妾ゆ妾︼拷妾ф妾妾妾版妾叉妾存妾舵妾告妾烘妾兼妾炬娅�娅佹珎娅冩珓娅呮珕娅囨珗娅夋珚娅嬫珜娅嶆珟娅忔珢娅戞珤娅撴珨娅曟珫娅楁珮娅欐珰娅涙珳娅濇珵娅熸珷娅℃娅f娅ユ娅ф娅╂娅娅娅娅辨娅虫娅垫娅锋娅规娅绘娅芥娅挎瑎娆佹瑐娆冩瑒娆呮瑔娆囨瑘娆夋瑠娆嬫瑢娆嶆瑤娆忔瑦娆戞瑨娆撴瑪娆曟瑬娆楁瑯娆欐瑲娆涙瑴娆濇瑸娆熸娆︽娆╂娆娆锟�".split("");for(j=0;j!=D[153].length;++j)if(D[153][j].charCodeAt(0)!==65533){e[D[153][j]]=39168+j;d[39168+j]=D[153][j]}D[154]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷娆娆辨娆存娆舵娆绘娆芥姝�姝佹瓊姝勬瓍姝堟瓓姝嬫瓖姝庢瓘姝愭瓚姝掓瓝姝旀瓡姝栨瓧姝樻瓪姝涙瓬姝濇瓰姝熸瓲姝℃姝╂姝姝姝版姝叉姝存姝舵姝告姝芥姝挎畝娈呮畧锟芥畬娈庢畯娈愭畱娈旀畷娈楁畼娈欐疁娈濇疄娈熸疇娈㈡娈ゆ娈︽娈ㄦ娈娈娈娈辨娈舵娈规娈绘娈芥姣�姣冩瘎姣嗘瘒姣堟瘔姣婃瘜姣庢瘣姣戞瘶姣氭瘻姣濇癁姣熸癄姣㈡姣ゆ姣︽姣ㄦ姣姣姣辨姣存姣锋姣烘姣兼姣挎皜姘佹皞姘冩皠姘堟皦姘婃皨姘屾皫姘掓皸姘滄皾姘炴盃姘f哎姘艾姘氨姘虫岸姘锋肮姘烘盎姘兼熬姘挎眱姹勬眳姹堟眿姹屾睄姹庢睆姹戞睊姹撴睎姹橈拷".split("");for(j=0;j!=D[154].length;++j)if(D[154][j].charCodeAt(0)!==65533){e[D[154][j]]=39424+j;d[39424+j]=D[154][j]}D[155]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷姹欐睔姹㈡保姹ユ宝姹ф鲍姹杯姹悲姹辨背姹垫狈姹告焙姹绘奔姹挎瞼娌勬矅娌婃矉娌嶆矌娌戞矑娌曟矕娌楁矘娌氭矞娌濇矠娌犳并娌ㄦ铂娌舶娌存驳娌舵卜娌烘硛娉佹硞娉冩硢娉囨硤娉嬫硩娉庢硰娉戞硳娉橈拷娉欐硽娉滄碀娉熸长娉︽厂娉╂超娉巢娉存彻娉挎磤娲傛磧娲呮磫娲堟磯娲婃磵娲忔磹娲戞磽娲旀磿娲栨礃娲滄礉娲熸礌娲℃储娲f搐娲︽川娲╂船娲疮娲版创娲舵捶娲告春娲挎祤娴傛祫娴夋祵娴愭禃娴栨禇娴樻禌娴濇禑娴℃耽娴ゆ单娴ф胆娴惮娴蛋娴辨挡娴虫档娴舵倒娴烘祷娴芥稻娴挎秬娑佹秲娑勬秵娑囨秺娑嬫秿娑忔稅娑掓稏娑楁稑娑欐稓娑滄盯娑ユ冬娑栋娑辨冻娑存抖娑锋豆娑烘痘娑兼督娑炬穪娣傛穬娣堟穳娣婏拷".split("");for(j=0;j!=D[155].length;++j)if(D[155][j].charCodeAt(0)!==65533){e[D[155][j]]=39680+j;d[39680+j]=D[155][j]}D[156]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷娣嶆穾娣忔窅娣掓窊娣旀窌娣楁窔娣涙窚娣熸发娣f伐娣ф法娣╂藩娣矾娣版凡娣存返娣舵犯娣烘方娣炬房娓�娓佹競娓冩竸娓嗘竾娓堟笁娓嬫笍娓掓笓娓曟笜娓欐笡娓滄笧娓熸涪娓︽抚娓ㄦ釜娓府娓版副娓虫傅锟芥付娓锋腹娓绘讣娓芥妇娓挎箑婀佹箓婀呮箚婀囨箞婀夋箠婀嬫箤婀忔箰婀戞箳婀曟箺婀欐箽婀滄節婀炴範婀℃耿婀f工婀ユ功婀ф龚婀╂躬婀弓婀拱婀辨共婀虫勾婀垫苟婀锋垢婀规购婀绘辜婀芥簚婧佹簜婧勬簢婧堟簥婧嬫簩婧嶆簬婧戞簰婧撴簲婧曟簴婧楁簷婧氭簺婧濇簽婧犳骸婧f氦婧︽酣婧╂韩婧涵婧喊婧虫旱婧告汗婧兼壕婧挎粈婊冩粍婊呮粏婊堟粔婊婃粚婊嶆粠婊愭粧婊栨粯婊欐粵婊滄粷婊f户婊猾婊画婊化锟�".split("");for(j=0;j!=D[156].length;++j)if(D[156][j].charCodeAt(0)!==65533){e[D[156][j]]=39936+j;d[39936+j]=D[156][j]}D[157]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷婊版槐婊叉怀婊垫欢婊锋桓婊烘换婊兼唤婊炬豢婕�婕佹純婕勬紖婕囨紙婕婃紜婕屾紞婕庢紣婕戞紥婕栨紬婕樻紮婕氭紱婕滄紳婕炴紵婕℃饥婕f讥婕︽姬婕ㄦ棘婕及婕叉即婕垫挤婕告脊婕烘蓟婕兼冀婕挎絸娼佹絺锟芥絻娼勬絽娼堟綁娼婃綄娼庢綇娼愭綉娼掓綋娼旀綍娼栨綏娼欐綒娼涙綕娼熸綘娼℃剑娼ゆ渐娼ф建娼╂姜娼浆娼桨娼辨匠娼垫蕉娼锋焦娼绘浇娼炬娇婢�婢佹緜婢冩緟婢嗘緡婢婃緥婢忔緪婢戞緬婢撴緮婢曟緰婢楁緲婢欐練婢涙緷婢炴緹婢犳劲婢f兢婢ユ睛婢ㄦ京婢精婢经婢警婢版颈婢叉敬婢垫痉婢告竞婢绘炯婢芥揪婢挎縼婵冩縿婵呮繂婵囨繄婵婃繈婵屾繊婵庢繌婵愭繐婵旀繒婵栨織婵樻繖婵氭繘婵滄繚婵熸竣婵f郡婵ワ拷".split("");for(j=0;j!=D[157].length;++j)if(D[157][j].charCodeAt(0)!==65533){e[D[157][j]]=40192+j;d[40192+j]=D[157][j]}D[158]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷婵︽咖婵ㄦ咯婵揩婵凯婵版勘婵叉砍婵存康婵舵糠婵告抗婵烘炕婵兼拷婵炬靠鐎�鐎佺�傜�冪�勭�呯�嗙�囩�堢�夌�婄�嬬�岀�嶇�庣�忕�愮�掔�撶�旂�曠�栫�楃�樼�欑�滅�濈�炵�熺�犵�$�㈢�ょ�ョ�︾�х�ㄧ�╃�拷鐎�����扮�辩�茬�崇�寸�剁�风�哥�虹�荤�肩�界�剧�跨亐鐏佺亗鐏冪亜鐏呯亞鐏囩亪鐏夌亰鐏嬬亶鐏庣亹鐏戠亽鐏撶仈鐏曠仏鐏楃仒鐏欑仛鐏涚仠鐏濈仧鐏犵仭鐏㈢仯鐏ょ仴鐏︾仹鐏ㄧ仼鐏伄鐏辩伈鐏崇伌鐏风伖鐏虹伝鐏界倎鐐傜們鐐勭倖鐐囩倛鐐嬬倢鐐嶇倧鐐愮倯鐐撶倵鐐樼倸鐐涚倿鐐熺偁鐐$偄鐐g偆鐐ョ偊鐐х偍鐐╃偑鐐扮偛鐐寸偟鐐剁偤鐐剧偪鐑勭儏鐑嗙儑鐑夌儖鐑岀儘鐑庣儚鐑愮儜鐑掔儞鐑旂儠鐑栫儣鐑氾拷".split("");for(j=0;j!=D[158].length;++j)if(D[158][j].charCodeAt(0)!==65533){e[D[158][j]]=40448+j;d[40448+j]=D[158][j]}D[159]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐑滅儩鐑炵儬鐑$儮鐑g儱鐑儺鐑扮儽鐑茬兂鐑寸兊鐑剁兏鐑虹兓鐑肩兙鐑跨剙鐒佺剛鐒冪剟鐒呯剢鐒囩剤鐒嬬剬鐒嶇剮鐒忕剳鐒掔剶鐒楃剾鐒滅劃鐒炵劅鐒犵劇鐒㈢劊鐒ょ劌鐒х劏鐒╃劒鐒劕鐒劗鐒茬劤鐒达拷鐒电劮鐒哥劰鐒虹劵鐒肩劷鐒剧効鐓�鐓佺厒鐓冪厔鐓嗙厙鐓堢厜鐓嬬厤鐓忕厫鐓戠厭鐓撶厰鐓曠厲鐓楃厴鐓欑厷鐓涚厺鐓熺厾鐓$參鐓g叆鐓╃叒鐓叕鐓叝鐓扮叡鐓寸叺鐓剁叿鐓圭吇鐓肩吘鐓跨唨鐔佺唫鐔冪唴鐔嗙唶鐔堢唹鐔嬬唽鐔嶇啂鐔愮啈鐔掔啌鐔曠問鐔楃啔鐔涚啘鐔濈啚鐔$啟鐔g啢鐔ョ啨鐔х啯鐔啱鐔啴鐔啺鐔辩啿鐔寸喍鐔风喐鐔虹喕鐔肩喗鐔剧喛鐕�鐕佺噦鐕勭噮鐕嗙噰鐕堢噳鐕婄噵鐕岀噸鐕忕噽鐕戠噿鐕擄拷".split("");for(j=0;j!=D[159].length;++j)if(D[159][j].charCodeAt(0)!==65533){e[D[159][j]]=40704+j;d[40704+j]=D[159][j]}D[160]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐕栫嚄鐕樼嚈鐕氱嚊鐕滅嚌鐕炵嚐鐕$嚔鐕g嚖鐕︾嚚鐕╃嚜鐕嚞鐕嚡鐕扮嚤鐕茬嚦鐕寸嚨鐕剁嚪鐕哥嚭鐕荤嚰鐕界嚲鐕跨垁鐖佺垈鐖冪垊鐖呯垏鐖堢垑鐖婄垕鐖岀垗鐖庣垙鐖愮垜鐖掔垞鐖旂垥鐖栫垪鐖樼垯鐖氾拷鐖涚垳鐖炵垷鐖犵垺鐖㈢垼鐖ょ垾鐖︾埀鐖╃埆鐖埉鐖埐鐖崇埓鐖虹埣鐖剧墍鐗佺墏鐗冪墑鐗呯墕鐗夌墛鐗嬬墡鐗忕墣鐗戠墦鐗旂墪鐗楃墭鐗氱墱鐗炵墵鐗g墹鐗ョ墾鐗壂鐗壄鐗扮壉鐗崇壌鐗剁壏鐗哥壔鐗肩壗鐘傜妰鐘呯妴鐘囩妶鐘夌妼鐘庣姁鐘戠姄鐘旂姇鐘栫姉鐘樼姍鐘氱姏鐘滅姖鐘炵姞鐘$姠鐘g姢鐘ョ姦鐘х姩鐘╃姫鐘姰鐘辩姴鐘崇姷鐘虹娀鐘肩娊鐘剧娍鐙�鐙呯媶鐙囩媺鐙婄媼鐙岀嫃鐙戠嫇鐙旂嫊鐙栫嫎鐙氱嫑锟�".split("");for(j=0;j!=D[160].length;++j)if(D[160][j].charCodeAt(0)!==65533){e[D[160][j]]=40960+j;d[40960+j]=D[160][j]}D[161]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟姐��銆併�偮匪壦嚶ㄣ�冦�呪�旓綖鈥栤�︹�樷�欌�溾�濄�斻�曘�堛�夈�娿�嬨�屻�嶃�庛�忋�栥�椼�愩�懧泵椕封埗鈭р埁鈭戔垙鈭埄鈭堚埛鈭氣姤鈭モ垹鈱掆姍鈭埉鈮♀墝鈮堚埥鈭濃墵鈮壇鈮も墺鈭炩埖鈭粹檪鈾�掳鈥测�斥剝锛劼わ繝锟♀�奥р剸鈽嗏槄鈼嬧棌鈼庘棁鈼嗏枴鈻犫柍鈻测�烩啋鈫愨啈鈫撱�擄拷".split("");for(j=0;j!=D[161].length;++j)if(D[161][j].charCodeAt(0)!==65533){e[D[161][j]]=41216+j;d[41216+j]=D[161][j]}D[162]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟解叞鈪扁叢鈪斥叴鈪碘叾鈪封吀鈪癸拷锟斤拷锟斤拷锟解拡鈷夆拪鈷嬧拰鈷嶁拵鈷忊拹鈷戔拻鈷撯挃鈷曗挅鈷椻挊鈷欌挌鈷涒懘鈶碘懚鈶封懜鈶光懞鈶烩懠鈶解懢鈶库拃鈷佲拏鈷冣拕鈷呪拞鈷団憼鈶♀憿鈶b懁鈶モ懄鈶р懆鈶╋拷锟姐垹銏°垻銏c垽銏ャ垿銏с埁銏╋拷锟解厾鈪♀參鈪b叅鈪モ叇鈪р叏鈪┾叒鈪拷锟斤拷".split("");for(j=0;j!=D[162].length;++j)if(D[162][j].charCodeAt(0)!==65533){e[D[162][j]]=41472+j;d[41472+j]=D[162][j]}D[163]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤紒锛傦純锟ワ紖锛嗭紘锛堬級锛婏紜锛岋紞锛庯紡锛愶紤锛掞紦锛旓紩锛栵紬锛橈紮锛氾紱锛滐紳锛烇紵锛狅肌锛迹锛わ讥锛︼姬锛缉锛极锛辑锛集锛帮急锛诧汲锛达嫉锛讹挤锛革脊锛猴蓟锛硷冀锛撅伎锝�锝侊絺锝冿絼锝咃絾锝囷綀锝夛綂锝嬶綄锝嶏綆锝忥綈锝戯綊锝擄綌锝曪綎锝楋綐锝欙綒锝涳綔锝濓浚锟�".split("");for(j=0;j!=D[163].length;++j)if(D[163][j].charCodeAt(0)!==65533){e[D[163][j]]=41728+j;d[41728+j]=D[163][j]}D[164]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟姐亖銇傘亙銇勩亝銇嗐亣銇堛亯銇娿亱銇屻亶銇庛亸銇愩亼銇掋亾銇斻仌銇栥仐銇樸仚銇氥仜銇溿仢銇炪仧銇犮仭銇€仯銇ゃ仴銇︺仹銇ㄣ仼銇伀銇伃銇伅銇般伇銇层伋銇淬伒銇躲伔銇搞伖銇恒伝銇笺伣銇俱伩銈�銈併倐銈冦倓銈呫倖銈囥倛銈夈倞銈嬨倢銈嶃値銈忋倫銈戙倰銈擄拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");for(j=0;j!=D[164].length;++j)if(D[164][j].charCodeAt(0)!==65533){e[D[164][j]]=41984+j;d[41984+j]=D[164][j]}D[165]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟姐偂銈€偅銈ゃ偉銈︺偋銈ㄣ偐銈偒銈偔銈偗銈般偙銈层偝銈淬偟銈躲偡銈搞偣銈恒偦銈笺偨銈俱偪銉�銉併儌銉冦儎銉呫儐銉囥儓銉夈儕銉嬨儗銉嶃儙銉忋儛銉戙儝銉撱償銉曘儢銉椼儤銉欍儦銉涖儨銉濄優銉熴儬銉°儮銉c儰銉ャ儲銉с儴銉┿儶銉儸銉儺銉儼銉便儾銉炽兇銉点兌锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");for(j=0;j!=D[165].length;++j)if(D[165][j].charCodeAt(0)!==65533){e[D[165][j]]=42240+j;d[42240+j]=D[165][j]}D[166]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟轿懳捨撐斘曃栁椢樜櫸毼浳溛澪炍熚犖∥Nのノξㄎ╋拷锟斤拷锟斤拷锟斤拷锟轿蔽参澄次滴段肺肝刮何晃嘉轿疚肯�蟻蟽蟿蠀蠁蠂蠄蠅锟斤拷锟斤拷锟斤拷锟斤傅锔讹腹锔猴缚锕�锔斤妇锕侊箓锕冿箘锟斤拷锔伙讣锔凤父锔憋拷锔筹复锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷".split("");for(j=0;j!=D[166].length;++j)if(D[166][j].charCodeAt(0)!==65533){e[D[166][j]]=42496+j;d[42496+j]=D[166][j]}D[167]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟叫愋懶捫撔斝曅佇栃椥樞櫺毿浶溞澬炐熜犘⌒⑿Pばバπㄐ┬拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷邪斜胁谐写械褢卸蟹懈泄泻谢屑薪芯锌褉褋褌褍褎褏褑褔褕褖褗褘褜褝褞褟锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷".split("");for(j=0;j!=D[167].length;++j)if(D[167][j].charCodeAt(0)!==65533){e[D[167][j]]=42752+j;d[42752+j]=D[167][j]}D[168]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷藠藡藱鈥撯�曗�モ�碘剠鈩夆問鈫椻啒鈫欌垥鈭熲垼鈮掆墻鈮р娍鈺愨晳鈺掆晸鈺斺晻鈺栤晽鈺樷暀鈺氣暃鈺溾暆鈺炩暉鈺犫暋鈺⑩暎鈺も暐鈺︹暓鈺ㄢ暕鈺暙鈺暛鈺暞鈺扳暠鈺测暢鈻佲杺鈻冣杽鈻呪枂鈻囷拷鈻堚枆鈻娾枊鈻屸枍鈻庘枏鈻撯枖鈻曗柤鈻解棦鈼b棨鈼モ槈鈯曘�掋�濄�烇拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷膩谩菐脿膿茅臎猫墨铆菒矛艒贸菕貌奴煤菙霉菛菢菤菧眉锚蓱锟脚勁堬拷伞锟斤拷锟斤拷銊呫剢銊囥剤銊夈剨銊嬨剬銊嶃剮銊忋剱銊戙剴銊撱剶銊曘剸銊椼剺銊欍剼銊涖劀銊濄劄銊熴劆銊°劉銊c劋銊ャ劍銊с劏銊╋拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");for(j=0;j!=D[168].length;++j)if(D[168][j].charCodeAt(0)!==65533){e[D[168][j]]=43008+j;d[43008+j]=D[168][j]}D[169]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷銆°�€�c�ゃ�ャ�︺�с�ㄣ�┿姡銕庛帍銕溿帩銕炪帯銖勩弾銖戙彃銖曪赴锟郡锟解劇銏憋拷鈥愶拷锟斤拷銉笺倹銈溿兘銉俱�嗐倽銈烇箟锕婏箣锕岋箥锕庯箯锕愶箲锕掞箶锕曪箹锕楋箼锕氾箾锕滐節锕烇篃锕狅埂锟斤耿锕o工锕ワ功锕供锕公锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟姐�囷拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鈹�鈹佲攤鈹冣攧鈹呪攩鈹団攬鈹夆攰鈹嬧攲鈹嶁攷鈹忊攼鈹戔敀鈹撯敂鈹曗敄鈹椻敇鈹欌敋鈹涒敎鈹濃敒鈹熲敔鈹♀敘鈹b敜鈹モ敠鈹р敤鈹┾敧鈹敩鈹敭鈹敯鈹扁敳鈹斥敶鈹碘敹鈹封敻鈹光敽鈹烩敿鈹解斁鈹库晙鈺佲晜鈺冣晞鈺呪晢鈺団晥鈺夆晩鈺嬶拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");for(j=0;j!=D[169].length;++j)if(D[169][j].charCodeAt(0)!==65533){e[D[169][j]]=43264+j;d[43264+j]=D[169][j]}D[170]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐙滅嫕鐙熺嫝鐙g嫟鐙ョ嫤鐙х嫪鐙嫷鐙剁嫻鐙界嬀鐙跨寑鐚傜寗鐚呯寙鐚囩寛鐚夌寢鐚岀實鐚忕寪鐚戠寬鐚旂寴鐚欑寶鐚熺尃鐚g尋鐚︾導鐚ㄧ尛鐚尠鐚茬尦鐚电尪鐚虹尰鐚肩尳鐛�鐛佺崅鐛冪崉鐛呯崋鐛囩崍锟界崏鐛婄崑鐛岀崕鐛忕崙鐛撶崝鐛曠崠鐛樼崣鐛氱崨鐛滅崫鐛炵崯鐛$崲鐛g崵鐛ョ崷鐛х崹鐛╃崻鐛嵁鐛扮嵄锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");for(j=0;j!=D[170].length;++j)if(D[170][j].charCodeAt(0)!==65533){e[D[170][j]]=43520+j;d[43520+j]=D[170][j]}D[171]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐛茬嵆鐛寸嵉鐛剁嵎鐛哥嵐鐛虹嵒鐛肩嵔鐛跨巰鐜佺巶鐜冪巺鐜嗙巿鐜婄帉鐜嶇帍鐜愮帓鐜撶帞鐜曠帡鐜樼帣鐜氱帨鐜濈帪鐜犵帯鐜g帳鐜ョ帵鐜х帹鐜幀鐜幈鐜寸幍鐜剁幐鐜圭幖鐜界幘鐜跨弫鐝冪弰鐝呯弳鐝囷拷鐝嬬弻鐝庣彃鐝撶彅鐝曠彇鐝楃彉鐝氱彌鐝滅彎鐝熺彙鐝㈢彛鐝ょ彟鐝ㄧ彧鐝彫鐝彲鐝扮彵鐝崇彺鐝电彾鐝凤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷".split("");for(j=0;j!=D[171].length;++j)if(D[171][j].charCodeAt(0)!==65533){e[D[171][j]]=43776+j;d[43776+j]=D[171][j]}D[172]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐝哥徆鐝虹徎鐝肩徑鐝剧徔鐞�鐞佺悅鐞勭悋鐞堢悑鐞岀悕鐞庣悜鐞掔悡鐞旂悤鐞栫悧鐞樼悪鐞滅悵鐞炵悷鐞犵悺鐞g悿鐞х惄鐞惌鐞惐鐞茬惙鐞哥惞鐞虹惢鐞界惥鐞跨憖鐟傜憙鐟勭憛鐟嗙憞鐟堢憠鐟婄憢鐟岀憤锟界憥鐟忕憪鐟戠憭鐟撶憯鐟栫憳鐟濈憼鐟$憿鐟g懁鐟ョ懄鐟х懆鐟╃應鐟懍鐟懐鐟辩懖鐟崇懘鐟电懜鐟圭懞锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");for(j=0;j!=D[172].length;++j)if(D[172][j].charCodeAt(0)!==65533){e[D[172][j]]=44032+j;d[44032+j]=D[172][j]}D[173]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐟荤懠鐟界懣鐠傜拕鐠呯拞鐠堢拤鐠婄拰鐠嶇拸鐠戠拻鐠撶挃鐠曠挅鐠楃挊鐠欑挌鐠涚挐鐠熺挔鐠$挗鐠g挙鐠ョ挦鐠挮鐠挱鐠挴鐠扮挶鐠茬挸鐠寸挼鐠剁挿鐠哥捁鐠荤捈鐠界捑鐠跨搥鐡佺搨鐡冪搫鐡呯搯鐡囷拷鐡堢搲鐡婄搵鐡岀搷鐡庣搹鐡愮搼鐡撶摂鐡曠摉鐡楃摌鐡欑摎鐡涚摑鐡熺摗鐡ョ摟鐡ㄧ摡鐡摣鐡摥鐡扮摫鐡诧拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷".split("");for(j=0;j!=D[173].length;++j)if(D[173][j].charCodeAt(0)!==65533){e[D[173][j]]=44288+j;d[44288+j]=D[173][j]}D[174]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐡崇摰鐡哥摴鐡虹摶鐡肩摻鐡剧攢鐢佺攤鐢冪攨鐢嗙攪鐢堢攭鐢婄攱鐢岀攷鐢愮敀鐢旂敃鐢栫敆鐢涚敐鐢炵敔鐢$敘鐢g敜鐢︾敡鐢敭鐢寸敹鐢圭敿鐢界斂鐣佺晜鐣冪晞鐣嗙晣鐣夌晩鐣嶇晲鐣戠晵鐣撶晻鐣栫晽鐣橈拷鐣濈暈鐣熺暊鐣$暍鐣g暏鐣х暔鐣╃暙鐣暛鐣暞鐣扮暠鐣崇暤鐣剁暦鐣虹暬鐣肩暯鐣剧杸鐤佺杺鐤勭枀鐤囷拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷".split("");for(j=0;j!=D[174].length;++j)if(D[174][j].charCodeAt(0)!==65533){e[D[174][j]]=44544+j;d[44544+j]=D[174][j]}D[175]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐤堢枆鐤婄枌鐤嶇枎鐤愮枔鐤曠枠鐤涚枩鐤炵枹鐤︾枾鐤ㄧ柀鐤柇鐤剁柗鐤虹柣鐤跨梹鐥佺梿鐥嬬棇鐥庣棌鐥愮棏鐥撶棗鐥欑棜鐥滅棟鐥熺棤鐥$棩鐥╃棳鐥棶鐥棽鐥崇椀鐥剁椃鐥哥椇鐥荤椊鐥剧槀鐦勭槅鐦囷拷鐦堢槈鐦嬬槏鐦庣槒鐦戠槖鐦撶様鐦栫槡鐦滅槤鐦炵槨鐦g槯鐦ㄧ槵鐦槸鐦辩槻鐦剁樂鐦圭樅鐦荤樈鐧佺檪鐧勶拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷".split("");for(j=0;j!=D[175].length;++j)if(D[175][j].charCodeAt(0)!==65533){e[D[175][j]]=44800+j;d[44800+j]=D[175][j]}D[176]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐧呯檰鐧囩檲鐧夌檴鐧嬬檸鐧忕檺鐧戠檼鐧撶檿鐧楃櫂鐧欑櫄鐧涚櫇鐧熺櫊鐧$櫌鐧ょ櫏鐧︾櫑鐧ㄧ櫓鐧櫖鐧櫘鐧扮櫛鐧茬櫝鐧寸櫟鐧剁櫡鐧圭櫤鐧肩櫩鐨�鐨佺殐鐨呯殙鐨婄殞鐨嶇殢鐨愮殥鐨旂殨鐨楃殬鐨氱殯锟界殰鐨濈殲鐨熺殸鐨$殺鐨g殽鐨︾毀鐨ㄧ毄鐨毇鐨毉鐨毎鐨崇毜鐨剁毞鐨哥毠鐨虹毣鐨肩毥鐨剧泙鐩佺泝鍟婇樋鍩冩尐鍝庡攭鍝�鐨戠檶钄肩煯鑹剧鐖遍殬闉嶆皑瀹変亢鎸夋殫宀歌兒妗堣偖鏄傜泿鍑规晼鐔勘琚勫偛濂ユ噴婢宠姯鎹屾墥鍙惂绗嗗叓鐤ゅ反鎷旇穻闈舵妸鑰欏潩闇哥舰鐖哥櫧鏌忕櫨鎽嗕桨璐ユ嫓绋楁枒鐝惉鎵宠埇棰佹澘鐗堟壆鎷屼即鐡e崐鍔炵粖閭﹀府姊嗘鑶�缁戞纾呰殞闀戝倣璋よ嫗鑳炲寘瑜掑墺锟�".split("");for(j=0;j!=D[176].length;++j)if(D[176][j].charCodeAt(0)!==65533){e[D[176][j]]=45056+j;d[45056+j]=D[176][j]}D[177]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐩勭泧鐩夌泲鐩岀洆鐩曠洐鐩氱洔鐩濈洖鐩犵洝鐩㈢洠鐩ょ洣鐩х洦鐩╃洩鐩洭鐩洶鐩崇浀鐩剁浄鐩虹浕鐩界浛鐪�鐪傜渻鐪呯渾鐪婄湆鐪庣湉鐪愮湋鐪掔湏鐪旂湑鐪栫湕鐪樼湜鐪滅湞鐪炵湣鐪g湦鐪ョ湩鐪湯锟界湰鐪湴鐪辩湶鐪崇湸鐪圭溁鐪界溇鐪跨潅鐫勭潊鐫嗙潏鐫夌潑鐫嬬潓鐫嶇潕鐫忕潚鐫撶潝鐫曠潠鐫楃潣鐫欑潨钖勯浌淇濆牎楗卞疂鎶辨姤鏆磋惫椴嶇垎鏉鎮插崙鍖楄緢鑳岃礉閽″�嶇媹澶囨儷鐒欒濂旇嫰鏈宕╃环鐢车韫﹁扛閫奸蓟姣旈剻绗斿郊纰ц摉钄芥瘯姣欐瘱甯佸簢鐥归棴鏁濆紛蹇呰緹澹佽噦閬块櫅闉竟缂栬船鎵佷究鍙樺崬杈ㄨ京杈亶鏍囧姜鑶樿〃槌栨唻鍒槳褰枌婵掓花瀹炬憟鍏靛啺鏌勪笝绉夐ゼ鐐筹拷".split("");for(j=0;j!=D[177].length;++j)if(D[177][j].charCodeAt(0)!==65533){e[D[177][j]]=45312+j;d[45312+j]=D[177][j]}D[178]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐫濈潪鐫熺潬鐫ょ潷鐫╃潽鐫澁鐫澃鐫辩澆鐫崇澊鐫电澏鐫风澑鐫虹澔鐫肩瀬鐬傜瀮鐬嗙瀲鐬堢瀴鐬婄瀷鐬忕瀽鐬撶灁鐬曠灃鐬楃灅鐬欑灇鐬涚灉鐬濈灋鐬$灒鐬ょ灕鐬ㄧ灚鐬灝鐬灡鐬茬灤鐬剁灧鐬哥灩鐬猴拷鐬肩灳鐭�鐭佺焸鐭冪焺鐭呯焼鐭囩焾鐭夌煀鐭嬬煂鐭庣煆鐭愮煈鐭掔煋鐭旂煏鐭栫煒鐭欑煔鐭濈煘鐭熺煚鐭$煠鐥呭苟鐜昏彔鎾嫧閽垫尝鍗氬媰鎼忛搨绠斾集甯涜埗鑴栬唺娓ゆ硦椹虫崟鍗滃摵琛ュ煚涓嶅竷姝ョ翱閮ㄦ�栨摝鐚滆鏉愭墠璐㈢潿韪╅噰褰╄彍钄¢鍙傝殨娈嬫儹鎯ㄧ伩鑻嶈埍浠撴钵钘忔搷绯欐Ы鏇硅崏鍘曠瓥渚у唽娴嬪眰韫彃鍙夎尙鑼舵煡纰存惤瀵熷矓宸鎷嗘煷璞烘悁鎺鸿潐棣嬭皸缂犻摬浜ч槓棰ゆ槍鐚栵拷".split("");for(j=0;j!=D[178].length;++j)if(D[178][j].charCodeAt(0)!==65533){e[D[178][j]]=45568+j;d[45568+j]=D[178][j]}D[179]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐭︾煥鐭煰鐭扮煴鐭茬煷鐭电煼鐭圭熀鐭荤熂鐮冪爠鐮呯爢鐮囩爤鐮婄爧鐮庣爮鐮愮爴鐮曠牂鐮涚牉鐮犵牎鐮㈢牑鐮ㄧ牚鐮牣鐮牨鐮茬牫鐮电牰鐮界牽纭佺纭冪纭嗙纭夌纭嬬纭忕纭撶纭樼纭氾拷纭涚纭炵纭犵 纭㈢。纭ょˉ纭︾¨纭ㄧ々纭“纭辩〔纭崇〈纭电《纭哥」纭虹』纭界【纭跨纰佺纰冨満灏濆父闀垮伩鑲犲巶鏁炵晠鍞卞�¤秴鎶勯挒鏈濆槻娼发鍚电倰杞︽壇鎾ゆ帲褰绘緢閮磋嚕杈板皹鏅ㄥ勘娌夐檲瓒佽‖鎾戠О鍩庢鎴愬憟涔樼▼鎯╂緞璇氭壙閫為獘绉ゅ悆鐥存寔鍖欐睜杩熷紱椹拌�婚娇渚堝昂璧ょ繀鏂ョ偨鍏呭啿铏磭瀹犳娊閰暣韪岀鎰佺浠囩桓鐬呬笐鑷垵鍑烘┍鍘ㄨ簢閿勯洀婊侀櫎妤氾拷".split("");for(j=0;j!=D[179].length;++j)if(D[179][j].charCodeAt(0)!==65533){e[D[179][j]]=45824+j;d[45824+j]=D[179][j]}D[180]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷纰勭纰嗙纰婄纰忕纰掔纰曠纰欑纰炵纰㈢ⅳ纰︾ⅷ纰╃ⅹ纰纰纰⒌纰剁⒎纰哥⒑纰荤⒓纰界⒖纾�纾傜纾勭纾囩纾岀纾庣纾戠纾撶纾楃纾氱纾滅纾炵纾犵!纾㈢#锟界¥纾ョ&纾х)纾+纾.纾0纾辩3纾电6纾哥9纾荤<纾界>纾跨绀傜绀勭绀囩绀夌绀嬬纭�鍌ㄧ煑鎼愯Е澶勬彛宸濈┛妞戒紶鑸瑰枠涓茬柈绐楀耿搴婇棷鍒涘惞鐐婃嵍閿ゅ瀭鏄ユた閱囧攪娣崇函锠㈡埑缁扮柕鑼ㄧ闆岃緸鎱堢摲璇嶆鍒鸿祼娆¤仾钁卞洷鍖嗕粠涓涘噾绮楅唻绨囦績韫跨绐滄懅宕斿偓鑴嗙榿绮规番缈犳潙瀛樺纾嬫挳鎼撴帾鎸敊鎼揪绛旂槱鎵撳ぇ鍛嗘鍌f埓甯︽畣浠h捶琚嬪緟閫拷".split("");for(j=0;j!=D[180].length;++j)if(D[180][j].charCodeAt(0)!==65533){e[D[180][j]]=46080+j;d[46080+j]=D[180][j]}D[181]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绀嶇绀忕绀戠绀旂绀栫绀樼绀氱绀滅绀熺绀$あ绀gぅ绀︾ぇ绀ㄧぉ绀か绀き绀く绀扮け绀茬こ绀电ざ绀风じ绀圭そ绀跨绁冪绁呯绁婄绁岀绁庣绁愮绁掔绁曠绁欑ァ绁o拷绁ょウ绁╃オ绁ガ绁グ绁辩ゲ绁崇ゴ绁电ザ绁圭セ绁肩ソ绁剧タ绂傜绂嗙绂堢绂嬬绂嶇绂愮绂掓�犺�芥媴涓瑰崟閮告幐鑳嗘棪姘絾鎯贰璇炲脊铔嬪綋鎸″厷鑽℃。鍒�鎹h箞鍊掑矝绁峰鍒扮ɑ鎮奸亾鐩楀痉寰楃殑韫伅鐧荤瓑鐬嚦閭撳牑浣庢淮杩晫绗涚媱娑ょ繜瀚℃姷搴曞湴钂傜甯濆紵閫掔紨棰犳巶婊囩鐐瑰吀闈涘灚鐢典絻鐢稿簵鎯﹀娣�娈跨鍙奸洉鍑嬪垇鎺夊悐閽撹皟璺岀埞纰熻澏杩皪鍙狅拷".split("");for(j=0;j!=D[181].length;++j)if(D[181][j].charCodeAt(0)!==65533){e[D[181][j]]=46336+j;d[46336+j]=D[181][j]}D[182]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绂撶绂曠绂楃绂欑绂滅绂炵绂犵Α绂㈢Γ绂ょΕ绂︾Θ绂╃Κ绂Μ绂Ξ绂Π绂辩Σ绂寸Φ绂剁Ψ绂哥绂跨绉勭绉囩绉婄绉庣绉愮绉旂绉楃绉氱绉滅绉炵绉$Б绉ョЖ绉拷绉М绉辩Р绉崇Т绉电Ф绉风Ч绉虹Ъ绉剧Э绋佺▌绋呯▏绋堢▔绋婄▽绋忕◥绋戠♁绋撶〞绋栫绋欑绋滀竵鐩彯閽夐《榧庨敪瀹氳涓笢鍐懀鎳傚姩鏍嬩緱鎭喕娲炲厹鎶栨枟闄¤眴閫楃棙閮界潱姣掔妸鐙鍫电澒璧屾潨闀�鑲氬害娓″绔煭閿绘鏂紟鍫嗗厬闃熷澧╁惃韫叉暒椤垮洡閽濈浘閬佹巼鍝嗗澶哄灈韬叉湹璺鸿埖鍓佹儼鍫曡浘宄ㄩ箙淇勯璁瑰ē鎭跺巹鎵奸亸閯傞タ鎭╄�屽効鑰冲皵楗垫幢浜岋拷".split("");for(j=0;j!=D[182].length;++j)if(D[182][j].charCodeAt(0)!==65533){e[D[182][j]]=46592+j;d[46592+j]=D[182][j]}D[183]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绋濈绋$á绋ょē绋︾ě绋ㄧī绋ǐ绋ō绋ǒ绋扮ū绋茬ù绋电ǘ绋哥ê绋剧﹢绌佺﹤绌冪﹦绌呯﹪绌堢绌婄绌岀绌庣绌愮绌撶绌曠〇绌樼绌氱绌滅绌炵绌犵绌㈢绌ょ━绌︾┃绌拷绌╃┆绌┈绌┊绌┍绌茬┏绌电┗绌肩┙绌剧獋绐呯獓绐夌獖绐嬬獙绐庣獜绐愮獡绐旂獧绐氱獩绐炵绐㈣窗鍙戠綒绛忎紣涔忛榾娉曠彁钘╁竼鐣炕妯婄熅閽掔箒鍑$儲鍙嶈繑鑼冭穿鐘キ娉涘潑鑺虫柟鑲埧闃插Θ浠胯绾烘斁鑿查潪鍟¢鑲ュ尓璇藉悹鑲哄簾娌歌垂鑺厷鍚╂皼鍒嗙悍鍧熺剼姹剧矇濂嬩唤蹇挎劋绮赴灏佹灚铚傚嘲閿嬮鐤兘閫㈠啹缂濊濂夊嚖浣涘惁澶暦鑲ゅ鎵舵媯杈愬箙姘熺浼忎繕鏈嶏拷".split("");for(j=0;j!=D[183].length;++j)if(D[183][j].charCodeAt(0)!==65533){e[D[183][j]]=46848+j;d[46848+j]=D[183][j]}D[184]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绐g绐х绐绐绐扮绐茬绐电绐风绐圭绐荤绐界绔�绔佺珎绔冪珓绔呯珕绔囩珗绔夌珚绔岀珝绔庣珡绔愮珣绔掔珦绔旂珪绔楃珮绔氱珱绔滅珴绔$绔ょ绔ㄧ绔绔绔扮绔茬锟界绔电绔风绔荤绔剧瑎绗佺瑐绗呯瑖绗夌瑢绗嶇瑤绗愮瑨绗撶瑬绗楃瑯绗氱瑴绗濈瑹绗$绗g绗╃娴丢绂忚⒈寮楃敨鎶氳緟淇嚋鏂ц劘鑵戝簻鑵愯荡鍓璧嬪鍌呬粯闃滅埗鑵硅礋瀵岃闄勫缂氬拹鍣跺槑璇ユ敼姒傞挋鐩栨簤骞茬敇鏉嗘煈绔胯倽璧舵劅绉嗘暍璧e唸鍒氶挗缂歌倹绾插矖娓潬绡欑殝楂樿啅缇旂硶鎼為晲绋垮憡鍝ユ瓕鎼佹垐楦借兂鐤欏壊闈╄憶鏍艰洡闃侀殧閾釜鍚勭粰鏍硅窡鑰曟洿搴氱竟锟�".split("");for(j=0;j!=D[184].length;++j)if(D[184][j].charCodeAt(0)!==65533){e[D[184][j]]=47104+j;d[47104+j]=D[184][j]}D[185]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绗绗茬绗电绗风绗荤绗跨瓈绛佺瓊绛冪瓌绛嗙瓐绛婄瓖绛庣瓝绛曠瓧绛欑瓬绛炵瓱绛$绛ょ绛︾绛ㄧ绛绛绛绛崇绛剁绛虹绛界绠佺畟绠冪畡绠嗙畤绠堢畨绠婄畫绠岀畮绠忥拷绠戠畳绠撶畺绠樼畽绠氱疀绠炵疅绠犵绠ょ绠绠扮绠崇绠剁绠圭绠荤绠界绠跨瘈绡傜瘍绡勫焸鑰挎宸ユ敾鍔熸伃榫氫緵韬叕瀹紦宸╂睘鎷辫础鍏遍挬鍕炬矡鑻熺嫍鍨㈡瀯璐杈滆弴鍜曠畭浼版步瀛ゅ榧撳彜铔婇璋疯偂鏁呴【鍥洪泧鍒摐鍓愬鎸傝涔栨嫄鎬:鍏冲畼鍐犺绠¢缃愭儻鐏岃疮鍏夊箍閫涚懓瑙勫湱纭呭綊榫熼椇杞ㄩ璇$櫢妗傛煖璺吹鍒借緤婊氭閿呴儹鍥芥灉瑁硅繃鍝堬拷".split("");for(j=0;j!=D[185].length;++j)if(D[185][j].charCodeAt(0)!==65533){e[D[185][j]]=47360+j;d[47360+j]=D[185][j]}D[186]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绡呯瘓绡夌瘖绡嬬瘝绡庣瘡绡愮瘨绡旂瘯绡栫瘲绡樼瘺绡滅癁绡熺癄绡㈢绡ょ绡ㄧ绡绡绡扮绡崇绡电绡哥绡虹绡界绨�绨佺皞绨冪皠绨呯皢绨堢皦绨婄皪绨庣皭绨戠皰绨撶皵绨曠皸绨樼皺锟界皻绨涚皽绨濈盀绨犵啊绨㈢埃绨ょ哎绨ㄧ癌绨艾绨爱绨鞍绨辩安绨崇按绨电岸绨风肮绨虹盎绨肩敖绨剧眰楠稿娴锋唉浜ュ楠囬叄鎲ㄩ偗闊╁惈娑靛瘨鍑藉枈缃曠堪鎾兼崓鏃辨喚鎮嶇剨姹楁眽澶澀鑸鍤庤豹姣儩濂借�楀彿娴╁懙鍠濊嵎鑿忔牳绂惧拰浣曞悎鐩掕矇闃傛渤娑歌但瑜愰工璐哄樋榛戠棔寰堢嫚鎭ㄥ摷浜ㄦí琛℃亽杞板搫鐑樿櫣楦挎椽瀹忓紭绾㈠枆渚尨鍚煎帤鍊欏悗鍛间箮蹇界憵澹惰懌鑳¤澊鐙愮硦婀栵拷".split("");for(j=0;j!=D[186].length;++j)if(D[186][j].charCodeAt(0)!==65533){e[D[186][j]]=47616+j;d[47616+j]=D[186][j]}D[187]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绫冪眲绫呯眴绫囩眻绫夌眾绫嬬睂绫庣睆绫愮睉绫掔睋绫旂睍绫栫睏绫樼睓绫氱睕绫滅睗绫炵睙绫犵薄绫㈢保绫ょ饱绫︾抱绫ㄧ暴绫鲍绫杯绫悲绫扮北绫茬钡绫剁狈绫哥惫绫虹本绫跨瞼绮佺矀绮冪矂绮呯矄绮囷拷绮堢矈绮嬬矊绮嶇矌绮忕矏绮撶矓绮栫矙绮氱矝绮犵病绮g拨绮х波绮╃搏绮箔绮舶绮寸驳绮剁卜绮哥埠绮诲姬铏庡敩鎶や簰娌埛鑺卞摋鍗庣尵婊戠敾鍒掑寲璇濇寰婃��娣潖娆㈢幆妗撹繕缂撴崲鎮e敜鐥雹鐒曟叮瀹﹀够鑽掓厡榛勭:铦楃哀鐨囧嚢鎯剁厡鏅冨箤鎭嶈皫鐏版尌杈夊窘鎭㈣洈鍥炴瘉鎮旀収鍗夋儬鏅﹁纯绉戒細鐑╂眹璁宠缁樿崵鏄忓榄傛祽娣疯眮娲讳紮鐏幏鎴栨儜闇嶈揣绁稿嚮鍦惧熀鏈虹暩绋界Н绠曪拷".split("");for(j=0;j!=D[187].length;++j)if(D[187][j].charCodeAt(0)!==65533){e[D[187][j]]=47872+j;d[47872+j]=D[187][j]}D[188]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绮跨硛绯傜硟绯勭硢绯夌硧绯庣硰绯愮硲绯掔硴绯旂硺绯氱硾绯濈碁绯$尝绯g长绯ョ肠绯х畅绯倡绯抄绯嘲绯辩巢绯崇炒绯电扯绯风彻绯虹臣绯界尘绯跨磤绱佺磦绱冪磩绱呯磫绱囩磮绱夌磱绱岀磵绱庣磸绱愶拷绱戠磼绱撶磾绱曠礀绱楃礃绱欑礆绱涚礈绱濈礊绱熺础绱g搐绱ョ处绱ㄧ穿绱船绱串绱扮幢绱茬闯绱寸吹绱惰倢楗ヨ抗婵�璁ラ浮濮哗缂夊悏鏋佹杈戠睄闆嗗強鎬ョ柧姹插嵆瀚夌骇鎸ゅ嚑鑴婂繁钃熸妧鍐�瀛d紟绁墏鎮告祹瀵勫瘋璁¤鏃㈠繉闄呭缁х邯鍢夋灧澶逛匠瀹跺姞鑽氶璐剧敳閽惧亣绋间环鏋堕┚瀚佹鐩戝潥灏栫闂寸厧鍏艰偐鑹板ジ缂勮導妫�鏌⒈纭锋嫞鎹$畝淇壀鍑忚崘妲涢壌璺佃幢瑙侀敭绠欢锟�".split("");for(j=0;j!=D[188].length;++j)if(D[188][j].charCodeAt(0)!==65533){e[D[188][j]]=48128+j;d[48128+j]=D[188][j]}D[189]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绱风锤绱圭春绱荤醇绱界淳绱跨祤绲佺祩绲冪祫绲呯祮绲囩祱绲夌祳绲嬬祵绲嶇祹绲忕祼绲戠祾绲撶禂绲曠禆绲楃禈绲欑禋绲涚禍绲濈禐绲熺禒绲$耽绲g丹绲ョ郸绲х胆绲╃氮绲惮绲弹绲扮当绲茬党绲寸档绲讹拷绲哥倒绲虹祷绲肩到绲剧悼缍�缍佺秱缍冪秳缍呯秵缍囩秷缍夌秺缍嬬秾缍嶇稁缍忕稅缍戠稈缍撶稊缍曠稏缍楃稑鍋ヨ埌鍓戦ク娓愭簠娑у缓鍍靛灏嗘祮姹熺枂钂嬫〃濂栬鍖犻叡闄嶈晧妞掔鐒﹁兌浜ら儕娴囬獎濞囧毤鎼呴摪鐭茎鑴氱嫛瑙掗ズ缂寸粸鍓挎暀閰佃娇杈冨彨绐栨彮鎺ョ殕绉歌闃舵埅鍔妭妗旀澃鎹风潾绔磥缁撹В濮愭垝钘夎姤鐣屽�熶粙鐤ヨ灞婂肪绛嬫枻閲戜粖娲ヨ绱ч敠浠呰皑杩涢澇鏅嬬杩戠儸娴革拷".split("");for(j=0;j!=D[189].length;++j)if(D[189][j].charCodeAt(0)!==65533){e[D[189][j]]=48384+j;d[48384+j]=D[189][j]}D[190]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷缍欑稓缍涚稖缍濈稙缍熺稜缍$盯缍g钉缍ョ锭缍ㄧ订缍东缍董缍栋缍辩恫缍崇洞缍电抖缍风陡缍圭逗缍荤都缍界毒缍跨穩绶佺穫绶冪穭绶呯穯绶囩穲绶夌穵绶嬬穼绶嶇穾绶忕窅绶戠窉绶撶窋绶曠窎绶楃窐绶欙拷绶氱窙绶滅窛绶炵窡绶犵贰绶㈢罚绶ょ伐绶︾阀绶ㄧ珐绶帆绶翻绶矾绶扮繁绶茬烦绶寸返绶剁贩绶哥饭绶哄敖鍔茶崋鍏㈣寧鐫涙櫠椴镐含鎯婄簿绮崇粡浜曡鏅闈欏鏁暅寰勭棄闈栫珶绔炲噣鐐獦鎻┒绾犵帠闊箙鐏镐節閰掑帺鏁戞棫鑷艰垍鍜庡氨鐤氶灎鎷樼嫏鐤藉眳椹硅強灞�鍜�鐭╀妇娌仛鎷掓嵁宸ㄥ叿璺濊笧閿勘鍙ユ儳鐐墽鎹愰箖濞熷�︾湻鍗风虎鎾呮敨鎶夋帢鍊旂埖瑙夊喅璇�缁濆潎鑿岄挧鍐涘悰宄伙拷".split("");for(j=0;j!=D[190].length;++j)if(D[190][j].charCodeAt(0)!==65533){e[D[190][j]]=48640+j;d[48640+j]=D[190][j]}D[191]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绶荤芳绶界肪绶跨竴绺佺競绺冪竸绺呯竼绺囩笀绺夌笂绺嬬笇绺嶇笌绺忕笎绺戠笒绺撶笖绺曠笘绺楃笜绺欑笟绺涚笢绺濈笧绺熺笭绺$涪绺g袱绺ョ甫绺х辅绺╃釜绺脯绺府绺赴绺辩覆绺崇复绺电付绺风父绺癸拷绺虹讣绺界妇绺跨箑绻傜箖绻勭箙绻嗙箞绻夌箠绻嬬箤绻嶇箮绻忕箰绻戠箳绻撶箶绻曠箹绻楃箻绻欑箽绻涚箿绻濅繆绔f禋閮¢獜鍠�鍜栧崱鍜紑鎻╂シ鍑叏鍒婂牚鍕樺潕鐮嶇湅搴锋叿绯犳墰鎶椾孩鐐曡�冩嫹鐑ら潬鍧疯嫑鏌5纾曢绉戝3鍜冲彲娓村厠鍒诲璇捐偗鍟冨灕鎭冲潙鍚┖鎭愬瓟鎺ф姞鍙f墸瀵囨灟鍝獰鑻﹂叿搴撹¥澶稿灝鎸庤法鑳潡绛蜂京蹇娆惧尅绛愮媯妗嗙熆鐪舵椃鍐典簭鐩斿部绐ヨ懙濂庨瓉鍌�锟�".split("");for(j=0;j!=D[191].length;++j)if(D[191][j].charCodeAt(0)!==65533){e[D[191][j]]=48896+j;d[48896+j]=D[191][j]}D[192]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绻炵篃绻犵埂绻㈢梗绻ょ攻绻︾恭绻ㄧ供绻公绻弓绻汞绻扮贡绻茬钩绻寸沟绻剁狗绻哥构绻虹够绻肩菇绻剧箍绾�绾佺簝绾勭簠绾嗙簢绾堢簤绾婄簨绾岀簫绾庣簭绾愮簯绾掔簱绾旂簳绾栫簵绾樼簷绾氱簻绾濈簽锟界寒绾寸夯绾肩粬缁ょ滑缁圭紛缂愮紴缂风脊缂荤技缂界季缂跨絸缃佺絻缃嗙絿缃堢綁缃婄綃缃岀綅缃庣綇缃掔綋棣堟劎婧冨潳鏄嗘崋鍥版嫭鎵╁粨闃斿瀮鎷夊枃铚¤厞杈e暒鑾辨潵璧栬摑濠爮鎷︾闃戝叞婢滆鞍鎻借鎳掔紗鐑傛互鐞呮鐙煎粖閮庢湕娴崬鍔崇墷鑰佷浆濮ラ叒鐑欐稘鍕掍箰闆烽暛钑剧绱劇鍨掓搨鑲嬬被娉1妤炲喎鍘樻ⅷ鐘侀粠绡辩嫺绂绘紦鐞嗘潕閲岄菠绀艰帀鑽斿悘鏍椾附鍘夊姳鐮惧巻鍒╁倛渚嬩繍锟�".split("");for(j=0;j!=D[192].length;++j)if(D[192][j].charCodeAt(0)!==65533){e[D[192][j]]=49152+j;d[49152+j]=D[192][j]}D[193]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷缃栫綑缃涚綔缃濈綖缃犵剑缃ょ渐缃︾涧缃浆缃蒋缃扮匠缃电蕉缃风礁缃虹交缃肩浇缃跨線缇傜緝缇勭緟缇嗙緡缇堢緣缇嬬緧缇忕緪缇戠緬缇撶緯缇栫緱缇樼緳缇涚緶缇犵劲缇g茎缇︾鲸缇╃惊缇粳缇井缇憋拷缇崇敬缇电径缇风竞缇荤揪缈�缈傜績缈勭繂缈囩繄缈夌繈缈嶇繌缈愮繎缈掔繐缈栫織缈欑繗缈涚繙缈濈繛缈㈢浚鐥㈢珛绮掓播闅跺姏鐠冨摡淇╄仈鑾茶繛闀板粔鎬滄稛甯樻暃鑴搁摼鎭嬬偧缁冪伯鍑夋绮辫壇涓よ締閲忔櫨浜皡鎾╄亰鍍氱枟鐕庡杈芥溅浜嗘拏闀e粬鏂欏垪瑁傜儓鍔g寧鐞虫灄纾烽湒涓撮偦槌炴穻鍑涜祦鍚濇嫀鐜茶彵闆堕緞閾冧级缇氬噷鐏甸櫟宀鍙︿护婧滅悏姒寸~棣忕暀鍒樼槫娴佹煶鍏緳鑱嬪挋绗肩锟�".split("");for(j=0;j!=D[193].length;++j)if(D[193][j].charCodeAt(0)!==65533){e[D[193][j]]=49408+j;d[49408+j]=D[193][j]}D[194]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷缈ょ咖缈ㄧ开缈楷缈刊缈茬看缈电慷缈风扛缈圭亢缈界烤缈胯�傝�囪�堣�夎�婅�庤�忚�戣�撹�氳�涜�濊�炶�熻�¤�h�よ������拌�茶�磋�硅�鸿�艰�捐亐鑱佽亜鑱呰亣鑱堣亯鑱庤亸鑱愯亼鑱撹仌鑱栬仐锟借仚鑱涜仠鑱濊仦鑱熻仩鑱¤仮鑱h仱鑱ヨ仸鑱ц仺鑱伂鑱伄鑱伆鑱茶伋鑱磋伒鑱惰伔鑱歌伖鑱鸿伝鑱艰伣闅嗗瀯鎷㈤檱妤煎▌鎼傜瘬婕忛檵鑺﹀崲棰呭簮鐐夋幊鍗よ檹椴侀簱纰岄湶璺祩楣挎綖绂勫綍闄嗘埉椹村悤閾濅荆鏃呭饱灞$紩铏戞隘寰嬬巼婊ょ豢宄︽寷瀛沪鍗典贡鎺犵暐鎶¤疆浼︿粦娌︾憾璁鸿悵铻虹綏閫婚敚绠╅瑁歌惤娲涢獑缁滃楹荤帥鐮佽殏椹獋鍢涘悧鍩嬩拱楹﹀崠杩堣剦鐬掗铔弧钄撴浖鎱㈡极锟�".split("");for(j=0;j!=D[194].length;++j)if(D[194][j].charCodeAt(0)!==65533){e[D[194][j]]=49664+j;d[49664+j]=D[194][j]}D[195]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鑱捐倎鑲傝倕鑲堣倞鑲嶈値鑲忚倫鑲戣倰鑲旇倳鑲楄倷鑲炶偅鑲﹁偋鑲ㄨ偓鑲拌偝鑲佃偠鑲歌偣鑲昏儏鑳囪儓鑳夎儕鑳嬭儚鑳愯儜鑳掕儞鑳旇儠鑳樿儫鑳犺儮鑳h儲鑳兊鑳疯児鑳昏兙鑳胯剙鑴佽剝鑴勮剠鑴囪剤鑴嬶拷鑴岃剷鑴楄剻鑴涜劀鑴濊劅鑴犺劇鑴㈣劊鑴よ劌鑴﹁劎鑴ㄨ劑鑴劔鑴劗鑴拌劤鑴磋劦鑴疯劰鑴鸿劵鑴艰劷鑴胯癌鑺掕尗鐩叉皳蹇欒幗鐚寘閿氭瘺鐭涢搯鍗寕鍐掑附璨岃锤涔堢帿鏋氭閰堕湁鐓ゆ病鐪夊獟闀佹瘡缇庢槯瀵愬濯氶棬闂蜂滑钀岃挋妾洘閿扮寷姊﹀瓱鐪啔闈$硿杩疯皽寮ョ背绉樿娉岃湝瀵嗗箓妫夌湢缁靛啎鍏嶅媺濞╃紖闈㈣嫍鎻忕瀯钘愮娓哄簷濡欒攽鐏皯鎶跨毧鏁忔偗闂芥槑铻熼福閾悕鍛借艾鎽革拷".split("");for(j=0;j!=D[195].length;++j)if(D[195][j].charCodeAt(0)!==65533){e[D[195][j]]=49920+j;d[49920+j]=D[195][j]}D[196]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鑵�鑵佽厒鑵冭厔鑵呰厙鑵夎厤鑵庤厪鑵掕厲鑵楄厴鑵涜厹鑵濊厼鑵熻叀鑵㈣叄鑵よ叇鑵ㄨ叒鑵叕鑵叢鑵宠叺鑵惰叿鑵歌唩鑶冭唲鑶呰唵鑶囪唹鑶嬭唽鑶嶈啂鑶愯啋鑶撹啍鑶曡問鑶楄啓鑶氳啚鑶熻啝鑶¤啟鑶よ啣锟借啩鑶╄啱鑶啳鑶啹鑶拌啽鑶茶喆鑶佃喍鑶疯喐鑶硅喖鑶借喚鑶胯噭鑷呰噰鑷堣噳鑷嬭噸鑷庤噺鑷愯噾鑷掕嚀鎽硅槕妯¤啘纾ㄦ懇榄旀姽鏈帿澧ㄩ粯娌紶瀵為檶璋嬬墴鏌愭媷鐗′憨濮嗘瘝澧撴毊骞曞嫙鎱曟湪鐩潶鐗х﹩鎷垮摢鍛愰挔閭e绾虫皷涔冨ザ鑰愬鍗楃敺闅惧泭鎸犺剳鎭奸椆娣栧憿棣佸唴瀚╄兘濡湏鍊偿灏兼嫙浣犲尶鑵婚�嗘汉钄媹骞寸⒕鎾垫嵒蹇靛閰块笩灏挎崗鑱傚鍟晩闀嶆秴鎮ㄦ煚鐙炲嚌瀹侊拷".split("");for(j=0;j!=D[196].length;++j)if(D[196][j].charCodeAt(0)!==65533){e[D[196][j]]=50176+j;d[50176+j]=D[196][j]}D[197]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鑷旇嚂鑷栬嚄鑷樿嚈鑷氳嚊鑷滆嚌鑷炶嚐鑷犺嚒鑷㈣嚖鑷ヨ嚘鑷ㄨ嚛鑷嚠鑷嚢鑷辫嚥鑷佃嚩鑷疯嚫鑷硅嚭鑷借嚳鑸冭垏鑸堣垑鑸婅垕鑸庤垙鑸戣垞鑸曡垨鑸楄垬鑸欒垰鑸濊垹鑸よ垾鑸﹁埀鑸╄埉鑸茶埡鑸艰埥鑸匡拷鑹�鑹佽墏鑹冭墔鑹嗚増鑹婅墝鑹嶈墡鑹愯墤鑹掕墦鑹旇墪鑹栬墬鑹欒墰鑹滆墲鑹炶墵鑹¤墷鑹h墹鑹ヨ墻鑹ц墿鎷ф碁鐗涙壄閽航鑴撴祿鍐滃紕濂村姫鎬掑コ鏆栬檺鐤熸尓鎳︾朝璇哄摝娆ч弗娈磋棔鍛曞伓娌ゅ暘瓒寸埇甯曟�曠惗鎷嶆帓鐗屽緲婀冩淳鏀�娼樼洏纾愮浖鐣斿垽鍙涗箵搴炴梺鑰儢鎶涘拞鍒ㄧ偖琚嶈窇娉″懜鑳氬煿瑁磋禂闄厤浣╂矝鍠风泦鐮版姩鐑规編褰摤妫氱〖绡疯啫鏈嬮箯鎹х鍧爳闇规壒鎶妶鐞垫瘲锟�".split("");for(j=0;j!=D[197].length;++j)if(D[197][j].charCodeAt(0)!==65533){e[D[197][j]]=50432+j;d[50432+j]=D[197][j]}D[198]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鑹壂鑹壄鑹辫壍鑹惰壏鑹歌壔鑹艰妧鑺佽妰鑺呰妴鑺囪妷鑺岃姁鑺撹姅鑺曡姈鑺氳姏鑺炶姞鑺㈣姡鑺ц姴鑺佃姸鑺鸿娀鑺艰娍鑻�鑻傝媰鑻呰媶鑻夎嫄鑻栬嫏鑻氳嫕鑻㈣嫥鑻ㄨ嫨鑻嫭鑻嫯鑻拌嫴鑻宠嫷鑻惰嫺锟借嫼鑻艰嫿鑻捐嬁鑼�鑼婅寢鑼嶈寪鑼掕寭鑼栬寴鑼欒対鑼炶専鑼犺尅鑼㈣專鑼よ尌鑼﹁尒鑼尞鑼拌尣鑼疯尰鑼藉暏鑴剧柌鐨尮鐥炲兓灞佽绡囧亸鐗囬獥椋樻紓鐡㈢エ鎾囩灔鎷奸璐搧鑱樹箳鍧嫻钀嶅钩鍑摱璇勫睆鍧℃臣棰囧﹩鐮撮瓌杩矔鍓栨墤閾轰粏鑾嗚憽鑿╄挷鍩旀湸鍦冩櫘娴﹁氨鏇濈�戞湡娆烘爾鎴氬涓冨噭婕嗘煉娌忓叾妫嬪姝х暒宕庤剱榻愭棗绁堢楠戣捣宀備篂浼佸惎濂戠爩鍣ㄦ皵杩勫純姹芥常璁帎锟�".split("");for(j=0;j!=D[198].length;++j)if(D[198][j].charCodeAt(0)!==65533){e[D[198][j]]=50688+j;d[50688+j]=D[198][j]}D[199]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鑼捐尶鑽佽崅鑽勮崊鑽堣崐鑽嬭崒鑽嶈崕鑽撹崟鑽栬崡鑽樿崣鑽濊崲鑽拌嵄鑽茶嵆鑽磋嵉鑽惰嵐鑽鸿嵕鑽胯巰鑾佽巶鑾冭巹鑾囪巿鑾婅帇鑾岃帊鑾忚帎鑾戣帞鑾曡帠鑾楄帣鑾氳帩鑾熻帯鑾㈣帲鑾よ帴鑾﹁帶鑾幁鑾拷鑾幍鑾昏幘鑾胯弬鑿冭弰鑿嗚張鑿夎弸鑿嶈弾鑿愯彂鑿掕彄鑿曡彈鑿欒彋鑿涜彏鑿㈣彛鑿よ彟鑿ц彣鑿彫鑿伆娲界壍鎵﹂拵閾呭崈杩佺浠熻唉涔鹃粩閽遍挸鍓嶆綔閬f祬璋村爲宓屾瑺姝夋灙鍛涜厰缇屽钄峰己鎶㈡﹪閿规暡鎮勬ˉ鐬т箶渚ㄥ阀闉樻挰缈樺抄淇忕獚鍒囪寗涓旀�獌閽︿镜浜茬Е鐞村嫟鑺规搾绂藉瘽娌侀潚杞绘阿鍊惧嵖娓呮搸鏅存鞍鎯呴》璇峰簡鐞肩┓绉嬩笜閭辩悆姹傚洑閰嬫硡瓒嬪尯铔嗘洸韬眻椹辨笭锟�".split("");for(j=0;j!=D[199].length;++j)if(D[199][j].charCodeAt(0)!==65533){e[D[199][j]]=50944+j;d[50944+j]=D[199][j]}D[200]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鑿彲鑿宠彺鑿佃彾鑿疯徍鑿昏徏鑿捐徔钀�钀傝悈钀囪悎钀夎悐钀愯悞钀撹悢钀曡悥钀楄悪钀氳悰钀炶悷钀犺悺钀㈣悾钀╄惇钀惉钀惍钀惏钀茶惓钀磋惖钀惰惙钀硅惡钀昏惥钀胯憖钁佽憘钁冭憚钁呰憞钁堣憠锟借憡钁嬭憣钁嶈憥钁忚憪钁掕憮钁旇憰钁栬憳钁濊憺钁熻憼钁㈣懁钁ヨ懄钁ц懆钁懏钁懓钁茶懘钁疯懝钁昏懠鍙栧ǘ榫嬭叮鍘诲湀棰ф潈閱涙硥鍏ㄧ棅鎷崇姮鍒稿姖缂虹倲鐦稿嵈楣婃Ψ纭泙瑁欑兢鐒剁噧鍐夋煋鐡ゅ¥鏀樺毞璁╅ザ鎵扮粫鎯圭儹澹粊浜哄繊闊т换璁ゅ垉濡婄韩鎵斾粛鏃ユ垘鑼歌搲鑽h瀺鐔旀憾瀹圭粧鍐楁弶鏌旇倝鑼硅爼鍎掑濡傝颈涔虫睗鍏ヨぅ杞槷钑婄憺閿愰棸娑﹁嫢寮辨拻娲掕惃鑵硟濉炶禌涓夊弫锟�".split("");for(j=0;j!=D[200].length;++j)if(D[200][j].charCodeAt(0)!==65533){e[D[200][j]]=51200+j;d[51200+j]=D[200][j]}D[201]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷钁借懢钁胯拃钂佽拑钂勮拝钂嗚拪钂嶈拸钂愯拺钂掕挀钂旇挄钂栬挊钂氳挍钂濊挒钂熻挔钂㈣挘钂よ挜钂﹁挧钂ㄨ挬钂挮钂挱钂挵钂辫挸钂佃挾钂疯捇钂艰捑钃�钃傝搩钃呰搯钃囪搱钃嬭搶钃庤搹钃掕摂钃曡摋锟借摌钃欒摎钃涜摐钃炶摗钃㈣摛钃ц摠钃╄摢钃摥钃摨钃辫摬钃宠摯钃佃摱钃疯摳钃硅摵钃昏摻钃捐攢钄佽攤浼炴暎妗戝棑涓ф悢楠氭壂瀚傜憻鑹叉订妫儳鑾庣爞鏉�鍒规矙绾卞偦鍟ョ厼绛涙檼鐝婅嫬鏉夊北鍒犵吔琛棯闄曟搮璧¤喅鍠勬睍鎵囩籍澧掍激鍟嗚祻鏅屼笂灏氳3姊㈡崕绋嶇儳鑺嶅嫼闊跺皯鍝ㄩ偟缁嶅ア璧婅泧鑸岃垗璧︽憚灏勬厬娑夌ぞ璁剧牱鐢冲懟浼歌韩娣卞缁呯娌堝濠剁敋鑲炬厧娓楀0鐢熺敟鐗插崌缁筹拷".split("");for(j=0;j!=D[201].length;++j)if(D[201][j].charCodeAt(0)!==65533){e[D[201][j]]=51456+j;d[51456+j]=D[201][j]}D[202]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷钄冭攧钄呰攩钄囪攬钄夎攰钄嬭攳钄庤攺钄愯敀钄旇敃钄栬敇钄欒敍钄滆敐钄炶敔钄㈣敚钄よ敟钄﹁敡钄ㄨ敥钄敪钄敮钄拌敱钄茶敵钄磋數钄惰斁钄胯晙钑佽晜钑勮晠钑嗚晣钑嬭晫钑嶈晭钑忚晲钑戣晵钑撹晹钑曪拷钑楄晿钑氳暃钑滆暆钑熻暊钑¤暍钑h暐钑﹁暓钑╄暘钑暚钑暜钑暟钑辫暢钑佃暥钑疯暩钑艰暯钑胯杸钖佺渷鐩涘墿鑳滃湥甯堝け鐙柦婀胯瘲灏歌櫛鍗佺煶鎷炬椂浠�椋熻殌瀹炶瘑鍙茬煝浣垮睅椹跺寮忕ず澹笘鏌夸簨鎷獡閫濆娍鏄棞鍣�備粫渚嶉噴楗版皬甯傛亙瀹よ璇曟敹鎵嬮瀹堝鎺堝敭鍙楃槮鍏借敩鏋㈡⒊娈婃姃杈撳彅鑸掓窇鐤忎功璧庡鐔熻柉鏆戞洐缃茶渶榛嶉紶灞炴湳杩版爲鏉熸垗绔栧搴舵暟婕憋拷".split("");for(j=0;j!=D[202].length;++j)if(D[202][j].charCodeAt(0)!==65533){e[D[202][j]]=51712+j;d[51712+j]=D[202][j]}D[203]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷钖傝杻钖嗚枅钖夎枈钖嬭枌钖嶈枎钖愯枒钖掕枔钖旇枙钖栬枟钖樿枡钖氳枬钖炶枱钖犺枴钖㈣枺钖ヨ枽钖ц柀钖柆钖柋钖茶柍钖磋柕钖惰柛钖鸿柣钖艰柦钖捐柨钘�钘傝梼钘勮梾钘嗚棁钘堣棅钘嬭棇钘嶈棊钘戣棐锟借棓钘栬棗钘樿棛钘氳棝钘濊棡钘熻棤钘¤棦钘h棩钘﹁棫钘ㄨ棯钘棳钘棶钘棸钘辫棽钘宠棿钘佃椂钘疯椄鎭曞埛鑰嶆憯琛扮敥甯呮爴鎷撮湝鍙岀埥璋佹按鐫$◣鍚灛椤鸿垳璇寸鏈旂儊鏂挄鍢舵�濈鍙镐笣姝昏倖瀵哄棧鍥涗己浼奸ゲ宸虫澗鑰告�傞閫佸畫璁艰鎼滆墭鎿炲椊鑻忛叆淇楃礌閫熺矡鍍冲婧璇夎們閰歌挏绠楄櫧闅嬮殢缁ラ珦纰庡瞾绌楅亗闅х瀛欐崯绗嬭搼姊攩缂╃悙绱㈤攣鎵�濉屼粬瀹冨ス濉旓拷".split("");for(j=0;j!=D[203].length;++j)if(D[203][j].charCodeAt(0)!==65533){e[D[203][j]]=51968+j;d[51968+j]=D[203][j]}D[204]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷钘硅椇钘艰椊钘捐榾铇佽槀铇冭槃铇嗚槆铇堣槈铇婅構铇岃槏铇庤槒铇愯槖铇撹様铇曡槜铇樿槞铇氳槢铇滆槤铇炶槦铇犺槨铇㈣槪铇よ槬铇﹁槰铇槴铇槶铇槸铇拌槺铇茶槼铇磋樀铇惰樂铇硅樅铇昏樈铇捐樋铏�锟借檨铏傝檭铏勮檯铏嗚檱铏堣檳铏婅檵铏岃檼铏撹檿铏栬櫁铏樿櫃铏涜櫆铏濊櫉铏犺櫋铏h櫎铏ヨ櫐铏ц櫒铏╄櫔鐛尀韫嬭笍鑳庤嫈鎶彴娉伴厼澶�佹卑鍧嶆憡璐槴婊╁潧妾�鐥版江璋皥鍧︽琚掔⒊鎺㈠徆鐐堡濉樻惇鍫傛鑶涘攼绯栧�樿汉娣岃稛鐑帍娑涙粩缁﹁悇妗冮�冩窐闄惰濂楃壒钘よ吘鐤艰獖姊墧韪㈤攽鎻愰韫勫暭浣撴浛鍤忔儠娑曞墐灞夊ぉ娣诲~鐢扮敎鎭垟鑵嗘寫鏉¤竣鐪鸿烦璐撮搧甯栧巺鍚儍锟�".split("");for(j=0;j!=D[204].length;++j)if(D[204][j].charCodeAt(0)!==65533){e[D[204][j]]=52224+j;d[52224+j]=D[204][j]}D[205]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷铏櫙铏拌櫜铏宠櫞铏佃櫠铏疯櫢铓冭殑铓呰殕铓囪殘铓夎殠铓忚殣铓戣殥铓旇殩铓楄殬铓欒殮铓涜殲铓熻殸铓¤殺铓ヨ殾铓毉铓毑铓宠毞铓歌毠铓昏毤铓借毦铓胯泚铔傝泝铔呰泩铔岃泹铔掕洆铔曡洊铔楄洑铔滐拷铔濊洜铔¤洟铔h洢铔﹁洤铔ㄨ洩铔洭铔浀铔惰浄铔鸿浕铔艰浗铔胯渷铚勮渽铚嗚湅铚岃湈铚忚湊铚戣湐铚栨眬寤峰仠浜涵鎸鸿墖閫氭閰灣鍚岄摐褰ょ妗舵崊绛掔粺鐥涘伔鎶曞ご閫忓嚫绉冪獊鍥惧緬閫旀秱灞犲湡鍚愬厰婀嶅洟鎺ㄩ鑵胯湑瑜��鍚炲悲鑷�鎷栨墭鑴遍傅闄�椹┘妞Ε鎷撳斁鎸栧搰铔欐醇濞冪摝琚滄澶栬睂寮咕鐜╅〗涓哥兎瀹岀鎸芥櫄鐨栨儖瀹涘涓囪厱姹帇浜℃瀴缃戝線鏃烘湜蹇樺濞侊拷".split("");for(j=0;j!=D[205].length;++j)if(D[205][j].charCodeAt(0)!==65533){e[D[205][j]]=52480+j;d[52480+j]=D[205][j]}D[206]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷铚欒湜铚濊湡铚犺湦铚﹁湩铚ㄨ湭铚湰铚湳铚拌湶铚宠湹铚惰湼铚硅満铚艰溄铦�铦佽潅铦冭潉铦呰潌铦婅潒铦嶈潖铦愯潙铦掕潝铦曡潠铦樿潥铦涜潨铦濊潪铦熻潯铦㈣潶铦ц潹铦╄潽铦潿铦澂铦辫澆铦宠澋锟借澐铦歌澒铦鸿澘铻�铻佽瀯铻嗚瀲铻夎瀶铻岃瀻铻忚瀽铻戣瀿铻旇灂铻栬灅铻欒灇铻涜灉铻濊灋铻犺灐铻㈣灒铻ゅ穽寰嵄闊﹁繚妗呭洿鍞儫涓烘綅缁磋媷钀庡浼熶吉灏剧含鏈敋鍛崇晱鑳冨杺榄忎綅娓皳灏夋叞鍗槦娓╄殜鏂囬椈绾瑰惢绋崇磰闂棥缈佺摦鎸濊湕娑$獫鎴戞枴鍗ф彙娌冨帆鍛滈挩涔屾薄璇眿鏃犺姕姊у惥鍚存瘚姝︿簲鎹傚崍鑸炰紞渚潪鎴婇浘鏅ょ墿鍕垮姟鎮熻鏄旂啓鏋愯タ纭掔熃鏅板樆鍚搁敗鐗猴拷".split("");for(j=0;j!=D[206].length;++j)if(D[206][j].charCodeAt(0)!==65533){e[D[206][j]]=52736+j;d[52736+j]=D[206][j]}D[207]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷铻ヨ灕铻ц灘铻灝铻拌灡铻茶灤铻惰灧铻歌灩铻昏灱铻捐灴锜佽焸锜冭焺锜呰焽锜堣焿锜岃煃锜庤煆锜愯煍锜曡煐锜楄煒锜欒煔锜滆煗锜炶煙锜¤煝锜h煠锜﹁煣锜ㄨ煩锜煬锜煰锜拌煴锜茶煶锜磋煹锜惰煼锜革拷锜鸿熁锜艰熃锜胯爛锠佽爞锠勮爡锠嗚爣锠堣爥锠嬭爩锠嶈爭锠忚爯锠戣爳锠旇牀锠樿牂锠氳牅锠濊牉锠熻牋锠g█鎭笇鎮夎啙澶曟儨鐔勭儻婧睈鐘�妾勮甯範濯冲枩閾f礂绯婚殭鎴忕粏鐬庤櫨鍖i湠杈栨殗宄′緺鐙笅鍘﹀鍚撴巰閿ㄥ厛浠欓矞绾ゅ捀璐よ鑸烽棽娑庡鸡瀚屾樉闄╃幇鐚幙鑵洪缇″闄烽檺绾跨浉鍘㈤暥棣欑瑗勬箻涔$繑绁ヨ鎯冲搷浜」宸锋鍍忓悜璞¤惂纭濋渼鍓婂摦鍤i攢娑堝娣嗘檽锟�".split("");for(j=0;j!=D[207].length;++j)if(D[207][j].charCodeAt(0)!==65533){e[D[207][j]]=52992+j;d[52992+j]=D[207][j]}D[208]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锠よ牓锠﹁牕锠ㄨ牘锠牜锠牠锠牤锠拌牨锠宠牬锠佃牰锠疯牳锠鸿牷锠借牼锠胯琛傝琛嗚琛堣琛婅琛庤琛愯琛掕琛曡琛樿琛涜琛濊琛熻琛﹁¨琛…琛”琛宠〈琛佃《琛歌」琛猴拷琛昏〖琚�琚冭琚囪琚婅琚庤琚愯琚撹琚曡琚樿琚氳琚濊琚熻琚¤ⅲ琚ヨⅵ琚цⅷ琚╄ⅹ灏忓瓭鏍¤倴鍟哥瑧鏁堟浜涙瓏铦庨瀷鍗忔専鎼洪偑鏂滆儊璋愬啓姊板嵏锜规噲娉勬郴璋㈠睉钖姱閿屾杈涙柊蹇诲績淇¤鏄熻叆鐚╂兒鍏村垜鍨嬪舰閭㈣閱掑垢鏉忔�у鍏勫嚩鑳稿寛姹归泟鐔婁紤淇緸鏈藉梾閿堢琚栫唬澧熸垖闇�铏氬槝椤诲緪璁歌搫閰楀彊鏃簭鐣滄仱绲┛缁画杞╁枾瀹f偓鏃嬬巹锟�".split("");
+for(j=0;j!=D[208].length;++j)if(D[208][j].charCodeAt(0)!==65533){e[D[208][j]]=53248+j;d[53248+j]=D[208][j]}D[209]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷琚琚琚茶⒊琚磋⒌琚惰⒏琚硅⒑琚昏⒔琚捐⒖瑁�瑁冭瑁囪瑁婅瑁岃瑁忚瑁戣瑁栬瑁氳瑁滆瑁炶瑁¤&瑁ц)瑁+瑁-瑁/瑁茶5瑁惰7瑁鸿;瑁借?瑜�瑜佽瑜勮瑜嗚瑜堬拷瑜夎瑜岃瑜庤瑜戣瑜曡瑜楄瑜滆瑜炶瑜犺あ瑜hい瑜﹁ぇ瑜ㄨぉ瑜き瑜く瑜辫げ瑜宠さ瑜烽�夌櫍鐪╃粴闈磋枦瀛︾┐闆鍕嬬啅寰棳璇㈠椹贰娈夋睕璁閫婅繀鍘嬫娂楦﹂腑鍛�涓娊鐗欒殰宕栬娑泤鍝戜簹璁剁剦鍜介槈鐑熸饭鐩愪弗鐮旇湌宀╁欢瑷�棰滈槑鐐庢部濂勬帺鐪艰婕旇壋鍫扮嚂鍘岀牃闆佸攣褰︾劙瀹磋皻楠屾畠澶腐绉ф潹鎵蒋鐤$緤娲嬮槼姘т话鐥掑吇鏍锋季閭�鑵板鐟讹拷".split("");for(j=0;j!=D[209].length;++j)if(D[209][j].charCodeAt(0)!==65533){e[D[209][j]]=53504+j;d[53504+j]=D[209][j]}D[210]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷瑜歌す瑜鸿せ瑜艰そ瑜捐た瑗�瑗傝瑗呰瑗囪瑗夎瑗嬭瑗嶈瑗忚瑗戣瑗撹瑗曡瑗楄瑗欒瑗涜瑗濊瑗¤ア瑗hイ瑗ヨェ瑗ㄨォ瑗カ瑗キ瑗ク瑗拌ケ瑗茶コ瑗磋サ瑗惰シ瑗歌ス瑗鸿ゼ锟借ソ瑗捐瑕傝瑕呰瑕堣瑕婅瑕岃瑕庤瑕愯瑕掕瑕旇瑕栬瑕樿瑕氳瑕滆瑕炶瑕犺Α鎽囧哀閬ョ獞璋e鍜垁鑽鑰�妞板檸鑰剁埛閲庡喍涔熼〉鎺栦笟鍙舵洺鑵嬪娑蹭竴澹瑰尰鎻栭摫渚濅紛琛i澶烽仐绉讳华鑳扮枒娌傚疁濮ㄥ綕妞呰殎鍊氬凡涔欑煟浠ヨ壓鎶戞槗閭戝惫浜垮焦鑷嗛�歌倓鐤害瑁旀剰姣呭繂涔夌泭婧㈣璁皧璇戝紓缈肩繉缁庤尩鑽洜娈烽煶闃村Щ鍚熼摱娣瘏楗肮寮曢殣锟�".split("");for(j=0;j!=D[210].length;++j)if(D[210][j].charCodeAt(0)!==65533){e[D[210][j]]=53760+j;d[53760+j]=D[210][j]}D[211]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷瑕㈣Γ瑕よΕ瑕﹁Η瑕ㄨΙ瑕Λ瑕Ν瑕Ο瑕拌Ρ瑕茶Τ瑕磋Φ瑕惰Ψ瑕歌瑕鸿瑕艰瑕捐瑙�瑙冭瑙撹瑙曡瑙樿瑙涜瑙熻瑙¤Б瑙よЁ瑙ㄨЗ瑙К瑙М瑙拌П瑙茶Т瑙佃Ф瑙疯Ц瑙硅Ш锟借Щ瑙艰Ы瑙捐Э瑷佽▊瑷冭▌瑷呰▎瑷堣▔瑷婅▼瑷岃◢瑷庤◤瑷愯☉瑷掕〒瑷旇〞瑷栬瑷樿瑷氳瑷滆鍗拌嫳妯卞┐楣板簲缂ㄨ幑钀よ惀鑽ц潎杩庤耽鐩堝奖棰栫‖鏄犲摕鎷ヤ剑鑷冪棃搴搁泹韪婅浌鍜忔吵娑屾案鎭垮媷鐢ㄥ菇浼樻偁蹇у挨鐢遍偖閾�鐘规补娓搁厜鏈夊弸鍙充綉閲夎鍙堝辜杩傛筏浜庣泜姒嗚櫈鎰氳垎浣欎繛閫鹃奔鎰夋笣娓旈殔浜堝ū闆ㄤ笌灞跨瀹囪缇界帀鍩熻妺閮佸悂閬囧柣宄尽鎰堟鐙辫偛瑾夛拷".split("");for(j=0;j!=D[211].length;++j)if(D[211][j].charCodeAt(0)!==65533){e[D[211][j]]=54016+j;d[54016+j]=D[211][j]}D[212]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷瑷炶瑷犺ā瑷㈣ǎ瑷よē瑷﹁ě瑷ㄨī瑷ǐ瑷ō瑷ǒ瑷拌ū瑷茶ǔ瑷磋ǖ瑷惰ǚ瑷歌ü瑷鸿ɑ瑷艰ń瑷胯﹢瑭佽﹤瑭冭﹦瑭呰﹩瑭囪瑭婅瑭岃瑭庤瑭愯瑭掕瑭旇瑭栬瑭樿瑭氳瑭滆瑭烇拷瑭熻瑭¤瑭h─瑭ヨ│瑭ц┄瑭╄┆瑭┈瑭┊瑭┌瑭辫┎瑭宠┐瑭佃┒瑭疯└瑭鸿┗瑭艰┙瑭捐┛瑾�娴村瘬瑁曢璞┉楦虫笂鍐ゅ厓鍨h鍘熸彺杈曞洯鍛樺渾鐚挎簮缂樿繙鑻戞効鎬ㄩ櫌鏇扮害瓒婅穬閽ュ渤绮ゆ湀鎮﹂槄鑰樹簯閮у寑闄ㄥ厑杩愯暣閰濇檿闊靛瓡鍖濈牳鏉傛牻鍝夌伨瀹拌浇鍐嶅湪鍜辨敀鏆傝禐璧冭剰钁伃绯熷嚳钘绘灒鏃╂尽铓よ簛鍣�犵殏鐏剁嚗璐f嫨鍒欐辰璐兼�庡鎲庢浘璧犳墡鍠虫福鏈涧锟�".split("");for(j=0;j!=D[212].length;++j)if(D[212][j].charCodeAt(0)!==65533){e[D[212][j]]=54272+j;d[54272+j]=D[212][j]}D[213]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷瑾佽獋瑾冭獎瑾呰獑瑾囪獔瑾嬭獙瑾嶈獛瑾忚獝瑾戣獟瑾旇獣瑾栬獥瑾樿獧瑾氳獩瑾滆獫瑾炶獰瑾犺瑾㈣瑾よ瑾﹁瑾ㄨ瑾瑾瑾瑾拌瑾茶瑾磋瑾惰瑾歌瑾鸿瑾艰瑾捐璜�璜佽珎锟借珒璜勮珔璜嗚珖璜堣珘璜婅珛璜岃珝璜庤珡璜愯珣璜掕珦璜旇珪璜栬珬璜樿珯璜氳珱璜滆珴璜炶珶璜犺璜㈣閾¢椄鐪ㄦ爡姒ㄥ拫涔嶇偢璇堟憳鏂嬪畢绐勫�哄鐬绘瑭圭矘娌剧洀鏂╄緱宕睍铇告爤鍗犳垬绔欐箾缁芥绔犲桨婕冲紶鎺屾定鏉栦笀甯愯处浠楄儉鐦撮殰鎷涙槶鎵炬布璧电収缃╁厗鑲囧彫閬姌鍝茶洶杈欒�呴敆钄楄繖娴欑弽鏂熺湡鐢勭牕鑷昏礊閽堜睛鏋曠柟璇婇渿鎸晣闃佃捀鎸g潄寰佺嫲浜夋�旀暣鎷鏀匡拷".split("");for(j=0;j!=D[213].length;++j)if(D[213][j].charCodeAt(0)!==65533){e[D[213][j]]=54528+j;d[54528+j]=D[213][j]}D[214]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷璜よ璜﹁璜ㄨ璜璜璜璜拌璜茶璜磋璜惰璜歌璜鸿璜艰璜捐璎�璎佽瑐璎冭瑒璎呰瑔璎堣瑝璎婅瑡璎岃瑣璎庤瑥璎愯瑧璎掕瑩璎旇瑫璎栬瑮璎樿瑱璎氳瑳璎滆瑵璎炶瑹璎犺璎㈣锟借璎ヨ璎ㄨ璎璎璎璎拌璎茶璎磋璎惰璎歌璎鸿璎艰璎捐璀�璀佽瓊璀冭瓌璀呭抚鐥囬儜璇佽姖鏋濇敮鍚辫湗鐭ヨ偄鑴傛眮涔嬬粐鑱岀洿妞嶆畺鎵у�间緞鍧�鎸囨瓒惧彧鏃ㄧ焊蹇楁寶鎺疯嚦鑷寸疆甯滃硻鍒舵櫤绉╃璐ㄧ倷鐥旀粸娌荤獟涓泤蹇犻挓琛风粓绉嶈偪閲嶄徊浼楄垷鍛ㄥ窞娲茶瘜绮ヨ酱鑲樺笟鍜掔毐瀹欐樇楠ょ彔鏍洓鏈辩尓璇歌瘺閫愮鐑涚叜鎷勭灘鍢变富钁楁煴鍔╄泙璐摳绛戯拷".split("");for(j=0;j!=D[214].length;++j)if(D[214][j].charCodeAt(0)!==65533){e[D[214][j]]=54784+j;d[54784+j]=D[214][j]}D[215]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷璀嗚瓏璀堣瓑璀婅瓔璀岃瓖璀庤瓘璀愯瓚璀掕瓝璀旇瓡璀栬瓧璀樿瓩璀氳瓫璀滆瓭璀炶瓱璀犺璀㈣璀よ璀ц璀╄璀璀璀拌璀茶璀磋璀惰璀歌璀鸿璀艰璀捐璁�璁佽畟璁冭畡璁呰畣锟借畤璁堣畨璁婅畫璁岃畭璁庤畯璁愯畱璁掕畵璁旇畷璁栬畻璁樿畽璁氳疀璁滆疂璁炶疅璁璁昏瘒璇愯璋夎盀浣忔敞绁濋┗鎶撶埅鎷戒笓鐮栬浆鎾拌禋绡嗘々搴勮濡嗘挒澹姸妞庨敟杩借禈鍧犵紑璋嗗噯鎹夋嫏鍗撴鐞㈣寔閰屽晞鐫�鐏兼祳鍏瑰挩璧勫Э婊嬫穭瀛滅传浠旂苯婊撳瓙鑷笉瀛楅瑑妫曡釜瀹楃患鎬荤旱閭硅蛋濂忔弽绉熻冻鍗掓棌绁栬瘏闃荤粍閽荤簜鍢撮唹鏈�缃皧閬垫槰宸︿綈鏌炲仛浣滃潗搴э拷锟斤拷锟斤拷锟�".split("");for(j=0;j!=D[215].length;++j)if(D[215][j].charCodeAt(0)!==65533){e[D[215][j]]=55040+j;d[55040+j]=D[215][j]}D[216]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷璋歌肮璋鸿盎璋艰敖璋捐翱璞�璞傝眱璞勮眳璞堣眾璞嬭睄璞庤睆璞愯睉璞掕睋璞旇睎璞楄睒璞欒睕璞滆睗璞炶睙璞犺保璞よ饱璞﹁抱璞ㄨ暴璞杯璞悲璞拌北璞茶贝璞佃倍璞疯被璞艰苯璞捐笨璨�璨佽矁璨勮矄璨囷拷璨堣矉璨嶈矌璨忚矏璨戣矑璨撹矔璨栬矖璨欒矚璨涜矞璨濊矠璨熻矤璨¤并璨h菠璨ヨ拨璨ц波璨╄勃璨铂璨簫涓屽厐涓愬豢鍗呬笗浜樹笧楝插鍣╀辅绂轰缚鍖曚箛澶埢鍗皭鍥熻儰棣楁瘬鐫鹃紬涓朵簾榧愪箿涔╀簱鑺堝瓫鍟槒浠勫帊鍘濆帲鍘ュ幃闈ヨ禎鍖氬彽鍖﹀尞鍖捐禍鍗﹀崳鍒傚垐鍒庡埈鍒冲埧鍓�鍓屽墳鍓″墱钂壗鍔傚妬鍔愬姄鍐傜綌浜讳粌浠変粋浠ㄤ弧浠粸浼涗怀浼饯浠典讥浼т級浼綖浣ф敻浣氫綕锟�".split("");for(j=0;j!=D[216].length;++j)if(D[216][j].charCodeAt(0)!==65533){e[D[216][j]]=55296+j;d[55296+j]=D[216][j]}D[217]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷璨帛璨拌脖璨茶渤璨磋驳璨惰卜璨歌补璨鸿不璨艰步璨捐部璩�璩佽硞璩冭硠璩呰硢璩囪硤璩夎硦璩嬭硨璩嶈硯璩忚硱璩戣硳璩撹硵璩曡硸璩楄硺璩欒硽璩涜硿璩濊碁璩熻碃璩¤尝璩h长璩ヨ肠璩ц敞璩╄唱璩超锟借抄璩朝璩拌潮璩茶吵璩磋车璩惰撤璩歌彻璩鸿郴璩艰辰璩捐晨璐�璐佽磦璐冭磩璐呰磫璐囪磮璐夎磰璐嬭磳璐嶄綗浣椾疾浼戒蕉浣翠緫渚変緝渚忎骄浣讳惊浣间粳渚斾喀淇ㄤ开淇呬繗淇d繙淇戜繜淇稿�╁亴淇冲��忓��烤鍊滃�屽�ュ�ㄥ伨鍋冨仌鍋堝亷鍋伝鍌ュ偋鍌╁偤鍍栧剢鍍儸鍍﹀儺鍎囧剫浠濇敖浣樹渐淇庨緺姹嗙贝鍏方榛夐鍐佸鍕瑰實瑷囧寪鍑鍏曚籂鍏栦撼琛ⅳ浜佃剶瑁掔瀣磋爟缇稿啱鍐卞喗鍐硷拷".split("");for(j=0;j!=D[217].length;++j)if(D[217][j].charCodeAt(0)!==65533){e[D[217][j]]=55552+j;d[55552+j]=D[217][j]}D[218]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷璐庤磸璐愯磻璐掕磽璐旇磿璐栬礂璐樿礄璐氳礇璐滆礌璧戣祾璧楄禑璧ヨ胆璧╄氮璧诞璧当璧茶蹈璧硅岛璧昏导璧借稻璧胯秬瓒傝秲瓒嗚秶瓒堣秹瓒岃秿瓒庤稄瓒愯稈瓒撹稌瓒栬稐瓒樿稒瓒氳稕瓒滆稘瓒炶稜瓒★拷瓒㈣钉瓒ヨ鼎瓒ц定瓒╄丢瓒冬瓒懂瓒栋瓒茶抖瓒疯豆瓒昏督璺�璺佽穫璺呰穱璺堣穳璺婅穽璺愯窉璺撹窋鍑囧問鍐㈠啣璁犺璁ц璁磋璁疯瘋璇冭瘚璇忚瘞璇掕瘬璇旇瘱璇樿瘷璇滆療璇犺璇ㄨ璇璇宠璇硅璇胯皜璋傝皠璋囪皩璋忚皯璋掕皵璋曡皷璋欒皼璋樿皾璋熻盃璋¤哎璋ц蔼璋爱璋安璋宠暗璋跺崺鍗洪槤闃㈤槨闃遍槳闃介樇闄傞檳闄旈櫉闄ч櫖闄查櫞闅堥殟闅楅毎閭楅倹閭濋倷閭偂閭撮偝閭堕偤锟�".split("");for(j=0;j!=D[218].length;++j)if(D[218][j].charCodeAt(0)!==65533){e[D[218][j]]=55808+j;d[55808+j]=D[218][j]}D[219]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷璺曡窐璺欒窚璺犺贰璺㈣伐璺﹁阀璺╄翻璺钒璺辫凡璺磋范璺艰肪璺胯竴韪佽競韪冭竸韪嗚竾韪堣笅韪嶈笌韪愯笐韪掕笓韪曡笘韪楄笜韪欒笟韪涜笢韪犺浮韪よ弗韪﹁抚韪ㄨ斧韪赴韪茶赋韪磋付韪疯父韪昏讣韪撅拷韪胯箖韫呰箚韫岃箥韫庤箯韫愯箵韫旇箷韫栬箺韫樿箽韫涜箿韫濊篂韫熻範韫¤耿韫h工韫ヨ恭韫ㄨ躬韫巩韫遍偢閭伴儚閮呴偩閮愰儎閮囬儞閮﹂儮閮滈儣閮涢儷閮兙閯勯劉閯為劊閯遍劘閯归厓閰嗗垗濂傚姠鍔姯鍔惧摽鍕愬嫋鍕板彑鐕煃寤村嚨鍑奸鍘跺紒鐣氬矾鍧屽灘鍨″【澧煎澹戝湬鍦湭鍦冲湽鍦湳鍧滃溁鍧傚潻鍨呭潾鍨嗗澕鍧诲潹鍧澏鍧冲灜鍨ゅ瀸鍨插煆鍨у灤鍨撳灎鍩曞煒鍩氬煓鍩掑灨鍩村煰鍩稿煠鍩濓拷".split("");for(j=0;j!=D[219].length;++j)if(D[219][j].charCodeAt(0)!==65533){e[D[219][j]]=56064+j;d[56064+j]=D[219][j]}D[220]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷韫宠沟韫疯垢韫硅购韫昏菇韫捐簚韬傝簝韬勮簡韬堣簤韬婅簨韬岃簫韬庤簯韬掕簱韬曡簴韬楄簶韬欒簹韬涜簼韬熻籂韬¤孩韬h氦韬ヨ害韬ц酣韬╄邯韬寒韬拌罕韬宠捍韬佃憾韬疯焊韬硅夯韬艰航韬捐嚎杌�杌佽粋锟借粌杌勮粎杌嗚粐杌堣粔杌婅粙杌岃粛杌忚粣杌戣粧杌撹粩杌曡粬杌楄粯杌欒粴杌涜粶杌濊粸杌熻粻杌¤虎杌h护鍫嬪爫鍩藉煭鍫�鍫炲牂濉勫牋濉ュ‖澧佸澧氬棣ㄩ紮鎳胯壒鑹借壙鑺忚妸鑺ㄨ妱鑺庤姂鑺楄姍鑺姼鑺捐姲鑻堣媻鑻h姌鑺疯姰鑻嬭媽鑻佽姪鑺磋姟鑺姛鑻勮嫀鑺よ嫛鑼夎嫹鑻よ審鑼囪嫓鑻磋嫆鑻樿寣鑻昏嫇鑼戣寶鑼嗚寯鑼曡嫚鑻曡寽鑽戣崨鑽滆寛鑾掕尲鑼磋尡鑾涜崬鑼崗鑽囪崈鑽熻崁鑼楄崰鑼尯鑼宠崷鑽ワ拷".split("");for(j=0;j!=D[220].length;++j)if(D[220][j].charCodeAt(0)!==65533){e[D[220][j]]=56320+j;d[56320+j]=D[220][j]}D[221]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷杌ヨ沪杌ц花杌╄华杌滑杌划杌话杌辫徊杌宠淮杌佃欢杌疯桓杌硅缓杌昏患杌借痪杌胯紑杓佽紓杓冭紕杓呰紗杓囪紙杓夎紛杓嬭紝杓嶈紟杓忚紣杓戣紥杓撹紨杓曡紪杓楄紭杓欒細杓涜紲杓濊紴杓熻紶杓¤饥杓o拷杓よ讥杓﹁姬杓ㄨ缉杓极杓辑杓集杓拌急杓茶汲杓磋嫉杓惰挤杓歌脊杓鸿蓟杓艰冀杓捐伎杞�杞佽絺杞冭絼鑽ㄨ寷鑽╄崿鑽嵀鑽幇鑽歌幊鑾磋帬鑾帗鑾滆巺鑽艰幎鑾╄嵔鑾歌嵒鑾樿帪鑾ㄨ幒鑾艰弫钀佽彞鑿樺爣钀樿悑鑿濊徑鑿栬悳钀歌悜钀嗚彅鑿熻悘钀冭徃鑿硅彧鑿呰弨钀﹁彴鑿¤憸钁戣憵钁欒懗钂囪拡钁鸿拤钁歌惣钁嗚懇钁惰拰钂庤惐钁搧钃嶈搻钃﹁捊钃撹搳钂胯捄钃犺挕钂硅挻钂楄摜钃h攲鐢嶈敻钃拌敼钄熻敽锟�".split("");for(j=0;j!=D[221].length;++j)if(D[221][j].charCodeAt(0)!==65533){e[D[221][j]]=56576+j;d[56576+j]=D[221][j]}D[222]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷杞呰絾杞囪綀杞夎綂杞嬭綄杞嶈綆杞忚綈杞戣綊杞撹綌杞曡綎杞楄綐杞欒綒杞涜綔杞濊綖杞熻綘杞¤舰杞h饯杞ヨ姜杈�杈岃緬杈濊緺杈¤劲杈よ茎杈﹁晶杈粳杈井杈静杈宠敬杈佃痉杈歌竞杈昏炯杈胯縺杩冭繂锟借繅杩婅繈杩岃繊杩忚繏杩栬織杩氳繝杩¤浚杩ц楷杩勘杩茶看杩佃慷杩鸿炕杩艰烤杩块�囬�堥�岄�庨�撻�曢�樿晼钄昏摽钃艰暀钑堣暔钑よ暈钑虹灑钑冭暡钑昏枻钖ㄨ枃钖忚暪钖枩钖呰柟钖疯柊钘撹梺钘滆椏铇ц槄铇╄槚铇煎痪寮堝ぜ濂佽�峰濂氬鍖忓阿灏ュ艾灏存墝鎵姛鎶绘媻鎷氭嫍鎷將鎷舵尮鎹嬫崈鎺彾鎹辨嵑鎺庢幋鎹幀鎺婃崺鎺幖鎻叉徃鎻犳徔鎻勬彏鎻庢憭鎻嗘幘鎽呮憗鎼嬫悰鎼犳悓鎼︽悺鎽炴拕鎽挅锟�".split("");for(j=0;j!=D[222].length;++j)if(D[222][j].charCodeAt(0)!==65533){e[D[222][j]]=56832+j;d[56832+j]=D[222][j]}D[223]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷閫欓�滈�i�ら�ラ�ч�ㄩ�╅����伴�遍�查�抽�撮�烽�归�洪�介�块亐閬冮亝閬嗛亪閬夐亰閬嬮亴閬庨仈閬曢仏閬欓仛閬滈仢閬為仧閬犻仭閬ら仸閬ч仼閬伀閬伅閬伴伇閬查伋閬堕伔閬搁伖閬洪伝閬奸伨閭侊拷閭勯倕閭嗛倗閭夐倞閭岄倣閭庨倧閭愰倰閭旈倴閭橀倸閭滈倿閭熼偁閭ら偉閭ч偍閭╅偒閭偛閭烽偧閭介偪閮�鎽烘挿鎾告挋鎾烘搥鎿愭摋鎿ゆ摙鏀夋敟鏀紜蹇掔敊寮戝崯鍙卞徑鍙╁彣鍙诲悞鍚栧悊鍛嬪憭鍛撳憯鍛栧憙鍚″憲鍛欏悾鍚插拏鍜斿懛鍛卞懁鍜氬挍鍜勫懚鍛﹀挐鍝愬挱鍝傚挻鍝掑挧鍜﹀摀鍝斿懖鍜e摃鍜诲捒鍝屽摍鍝氬摐鍜╁挭鍜ゅ摑鍝忓摓鍞涘摟鍞犲摻鍞斿摮鍞㈠敚鍞忓攽鍞у敧鍟у枏鍠靛晧鍟晛鍟曞斂鍟愬敿锟�".split("");for(j=0;j!=D[223].length;++j)if(D[223][j].charCodeAt(0)!==65533){e[D[223][j]]=57088+j;d[57088+j]=D[223][j]}D[224]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷閮傞儍閮嗛儓閮夐儖閮岄儘閮掗償閮曢儢閮橀儥閮氶優閮熼儬閮i儰閮ラ儵閮儸閮儼閮遍儾閮抽兊閮堕兎閮归兒閮婚兗閮块剙閯侀剝閯呴剢閯囬剤閯夐剨閯嬮剬閯嶉剮閯忛剱閯戦剴閯撻剶閯曢剸閯楅剺閯氶剾閯滐拷閯濋劅閯犻劇閯ら劌閯﹂劎閯ㄩ劑閯劔閯劖閯劙閯查劤閯撮劦閯堕劮閯搁労閯婚劶閯介劸閯块厐閰侀厒閰勫敺鍟栧暤鍟跺暦鍞冲敯鍟滃枊鍡掑杻鍠卞柟鍠堝杹鍠熷暰鍡栧枒鍟诲棢鍠藉柧鍠斿枡鍡椃鍡夊槦鍡戝棲鍡棓鍡﹀棟鍡勫棷鍡ュ棽鍡冲棇鍡嶅棬鍡靛棨杈斿槥鍢堝槍鍢佸槫鍢e椌鍢�鍢у槶鍣樺樄鍣楀槵鍣嶅櫌鍣欏櫆鍣屽檾鍤嗗櫎鍣卞櫕鍣诲櫦鍤呭殦鍤洈鍥楀洕鍥″浀鍥浌鍥垮渼鍦婂湁鍦滃笍甯欏笖甯戝副甯诲讣锟�".split("");for(j=0;j!=D[224].length;++j)if(D[224][j].charCodeAt(0)!==65533){e[D[224][j]]=57344+j;d[57344+j]=D[224][j]}D[225]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷閰呴厙閰堥厬閰撻厰閰曢厲閰橀厵閰涢厹閰熼厾閰﹂収閰ㄩ叓閰叧閰洪吇閰奸唨閱侀唫閱冮唲閱嗛唸閱婇啂閱忛啌閱旈啎閱栭啑閱橀啓閱滈啙閱為啛閱犻啞閱ら啣閱﹂啩閱ㄩ啯閱啲閱伴啽閱查喅閱堕喎閱搁喒閱伙拷閱奸喗閱鹃喛閲�閲侀噦閲冮噭閲呴噯閲堥噵閲愰噿閲撻嚁閲曢嚃閲楅嚇閲欓嚉閲涢嚌閲為嚐閲犻嚒閲㈤嚕閲ら嚗甯峰箘骞斿箾骞炲埂宀屽焙宀嶅矏宀栧矆宀樺矙宀戝矚宀滃驳宀㈠步宀搏宀卞玻宄佸卜宄勫硳宄ゅ硧宄ュ磦宕冨揣宕﹀串宕ゅ礊宕嗗礇宓樺淳宕村唇宓禌宓禎宓祴宓婂旦宓村秱宥欏稘璞冲斗宸呭匠褰峰緜寰囧緣寰屽緯寰欏緶寰ㄥ经寰靛炯琛㈠健鐘姲鐘寸姺鐘哥媰鐙佺嫀鐙嶇嫆鐙ㄧ嫰鐙╃嫴鐙寸嫹鐚佺嫵鐚冪嫼锟�".split("");for(j=0;j!=D[225].length;++j)if(D[225][j].charCodeAt(0)!==65533){e[D[225][j]]=57600+j;d[57600+j]=D[225][j]}D[226]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷閲﹂嚙閲ㄩ嚛閲嚝閲嚟閲嚡閲伴嚤閲查嚦閲撮嚨閲堕嚪閲搁嚬閲洪嚮閲奸嚱閲鹃嚳閳�閳侀垈閳冮垊閳呴垎閳囬垐閳夐垔閳嬮垖閳嶉垘閳忛垚閳戦垝閳撻垟閳曢垨閳楅垬閳欓垰閳涢垳閳濋垶閳熼垹閳¢垻閳i垽锟介垾閳﹂埀閳ㄩ埄閳埆閳埈閳埊閳伴埍閳查埑閳撮埖閳堕埛閳搁埞閳洪埢閳奸埥閳鹃埧閴�閴侀墏閴冮墑閴呯嫽鐚楃寭鐚$寠鐚炵対鐚曠將鐚圭尌鐚尭鐚辩崘鐛嶇崡鐛犵崿鐛嵕鑸涘ぅ椋уい澶傞ィ楗чエ楗╅オ楗ガ楗撮シ楗介棣勯棣婇棣愰棣撻棣曞簚搴戝簨搴栧亥搴犲汗搴靛壕搴宠祿寤掑粦寤涘花寤喓蹇勫繅蹇栧繌鎬冨慨鎬勫俊蹇ゅ烤鎬呮�嗗开蹇扛鎬欐�垫�︽�涙�忔�嶆�╂��婃�挎�℃伕鎭规伝鎭烘亗锟�".split("");for(j=0;j!=D[226].length;++j)if(D[226][j].charCodeAt(0)!==65533){e[D[226][j]]=57856+j;d[57856+j]=D[226][j]}D[227]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷閴嗛墖閴堥墘閴婇墜閴岄墠閴庨墢閴愰墤閴掗墦閴旈墪閴栭墬閴橀墮閴氶墰閴滈墲閴為墴閴犻墶閴㈤墸閴ら墺閴﹂墽閴ㄩ墿閴壂閴壄閴壇閴伴壉閴查壋閴甸壎閴烽壐閴归壓閴婚壖閴介壘閴块妧閵侀妭閵冮妱閵咃拷閵嗛妵閵堥妷閵婇妺閵岄妽閵忛姁閵戦姃閵撻姅閵曢姈閵楅姌閵欓姎閵涢姕閵濋姙閵熼姞閵¢姠閵i姢閵ラ姦閵ф仾鎭芥倴鎮氭偔鎮濇們鎮掓倢鎮涙儸鎮绘偙鎯濇儤鎯嗘儦鎮存劆鎰︽剷鎰f兇鎰�鎰庢劔鎱婃叺鎲啍鎲ф喎鎳旀嚨蹇濋毘闂╅棲闂遍棾闂甸椂闂奸椌闃冮槃闃嗛槇闃婇構闃岄槏闃忛槖闃曢槚闃楅槞闃氫脯鐖挎垥姘垫睌姹滄眾娌f矃娌愭矓娌屾报姹╂贝姹舵矄娌╂硱娉旀箔娉锋掣娉辨硹娌叉碃娉栨澈娉钞娌辨硴娉尘锟�".split("");for(j=0;j!=D[227].length;++j)if(D[227][j].charCodeAt(0)!==65533){e[D[227][j]]=58112+j;d[58112+j]=D[227][j]}D[228]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷閵ㄩ姪閵姭閵姯閵姲閵遍姴閵抽姶閵甸姸閵烽姼閵归姾閵婚娂閵介娋閵块媭閶侀媯閶冮媱閶呴媶閶囬媺閶婇媼閶岄媿閶庨嫃閶愰嫅閶掗嫇閶旈嫊閶栭嫍閶橀嫏閶氶嫑閶滈嫕閶為嫙閶犻嫛閶㈤嫞閶ら嫢閶﹂嫥閶拷閶╅嫪閶嫭閶嫯閶嫲閶遍嫴閶抽嫶閶甸嫸閶烽嫺閶归嫼閶婚嫾閶介嬀閶块寑閷侀寕閷冮寗閷呴寙閷囬寛閷夋垂娲ф磳娴冩祱娲囨磩娲欐磶娲祶娲吹娲氭祻娴掓禂娲虫稇娴稙娑犳禐娑撴稊娴滄禒娴兼担娓氭穱娣呮窞娓庢犊娣犳笐娣︽窛娣欐笘娑笇娑斧婀箮婀翰婀熸簡婀撴箶娓叉弗婀勬粺婧辨簶婊犳辑婊㈡亥婧ф航婧绘悍婊楁捍婊忔簭婊傛簾娼㈡絾娼囨激婕曟还婕级娼嬫酱婕級婕╂緣婢嶆緦娼告讲娼兼胶婵戯拷".split("");for(j=0;j!=D[228].length;++j)if(D[228][j].charCodeAt(0)!==65533){e[D[228][j]]=58368+j;d[58368+j]=D[228][j]}D[229]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷閷婇寢閷岄實閷庨審閷愰寫閷掗寭閷旈寱閷栭寳閷橀寵閷氶寷閷滈対閷為専閷犻尅閷㈤專閷ら尌閷﹂導閷ㄩ尒閷尗閷尛閷尟閷伴尡閷查尦閷撮尩閷堕尫閷搁尮閷洪尰閷奸尳閷块崁閸侀崅閸冮崉閸呴崋閸囬崍閸夛拷閸婇崑閸岄崓閸庨崗閸愰崙閸掗崜閸旈崟閸栭崡閸橀崣閸氶崨閸滈崫閸為崯閸犻崱閸㈤崳閸ら崶閸﹂崸閸ㄩ崺閸繅婢ф竟婢舵總婵℃慨婵炴繝婵�氱�g�涚�圭�电亸鐏炲畝瀹勫畷瀹撳瀹哥敮楠炴惔瀵ゅ瑜板韫囪瑖杈惰繐杩曡骏杩郡杩╄喀杩宠卡閫呴�勯�嬮�﹂�戦�嶉�栭�¢�甸�堕��亜閬戦亽閬愰仺閬橀仮閬涙毠閬撮伣閭傞倛閭冮倠褰愬綏褰栧綐灏诲挮灞愬睓瀛卞保灞︾炯寮缉寮壌寮奸灞濡冨濡╁Κ濡o拷".split("");for(j=0;j!=D[229].length;++j)if(D[229][j].charCodeAt(0)!==65533){e[D[229][j]]=58624+j;d[58624+j]=D[229][j]}D[230]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷閸嵀閸嵂閸伴嵄閸查嵆閸撮嵉閸堕嵎閸搁嵐閸洪嵒閸奸嵔閸鹃嵖閹�閹侀巶閹冮巹閹呴巻閹囬巿閹夐帄閹嬮帉閹嶉帋閹愰帒閹掗帗閹旈帟閹栭帡閹橀帣閹氶帥閹滈帩閹為師閹犻帯閹㈤帲閹ら帴閹﹂帶閹ㄩ帺閹帿锟介幀閹幃閹幇閹遍幉閹抽幋閹甸幎閹烽幐閹归幒閹婚幖閹介幘閹块弨閺侀弬閺冮弰閺呴弳閺囬張閺夐弸閺岄弽濡楀濡濡ゅ濡插Ο濮楀濞呭▎濮濆▓濮e濮瑰▽濞夊ú濞村☉濞e〒濠�濠у濠曞濠㈠┑鑳濯涘┓濠哄瀚瀚掑珨濯稿珷瀚e瀚栧瀚樺珳瀣夊瑮瀣栧瀣峰瓈灏曞皽瀛氬瀛冲瓚瀛撳椹甸┓椹搁┖椹块┙楠�楠侀獏楠堥獖楠愰獟楠撻獤楠橀獩楠滈獫楠熼獱楠㈤楠ラ绾熺骸绾g亥绾ㄧ憨锟�".split("");for(j=0;j!=D[230].length;++j)if(D[230][j].charCodeAt(0)!==65533){e[D[230][j]]=58880+j;d[58880+j]=D[230][j]}D[231]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷閺庨弿閺愰彂閺掗彄閺旈彆閺楅彉閺欓彋閺涢彍閺濋彏閺熼彔閺¢彚閺i彜閺ラ彟閺ч彣閺╅彧閺彫閺彯閺彴閺遍彶閺抽彺閺甸彾閺烽徃閺归徍閺婚徏閺介従閺块悁閻侀悅閻冮悇閻呴悊閻囬悎閻夐悐閻嬮悓閻嶏拷閻庨悘閻愰悜閻掗悡閻旈悤閻栭悧閻橀悪閻氶悰閻滈悵閻為悷閻犻悺閻㈤悾閻ら惀閻﹂惂閻ㄩ惄閻惈閻惌閻涵绾扮壕缁�缁佺粋缁夌粙缁岀粣缁旂粭缁涚粻缁$花缁划缁槐缁茬紞缁剁缓缁荤痪缂佺紓缂冪紘缂堢紜缂岀紡缂戠紥缂楃紮缂滅紱缂熺肌缂㈢迹缂ょ讥缂︾姬缂极缂辑缂及缂辩疾缂崇嫉骞虹暱宸涚斁閭曠帋鐜戠幃鐜㈢師鐝忕弬鐝戠幏鐜崇弨鐝夌張鐝ョ彊椤肩悐鐝╃彠鐝炵幒鐝茬悘鐞憶鐞︾惀鐞ㄧ惏鐞惉锟�".split("");for(j=0;j!=D[231].length;++j)if(D[231][j].charCodeAt(0)!==65533){e[D[231][j]]=59136+j;d[59136+j]=D[231][j]}D[232]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷閻惏閻遍惒閻抽惔閻甸惗閻烽惛閻归惡閻婚惣閻介惪閼�閼侀憘閼冮憚閼呴憜閼囬憟閼夐憡閼嬮憣閼嶉憥閼忛憪閼戦憭閼撻憯閼曢憱閼楅憳閼欓憵閼涢憸閼濋憺閼熼憼閼¢憿閼i懁閼ラ懄閼ч懆閼╅應閼懎閼懐锟介懓閼遍懖閼抽懘閼甸懚閼烽懜閼归懞閼婚懠閼介懢閼块拃閽侀拏閽冮拕閽戦挅閽橀搰閾忛摀閾旈摎閾﹂摶閿滈敔鐞涚悮鐟佺憸鐟楃憰鐟欑懛鐟懢鐠滅拵鐠�鐠佺拠鐠嬬挒鐠ㄧ挬鐠愮挧鐡掔捄闊煫闊潓鏉撴潪鏉堟潻鏋ユ瀲鏉澇鏋樻灖鏉垫灗鏋炴灜鏋嬫澐鏉兼煱鏍夋煒鏍婃煩鏋版爩鏌欐灥鏌氭灣鏌濇爛鏌冩灨鏌㈡爭鏌佹熃鏍叉牫妗犳 妗庢、妗勬·姊冩牆妗曟ˇ妗佹¨妗�鏍炬妗夋牘姊垫妗存》姊撴~妫傛ギ妫兼妞犳9锟�".split("");for(j=0;j!=D[232].length;++j)if(D[232][j].charCodeAt(0)!==65533){e[D[232][j]]=59392+j;d[59392+j]=D[232][j]}D[233]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷閿ч敵閿介晝闀堥晪闀曢暁闀犻暜闀撮暤闀烽暩闀归暫闀婚暭闀介暰闁�闁侀杺闁冮杽闁呴枂闁囬枅闁夐枈闁嬮枌闁嶉枎闁忛枑闁戦枓闁撻枖闁曢枛闁楅枠闁欓枤闁涢枩闁濋枮闁熼枲闁¢枹闁i枻闁ラ枽闁ч枿闁╅柂锟介柅闁柇闁柉闁伴柋闁查柍闁撮柕闁堕柗闁搁柟闁洪柣闁奸柦闁鹃柨闂�闂侀梻闂冮梽闂呴梿闂囬棃闂夐棅闂嬫い妫版妞佹妫f妤辨す妤犳妤濇妤姒樻ジ妞存姒囨妲庢妤︽ィ妤规姒ф姒Ν妲旀Ρ妲佹妲熸妲犳妲挎ǒ妲妯樻━妲叉﹦妯炬獱姗愭妯垫獛姗规ń妯ㄦ姗兼獞妾愭妾楁鐚风崚娈佹畟娈囨畡娈掓畵娈嶆畾娈涙娈将杞奖杞茶匠杞佃蕉杞歌椒杞硅胶杞艰骄杈佽緜杈勮緡杈嬶拷".split("");for(j=0;j!=D[233].length;++j)if(D[233][j].charCodeAt(0)!==65533){e[D[233][j]]=59648+j;d[59648+j]=D[233][j]}D[234]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷闂岄棈闂庨棌闂愰棏闂掗棑闂旈棔闂栭棗闂橀棛闂氶棝闂滈棟闂為棢闂犻棥闂㈤棧闂ら棩闂﹂棫闂椏闃囬槗闃橀槢闃為槧闃i槫闃ラ槮闃ч槰闃╅槴闃槶闃槹闃烽樃闃归樅闃鹃檨闄冮檴闄庨檹闄戦檼闄撻櫀闄楋拷闄橀櫃闄氶櫆闄濋櫈闄犻櫍闄ラ櫐闄櫗闄櫙闄伴櫛闄抽櫢闄归櫤闄婚櫦闄介櫨闄块殌闅侀殏闅冮殑闅囬殙闅婅緧杈庤緩杈樿練杌庢垕鎴楁垱鎴熸垻鎴℃垾鎴ゆ埇鑷х摨鐡寸摽鐢忕攽鐢撴敶鏃棷鏃版槉鏄欐澆鏄冩槙鏄�鐐呮浄鏄濇槾鏄辨樁鏄佃�嗘櫉鏅旀檨鏅忔櫀鏅℃櫁鏅锋殑鏆屾毀鏆濇毦鏇涙洔鏇︽洨璐茶闯璐惰椿璐借祤璧呰祮璧堣祲璧囪祶璧曡禉瑙囪瑙嬭瑙庤瑙愯鐗姛鐗濈墻鐗壘鐗跨妱鐘嬬妽鐘忕姃鎸堟尣鎺帮拷".split("");for(j=0;j!=D[234].length;++j)if(D[234][j].charCodeAt(0)!==65533){e[D[234][j]]=59904+j;d[59904+j]=D[234][j]}D[235]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷闅岄殠闅戦殥闅撻殨闅栭殮闅涢殱闅為殶闅犻殹闅㈤殻闅ら殽闅﹂毃闅╅毆闅毈闅毊闅毐闅查毚闅甸毞闅搁毢闅婚毧闆傞泝闆堥泭闆嬮洂闆戦洆闆旈洊闆楅洏闆欓洑闆涢洔闆濋洖闆熼洝闆㈤洠闆ら洢闆﹂洤闆拷闆洯闆洶闆遍洸闆撮浀闆搁浐闆婚浖闆介浛闇傞渻闇呴湂闇嬮湆闇愰湋闇掗湐闇曢湕闇橀湙闇氶湜闇濋湡闇犳惪鎿樿�勬姣虫姣垫姘呮皣姘嗘皪姘曟皹姘欐皻姘℃癌姘ゆ蔼姘叉數鏁曟暙鐗嶇墥鐗栫埌铏㈠垨鑲熻倻鑲撹偧鏈婅偨鑲辫偒鑲偞鑲疯儳鑳ㄨ儵鑳儧鑳傝儎鑳欒儘鑳楁湊鑳濊儷鑳辫兇鑳剭鑴庤儾鑳兼湑鑴掕睔鑴惰劄鑴剺鑴茶厛鑵岃厯鑵磋厵鑵氳叡鑵犺叐鑵艰吔鑵収濉嶅鑶堣唫鑶戞粫鑶h啰鑷屾湨鑷婅喕锟�".split("");for(j=0;j!=D[235].length;++j)if(D[235][j].charCodeAt(0)!==65533){e[D[235][j]]=60160+j;d[60160+j]=D[235][j]}D[236]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷闇¢湤闇i湦闇ラ湨闇ч湪闇╅湯闇湲闇湵闇抽湸闇甸湺闇烽満闇婚溂闇介溈闈�闈侀潅闈冮潉闈呴潌闈囬潏闈夐潑闈嬮潓闈嶉潕闈忛潗闈戦潝闈曢潡闈橀潥闈滈潩闈熼潱闈ら潶闈ч潹闈潾闈澀闈澂闈伴澅锟介澆闈甸澐闈搁澒闈洪澔闈介澗闈块瀫闉侀瀭闉冮瀯闉嗛瀲闉堥瀴闉婇瀸闉庨瀼闉愰灀闉曢灃闉楅灆闉氶灈闉滈灊鑷佽啨娆ゆ娆规瓋姝嗘瓩椋戦椋撻椋欓娈冲絸姣傝С鏂愰綉鏂撴柤鏃嗘梽鏃冩棇鏃庢棐鏃栫個鐐滅倴鐐濈偦鐑�鐐风偒鐐辩儴鐑婄剱鐒撶剸鐒劚鐓崇厹鐓ㄧ厖鐓茬厞鐓哥吅鐔樼喅鐔电啫鐔犵嚑鐕旂嚙鐕圭垵鐖ㄧ伂鐒樼叇鐔规埦鎴芥墐鎵堟墘绀荤绁嗙绁涚绁撶绁㈢绁犵ク绁хズ绂呯绂氱Η绂冲繎蹇愶拷".split("");for(j=0;j!=D[236].length;++j)if(D[236][j].charCodeAt(0)!==65533){e[D[236][j]]=60416+j;d[60416+j]=D[236][j]}D[237]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷闉為灍闉¢灑闉ら灔闉﹂灖闉ㄩ灘闉灛闉灠闉遍灣闉甸灦闉烽灨闉归灪闉婚灱闉介灳闉块焵闊侀焸闊冮焺闊呴焼闊囬焾闊夐煀闊嬮煂闊嶉煄闊忛煇闊戦煉闊撻煍闊曢煐闊楅煒闊欓煔闊涢煖闊濋煘闊熼煚闊¢煝闊o拷闊ら煡闊ㄩ煯闊煱闊遍煵闊撮煼闊搁煿闊洪熁闊奸熃闊鹃熆闋�闋侀爞闋冮爠闋呴爢闋囬爤闋夐爦闋嬮爩闋嶉爭鎬兼仢鎭氭仹鎭佹仚鎭f偒鎰嗘剭鎱濇啯鎲濇噵鎳戞垎鑲�鑱挎矒娉舵芳鐭剁煾鐮�鐮夌牀鐮樼爲鏂牠鐮滅牆鐮圭牶鐮荤牊鐮肩牓鐮牐鐮╃纭纭楃牔纭愮纭岀—纰涚纰氱纰滅ⅰ纰g⒉纰圭ⅴ纾旂纾夌,纾茬纾寸绀ょ绀撮緵榛归换榛肩洷鐪勭湇鐩圭渿鐪堢湚鐪㈢湙鐪湨鐪电湼鐫愮潙鐫囩潈鐫氱潹锟�".split("");for(j=0;j!=D[237].length;++j)if(D[237][j].charCodeAt(0)!==65533){e[D[237][j]]=60672+j;d[60672+j]=D[237][j]}D[238]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷闋忛爯闋戦爳闋撻爺闋曢爾闋楅牁闋欓牃闋涢牅闋濋牉闋熼牋闋¢牏闋i牑闋ラ牔闋ч牗闋╅牚闋牞闋牣闋牥闋遍牪闋抽牬闋甸牰闋烽牳闋归牶闋婚牸闋介牼闋块椤侀椤冮椤呴椤囬椤夐椤嬮椤嶏拷椤庨椤愰椤掗椤旈椤栭椤橀椤氶椤滈椤為椤犻 椤㈤。椤らˉ椤﹂¨椤ㄩ々椤~椤…椤潰鐫ョ澘鐬嶇澖鐬�鐬岀瀾鐬熺灎鐬扮灥鐬界敽鐣�鐣庣晪鐣堢暃鐣茬暪鐤冪綐缃$綗瑭堢建缃寸奖缃圭緛缃剧泹鐩ヨ牪閽呴拞閽囬拫閽婇拰閽嶉拸閽愰挃閽楅挄閽氶挍閽滈挘閽ら挮閽挱閽挴閽伴挷閽撮挾閽烽捀閽归捄閽奸捊閽块搫閾堥搲閾婇搵閾岄搷閾庨搻閾戦搾閾曢摉閾楅摍閾橀摏閾為摕閾犻摙閾ら摜閾ч摠閾拷".split("");for(j=0;j!=D[238].length;++j)if(D[238][j].charCodeAt(0)!==65533){e[D[238][j]]=60928+j;d[60928+j]=D[238][j]}D[239]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷椤“椤遍〔椤抽〈棰嬮棰掗棰欓ⅲ棰ㄩⅸ棰棰棰棰伴⒈棰查⒊棰撮⒌棰堕⒎棰搁⒐棰洪⒒棰奸⒔棰鹃⒖椋�椋侀椋冮椋呴椋囬椋夐椋嬮椋嶉椋愰椋栭椋涢椋濋椋¢"椋i¥锟介%椋﹂)椋+椋-椋/椋伴1椋查3椋撮5椋堕7椋搁9椋洪;椋奸=椋鹃?椁�椁侀椁冮椁呴椁囬摡閾摦閾摮閾撮摰閾烽摴閾奸摻閾块攦閿傞攩閿囬攭閿婇攳閿庨攺閿掗敁閿旈敃閿栭敇閿涢敐閿為敓閿㈤敧閿敥閿敱閿查敶閿堕敺閿搁敿閿鹃斂闀傞數闀勯晠闀嗛晧闀岄晭闀忛晵闀撻晹闀栭晽闀橀暀闀涢暈闀熼暆闀¢暍闀ら暐闀﹂暓闀ㄩ暕闀暙闀暞闀遍暡闀抽敽鐭х煬闆夌绉В绉▎宓囩▋绋傜绋旓拷".split("");for(j=0;j!=D[239].length;++j)if(D[239][j].charCodeAt(0)!==65533){e[D[239][j]]=61184+j;d[61184+j]=D[239][j]}D[240]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷椁堥椁婇椁岄椁忛椁掗椁旈椁栭椁橀椁氶椁滈椁為椁犻ぁ椁㈤ぃ椁らぅ椁﹂ぇ椁ㄩぉ椁か椁き椁ぐ椁遍げ椁抽ご椁甸ざ椁烽じ椁归ず椁婚ぜ椁介ぞ椁块楗侀楗冮楗呴楗囬楗夛拷楗婇楗岄楗庨楗愰楗掗楗栭楗橀楗氶楗滈楗為楗犻ァ楗㈤イ楗﹂コ楗搁ス楗婚ゾ棣傞棣夌ü绋风榛忛Ε绌扮殘鐨庣殦鐨欑殼鐡炵摖鐢笭楦㈤辅楦╅釜楦脯楦查副楦堕父楦烽腹楦洪妇楣侀箓楣勯箚楣囬箞楣夐箣楣岄箮楣戦箷楣楅箽楣涢箿楣為梗楣﹂恭楣ㄩ供楣公楣贡楣钩鐤掔枖鐤栫枲鐤濈柆鐤g柍鐤寸柛鐥勭柋鐤扮梼鐥傜棖鐥嶇棧鐥ㄧ棪鐥ょ棲鐥х槂鐥辩椉鐥跨槓鐦�鐦呯槍鐦楃槉鐦ョ槝鐦曠槞锟�".split("");for(j=0;j!=D[240].length;++j)if(D[240][j].charCodeAt(0)!==65533){e[D[240][j]]=61440+j;d[61440+j]=D[240][j]}D[241]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷棣岄棣氶棣滈棣為棣犻Α棣㈤Γ棣らΖ棣чΙ棣Λ棣Ν棣Ο棣伴Ρ棣查Τ棣撮Φ棣堕Ψ棣搁棣洪棣奸棣鹃椐�椐侀椐冮椐呴椐囬椐夐椐嬮椐嶉椐忛椐戦椐撻椐曢椐楅锟介椐氶椐滈椐為椐犻А椐㈤В椐らД椐﹂Ё椐ㄩЗ椐Й椐Л椐Н椐伴П椐查С椐撮У椐堕Х椐搁Ч鐦涚樇鐦㈢槧鐧�鐦槹鐦跨樀鐧冪樉鐦崇檷鐧炵檾鐧滅櫀鐧櫙缈婄绌哥┕绐�绐嗙獔绐曠绐犵绐ㄧ绐宠·琛╄〔琛借】琚傝ⅱ瑁嗚⒎琚艰瑁㈣瑁h%瑁辫瑁艰(瑁捐0瑜¤瑜撹瑜婅ご瑜ざ瑗佽ウ瑗荤枊鑳ョ毑鐨寸煖鑰掕�旇�栬�滆�犺�㈣�ヨ�﹁�ц�╄�ㄨ�辫�嬭�佃亙鑱嗚亶鑱掕仼鑱辫椤搁棰冿拷".split("");for(j=0;j!=D[241].length;++j)if(D[241][j].charCodeAt(0)!==65533){e[D[241][j]]=61696+j;d[61696+j]=D[241][j]}D[242]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷椐洪Щ椐奸Ы椐鹃Э楱�楱侀▊楱冮▌楱呴▎楱囬▓楱夐▕楱嬮▽楱嶉◣楱忛◥楱戦♁楱撻〝楱曢楱楅楱欓楱涢楱濋楱熼楱¢á楱ià楱ラé楱чè楱╅í楱ì楱ó楱ò楱遍ú楱抽ù楱甸ǘ楱烽ǜ锟介ü楱洪ɑ楱奸ń楱鹃椹�椹侀﹤椹冮﹦椹呴﹩椹囬﹫椹夐椹嬮椹嶉椹忛椹戦椹撻椹曢〇椹楅椹欓棰岄棰忛棰氶棰為棰¢ⅱ棰ラⅵ铏嶈檾铏櫘铏胯櫤铏艰櫥铓ㄨ殟铓嬭毈铓濊毀铓h毆铓撹毄铓惰泟铓佃泿铓拌毢铓辫毌铔夎洀铓磋洨铔辫洸铔洺铔愯湏铔炶洿铔熻洏铔戣渻铚囪浉铚堣湂铚嶈湁铚h溁铚炶湧铚湚铚捐潏铚磋湵铚╄湻铚胯瀭铚㈣澖铦捐澔铦犺澃铦岃澁铻嬭潛铦h澕铦よ潤铦ヨ灀铻灗锜掞拷".split("");for(j=0;j!=D[242].length;++j)if(D[242][j].charCodeAt(0)!==65533){e[D[242][j]]=61952+j;d[61952+j]=D[242][j]}D[243]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷椹氶椹滈椹為椹犻椹㈤椹ら━椹﹂┃椹ㄩ┅椹┇椹查獌楠夐獚楠庨獢楠曢獧楠﹂楠楠楠楠查楠撮楠归楠介楠块珒楂勯珕楂囬珗楂夐珚楂嶉珟楂忛珢楂掗珨楂曢珫楂楅珯楂氶珱楂滐拷楂濋珵楂犻楂i楂ラ楂ㄩ楂楂楂遍楂抽楂甸楂烽楂洪楂介楂块瑎楝侀瑐楝勯瑓楝嗚焼铻堣瀰铻灄铻冭灚锜ヨ灛铻佃灣锜嬭煋铻借煈锜�锜婅煕锜煚锜爾锠撹熅锠婅牄锠¤牴锠肩级缃傜絼缃呰垚绔虹绗堢瑑绗勭瑫绗婄绗忕瓏绗哥绗欑绗辩瑺绗ョ绗崇绗炵瓨绛氱瓍绛电瓕绛濈瓲绛绛㈢绛辩異绠︾绠哥绠濈绠呯绠滅绠绡戠瘉绡岀瘽绡氱绡︾绨岀绡肩皬绨栫皨锟�".split("");for(j=0;j!=D[243].length;++j)if(D[243][j].charCodeAt(0)!==65533){e[D[243][j]]=62208+j;d[62208+j]=D[243][j]}D[244]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷楝囬瑝楝婇瑡楝岄瑣楝庨瑦楝戦瑨楝旈瑫楝栭瑮楝橀瑱楝氶瑳楝滈瑵楝為瑺楝¢楝ら楝﹂楝ㄩ楝楝楝楝遍楝撮楝堕楝搁楝洪楝鹃榄�榄嗛瓓榄嬮瓕榄庨瓙榄掗瓝榄曢瓥榄楅瓨榄欓瓪锟介瓫榄滈瓭榄為瓱榄犻榄㈤榄ら榄﹂榄ㄩ榄榄榄榄伴榄查榄撮榄堕榄搁榄洪绨熺蔼绨︾案绫佺眬鑷捐垇鑸傝垊鑷鑸¤垻鑸h埈鑸埁鑸埜鑸昏埑鑸磋埦鑹勮墘鑹嬭墢鑹氳墴鑹ㄨ【琚呰瑁樿瑗炵緷缇熺晶缇景缇茬奔鏁夌矐绮濈矞绮炵并绮茬布绮界硜绯囩硨绯嶇硤绯呯硹绯ㄨ壆鏆ㄧ究缈庣繒缈ョ俊缈︾咯缈砍绯哥捣缍︾懂绻囩簺楹搁捍璧宠秳瓒旇稇瓒辫掸璧眹璞夐厞閰愰厧閰忛叅锟�".split("");for(j=0;j!=D[244].length;++j)if(D[244][j].charCodeAt(0)!==65533){e[D[244][j]]=62464+j;d[62464+j]=D[244][j]}D[245]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷榄奸榄鹃楫�楫侀畟楫冮畡楫呴畣楫囬畧楫夐畩楫嬮畬楫嶉畮楫忛異楫戦畳楫撻當楫曢畺楫楅畼楫欓畾楫涢疁楫濋疄楫熼疇楫¢楫i楫ラ楫ч楫╅楫楫楫楫遍楫抽楫甸楫烽楫归锟介楫奸楫鹃榀�榀侀瘋榀冮瘎榀呴瘑榀囬瘓榀夐瘖榀嬮瘜榀嶉瘞榀忛瘣榀戦瘨榀撻瘮榀曢瘱榀楅瘶榀欓瘹榀涢參閰¢叞閰╅叝閰介吘閰查叴閰归唽閱呴啇閱嶉啈閱㈤啠閱啳閱啹閱甸喆閱鸿睍楣捐陡璺竻韫欒供瓒佃犊瓒艰逗璺勮窎璺楄窔璺炶穾璺忚窙璺嗚番璺疯犯璺h饭璺昏筏韪夎方韪旇笣韪熻脯韪福韪负韫�韪硅傅韪借副韫夎箒韫傝箲韫掕箠韫拌苟韫艰汞韫磋簠韬忚簲韬愯簻韬炶备璨傝矈璨呰矘璨旀枦瑙栬瑙氳锟�".split("");for(j=0;j!=D[245].length;++j)if(D[245][j].charCodeAt(0)!==65533){e[D[245][j]]=62720+j;d[62720+j]=D[245][j]}D[246]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷榀滈瘽榀為療榀犻榀㈤榀ら榀﹂榀ㄩ榀榀榀榀伴榀查榀撮榀堕榀搁榀洪榀奸榀鹃榘�榘侀皞榘冮皠榘呴皢榘囬皥榘夐皧榘嬮皩榘嶉皫榘忛皭榘戦皰榘撻皵榘曢皷榘楅皹榘欓皻锟介皼榘滈皾榘為盁榘犻啊榘㈤埃榘ら哎榘﹂哀榘ㄩ癌榘矮榘碍榘隘榘伴氨榘查俺榘撮暗榘堕胺榘搁肮榘洪盎瑙ヨЙ瑙ň璎﹂潛闆╅洺闆渾闇侀湀闇忛湈闇湱闇伴溇榫�榫冮緟榫嗛緡榫堥緣榫婇緦榛鹃紜榧嶉毠闅奸毥闆庨洅鐬块洜閵庨姰閶堥尵閸強閹忛惥閼笨椴傞矃椴嗛矅椴堢ǎ椴嬮矌椴愰矐椴掗矓椴曢矚椴涢矠椴熼矤椴¢并椴i播椴﹂钵椴ㄩ博椴箔椴舶椴遍膊椴抽泊椴甸捕椴烽埠椴婚布椴介硠槌呴硢槌囬硦槌嬶拷".split("");for(j=0;j!=D[246].length;++j)if(D[246][j].charCodeAt(0)!==65533){e[D[246][j]]=62976+j;d[62976+j]=D[246][j]}D[247]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷榘奸敖榘鹃翱楸�楸侀眰楸冮眲楸呴眴楸囬眻楸夐眾楸嬮睂楸嶉睅楸忛睈楸戦睊楸撻睌楸曢睎楸楅睒楸欓睔楸涢睖楸濋睘楸熼睜楸¢雹楸i堡楸ラ宝楸ч报楸╅豹楸爆楸碑楸卑楸遍辈楸抽贝楸甸倍楸烽备楸归焙锟介被楸介本椴�椴冮矂椴夐矈椴岄矎椴撻矕椴楅矘椴欓矟椴铂椴补椴鹃部槌�槌侀硞槌堥硥槌戦硳槌氶硾槌犻场槌岄硩槌庨硰槌愰硴槌旈硶槌楅硺槌欓硿槌濋碂槌㈤澕闉呴瀾闉掗灁闉灚闉i灢闉撮楠伴楣橀楠洪楂侀珋楂呴珎楂嬮珜楂戦瓍榄冮瓏榄夐瓐榄嶉瓚椋ㄩ椁楗旈珶楂¢楂楂婚楂归瑘楝忛瑩楝熼楹介壕绺婚簜楹囬簣楹嬮簰閺栭簼楹熼粵榛滈粷榛犻粺榛㈤哗榛ч互榛化榧㈤棘榧脊榧烽冀榧鹃絼锟�".split("");for(j=0;j!=D[247].length;++j)if(D[247][j].charCodeAt(0)!==65533){e[D[247][j]]=63232+j;d[63232+j]=D[247][j]}D[248]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷槌i长槌ラ肠槌ч敞槌╅唱槌超槌钞槌嘲槌遍巢槌抽炒槌甸扯槌烽掣槌归澈槌婚臣槌介尘槌块磤榇侀磦榇冮磩榇呴磫榇囬磮榇夐磰榇嬮磳榇嶉磶榇忛磹榇戦磼榇撻磾榇曢礀榇楅礃榇欓礆榇涢礈榇濋礊榇熼礌榇★拷榇㈤矗榇ら触榇﹂揣榇ㄩ穿榇传榇喘榇疮榇伴幢榇查闯榇撮吹榇堕捶榇搁垂榇洪椿榇奸唇榇鹃纯榈�榈侀祩锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");for(j=0;j!=D[248].length;++j)if(D[248][j].charCodeAt(0)!==65533){e[D[248][j]]=63488+j;d[63488+j]=D[248][j]}D[249]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷榈冮祫榈呴祮榈囬祱榈夐祳榈嬮祵榈嶉祹榈忛祼榈戦祾榈撻禂榈曢禆榈楅禈榈欓禋榈涢禍榈濋禐榈熼禒榈¢耽榈i丹榈ラ郸榈ч胆榈╅氮榈惮榈诞榈蛋榈遍挡榈抽荡榈甸刀榈烽蹈榈归岛榈婚导榈介稻榈块秬槎侊拷槎傞秲槎勯秴槎嗛秶槎堥秹槎婇秼槎岄秿槎庨稄槎愰稇槎掗稉槎旈稌槎栭稐槎橀稒槎氶稕槎滈稘槎為稛槎犻丁槎拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷".split("");for(j=0;j!=D[249].length;++j)if(D[249][j].charCodeAt(0)!==65533){e[D[249][j]]=63744+j;d[63744+j]=D[249][j]}D[250]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷槎i钉槎ラ鼎槎ч定槎╅丢槎冬槎懂槎栋槎遍恫槎抽洞槎甸抖槎烽陡槎归逗槎婚都槎介毒槎块穩榉侀穫榉冮穭榉呴穯榉囬穲榉夐穵榉嬮穼榉嶉穾榉忛窅榉戦窉榉撻窋榉曢窎榉楅窐榉欓窔榉涢窚榉濋窞榉熼窢榉★拷榉㈤罚榉ら伐榉﹂阀榉ㄩ珐榉帆榉翻榉矾榉伴繁榉查烦榉撮返榉堕贩榉搁饭榉洪坊榉奸方榉鹃房楦�楦侀競锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");for(j=0;j!=D[250].length;++j)if(D[250][j].charCodeAt(0)!==65533){e[D[250][j]]=64e3+j;d[64e3+j]=D[250][j]}D[251]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷楦冮竸楦呴竼楦囬笀楦夐笂楦嬮笇楦嶉笌楦忛笎楦戦笒楦撻笖楦曢笘楦楅笜楦欓笟楦涢笢楦濋笧楦ら抚楦赴楦撮富楦奸箑楣嶉箰楣掗箵楣旈箹楣欓節楣熼範楣¢耿楣ラ巩楣共楣撮沟楣堕狗楣搁构楣洪够楣奸菇楹�锟介簛楹冮簞楹呴簡楹夐簥楹岄簫楹庨簭楹愰簯楹旈簳楹栭簵楹橀簷楹氶簺楹滈簽楹犻骸楹㈤海楹ら亥楹ч酣楹╅邯锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");for(j=0;j!=D[251].length;++j)if(D[251][j].charCodeAt(0)!==65533){e[D[251][j]]=64256+j;d[64256+j]=D[251][j]}D[252]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷楹含楹寒楹喊楹遍翰楹抽旱楹堕悍楹归汉楹奸嚎榛�榛侀粋榛冮粎榛嗛粐榛堥粖榛嬮粚榛愰粧榛撻粫榛栭粭榛欓粴榛為弧榛i护榛﹂花榛滑榛划榛伴槐榛查怀榛撮坏榛堕环榛搁缓榛介豢榧�榧侀紓榧冮紕榧咃拷榧嗛紘榧堥級榧婇紝榧忛紤榧掗紨榧曢紪榧橀細榧涢紲榧濋紴榧熼肌榧i激榧ラ鸡榧ч绩榧╅吉榧辑榧及榧憋拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷".split("");for(j=0;j!=D[252].length;++j)if(D[252][j].charCodeAt(0)!==65533){e[D[252][j]]=64512+j;d[64512+j]=D[252][j]}D[253]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷榧查汲榧撮嫉榧堕几榧洪技榧块絸榻侀絺榻冮絽榻嗛絿榻堥綁榻婇綃榻岄綅榻庨綇榻掗綋榻旈綍榻栭綏榻橀綑榻氶經榻滈綕榻為綗榻犻健榻㈤剑榻ら渐榻﹂涧榻ㄩ僵榻将榻江榻蒋榻伴奖榻查匠榻撮降榻堕椒榻革拷榻归胶榻婚郊榻介骄榫侀緜榫嶉編榫忛緪榫戦緬榫撻緮榫曢緰榫楅緲榫滈緷榫為尽榫㈤荆榫ら茎铯ス铴曪Ё铵憋拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷".split("");for(j=0;j!=D[253].length;++j)if(D[253][j].charCodeAt(0)!==65533){e[D[253][j]]=64768+j;d[64768+j]=D[253][j]}D[254]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷铷岋◢铷庯◤铷戯〒铷旓铷燂铷★ǎ铷わě铷ī锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷".split("");for(j=0;j!=D[254].length;++j)if(D[254][j].charCodeAt(0)!==65533){e[D[254][j]]=65024+j;d[65024+j]=D[254][j]}return{enc:e,dec:d}}();cptable[949]=function(){var d=[],e={},D=[],j;D[0]="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷".split("");for(j=0;j!=D[0].length;++j)if(D[0][j].charCodeAt(0)!==65533){e[D[0][j]]=0+j;d[0+j]=D[0][j]}D[129]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟疥皞臧冴皡臧嗞皨臧岅皪臧庩皬臧橁盀臧熽啊臧㈥埃臧リ唉臧ш皑臧╆蔼臧爱臧碴俺臧达拷锟斤拷锟斤拷锟疥暗臧蛾胺臧宏盎臧疥熬臧筷眮瓯傟眱瓯勱眳瓯嗞眹瓯堦眽瓯婈睂瓯庩睆瓯愱睉瓯掙睋瓯曪拷锟斤拷锟斤拷锟疥睎瓯楆睓瓯氷睕瓯濌睘瓯熽睜瓯£雹瓯j堡瓯リ宝瓯ш报瓯╆豹瓯爆瓯碑瓯辈瓯酬钡瓯蛾惫瓯魂奔瓯疥本瓯筷矀瓴囮矆瓴嶊矌瓴応矐瓴掙矒瓴曣矕瓴楆矘瓴欔矚瓴涥矠瓴㈥玻瓴り播瓴﹃钵瓴箔瓴脖瓴碴渤瓴搓驳瓴蛾卜瓴宏簿瓴筷硛瓿傟硟瓿呹硢瓿囮硥瓿婈硧瓿嶊硯瓿応硱瓿戧硳瓿撽硵瓿栮硺瓿欔硽瓿涥硿瓿濌碁瓿熽尝瓿j偿瓿﹃畅瓿抄瓿巢瓿搓撤瓿戈彻瓿宏郴瓿娟晨甏侁磦甏冴磪甏囮磮甏夑磰甏嬯磶甏愱磼甏擄拷".split("");for(j=0;j!=D[129].length;++j)if(D[129][j].charCodeAt(0)!==65533){e[D[129][j]]=33024+j;d[33024+j]=D[129][j]}D[130]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟疥磾甏曣礀甏楆礄甏氷礇甏濌礊甏熽础甏㈥矗甏り触甏﹃揣甏椽甏串甏窗甏标床甏筹拷锟斤拷锟斤拷锟疥炊甏逢垂甏宏椿甏疥淳甏筷祤甑侁祩甑冴祮甑堦祳甑嬯祵甑嶊祹甑応祽甑掙祿甑曣禆甑楋拷锟斤拷锟斤拷锟疥禉甑氷禌甑滉禎甑炾禑甑犼耽甑り单甑﹃掸甑旦甑但甑弹甑标挡甑逢蹈甑龟岛甑娟秬甓冴秳甓呹秵甓囮秺甓嬯秿甓庩稄甓戧稈甓撽稊甓曣稏甓楆稑甓欔稓甓涥稙甓熽稜甓£盯甓j顶甓﹃锭甓订甓东甓董甓动甓瓣侗甓碴冻甓搓兜甓蛾陡甓龟逗甓魂都甓疥毒甓筷穫攴冴穮攴嗞穱攴夑穵攴嬯穼攴嶊穾攴応窉攴旉窌攴栮窏攴橁窓攴氷窙攴濌窞攴熽贰攴㈥罚攴リ乏攴ш法攴╆藩攴番攴樊攴钒攴标凡攴酬反攴店范攴凤拷".split("");for(j=0;j!=D[130].length;++j)if(D[130][j].charCodeAt(0)!==65533){e[D[130][j]]=33280+j;d[33280+j]=D[130][j]}D[131]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟疥泛攴魂方攴娟競旮冴竸旮呹竼旮囮笂旮岅笌旮応笎旮戧笒旮撽笗旮栮笚旮橁笝旮氷笡旮滐拷锟斤拷锟斤拷锟疥笣旮炾笩旮犼浮旮㈥福旮り弗旮﹃抚旮俯旮斧旮腑旮腐旮碴赋旮店付旮龟富旮硷拷锟斤拷锟斤拷锟疥附旮娟缚旯傟箘旯囮箞旯夑箣旯応箲旯掙箵旯曣箺旯橁箼旯氷箾旯炾耿旯j工旯﹃恭旯公旯巩旯贡旯碴钩旯搓沟旯蛾狗旯宏咕旯筷簚旰侁簜旰冴簡旰囮簣旰夑簥旰嬯簫旰庩簭旰愱簯旰掙簱旰旉簳旰栮簵旰橁簷旰氷簺旰滉簼旰炾簾旰犼骸旰㈥海旰り亥旰﹃骇旰憨旰韩旰涵旰函旰瓣罕旰碴撼旰搓旱旰蛾悍旰戈汗旰宏夯旰筷粊昊傟粌昊呹粏昊囮粓昊夑粖昊嬯粠昊掙粨昊旉粫昊栮粭昊氷粵昊濌粸昊熽粻昊£虎昊j护昊ワ拷".split("");for(j=0;j!=D[131].length;++j)if(D[131][j].charCodeAt(0)!==65533){e[D[131][j]]=33536+j;d[33536+j]=D[131][j]}D[132]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟疥沪昊ш哗昊滑昊化昊瓣槐昊碴怀昊店欢昊逢还昊宏换昊疥痪昊筷紑昙侁紓昙冴紕昙咃拷锟斤拷锟斤拷锟疥紗昙夑紛昙嬯紝昙庩紡昙戧紥昙撽紨昙曣紪昙楆紭昙欔細昙涥紲昙濌紴昙熽紶昙£饥昙o拷锟斤拷锟斤拷锟疥激昙リ鸡昙ш绩昙╆吉昙籍昙急昙酬嫉昙蛾挤昙戈脊昙宏蓟昙娟絸杲勱絽杲嗞絿杲婈綃杲岅綅杲庩綇杲戧綊杲撽綌杲曣綎杲楆綐杲欔綒杲涥綖杲熽綘杲£舰杲j溅杲ш建杲╆姜杲浆杲疆杲桨杲标讲杲酬酱杲店蕉杲逢礁杲宏交杲缄浇杲娟娇昃侁緜昃冴緟昃嗞緡昃夑緤昃嬯緦昃嶊編昃応緬昃撽緮昃栮緱昃橁緳昃氷緵昃濌緸昃熽緺昃£劲昃j兢昃リ睛昃ш鲸昃╆惊昃粳昃井昃景昃标静昃酬敬昃店径昃逢竞昃魂窘昃撅拷".split("");for(j=0;j!=D[132].length;++j)if(D[132][j].charCodeAt(0)!==65533){e[D[132][j]]=33792+j;d[33792+j]=D[132][j]}D[133]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟疥究昕侁總昕冴縿昕呹繂昕婈繉昕応繍昕戧繏昕撽繒昕栮織昕橁繖昕氷繘昕濌繛昕熽繝昕★拷锟斤拷锟斤拷锟疥竣昕j郡昕リ喀昕ш开昕楷昕慨昕坎昕酬康昕蛾糠昕龟亢昕魂考昕疥烤昕侩�傠�冿拷锟斤拷锟斤拷锟诫�呺�嗠�囯�堧�夒�婋�嬰�嶋�庪�忞�戨�掚�撾�曤�栯�楇�橂�欕�氹�涬�炿�熾�犽�‰�㈦�k�る�ル�﹄�щ�╇�������半�彪�搽�畴�措�惦�峨�冯�鸽�闺�弘�浑�茧�诫�倦�侩亐雭侂亗雭冸亞雭囯亯雭嬰亶雭忞亹雭戨亽雭栯仒雭氹仜雭滊仦雭熾仩雭‰仮雭k仱雭ル仸雭щ仺雭╇仾雭伂雭伄雭伆雭彪伈雭畴伌雭惦伓雭冯伕雭闺伜雭浑伨雭侩倎雮傠們雮呺倖雮囯倛雮夒倞雮嬰値雮愲倰雮撾倲雮曤倴雮楇倹雮濍倿雮k偆锟�".split("");for(j=0;j!=D[133].length;++j)if(D[133][j].charCodeAt(0)!==65533){e[D[133][j]]=34048+j;d[34048+j]=D[133][j]}D[134]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟诫偉雮﹄偋雮偘雮搽偠雮冯偣雮弘偦雮诫偩雮侩儉雰侂儌雰冸儐雰婋儖雰岆儘雰庪儚雰掞拷锟斤拷锟斤拷锟诫儞雰曤儢雰楇儥雰氹儧雰滊儩雰炿儫雰‰儮雰k儰雰﹄儳雰儵雰儷雰儹雰儻雰帮拷锟斤拷锟斤拷锟诫儽雰搽兂雰措兊雰峨兎雰鸽児雰弘兓雰茧兘雰倦兛雱�雱侂剛雱冸剟雱呺剢雱囯剨雱嶋剮雱忞剳雱旊剷雱栯剹雱氹劄雱熾劆雱‰劉雱﹄劎雱╇劒雱劖雱劘雱半劚雱搽劤雱峨労雱浑劶雱诫劸雱侩厒雲冸厖雲嗠厙雲夒厞雲嬰厡雲嶋厧雲忞厭雲撾厲雲楇厵雲氹厸雲濍厼雲熾叀雲㈦叄雲る叆雲﹄収雲叐雲叓雲叚雲叝雲半叡雲搽叧雲措叺雲峨叿雲弘吇雲诫吘雲侩唩雴冸唲雴呺唵雴囯唺雴岆啂雴忞啇雴戨啎雴栯啑雴欕啔雴涬啙锟�".split("");for(j=0;j!=D[134].length;++j)if(D[134][j].charCodeAt(0)!==65533){e[D[134][j]]=34304+j;d[34304+j]=D[134][j]}D[135]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟诫啚雴熾啝雴‰啟雴k啢雴ル啨雴щ啯雴啱雴啳雴啹雴半啽雴搽喅雴措喌雴峨喎雴革拷锟斤拷锟斤拷锟诫喒雴弘喕雴茧喗雴倦喛雵�雵侂噦雵冸噭雵呺噯雵囯噲雵夒噴雵嬰噸雵庪噺雵戨噿雵撾嚂锟斤拷锟斤拷锟斤拷雵栯嚄雵橂嚈雵氹嚊雵炿嚑雵‰嚔雵k嚖雵ル嚘雵щ嚜雵嚟雵嚡雵彪嚥雵畴嚧雵惦嚩雵冯嚫雵弘嚰雵倦嚳雸�雸侂垈雸冸垎雸囯垑雸婋垗雸庪垙雸愲垜雸掚垞雸栯垬雸氹垱雸滊垵雸炿垷雸‰垻雸k垽雸ル垿雸щ埁雸╇埅雸埇雸埉雸埌雸彪埐雸畴埖雸峨埛雸鸽埞雸弘埢雸诫埦雸侩墍雺侂墏雺冸墑雺呺墕雺囯増雺夒墛雺嬰墝雺嶋墡雺忞墣雺戨墥雺撾墧雺曤墫雺楇墮雺氹墰雺濍墳雺熾墶雺㈦墸雺る墺雺﹄墽雺壂雺壄雺拷".split("");for(j=0;j!=D[135].length;++j)if(D[135][j].charCodeAt(0)!==65533){e[D[135][j]]=34560+j;d[34560+j]=D[135][j]}D[136]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟诫壇雺半壉雺搽壋雺峨壏雺鸽壒雺弘壔雺诫壘雺侩妧電侂妭電冸妴電囯妶電婋妺電岆妽電庯拷锟斤拷锟斤拷锟诫姀電掚姄電曤姈電楇姏電滊姖電炿姛電㈦姢電щ姩電╇姭電姰電姳電搽姵電惦姸電凤拷锟斤拷锟斤拷锟诫姼電闺姾電浑娂電诫娋電侩媭雼侂媯雼冸媱雼呺媶雼囯媻雼嬰媿雼庪嫃雼戨嫇雼旊嫊雼栯嫍雼氹嫓雼炿嫙雼犽嫛雼k嫥雼╇嫪雼半嫳雼搽嫸雼茧嫿雼倦寕雽冸寘雽嗠寚雽夒寠雽嬰寣雽嶋寧雽忞寬雽栯寳雽橂寵雽氹寷雽濍尀雽熾尃雽‰將雽k尋雽ル對雽щ尐雽╇尓雽尙雽尞雽尠雽彪尣雽畴尨雽惦尪雽冯尭雽闺尯雽浑尲雽诫尵雽侩崁雿侂崅雿冸崉雿呺崋雿囯崍雿夒崐雿嬰崒雿嶋崕雿忞崘雿戨崚雿撾崡雿欕崥雿濍崰雿‰崲雿o拷".split("");for(j=0;j!=D[136].length;++j)if(D[136][j].charCodeAt(0)!==65533){e[D[136][j]]=34816+j;d[34816+j]=D[136][j]}D[137]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟诫崷雿崻雿嵀雿嵅雿畴嵉雿峨嵎雿闺嵑雿浑嵓雿诫嵕雿侩巶霂嗠巼霂堧帀霂婋帇霂嶏拷锟斤拷锟斤拷锟诫帋霂忞帒霂掚帗霂曤帠霂楇帢霂欕帤霂涬帨霂濍帪霂熾帰霂k帳霂ル帵霂щ帺霂帿霂拷锟斤拷锟斤拷锟诫幃霂幇霂彪幉霂畴幋霂惦幎霂冯幐霂闺幒霂浑幖霂诫幘霂侩弨霃侂弬霃冸弳霃囯弶霃婋弽霃忞彂霃掚彄霃栯彉霃氹彍霃炿彑霃‰彚霃k彞霃﹄彠霃╇彧霃彫霃彯霃彴霃彪彶霃畴彺霃惦彾霃冯徃霃闺徍霃浑徑霃倦徔霅�霅侂悅霅冸悇霅呺悊霅囯悎霅夒悐霅嬰悓霅嶋悗霅忞悜霅掚悡霅旊悤霅栯悧霅欕悮霅涬悵霅炿悷霅‰悽霅k悿霅ル惁霅щ惇霅惌霅惎霅半惐霅搽惓霅惦惗霅冯惛霅闺惡霅浑惣霅诫惥霅侩憖霊侂憘霊冸憚锟�".split("");for(j=0;j!=D[137].length;++j)if(D[137][j].charCodeAt(0)!==65533){e[D[137][j]]=35072+j;d[35072+j]=D[137][j]}D[138]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟诫憛霊嗠憞霊堧憠霊婋憢霊岆憤霊庪憦霊掚憮霊曤憱霊楇憴霊氹憶霊滊憹霊炿憻霊㈦懁霊︼拷锟斤拷锟斤拷锟诫懅霊懇霊懌霊懏霊懓霊彪懖霊畴懘霊惦懚霊冯懜霊闺懞霊浑懠霊诫懢霊侩拋霋傦拷锟斤拷锟斤拷锟诫拑霋勲拝霋嗠拠霋夒拪霋嬰拰霋嶋拵霋忞拹霋戨拻霋撾挃霋曤挅霋楇挊霋欕挌霋涬挏霋炿挓霋犽挕霋㈦挘霋ル挦霋щ挬霋挮霋挳霋挵霋彪挷霋畴挻霋峨捀霋弘捇霋茧捊霋倦捒霌侂搨霌冸搮霌嗠搰霌夒搳霌嬰搶霌嶋搸霌忞搼霌掚摀霌旊摉霌楇摌霌欕摎霌涬摓霌熾摗霌㈦摜霌щ摠霌╇摢霌摦霌半摬霌畴摯霌惦摱霌冯摴霌弘摶霌茧摻霌倦摽霐�霐侂攤霐冸攧霐呺攩霐囯攬霐夒攰霐嬰攲霐嶋攷霐忞攼霐戨敀霐撾敄霐楇敊霐氹敐锟�".split("");for(j=0;j!=D[138].length;++j)if(D[138][j].charCodeAt(0)!==65533){e[D[138][j]]=35328+j;d[35328+j]=D[138][j]}D[139]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟诫敒霐熾敔霐‰敘霐k敠霐敩霐敭霐敳霐畴數霐峨敺霐闺敽霐浑敿霐诫斁霐侩晜霑嗭拷锟斤拷锟斤拷锟诫晣霑堧晧霑婋晭霑忞晳霑掚晸霑曤晼霑楇晿霑欕暁霑涬暈霑㈦暎霑る暐霑﹄暓霑暕霑拷锟斤拷锟斤拷锟诫暙霑暛霑暞霑半暠霑搽暢霑措暤霑峨暦霑鸽暪霑弘暬霑茧暯霑倦暱霒�霒侂杺霒冸杽霒呺枂霒囯枅霒夒枈霒嬰枌霒嶋枎霒忞枑霒戨枓霒撾枖霒曤枛霒楇枠霒欕枤霒涬枩霒濍枮霒熾枹霒k枼霒﹄枾霒╇柆霒柈霒柌霒峨柗霒鸽柟霒弘柧霒侩梺霔傠梼霔呺梿霔囯棃霔夒棅霔嬰棊霔掚棑霔旊棔霔栯棗霔欕棜霔涬棞霔濍棡霔熾棤霔‰棦霔k棨霔ル棪霔щ棬霔╇棯霔棴霔棷霔半棻霔搽棾霔措椀霔峨椃霔鸽椆霔弘椈霔茧椊霔倦椏锟�".split("");for(j=0;j!=D[139].length;++j)if(D[139][j].charCodeAt(0)!==65533){e[D[139][j]]=35584+j;d[35584+j]=D[139][j]}D[140]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟诫榾霕侂槀霕冸槃霕呺槅霕囯槇霕夒槉霕嬰槍霕嶋槑霕忞槖霕撾槙霕栯槜霕欕槡霕涬槣霕濓拷锟斤拷锟斤拷锟诫槥霕熾槧霕‰槩霕k槫霕﹄槯霕槱霕槴霕槷霕槹霕彪槻霕畴樀霕峨樂霕鸽樄霕猴拷锟斤拷锟斤拷锟诫樆霕茧樈霕倦樋霗�霗侂檪霗冸檮霗呺檰霗囯檳霗婋檵霗岆檷霗庪檹霗愲檻霗掚檽霗旊檿霗栯櫁霗橂櫃霗氹櫅霗滊櫇霗炿櫉霗犽櫋霗㈦櫍霗ル櫐霗щ櫓霗櫕霗櫗霗櫙霗半櫛霗搽櫝霗措櫟霗峨櫡霗鸽櫣霗弘櫥霗茧櫧霗倦櫩霘�霘侂殏霘冸殑霘呺殕霘囯殘霘夒殜霘嬰殞霘嶋殠霘忞殣霘戨殥霘撾殧霘曤殩霘楇殬霘欕殮霘涬殲霘熾殹霘㈦殻霘ル殾霘щ毃霘╇毆霘毊霘毎霘搽毘霘措毜霘峨毞霘鸽毠霘弘毣霘茧毥霘倦毧霙�霙侂泜锟�".split("");for(j=0;j!=D[140].length;++j)if(D[140][j].charCodeAt(0)!==65533){e[D[140][j]]=35840+j;d[35840+j]=D[140][j]}D[141]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟诫泝霙勲泤霙嗠泧霙堧泬霙婋泲霙岆泹霙庪洀霙愲洃霙掚洆霙曤洊霙楇洏霙欕洑霙涬洔霙濓拷锟斤拷锟斤拷锟诫洖霙熾洜霙‰洟霙k洡霙ル洣霙щ洦霙╇洩霙洭霙洰霙洷霙搽洺霙惦浂霙冯浌霙猴拷锟斤拷锟斤拷锟诫浕霙茧浗霙倦浛霚傠渻霚勲渾霚囯湀霚夒湂霚嬰湆霚嶋湈霚忞湊霚戨湌霚撾湐霚曤湒霚楇湗霚欕湚霚涬湝霚濍湠霚熾湢霚‰湤霚k湦霚ル湨霚щ湭霚湱霚湵霚搽湷霚措湹霚峨湻霚弘溂霚诫溇霚侩潃霛侂潅霛冸潊霛嗠潎霛夒潑霛嬰潔霛庪潖霛愲潙霛掚潛霛栯潡霛橂潤霛氹潧霛滊潩霛炿潫霛‰潰霛k潵霛﹄潷霛╇潽霛潿霛澁霛澆霛措澏霛冯澑霛闺澓霛浑澗霛侩瀬霝傠瀮霝呺瀱霝囯瀳霝夒瀶霝嬰瀻霝撾灁霝曤灇霝涬灊霝烇拷".split("");for(j=0;j!=D[141].length;++j)if(D[141][j].charCodeAt(0)!==65533){e[D[141][j]]=36096+j;d[36096+j]=D[141][j]}D[142]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟诫灍霝‰灑霝k灓霝ル灕霝щ灙霝灟霝半灡霝搽灣霝峨灧霝闺灪霝浑灱霝诫灳霝侩焵霟侊拷锟斤拷锟斤拷锟诫焸霟冸焺霟呺焼霟堧煀霟嬰煂霟嶋煄霟忞煇霟戨煉霟撾煍霟曤煐霟楇煒霟欕煔霟涬煖霟濓拷锟斤拷锟斤拷锟诫煘霟熾煚霟‰煝霟k煠霟ル煢霟щ煥霟╇煪霟煯霟煴霟搽煶霟惦煻霟冯煾霟闺熀霟浑熅霠傠爟霠勲爡霠嗠爦霠嬰爫霠庪爮霠戨爳霠撾爺霠曤爾霠楇牃霠滊牉霠熾牋霠‰牏霠k牔霠щ牘霠牜霠牣霠牥霠彪牪霠畴牰霠弘牷霠茧牻霠倦牽搿侂搿冸搿嗠搿堧搿婋搿岆搿庪搿愲搿旊搿栯搿橂搿氹搿炿搿‰、搿kˉ搿﹄¨搿々搿~搿“搿搽〕搿措〉搿峨》搿闺『搿浑〗搿倦】擘�擘侂擘冸锟�".split("");for(j=0;j!=D[142].length;++j)if(D[142][j].charCodeAt(0)!==65533){e[D[142][j]]=36352+j;d[36352+j]=D[142][j]}D[143]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟诫擘嗠擘堧擘婋擘岆擘忞擘戨擘撾擘曤擘楇擘欕擘涬擘濍擘燂拷锟斤拷锟斤拷锟诫擘‰ⅱ擘kⅳ擘ルⅵ擘щⅸ擘擘擘擘彪⒉擘畴⒌擘峨⒎擘闺⒑擘浑⒓擘斤拷锟斤拷锟斤拷锟诫⒕擘侩耄勲耄囯耄夒耄嬰耄庪耄戨耄撾耄栯耄橂耄氹耄滊耄犽"耄k¥耄ル&耄щ*耄-耄/耄彪2耄畴4耄惦6耄冯:耄茧>耄侩毪侂毪冸毪嗠毪堧毪婋毪岆毪庪毪愲毪掚毪旊毪栯毪欕毪涬毪濍毪熾ぁ毪㈦ぃ毪るぅ毪﹄ぇ毪ぉ毪か毪き毪く毪半け毪搽こ毪措さ毪峨し毪鸽す毪弘せ毪倦た毳侂毳冸毳嗠毳堧毳婋毳嶋毳愲毳撾毳曤毳楋拷".split("");for(j=0;j!=D[143].length;++j)if(D[143][j].charCodeAt(0)!==65533){e[D[143][j]]=36608+j;d[36608+j]=D[143][j]}D[144]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟诫毳涬毳炿毳‰ア毳kイ毳ルウ毳щオ毳ギ毳グ毳彪ゲ毳畴ザ毳冯ス毳弘セ毳斤拷锟斤拷锟斤拷锟诫ゾ毳侩毽侂毽冸毽堧毽岆毽愲毽掚毽旊毽栯毽橂毽氹毽滊毽烇拷锟斤拷锟斤拷锟诫毽犽Α毽㈦Γ毽るΕ毽﹄Η毽Ι毽Λ毽Ο毽彪Σ毽畴Φ毽峨Ψ毽鸽毽弘毽倦毵傠毵勲毵嗠毵婋毵嶋毵旊毵栯毵氹毵熾毵㈦Е毵щЗ毵Й毵М毵О毵彪Р毵畴Ф毵浑Ъ毵诫Ь毵侩▊毹冸▌毹呺▎毹囯▔毹婋▼毹岆◢毹庪◤毹愲☉毹掚〒毹旊毹楇毹欕毹涬毹濍毹熾毹‰á毹kà毹ルé毹щè毹╇í毹ì毹ó毹ò毹彪ú毹畴ù毹惦ǘ毹冯ê毹浑ń毹倦氅侂﹥氅勲﹨氅嗭拷".split("");for(j=0;j!=D[144].length;++j)if(D[144][j].charCodeAt(0)!==65533){e[D[144][j]]=36864+j;d[36864+j]=D[144][j]}D[145]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟诫﹪氅婋氅忞氅戨氅栯氅欕氅涬氅炿氅犽氅㈦氅﹄┆氅┈氅┊氅拷锟斤拷锟斤拷锟诫┎氅畴┑氅峨┓氅闺┖氅浑┘氅诫┚氅侩獉氇侂獋氇嗠獔氇夒獖氇嬰獚氇庪獜氇愲獞氇掞拷锟斤拷锟斤拷锟诫獡氇旊獣氇栯獥氇橂獧氇氹獩氇滊獫氇炿獰氇犽氇㈦氇る氇﹄氇氇氇彪氇措氇峨氇弘氇倦氆�氆侂珎氆冸珔氆嗠珖氆夒珚氆嬰珜氆嶋珟氆忞珢氆戨珤氆撾珨氆曤珫氆楇珰氆涬珳氆濍珵氆熾珷氆‰氆k氆ル氆щ氆╇氆氆氆氆彪氆畴氆惦氆冯氆闺氆浑氆倦氍侂瑐氍冸瑓氍嗠瑖氍堧瑝氍婋瑡氍岆瑤氍愲瑨氍撾瑪氍曤瑬氍楇瑱氍氹瑳氍濍瑸氍熾氍㈦氍る氍﹄锟�".split("");for(j=0;j!=D[145].length;++j)if(D[145][j].charCodeAt(0)!==65533){e[D[145][j]]=37120+j;d[37120+j]=D[145][j]}D[146]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟诫氍氍氍氍彪氍畴氍闺氍侩瓈氕侂瓊氕冸瓎氕堧瓓氕嬰瓕氕庪瓚氕掞拷锟斤拷锟斤拷锟诫瓝氕曤瓥氕楇瓩氕氹瓫氕滊瓭氕炿瓱氕犽氕る氕﹄氕氕氕氕氕憋拷锟斤拷锟斤拷锟诫氕畴氕惦氕冯氕闺氕浑氕诫氕侩畝氘侂畟氘冸畡氘呺畣氘囯畨氘婋畫氘嶋畮氘忞畱氘掚畵氘旊畷氘栯畻氘橂畽氘氹疀氘滊疂氘炿疅氘犽氘㈦氘ル氘щ氘氘氘氘彪氘畴氘峨氘闺氘浑氘诫氘侩瘉氙傠瘍氙呺瘑氙囯瘔氙婋瘚氙岆瘝氙庪瘡氙戨瘨氙旊瘯氙栯瘲氙橂瘷氙氹瘺氙滊瘽氙炿療氙犽氙㈦氙る氙﹄氙氙氙氙氙半氙搽氙措氙峨氙弘氙诫氚侊拷".split("");for(j=0;j!=D[146].length;++j)if(D[146][j].charCodeAt(0)!==65533){e[D[146][j]]=37376+j;d[37376+j]=D[146][j]}D[147]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟诫皟氚勲皡氚嗠皣氚婋皫氚愲皰氚撾皺氚氹盃氚‰阿氚k唉氚蔼氚艾氚隘氚搽俺氚碉拷锟斤拷锟斤拷锟诫岸氚冯肮氚弘盎氚茧敖氚倦翱氡傠眴氡囯眻氡婋眿氡庪睆氡戨睊氡撾睌氡曤睎氡楇睒氡欙拷锟斤拷锟斤拷锟诫睔氡涬睖氡炿睙氡犽薄氡㈦保氡る饱氡﹄抱氡暴氡鲍氡杯氡悲氡半北氡搽背氡措钡氡峨狈氡鸽惫氡弘被氡茧苯氡倦笨氩�氩侂矀氩冸矄氩囯矇氩婋矋氩忞矏氩戨矑氩撾矕氩橂矝氩滊矟氩炿矡氩㈦玻氩ル拨氩╇勃氩铂氩伯氩膊氩峨卜氩鸽补氩弘不氩倦部氤侂硞氤冸硡氤嗠硣氤堧硥氤婋硧氤岆硯氤掚硴氤旊硸氤楇硻氤氹硾氤濍碁氤熾碃氤‰尝氤k长氤ル肠氤щ敞氤╇唱氤超氤钞氤嘲氤彪巢氤畴撤氤闺澈氤浑辰锟�".split("");for(j=0;j!=D[147].length;++j)if(D[147][j].charCodeAt(0)!==65533){e[D[147][j]]=37632+j;d[37632+j]=D[147][j]}D[148]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟诫尘氤侩磤氪侂磦氪冸磫氪堧磰氪嬰磳氪嶋磶氪忞磻氪掚磽氪曤礀氪楇礃氪欕礆氪涬礈氪濓拷锟斤拷锟斤拷锟诫礊氪熾礌氪‰储氪k触氪﹄揣氪穿氪传氪串氪窗氪彪床氪畴创氪惦炊氪冯锤氪癸拷锟斤拷锟斤拷锟诫春氪浑醇氪诫淳氪侩祦氲傠祪氲勲祬氲嗠祰氲婋祴氲嶋祹氲忞祽氲掚祿氲旊禃氲栯禇氲氹禌氲滊禎氲炿禑氲犽怠氲㈦担氲ル郸氲щ旦氲但氲淡氲弹氲半当氲搽党氲措档氲峨捣氲鸽倒氲弘祷氲茧到氲倦悼攵傠秲攵呺秵攵嬰秾攵嶋稁攵忞稈攵旊稏攵楇稑攵涬稘攵炿稛攵犽丁攵㈦叮攵ル鼎攵щ定攵╇丢攵冬攵懂攵侗攵搽冻攵措兜攵峨斗攵闺逗攵浑都攵诫毒攵侩穩敕侂穫敕冸穭敕呺穯敕囯穲敕夒穵敕嬰穼敕嶋穾敕忞窅敕戯拷".split("");for(j=0;j!=D[148].length;++j)if(D[148][j].charCodeAt(0)!==65533){e[D[148][j]]=37888+j;d[37888+j]=D[148][j]}D[149]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟诫窉敕撾窎敕楇窓敕氹窙敕濍窞敕熾窢敕‰发敕k筏敕ル乏敕щ法敕帆敕翻敕矾敕憋拷锟斤拷锟斤拷锟诫凡敕畴返敕峨贩敕闺泛敕浑芳敕诫肪敕侩竵敫傠竸敫嗠竾敫堧笁敫婋笅敫庪笍敫戨笒敫擄拷锟斤拷锟斤拷锟诫笗敫栯笚敫橂笝敫氹笡敫炿笭敫‰涪敫k袱敫ル甫敫щ辅敫╇釜敫脯敫府敫赴敫彪覆敫畴复敫惦付敫冯父敫闺负敫浑讣敫诫妇敫侩箑牍侂箓牍冸箚牍囯箟牍婋箣牍嶋箯牍愲箲牍掚箵牍栯箻牍滊節牍炿篃牍㈦梗牍ル功牍щ供牍宫牍巩牍共牍峨狗牍鸽构牍弘咕牍侩簛牒傠簝牒呺簡牒囯簣牒夒簥牒嬰簬牒掚簱牒旊簳牒栯簵牒氹簺牒滊簼牒炿簾牒犽骸牒㈦海牒る亥牒﹄骇牒╇邯牒含牒寒牒喊牒彪翰牒畴捍牒惦憾牒凤拷".split("");for(j=0;j!=D[149].length;++j)if(D[149][j].charCodeAt(0)!==65533){e[D[149][j]]=38144+j;d[38144+j]=D[149][j]}D[150]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟诫焊牒闺汉牒浑杭牒诫壕牒侩粈牖侂粋牖冸粍牖呺粏牖囯粓牖夒粖牖嬰粚牖嶋粠牖忞粧牖擄拷锟斤拷锟斤拷锟诫粫牖栯粰牖氹粵牖滊粷牖炿粺牖‰虎牖﹄户牖哗牖猾牖划牖话牖彪徊牖畴淮牖碉拷锟斤拷锟斤拷锟诫欢牖冯桓牖闺缓牖浑患牖诫痪牖侩紑爰傠純爰勲紖爰嗠紘爰婋紜爰岆紞爰庪紡爰愲紤爰掚紦爰旊紩爰栯紬爰氹紴爰熾紶爰‰饥爰k激爰ル鸡爰щ绩爰╇吉爰棘爰籍爰及爰彪疾爰畴即爰惦级爰冯几爰闺己爰浑技爰诫季爰侩絺虢冸絽虢嗠絿虢夒綂虢嬰綄虢嶋綆虢忞綊虢撾綌虢栯綏虢橂綑虢氹經虢滊綕虢炿綗虢犽健虢㈦剑虢る渐虢﹄涧虢僵虢将虢江虢蒋虢半奖虢搽匠虢措降虢峨椒虢鸽焦虢弘交虢茧浇虢倦娇刖�刖侂緜锟�".split("");for(j=0;j!=D[150].length;++j)if(D[150][j].charCodeAt(0)!==65533){e[D[150][j]]=38400+j;d[38400+j]=D[150][j]}D[151]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟诫緝刖勲緟刖嗠緡刖堧緣刖婋緥刖岆緧刖庪緩刖愲緫刖掚緭刖曤緰刖楇緲刖欕練刖涬緶刖濓拷锟斤拷锟斤拷锟诫緸刖熾緺刖‰劲刖k兢刖ル睛刖щ鲸刖╇惊刖粳刖井刖颈刖搽境刖措镜刖峨痉刖革拷锟斤拷锟斤拷锟诫竟刖弘净刖茧窘刖倦究肟�肟侂總肟冸縿肟嗠繃肟堧繅肟婋繈肟庪繌肟戨繏肟撾繒肟栯織肟橂繖肟氹繘肟濍繛肟犽竣肟k郡肟ル喀肟щ卡肟╇开肟楷肟慨肟堪肟彪坎肟畴看肟惦慷肟冯扛肟闺亢肟浑考肟诫烤肟快��靲侅�傡�冹�勳�呾�嗢�囲�堨�夓�婌�嬱�岇�嶌�庫�忟�愳�戩�掛�撿�旍�曥�栰�楈�橃�欖�氺�涭�滌�濎�烄�熿�犾�§�㈧�l�れ�レ��ъ��╈�������办�膘�察�踌�挫�奠�鹅�缝�胳�轨�红�混�届�眷�匡拷".split("");for(j=0;j!=D[151].length;++j)if(D[151][j].charCodeAt(0)!==65533){e[D[151][j]]=38656+j;d[38656+j]=D[151][j]}D[152]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届亐靵侅亗靵冹亜靵呾亞靵囲亪靵夓亰靵嬱亴靵嶌亷靵忟亹靵掛亾靵旍仌靵栰仐靵欖仛靵涳拷锟斤拷锟斤拷锟届仢靵烄仧靵§仮靵l仱靵レ仸靵ъ仾靵伂靵伄靵伆靵膘伈靵踌伌靵奠伓靵缝伕靵癸拷锟斤拷锟斤拷锟届伜靵混伡靵届伨靵快個靷侅倐靷冹倓靷呾倖靷囲倛靷夓倞靷嬱倢靷嶌値靷忟倰靷撿倳靷栰倵靷欖倸靷涭倻靷濎倿靷熿偄靷れ偊靷ъ偍靷╈偑靷偖靷膘偛靷缝偢靷轨偤靷混偩靸傡儍靸勳儐靸囲儕靸嬱儘靸庫儚靸戩儝靸撿償靸曥儢靸楈儦靸烄儫靸犾儭靸㈧儯靸儳靸╈儶靸儹靸儻靸办儽靸察兂靸鹅兏靸红兓靸检兘靸眷兛靹侅剛靹冹剠靹嗢剣靹夓剨靹嬱剬靹嶌剮靹忟剳靹掛創靹旍剸靹楈剺靹欖剼靹涭劇靹㈧劌靹劑靹劔靹拷".split("");for(j=0;j!=D[152].length;++j)if(D[152][j].charCodeAt(0)!==65533){e[D[152][j]]=38912+j;d[38912+j]=D[152][j]}D[153]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届劜靹踌劥靹奠劮靹红劵靹届劸靹快厑靺傡厓靺勳厖靺嗢厙靺婌厧靺忟厫靺戩厭靺撿厲靺楋拷锟斤拷锟斤拷锟届厵靺氺厸靺濎厼靺熿厾靺§參靺l叇靺叓靺叚靺叝靺膘叢靺踌叺靺鹅叿靺轨吅靺伙拷锟斤拷锟斤拷锟届吋靺届吘靺快唨靻侅唫靻冹唲靻嗢唶靻堨唹靻婌唻靻忟啈靻掛啌靻曥啑靻橃啓靻氺啗靻烄啝靻㈧啠靻れ啨靻ъ啰靻啳靻啹靻膘啿靻踌喆靻奠喍靻缝喐靻轨喓靻混喖靻眷喛靽�靽侅噦靽冹噮靽嗢噰靽夓噴靽嬱噸靽庫噺靽愳噾靽掛嚀靽曥嚃靽欖嚉靽涭嚋靽濎嚍靽熿嚒靽㈧嚕靽レ嚘靽ъ嚛靽嚝靽嚟靽嚡靽察嚧靽奠嚩靽缝嚫靽轨嚭靽混嚲靽快垇靾傡垉靾呾垎靾囲垐靾夓垔靾嬱垘靾愳垝靾撿垟靾曥垨靾楈垰靾涭垵靾烄垺靾㈧垼锟�".split("");for(j=0;j!=D[153].length;++j)if(D[153][j].charCodeAt(0)!==65533){e[D[153][j]]=39168+j;d[39168+j]=D[153][j]}D[154]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届垽靾レ垿靾ъ埅靾埉靾办埑靾奠埗靾缝埜靾轨埡靾混埣靾届埦靾快墍靿侅墏靿冹墑靿咃拷锟斤拷锟斤拷锟届墕靿囲墘靿婌墜靿岇墠靿庫墢靿掛墦靿曥墫靿楈墮靿氺墰靿滌墲靿烄墴靿§墷靿l墹靿︼拷锟斤拷锟斤拷锟届墽靿墿靿壂靿壇靿膘壊靿踌壍靿鹅壏靿胳壒靿红壔靿眷妧鞀傡妰鞀勳妳鞀嗢妵鞀婌妺鞀岇妽鞀庫姀鞀戩姃鞀撿姅鞀曥姈鞀楈姍鞀氺姕鞀烄姛鞀犾姟鞀㈧姡鞀姧鞀╈姫鞀姰鞀姲鞀膘姴鞀踌姸鞀胳姾鞀混娂鞀届娋鞀快媭鞁侅媯鞁冹媱鞁呾媶鞁囲媹鞁夓媻鞁嬱媽鞁嶌嫀鞁忟嫄鞁戩嫆鞁撿嫈鞁曥嫋鞁楈嫎鞁欖嫐鞁涭嫗鞁熿嫛鞁㈧嫢鞁嫥鞁嫨鞁嫯鞁办嫴鞁踌嫶鞁奠嫹鞁红嫿鞁眷嬁鞂侅寕鞂冹寗鞂呾寙鞂囲寠鞂嬱寧鞂忥拷".split("");for(j=0;j!=D[154].length;++j)if(D[154][j].charCodeAt(0)!==65533){e[D[154][j]]=39424+j;d[39424+j]=D[154][j]}D[155]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届寪鞂戩寬鞂栰寳鞂欖寶鞂涭対鞂烄専鞂犾尅鞂㈧專鞂導鞂尗鞂尛鞂尟鞂办尡鞂诧拷锟斤拷锟斤拷锟届尦鞂挫尩鞂鹅尫鞂胳尮鞂红尰鞂检尳鞂眷尶鞃�鞃侅崅鞃冹崉鞃嗢崌鞃堨崏鞃婌崑鞃岇崓锟斤拷锟斤拷锟斤拷鞃庫崗鞃愳崙鞃掛崜鞃旍崟鞃栰崡鞃橃崣鞃氺崨鞃滌崫鞃烄崯鞃犾崱鞃㈧崳鞃れ崶鞃崸鞃崼鞃嵁鞃嵄鞃踌嵈鞃奠嵍鞃缝嵑鞃混嵕鞃快巰鞄侅巶鞄冹巺鞄嗢巼鞄夓帄鞄嬱帊鞄庫帍鞄愳帒鞄掛帗鞄旍帟鞄栰帡鞄橃帣鞄氺帥鞄滌帩鞄烄師鞄犾帯鞄㈧帲鞄れ帴鞄帶鞄帺鞄帿鞄幁鞄幆鞄办幈鞄察幊鞄挫幍鞄鹅幏鞄胳幑鞄红幓鞄检幗鞄眷幙鞆侅弬鞆冹弰鞆呾弳鞆囲張鞆夓強鞆嬱弻鞆嶌弾鞆忟彁鞆戩彃鞆撿彅鞆曥彇鞆楈彋锟�".split("");for(j=0;j!=D[155].length;++j)if(D[155][j].charCodeAt(0)!==65533){e[D[155][j]]=39680+j;d[39680+j]=D[155][j]}D[156]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届彌鞆濎彏鞆§彛鞆れ彞鞆彠鞆彨鞆彯鞆彴鞆膘彶鞆踌彾鞆缝徆鞆红徎鞆检徑鞆撅拷锟斤拷锟斤拷锟届徔鞇�鞇侅悅鞇冹悇鞇呾悊鞇囲悏鞇婌悑鞇岇悕鞇庫悘鞇戩悞鞇撿悢鞇曥悥鞇楈悩鞇欖悮锟斤拷锟斤拷锟斤拷鞇涭悳鞇濎悶鞇熿悹鞇§悽鞇l惀鞇惂鞇惄鞇惈鞇惍鞇惐鞇察惓鞇奠惗鞇缝惛鞇轨惡鞇混惥鞇快憖鞈侅憘鞈冹憚鞈呾憜鞈囲憠鞈婌憢鞈岇憤鞈庫憦鞈愳憫鞈掛憮鞈旍憰鞈栰憲鞈橃憴鞈氺憶鞈滌憹鞈烄憻鞈犾憽鞈㈧懀鞈懅鞈╈應鞈懎鞈懐鞈办懕鞈察懗鞈鹅懛鞈胳懞鞈混懠鞈届懢鞈快拋鞉傡拑鞉勳拝鞉嗢拠鞉堨拤鞉婌拫鞉岇拲鞉庫拸鞉愳拺鞉掛挀鞉曥挅鞉楈挊鞉欖挌鞉涭挐鞉烄挓鞉犾挕鞉㈧挘鞉れ挜鞉挧鞉挬锟�".split("");for(j=0;j!=D[156].length;++j)if(D[156][j].charCodeAt(0)!==65533){e[D[156][j]]=39936+j;d[39936+j]=D[156][j]}D[157]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届挭鞉挰鞉挳鞉挵鞉膘挷鞉踌挻鞉奠挾鞉缝捁鞉红捇鞉届捑鞉快搥鞊侅搨鞊冹搫鞊咃拷锟斤拷锟斤拷锟届搯鞊囲搱鞊夓搳鞊嬱搶鞊嶌搸鞊忟搻鞊戩搾鞊撿摂鞊曥摉鞊楈摌鞊欖摎鞊涭摐鞊濎摓鞊燂拷锟斤拷锟斤拷锟届摖鞊§摙鞊l摛鞊レ摝鞊ъ摠鞊摣鞊摥鞊摨鞊察摮鞊奠摱鞊缝摴鞊混摷鞊届摼鞌傡攦鞌勳攨鞌嗢攪鞌堨攭鞌婌攱鞌嶌攷鞌忟攽鞌掛敁鞌曥敄鞌楈敇鞌欖敋鞌涭敐鞌烄敓鞌犾敗鞌㈧敚鞌れ敟鞌敡鞌敨鞌敭鞌敱鞌察敵鞌挫數鞌鹅敺鞌红敿鞌眷斂鞎�鞎侅晜鞎冹晢鞎囲晪鞎忟晲鞎戩晵鞎栰暁鞎涭暅鞎熿暍鞎l暐鞎暓鞎╈暘鞎暚鞎暜鞎暡鞎鹅暦鞎胳暪鞎红暬鞎眷暱鞏侅杺鞏冹枀鞏嗢枅鞏夓枈鞏嬱枎鞏愳枓鞏撿枖锟�".split("");for(j=0;j!=D[157].length;++j)if(D[157][j].charCodeAt(0)!==65533){e[D[157][j]]=40192+j;d[40192+j]=D[157][j]}D[158]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届枛鞏欖枤鞏涭枬鞏烄枱鞏§枹鞏l枻鞏レ枽鞏ъ枿鞏柅鞏柇鞏柉鞏办柋鞏察柍鞏讹拷锟斤拷锟斤拷锟届柗鞏红柨鞐�鞐侅梻鞐冹棆鞐嶌棌鞐掛棑鞐曥棖鞐楈棛鞐氺棝鞐滌棟鞐烄棢鞐㈧棨鞐棫锟斤拷锟斤拷锟斤拷鞐棭鞐棲鞐棻鞐察棾鞐奠椄鞐轨椇鞐混槀鞓冹槃鞓夓槉鞓嬱槏鞓庫槒鞓戩槖鞓撿様鞓曥槚鞓楈槡鞓濎槥鞓熿槧鞓§槩鞓l槮鞓ъ槱鞓槴鞓槺鞓察樁鞓胳樅鞓检樈鞓眷樋鞕傡檭鞕呾檰鞕囲檳鞕婌檵鞕岇檷鞕庫檹鞕掛櫀鞕楈櫂鞕欖櫄鞕涭櫈鞕熿櫋鞕㈧櫍鞕れ櫏鞕櫑鞕櫓鞕櫕鞕櫘鞕办櫜鞕踌櫞鞕奠櫠鞕缝櫤鞕混櫧鞕眷櫩鞖侅殏鞖冹殑鞖呾殕鞖囲殜鞖岇殠鞖忟殣鞖戩殥鞖撿殩鞖楈殭鞖氺殯鞖濎殲鞖熿殸鞖§殺鞖l殾锟�".split("");for(j=0;j!=D[158].length;++j)if(D[158][j].charCodeAt(0)!==65533){e[D[158][j]]=40448+j;d[40448+j]=D[158][j]}D[159]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届毃鞖毇鞖毉鞖毌鞖察毘鞖奠毝鞖缝毣鞖检毥鞖眷毧鞗傡泟鞗嗢泧鞗堨泬鞗婌泲鞗庯拷锟斤拷锟斤拷锟届洀鞗戩洅鞗撿洉鞗栰洍鞗橃洐鞗氺洓鞗烄洘鞗㈧洠鞗れ洢鞗洤鞗洬鞗洰鞗洷鞗诧拷锟斤拷锟斤拷锟届洺鞗挫浀鞗鹅浄鞗红浕鞗检浘鞗快渶鞙侅渹鞙冹渾鞙囲湁鞙婌湅鞙嶌湈鞙忟湊鞙戩湌鞙撿湒鞙橃湚鞙涭湝鞙濎湠鞙熿湤鞙l湧鞙湩鞙╈湭鞙湰鞙湲鞙湶鞙挫湺鞙胳湽鞙红溁鞙眷溈鞚侅潅鞚冹潊鞚嗢潎鞚堨潐鞚嬱潕鞚愳潤鞚氺潧鞚濎潪鞚熿潯鞚㈧潱鞚れ潵鞚潷鞚╈潽鞚澀鞚澂鞚办澅鞚察澇鞚鹅澐鞚轨澓鞚混澘鞛�鞛侅瀭鞛嗢瀷鞛岇瀺鞛忟瀿鞛撿灂鞛欖灈鞛滌灊鞛烄灍鞛㈧灖鞛灘鞛灚鞛灟鞛膘灢鞛踌灥鞛鹅灧锟�".split("");for(j=0;j!=D[159].length;++j)if(D[159][j].charCodeAt(0)!==65533){e[D[159][j]]=40704+j;d[40704+j]=D[159][j]}D[160]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届灨鞛轨灪鞛混灳鞜傡焹鞜勳焻鞜嗢焽鞜婌煁鞜嶌煆鞜戩煉鞜撿煍鞜曥煐鞜楈煓鞜氺煕鞜滐拷锟斤拷锟斤拷锟届煘鞜熿煚鞜§煝鞜l煡鞜煣鞜╈煪鞜煭鞜煰鞜办煴鞜察煶鞜挫煹鞜鹅煼鞜胳煿鞜猴拷锟斤拷锟斤拷锟届熁鞜检熃鞜眷熆鞝傡爟鞝呾爢鞝囲爥鞝嬱爩鞝嶌爭鞝忟爳鞝旍牀鞝橃牂鞝氺牄鞝烄牊鞝§牏鞝l牓鞝牕鞝牘鞝牜鞝牥鞝察牫鞝挫牭鞝鹅牱鞝轨牶鞝混牻鞝眷牽臁侅臁冹臁呾臁囲臁嬱臁忟臁戩臁撿臁栰臁橃臁氺臁滌臁烄臁犾 臁㈧。臁れˉ臁¨臁々臁~臁…臁’臁察〕臁奠《臁缝」臁混〖臁届【臁快膦勳膦夓膦庫膦愳膦掛膦曥膦楈膦欖膦涭膦烄膦㈧ⅲ膦わ拷".split("");for(j=0;j!=D[160].length;++j)if(D[160][j].charCodeAt(0)!==65533){e[D[160][j]]=40960+j;d[40960+j]=D[160][j]}D[161]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届ⅴ膦ⅶ膦╈ⅹ膦膦膦膦膘⒉膦踌⒋膦奠⒍膦缝⒏膦轨⒑膦混⒕膦快欤侊拷锟斤拷锟斤拷锟届欤冹欤嗢欤夓欤嬱欤庫欤愳欤掛欤栰欤氺欤滌欤烄欤㈧#欤ワ拷锟斤拷锟斤拷锟届&欤ъ(欤╈*欤,欤.欤0欤膘2欤踌4欤鹅7欤胳9欤红;欤眷?欷侅欷冹欷堨欷婌欷庛��銆併�偮封�モ�βㄣ�兟�曗垾锛尖埣鈥樷�欌�溾�濄�斻�曘�堛�夈�娿�嬨�屻�嶃�庛�忋�愩�懧泵椕封墵鈮も墺鈭炩埓掳鈥测�斥剝鈩繝锟★骏鈾傗檧鈭犫姤鈱掆垈鈭団墶鈮捖р�烩槅鈽呪棆鈼忊棊鈼団梿鈻♀枲鈻斥柌鈻解柤鈫掆啇鈫戔啌鈫斻�撯壀鈮垰鈭解垵鈭碘埆鈭垐鈭嬧妴鈯団妭鈯冣埅鈭┾埀鈭竣锟�".split("");for(j=0;j!=D[161].length;++j)if(D[161][j].charCodeAt(0)!==65533){e[D[161][j]]=41216+j;d[41216+j]=D[161][j]}D[162]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届欷掛欷旍欷栰欷欖欷涭欷濎欷熿欷§あ欷lい欷レう欷ъえ欷╈お欷拷锟斤拷锟斤拷锟届き欷く欷办け欷察こ欷奠ざ欷缝じ欷轨ず欷混ぜ欷届ぞ欷快欹侅欹冹欹呾欹囷拷锟斤拷锟斤拷锟届欹夓欹嬱欹嶌欹忟欹撿欹栰欹欖欹涭欹濎欹熿ア欹れゥ欹ェ欹ォ欹カ欹ギ欹噿鈬斺垁鈭兟达綖藝藰藵藲藱赂藳隆驴藧鈭垜鈭徛も剦鈥扳梺鈼�鈻封柖鈾も櫊鈾♀櫏鈾р櫍鈯欌棃鈻b棎鈼戔枓鈻も枼鈻ㄢ枾鈻︹柀鈾ㄢ槒鈽庘槣鈽灺垛�犫�♀啎鈫椻啓鈫栤啒鈾櫓鈾櫖銐裤垳鈩栥弴鈩€弬銖樷劇鈧拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");for(j=0;j!=D[162].length;++j)if(D[162][j].charCodeAt(0)!==65533){e[D[162][j]]=41472+j;d[41472+j]=D[162][j]}D[163]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届ケ欹察コ欹奠ザ欹缝ジ欹轨ズ欹混ソ欹眷タ歃�歃侅歃冹歃呾歃囲歃嬱歃庫锟斤拷锟斤拷锟斤拷歃戩歃撿歃曥歃楈歃滌歃熿歃§Β歃lΔ歃レΖ歃ъΘ歃╈Κ歃Μ歃Ξ锟斤拷锟斤拷锟斤拷歃Π歃膘Σ歃踌Υ歃奠Χ歃缝Ω歃轨歃混歃届歃快歆冹歆嗢歆嬱歆嶌歆忟歆旍歆橃锛侊紓锛冿紕锛咃紗锛囷紙锛夛紛锛嬶紝锛嶏紟锛忥紣锛戯紥锛擄紨锛曪紪锛楋紭锛欙細锛涳紲锛濓紴锛燂紶锛★饥锛o激锛ワ鸡锛э绩锛╋吉锛棘锛籍锛及锛憋疾锛筹即锛碉级锛凤几锛癸己锛伙喀锛斤季锛匡絸锝侊絺锝冿絼锝咃絾锝囷綀锝夛綂锝嬶綄锝嶏綆锝忥綈锝戯綊锝擄綌锝曪綎锝楋綐锝欙綒锝涳綔锝濓浚锟�".split("");for(j=0;j!=D[163].length;++j)if(D[163][j].charCodeAt(0)!==65533){e[D[163][j]]=41728+j;d[41728+j]=D[163][j]}D[164]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届歆熿А歆lД歆Ж歆╈И歆М歆察С歆挫У歆鹅Х歆红Щ歆届Ь歆快▉歙傡▋歙勶拷锟斤拷锟斤拷锟届▍歙嗢▏歙婌◣歙忟◥歙戩♁歙撿〞歙栰歙欖歙涭歙濎歙熿歙§á歙là歙ワ拷锟斤拷锟斤拷锟届é歙ъè歙ǐ歙ō歙ǒ歙办ū歙察ǔ歙挫ǖ歙鹅ǚ歙胳ü歙红ɑ歙检ń歙眷飑�飑侅﹤飑冹﹦飑呾﹩銊便劜銊炽劥銊点劧銊枫劯銊广労銊汇劶銊姐劸銊裤厐銋併厒銋冦厔銋呫厗銋囥厛銋夈厞銋嬨厡銋嶃厧銋忋厫銋戙厭銋撱厰銋曘厲銋椼厴銋欍厷銋涖厹銋濄厼銋熴厾銋°參銋c叅銋ャ叇銋с叏銋┿叒銋叕銋叜銋叞銋便叢銋炽叴銋点叾銋枫吀銋广吅銋汇吋銋姐吘銋裤唨銌併唫銌冦唲銌呫唵銌囥唸銌夈唺銌嬨唽銌嶃啂锟�".split("");for(j=0;j!=D[164].length;++j)if(D[164][j].charCodeAt(0)!==65533){e[D[164][j]]=41984+j;d[41984+j]=D[164][j]}D[165]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届﹪飑堨飑婌飑庫飑戩飑撿飑栰飑橃飑氺飑烄飑l─飑レ│飑ъ┅飑拷锟斤拷锟斤拷锟届┇飑┉飑┋飑办┍飑察┏飑挫┑飑鹅┓飑胳┕飑红┗飑检┚飑快獉飒侅獋飒冹獏飒嗭拷锟斤拷锟斤拷锟届獓飒堨獕飒婌獘飒岇獚飒庫獜飒愳獞飒掛獡飒旍獣飒栰獥飒欖獨飒涭獪飒濎獮飒熿獱飒§飒l飒レ飒р叞鈪扁叢鈪斥叴鈪碘叾鈪封吀鈪癸拷锟斤拷锟斤拷鈪犫叀鈪⑩叄鈪も叆鈪︹収鈪ㄢ叐锟斤拷锟斤拷锟斤拷锟轿懳捨撐斘曃栁椢樜櫸毼浳溛澪炍熚犖∥Nのノξㄎ╋拷锟斤拷锟斤拷锟斤拷锟轿蔽参澄次滴段肺肝刮何晃嘉轿疚肯�蟻蟽蟿蠀蠁蠂蠄蠅锟斤拷锟斤拷锟斤拷锟�".split("");
+for(j=0;j!=D[165].length;++j)if(D[165][j].charCodeAt(0)!==65533){e[D[165][j]]=42240+j;d[42240+j]=D[165][j]}D[166]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届飒╈飒飒飒飒膘飒踌飒奠飒缝飒轨飒混飒快珌飓傡珒飓咃拷锟斤拷锟斤拷锟届珕飓囲珗飓夓珚飓嬱珟飓愳珤飓旍珪飓栰珬飓氺珱飓滌珴飓烄珶飓§飓l飓レ飓э拷锟斤拷锟斤拷锟届飓╈飓飓飓办飓察飓奠飓缝飓轨飓混飓届飓快瑎飕侅瑐飕冹瑒飕呾瑔飕囲瑝飕娾攢鈹傗攲鈹愨敇鈹斺敎鈹敜鈹粹敿鈹佲攦鈹忊敁鈹涒敆鈹b敵鈹敾鈺嬧敔鈹敤鈹封斂鈹濃敯鈹モ敻鈺傗敀鈹戔敋鈹欌敄鈹曗攷鈹嶁敒鈹熲敗鈹⑩敠鈹р敥鈹敪鈹敱鈹测數鈹垛敼鈹衡斀鈹锯晙鈺佲晝鈺勨晠鈺嗏晣鈺堚晧鈺婏拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷".split("");for(j=0;j!=D[166].length;++j)if(D[166][j].charCodeAt(0)!==65533){e[D[166][j]]=42496+j;d[42496+j]=D[166][j]}D[167]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届瑡飕岇瑣飕庫瑥飕戩瑨飕撿瑫飕栰瑮飕欖瑲飕涭瑴飕濎瑸飕熿飕l飕レ飕ъ飕╋拷锟斤拷锟斤拷锟届飕飕飕飕膘飕踌飕奠飕缝飕轨飕混飕届飕快瓈飙傡瓋飙勶拷锟斤拷锟斤拷锟届瓍飙嗢瓏飙婌瓔飙嶌瓗飙忟瓚飙掛瓝飙旍瓡飙栰瓧飙氺瓫飙滌瓰飙熿瓲飙§飙l飙飙飙飙帟銕栥帡鈩撱帢銖勩帲銕ゃ帴銕︺帣銕氥帥銕溿帩銕炪師銕犮帯銕€強銕嶃帋銕忋弿銕堛帀銖堛帶銕ㄣ幇銕便幉銕炽幋銕点幎銕枫幐銕广巰銕併巶銕冦巹銕恒幓銕笺幗銕俱幙銕愩帒銕掋帗銕斺劍銖�銖併帄銕嬨帉銖栥弲銕幃銕彌銕┿帾銕幀銖濄彁銖撱弮銖夈彍銖嗭拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");for(j=0;j!=D[167].length;++j)if(D[167][j].charCodeAt(0)!==65533){e[D[167][j]]=42752+j;d[42752+j]=D[167][j]}D[168]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届飙飙办飙察飙挫飙鹅飙红飙检飙眷飚�飚侅畟飚冹畡飚呾畣飚囲畧锟斤拷锟斤拷锟斤拷飚夓畩飚嬱畬飚嶌畮飚忟異飚戩畳飚撿當飚曥畺飚楈畼飚欖畾飚涭疂飚烄疅飚犾飚㈧锟斤拷锟斤拷锟斤拷飚れ飚飚飚飚飚飚办飚察飚挫飚鹅飚轨飚混飚届飚快瘈殳侅瘋殳冹瘎脝脨陋摩锟侥诧拷目艁脴艗潞脼纽艎锟姐墵銐°墷銐c墹銐ャ墻銐с墾銐┿壀銐壃銐壆銐壈銐便壊銐炽壌銐点壎銐枫壐銐广壓銐烩搻鈸戔搾鈸撯摂鈸曗摉鈸椻摌鈸欌摎鈸涒摐鈸濃摓鈸熲摖鈸♀摙鈸b摛鈸モ摝鈸р摠鈸┾憼鈶♀憿鈶b懁鈶モ懄鈶р懆鈶┾應鈶懍鈶懏陆鈪撯厰录戮鈪涒厹鈪濃厼锟�".split("");for(j=0;j!=D[168].length;++j)if(D[168][j].charCodeAt(0)!==65533){e[D[168][j]]=43008+j;d[43008+j]=D[168][j]}D[169]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届瘏殳嗢瘒殳堨瘔殳婌瘚殳岇瘝殳庫瘡殳愳瘧殳掛瘬殳曥瘱殳楈瘶殳欖瘹殳涭瘻殳濎癁殳燂拷锟斤拷锟斤拷锟届癄殳§殳l殳殳殳殳殳办殳察殳挫殳鹅殳胳殳红殳硷拷锟斤拷锟斤拷锟届殳眷彀�彀侅皞彀冹皠彀呾皢彀囲皥彀夓皧彀嬱皫彀忟皯彀掛皳彀曥皷彀楈皹彀欖皻彀涭盀彀熿盃彀l挨忙膽冒魔谋某母艀艂酶艙脽镁脓艐艍銏�銏併垈銏冦垊銏呫垎銏囥垐銏夈垔銏嬨垖銏嶃垘銏忋垚銏戙垝銏撱垟銏曘垨銏椼垬銏欍垰銏涒挏鈷濃挒鈷熲挔鈷♀挗鈷b挙鈷モ挦鈷р挩鈷┾挭鈷挰鈷挳鈷挵鈷扁挷鈷斥挻鈷碘懘鈶碘懚鈶封懜鈶光懞鈶烩懠鈶解懢鈶库拃鈷佲拏鹿虏鲁鈦粹伩鈧佲倐鈧冣倓锟�".split("");for(j=0;j!=D[169].length;++j)if(D[169][j].charCodeAt(0)!==65533){e[D[169][j]]=43264+j;d[43264+j]=D[169][j]}D[170]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届哎彀蔼彀碍彀氨彀察俺彀挫暗彀鹅胺彀红翱毂�毂侅眰毂冹眴毂囲眽毂婌眿毂嶌睅锟斤拷锟斤拷锟斤拷毂忟睈毂戩睊毂撿睎毂氺睕毂滌睗毂烄睙毂§雹毂l饱毂ъ暴毂鲍毂杯毂悲毂膘辈锟斤拷锟斤拷锟斤拷毂踌贝毂鹅狈毂胳惫毂红被毂检苯毂眷笨觳�觳侅矀觳冹矂觳呾矄觳囲矆觳夓矈觳嬱矊觳嶌矌觳忟矏觳戩矑觳撱亖銇傘亙銇勩亝銇嗐亣銇堛亯銇娿亱銇屻亶銇庛亸銇愩亼銇掋亾銇斻仌銇栥仐銇樸仚銇氥仜銇溿仢銇炪仧銇犮仭銇€仯銇ゃ仴銇︺仹銇ㄣ仼銇伀銇伃銇伅銇般伇銇层伋銇淬伒銇躲伔銇搞伖銇恒伝銇笺伣銇俱伩銈�銈併倐銈冦倓銈呫倖銈囥倛銈夈倞銈嬨倢銈嶃値銈忋倫銈戙倰銈擄拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");for(j=0;j!=D[170].length;++j)if(D[170][j].charCodeAt(0)!==65533){e[D[170][j]]=43520+j;d[43520+j]=D[170][j]}D[171]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届矓觳曥矕觳楈矚觳涭矟觳烄矡觳§并觳l菠觳レ拨觳ъ勃觳帛觳办脖觳察渤觳鹅卜觳癸拷锟斤拷锟斤拷锟届埠觳混步觳眷部斐�斐侅硞斐冹硢斐堨硦斐嬱硨斐嶌硯斐忟硲斐掛硴斐曥硸斐楈硺斐欖硽锟斤拷锟斤拷锟斤拷斐涭硿斐濎碁斐熿碃斐§尝斐l偿斐厂斐畅斐倡斐钞斐潮斐察吵斐挫车斐鹅撤斐胳彻斐红郴斐检辰銈°偄銈c偆銈ャ偊銈с偍銈┿偑銈偓銈偖銈偘銈便偛銈炽偞銈点偠銈枫偢銈广偤銈汇偧銈姐偩銈裤儉銉併儌銉冦儎銉呫儐銉囥儓銉夈儕銉嬨儗銉嶃儙銉忋儛銉戙儝銉撱償銉曘儢銉椼儤銉欍儦銉涖儨銉濄優銉熴儬銉°儮銉c儰銉ャ儲銉с儴銉┿儶銉儸銉儺銉儼銉便儾銉炽兇銉点兌锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");for(j=0;j!=D[171].length;++j)if(D[171][j].charCodeAt(0)!==65533){e[D[171][j]]=43776+j;d[43776+j]=D[171][j]}D[172]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届尘斐快磤齑傡磧齑勳磪齑嗢磭齑婌磱齑嶌磶齑忟磻齑掛磽齑旍磿齑栰礂齑氺礈齑烄礋齑狅拷锟斤拷锟斤拷锟届础齑㈧矗齑レ处齑ъ穿齑传齑串齑窗齑膘床齑踌创齑奠炊齑缝锤齑红椿齑检唇齑撅拷锟斤拷锟斤拷锟届纯斓�斓侅祩斓冹祫斓呾祮斓囲祱斓夓祳斓嬱祵斓嶌祹斓忟祼斓戩祾斓撿禂斓曥禆斓楈禈斓欖禋斓涭禎斓烄禑袗袘袙袚袛袝衼袞袟袠袡袣袥袦袧袨袩袪小孝校肖啸笑效楔些歇蝎鞋协挟携锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟叫靶毙残承葱笛懶缎沸感剐盒恍夹叫拘垦�褋褌褍褎褏褑褔褕褖褗褘褜褝褞褟锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷".split("");for(j=0;j!=D[172].length;++j)if(D[172][j].charCodeAt(0)!==65533){e[D[172][j]]=44032+j;d[44032+j]=D[172][j]}D[173]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届怠斓㈧担斓レ郸斓ъ胆斓╈氮斓诞斓办挡斓踌荡斓奠刀斓缝倒斓红祷斓检到斓眷悼於�锟斤拷锟斤拷锟斤拷於侅秱於冹秳於呾秵於囲秹於婌秼於岇秿於庫稄於愳稇於掛稉於栰稐於欖稓於涭稘於烄稛锟斤拷锟斤拷锟斤拷於犾丁於㈧叮於定於东於董於动於膘恫於踌洞於奠抖於缝陡於轨逗於混都於届毒於快穩旆侅穫旆冹穮锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");for(j=0;j!=D[173].length;++j)if(D[173][j].charCodeAt(0)!==65533){e[D[173][j]]=44288+j;d[44288+j]=D[173][j]}D[174]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届穯旆囲穲旆夓穵旆嬱穽旆庫窂旆戩窉旆撿窋旆曥窎旆楈窐旆欖窔旆涭窚旆濎窞旆熿窢旆★拷锟斤拷锟斤拷锟届发旆l筏旆レ乏旆ъ珐旆帆旆樊旆繁旆察烦旆挫返旆鹅贩旆红芳旆眷房旄�旄侅競锟斤拷锟斤拷锟斤拷旄冹竻旄嗢竾旄夓笂旄嬱笉旄庫笍旄愳笐旄掛笓旄曥笘旄楈笜旄氺笡旄滌笣旄烄笩旄㈧福旄レ甫旄ъ俯旄斧锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");for(j=0;j!=D[174].length;++j)if(D[174][j].charCodeAt(0)!==65533){e[D[174][j]]=44544+j;d[44544+j]=D[174][j]}D[175]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届脯旄府旄覆旄挫付旄缝父旄轨负旄混讣旄届妇旄快箑旃侅箓旃冹箘旃呾箚旃囲箞旃夛拷锟斤拷锟斤拷锟届箠旃嬱箤旃嶌箮旃忟箰旃戩箳旃撿箶旃曥箹旃楈箽旃涭節旃烄耿旃l工旃レ功旃ъ躬旃拷锟斤拷锟斤拷锟届巩旃拱旃膘共旃踌苟旃缝构旃红够旃届咕旃快簚旌侅簜旌冹簡旌堨簥旌嬱簩旌嶌簬旌忟簰旌撿簳旌栰簵旌欙拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷".split("");for(j=0;j!=D[175].length;++j)if(D[175][j].charCodeAt(0)!==65533){e[D[175][j]]=44800+j;d[44800+j]=D[175][j]}D[176]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届簹旌涭簻旌濎簽旌熿孩旌骇旌憨旌韩旌函旌办罕旌察撼旌挫旱旌鹅悍旌胳汗旌猴拷锟斤拷锟斤拷锟届夯旌检航旌眷嚎旎�旎傡粌旎勳粎旎嗢粐旎堨粔旎婌粙旎岇粛旎庫粡旎愳粦旎掛粨旎旍粫锟斤拷锟斤拷锟斤拷旎栰粭旎橃粰旎氺粵旎滌粷旎烄粺旎犾弧旎㈧唬旎户旎╈华旎划旎话旎膘徊旎踌欢旎红换旎检唤旎眷豢臧�臧侁皠臧囮皥臧夑皧臧愱皯臧掙皳臧旉皶臧栮皸臧欔皻臧涥皽臧濌盃臧り艾臧隘臧瓣氨臧戈肮臧缄眬瓯嬯睄瓯旉睒瓯滉卑瓯标贝瓯逢备瓯宏瞼瓴侁矁瓴勱矃瓴嗞矇瓴婈矉瓴岅矏瓴旉矞瓴濌矡瓴犼病瓴博瓴铂瓴舶瓴戈补瓴魂布瓴疥硜瓿勱硤瓿岅硶瓿楆碃瓿£长瓿ш敞瓿超瓿嘲瓿标吵瓿店扯瓿缄辰甏�甏勱磫锟�".split("");for(j=0;j!=D[176].length;++j)if(D[176][j].charCodeAt(0)!==65533){e[D[176][j]]=45056+j;d[45056+j]=D[176][j]}D[177]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届紓旒冹紖旒嗢紘旒夓紛旒嬱紝旒嶌紟旒忟紥旒旍紪旒楈紭旒欖細旒涭紳旒烄紵旒§饥旒o拷锟斤拷锟斤拷锟届讥旒姬旒缉旒极旒疾旒踌即旒奠级旒缝脊旒红蓟旒检冀旒眷伎旖�旖侅絺旖冹絼锟斤拷锟斤拷锟斤拷旖呾絾旖囲綀旖夓綂旖嬱綄旖嶌綆旖忟綈旖戩綊旖撿綎旖楈綑旖氺經旖濎綖旖熿綘旖§舰旖l溅旖姜旖浆甏岅磵甏応磻甏橁礈甏犼穿甏喘甏搓吹甏戈醇甑勱祬甑囮祲甑愱禂甑橁怠甑j惮甑蛋甑酬荡甑店刀甑魂导甑疥悼甓侁秱甓堦秹甓岅稅甓滉稘甓り斗攴�攴侁穭攴堦窅攴戧窊攴滉窢攴り犯攴龟芳攴筷竴旮侁笀旮夑笅旮嶊笖旮瓣副旮搓阜旮戈负旯�旯侁箖旯呹箚旯婈箤旯嶊箮旯愱箶旯栮箿旯濌篃旯犼埂旯リ龚旯╆宫旯瓣垢锟�".split("");for(j=0;j!=D[177].length;++j)if(D[177][j].charCodeAt(0)!==65533){e[D[177][j]]=45312+j;d[45312+j]=D[177][j]}D[178]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届江旖蒋旖察匠旖奠蕉旖缝焦旖红交旖检浇旖眷娇炀侅緜炀冹緞炀嗢緡炀堨緣炀婌緥炀嶏拷锟斤拷锟斤拷锟届編炀忟緪炀戩緬炀撿緮炀曥緰炀楈緲炀欖練炀涭緶炀濎緸炀熿緺炀㈧荆炀れ茎炀晶炀╋拷锟斤拷锟斤拷锟届惊炀粳炀井炀颈炀察境炀挫镜炀鹅痉炀胳竟炀红净炀检窘炀眷究炜�炜侅總炜冹繀炜嗢繃炜堨繅炜婌繈旯龟够旯缄菇旰勱簠旰岅杭旰疥壕昊�昊勱粚昊嶊粡昊愱粦昊橁粰昊滉花昊画昊搓桓昊缄紘昙堦紞昙愱棘昙及昙碴即昙缄冀昙筷絹杲傟絻杲堦綁杲愱綔杲濌饯杲リ焦昃�昃勱緢昃愱緫昃曣緶昃戈竟昃缄縺昕囮繄昕夑繈昕嶊繋昕旉繙昕咯昕瓣勘昕搓扛雬�雬侂�勲�岆�愲�旊�滊�濍�亜雭呺亪雭婋亴雭庪亾雭旊仌雭楇仚锟�".split("");for(j=0;j!=D[178].length;++j)if(D[178][j].charCodeAt(0)!==65533){e[D[178][j]]=45568+j;d[45568+j]=D[178][j]}D[179]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟届繉炜嶌繋炜忟繍炜戩繏炜撿繑炜曥繓炜楈繕炜欖繗炜涭繙炜濎繛炜熿竣炜l骏炜咖炜╋拷锟斤拷锟斤拷锟届开炜楷炜慨炜坎炜挫慷炜缝扛炜轨亢炜混拷炜眷靠韤來�傢�冺�呿�嗧�図�堩�夗�婏拷锟斤拷锟斤拷锟巾�嬳�岉�嶍�庬�忢�愴�掜�擁�旐�曧�栱�楉�欗�氻�涰�滍�濏�烅�燀�犿�№�㈨�m�ろ�ロ��ы��╉���仢雭茧伣雮�雮勲倢雮嶋倧雮戨倶雮欕倸雮滊偀雮犽偂雮㈦偍雮╇偒雮偔雮偗雮彪偝雮措偟雮鸽偧雰勲儏雰囯儓雰夒儛雰戨償雰橂儬雰ル剤雱夒剫雱岆剱雱掚創雱橂剻雱涬劀雱濍劊雱る劌雱劕雱措劦雱冯劯雱闺厐雲侂厔雲堧厫雲戨厰雲曤厴雲滊厾雲鸽吂雲茧唨雴傠唸雴夒唻雴嶋啋雴撾啍雴橂啘雴噷雵愲嚁雵滊嚌锟�".split("");for(j=0;j!=D[179].length;++j)if(D[179][j].charCodeAt(0)!==65533){e[D[179][j]]=45824+j;d[45824+j]=D[179][j]}D[180]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾���绊�表�岔�稠�俄�讽�鬼�喉�豁�巾�卷�宽亐韥來亗韥冺亞韥堩亰韥嬳亴韥嶍亷韥忥拷锟斤拷锟斤拷锟巾亼韥掜亾韥曧仏韥楉仚韥氻仜韥滍仢韥烅仧韥№仮韥m仱韥ロ仸韥ы仺韥╉仾韥伄韥拷锟斤拷锟斤拷锟巾伇韥岔伋韥淀伓韥讽伕韥鬼伜韥豁伨韥宽個韨傢們韨勴倕韨嗧倗韨堩倝韨婍倠韨岉倣韨庬倧韨愴倯韨掜倱韨旊嚐雵嚛雵嚢雵闺嚮雵诫垊雸呺垐雸嬰垖雸旊垥雸楇垯雸犽埓雸茧墭雺滊墵雺墿雺措壍雺茧妱電呺妷電愲姂電旊姌電欕姎電犽姟電k姤電﹄姫電姲電措媹雼夒媽雼愲嫆雼橂嫏雼涬嫕雼㈦嫟雼ル嫤雼嫬雼嫮雼嫰雼畴嫶雼惦嫹雼鸽嫻雼弘嫽雼侩寑雽侂寗雽堧寪雽戨寭雽旊寱雽滊崝雿曤崠雿橂崨雿滊崬雿熾崵雿ワ拷".split("");for(j=0;j!=D[180].length;++j)if(D[180][j].charCodeAt(0)!==65533){e[D[180][j]]=46080+j;d[46080+j]=D[180][j]}D[181]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾倳韨栱倵韨橅倷韨氻倹韨滍倽韨烅偀韨犿偂韨㈨偅韨偋韨╉偑韨偔韨偗韨绊偙韨诧拷锟斤拷锟斤拷锟巾偝韨俄偢韨喉偦韨柬偨韨卷偪韮傢儍韮呿儐韮図儕韮嬳儗韮嶍儙韮忢儝韮栱儣韮橅儥韮氾拷锟斤拷锟斤拷锟巾儧韮烅儫韮№儮韮m儱韮儳韮儵韮儷韮儾韮稠兇韮淀兌韮讽児韮喉兓韮柬兘韮卷兛韯�韯來剛韯冺剟雿щ崺雿嵁雿半嵄雿措嵏霂�霂侂巸霂勲巺霂岆帎霂旊帬霂‰帹霂弰霃呺張霃嬰弻霃庪彁霃旊彆霃楇彊霃涬彎霃犽彜霃徏霅愲悩霅滊悹霅惄霅惔霊愲憫霊旊憳霊犽憽霊k懃霊拃霋堧挐霋る挩霋挼霋冯捁霌�霌勲搱霌愲摃霌滊摑霌犽摚霌る摝霌摥霌摫霌鸽敂霐曤敇霐涬敎霐る敟霐щ敤霐╇敧霐半敱霐措敻锟�".split("");for(j=0;j!=D[181].length;++j)if(D[181][j].charCodeAt(0)!==65533){e[D[181][j]]=46336+j;d[46336+j]=D[181][j]}D[182]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾剠韯嗧剣韯堩剦韯婍剫韯岉剮韯忢剱韯戫剴韯擁剶韯曧剸韯楉剺韯欗剼韯涰劀韯濏劄韯燂拷锟斤拷锟斤拷锟巾劆韯№劉韯m劋韯ロ劍韯ы劏韯╉劒韯劕韯劗韯劜韯稠劦韯俄劮韯鬼劵韯柬劷韯撅拷锟斤拷锟斤拷锟巾効韰傢厗韰図厛韰夗厞韰嬳厧韰忢厬韰掜厯韰曧厲韰楉厴韰欗厷韰涰厼韰犿參韰m叅韰ロ叇韰ы叐韰叓韰晙霑侂晝霑勲晠霑嬰晫霑嶋晲霑旊暅霑濍暉霑犽暋霒犽枴霒る枿霒柅霒半柋霒畴柎霒惦柣霒茧柦霔�霔勲棇霔嶋棌霔愲棏霔橂棳霕愲槕霕旊槝霕ル槵霕措檲霗る櫒霘滊殱霘犽殼霘毈霘彪洈霙半洿霙鸽渶霚侂渽霚湬霚湳霚半湼霚闺溁霛勲潏霛岆潝霛曤潬霛る潹霛半澅霛畴澋霛茧澖霝�霝勲瀸霝嶋瀼霝愲瀾霝掚灃霝楋拷".split("");for(j=0;j!=D[182].length;++j)if(D[182][j].charCodeAt(0)!==65533){e[D[182][j]]=46592+j;d[46592+j]=D[182][j]}D[183]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾叜韰叞韰表叢韰稠叴韰淀叾韰讽吀韰鬼吅韰豁吔韰卷吙韱�韱來唫韱冺唴韱嗧唶韱夗唺锟斤拷锟斤拷锟斤拷韱嬳唽韱嶍啂韱忢啇韱戫啋韱擁啍韱曧問韱楉啒韱欗啔韱涰啘韱濏啚韱燀啟韱m啣韱啩锟斤拷锟斤拷锟斤拷韱╉啰韱啲韱啴韱啿韱错喍韱讽喐韱鬼喕韱巾喚韱宽噥韲傢噧韲勴噮韲嗧噰韲堩噳韲婍噵韲岉噸韲庬噺霝橂灆霝滊灎霝灘霝灛霝灤霝惦灨霟囯焿霟煭霟半煷霟茧熃霟侩爛霠侂爣霠堧爥霠岆爯霠橂牂霠涬牆霠る牓霠牞霠措牭霠冯牳霠闺搿勲搿撾搿濍搿る‖搿’搿彪「搿茧擘擘措⒏耄�耄侂耄呺耄愲耄濍耄‰(耄╇,耄半8耄闺;耄诫毪橂毪茧そ毳�毳勲毳忞毳橂毳滊毳ォ锟�".split("");for(j=0;j!=D[183].length;++j)if(D[183][j].charCodeAt(0)!==65533){e[D[183][j]]=46848+j;d[46848+j]=D[183][j]}D[184]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾噽韲戫噿韲擁嚁韲曧嚃韲楉嚈韲氻嚊韲滍嚌韲烅嚐韲犿嚒韲㈨嚕韲ろ嚗韲嚙韲嚛韲拷锟斤拷锟斤拷锟巾嚝韲嚟韲嚡韲绊嚤韲岔嚦韲淀嚩韲讽嚬韲喉嚮韲柬嚱韲卷嚳韴�韴來垈韴冺垊韴呿垎锟斤拷锟斤拷锟斤拷韴堩垔韴嬳垖韴嶍垘韴忢垜韴掜垞韴旐垥韴栱垪韴橅垯韴氻垱韴滍垵韴烅垷韴犿垺韴㈨垼韴ろ垾韴埀韴埄毳キ毳措サ毳鸽ゼ毽勲毽囯毽婋毽庪Μ毽Π毽措毽诫毵侂毵夒毵庪毵愲毵掚毵欕毵濍毵‰В毵るД毵К毵措У毵冯Ц毵闺Ш毹�毹侂▓毹曤ǜ毹闺氅�氅傠﹫氅夒氅嶋氅撾氅曤氅滊─氅ル┃氅┅氅半┍氅措└氇冸獎氇呺獓氇岆氇╇氇氇搽氇闺氇诫珓氆堧珮氆欕锟�".split("");for(j=0;j!=D[184].length;++j)if(D[184][j].charCodeAt(0)!==65533){e[D[184][j]]=47104+j;d[47104+j]=D[184][j]}D[185]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾埅韴埉韴埍韴岔埑韴淀埗韴讽埜韴鬼埡韴豁埦韷�韷傢墐韷勴墔韷嗧墖韷夗墛韷嬳墝锟斤拷锟斤拷锟斤拷韷嶍墡韷忢墣韷戫墥韷擁墧韷曧墫韷楉墭韷欗墯韷涰墲韷烅墴韷犿墶韷㈨墸韷ロ墻韷ы墾锟斤拷锟斤拷锟斤拷韷╉壀韷壃韷壆韷壈韷表壊韷稠壌韷淀壎韷讽壐韷鬼壓韷豁壖韷巾壘韷宽妭韸冺妳韸嗧妵韸夗妸韸嬳妼氍�氍勲瑣氍忞瑧氍橂瑴氍犽氍氍惦氍鸽氍茧氍倦瓌氕呺瓏氕夒瓖氕忞瓙氕旊瓨氕‰氕畧氘岆異氘る氘氘冯瘈氙勲瘓氙愲瘬氙鸽氙茧氚�氚傠皥氚夒皨氚岆皪氚忞皯氚旊皶氚栯皸氚橂皼氚滊皾氚炿盁氚る哎氚щ癌氚鞍氚彪按氚鸽眬氡侂眱氡勲眳氡夒睂氡嶋睈氡濍矂氩呺矆氩嬰矊氩庪矓氩曤矖锟�".split("");for(j=0;j!=D[185].length;++j)if(D[185][j].charCodeAt(0)!==65533){e[D[185][j]]=47360+j;d[47360+j]=D[185][j]}D[186]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾妽韸庬姀韸掜姄韸旐姈韸楉姌韸欗姎韸涰姖韸烅姛韸№姠韸m姤韸姧韸姪韸姭韸拷锟斤拷锟斤拷锟巾姰韸姲韸岔姵韸错姷韸俄姺韸喉娀韸巾娋韹來媰韹勴媴韹嗧媷韹婍媽韹嶍嫀韹忢嫄韹戯拷锟斤拷锟斤拷锟巾嫆韹擁嫊韹栱嫍韹欗嫐韹涰嫕韹烅嫙韹犿嫛韹㈨嫞韹嫥韹嫨韹嫬韹嫮韹嫰韹岔嫵韹淀嫸韹讽嫻韹弘矙氩氹矤氩‰菠氩щ波氩半脖氩畴泊氩惦布氩诫硛氤勲硩氤忞硱氤戨硶氤橂硿氤措车氤峨掣氤茧磩氪呺磭氪夒磹氪旊搐氪祤氲堧祲氲岆祼氲橂禉氲る胆攵�攵侂秳攵囯秷攵夒秺攵愲稇攵撾稌攵欕稓攵滊钉攵半陡敕旊窌敕橂窚敕╇钒敕措犯敫�敫冸竻敫岆笉敫愲笖敫滊笣敫熾箘牍呺箞牍岆箮牍旊箷牍楇箼牍氹箾牍犽埂牍わ拷".split("");for(j=0;j!=D[186].length;++j)if(D[186][j].charCodeAt(0)!==65533){e[D[186][j]]=47616+j;d[47616+j]=D[186][j]}D[187]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾嫽韹柬嫿韹卷嬁韺傢寗韺嗧寚韺堩寜韺婍寢韺忢寫韺掜寭韺曧寳韺橅寵韺氻寷韺烅將韺o拷锟斤拷锟斤拷锟巾尋韺導韺尗韺尞韺尡韺岔尦韺错尩韺俄尫韺喉尵韺宽崁韻來崅韻冺崋韻図崍韻夛拷锟斤拷锟斤拷锟巾崐韻嬳崒韻嶍崕韻忢崘韻戫崚韻擁崝韻曧崠韻楉崢韻欗崥韻涰崪韻濏崬韻燀崰韻№崲韻m崵韻ロ崷韻ы崹韻╇龚牍拱牍彪钩牍措沟牍浑辜牍诫簚牒勲簩牒嶋簭牒愲簯牒橂簷牒粣牖戨粩牖楇粯牖犽唬牖る互牖紒爰堧級爰橂紮爰涬紲爰濍絸虢侂絼虢堧綈虢戨綍刖旊景肟呺繉肟嶋繍肟旊繙肟熾俊靲检亼靵橃仠靵犾仺靵╈倫靷戩倲靷橃偁靷§偅靷レ偓靷偗靷办偝靷挫偟靷鹅偧靷届偪靸�靸侅儏靸堨儔靸岇儛靸橃儥靸涭儨靸濎儰锟�".split("");for(j=0;j!=D[187].length;++j)if(D[187][j].charCodeAt(0)!==65533){e[D[187][j]]=47872+j;d[47872+j]=D[187][j]}D[188]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾崻韻崿韻嵁韻嵃韻表嵅韻稠嵈韻淀嵍韻讽嵏韻鬼嵑韻豁嵕韻宽巵韼傢巸韼呿巻韼囷拷锟斤拷锟斤拷锟巾巿韼夗帄韼嬳帋韼掜帗韼旐帟韼栱帡韼氻帥韼濏帪韼燀帯韼㈨帲韼ろ帴韼帶韼幀韼拷锟斤拷锟斤拷锟巾幆韼绊幈韼岔幊韼淀幎韼讽幑韼喉幓韼巾幘韼宽弨韽來弬韽冺弳韽図強韽嬳弻韽嶍弾韽忢彂韽掜彄韽旐彆韽栰儱靸儸靸挫兊靸缝児靹�靹勳剤靹愳剷靹滌劃靹烄劅靹犾劊靹れ劍靹ъ劕靹劘靹办劚靹鹅劯靹轨劶靺�靺堨厜靺嬱厡靺嶌厰靺曥厴靺滌叅靺レ収靺叐靺办叴靺胳唴靻岇啀靻庫啇靻旍問靻滌啙靻熿啞靻レ啫靻╈啲靻办喗靽勳噲靽岇嚁靽楈嚇靽犾嚖靽嚢靽膘嚦靽检嚱靾�靾勳垖靾嶌垙靾戩垬靾欖垳靾熿垹靾埄靾埈锟�".split("");for(j=0;j!=D[188].length;++j)if(D[188][j].charCodeAt(0)!==65533){e[D[188][j]]=48128+j;d[48128+j]=D[188][j]}D[189]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾彈韽欗彋韽涰彍韽濏彏韽燀彔韽㈨彜韽ロ彟韽ы彣韽╉彧韽彯韽彵韽岔彸韽淀彾韽凤拷锟斤拷锟斤拷锟巾徃韽鬼徍韽豁従韾�韾傢悆韾勴悈韾嗧悋韾夗悐韾嬳悓韾嶍悗韾忢悙韾戫悞韾擁悢韾曧悥锟斤拷锟斤拷锟斤拷韾楉悩韾欗悮韾涰悳韾烅悷韾犿悺韾㈨悾韾ろ惀韾惂韾惄韾惈韾惌韾惎韾绊惐韾岔惓韾错惖韾俄惙靾埍靾察埓靿堨墣靿戩墧靿橃墵靿レ壃靿壈靿挫壖靿届壙鞀侅妶鞀夓姁鞀橃姏鞀濎姢鞀レ姩鞀姯鞀挫姷鞀缝姽鞁滌嫕鞁犾嫞鞁れ嫬鞁嫮鞁嫳鞁鹅嫺鞁轨嫽鞁检寑鞂堨寜鞂岇實鞂撿寯鞂曥寴鞂滌尋鞂レ尐鞂╈崊鞃崺鞃嵃鞃察嵏鞃轨嵓鞃届巹鞄堨帉鞆�鞆橃彊鞆滌彑鞆犾彚鞆彥鞆彺鞆奠徃鞇堨悙鞇れ惉鞇帮拷".split("");for(j=0;j!=D[189].length;++j)if(D[189][j].charCodeAt(0)!==65533){e[D[189][j]]=48384+j;d[48384+j]=D[189][j]}D[190]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾惛韾鬼惡韾豁惣韾巾惥韾宽憗響傢憙響呿憜響図憟響夗憡響嬳憣響嶍憥響忢憪響戫憭響擄拷锟斤拷锟斤拷锟巾憯響曧憱響楉憳響欗憵響涰憹響烅憻響№憿響m懃響懅響懇響懌響懏響绊懕響诧拷锟斤拷锟斤拷锟巾懗響错懙響俄懛響喉懟響巾懢頀來拑頀勴拝頀嗧拠頀婍拰頀庬拸頀愴拺頀掜挀頀曧挅頀楉挊頀欗挌頀涰挏頀濎惔鞇检惤鞈堨懁鞈レ懆鞈懘鞈奠懝鞉�鞉旍挏鞉胳捈鞊╈摪鞊膘摯鞊胳摵鞊快攢鞌侅攲鞌愳敂鞌滌敤鞌╈敩鞌办敻鞌轨敾鞌届晞鞎呾晥鞎夓晩鞎岇晬鞎庫晸鞎旍晻鞎楈晿鞎欖暆鞎烄暊鞎§暏鞎暟鞎膘暢鞎挫暤鞎检暯鞏�鞏勳枃鞏岇枍鞏忟枒鞏曥枟鞏橃枩鞏犾柀鞏挫柕鞏胳柟鞏混柤鞏届柧鞐勳梾鞐嗢棁鞐堨棄鞐婌棇鞐庯拷".split("");for(j=0;j!=D[190].length;++j)if(D[190][j].charCodeAt(0)!==65533){e[D[190][j]]=48640+j;d[48640+j]=D[190][j]}D[191]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾挒頀燀挔頀№挗頀m挙頀ロ挦頀ы挩頀挮頀挱頀挴頀绊挶頀岔挸頀错挼頀俄挿頀革拷锟斤拷锟斤拷锟巾捁頀喉捇頀柬捊頀卷捒頁�頁來搨頁冺搫頁呿搯頁図搱頁夗搳頁嬳搷頁庬搹頁戫搾頁擁摃锟斤拷锟斤拷锟斤拷頁栱摋頁橅摍頁氻摏頁濏摓頁犿摗頁㈨摚頁ろ摜頁摟頁╉摢頁摥頁摨頁表摬頁稠摯頁淀摱頁讽摴頁喉摷鞐愳棏鞐旍棙鞐犾棥鞐l棩鞐棴鞐棸鞐挫椂鞐缝椉鞐届椌鞐快榾鞓侅槄鞓嗢槆鞓堨槍鞓愳槝鞓欖槢鞓滌槫鞓レ槰鞓槶鞓槹鞓踌槾鞓奠樂鞓轨樆鞕�鞕侅檮鞕堨檺鞕戩檽鞕旍檿鞕滌櫇鞕犾櫖鞕櫛鞕胳櫣鞕检殌鞖堨殙鞖嬱殟鞖旍殨鞖橃殰鞖れ殽鞖ъ毄鞖办毐鞖挫毟鞖轨毢鞗�鞗侅泝鞗呾泴鞗嶌洂鞗旍洔鞗濎洜鞗§洦锟�".split("");for(j=0;j!=D[191].length;++j)if(D[191][j].charCodeAt(0)!==65533){e[D[191][j]]=48896+j;d[48896+j]=D[191][j]}D[192]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾摼頁宽攢頂來攤頂冺攨頂嗧攪頂夗攰頂嬳攳頂庬攺頂愴攽頂掜敁頂栱敇頂欗敋頂涰敎頂濓拷锟斤拷锟斤拷锟巾敒頂燀敔頂№敘頂m敜頂ロ敠頂ы敤頂╉敧頂敩頂敭頂敯頂表敳頂稠敶頂淀敹頂凤拷锟斤拷锟斤拷锟巾敻頂鬼敽頂豁斁頂宽晛頃傢晝頃呿晢頃図晥頃夗晩頃嬳晭頃愴晵頃擁晹頃曧晼頃楉暁頃涰暆頃烅暉頃№暍頃l洨鞗洶鞗胳浌鞗届渼鞙呾湀鞙岇湐鞙曥湕鞙欖湢鞙§湦鞙湴鞙膘湷鞙奠湻鞙检溄鞚�鞚勳潑鞚岇潔鞚忟潙鞚掛潛鞚旍潟鞚栰潡鞚橃潨鞚犾潹鞚澊鞚奠澑鞚检澖鞚眷瀮鞛勳瀰鞛囲瀳鞛夓瀶鞛庫瀽鞛戩灁鞛栰灄鞛橃灇鞛犾灐鞛l灓鞛レ灕鞛灜鞛办灤鞛检灲鞛快焵鞜侅焾鞜夓煂鞜庫煇鞜橃煗鞜れ煥鞜爛鞝侅爠鞝堨爦锟�".split("");for(j=0;j!=D[192].length;++j)if(D[192][j].charCodeAt(0)!==65533){e[D[192][j]]=49152+j;d[49152+j]=D[192][j]}D[193]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾暏頃暓頃暚頃暞頃绊暠頃岔暢頃俄暦頃鬼暫頃豁暯頃卷暱頄�頄來杺頄冺枂頄婍枊锟斤拷锟斤拷锟斤拷頄岉枍頄庬枏頄戫枓頄擁枖頄曧枛頄楉枠頄欗枤頄涰枩頄濏枮頄燀枲頄№枹頄m枻頄枾锟斤拷锟斤拷锟斤拷頄柀頄柅頄柇頄柉頄绊柋頄岔柍頄错柕頄俄柗頄疙柟頄喉柣頄柬柦頄卷柨項�項來梻項冺梽項呿梿項囲爯鞝戩爴鞝曥爾鞝滌牆鞝犾牑鞝牠鞝牨鞝胳牸臁�臁堨臁岇臁旍“臁膘〈臁胳『膦�膦侅膦呾膦囲膦岇膦旍膦熿ⅰ膦⒓膦届欤堨欤旍欤楈欤犾!欤れ5欤检=欷�欷勳欷嗢欷嶌欷戩欷ご欹愳欹旍欹犾ァ欹lガ欹办ゴ欹检歃夓歃愳歃欖歃濎歆侅歆囲歆婌歆戩锟�".split("");for(j=0;j!=D[193].length;++j)if(D[193][j].charCodeAt(0)!==65533){e[D[193][j]]=49408+j;d[49408+j]=D[193][j]}D[194]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾棅項嬳棈項庬棌項戫棑項旐棔項栱棗項氻棞項烅棢項犿棥項㈨棧項棫項╉棯項棴項拷锟斤拷锟斤拷锟巾棷項绊棻項岔棾項俄椄項喉椈項柬椊項卷椏順傢槂順呿槅順図槈順婍構順岉槏順庬槒順掞拷锟斤拷锟斤拷锟巾槚順楉槝順欗槡順涰槤順烅槦順№槩順m槬順槯順槱順槴順槷順槹順表槻順稠槾順淀樁順讽樅順混歆栰歆氺歆濎歆㈧Г歆ъК歆Н歆办П歆胳Ч歆检█歙堨▔歙嬱▽歙嶌〝歙橃ī飑岇飑愳飑滌飑熿飑§┄飑届獎飒橃飒届珋飓勳珜飓嶌珡飓戩珦飓橃珯飓犾飓挫瑘飕愳瑪飕橃瑺飕§瓉飙堨瓑飙岇瓙飙橃瓩飙濎飙胳飚滌殳旍殳ъ彀岇皪彀愳皵彀滌皾彀§阿彀ъ皑彀╈艾彀鞍彀胳肮彀伙拷".split("");for(j=0;j!=D[194].length;++j)if(D[194][j].charCodeAt(0)!==65533){e[D[194][j]]=49664+j;d[49664+j]=D[194][j]}D[195]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾樈順卷樋頇來檪頇冺檮頇嗧檱頇婍檶頇庬檹頇愴檼頇擁櫀頇楉櫃頇氻櫅頇濏櫈頇燀櫊頇★拷锟斤拷锟斤拷锟巾櫌頇m櫎頇ロ櫐頇櫔頇櫖頇櫘頇櫜頇稠櫟頇俄櫡頇疙櫣頇喉櫥頇柬櫧頇卷櫩須�锟斤拷锟斤拷锟斤拷須來殏須勴殕須図殘須夗殜須嬳殠須忢殤須掜殦須曧殩須楉殬須欗殮須涰殰須烅殸須㈨殻須ろ殽須毀須╉毆彀检敖彀眷眲毂呾眻毂岇睌毂曥睏毂橃睓毂犾堡毂报毂办钡觳橃矙觳滌矤觳博觳铂觳泊觳奠哺觳检硠斐呾硣斐夓硱斐旍长斐嘲齑侅磮齑夓磳齑愳礃齑欖礇齑濎搐齑船齑轨禍斓犾丹斓淡斓当斓胳秷於旍稌於橃稖於れ顶於ъ订於办穭旆岇窅旆番旆办犯旆轨坊旆届竸旄堨笇旄旍笝旄犾浮旄れ辅旄办副旄踌傅锟�".split("");for(j=0;j!=D[195].length;++j)if(D[195][j].charCodeAt(0)!==65533){e[D[195][j]]=49920+j;d[49920+j]=D[195][j]}D[196]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾毇須毊須毐須岔毘須错毜須俄毞須疙毢須柬毥須卷毧頉�頉來泜頉冺泦頉図泬頉婍泲锟斤拷锟斤拷锟斤拷頉嶍泿頉忢洂頉掜洆頉曧洊頉橅洑頉涰洔頉濏洖頉燀洝頉㈨洠頉ロ洣頉ы洨頉洬頉洯锟斤拷锟斤拷锟斤拷頉洴頉表洸頉稠洿頉俄浄頉疙浌頉喉浕頉卷浛頊來渹頊冺渽頊嗧渿頊堩湁頊婍湅頊岉湇頊庬湉頊愴湌頊擁湐旃橃箼旃滌篃旃犾埂旃供旃弓旃挫沟旃胳辜旌勳簠旌囲簤旌愳簯旌旍簶旌犾骸旌l氦旌レ含旌粊旎れ互旎猾旎淮旎奠环旎胳还旒�旒侅紕旒堨紣旒戩紦旒曥紲旒犾激旒辑旒及旒膘几旖旍綍旖橃綔旖れ渐旖ъ僵旖办奖旖挫礁炀�炀呾緦炀§鲸炀办縿炜犾俊炜れ卡炜办勘炜踌康炜柬��韤勴�戫�橅��错�淀�疙�硷拷".split("");for(j=0;j!=D[196].length;++j)if(D[196][j].charCodeAt(0)!==65533){e[D[196][j]]=50176+j;d[50176+j]=D[196][j]}D[197]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾湑頊栱湕頊氻湜頊濏湠頊燀湣頊㈨湥頊ろ湧頊湩頊湰頊湳頊绊湵頊岔湷頊俄湻頊癸拷锟斤拷锟斤拷锟巾満頊豁溄頊卷溈頋�頋來潅頋冺潊頋嗧潏頋婍潒頋岉潔頋庬潖頋掜潛頋曧潥頋涰潨頋濏潪锟斤拷锟斤拷锟斤拷頋燀潰頋ろ潶頋ы潹頋潾頋澁頋澅頋岔澇頋淀澏頋讽澑頋鬼澓頋豁澗頋宽瀫頌傢瀮頌勴瀰頌嗧瀲頌婍瀷韥勴亝韥図亯韥愴仈韥橅仩韥伃韥绊伌韥柬伣韨來偆韨ロ偍韨偞韨淀偡韨鬼儉韮來儎韮堩儔韮愴儜韮擁償韮曧儨韮濏儬韮ろ儸韮儻韮绊儽韮疙剭韯绊劚韯错劯韯喉厐韰來厓韰勴厖韰岉厤韰愴厰韰滍厺韰燀叀韰叕韰柬唲韱堩啝韱№啢韱啺韱表喅韱淀喓韱柬噣韲橅嚧韲疙垏韴夗垚韴埈韴绊埓韴柬埥韴宽墎韷堩墱锟�".split("");for(j=0;j!=D[197].length;++j)if(D[197][j].charCodeAt(0)!==65533){e[D[197][j]]=50432+j;d[50432+j]=D[197][j]}D[198]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾瀺頌庬瀼頌戫瀿頌擁灁頌曧灃頌楉灇頌滍灋頌燀灎頌№灑頌o拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾墹韸�韸來妱韸堩姁韸戫姇韸滍姞韸ろ姮韸表姼韸鬼娂韸宽媭韹傢媹韹夗媼韹旐嫎韹滍嫟韹ロ嫲韹表嫶韹疙寑韺來寖韺呿寣韺嶍寧韺愴寯韺栱寽韺濏専韺犿尅韺ロ尐韺╉尙韺绊尭韺鬼尰韺柬尳韻勴崊韻柬嵔韼�韼勴帉韼嶍帍韼愴帒韼橅帣韼滍帬韼帺韼幁韼错幐韼柬弰韽呿張韽夗彁韽橅彙韽m彫韽彴韽错徏韽巾徔韾侊拷".split("");for(j=0;j!=D[198].length;++j)if(D[198][j].charCodeAt(0)!==65533){e[D[198][j]]=50688+j;d[50688+j]=D[198][j]}D[199]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾悎韾濏憖響勴憸響犿懁響懐響疙懝響柬懣頀�頀傢拡頀夗拫頀嶍挃頀╉搶頁愴摂頁滍摕頁摤頁绊摳頁豁摻頂勴攬頂岉敂頂曧敆頂柬斀頃�頃勴晫頃嶍晱頃戫晿頃欗暅頃犿暐頃暕頃暛頃错暤頃疙暭頄勴枀頄図枅頄夗枑頄ロ棃項夗棇項愴棐項橅棛項涰棟項ろ棩項棳項错椀項讽椆順�順來槃順堩槓順戫槗順旐槙順滍槧锟�".split("");for(j=0;j!=D[199].length;++j)if(D[199][j].charCodeAt(0)!==65533){e[D[199][j]]=50944+j;d[50944+j]=D[199][j]}D[200]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟巾槫順樃順鬼樇頇�頇呿檲頇夗檵頇嶍檻頇旐檿頇橅櫆頇ы櫓頇绊櫛頇错殐須呿殞須嶍殣須旐殱須燀殹須毈須绊毠須豁泟頉呿泩頉岉洃頉旐洍頉欗洜頉ろ洦頉绊浀頉柬浗頊�頊勴湋頊橅湙頊滍湢頊湬頊湱頊错湹頊疙溂頋勴潎頋夗潗頋戫潝頋栱潡頋橅潤頋犿潯頋m潵頋╉潿頋绊澊頋柬澖頌來瀳頌夗瀸頌愴灅頌欗灈頌濓拷".split("");for(j=0;j!=D[200].length;++j)if(D[200][j].charCodeAt(0)!==65533){e[D[200][j]]=51200+j;d[51200+j]=D[200][j]}D[202]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟戒冀浣冲亣鍍瑰姞鍙懙鍝ュ槈瀚佸鏆囨灦鏋锋煰姝岀弬鐥傜鑻涜寗琛楄瑷惰硤璺忚换杩﹂鍒诲嵈鍚勬仾鎱ゆ鐝忚剼瑕鸿闁d緝鍒婂⒕濂稿Е骞插构鎳囨弨鏉嗘煬妗挎緱鐧庣湅纾电▓绔跨啊鑲濊壆鑹辫闁撲公鍠濇浄娓寸ⅲ绔憶瑜愯潕闉ㄥ嫎鍧庡牚宓屾劅鎲炬垺鏁㈡煈姗勬笡鐢樼柍鐩g灠绱洪偗閼戦憭榫曪拷".split("");for(j=0;j!=D[202].length;++j)if(D[202][j].charCodeAt(0)!==65533){e[D[202][j]]=51712+j;d[51712+j]=D[202][j]}D[203]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉專宀敳鑳涢墍闁樺墰鍫堝宀″礂搴峰己褰婃叿姹熺暫鐤嗙碃绲崇侗缇岃厰鑸¤枒瑗佽瑳閶奸檷楸囦粙浠峰�嬪嚤濉忔劮鎰炬叏鏀规И婕戠枼鐨嗙洊绠囪姤钃嬶閹ч枊鍠�瀹㈠潙铯佺渤缇归喌鍊ㄥ幓灞呭法鎷掓嵁鎿氭摟娓犵偓绁涜窛韪烇閬介墔閶镐咕浠跺仴宸惧缓鎰嗘鑵辫檾韫囬嵉楱篂鍌戞澃妗�鍎夊妽鍔掓锟�".split("");for(j=0;j!=D[203].length;++j)if(D[203][j].charCodeAt(0)!==65533){e[D[203][j]]=51968+j;d[51968+j]=D[203][j]}D[204]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界灱閳愰粩鍔�坎鍋堟啯鎻搳鏍兼獎婵�鑶堣Α闅斿爡鐗界姮鐢勭倒绻偐瑕嬭閬i祽鎶夋焙娼旂祼缂鸿ǎ鍏兼厞绠濊瑱閴楅帉浜繐鍊炲偩鍎嗗媮鍕嶅嵖鍧板搴氬緫鎱舵啲鎿庢暚鏅毣鏇存娑囩倕鐑辩挓鐠ョ搳鐥欑‖纾珶绔剁祬缍撹�曡�胯剾鑾栬杓曢�曢彙闋冮牳椹氶淇傚晸鍫哄瀛e眴鎮告垝妗傛锟�".split("");for(j=0;j!=D[204].length;++j)if(D[204][j].charCodeAt(0)!==65533){e[D[204][j]]=52224+j;d[52224+j]=D[204][j]}D[205]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥(婧晫鐧哥绋界郴绻辜瑷堣璋块殠榉勫彜鍙╁憡鍛卞浐濮戝灏诲韩鎷锋敺鏁呮暡鏆犳灟妲佹步鐥肩殣鐫剧缇旇�冭偂鑶忚嫤鑻借彴钘佽牨琚磋铯冭緶閷泧椤ч珮榧撳摥鏂涙洸姊忕﹢璋烽禒鍥板潳宕戞槅姊辨婊剧惃琚為姹楠ㄤ緵鍏叡鍔熷瓟宸ユ亹鎭嫳鎺ф敾鐝欑┖铓h并闉忎覆瀵℃垐鏋滅摐锟�".split("");for(j=0;j!=D[205].length;++j)if(D[205][j].charCodeAt(0)!==65533){e[D[205][j]]=52480+j;d[52480+j]=D[205][j]}D[206]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界鑿撹獓瑾茶法閬庨崑椤嗗粨妲ㄨ椏閮鍐犲畼瀵叄妫烘鐏岀惎鐡樼缃愯弲瑙�璨棞椁ㄥ埉鎭濇嫭閫備緤鍏夊尅澹欏唬鏇犳锤鐐氱媯鐝栫瓙鑳遍憶鍗︽帥缃箹鍌�濉婂鎬劎鎷愭榄佸畯绱樿偙杞熶氦鍍戝挰鍠瑢宥犲阀鏀晭鏍℃鐙$殠鐭禐缈硅啝钑庤洘杓冭綆閮婇椹曢涓樹箙涔濅粐淇卞叿鍕撅拷".split("");for(j=0;j!=D[206].length;++j)if(D[206][j].charCodeAt(0)!==65533){e[D[206][j]]=52736+j;d[52736+j]=D[206][j]}D[207]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉崁鍙e彞鍜庡様鍧靛灑瀵囧秶寤愭嚰鎷樻晳鏋告煩妲嬫瓙姣嗘姹傛簼鐏哥嫍鐜栫悆鐬跨煩绌剁悼鑰夎嚰鑸呰垔鑻熻、璎宠臣杌�閫戦偙閴ら姸椐掗﹨槌╅窏榫滃湅灞�鑿婇灎闉捍鍚涚獦缇よ杌嶉儭鍫�灞堟帢绐熷寮撶┕绐妿韬�﹀埜鍕稿嵎鍦堟嫵鎹叉瑠娣冪湻鍘ョ崡钑ㄨ苟闂曟満娅冩桨瑭粚楗嬶鏅锋璨达拷".split("");for(j=0;j!=D[207].length;++j)if(D[207][j].charCodeAt(0)!==65533){e[D[207][j]]=52992+j;d[52992+j]=D[207][j]}D[208]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介铯囧彨鍦鎻嗘Щ鐝绐虹珔绯捐懙瑕忚党閫甸枿鍕诲潎鐣囩瓲鑿岄垶铯堟鍏嬪墜鍔囨垷妫樻サ闅欏儏鍔ゅ嫟鎳冩枻鏍规Э鐟剧瓔鑺硅彨瑕茶杩戦铯変粖濡楁搾鏄戞獛鐞寸绂借姪琛捐】瑗燂閷︿紜鍙婃�ユ壉姹茬礆绲︿簶鍏㈢煖鑲紒浼庡叾鍐�鍡滃櫒鍦诲熀鍩煎濂囧瀵勫矏宕庡繁骞惧繉鎶�鏃楁棧锟�".split("");for(j=0;j!=D[208].length;++j)if(D[208][j].charCodeAt(0)!==65533){e[D[208][j]]=53248+j;d[53248+j]=D[208][j]}D[209]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥湠鏈熸潪妫嬫姗熸姘f苯娌傛穱鐜樼惁鐞拏鐠g暩鐣跨纾绁囩绁虹畷绱�缍虹緢鑰嗚�倢瑷樿瓘璞堣捣閷¢尋椋㈤楱庨◤椹ラ簰绶婁蕉鍚夋嫯妗旈噾鍠労铯嬶濞滄嚘铯嶆嫃鎷匡铯忥铯戯铯撻偅铯旓铯栵铯樿铯欙铯涳鏆栵鐓栵铯熼洠铯犳崗鎹哄崡铯℃瀼妤犳钩铯㈢敺铯oい铯ワ拷".split("");for(j=0;j!=D[209].length;++j)if(D[209][j].charCodeAt(0)!==65533){e[D[209][j]]=53504+j;d[53504+j]=D[209][j]}D[210]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界磵铯︼ぇ琛插泭濞橈え铯╋お铯が涔冿き鍏у鏌拌�愶ぎ濂冲勾鎾氱蹇垫伂鎷堟嵒瀵у瘲鍔く濂村缉鎬掞ぐ铯憋げ鐟欙こ铯达さ铯讹し铯搁铯癸ず铯伙ぜ铯斤ぞ铯匡铳侊铳冩績铳勶鑶胯静鎯憋铳囪叇铳堬灏匡铳嬶铳嶏铳忥铳戝瑷ユ澔绱愶铳擄铳曪铳楄兘铳橈灏兼偿鍖挎汉澶氳尪锟�".split("");for(j=0;j!=D[210].length;++j)if(D[210][j].charCodeAt(0)!==65533){e[D[210][j]]=53760+j;d[53760+j]=D[210][j]}D[211]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟戒腹浜朵絾鍠湗澹囧綎鏂锋棪妾�娈垫箥鐭绨炵窞铔嬭閯查崨鎾绘揪鐛虹柛閬斿晼鍧嶆喓鎿旀泧娣℃箾娼竟鐥拌亙鑶借晛瑕冭珖璀氶専娌撶晸绛旇笍閬濆攼鍫傚骞㈡垏鎾炴鐣剁硸铻抽花浠e瀳鍧ぇ灏嶅脖甯跺緟鎴存摗鐜宠嚭琚嬭哺闅婇粵瀹呭痉鎮冲�掑垁鍒板湒鍫靛灏庡睜宄跺秼搴﹀緬鎮兼寫鎺夋悧妗冿拷".split("");for(j=0;j!=D[211].length;++j)if(D[211][j].charCodeAt(0)!==65533){e[D[211][j]]=54016+j;d[54016+j]=D[211][j]}D[212]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥9娅傛窐娓℃粩婵ょ嚲鐩滅澒绂辩ɑ钀勮Ι璩烦韫堥�冮�旈亾閮介崓闄堕煖姣掔�嗙墭鐘㈢崹鐫g绡ょ簺璁�澧╂儑鏁︽椊鏆炬矊鐒炵噳璞氶爴涔獊浠濆啲鍑嶅嫊鍚屾啩鏉辨妫熸礊娼肩柤鐬崇鑳磋懀閵呭厹鏂楁潨鏋撶棙绔囪嵆铳氳眴閫楅牠灞噣鑺氶亖閬垗寰楀稘姗欑噲鐧荤瓑钘よ瑒閯чò鍠囨嚩铳涚櫓缇咃拷".split("");for(j=0;j!=D[212].length;++j)if(D[212][j].charCodeAt(0)!==65533){e[D[212][j]]=54272+j;d[54272+j]=D[212][j]}D[213]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟借樋铻鸿8閭忥娲涚儥鐝炵怠钀斤閰П铳炰簜鍗垫瑒娆掔�剧垱铇笧鍓岃荆宓愭摜鏀瑬婵眱绾滆棈瑗よ鎷夎嚇锠熷粖鏈楁氮鐙肩悈鐟瀭閮炰締宕嶅緺钀婂喎鎺犵暐浜�嗗叐鍑夋妯戠伯绮辩厂鑹珤杓涢噺渚跺劮鍕靛憘寤叜鎴炬梾娅氭烤绀棞锠i柇椹㈤┆楹楅粠鍔涙泦姝风�濈か杞㈤潅鎲愭垁鏀f迹锟�".split("");for(j=0;j!=D[213].length;++j)if(D[213][j].charCodeAt(0)!==65533){e[D[213][j]]=54528+j;d[54528+j]=D[213][j]}D[214]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界厜鐠夌反鑱摦杓﹂�i崐鍐藉垪鍔f磳鐑堣寤夋杺娈總绨剧嵉浠や级鍥癸宀哄逗鎬滅幉绗練缈庤亞閫為埓闆堕潏闋橀健渚嬫晶绂喆闅峰嫗铳犳拡鎿勬珦娼炵�樼垚鐩ц�佽槅铏滆矾杓呴湶榄泛楣电绁跨稜鑿夐寗楣块簱璜栧寮勬湩鐎х搹绫犺伨鍎$�ㄧ墷纾婅硞璩氳炒闆蜂簡鍍氬寤栨枡鐕庣檪鐬亰钃硷拷".split("");for(j=0;j!=D[214].length;++j)if(D[214][j].charCodeAt(0)!==65533){e[D[214][j]]=54784+j;d[54784+j]=D[214][j]}D[215]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介伡楝ч緧澹樺﹣灞㈡〒娣氭紡鐦荤疮绺疯敒瑜搁彜闄嬪妷鏃掓煶姒存祦婧滅�忕悏鐟犵暀鐦ょ~璎鍏埉闄镐緰鍊礄娣陡杓緥鎱勬牀铳¢殕鍕掕倠鍑滃噷妤炵缍捐彵闄典繗鍒╁帢鍚忓攷灞ユ偋鏉庢ⅷ娴妬鐙哥悊鐠冿ア鐥㈢爆缃圭靖鑾夎瑁¢噷閲愰洟榀夊悵娼剧噽鐠樿椇韬殻楸楅簾鏋楁穻鐞宠嚚闇栫牞锟�".split("");for(j=0;j!=D[215].length;++j)if(D[215][j].charCodeAt(0)!==65533){e[D[215][j]]=55040+j;d[55040+j]=D[215][j]}D[216]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界珛绗犵矑鎽╃應鐥茬⒓纾ㄩΜ榄旈夯瀵炲箷婕犺啘鑾倛涓囧崓濞╁窉褰庢參鎸芥櫓鏇兼豢婕仯鐬炶惉钄撹牷杓撻榘诲敎鎶规湯娌寜瑗澓浜″蹇樺繖鏈涚恫缃旇姃鑼幗杓為倷鍩嬪濯掑瘣鏄ф灇姊呮瘡鐓ょ降璨疯常閭侀瓍鑴堣矈闄岄﹢楹ュ瓱姘撶寷鐩茬洘钀屽啰瑕撳厤鍐曞媺妫夋矓鐪勭湢缍跨番闈㈤旱婊咃拷".split("");for(j=0;j!=D[216].length;++j)if(D[216][j].charCodeAt(0)!==65533){e[D[216][j]]=55296+j;d[55296+j]=D[216][j]}D[217]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟借攽鍐ュ悕鍛芥槑鏆濇ぇ婧熺毧鐬戣寳钃傝灍閰╅姌槌磋渚啋鍕熷甯芥厱鎽告懝鏆煇妯℃瘝姣涚墴鐗$憗鐪哥煕鑰楄娂鑼呰瑎璎ㄨ矊鏈ㄦ矏鐗х洰鐫︾﹩槎╂娌掑あ鏈﹁挋鍗濡欏粺鎻忔槾鏉虫负鐚珬鑻楅尐鍕欏帆鎲噵鎴婃媷鎾棤妤欐姣嬬劇鐝风暆绻嗚垶鑼傝暘瑾h部闇ч怠澧ㄩ粯鍊戝垘鍚诲晱鏂囷拷".split("");for(j=0;j!=D[217].length;++j)if(D[217][j].charCodeAt(0)!==65533){e[D[217][j]]=55552+j;d[55552+j]=D[217][j]}D[218]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥倍绱婄磱鑱炶殜闁�闆嬁娌曠墿鍛冲獨灏惧祴褰屽井鏈⒍妤f讣婀勭湁绫崇編钖囪瑤杩烽潯榛村卜鎮舵剭鎲晱鏃绘椉姘戞朝鐜熺弶绶¢枖瀵嗚湝璎愬墲鍗氭媿鎼忔挷鏈存ǜ娉婄弨鐠炵當绮曠笡鑶婅埗钖勮揩闆归浼村崐鍙嶅彌鎷屾惉鏀�鏂戞娉綐鐝晹鐦㈢洡鐩肩纾荤が绲嗚埇锜犺繑闋掗/鍕冩嫈鎾ユ袱娼戯拷".split("");for(j=0;j!=D[218].length;++j)if(D[218][j].charCodeAt(0)!==65533){e[D[218][j]]=55808+j;d[55808+j]=D[218][j]}D[219]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界櫦璺嬮啽閴㈤榄冨�e倣鍧婂Θ灏ㄥ箛褰锋埧鏀炬柟鏃佹槈鏋嬫婊傜绱¤偑鑶�鑸姵钂¤殞瑷瑮閭﹂槻榫愬�嶄砍铳e煿寰樻嫓鎺掓澂婀冪剻鐩冭儗鑳氳4瑁佃璩犺缉閰嶉櫔浼桨甯涙煆鏍㈢櫧鐧鹃瓌骞℃▕鐓╃嚁鐣イ绻佽晝钘╅浼愮瓘缃伴枼鍑″竼姊垫熬姹庢硾鐘瘎鑼冩硶鐞哄兓鍔堝鎿樻獥鐠х櫀锟�".split("");for(j=0;j!=D[219].length;++j)if(D[219][j].charCodeAt(0)!==65533){e[D[219][j]]=56064+j;d[56064+j]=D[219][j]}D[220]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界ⅶ铇楅棦闇癸ゥ鍗炲紒璁婅鲸杈倞鍒ョ灔楸夐紙涓欏�傚叺灞涘狗鏄炴樅鏌勬鐐崇攣鐥呯绔濊姬椁犻▓淇濆牎鍫卞鏅娲戞购娼界彜鐢彥瑁滆璀滆紨浼忓儠鍖愬崪瀹撳京鏈嶇鑵硅尟钄旇瑕嗚脊杓婚Ε榘掓湰涔朵扛濂夊皝宄嘲鎹ф鐑界啟鐞斧钃渹閫㈤嫆槌充笉浠樹刊鍌呭墫鍓惁鍜愬煚澶│锟�".split("");for(j=0;j!=D[220].length;++j)if(D[220][j].charCodeAt(0)!==65533){e[D[220][j]]=56320+j;d[56320+j]=D[220][j]}D[221]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉瓪瀛靛瘜搴滐ウ鎵舵暦鏂ф诞婧ョ埗绗︾翱缂惰厫鑵戣啔鑹�鑺欒帺瑷冭矤璩﹁郴璧磋逗閮ㄩ嚋闃滈檮椐欓厂鍖楀垎鍚╁櫞澧冲濂靠鎲ゆ壆鏄愭本鐒氱泦绮夌碁绱涜姮璩侀洶铳т經寮楀娇鎷傚穿鏈嬫纭肩箖榈笗鍌欏寱鍖崙濡冨搴囨偛鎲婃墘鎵规枑鏋囨Η姣旀瘱姣楁瘶娌革エ鐞电椇鐮掔绉曠绮冪穻缈¤偉锟�".split("");for(j=0;j!=D[221].length;++j)if(D[221][j].charCodeAt(0)!==65533){e[D[221][j]]=56576+j;d[56576+j]=D[221][j]}D[222]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟借劸鑷傝彶铚氳(瑾硅璨婚剻闈為榧诲毈瀣浆鏂屾娈禍婵辩�曠墲鐜钵璩撻牷鎲戞胺鑱橀▉涔嶄簨浜涗粫浼轰技浣夸繜鍍垮彶鍙稿攩鍡e洓澹ア濞戝瀵哄皠宸冲斧寰欐�濇崹鏂滄柉鏌舵熁姊娌欐硹娓g�夌崊鐮傜ぞ绁�绁犵绡╃礂绲茶倖鑸嶈帋钃戣泧瑁熻瑭炶瑵璩滆郸杈偑椋奸楹濆墛铳╂湐铳拷".split("");for(j=0;j!=D[222].length;++j)if(D[222][j].charCodeAt(0)!==65533){e[D[222][j]]=56832+j;d[56832+j]=D[222][j]}D[223]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉倶鍒北鏁f睍鐝婄敚鐤濈畻钂滈吀闇颁狗鎾掓鐓炶柀涓夛カ鏉夋.娓楄姛钄樿~鎻锋緛閳掗涓婂偡鍍忓劅鍟嗗柂鍢楀瓈灏欏碃甯稿簥搴犲粋鎯虫姗℃箻鐖界墍鐙�鐩哥ゥ绠辩繑瑁宠Т瑭宠薄璩為湝濉炵捊璩藉棁铳绱㈣壊鐗茬敓鐢ワキ绗欏澹诲都搴忓憾寰愭仌鎶掓嵖鏁嶆殤鏇欐浉鏍栨2鐘�鐟炵绲窎缃诧拷".split("");for(j=0;j!=D[223].length;++j)if(D[223][j].charCodeAt(0)!==65533){e[D[223][j]]=57088+j;d[57088+j]=D[223][j]}D[224]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟借儱鑸掕柉瑗胯獡閫濋嫟榛嶉紶澶曞キ甯儨鏄旀櫝鏋愭睈娣呮綗鐭崇ⅸ钃嗛噵閷粰鍍婂厛鍠勫瑡瀹f墖鏁炬棆娓茬吔鐞佺憚鐠囩捒鐧Κ绶氱箷缇ㄨ吅鑶宠埞铇氳煬瑭佃罚閬搁姂閻ラ楫崹灞戞娉勬穿娓垖钖涜せ瑷闆涧鍓℃毠娈茬簴锜捐磵闁冮櫇鏀濇秹鐕ギ鍩庡瀹�ф兒鎴愭槦鏅熺尒鐝圭洓鐪佺锟�".split("");for(j=0;j!=D[224].length;++j)if(D[224][j].charCodeAt(0)!==65533){e[D[224][j]]=57344+j;d[57344+j]=D[224][j]}D[225]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟借仏鑱茶叆瑾犻啋涓栧嫝姝叉礂绋呯绱帮ク璨板彫鍢瀹靛皬灏戝发鎵�鎺冩悢鏄⒊娌兼秷婧�熺偆鐕掔敠鐤忕枎鐦欑瑧绡犵矮绱犵垂钄暛铇囪ù閫嶉仭閭甸姺闊堕ǚ淇楀爆鏉熸稇绮熺簩璎栬礀閫熷宸芥悕钃�閬滈!鐜囧畫鎮氭澗娣炶瑾﹂�侀爩鍒凤グ鐏戠閹栬“閲椾慨鍙楀椊鍥氬瀭澹藉珎瀹堝搏宄�甯ユ剚锟�".split("");for(j=0;j!=D[225].length;++j)if(D[225][j].charCodeAt(0)!==65533){e[D[225][j]]=57600+j;d[57600+j]=D[225][j]}D[226]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥垗鎵嬫巿鎼滄敹鏁告ü娈婃按娲欐急鐕х嫨鐛哥悋鐠茬槮鐫$绌楃绮圭稄缍埂缇炶劑鑼辫拹钃氳棯琚栬璁愯几閬傞們閰姈閵归殝闅ч毃闆栭渶闋堥楂撻瑲鍙斿【澶欏瀹挎窇娼氱啛鐞$捁鑲呰徑宸″緡寰亗鏃爳妤娈夋吹娣崇彛鐩剧灛绛嶇磾鑴h垳鑽�钃磋暎瑭㈣珓閱囬尀闋嗛Υ鎴岃杩伴墺宕囧揣锟�".split("");for(j=0;j!=D[226].length;++j)if(D[226][j].charCodeAt(0)!==65533){e[D[226][j]]=57856+j;d[57856+j]=D[226][j]}D[227]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉旦鐟熻啙铦ㄦ繒鎷剧繏瑜惰ゲ涓炰箻鍍у嫕鍗囨壙鏄囩供锠呴櫈渚嶅寵鍢跺濯ゅ案灞庡睄甯傚紤鎭冩柦鏄檪鏋炬煷鐚滅煝绀虹繀钂旇搷瑕栬│瑭╄璞曡焙鍩村瘮寮忔伅鎷娈栨箿鐔勭瘨铦曡瓨杌鹃椋句几渚佷俊鍛诲瀹告劶鏂版櫒鐕肩敵绁炵闯鑵庤嚕鑾樿柂钘庤渻瑷婅韩杈涳ケ杩呭け瀹ゅ鎮夊灏嬪績娌侊拷".split("");for(j=0;j!=D[227].length;++j)if(D[227][j].charCodeAt(0)!==65533){e[D[227][j]]=58112+j;d[58112+j]=D[227][j]}D[228]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤ゲ娣辩�嬬敋鑺浠�鍗侊コ闆欐皬浜炰縿鍏掑暈濞ュ敞鎴戠墮鑺借帾铔捐瑷濋樋闆呴榇夐禎鍫婂渤宥藉箘鎯℃剷鎻℃▊娓ラ剛閸旈榘愰椒瀹夊哺鎸夋檹妗堢溂闆侀瀺椤旈疅鏂¤瑏杌嬮柤鍞靛博宸栧旱鏆楃檶鑿撮棁澹撴娂鐙庨川浠板ぎ鎬忔樆娈冪Ё榇﹀帗鍝�鍩冨礀鎰涙洊娑鑹鹃殬闈勫巹鎵兼帠娑茬笂鑵嬮锟�".split("");for(j=0;j!=D[228].length;++j)if(D[228][j].charCodeAt(0)!==65533){e[D[228][j]]=58368+j;d[58368+j]=D[228][j]}D[229]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥缃岄动楦氫篃鍊诲喍澶滄児鎻舵ぐ鐖鸿�讹ゴ閲庡急铳碉ザ绱勮嫢钁捇钘ヨ簫铳蜂蒋铳革ス澹ゅ瓋鎭欐彋鏀樻暛鏆橈ズ妤婃ǎ娲嬬�佺叕鐥掔槏绂崇┌铳荤緤铳艰铳借畵閲�闄斤ゾ椁婂渼寰℃柤婕佺榾绂﹁獮棣瓪榻剟鎲舵姂妾嶈噯鍋冨牥褰︾剦瑷�璜哄铇栦亢鍎煎毚濂勬帺娣瑰丢妤唵浜堜綑铳匡铴佸铴傦拷".split("");for(j=0;j!=D[229].length;++j)if(D[229][j].charCodeAt(0)!==65533){e[D[229][j]]=58624+j;d[58624+j]=D[229][j]}D[230]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤姝熸睗铴勭挼绀栵鑸囪墔鑼硅伎杞濓椁橈铴堬浜︼鍩熷焦鏄擄铴岀柅绻硅铴嶉�嗛鍤ュ牕濮稿瀹达寤讹铴愭崘鎸伙妞芥矅娌挎稁娑撴返婕旓鐑熺劧鐓欙鐕冪嚂铴旂纭绛电罚铴栫腐铴楄杌燂铴欙閴涳槌讹铴濓鎮呮秴铴熺啽铴狅Α闁卞幁铴Γ铴ゆ煋铴ョ値鐒扮惏鑹惰嫆锟�".split("");for(j=0;j!=D[230].length;++j)if(D[230][j].charCodeAt(0)!==65533){e[D[230][j]]=58880+j;d[58880+j]=D[230][j]}D[231]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤Ζ闁婚楣芥泟铴х噥钁夛Θ铴╁铴Λ宥稿奖铴槧鏆庢ス姒案娉虫付娼佹繗鐎涚�厫鐕熺嵃铴憶铴摂鐩堢绾擄Ο铴拌嫳瑭犺繋铴遍崍铴查湙铴筹Υ涔傚�Φ鍒堝彙鏇虫杯婵婄寠鐫跨鑺棟铇傦Χ瑁旇璀借鲍铴烽姵铴搁湏闋愪簲浼嶄繅鍌插崍鍚惧惓鍡氬、澧哄ェ濞涘鎮燂鎳婃晼鏃挎櫎姊ф睔婢筹拷".split("");for(j=0;j!=D[231].length;++j)if(D[231][j].charCodeAt(0)!==65533){e[D[231][j]]=59136+j;d[59136+j]=D[231][j]}D[232]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界儚鐔崚绛借湀瑾ら安榧囧眿娌冪崉鐜夐埡婧懃鐦熺┅绺曡槉鍏�澹呮搧鐡敃鐧扮縼閭曢泹楗旀甫鐡︾绐嚗铔欒澑瑷涘瀹屽疀姊℃娴g帺鐞撶惉纰楃珐缈剺鑵曡帪璞岄槷闋戞洶寰�鏃烘瀴姹帇鍊▋姝煯澶栧惮宸嶇尌鐣忥铴诲儱鍑瑰牤澶濮氬铴硷宥㈡嫍鎼栨挀鎿撅鏇滐姗堬鐕跨懁铵侊拷".split("");for(j=0;j!=D[232].length;++j)if(D[232][j].charCodeAt(0)!==65533){e[D[232][j]]=59392+j;d[59392+j]=D[232][j]}D[233]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界獔绐箛绻炶��鑵帮锜璎犻仚铵冮個楗掓吘娆叉荡绺熻ぅ杈变繎鍌啑鍕囧焽澧夊搴告厒姒曟秾婀ф憾鐔旂憿鐢ㄧ敩鑱宠尭钃夎笂閹旈彏铵勪簬浣戝伓鍎張鍙嬪彸瀹囧瘬灏ゆ剼鎲傛棿鐗涚帡鐟�鐩傜绂戠绱嗙窘鑺嬭棔铏炶總閬囬兊閲殔闆ㄩ洨鍕栧涧鏃槺鏍厹绋堕儊闋婁簯铵呮娈炴緪鐔夎�樿姼钑擄拷".split("");for(j=0;j!=D[233].length;++j)if(D[233][j].charCodeAt(0)!==65533){e[D[233][j]]=59648+j;d[59648+j]=D[233][j]}D[234]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介亱闅曢洸闊昏敋楝变簮鐔婇泟鍏冨師鍝″湏鍦掑灒濯涘珓瀵冩�ㄦ効鎻存矃娲规共婧愮埌鐚跨憲鑻戣杞呴仩铵嗛櫌椤橀礇鏈堣秺閴炰綅鍋夊優鍗卞湇濮斿▉灏夋叞鏆愭腑鐖茬憢绶儍钀庤懄钄胯潫琛涜璎傞仌闊嬮瓘涔充緫鍎掑叒铵囧敮鍠╁瀹ュ辜骞藉壕鎮犳儫鎰堟剦鎻勬敻鏈夛鏌旀煔铵夋ァ妤㈡补娲э娓革锟�".split("");for(j=0;j!=D[234].length;++j)if(D[234][j].charCodeAt(0)!==65533){e[D[234][j]]=59904+j;d[59904+j]=D[234][j]}D[235]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥俊鐚剁尫铵岀憸鐢憋鐧掞铵忕董鑷捐惛瑁曡獦璜涜韪拌箓閬婇�鹃伜閰夐噳閸铵戝爥铵掓瘬鑲夎偛铵擄鍏佸カ灏癸铵栨饯鐜ц儰璐囷閳楅枏铵橈铵氾鑱挎垘鐎滅胆铻嶏鍨犳仼鎱囨瑾鹃妧闅变箼鍚熸帆钄櫚闊抽.鎻栨常閭戝嚌鎳夎喓榉逛緷鍊氬剙瀹滄剰鎳挎摤妞呮瘏鐤戠煟缇╄墹钖忚熁琛h锟�".split("");for(j=0;j!=D[235].length;++j)if(D[235][j].charCodeAt(0)!==65533){e[D[235][j]]=60160+j;d[60160+j]=D[235][j]}D[236]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟借閱簩浠ヤ紛铵濓澶峰Ж铵熷凡寮涘經鎬★铵★Б铵g埦鐝ワГ鐣扮棈铵ョЩ铵﹁�岃�宠倓鑻¤崙铵эЖ璨借渤閭囷З铵4椁岋Й铵�风泭缈婄繉缈艰瑲浜轰粊鍒冨嵃铵捊鍥犲Щ瀵呭紩蹇嶆巩铵Н绲尩铵拌殦瑾嶏П闈澐铵诧С涓�浣氫骄澹规棩婧㈤�搁幇棣逛换澹濮欐亖铵达У绋旓Ф鑽忚硟鍏ュ崉锟�".split("");for(j=0;j!=D[236].length;++j)if(D[236][j].charCodeAt(0)!==65533){e[D[236][j]]=60416+j;d[60416+j]=D[236][j]}D[237]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤Х铵革Ч浠嶅墿瀛曡娍浠斿埡鍜ㄥ濮垮瓙瀛楀瓬鎭f厛婊嬬倷鐓巻鐡风柕纾佺传鑰呰嚜鑼ㄨ敆钘夎璩囬泴浣滃嫼鍤兼柅鏄ㄧ伡鐐哥埖缍借妽閰岄泙榈插妫ф畼娼虹洖宀戞毇娼涚绨牰闆滀笀浠楀尃鍫村⒒澹ガ灏囧赋搴勫嫉鎺屾毑鏉栨妾f瑢婕跨墕铵虹崘鐠嬬珷绮ц吀鑷熻嚙鑾婅懍钄h枖钘忚璐撻啲闀凤拷".split("");for(j=0;j!=D[237].length;++j)if(D[237][j].charCodeAt(0)!==65533){e[D[237][j]]=60672+j;d[60672+j]=D[237][j]}D[238]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介殰鍐嶅搲鍦ㄥ鎵嶆潗鏍芥娓芥粨鐏界浮瑁佽病杓夐綃榻庣埈绠忚珝閷氫絿浣庡劜鍜�濮愬簳鎶垫澋妤娌笟鐙欑尓鐤界绱佃嫥鑿硅憲钘疯璨簢閫欓偢闆庨綗鍕e悐瀚″瘋鎽樻暤婊寸媱铵荤殑绌嶇瑳绫嶇妇缈熻嵒璎硦璧よ贰韫熻开杩归仼閺戜絻浣哄偝鍏ㄥ吀鍓嶅壀濉″〖濂犲皥灞曞粵鎮涙埌鏍撴姘堟颈锟�".split("");for(j=0;j!=D[238].length;++j)if(D[238][j].charCodeAt(0)!==65533){e[D[238][j]]=60928+j;d[60928+j]=D[238][j]}D[239]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界厧鐞犵敯鐢哥晳鐧茬瓕绠嬬绡嗙簭瑭季杞夐埧閵撻將閻浕椤氶~椁炲垏鎴姌娴欑櫎绔婄瘈绲跺崰宀惧簵婕哥偣绮橀湋楫庨粸鎺ユ懞铦朵竵浜曚涵鍋滃伒鍛堝瀹氬箑搴环寰佹儏鎸烘斂鏁存棇鏅舵櫢鏌炬エ妾夋姹�娣�娣ㄦ笩婀炵�炵偂鐜庣徑鐢虹潧纰囩绋嬬┙绮剧稁鑹囪▊璜矠閯厞閲橀墻閶岄尃闇嗛潠锟�".split("");for(j=0;j!=D[239].length;++j)if(D[239][j].charCodeAt(0)!==65533){e[D[239][j]]=61184+j;d[61184+j]=D[239][j]}D[240]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介潨闋傞紟鍒跺姂鍟煎牑甯濆紵鎮屾彁姊繜绁鑷嶈柡瑁借韫勯啀闄ら殯闇介榻婁繋鍏嗗噵鍔╁槻寮斿将鎺搷鏃╂檨鏇烘浌鏈濇妫楁Ы婕曟疆鐓х嚗鐖挭鐪虹绁氱绋犵獣绮楃碂绲勭拱鑲囪椈铓よ瑾胯稒韬侀�犻伃閲i樆闆曢偿鏃忕皣瓒抽弮瀛樺皧鍗掓嫏鐚濆�у畻寰炴偘鎱娣欑惍绋祩缍滅副鑵拷".split("");for(j=0;j!=D[240].length;++j)if(D[240][j].charCodeAt(0)!==65533){e[D[240][j]]=61440+j;d[61440+j]=D[240][j]}D[241]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟借釜韪甸嵕閻樹綈鍧愬乏搴ф尗缃富浣忎緩鍋氬鑳勫應鍛ㄥ椌濂忓畽宸炲粴鏅濇湵鏌辨牚娉ㄦ床婀婃緧鐐风彔鐤囩睂绱傜船缍㈣垷铔涜ɑ瑾呰蛋韬婅汲閫遍厧閰掗憚椐愮绮ヤ繆鍎佸噯鍩堝宄绘櫃妯芥禋婧栨楷鐒岀暞绔h牏閫¢伒闆嬮Э鑼佷腑浠茶閲嶅嵔娅涙カ姹佽懞澧炴啂鏇炬嫰鐑濈攽鐥囩箳钂歌瓑璐堜箣鍙拷".split("");for(j=0;j!=D[241].length;++j)if(D[241][j].charCodeAt(0)!==65533){e[D[241][j]]=61696+j;d[61696+j]=D[241][j]}D[242]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉挮鍦板潃蹇楁寔鎸囨懐鏀棬鏅烘灊鏋虫姹犳矚婕煡鐮ョ绁楃礄鑲㈣剛鑷宠姖鑺疯湗瑾岋Ъ璐勮毒閬茬洿绋欑ǚ绻旇伔鍞囧棓濉垫尟鎼㈡檳鏅嬫…姒涙畡娲ユ罕鐝嶇懆鐠$暃鐤圭洝鐪炵瀷绉︾笁绺濊嚮钄瑷鸿硲杌景閫查幁闄i櫝闇囦緞鍙卞И瀚夊笝妗庣搯鐤剧З绐掕啠铔唱璺岃凯鏂熸湑铵藉煼娼楃窛杓拷".split("");for(j=0;j!=D[242].length;++j)if(D[242][j].charCodeAt(0)!==65533){e[D[242][j]]=61952+j;d[61952+j]=D[242][j]}D[243]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介彾闆嗗镜鎳叉緞涓斾緲鍊熷弶鍡熷弹宸姝ょ绠氾Ь韫夎粖閬崏鎼剧潃绐勯尟閼块姜鎾版警鐕︾挩鐡氱珓绨掔簜绮茬簶璁氳磰閼介楗屽埞瀵熸摝鏈串鍍弮濉规厴鎱欐嚭鏂珯璁掕畺鍊夊�″壍鍞卞寤犲桨鎰存暈鏄屾樁鏆㈡婊勬疾鐚栫槨绐撹劰鑹欒彇钂煎偟鍩板瘈瀵ㄥ僵鎺$牔缍佃彍钄¢噰閲靛唺鏌电瓥锟�".split("");for(j=0;j!=D[243].length;++j)if(D[243][j].charCodeAt(0)!==65533){e[D[243][j]]=62208+j;d[62208+j]=D[243][j]}D[244]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟借铂鍑勫鎮借檿鍊滐Э鍓斿昂鎱芥垰鎷撴摬鏂ユ粚鐦犺剨韫犻櫉闅讳粺鍗冨枠澶╁窛鎿呮硥娣虹帞绌胯垱钖﹁长韪愰伔閲ч棥闃¢焼鍑稿摬鍠嗗竟鎾ゆ緢缍磋紵杞嶉惖鍍夊皷娌炬坊鐢涚灮绨界堡瑭硅珎鍫炲甯栨嵎鐗掔枈鐫珳璨艰紥寤虫櫞娣歌伣鑿佽珛闈戦瘱铷�鍓冩浛娑曟化绶犺閫仦楂斿垵鍓垮摠鎲旀妱鎷涙ⅱ锟�".split("");for(j=0;j!=D[244].length;++j)if(D[244][j].charCodeAt(0)!==65533){e[D[244][j]]=62464+j;d[62464+j]=D[244][j]}D[245]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥妤氭ǖ鐐掔劍纭濈绀庣绋嶈倴鑹歌嫊鑽夎晧璨傝秴閰㈤唻閱績鍥戠嚟鐭楄渶瑙稿蹇栨潙閭ㄥ彚濉氬鎮ゆ唩鎽犵附鑱拌敟閵冩挳鍌磾鏈�澧滄娊鎺ㄦ妤告婀毢绉嬭娀钀╄珡瓒ㄨ拷閯掗厠閱滈寪閷橀帤闆涢ǘ榘嶄笐鐣滅绔虹瓚绡夌府钃勮箼韫磋桓閫愭槬妞跨憙鍑烘湲榛滃厖蹇犳矕锜茶琛锋偞鑶佃悆锟�".split("");for(j=0;j!=D[245].length;++j)if(D[245][j].charCodeAt(0)!==65533){e[D[245][j]]=62720+j;d[62720+j]=D[245][j]}D[246]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟借磪鍙栧惞鍢村ǘ灏辩倞缈犺仛鑴嗚嚟瓒i唹椹熼凡鍋翠粍鍘犳兓娓堡渚堝�ゅ棨宄欏篃鎭ユ娌绘穭鐔剧棓鐥寸櫋绋氱绶囩坊缃嚧铓╄紲闆夐Τ榻掑墖鍕呴-瑕竷鏌掓紗渚靛鏋曟矆娴哥悰鐮ч嚌閸艰焺绉ょū蹇粬鍜ゅ斁澧Ε鎯版墦鎷栨湺妤曡埖闄�棣遍鍊崜鍟勫澕铷佹墭铷傛摙鏅煗婵佹刊鐞㈢惛瑷楋拷".split("");for(j=0;j!=D[246].length;++j)if(D[246][j].charCodeAt(0)!==65533){e[D[246][j]]=62976+j;d[62976+j]=D[246][j]}D[247]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介惛鍛戝槅鍧﹀綀鎲氭瓗鐏樼偔缍昏獣濂劔鎺㈢湀鑰借勃濉旀惌姒诲畷甯戞汞铷冭暕鍏屽彴澶�犳厠娈嗘卑娉扮瑸鑳庤嫈璺嗛偘棰憋▌鎿囨兢鎾戞攧鍏庡悙鍦熻◣鎱熸《铷呯棝绛掔当閫氬爢妲岃吙瑜��闋瑰伕濂楀Μ鎶曢�忛鎱濈壒闂栧潯濠嗗反鎶婃挱鎿烘澐娉㈡淳鐖惗鐮寸椒鑺窙闋楀垽鍧傛澘鐗堢摚璨╄睛閳戯拷".split("");for(j=0;j!=D[247].length;++j)if(D[247][j].charCodeAt(0)!==65533){e[D[247][j]]=63232+j;d[63232+j]=D[247][j]}D[248]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介槳鍏彮鎹屼僵鍞勬倴鏁楁矝娴跨墝鐙界瑕囪矟褰編鐑硅啫鎰庝究鍋忔墎鐗囩瘒绶ㄧ咯閬嶉灜楱欒捕鍧钩鏋拌悕瑭曞悹瀣栧梗寤㈠紛鏂冭偤钄介枆闄涗綀鍖呭實鍖忓拞鍝哄渻甯冩�栨姏鎶辨崟铷嗘场娴︾柋鐮茶優鑴嫗钁¤挷琚嶈閫嬮嫪椋介畱骞呮毚鏇濈�戠垎铷囦康鍓藉姜鎱撴潛妯欐紓鐡㈢エ琛ㄨ惫椋囬椹冿拷".split("");for(j=0;j!=D[248].length;++j)if(D[248][j].charCodeAt(0)!==65533){e[D[248][j]]=63488+j;d[63488+j]=D[248][j]}D[249]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉搧绋熸璜疯眾棰ㄩΞ褰兼姭鐤茬毊琚伩闄傚尮寮煎繀娉岀弻鐣㈢枊绛嗚嬀棣濅箯閫间笅浣曞帵澶忓粓鏄版渤鐟曡嵎铦﹁硛閬愰湠榘曞瀛歌檺璎旈洞瀵掓仺鎮嶆棻姹楁饥婢g�氱綍缈伴枒闁掗檺闊撳壊杞勫嚱鍚捀鍟e枈妾绘兜绶樿墻閵滈櫡楣瑰悎鍝堢洅铔ら枻闂旈櫆浜級濮宸锋亽鎶楁澀妗佹矄娓几鑲涜埅锟�".split("");for(j=0;j!=D[249].length;++j)if(D[249][j].charCodeAt(0)!==65533){e[D[249][j]]=63744+j;d[63744+j]=D[249][j]}D[250]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤▓铷夐爡浜ュ仌鍜冲灀濂氬瀹虫噲妤锋捣鐎h煿瑙h┎璜ч倐椐鍔炬牳鍊栧垢鏉忚崌琛屼韩鍚戝毊鐝﹂剷闊块楗楅鍣撳铏涜ū鎲叉鐛昏粧姝囬毆椹楀鐖�璧潻淇斿炒寮︽嚫鏅涙倡鐐巹鐜圭従鐪╃潔绲冪耽绺h埛琛掞▕璩㈤墘椤瓚绌磋闋佸珜淇犲崝澶惧辰鎸炬倒鐙硅剠鑴囪帰閶忛牥浜ㄥ厔鍒戝瀷锟�".split("");
+for(j=0;j!=D[250].length;++j)if(D[250][j].charCodeAt(0)!==65533){e[D[250][j]]=64e3+j;d[64e3+j]=D[250][j]}D[251]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉舰娉傛粠鐎呯亹鐐啋鐝╃懇鑽婅灑琛¢�堥偄閹iΘ鍏綏鎯犳収鏆宠暀韫婇啹闉嬩箮浜掑懠澹曞:濂藉驳寮ф埗鎵堟槉鏅ф娴╂窂婀栨桓婢旀繝婵╃仢鐙愮惀鐟氱摖鐨撶绯婄笧鑳¤姦钁捒铏庤櫉铦磋璞幀闋�椤ユ儜鎴栭叿濠氭槒娣锋妇鐞块瓊蹇芥儦绗忓搫寮樻睘娉撴椽鐑樼磪铏硅▽榇诲寲鍜屽瑓妯虹伀鐣碉拷".split("");for(j=0;j!=D[251].length;++j)if(D[251][j].charCodeAt(0)!==65533){e[D[251][j]]=64256+j;d[64256+j]=D[251][j]}D[252]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界绂捐姳鑿┍璀佽波闈达▼鎿存敨纰虹⒒绌父鍠氬瀹﹀够鎮f彌姝℃櫏妗撴笝鐓ョ挵绱堥倓椹╅哎娲绘粦鐚捐眮闂婂嚢骞屽鲸鎭嶆兌鎰版厡鏅冩檮姒ユ硜婀熸粔娼㈢厡鐠滅殗绡佺哀鑽掕潡閬戦殟榛冨尟鍥炲换寰婃仮鎮旀嚪鏅︽渻妾滄樊婢伆鐛躬鑶捐尨铔旇璩勫妰鐛插畺姗悇鍝殕瀛濇晥鏂呮泬姊熸秿娣嗭拷".split("");for(j=0;j!=D[252].length;++j)if(D[252][j].charCodeAt(0)!==65533){e[D[252][j]]=64512+j;d[64512+j]=D[252][j]}D[253]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界埢鑲撮叺椹嶄警鍊欏帤鍚庡惣鍠夊梾甯垮緦鏈界叇鐝濋�呭嫑鍕冲·澹庣剟鐔忕嚮钖拌〒鏆堣枿鍠ф殑鐓婅惐鍗夊枡姣佸綑寰芥彯鏆夌厙璜辫紳楹句紤鎼虹儖鐣﹁櫑鎭よ瓗榉稿厙鍑跺寛娲惰兏榛戞槙娆g倶鐥曞悆灞圭磭瑷栨瑺娆芥瓎鍚告伆娲界繒鑸堝儢鍑炲枩鍣泹濮瑝甯屾啓鎲樻埍鏅炴洣鐔欑喒鐔虹姧绂х█缇茶┌锟�".split("");for(j=0;j!=D[253].length;++j)if(D[253][j].charCodeAt(0)!==65533){e[D[253][j]]=64768+j;d[64768+j]=D[253][j]}return{enc:e,dec:d}}();cptable[950]=function(){var d=[],e={},D=[],j;D[0]="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷".split("");for(j=0;j!=D[0].length;++j)if(D[0][j].charCodeAt(0)!==65533){e[D[0][j]]=0+j;d[0+j]=D[0][j]}D[161]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷銆�锛屻�併�傦紟鈥э紱锛氾紵锛侊赴鈥︹�ワ箰锕戯箳路锕旓箷锕栵箺锝溾�擄副鈥旓赋鈺达复锕忥紙锛夛傅锔讹經锝濓阜锔搞�斻�曪腹锔恒�愩�戯富锔笺�娿�嬶附锔俱�堛�夛缚锕�銆屻�嶏箒锕傘�庛�忥箖锕勶箼锕氾拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤箾锕滐節锕炩�樷�欌�溾�濄�濄�炩�碘�诧純锛嗭紛鈥宦с�冣棆鈼忊柍鈻测棊鈽嗏槄鈼団梿鈻♀枲鈻解柤銑b剠炉锟o伎藣锕夛箠锕嶏箮锕嬶箤锕燂範锕★紜锛嵜椕仿扁垰锛滐紴锛濃墻鈮р墵鈭炩墥鈮★耿锕o工锕ワ功锝炩埄鈭姤鈭犫垷鈯裤彃銖戔埆鈭埖鈭粹檧鈾傗姇鈯欌啈鈫撯啇鈫掆問鈫椻啓鈫樷垾鈭o紡锟�".split("");for(j=0;j!=D[161].length;++j)if(D[161][j].charCodeAt(0)!==65533){e[D[161][j]]=41216+j;d[41216+j]=D[161][j]}D[162]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锛尖垥锕紕锟ャ�掞繝锟★紖锛犫剝鈩夛供锕公銖曘帨銕濄帪銖庛帯銕庛帍銖劼板厵鍏涘厼鍏濆叀鍏e棫鐡╃硯鈻佲杺鈻冣杽鈻呪枂鈻団枅鈻忊枎鈻嶁枌鈻嬧枈鈻夆敿鈹粹敩鈹も敎鈻斺攢鈹傗枙鈹屸攼鈹斺敇鈺拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟解暜鈺扳暞鈺愨暈鈺暋鈼⑩棧鈼モ棨鈺扁暡鈺筹紣锛戯紥锛擄紨锛曪紪锛楋紭锛欌厾鈪♀參鈪b叅鈪モ叇鈪р叏鈪┿�°�€�c�ゃ�ャ�︺�с�ㄣ�╁崄鍗勫崊锛★饥锛o激锛ワ鸡锛э绩锛╋吉锛棘锛籍锛及锛憋疾锛筹即锛碉级锛凤几锛癸己锝侊絺锝冿絼锝咃絾锝囷綀锝夛綂锝嬶綄锝嶏綆锝忥綈锝戯綊锝擄綌锝曪綎锟�".split("");for(j=0;j!=D[162].length;++j)if(D[162][j].charCodeAt(0)!==65533){e[D[162][j]]=41472+j;d[41472+j]=D[162][j]}D[163]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锝楋綐锝欙綒螒螔螕螖螘螙螚螛螜螝螞螠螡螢螣螤巍危韦违桅围唯惟伪尾纬未蔚味畏胃喂魏位渭谓尉慰蟺蟻蟽蟿蠀蠁蠂蠄蠅銊呫剢銊囥剤銊夈剨銊嬨剬銊嶃剮銊忥拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟姐剱銊戙剴銊撱剶銊曘剸銊椼剺銊欍剼銊涖劀銊濄劄銊熴劆銊°劉銊c劋銊ャ劍銊с劏銊┧櫵壦娝囁嬶拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鈧拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�".split("");for(j=0;j!=D[163].length;++j)if(D[163][j].charCodeAt(0)!==65533){e[D[163][j]]=41728+j;d[41728+j]=D[163][j]}D[164]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷涓�涔欎竵涓冧箖涔濅簡浜屼汉鍎垮叆鍏嚑鍒�鍒佸姏鍖曞崄鍗滃張涓変笅涓堜笂涓父鍑′箙涔堜篃涔炰簬浜″厐鍒冨嫼鍗冨弶鍙e湡澹澶уコ瀛愬瓚瀛撳灏忓阿灏稿北宸濆伐宸卞凡宸冲肪骞插痪寮嬪紦鎵嶏拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟戒笐涓愪笉涓赴涓逛箣灏逛簣浜戜簳浜掍簲浜粊浠�浠冧粏浠囦粛浠婁粙浠勫厓鍏佸収鍏叜鍏啑鍑跺垎鍒囧垐鍕诲嬀鍕垮寲鍖瑰崍鍗囧崊鍗炲巹鍙嬪強鍙嶅,澶╁か澶き瀛斿皯灏ゅ昂灞反骞诲豢寮斿紩蹇冩垐鎴舵墜鎵庢敮鏂囨枟鏂ゆ柟鏃ユ洶鏈堟湪娆犳姝规瘚姣旀瘺姘忔按鐏埅鐖剁埢鐗囩墮鐗涚姮鐜嬩笝锟�".split("");for(j=0;j!=D[164].length;++j)if(D[164][j].charCodeAt(0)!==65533){e[D[164][j]]=41984+j;d[41984+j]=D[164][j]}D[165]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷涓栦笗涓斾笜涓讳箥涔忎箮浠ヤ粯浠斾粫浠栦粭浠d护浠欎粸鍏呭厔鍐夊唺鍐嚬鍑哄嚫鍒婂姞鍔熷寘鍖嗗寳鍖濅粺鍗婂崏鍗″崰鍗嵁鍘诲彲鍙ゅ彸鍙彯鍙╁彣鍙煎徃鍙靛彨鍙﹀彧鍙插彵鍙板彞鍙徎鍥涘洑澶栵拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉ぎ澶卞ゴ濂跺瓡瀹冨凹宸ㄥ阀宸﹀競甯冨钩骞煎紒寮樺紬蹇呮垔鎵撴墧鎵掓墤鏂ユ棪鏈湰鏈湯鏈姣嶆皯姘愭案姹佹眬姘剧姱鐜勭帀鐡滅摝鐢樼敓鐢ㄧ敥鐢扮敱鐢茬敵鐤嬬櫧鐨毧鐩煕鐭㈢煶绀虹绌寸珛涓炰笩涔掍箵涔╀簷浜や害浜ヤ豢浼変紮浼婁紩浼嶄紣浼戜紡浠蹭欢浠讳话浠充唤浼佷紜鍏夊厙鍏嗗厛鍏拷".split("");for(j=0;j!=D[165].length;++j)if(D[165][j].charCodeAt(0)!==65533){e[D[165][j]]=42240+j;d[42240+j]=D[165][j]}D[166]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍏卞啀鍐板垪鍒戝垝鍒庡垨鍔e寛鍖″尃鍗板嵄鍚夊悘鍚屽悐鍚愬悂鍚嬪悇鍚戝悕鍚堝悆鍚庡悊鍚掑洜鍥炲洕鍦冲湴鍦ㄥ湱鍦湳鍦╁澶氬し澶稿濂稿濂藉ス濡傚瀛楀瓨瀹囧畧瀹呭畨瀵哄皷灞瑰窞甯嗗苟骞达拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉紡寮涘繖蹇栨垘鎴屾垗鎴愭墸鎵涙墭鏀舵棭鏃ㄦ棳鏃洸鏇虫湁鏈芥湸鏈辨湹娆℃姝绘皷姹濇睏姹欐睙姹犳睈姹曟薄姹涙睄姹庣伆鐗熺墲鐧剧绫崇掣缂剁緤缇借�佽�冭�岃�掕�宠伩鑲夎倠鑲岃嚕鑷嚦鑷艰垖鑸涜垷鑹壊鑹捐櫕琛�琛岃。瑗块槨涓蹭酣浣嶄綇浣囦綏浣炰即浣涗綍浼颁綈浣戜冀浼轰几浣冧綌浼间絾浣o拷".split("");for(j=0;j!=D[166].length;++j)if(D[166][j].charCodeAt(0)!==65533){e[D[166][j]]=42496+j;d[42496+j]=D[166][j]}D[167]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷浣滀綘浼綆浼朵綑浣濅綀浣氬厡鍏嬪厤鍏靛喍鍐峰垾鍒ゅ埄鍒埁鍔姪鍔姮鍖e嵆鍗靛悵鍚悶鍚惧惁鍛庡惂鍛嗗憙鍚冲憟鍛傚悰鍚╁憡鍚瑰惢鍚稿惍鍚靛惗鍚犲惣鍛�鍚卞惈鍚熷惉鍥洶鍥ゅ洬鍧婂潙鍧�鍧嶏拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉潎鍧庡溇鍧愬潖鍦诲/澶惧濡掑Θ濡炲Γ濡欏濡嶅Δ濡撳濡ュ瓭瀛滃瓪瀛涘畬瀹嬪畯灏眬灞佸翱灏惧矏宀戝矓宀屽帆甯屽簭搴囧簥寤峰紕寮熷饯褰㈠椒褰瑰繕蹇屽織蹇嶅勘蹇扛蹇垝鎴戞妱鎶楁姈鎶�鎵舵妷鎵妸鎵兼壘鎵规壋鎶掓壇鎶樻壆鎶曟姄鎶戞妴鏀规敾鏀告棻鏇存潫鏉庢潖鏉愭潙鏉滄潠鏉炴潐鏉嗘潬锟�".split("");for(j=0;j!=D[167].length;++j)if(D[167][j].charCodeAt(0)!==65533){e[D[167][j]]=42752+j;d[42752+j]=D[167][j]}D[168]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鏉撴潡姝ユ瘡姹傛睘娌欐瞾娌堟矇娌呮矝姹焙娌愭卑娌屾报娌栨矑姹芥矁姹叉本姹存矄姹舵矋娌旀矘娌傜伓鐏肩伣鐏哥墷鐗$墵鐙勭媯鐜栫敩鐢敺鐢哥殏鐩煟绉佺绂跨┒绯荤綍鑲栬倱鑲濊倶鑲涜倸鑲茶壇鑺掞拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟借妺鑺嶈瑙掕█璋疯眴璞曡矟璧よ蛋瓒宠韩杌婅緵杈拌總杩嗚繀杩勫贰閭戦偄閭偊閭i厜閲嗛噷闃查槷闃遍槳闃甫涔栦钩浜嬩簺浜炰韩浜蒋渚濅緧浣充娇浣緵渚嬩締渚冧桨浣典緢浣╀交渚栦骄渚忎緫浣哄厰鍏掑厱鍏╁叿鍏跺吀鍐藉嚱鍒诲埜鍒峰埡鍒板埉鍒跺墎鍔惧娀鍗掑崝鍗撳崙鍗﹀嵎鍗稿嵐鍙栧彅鍙楀懗鍛碉拷".split("");for(j=0;j!=D[168].length;++j)if(D[168][j].charCodeAt(0)!==65533){e[D[168][j]]=43008+j;d[43008+j]=D[168][j]}D[169]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍜栧懜鍜曞拃鍛诲懛鍜勫拻鍜嗗懠鍜愬懕鍛跺拰鍜氬憿鍛ㄥ拫鍛藉拵鍥哄瀮鍧峰潽鍧╁潯鍧﹀潳鍧煎濂夊濂堝濂斿濡诲濡瑰Ξ濮戝濮愬濮嬪濮婂Ο濡冲濮呭瓱瀛ゅ瀹楀畾瀹樺疁瀹欏疀灏氬眻灞咃拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉眴宀峰病宀稿博宀脖宀冲笜甯氬笘甯曞笡甯戝垢搴氬簵搴滃簳搴栧欢寮﹀姬寮╁線寰佸娇褰煎繚蹇犲拷蹇靛靠鎬忔�旀��垫�栨��曟�℃�ф�╂��涙垨鎴曟埧鎴炬墍鎵挎媺鎷屾媱鎶挎媯鎶规嫆鎷涙姭鎷撴嫈鎷嬫媹鎶ㄦ娊鎶兼嫄鎷欐媷鎷嶆姷鎷氭姳鎷樻嫋鎷楁媶鎶嫀鏀炬枾鏂兼椇鏄旀槗鏄屾槅鏄傛槑鏄�鏄忔槙鏄婏拷".split("");for(j=0;j!=D[169].length;++j)if(D[169][j].charCodeAt(0)!==65533){e[D[169][j]]=43264+j;d[43264+j]=D[169][j]}D[170]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鏄囨湇鏈嬫澀鏋嬫灂鏉辨灉鏉虫澐鏋囨灊鏋楁澂鏉版澘鏋夋澗鏋愭澋鏋氭灀鏉兼潽鏉叉姝︽姝挎皳姘涙常娉ㄦ吵娌辨硨娉ユ渤娌芥簿娌兼尝娌硶娉撴哺娉勬补娉佹伯娉楁硡娉辨部娌绘场娉涙硦娌朝娉滄硸娉狅拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界倳鐐庣倰鐐婄倷鐖埈鐖哥増鐗х墿鐙�鐙庣嫏鐙楃嫄鐜╃帹鐜熺帿鐜ョ斀鐤濈枡鐤氱殑鐩傜洸鐩寸煡鐭界ぞ绁�绁佺绉堢┖绌圭绯剧綌缇岀緥鑰呰偤鑲ヨ偄鑲辫偂鑲偐鑲磋偑鑲嚗鑷捐垗鑺宠姖鑺欒姯鑺借姛鑺硅姳鑺姤鑺姼鑺h姲鑺捐姺铏庤櫛鍒濊〃杌嬭繋杩旇繎閭甸偢閭遍偠閲囬噾闀烽杸闃滈檧闃块樆闄勶拷".split("");for(j=0;j!=D[170].length;++j)if(D[170][j].charCodeAt(0)!==65533){e[D[170][j]]=43520+j;d[43520+j]=D[170][j]}D[171]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷闄傞毠闆ㄩ潚闈炰簾浜寒淇′镜渚究淇犱繎淇忎繚淇冧径淇樹繜淇婁織渚繍淇勪總淇氫繋淇炰痉鍏楀啋鍐戝啝鍓庡墐鍓婂墠鍓屽墜鍓囧媷鍕夊媰鍕佸實鍗楀嵒鍘氬彌鍜搥鍜ㄥ搸鍝夊捀鍜﹀挸鍝囧搨鍜藉挭鍝侊拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉搫鍝堝挴鍜挶鍜诲挬鍜у捒鍥垮瀭鍨嬪灎鍨e灑鍩庡灝鍨撳濂戝濂庡濮滃濮垮В濮ㄥ▋濮ュИ濮氬Е濞佸Щ瀛╁瀹﹀瀹㈠灏佸睅灞忓睄灞嬪硻宄掑贩甯濆弗甯熷菇搴犲害寤哄紙寮渐寰堝緟寰婂緥寰囧緦寰夋�掓�濇�犳�ユ�庢�ㄦ亶鎭版仺鎭㈡亞鎭冩伂鎭仾鎭ゆ墎鎷滄寲鎸夋嫾鎷寔鎷嫿鎸囨嫳鎷凤拷".split("");for(j=0;j!=D[171].length;++j)if(D[171][j].charCodeAt(0)!==65533){e[D[171][j]]=43776+j;d[43776+j]=D[171][j]}D[172]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鎷嫭鎷炬嫶鎸戞寕鏀挎晠鏂柦鏃㈡槬鏄槧鏄ф槸鏄熸槰鏄辨槫鏇锋熆鏌撴煴鏌旀煇鏌灦鏋煹鏌╂煰鏌勬煈鏋存煔鏌ユ灨鏌忔煘鏌虫灠鏌欐煝鏌濇煉姝畠娈嗘姣掓瘲姘熸硥娲嬫床娲祦娲ユ磳娲辨礊娲楋拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥椿娲芥淳娲舵礇娉垫垂娲ф锤娲╂串娲垫磶娲偒鐐虹偝鐐偗鐐偢鐐偆鐖扮壊鐗壌鐙╃嫚鐙$幏鐝婄幓鐜茬弽鐝�鐜崇敋鐢晱鐣岀晭鐣嬬柅鐤ょ枼鐤㈢枺鐧哥殕鐨囩殘鐩堢泦鐩冪泤鐪佺浌鐩哥湁鐪嬬浘鐩肩渿鐭滅爞鐮旂爩鐮嶇绁夌绁囩绂虹绉掔绌跨獊绔跨绫界磦绱呯磤绱夌磭绱勭磫缂哥編缇胯�勶拷".split("");for(j=0;j!=D[172].length;++j)if(D[172][j].charCodeAt(0)!==65533){e[D[172][j]]=44032+j;d[44032+j]=D[172][j]}D[173]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鑰愯�嶈�戣�惰儢鑳ヨ儦鑳冭儎鑳岃儭鑳涜儙鑳炶儰鑳濊嚧鑸㈣嫥鑼冭寘鑻h嫑鑻﹁寗鑻ヨ寕鑼夎嫆鑻楄嫳鑼佽嫓鑻旇嫅鑻炶嫇鑻熻嫰鑼嗚檺铏硅櫥铏鸿琛瑙旇▓瑷傝▋璨炶矤璧磋党瓒磋粛杌岃堪杩﹁竣杩骏锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷杩揩杩よ卡閮婇儙閮侀儍閰嬮厞閲嶉杺闄愰檵闄岄檷闈㈤潻闊嬮煭闊抽爜棰ㄩ椋熼棣欎箻浜冲�屽�嶅�d刊鍊﹀�ヤ扛鍊╁�栧�嗗�煎�熷�氬�掑�戜亢鍊�鍊斿�ㄤ勘鍊″�嬪�欏�樹砍淇��烤鍊�夊吋鍐ゅ啣鍐㈠噸鍑屽噯鍑嬪墫鍓滃墧鍓涘墲鍖嵖鍘熷帩鍙熷摠鍞愬攣鍞峰摷鍝ュ摬鍞嗗摵鍞斿摡鍝摗鍞夊摦鍝拷".split("");for(j=0;j!=D[173].length;++j)if(D[173][j].charCodeAt(0)!==65533){e[D[173][j]]=44288+j;d[44288+j]=D[173][j]}D[174]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍝﹀敡鍞囧摻鍞忓渻鍦勫焸鍩斿煁鍩冨爥澶忓濂樺濞戝濞滃濞涘〒濮濞eī濞ュ▽濞夊灞樺瀹冲瀹村瀹靛瀹稿皠灞戝睍灞愬抄宄藉郴宄敞宄板扯宕佸炒宸腑甯韩搴骇寮卞緬寰戝緪鎭欙拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥仯鎭ユ亹鎭曟伃鎭╂伅鎮勬偀鎮氭倣鎮旀倢鎮呮倴鎵囨嫵鎸堟嬁鎹庢尵鎸崟鎹傛崋鎹忔崏鎸烘崘鎸芥尓鎸尐鎹嶆崒鏁堟晧鏂欐梺鏃呮檪鏅夋檹鏅冩檼鏅屾檯鏅佹浉鏈旀湑鏈楁牎鏍告妗嗘鏍规妗旀牘姊虫牀妗屾鏍芥煷妗愭鏍兼鏍鏍撴牁妗佹畩娈夋姘f哀姘ㄦ唉姘ゆ嘲娴稌娑堟秶娴︽蹈娴锋禉娑擄拷".split("");for(j=0;j!=D[174].length;++j)if(D[174][j].charCodeAt(0)!==65533){e[D[174][j]]=44544+j;d[44544+j]=D[174][j]}D[175]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷娴秹娴禋娴存旦娑屾秺娴规秴娴ユ稊鐑婄儤鐑ょ儥鐑堢儚鐖圭壒鐙肩嫻鐙界嫺鐙风巻鐝悏鐝彔鐝彏鐣旂暆鐣滅暁鐣欑柧鐥呯棁鐤茬柍鐤界柤鐤圭梻鐤哥殝鐨扮泭鐩嶇泿鐪╃湡鐪犵湪鐭╃牥鐮х牳鐮濈牬鐮凤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界牓鐮牋鐮熺牪绁曠绁犵绁栫绁濈绁氱Г绉gЁ绉熺Е绉╃绐勭獔绔欑瑔绗戠矇绱$礂绱嬬磰绱犵储绱旂磹绱曠礆绱滅磵绱欑礇缂虹綗缇旂繀缈佽�嗚�樿�曡�欒�楄�借�胯儽鑴傝儼鑴呰儹鑳磋剢鑳歌兂鑴堣兘鑴婅兗鑳嚟鑷垁鑸愯埅鑸埁鑸娀鑼崚鑽旇崐鑼歌崘鑽夎尩鑼磋崗鑼茶尮鑼惰寳鑽�鑼辫尐鑽冿拷".split("");for(j=0;j!=D[175].length;++j)if(D[175][j].charCodeAt(0)!==65533){e[D[175][j]]=44800+j;d[44800+j]=D[175][j]}D[176]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷铏旇殜铓殦铓よ毄铓岃殻铓滆“琛疯琚傝〗琛硅瑷愯◣瑷岃〞瑷婅瑷撹瑷忚☉璞堣焙璞硅病璨㈣捣韬粧杌旇粡杈遍�侀�嗚糠閫�杩鸿看閫冭拷閫呰扛閭曢儭閮濋儮閰掗厤閰岄嚇閲濋嚄閲滈嚈闁冮櫌闄i櫋锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷闄涢櫇闄ら櫂闄為毣椋㈤Μ楠ㄩ珮楝ラ楝间咕鍋哄伣鍋滃亣鍋冨亴鍋氬亯鍋ュ伓鍋庡仌鍋靛伌鍋峰亸鍊忓伅鍋厹鍐曞嚢鍓壇鍕掑嫏鍕樺嫊鍖愬審鍖欏尶鍗�鍖惧弮鏇煎晢鍟暒鍟勫暈鍟″晝鍟婂敱鍟栧晱鍟曞敮鍟ゅ敻鍞暅鍞暎鍞冲晛鍟楀湀鍦嬪湁鍩熷爡鍫婂爢鍩犲煠鍩哄爞鍫靛煼鍩瑰濂㈠ǘ濠佸濠﹀┆濠�锟�".split("");for(j=0;j!=D[176].length;++j)if(D[176][j].charCodeAt(0)!==65533){e[D[176][j]]=45056+j;d[45056+j]=D[176][j]}D[177]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷濞煎濠氬﹩濠婂瀵囧瘏瀵勫瘋瀹垮瘑灏夊皥灏囧睜灞滃睗宕囧磫宕庡礇宕栧储宕戝穿宕斿礄宕ゅ揣宕楀发甯稿付甯冲阜搴峰焊搴跺旱搴惧嫉寮峰綏褰僵褰緱寰欏緸寰樺尽寰犲緶鎭挎偅鎮夋偁鎮ㄦ儖鎮存儲鎮斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥儏鎮绘偟鎯滄偧鎯樻儠鎯嗘儫鎮告儦鎯囨垰鎴涙増鎺犳帶鎹叉帠鎺㈡帴鎹锋崸鎺樻帾鎹辨帺鎺夋巸鎺涙崼鎺ㄦ巹鎺堟帣鎺℃幀鎺掓帍鎺�鎹绘崺鎹ㄦ嵑鏁濇晼鏁戞暀鏁楀暉鏁忔晿鏁曟晹鏂滄枦鏂棌鏃嬫棇鏃庢櫇鏅氭櫎鏅ㄦ櫐鏅炴浌鍕楁湜姊佹姊㈡姊垫】妗舵⒈姊ф姊版妫勬姊嗘姊旀姊ㄦ姊℃娆叉锟�".split("");for(j=0;j!=D[177].length;++j)if(D[177][j].charCodeAt(0)!==65533){e[D[177][j]]=45312+j;d[45312+j]=D[177][j]}D[178]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷姣姘稁娑兼烦娣欐恫娣℃穼娣ゆ坊娣烘竻娣囨穻娑窇娑窞娣规陡娣锋返娣呮窉娓氭兜娣氭帆娣樻藩娣辨樊娣ㄦ穯娣勬丢娣犊娣︾児鐒夌剨鐑界儻鐖界壗鐘佺寽鐚涚寲鐚撶寵鐜囩悈鐞婄悆鐞嗙従鐞嶇摖鐡讹拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界摲鐢滅敘鐣ョ暒鐣㈢暟鐤忕棓鐥曠柕鐥婄棈鐨庣洈鐩掔洓鐪风溇鐪肩湺鐪哥満纭纭庣ゥ绁ㄧキ绉荤獟绐曠瑺绗ㄧ瑳绗绗欑瑸绗矑绮楃矔绲嗙祪绲辩串绱圭醇绲�绱扮闯绲勭疮绲傜床绱辩冀缇炵練缈岀繋缈掕�滆亰鑱嗚劘鑴栬劊鑴劑鑴拌劋鑸傝埖鑸疯埗鑸硅帋鑾炶帢鑽歌帰鑾栬幗鑾帓鑾婅帗鑾夎帬鑽疯嵒鑽硷拷".split("");for(j=0;j!=D[178].length;++j)if(D[178][j].charCodeAt(0)!==65533){e[D[178][j]]=45568+j;d[45568+j]=D[178][j]}D[179]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鑾嗚帶铏曞姜铔囪泙铓惰泟铓佃泦铔嬭毐铓泬琛撹琚堣琚掕琚嶈瑕撹瑷瑷hē瑷辫ō瑷熻瑷㈣眽璞氳博璨搏璨ㄨ勃璨ц掸璧﹁毒瓒鸿粵杌熼�欓�嶉�氶�楅�i�熼�濋�愰�曢�為�犻�忛�㈤�栭�涢�旓拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介儴閮兘閰楅噹閲甸嚘閲i嚙閲嚛闁夐櫔闄甸櫝闄搁櫚闄撮櫠闄烽櫖闆�闆洨绔犵珶闋傞爟榄氶偿楣甸箍楹ラ夯鍌㈠倣鍌呭倷鍌戝個鍌栧倶鍌氭渶鍑卞壊鍓村壍鍓╁嫗鍕濆嫑鍗氬帴鍟诲杸鍠у暭鍠婂枬鍠樺杺鍠滃柂鍠斿枃鍠嬪杻鍠冲柈鍠熷斁鍠插枤鍠诲柆鍠卞暰鍠夊柅鍠欏湇鍫牚鍫村牑鍫板牨鍫″牆鍫犲9澹哄锟�".split("");for(j=0;j!=D[179].length;++j)if(D[179][j].charCodeAt(0)!==65533){e[D[179][j]]=45824+j;d[45824+j]=D[179][j]}D[180]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷濠峰獨濠垮獟濯涘瀛冲瀵掑瘜瀵撳瘣灏婂皨灏卞祵宓愬创宓囧方骞呭附骞�骞冨咕寤婂粊寤傚粍寮煎江寰╁惊寰ㄦ儜鎯℃偛鎮舵儬鎰滄劊鎯烘剷鎯版兓鎯存叏鎯辨剮鎯舵剦鎰�鎰掓垷鎵夋帲鎺屾弿鎻�鎻╂弶鎻嗘弽锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鎻掓彛鎻愭彙鎻栨彮鎻嵍鎻存彧鎻涙憭鎻氭徆鏁炴暒鏁㈡暎鏂戞枑鏂櫘鏅版櫞鏅舵櫙鏆戞櫤鏅炬櫡鏇炬浛鏈熸湞妫烘妫犳妫楁妫熸5妫'妫规妫叉#妫嬫妞嶆妞庢妫氭ギ妫绘娆烘娈樻畺娈兼姘隘姘腐娓告箶娓℃覆婀ф箠娓犳弗娓f笡婀涙箻娓ゆ箹婀腑娓︽汞娓存箥娓烘脯婀冩笣娓炬粙锟�".split("");for(j=0;j!=D[180].length;++j)if(D[180][j].charCodeAt(0)!==65533){e[D[180][j]]=46080+j;d[46080+j]=D[180][j]}D[181]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷婧夋笝婀庢梗婀勬共婀╂篃鐒欑剼鐒︾劙鐒$劧鐓劀鐗岀妱鐘�鐚剁尌鐚寸尒鐞虹惇鐞崇悽鐞ョ惖鐞剁惔鐞悰鐞︾惃鐢ョ敠鐣暘鐥㈢棝鐥g棛鐥樼棡鐥犵櫥鐧肩殩鐨撶毚鐩滅潖鐭纭’绋嶇▓绋嬬▍绋�绐橈拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界獥绐栫绔g瓑绛栫瓎绛愮瓛绛旂瓖绛嬬瓘绛戠矡绮ョ禐绲愮胆绲曠传绲挡绲$郸绲㈢蛋绲冲杽缈旂繒鑰嬭亽鑲呰厱鑵旇厠鑵戣厧鑴硅厗鑴捐厡鑵撹叴鑸掕垳鑿╄悆鑿歌悕鑿犺弲钀嬭弫鑿彵鑿磋憲钀婅彴钀岃弻鑿借彶鑿婅惛钀庤悇鑿滆悋鑿旇彑铏涜洘铔欒洯铔旇洓铔よ洂铔炶瑁佽琚辫瑕栬ɑ瑭犺瑭炶瑭侊拷".split("");for(j=0;j!=D[181].length;++j)if(D[181][j].charCodeAt(0)!==65533){e[D[181][j]]=46336+j;d[46336+j]=D[181][j]}D[182]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷瑭旇瑭愯﹩瑷磋ê瑷惰〇璞¤矀璨布璨宠步璩佽不璩�璨磋卜璨惰部璨歌秺瓒呰秮璺庤窛璺嬭窔璺戣穼璺涜穯杌昏桓杌艰緶閫�甸�遍�搁�查�堕剛閮甸剦閮鹃叄閰ラ噺閳旈垥閳i垑閳為垗閳愰垏閳戦枖闁忛枊闁戯拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介枔闁掗枎闅婇殠闅嬮櫧闅呴殕闅嶉櫜闅勯泚闆呴泟闆嗛泧闆洸闊岄爡闋嗛爤椋ч*椋)椋查-棣Ν榛冮粛榛戜簜鍌偟鍌插偝鍍呭偩鍌偡鍌诲偗鍍囧壙鍓峰壗鍕熷嫤鍕ゅ嫝鍕e尟鍡熷棬鍡撳棪鍡庡棞鍡囧棏鍡e棨鍡棜鍡″梾鍡嗗棩鍡夊湌鍦撳濉戝濉楀濉斿~濉屽…濉婂、濉掑濂у珌瀚夊珜濯惧濯硷拷".split("");for(j=0;j!=D[182].length;++j)if(D[182][j].charCodeAt(0)!==65533){e[D[182][j]]=46592+j;d[46592+j]=D[182][j]}D[183]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷濯冲珎濯插旦宓箤骞瑰粔寤堝紥褰欏粳寰剼鎰忔厛鎰熸兂鎰涙児鎰佹剤鎱庢厡鎱勬厤鎰炬劥鎰ф剭鎰嗘劮鎴℃垻鎼撴惥鎼炴惇鎼惤鎼悘鎼滄悢鎼嶆惗鎼栨悧鎼嗘暚鏂熸柊鏆楁殙鏆囨殘鏆栨殑鏆樻殟鏈冩妤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥妤锋妤旀サ妞版妤婃エ妤妤撴ス姒嗘妤f姝囨姣�娈挎瘬姣芥孩婧粨婧舵粋婧愭簼婊囨粎婧ユ簶婧兼汉婧粦婧栨簻婊勬粩婧骇婧寸厧鐓欑叐鐓ょ厜鐓х厹鐓叇鐓岀叆鐓炵厗鐓ㄧ厲鐖虹墥鐚风崊鐚跨尵鐟憵鐟曠憻鐟炵憗鐞跨憴鐟涚憸鐣剁暩鐦�鐥扮榿鐥茬棻鐥虹椏鐥寸棾鐩炵洘鐫涚潾鐫︾潪鐫o拷".split("");for(j=0;j!=D[183].length;++j)if(D[183][j].charCodeAt(0)!==65533){e[D[183][j]]=46848+j;d[46848+j]=D[183][j]}D[184]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐫圭潽鐫潨鐫ョ潹鐫㈢煯纰庣纰楃纰岀纭肩纰撶】绁虹タ绂佽惉绂界绋氱绋旂绋炵獰绐犵绡�绛犵绛х脖绮崇驳缍撶倒缍戠秮缍忕禌缃僵缃讲缇╃鲸缇よ仏鑱樿倖鑲勮叡鑵拌吀鑵ヨ叜鑵宠叓锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鑵硅吅鑵﹁垍鑹囪拏钁疯惤钀辫懙钁﹁懌钁夎懍钁涜惣钀佃憽钁h懇钁憜铏炶櫆铏熻浌铚撹湀铚囪渶铔捐浕铚傝渻铚嗚湂琛欒瑁旇瑁滆瑁濊!瑁婅瑁掕瑙h┇瑭茶┏瑭﹁┅瑭拌獓瑭艰瑾犺┍瑾呰┉瑭㈣┊瑭┕瑭昏ň瑭ㄨ雹璨婅矇璩婅硣璩堣硠璨茶硟璩傝硡璺¤窡璺ㄨ矾璺宠泛璺筏璺﹁翰杓冭級杌捐紛锟�".split("");for(j=0;j!=D[184].length;++j)if(D[184][j].charCodeAt(0)!==65533){e[D[184][j]]=47104+j;d[47104+j]=D[184][j]}D[185]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷杈熻静閬嬮亰閬撻亗閬旈�奸仌閬愰亣閬忛亷閬嶉亼閫鹃亖閯掗剹閰叒閰╅噳閳烽墬閳搁埥閴�閳鹃墰閴嬮墹閴戦埓閴夐墠閴呴埞閳块墯闁橀殬闅旈殨闆嶉泲闆夐泭闆烽浕闆归浂闈栭澊闈堕爯闋戦爴闋婇爳闋岄<椋达拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介=椋鹃Τ棣遍Υ楂¢畅楹傞紟榧撻紶鍍у儺鍍ュ儢鍍儦鍍曞儚鍍戝儽鍍庡儵鍏㈠嚦鍔冨妭鍖卞幁鍡惧榾鍢涘槜鍡藉様鍢嗗槈鍢嶅槑鍡峰槚鍢熷槇鍢愬椂鍦樺湒濉靛【澧冨澧婂」澧呭〗澹藉ぅ澶㈠い濂ォ瀚″瀚╁珬瀚栧珮瀚e瀵炲瀵″瀵﹀瀵㈠瀵熷皪灞㈠秳宥囧箾骞e箷骞楀箶寤撳粬寮婂絾褰板竟鎱囷拷".split("");for(j=0;j!=D[185].length;++j)if(D[185][j].charCodeAt(0)!==65533){e[D[185][j]]=47360+j;d[47360+j]=D[185][j]}D[186]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鎰挎厠鎱锋參鎱f厽鎱氭厴鎱垫埅鎾囨憳鎽旀挙鎽告憻鎽烘憫鎽ф惔鎽懟鏁叉枴鏃楁棖鏆㈡毃鏆濇姒ㄦ妲佹Ξ妲撴姒涙Ψ姒绘Λ姒存妲嶆Ν妲屾Ζ妲冩Γ姝夋瓕姘虫汲婕旀痪婕撴淮婕╂季婕犳棘婕忔紓婕拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥豢婊紗婕辨几婕叉迹婕曟极婕緢婕滑婕佹徊婊屾环鐔旂啓鐓界唺鐔勭啋鐖剧姃鐘栫崉鐛愮懁鐟g應鐟扮懎鐢勭枒鐦х槏鐦嬬槈鐦撶洝鐩g瀯鐫界澘鐫$纰熺ⅶ纰崇ⅸ纰g绂忕绋ū绐绔绠$畷绠嬬绠楃疂绠旂畯绠哥畤绠勭补绮界簿缍荤栋缍滅督缍剧稜绶婄洞缍茬侗缍虹盯缍跨兜缍哥董绶掔穱缍拷".split("");for(j=0;j!=D[186].length;++j)if(D[186][j].charCodeAt(0)!==65533){e[D[186][j]]=47616+j;d[47616+j]=D[186][j]}D[187]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷缃扮繝缈$繜鑱炶仛鑲囪厫鑶�鑶忚唸鑶婅吙鑶傝嚙鑷鸿垏鑸旇垶鑹嬭搲钂胯搯钃勮挋钂炶挷钂滆搵钂歌搥钃撹拹钂艰搼钃婅溈铚滆溁铚㈣湧铚磋湗铦曡湻铚╄3瑜傝4瑁硅8瑁借(瑜氳/瑾﹁獙瑾炶瑾嶈瑾撹锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷瑾瑾ㄨ獦瑾戣獨瑾ц豹璨嶈矊璩撹硲璩掕但瓒欒稌璺艰紨杓掕紩杓撹荆閬犻仒閬滈仯閬欓仦閬㈤仢閬涢剻閯橀劄閰甸吀閰烽叴閴搁妧閵呴姌閵栭壔閵撻姕閵ㄩ壖閵戦枴闁ㄩ柀闁i枼闁ら殭闅滈殯闆岄洅闇�闈奸瀰闊堕牀闋橀棰遍椁呴椁夐楠楂﹂瓉榄傞炒槌堕吵楹奸蓟榻婂剟鍎�鍍诲兊鍍瑰剛鍎堝剦鍎呭嚋锟�".split("");for(j=0;j!=D[187].length;++j)if(D[187][j].charCodeAt(0)!==65533){e[D[187][j]]=47872+j;d[47872+j]=D[187][j]}D[188]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍔囧妶鍔夊妽鍔婂嫲鍘插槷鍢诲樄鍢插樋鍢村槱鍣撳檸鍣楀櫞鍢跺槸鍢板澧熷澧冲澧ⅸ澧﹀キ瀣夊瀣嬪瀣屽瑘瀵瀵╁灞ゅ饱宥濆稊骞㈠篃骞″虎寤氬粺寤濆唬寤犲綀褰卞痉寰垫叾鎱ф叜鎱濇厱鎲傦拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥吋鎱版叓鎱炬啩鎲愭啱鎲庢啲鎲氭啢鎲旀啴鎴懇鎽懝鎾炴挷鎾堟拹鎾版挜鎾撴挄鎾╂拻鎾挱鎾挌鎾挋鎾㈡挸鏁垫暦鏁告毊鏆毚鏆辨ǎ妯熸Ж妯佹妯欐Ы妯℃〒妯婃С妯傛▍妲☉姝愭瓗娈ゆ瘏姣嗘伎娼兼緞娼戞溅娼旀締娼經娼告疆婢庢胶娼版饯婢楁綐婊曟蒋娼犳綗鐔熺啲鐔辩啫鐗栫姏鐛庣崡鐟╃拫鐠冿拷".split("");for(j=0;j!=D[188].length;++j)if(D[188][j].charCodeAt(0)!==65533){e[D[188][j]]=48128+j;d[48128+j]=D[188][j]}D[189]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐟剧拃鐣跨槧鐦╃槦鐦ょ槮鐦$槩鐨氱毢鐩ょ瀻鐬囩瀸鐬戠瀷纾嬬纰虹纰剧纰肩绋跨绌�绋界ǚ绋荤绐绠辩瘎绠寸瘑绡囩瘉绠犵瘜绯婄窢绶寸矾绶荤窐绶窛绶ㄧ罚绶氱窞绶╃稙绶欑凡绶圭降缃风警锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷缈╄�﹁啗鑶滆啙鑶犺啔鑶樿敆钄借敋钃敩钄敁钄戣敚钄¤敂钃敟钃胯攩铻傝澊铦惰潬铦﹁澑铦ㄨ潤铦楄潓铦撹琛濊瑜囪瑜撹瑜婅璜掕珖璜勮獣璜嬭瑾茶珘璜傝瑾拌珫璜嶈瑾硅珱璞岃睅璞碃璩炶肠璩よ超璩尝璩h硿璩场璧稛瓒h斧韪愯笣韪㈣笍韪╄笩韪¤笧韬鸿紳杓涜紵杓╄鸡杓紲杓烇拷".split("");for(j=0;j!=D[189].length;++j)if(D[189][j].charCodeAt(0)!==65533){e[D[189][j]]=48384+j;d[48384+j]=D[189][j]}D[190]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷杓ラ仼閬仺閬伔閯伴劖閯ч劚閱囬唹閱嬮唭閶呴娀閵烽嫪閵嫟閶侀姵閵奸嫆閶囬嫲閵查柇闁遍渼闇嗛渿闇夐潬闉嶉瀷闉忛牎闋牅棰抽椁撻椁橀椐愰椐涢椐曢椐欓楂楝ч瓍榄勯榄磫榇夛拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介磧楹╅壕榛庡ⅷ榻掑剴鍎樺剶鍎愬剷鍐�鍐嚌鍔戝姄鍕冲櫃鍣櫣鍣╁櫎鍣稿櫔鍣ㄥ櫏鍣卞櫙鍣櫌鍣跺澧惧澹呭ギ瀣濆瀛稿灏庡綂鎲叉啈鎲╂唺鎳嶆喍鎲炬噴鎳堟埌鎿呮搧鎿嬫捇鎾兼摎鎿勬搰鎿傛搷鎾挎搾鎿旀捑鏁存泦鏇夋毠鏇勬泧鏆告ń妯告ê姗欐┇姗樻ü姗勬姗℃姗囨ǖ姗熸﹫姝欐姘呮總婢辨尽锟�".split("");for(j=0;j!=D[190].length;++j)if(D[190][j].charCodeAt(0)!==65533){e[D[190][j]]=48640+j;d[48640+j]=D[190][j]}D[191]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷婵冩兢婵佹晶婢虫縺婢规径婢︽緺婢寸喚鐕夌噽鐕掔噲鐕曠喒鐕庣嚈鐕滅噧鐕勭崹鐠滅挘鐠樼挓鐠炵摙鐢岀攳鐦寸樃鐦虹洤鐩ョ灎鐬炵灍鐬ョ(纾氱,纾хΖ绌嶇绌嗙绌嬬绡欑皯绡夌绡涚绡╃绯曠硸绺婏拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界笐绺堢笡绺g笧绺濈笁绺愮焦缇茬堪缈辩慨鑰ㄨ喅鑶╄啫鑷昏垐鑹樿墮钑婅暀钑堣暔钑╄晝钑夎暛钑暈铻冭灍铻炶灑铻嶈 瑜げ瑜ヨか瑜¤Κ瑕﹁璜鸿璜辫瑎璜滆璜璎佽瑐璜疯璜宠璜艰鲍璞矒璩磋箘韪辫复韫傝腹韪佃蓟杓几杓宠鲸杈﹂伒閬撮伕閬查伡閬洪劥閱掗尃閷堕嫺閷抽尟閷㈤嫾閷寗閷氾拷".split("");for(j=0;j!=D[191].length;++j)if(D[191][j].charCodeAt(0)!==65533){e[D[191][j]]=48896+j;d[48896+j]=D[191][j]}D[192]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷閷愰對閷¢寱閷寵闁婚毀闅ㄩ毆闆曢湈闇戦湒闇嶉湏闇忛潧闈滈潶闉橀牥闋搁牷闋烽牠闋归牑椁愰え椁為椁¢椐Б椐遍楠奸楂楫戦磿榇i处榇ㄩ磼榇涢粯榛旈緧榫滃劒鍎熷劇鍎插嫷鍤庡殌鍤愬殔鍤囷拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉殢澹曞澹戝瀣板瀣ゅ灏峰报宥煎逗宥藉陡骞綄寰芥噳鎳傛噰鎳︽噵鎴叉埓鎿庢搳鎿樻摖鎿版摝鎿摫鎿㈡摥鏂傛杻鏇欐洊妾�妾旀獎妾㈡獪娅涙姗炬獥妾愭獱姝滄姣氭皥婵樻勘婵熸繝婵涙郡婵刊婢�婵俊婵╂繒婵堪鐕х嚐鐕嚘鐕ョ嚟鐕嚧鐕犵埖鐗嗙嵃鐛茬挬鐠扮挦鐠ㄧ檰鐧傜檶鐩灣鐬灠鐬拷".split("");for(j=0;j!=D[192].length;++j)if(D[192][j].charCodeAt(0)!==65533){e[D[192][j]]=49152+j;d[49152+j]=D[192][j]}D[193]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐬х灜鐭7纾虹4纾绂хΚ绌楃绨囩皪绡剧绨岀癄绯犵硿绯炵尝绯熺硻绯濈府绺剧箚绺风覆绻冪斧绺界副绻呯箒绺寸腹绻堢傅绺跨腐缃勭砍缈艰伇鑱茶伆鑱伋鑷嗚噧鑶鸿噦鑷�鑶胯喗鑷夎喚鑷ㄨ垑鑹辫柂锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷钖勮暰钖滆枒钖旇柉钖涜枃钖ㄨ枈铏ц焵锜戣灣锜掕焼铻灮铻鸿焾锜嬭せ瑜惰瑜歌そ瑕瑤璎楄瑱璎涜瑠璎犺瑵璎勮瑦璞佽翱璞宠澈璩借臣璩歌郴瓒ㄨ箟韫嬭箞韫婅絼杓捐絺杞呰伎閬块伣閭勯倎閭傞個閯归啠閱為啘閸嶉巶閷ㄩ嵉閸婇崶閸嬮寴閸鹃崿閸涢嵃閸氶崝闂婇棆闂岄棃闂嗛毐闅搁洊闇滈湠闉犻煋椤嗛⒍椁甸▉锟�".split("");for(j=0;j!=D[193].length;++j)if(D[193][j].charCodeAt(0)!==65533){e[D[193][j]]=49408+j;d[49408+j]=D[193][j]}D[194]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷椐块楫楫椿榇块簨榛忛粸榛滈粷榛涢季榻嬪彚鍤曞毊澹欏瀣稿綕鎳f埑鎿存摬鎿炬攩鎿烘摶鎿锋柗鏇滄湨妾虫娅冩妾告珎妾姝熸娈�夌�嬫烤鐎嗘亢鐎戠�忕嚮鐕肩嚲鐕哥嵎鐛电挧鐠跨敃鐧栫櫂锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐧掔灲鐬跨灮鐬肩绂绌㈢绔勭珔绨哀绨盀绨g啊绯х箶绻曠篂绻氱埂绻掔箼缃堢抗缈昏伔鑱惰噸鑷忚垔钘忚柀钘嶈棎钘夎柊钖鸿柟钖﹁煰锜煵锜犺瑕茶Т璎ㄨ璎璞愯磪韫欒梗韫﹁工韫熻箷杌�杞夎綅閭囬們閭堥啱閱噽閹旈帄閹栭帰閹抽幃閹幇閹橀帤閹楅棓闂栭棎闂曢洟闆滈洐闆涢洖闇ら灒闉︼拷".split("");for(j=0;j!=D[194].length;++j)if(D[194][j].charCodeAt(0)!==65533){e[D[194][j]]=49664+j;d[49664+j]=D[194][j]}D[195]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷闉煿椤嶉椤岄椤撻⒑椁鹃た椁介ぎ棣ラ◣楂侀瑑楝嗛瓘榄庨瓖榀婇瘔榀介瘓榀�榈戦禎榈犻粻榧曢棘鍎冲殽澹炲澹㈠榫愬滑鎳叉嚪鎳舵嚨鏀�鏀忔洜鏇濇娅濇珰娅撶�涚�熺�ㄧ�氱�濈�曠�樼垎鐖嶇墭鐘㈢嵏锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐛虹捊鐡婄摚鐤囩枂鐧熺櫋鐭囩绂辩┇绌╃熬绨跨案绨界胺绫�绻弓绻圭供绻緟绻崇径缇圭靖鑷樿棭钘濊棯钘曡棨钘ヨ椃锜昏爡锠嶈煿锜捐瑗熻瑗炶瓉璀滆瓨璀夎瓪璀庤瓘璀嗚瓩璐堣磰韫艰共韬囪苟韫购韫磋綌杞庤经閭婇倠閱遍啴閺¢彂閺熼弮閺堥彍閺濋彇閺㈤弽閺橀彜閺楅彣闂滈毚闆i湭闇ч潯闊滈熁椤烇拷".split("");for(j=0;j!=D[195].length;++j)if(D[195][j].charCodeAt(0)!==65533){e[D[195][j]]=49920+j;d[49920+j]=D[195][j]}D[196]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷椤橀棰奸楗夐楱欓瑣榀ㄩ榀栭瘺槎夐怠榈查氮榈簰楹楅簱楹村嫺鍤ㄥ毞鍤跺毚鍤煎¥瀛�瀛冨瀵跺穳鎳告嚭鏀樻敂鏀欐洣鏈ф鐎剧�扮�茬垚鐛荤搹鐧㈢櫏绀︾お绀か绔囩绫岀眱绫嶇朝绯拌井绻界辜锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绾傜綄鑰�鑷氳墻钘昏椆铇戣椇铇嗚構铇囪槉锠旇爼瑗よ瑙歌璀璀瓱璀磸璐嶈簤韬佽簠韬傞喆閲嬮悩閻冮徑闂¢湴椋勯楗戦Θ楱ò楱烽ǖ榘撻皪楣归旱榛ㄩ集榻熼剑榻″劮鍎稿泚鍥�鍥傚灞穽鎳兼嚲鏀濇敎鏂曟洨娅绘瑒娅烘鐏岀垱鐘х摉鐡旂櫓鐭撶睈绾忕簩缇艰槜铇槡锠h牏锠¤牊瑗ガ瑕借锟�".split("");for(j=0;j!=D[196].length;++j)if(D[196][j].charCodeAt(0)!==65533){e[D[196][j]]=50176+j;d[50176+j]=D[196][j]}D[197]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷璀疯璐撹簥韬嶈簨杞熻警閱洪惍閻抽惖閻洪惛閻查惈闂㈤湼闇归湶闊块¨椤ラ椹呴﹥椹�楱鹃珡榄旈瓚榘哎槎洞榉傞陡楹濋化榧欓綔榻﹂涧鍎煎劵鍥堝泭鍥夊宸斿窉褰庢嚳鏀ゆ瑠姝$亼鐏樼巰鐡ょ枈鐧櫖锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绂崇睜绫熻伨鑱借嚐瑗茶ク瑙艰畝璐栬礂韬戣簱杞¢厛閼勯憫閼掗溄闇鹃焹闊侀~楗曢椹嶉珤楝氶眽榘遍熬榘婚窊榉楅即榻姜榫斿泴宸栨垁鏀f敨鏀洭娆愮摎绔婄堡绫g饱绾撶簴绾旇嚔铇歌樋锠辫畩閭愰倧閼i憼閼ら潹椤椹氶椹楅珦楂旈珣楸旈睏楸栭伐楹熼淮鍥戝)鏀仦鐧辩櫜鐭楃綈缇堣牰锠硅、璁撹畳锟�".split("");for(j=0;j!=D[197].length;++j)if(D[197][j].charCodeAt(0)!==65533){e[D[197][j]]=50432+j;d[50432+j]=D[197][j]}D[198]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷璁栬壏璐涢噣閼潅闈堥潉闊嗛“椹熼榄橀睙榉归泛楣奸菇榧囬椒榻插怀娆栫仯绫碑锠昏韬¢噥閼查懓椤遍楂栭榛岀仱鐭氳畾閼烽焿椹㈤━绾滆疁韬噮閼介懢閼奸狈楸搁环璞旈懣楦氱埁椹楦涢笧绫诧拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷".split("");for(j=0;j!=D[198].length;++j)if(D[198][j].charCodeAt(0)!==65533){e[D[198][j]]=50688+j;d[50688+j]=D[198][j]}D[201]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷涔備箿鍑靛寶鍘備竾涓屼箛浜嶅洍铷屽碑褰充笍鍐囦笌涓簱浠備粔浠堝啒鍕煎崿鍘瑰湢澶冨が灏愬房鏃℃姣屾皵鐖夸副涓间花浠滀哗浠′粷浠氬垖鍖滃崒鍦㈠湥澶楀く瀹佸畡灏掑盎灞村背甯勫簚搴傚繅鎴夋墣姘曪拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥岸姹冩翱姘荤姰鐘扮帄绂歌倞闃炰紟浼樹棘浠典紨浠变紑浠蜂紙浼濅紓浼呬饥浼撲紕浠翠紥鍐卞垞鍒夊垚鍔﹀將鍖熷崓鍘婂悋鍥″洘鍦湭鍦村ぜ濡�濂煎濂诲ゾ濂峰タ瀛栧皶灏ュ奔灞哄被灞惧窡骞靛簞寮傚細褰村繒蹇斿繌鎵滄墳鎵ゆ墶鎵︽墷鎵欐墵鎵氭墺鏃棶鏈炬湽鏈告溁鏈烘溈鏈兼湷姘樻眴姹掓睖姹忔眾姹旀眿锟�".split("");for(j=0;j!=D[201].length;++j)if(D[201][j].charCodeAt(0)!==65533){e[D[201][j]]=51456+j;d[51456+j]=D[201][j]}D[202]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷姹岀伇鐗炵姶鐘电帋鐢櫩绌电綉鑹歌壖鑺�鑹借壙铏嶈ゾ閭欓倵閭橀倹閭旈槩闃ら槧闃d綎浼讳舰浣変綋浣や季浣т綊浣熶絹浣樹辑浼充伎浣″啅鍐瑰垳鍒炲垺鍔姰鍖夊崳鍗插帋鍘忓惏鍚峰惇鍛斿憛鍚欏悳鍚ュ悩锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍚藉憦鍛佸惃鍚ゅ憞鍥洤鍥ュ潄鍧呭潓鍧夊潒鍧掑濂�濡﹀濡犲濡庡Β濡愬濡уΑ瀹庡畳灏ㄥ蔼宀嶅矎宀堝矉宀夊矑宀婂矄宀撳矔宸犲笂甯庡簨搴夊簩搴堝簫寮呭紳褰稿蕉蹇掑繎蹇愬凯蹇ㄥ慨蹇冲俊蹇ゅ浚蹇哄刊蹇峰炕鎬�蹇存埡鎶冩妼鎶庢姀鎶旀妵鎵辨壔鎵烘壈鎶佹妶鎵锋壗鎵叉壌鏀锋棸鏃存棾鏃叉椀鏉呮潎锟�".split("");for(j=0;j!=D[202].length;++j)if(D[202][j].charCodeAt(0)!==65533){e[D[202][j]]=51712+j;d[51712+j]=D[202][j]}D[203]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鏉欐潟鏉屾潏鏉濇潔鏉氭潒姣愭皺姘氭备姹ф鲍娌勬矉娌忔北姹暴娌氭杯娌囨矔娌滄宝姹虫饱姹绘矌鐏寸伜鐗g娍鐘界媰鐙嗙媮鐘虹媴鐜曠帡鐜撶帞鐜掔敽鐢圭枖鐤曠殎绀借�磋倳鑲欒倫鑲掕倻鑺愯姀鑺呰妿鑺戣姄锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鑺婅妰鑺勮备杩夎究閭熼偂閭ラ倿閭ч偁闃伴槰闃槶涓充緲浣间緟浣戒線渚囦蕉浣翠緣渚勪椒浣屼緱浣練浣逛緛浣镐緪渚滀緮渚炰緬渚備緯浣疆鍐炲喖鍐惧埖鍒插埑鍓嗗埍鍔煎寠鍖嬪尲鍘掑帞鍜囧懣鍜佸拺鍜傚拡鍛懞鍛惧懃鍛懘鍛﹀拲鍛憽鍛犲挊鍛e懅鍛ゅ浄鍥瑰澂鍧插澀鍧澅鍧板澏鍨�鍧靛澔鍧冲澊鍧拷".split("");for(j=0;j!=D[203].length;++j)if(D[203][j].charCodeAt(0)!==65533){e[D[203][j]]=51968+j;d[51968+j]=D[203][j]}D[204]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍧ㄥ澖澶屽濡靛濮忓濡插濮佸Χ濡煎濮栧Ρ濡藉濮堝Υ濮囧瀛ュ畵瀹曞眲灞囧伯宀ゅ矤宀靛帛宀ㄥ铂宀熷玻宀并宀钵宀濆播宀跺舶宀﹀笚甯斿笝寮ㄥ饥寮e激褰斿緜褰惧浇蹇炲骏鎬�︽�欐�叉�嬶拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥�存�婃�楁�虫�氭�炴��㈡�嶆�愭��撴�戞�屾�夋�滄垟鎴芥姯鎶存嫅鎶炬姫鎶舵媻鎶姵鎶娀鎶╂姲鎶告斀鏂ㄦ柣鏄夋椉鏄勬槖鏄堟椈鏄冩構鏄嶆槄鏃芥槕鏄愭浂鏈婃瀰鏉瀻鏋掓澏鏉绘灅鏋嗘瀯鏉存瀺鏋屾澓鏋熸瀾鏋欐瀮鏉芥瀬鏉告澒鏋旀娈�姝炬癁姘濇矒娉倡娉硻娌舵硵娌厂娌锋硱娉傛埠娉冩硢娉巢锟�".split("");for(j=0;j!=D[204].length;++j)if(D[204][j].charCodeAt(0)!==65533){e[D[204][j]]=52224+j;d[52224+j]=D[204][j]}D[205]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷娉掓碀娌存矈娌濇瞼娉炴硛娲版硩娉囨舶娉规硰娉╂硲鐐旂倶鐐呯倱鐐嗙倓鐐戠倴鐐傜倸鐐冪壀鐙栫媼鐙樼媺鐙滅嫆鐙旂嫐鐙岀嫅鐜ょ帯鐜帵鐜㈢帬鐜帩鐡濈摠鐢跨晙鐢剧枌鐤樼毌鐩崇洷鐩扮浀鐭哥熂鐭圭熁鐭猴拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界煼绁傜た绉呯└绌荤绫电辰鑰佃倧鑲偅鑲歌偟鑲垹鑺犺媭鑺姎鑺樿姏鑺佃姧鑺娂鑺炶姾鑺磋姩鑺¤姪鑻傝姢鑻冭姸鑺㈣櫚铏櫗铏睎杩掕繈杩撹繊杩栬繒杩楅偛閭撮偗閭抽偘闃归樈闃奸樅闄冧繊淇呬繐渚蹭繅淇嬩縼淇斾繙淇欎净渚充繘淇囦繓渚轰縺渚逛楷鍓勫墘鍕�鍕傚尳鍗煎帡鍘栧帣鍘樺捄鍜″挱鍜ュ搹锟�".split("");for(j=0;j!=D[205].length;++j)if(D[205][j].charCodeAt(0)!==65533){e[D[205][j]]=52480+j;d[52480+j]=D[205][j]}D[206]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍝冭實鍜峰挳鍝栧挾鍝呭搯鍜犲懓鍜煎挗鍜惧懖鍝炲挵鍨靛灋鍨熷灓鍨屽灄鍨濆灈鍨斿灅鍨忓灆鍨ュ灇鍨曞4澶嶅濮″濮█濮卞濮哄Ы濮煎Ф濮ゅР濮峰濮╁С濮靛濮惧Т濮灞屽硱宄樺硨宄楀硧宄涳拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉碁宄氬硥宄囧硦宄栧硴宄斿硰宄堝硢宄庡碂宄稿饭甯″涪甯e笭甯ゅ喊搴ゅ孩搴涘海搴ュ紘寮綎寰嗘�锋�规仈鎭叉仦鎭呮亾鎭囨亯鎭涙亴鎭�鎭傛仧鎬ゆ亜鎭樻仸鎭墏鎵冩嫃鎸嶆寢鎷垫寧鎸冩嫬鎷规審鎸屾嫺鎷舵寑鎸撴寯鎷烘寱鎷绘嫲鏁佹晝鏂柨鏄舵槨鏄叉樀鏄滄槮鏄㈡槼鏄樅鏄濇槾鏄规槷鏈忔湊鏌佹煵鏌堟灪锟�".split("");for(j=0;j!=D[206].length;++j)if(D[206][j].charCodeAt(0)!==65533){e[D[206][j]]=52736+j;d[52736+j]=D[206][j]}D[207]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鏌滄灮鏌告煒鏌�鏋锋焻鏌煠鏌熸灥鏌嶆灣鏌锋煻鏌煟鏌傛灩鏌庢煣鏌版灢鏌兼焼鏌煂鏋煢鏌涙熀鏌夋煀鏌冩煪鏌嬫娈傛畡娈舵瘱姣樻癄姘犳啊娲ㄦ创娲礋娲兼纯娲掓磰娉氭闯娲勬礄娲烘礆娲戞磤娲濇祩锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷娲佹礃娲锋磧娲忔祤娲囨礌娲磮娲㈡磯娲愮偡鐐熺偩鐐辩偘鐐$偞鐐电偐鐗佺墘鐗婄壃鐗扮壋鐗媻鐙ょ嫧鐙嫙鐙嫤鐙g巺鐝岀弬鐝堢弲鐜圭幎鐜电幋鐝幙鐝囩幘鐝冪弳鐜哥弸鐡摦鐢晣鐣堢枾鐤櫣鐩勭湀鐪冪渼鐪呯湂鐩风浕鐩虹煣鐭ㄧ爢鐮戠爳鐮呯爯鐮忕爭鐮夌爟鐮撶绁岀绁呯绉曠绉忕绉庣獉锟�".split("");for(j=0;j!=D[207].length;++j)if(D[207][j].charCodeAt(0)!==65533){e[D[207][j]]=52992+j;d[52992+j]=D[207][j]}D[208]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绌剧珣绗�绗佺焙绫哥惫绫跨瞼绮佺磧绱堢磥缃樼緫缇嶇揪鑰囪�庤�忚�旇�疯儤鑳囪儬鑳戣儓鑳傝儛鑳呰儯鑳欒儨鑳婅儠鑳夎儚鑳楄儲鑳嶈嚳鑸¤姅鑻欒嬀鑻硅寚鑻ㄨ寑鑻曡尯鑻嫋鑻磋嫭鑻¤嫴鑻佃寣鑻昏嫸鑻拌嫪锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鑻よ嫚鑻鸿嫵鑻櫡铏磋櫦铏宠琛庤¨琛々瑙撹▌瑷囪挡杩h俊杩繝閮遍偨閭块儠閮呴偩閮囬儖閮堥嚁閲撻檾闄忛檻闄撻檴闄庡�炲�呭�囧�撳�㈠�板�涗康淇村�冲�峰�慷淇峰�楀�滃�犲�у�靛��卞�庡厷鍐斿啌鍑婂噭鍑呭噲鍑庡墶鍓氬墥鍓炲墴鍓曞墷鍕嶅寧鍘炲敠鍝㈠敆鍞掑摟鍝冲摛鍞氬摽鍞勫攬鍝攽鍞呭摫锟�".split("");for(j=0;j!=D[208].length;++j)if(D[208][j].charCodeAt(0)!==65533){e[D[208][j]]=53248+j;d[53248+j]=D[208][j]}D[209]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍞婂摶鍝峰摳鍝犲攷鍞冨攱鍦佸渹鍩屽牪鍩曞煉鍨哄焼鍨藉灱鍨稿灦鍨垮焽鍩愬灩鍩佸濂婂濞栧ō濞〞濞忓濞婂濞冲瀹у瀹皟灞栧睌宄晨宄潮宄峰磤宄瑰俯甯ㄥ酣搴邯搴汲寮板涧鎭濇仛鎭э拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥亖鎮㈡倛鎮�鎮掓倎鎮濇們鎮曟倹鎮楁倗鎮滄値鎴欐墕鎷叉寪鎹栨尙鎹勬崊鎸舵崈鎻ゆ尮鎹嬫崐鎸兼尒鎹佹尨鎹樻崝鎹欐尛鎹囨尦鎹氭崙鎸告崡鎹�鎹堟晩鏁嗘梿鏃冩梽鏃傛檴鏅熸檱鏅戞湌鏈撴牊鏍氭鏍叉牫鏍绘妗忔爾鏍辨牅鏍垫牜鏍牤妗庢鏍存牆鏍掓爺鏍︽牗鏍鏍烘牓鏍犳娆娆辨姝倐娈堟姣わ拷".split("");for(j=0;j!=D[209].length;++j)if(D[209][j].charCodeAt(0)!==65533){e[D[209][j]]=53504+j;d[53504+j]=D[209][j]}D[210]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷姣ㄦ姣㈡姘ユ岛娴f丹娴舵磵娴℃稈娴樻耽娴弹娑戞秿娣悼娑嗘禐娴ф禒娑楁蛋娴兼禑娑傛稑娲胆娑嬫稻娑�娑勬礀娑冩祷娴芥档娑愮儨鐑撶儜鐑濈儖缂圭儮鐑楃儝鐑炵儬鐑旂儘鐑呯儐鐑囩儦鐑庣儭鐗傜壐锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐗风壎鐚�鐙虹嫶鐙剧嫸鐙崇嫽鐚佺彄鐝欑彞鐝栫幖鐝х彛鐝╃彍鐝掔彌鐝旂彎鐝氱彈鐝樼彣鐡炵摕鐡寸摰鐢$暃鐣熺柊鐥佺柣鐥勭梹鐤跨柖鐤虹殜鐩夌湞鐪涚湊鐪撶湌鐪g湋鐪曠湙鐪氱湤鐪х牐鐮牏鐮电牤鐮ㄧ牣鐮牎鐮╃牫鐮牨绁旂绁忕绁撶绁戠Й绉绉Л绉绉炵绐嗙獕绐呯獘绐岀獖绐囩珮绗愶拷".split("");for(j=0;j!=D[210].length;++j)if(D[210][j].charCodeAt(0)!==65533){e[D[210][j]]=53760+j;d[53760+j]=D[210][j]}D[211]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绗勭瑩绗呯瑥绗堢瑠绗庣瑝绗掔矂绮戠矈绮岀矆绮嶇矃绱炵礉绱戠磶绱樼礀绱撶礋绱掔磸绱岀綔缃$綖缃犵綕缃涚緰缇掔績缈傜縺鑰栬�捐�硅兒鑳茶児鑳佃剚鑳昏剙鑸佽埊鑸ヨ尦鑼崉鑼欒崙鑼ヨ崠鑼胯崄鑼﹁寽鑼拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟借崅鑽庤寷鑼寛鑼艰崓鑼栬尋鑼犺尫鑼尒鑽囪崊鑽岃崜鑼炶尙鑽嬭導鑽堣檽铏掕殺铓ㄨ殩铓嶈殤铓炶殗铓楄殕铓嬭殮铓呰殽铓欒殹铓ц殨铓樿殠铓濊殣铓旇琛勮…琛佃《琛茶琛辫】琛琛捐〈琛艰♁璞囪睏璞昏菠璨h刀璧歌兜瓒疯抖杌戣粨杩捐康閫傝靠杩婚�勮考杩堕儢閮犻儥閮氶儯閮熼儱閮橀儧閮楅儨閮ら厫锟�".split("");for(j=0;j!=D[211].length;++j)if(D[211][j].charCodeAt(0)!==65533){e[D[211][j]]=54016+j;d[54016+j]=D[211][j]}D[212]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷閰庨厪閲曢嚔閲氶櫆闄熼毤椋i珶楝箍鍋板仾鍋″仦鍋犲亾鍋嬪仢鍋插亪鍋嶅亖鍋涘亰鍋㈠�曞亝鍋熷仼鍋仯鍋ゅ亞鍋�鍋伋鍋楀亼鍑愬壂鍓壃鍓嫋鍕撳尛鍘滃暤鍟跺敿鍟嶅晲鍞村敧鍟戝暍鍞跺數鍞板晵鍟咃拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉攲鍞插暐鍟庡敼鍟堝敪鍞诲晙鍟嬪湂鍦囧熁鍫斿煝鍩跺煖鍩村爛鍩熃鍫堝煾鍫嬪煶鍩忓爣鍩煟鍩插煡鍩煛鍫庡熂鍫愬煣鍫佸爩鍩卞煩鍩板爫鍫勫濠犲濠曞┃濠炲ǜ濞靛┉濠愬濠ュ┈濠撳─濠楀﹥濠濆濠勫濠堝獛濞惧濞瑰濠板┅濠囧濠栧﹤濠滃瀛瘉瀵�灞欏礊宕嬪礉宕氬礌宕屽川宕嶅处宕ュ磸锟�".split("");for(j=0;j!=D[212].length;++j)if(D[212][j].charCodeAt(0)!==65533){e[D[212][j]]=54272+j;d[54272+j]=D[212][j]}D[213]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷宕板磼宕e礋宕妇甯村罕搴村汗搴插撼寮跺几寰涘緰寰熸倞鎮愭倖鎮炬偘鎮烘儞鎯旀儚鎯ゆ儥鎯濇儓鎮辨儧鎮锋儕鎮挎儍鎯嶆儉鎸叉崶鎺婃巶鎹芥幗鎺炴幁鎺濇帡鎺帋鎹巼鎺愭嵁鎺嵉鎺滄嵀鎺嵓鎺ゆ尰鎺燂拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥嵏鎺呮巵鎺戞帊鎹版晸鏃嶆櫏鏅℃櫅鏅欐櫆鏅㈡湗妗规姊愭妗‘姊妤栨’姊f姊╂〉妗存⒉姊忔》姊掓〖妗〔姊妗辨【姊涙姊嬫姊夋ⅳ妗告』姊戞姊婃〗娆舵娆锋娈戞畯娈嶆畮娈屾蔼娣�娑洞娑虫勾娑珐娣㈡斗娣舵窋娓�娣堟窢娣熸窎娑炬伐娣滄窛娣涙反娣婃督娣钒娑烘窌娣傛窂娣夛拷".split("");for(j=0;j!=D[213].length;++j)if(D[213][j].charCodeAt(0)!==65533){e[D[213][j]]=54528+j;d[54528+j]=D[213][j]}D[214]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷娣愭凡娣撴方娣楁穽娣f痘鐑虹剭鐑风剹鐑寸剬鐑扮剟鐑崇剱鐑肩兛鐒嗙創鐒�鐑哥兌鐒嬬剛鐒庣壘鐗荤壖鐗跨対鐚楃寚鐚戠寴鐚婄寛鐙跨審鐚炵巿鐝剁徃鐝电悇鐞佺徑鐞囩悁鐝虹徏鐝跨悓鐞嬬彺鐞堢暏鐣g棊鐥掔棌锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐥嬬棇鐥戠棎鐨忕殙鐩撶湽鐪湱鐪辩湶鐪寸湷鐪界湧鐪荤湹纭堢纭夌纭婄鐮︾纭愮イ绁хォ绁ィ绁ァ绂荤Ш绉哥Ф绉风獜绐旂獝绗电瓏绗寸绗扮绗ょ绗樼绗濈绗绗绗哥瑲绗g矓绮樼矕绮g吹绱界锤绱剁春绲呯船绱╃祦绲囩淳绱跨祳绱荤川缃g緯缇滅緷缇涚繆缈嬬繊缈愮繎缈囩繌缈夎�燂拷".split("");for(j=0;j!=D[214].length;++j)if(D[214][j].charCodeAt(0)!==65533){e[D[214][j]]=54784+j;d[54784+j]=D[214][j]}D[215]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鑰炶�涜亣鑱冭亪鑴樿劌鑴欒剾鑴劅鑴劄鑴¤剷鑴ц劃鑴㈣垜鑸歌埑鑸鸿埓鑸茶壌鑾愯帲鑾ㄨ帊鑽鸿嵆鑾よ嵈鑾忚巵鑾曡帣鑽佃帞鑾╄嵔鑾冭帉鑾濊帥鑾帇鑽捐帴鑾巿鑾楄幇鑽胯帵鑾囪幃鑽惰帤铏欒櫀铓胯毞锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷铔傝泚铔呰毢铓拌泩铓硅毘铓歌泴铓磋毣铓艰泝铓借毦琛掕琚曡ⅷ琚㈣ⅹ琚氳琚¤琚樿ⅶ琚欒琚楄ⅳ琚琚撹瑕傝瑙欒瑷拌ě瑷璋硅盎璞滆睗璞借播璧借祷璧硅都璺傝豆瓒胯穪杌樿粸杌濊粶杌楄粻杌¢�ら�嬮�戦�滈�岄�¢儻閮儼閮撮儾閮抽償閮儸閮╅厲閰橀厷閰撻厱閲嚧閲遍嚦閲搁嚖閲归嚜锟�".split("");for(j=0;j!=D[215].length;++j)if(D[215][j].charCodeAt(0)!==65533){e[D[215][j]]=55040+j;d[55040+j]=D[215][j]}D[216]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷閲嚪閲ㄩ嚠闀洪枂闁堥櫦闄櫕闄遍櫙闅块潽闋勯%棣楀倹鍌曞倲鍌炲倠鍌e們鍌屽値鍌濆仺鍌滃倰鍌傚倗鍏熷嚁鍖掑寫鍘ゅ帶鍠戝枿鍠ュ柇鍟峰檯鍠㈠枔鍠堝枏鍠靛杹鍠e枓鍠ゅ暯鍠屽枽鍟垮枙鍠″枎鍦屽牘鍫凤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉牂鍫炲牕鍫e牗鍩靛鍫ュ牅鍫涘牫鍫垮牰鍫牴鍫稿牠鍫牷濂″濯斿獰濠哄濯炲└濯﹀┘濯ュ濯曞濞峰獎濯婂獥濯冨獘濯╁┗濠藉獙濯滃獜濯撳獫瀵瘝瀵嬪瘮瀵戝瘖瀵庡皩灏板捶宓冨但宓佸祴宕垮吹宓戝祹宓曞闯宕哄祾宕藉幢宓欏祩宕瑰祲宕稿醇宕插炊宓�宓呭箘骞佸綐寰﹀茎寰儔鎮规儗鎯㈡儙鎯勬剶锟�".split("");for(j=0;j!=D[216].length;++j)if(D[216][j].charCodeAt(0)!==65533){e[D[216][j]]=55296+j;d[55296+j]=D[216][j]}D[217]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鎯叉剨鎰栨剠鎯垫創鎯告兗鎯炬儊鎰冩剺鎰濇剱鎯挎剟鎰嬫墛鎺旀幈鎺版弾鎻ユ彣鎻弮鎾濇彸鎻婃彔鎻舵彆鎻叉彽鎽℃彑鎺炬彎鎻滄弰鎻樻彄鎻傛弴鎻屾弸鎻堟彴鎻楁彊鏀叉暓鏁暏鏁滄暔鏁ユ枌鏂濇枮鏂棎鏃掞拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥櫦鏅櫥鏆�鏅辨櫣鏅櫜鏈佹妫撴妫滄お妫*妫辨妫栨7妫¥妫舵妞愭3妫℃妫屾妤版⒋妞戞/妫嗘妫告妫芥<妫ㄦ妞婃妫庢妫濇妫︽4妫戞妫旀)妞曟ぅ妫囨娆绘娆兼當娈楁畽娈曟姣版姣虫鞍娣兼箚婀囨笩婀夋簣娓兼附婀呮耿娓缚婀佹節婀虫笢娓虫箣婀�婀戞富娓冩府婀烇拷".split("");for(j=0;j!=D[217].length;++j)if(D[217][j].charCodeAt(0)!==65533){e[D[217][j]]=55552+j;d[55552+j]=D[217][j]}D[218]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷婀ㄦ箿婀℃副娓ㄦ範婀辨公娓规涪娓版箵婀ユ抚婀告工婀锋箷婀规箳婀︽傅娓舵箽鐒犵劄鐒兓鐒劚鐒g劌鐒㈢劜鐒熺劏鐒虹剾鐗嬬墯鐘堢妷鐘嗙妳鐘嬬寬鐚嬬尠鐚㈢尡鐚崇導鐚茬尛鐚︾專鐚电寣鐞惉鐞扮惈鐞栵拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界悮鐞$惌鐞辩悿鐞g悵鐞╃悹鐞茬摶鐢暞鐣棫鐥氱棥鐥︾棟鐥熺棨鐥楃殨鐨掔洑鐫嗙潎鐫勭潔鐫呯潑鐫庣潒鐫岀煘鐭纭ょˉ纭滅…纭辩—纭“纭╃〃纭炵、绁寸コ绁茬グ绋傜▕绋冪▽绋勭獧绔︾绛婄绛勭瓐绛岀瓗绛�绛樼瓍绮㈢矠绮ㄧ病绲樼弹绲g祿绲栫掸绲祻绲禍绲祾绲旂旦绲戠禑绲庣季缂跨渐锟�".split("");for(j=0;j!=D[218].length;++j)if(D[218][j].charCodeAt(0)!==65533){e[D[218][j]]=55808+j;d[55808+j]=D[218][j]}D[219]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷缃︾劲缇犵尽缈楄亼鑱忚亹鑳捐償鑵冭厞鑵掕厪鑵囪劷鑵嶈労鑷﹁嚠鑷疯嚫鑷硅垊鑸艰埥鑸胯壍鑼昏弿鑿硅悾鑿�鑿ㄨ悞鑿ц彜鑿艰彾钀愯弳鑿堣彨鑿h幙钀佽彎鑿ヨ彉鑿胯彙鑿嬭弾鑿栬彽鑿夎悏钀忚彏钀戣悊鑿傝彸锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鑿曡徍鑿囪彂鑿悡鑿冭彫鑿弰鑿昏彈鑿㈣悰鑿涜従铔樿洟铔﹁洆铔h洑铔洕铔洔铔洨铔楄洦铔戣琛栬琚鸿琚硅⒏瑁�琚捐⒍琚艰⒎琚借⒉瑜佽瑕曡瑕楄瑙氳瑭庤瑷硅瑭�瑭楄瑭勮﹨瑭掕﹫瑭戣瑭岃璞熻瞾璨�璨鸿簿璨拌补璨佃秳瓒�瓒夎窐璺撹穽璺囪窎璺滆窂璺曡窓璺堣窏璺呰化杌疯缓锟�".split("");for(j=0;j!=D[219].length;++j)if(D[219][j].charCodeAt(0)!==65533){e[D[219][j]]=56064+j;d[56064+j]=D[219][j]}D[220]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷杌硅沪杌互杌佃户杌ㄨ欢杌槐杌淮杌╅��撮�剢閯剟閮块兗閯堥児閮婚剚閯�閯囬剠閯冮叀閰ら厽閰㈤厾閳侀垔閳ラ垉閳氶垿閳忛垖閳�閳掗嚳閲介垎閳勯埀閳傞垳閳ら垯閳楅垍閳栭暬闁嶉枌闁愰殗闄鹃殘锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷闅夐殐闅�闆傞泩闆冮洷闆伴潿闈伴澁闋囬ⅸ椋肠榛逛簝浜勪憾鍌藉偪鍍嗗偖鍍勫儕鍌村儓鍍傚偘鍍佸偤鍌卞儖鍍夊偠鍌稿嚄鍓哄壐鍓诲壖鍡冨棝鍡屽棎鍡嬪棅鍡濆梹鍡斿梽鍡╁柨鍡掑枍鍡忓棔鍡㈠棖鍡堝棽鍡嶅棛鍡傚湐濉撳〃濉ゅ濉嶅濉濉庡濉欏ˉ濉涘牻濉e”澹煎珖瀚勫珛濯哄濯卞濯板瀚堝瀚嗭拷".split("");for(j=0;j!=D[220].length;++j)if(D[220][j].charCodeAt(0)!==65533){e[D[220][j]]=56320+j;d[56320+j]=D[220][j]}D[221]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷濯峰珋瀚婂濯跺珝濯瑰獝瀵栧瘶瀵欏盁灏冲当宓e祳宓ュ挡宓禐宓ㄥ掸宓㈠钒骞忓箮骞婂箥骞嬪粎寤屽粏寤嬪粐褰�寰经鎯锋厜鎱婃劔鎱呮劧鎰叉劗鎱嗘劘鎱忔劑鎱�鎴犻叏鎴f垾鎴ゆ弲鎻辨彨鎼愭悞鎼夋悹鎼わ拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥惓鎽冩悷鎼曟悩鎼规惙鎼㈡悾鎼屾惁鎼版惃鎽佹惖鎼悐鎼氭憖鎼ユ惂鎼嬫彠鎼涙惍鎼℃悗鏁枓鏃撴殕鏆屾殨鏆愭殝鏆婃殭鏆旀櫢鏈犳ウ妤熸じ妤庢ア妤辨た妤呮オ妞规妤楁妤烘妤夋さ妤こ妞芥ゥ妫版ジ妞存ォ妤�妤妤舵妤佹ゴ妤屾せ妤嬫し妤滄妤戞げ妤掓く妤绘ぜ姝嗘瓍姝冩瓊姝堟瓉娈涳◢姣绘锟�".split("");for(j=0;j!=D[221].length;++j)if(D[221][j].charCodeAt(0)!==65533){e[D[221][j]]=56576+j;d[56576+j]=D[221][j]}D[222]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷姣规姣告簺婊栨粓婧忔粈婧熸簱婧旀籂婧辨汗婊嗘粧婧芥粊婧炴粔婧锋喊婊嶆害婊忔翰婧炬粌婊滄粯婧欐簰婧庢簫婧ゆ骸婧挎撼婊愭粖婧楁寒婧g厙鐓旂厭鐓g厾鐓佺厺鐓㈢叢鐓哥叒鐓$厒鐓樼厓鐓嬬叞鐓熺厫鐓擄拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界厔鐓嶇厷鐗忕妽鐘岀姂鐘愮妿鐚肩崅鐚荤尯鐛�鐛婄崏鐟勭憡鐟嬬憭鐟戠憲鐟�鐟忕憪鐟庣憘鐟嗙憤鐟旂摗鐡跨摼鐡界敐鐣圭暦姒冪棷鐦忕槂鐥风椌鐥肩椆鐥哥槓鐥荤椂鐥椀鐥界殭鐨电洕鐫曠潫鐫犵潚鐫栫潥鐫╃潷鐫旂潤鐫煚纰囩纰旂纰勭纰呯纰$纭圭纰�纰栫』绁肩绁界ス绋戠绋欑♁绋楃〞绋㈢〒锟�".split("");for(j=0;j!=D[222].length;++j)if(D[222][j].charCodeAt(0)!==65533){e[D[222][j]]=56832+j;d[56832+j]=D[222][j]}D[223]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绋涚◥绐g绐炵绛︾绛绛╃绛ョ绛辩绛$绛剁绮茬泊绮秷缍嗙秬缍嶇悼缍呯岛缍庣祷缍冪导缍岀稊缍勭到缍掔江缃涧缃ㄧ浆缇︾茎缇х繘缈滆�¤叅鑵犺叿鑵滆叐鑵涜參鑵叉湣鑵炶叾鑵ц叝锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鑵勮叀鑸濊墘鑹勮墍鑹傝墔钃辫惪钁栬懚钁硅拸钂嶈懃钁戣憖钂嗚懅钀拌憤钁借憵钁欒懘钁宠憹钄囪憺钀疯惡钀磋懞钁冭懜钀茶憛钀╄彊钁嬭惎钁傝惌钁熻懓钀硅憥钁岃憭钁搮钂庤惢钁囪惗钀宠懆钁捐憚钀憼钁旇懏钁愯湅铚勮浄铚岃浐铔栬浀铦嶈浉铚庤湁铚佽浂铚嶈渽瑁栬瑁嶈瑁炶瑁氳瑁愯瑕涜瑙ヨГ锟�".split("");for(j=0;j!=D[223].length;++j)if(D[223][j].charCodeAt(0)!==65533){e[D[223][j]]=57088+j;d[57088+j]=D[223][j]}D[224]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷瑙¤瑙㈣瑙﹁┒瑾嗚┛瑭¤瑭疯獋瑾勮┑瑾冭獊瑭磋┖璋艰眿璞婅饱璞よ宝璨嗚矂璨呰硨璧ㄨ旦瓒戣秾瓒庤稄瓒嶈稉瓒旇稅瓒掕钒璺犺番璺辫樊璺愯珐璺h发璺ц凡璺反杓嗚豢杓佽紑杓呰紘杓堣紓杓嬮亽閫匡拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介亜閬夐�介剱閯嶉剰閯戦剸閯旈剫閯庨叜閰増閴掗埌閳洪墻閳抽墺閴為妰閳墛閴嗛壄閴墢閴犻墽閴埗閴¢壈閳遍墧閴i墣閴查墡閴撻墝閴栭埐闁熼枩闁為枦闅掗殦闅戦殫闆庨浐闆介浉闆甸澇闈烽澑闈查爮闋嶉爭棰6椋归Ο棣查Π棣甸楠瓫槌抄槌ч簚榛藉儲鍍斿儣鍍ㄥ兂鍍涘儶鍍濆儰鍍撳儸鍍板儻鍍e儬锟�".split("");for(j=0;j!=D[224].length;++j)if(D[224][j].charCodeAt(0)!==65533){e[D[224][j]]=57344+j;d[57344+j]=D[224][j]}D[225]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍑樺妧鍔佸嫨鍕尠鍘槯鍢曞槍鍢掑椉鍢忓槣鍢佸槗鍢傚椇鍢濆槃鍡垮椆澧夊〖澧愬澧嗗濉垮〈澧嬪『澧囧澧庡《澧傚濉诲澧忓>濂珳瀚瀚曞瀚氬瀚瀚㈠珷瀚涘瀚炲珴瀚欏瀚熷瀵狅拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉灞e秱宥�宓藉秵宓哄秮宓峰秺宥夊秷宓惧导宥嶅倒宓垮箻骞欏箵寤樺粦寤楀粠寤滃粫寤欏粧寤斿絼褰冨蒋寰舵劕鎰ㄦ厑鎱炴叡鎱虫厭鎱撴叢鎱唨鎱存厰鎱烘厸鎱ユ劵鎱叀鎱栨埄鎴ф埆鎼憤鎽涙憹鎽存懚鎽叉懗鎽芥懙鎽︽挦鎽庢拏鎽炴憸鎽嬫憮鎽犳憪鎽挎惪鎽懌鎽欐懃鎽锋暢鏂犳殹鏆犳殶鏈呮渼鏈㈡Ρ姒舵锟�".split("");for(j=0;j!=D[225].length;++j)if(D[225][j].charCodeAt(0)!==65533){e[D[225][j]]=57600+j;d[57600+j]=D[225][j]}D[226]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷姒犳姒栨Π姒姒戞姒庢Η姒嶆Ι姒炬Ο姒挎姒芥Δ妲旀妲婃妲忔Τ姒撴Κ姒℃妲欐姒愭姒垫Ε妲嗘瓓姝嶆瓔娈炴疅娈犳瘍姣勬婊庢坏婊辨純婕ユ桓婕锋换婕級娼庢紮婕氭姬婕樻蓟婕掓画婕婏拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥级娼虫还婊辑娼�婕版技婕垫猾婕囨紟娼冩紖婊芥欢婕规紲婊兼己婕熸紞婕炴紙婕$唶鐔愮唹鐔�鐔呯唫鐔忕吇鐔嗙唩鐔楃墑鐗撶姉鐘曠姄鐛冪崓鐛戠崒鐟㈢懗鐟辩懙鐟茬懅鐟攢鐢傜攦鐣界枑鐦栫槇鐦岀槙鐦戠槉鐦旂毟鐬佺澕鐬呯瀭鐫瀫鐫澗鐬冪⒉纰⒋纰ⅷ纭剧纰炵ⅴ纰犵纰㈢ⅳ绂樼绂嬬绂曠绂擄拷".split("");for(j=0;j!=D[226].length;++j)if(D[226][j].charCodeAt(0)!==65533){e[D[226][j]]=57856+j;d[57856+j]=D[226][j]}D[227]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绂楃绂掔绋绋扮ǒ绋ㄧé绐ㄧ绐绠堢疁绠婄畱绠愮畺绠嶇畬绠涚畮绠呯畼鍔勭畽绠ょ畟绮荤部绮肩埠缍х斗绶傜叮缍穪绶�绶呯稘绶庣穭绶嗙穻绶岀动缍圭稏缍肩稛缍︾懂缍╃丁绶夌匠缈㈢浚缈ョ繛锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鑰よ仢鑱滆唹鑶嗚唭鑶囪啀鑶岃唻鑸曡挆钂よ挕钂熻捄钃庤搨钂挳钂捁钂磋搧钃嶈挭钂氳挶钃愯挐钂ц捇钂㈣挃钃囪搶钂涜挬钂挩钃栬挊钂惰搹钂犺摋钃旇搾钃涜挵钂戣櫋铚宠湥铚ㄨ潾铦�铚湠铚¤湙铚涜潈铚潄铚捐潌铚犺湶铚湱铚艰湌铚鸿湵铚佃潅铚﹁湩铚歌湦铚氳湴铚戣7瑁ц1瑁茶:瑁捐.瑁艰6瑁伙拷".split("");for(j=0;j!=D[227].length;++j)if(D[227][j].charCodeAt(0)!==65533){e[D[227][j]]=58112+j;d[58112+j]=D[227][j]}D[228]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷瑁拌,瑁瑕¤瑕炶З瑙Ж瑾獧瑾嬭獟瑾忚獤璋借报璞╄硶璩忚硹瓒栬笁韪傝房韪嶈方韪婅竷韪囪竼韪呰肪韪�韪勮紣杓戣紟杓嶉劊閯滈劆閯㈤劅閯濋剼閯ら劇閯涢吅閰查吂閰抽姤閵ら壎閵涢壓閵犻姅閵妽锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷閵﹂姎閵壒閵楅壙閵i嫯閵庨妭閵曢姠閴介妶閵¢妸閵嗛妼閵欓姧閴鹃妵閵╅姖閵嬮埈闅為殹闆块潣闈介澓闈鹃瀮闉�闉傞澔闉勯瀬闈块煄闊嶉爾棰椁傞椁囬棣滈棣归棣洪棣介楠遍楂ч楝块瓲榄¢瓱槌遍巢槌甸骇鍍垮剝鍎板兏鍎嗗剣鍍跺兙鍎嬪剬鍍藉剨鍔嬪妼鍕卞嫰鍣堝檪鍣屽樀鍣佸檴鍣夊檰鍣橈拷".split("");for(j=0;j!=D[228].length;++j)if(D[228][j].charCodeAt(0)!==65533){e[D[228][j]]=58368+j;d[58368+j]=D[228][j]}D[229]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍣氬檧鍢冲樈鍢樉鍢稿槳鍢哄湚澧澧卞澧e澧ⅴ澧″?瀚垮瀚藉瀚跺瑑瀚稿瑐瀚瑰瑏瀣囧瑓瀣忓抱宥欏稐宥熷稈宥㈠稉宥曞稜宥滃丁宥氬稙骞╁節骞犲箿绶冲粵寤炲弧褰夊静鎲嬫唭鎱规啽鎲版啟鎲夛拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥啗鎲撴啹鎲啛鎲掓啰鎲℃啀鎱︽喅鎴懏鎽版挅鎾犳拝鎾楁挏鎾忔拫鎾婃拰鎾f挓鎽ㄦ挶鎾樻暥鏁烘暪鏁绘柌鏂虫毜鏆版毄鏆叉毞鏆毌妯�妯嗘妲ユЦ妯曟П妲ゆ妲挎К妲㈡妯濇Ь妯фР妲〝妲锋Ё姗�妯堟Е妲绘◢妲兼Й妯夋▌妯樻ē妯忔Ф妯︽▏妲存姝戞娈f娈︽皝姘�姣挎皞娼佹鸡娼炬緡婵嗘緬锟�".split("");for(j=0;j!=D[229].length;++j)if(D[229][j].charCodeAt(0)!==65533){e[D[229][j]]=58624+j;d[58624+j]=D[229][j]}D[230]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷婢嶆緣婢屾舰娼忔緟娼氭緰娼舵浆婢傛綍娼叉綊娼愭綏婢旀緭娼濇紑娼℃将娼芥涧婢愭綋婢嬫僵娼挎緯娼f椒娼交鐔茬啹鐔涚啺鐔犵啔鐔╃喌鐔濈啣鐔炵啢鐔$啰鐔滅啩鐔崇姌鐘氱崢鐛掔崬鐛熺崰鐛濈崨鐛$崥鐛欙拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界崲鐠囩拤鐠婄拞鐠佺懡鐠呯拡鐟肩懝鐢堢攪鐣剧槬鐦炵槞鐦濈槣鐦g槡鐦ㄧ槢鐨滅殱鐨炵殯鐬嶇瀼鐬夌瀳纾嶇⒒纾忕纾戠纾旂纾冪纾夌绂$绂滅Β绂涙绋圭绐寸绠风瘚绠剧绡庣绠圭瘖绠电硡绯堢硨绯嬬贩绶涚藩绶х窏绶$竷绶虹乏绶剁繁绶扮樊绶熺蕉缇景缇凯缈开缈喀缈ㄨ仱鑱ц啠鑶燂拷".split("");for(j=0;j!=D[230].length;++j)if(D[230][j].charCodeAt(0)!==65533){e[D[230][j]]=58880+j;d[58880+j]=D[230][j]}D[231]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鑶炶啎鑶㈣啓鑶楄垨鑹忚墦鑹掕墣鑹庤墤钄よ敾钄忚攢钄╄攷钄夎攳钄熻攰钄ц敎钃昏敨钃鸿攬钄岃摯钄摬钄曡摲钃摮钃艰敀钃摡钄栬摼钄ㄨ敐钄攤钃借敒钃惰敱钄﹁摟钃ㄨ摪钃摴钄樿敔钄拌攱钄欒敮铏拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟借潠铦h潳铦疯煛铦宠潣铦旇潧铦掕潯铦氳潙铦炶澀铦潗铦庤潫铦濊澂铦澓铦潨铦ヨ潖铦昏澋铦㈣潷铦╄瑜呰瑜旇瑜楄瑜欒瑜栬瑜庤瑕㈣Δ瑕hЛ瑙拌К璜忚珕瑾歌珦璜戣珨璜曡璜楄璜�璜呰珮璜冭瑾借珯璋捐睄璨忚偿璩熻硻璩ㄨ硽璩濊厂瓒犺稖瓒¤稕韪犺福韪ヨ袱韪笗韪涜笘韪戣笝韪﹁抚锟�".split("");for(j=0;j!=D[231].length;++j)if(D[231][j].charCodeAt(0)!==65533){e[D[231][j]]=59136+j;d[59136+j]=D[231][j]}D[232]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷韪旇笒韪樿笓韪滆笚韪氳棘杓よ紭杓氳紶杓h紪杓楅伋閬伴伅閬ч伀閯劔閯╅劒閯查劍閯唴閱嗛唺閱侀唫閱勯唨閶愰媰閶勯媭閶欓姸閶忛嫳閶熼嫎閶╅嫍閶濋媽閶媯閶ㄩ媻閶堥嫀閶﹂媿閶曢媺閶犻嫗閶ч嫅閶擄拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介姷閶¢媶閵撮暭闁柅闁柊闅ら殺闆撻渽闇堥渹闈氶瀶闉庨瀳闊愰煆闋為牆闋﹂牘闋ㄩ牋闋涢牕棰查椋洪椁旈椁楅椐滈椐忛椐旈椐夐椐橀椐楅楠抽楂楂查榄嗛瓋榄ч榄遍榄堕榄伴榄ら槌奸澈槌介晨槌烽磭榇�槌归郴榇堥磪榇勯簝榛撻紡榧愬劀鍎撳剹鍎氬剳鍑炲尨鍙″櫚鍣犲櫘锟�".split("");for(j=0;j!=D[232].length;++j)if(D[232][j].charCodeAt(0)!==65533){e[D[232][j]]=59392+j;d[59392+j]=D[232][j]}D[233]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍣冲櫐鍣e櫗鍣插櫈鍣峰湝鍦涘澧藉澧垮⒑澹傚⒓澹嗗瑮瀣欏瑳瀣″瑪瀣撳瑦瀣栧瀣氬瑺瀣炲宥侗宥╁锭宥靛栋宥丢宥ㄥ恫宥动宥村恭骞ㄥ功骞哗寤у沪寤ㄥ互褰嬪炯鎲濇啫鎲栨噮鎲存噯鎳佹噷鎲猴拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟芥喛鎲告唽鎿楁摉鎿愭搹鎿夋捊鎾夋搩鎿涙摮鎿欐敵鏁挎暭鏂㈡泩鏆炬泙鏇婃泲鏇忔毥鏆绘毢鏇屾湥妯存│姗夋┃妯叉┄妯炬姗┒姗涙妯ㄦ妯绘姗佹┆姗ゆ姗忔姗┅姗犳姗炴〇姗曟姗庢﹩姝曟瓟姝栨娈姣堟瘒姘勬皟姘嗘经婵嬫荆婵囨炯婵庢繄娼炴縿婢芥緸婵婃鲸鐎勬茎婢竞婢惊婵忔究婢革拷".split("");for(j=0;j!=D[233].length;++j)if(D[233][j].charCodeAt(0)!==65533){e[D[233][j]]=59648+j;d[59648+j]=D[233][j]}D[234]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷婢㈡繅婢繊婢静婢扮噮鐕傜喛鐔哥嚃鐕�鐕佺噵鐕旂噴鐕囩噺鐔界嚇鐔肩噯鐕氱嚊鐘濈姙鐛╃崷鐛х崿鐛ョ崼鐛懣鐠氱挔鐠旂拻鐠曠挕鐢嬬杸鐦槶鐦辩樈鐦崇樇鐦电槻鐦扮毣鐩︾灇鐬濈灐鐬滅灈鐬㈢灒鐬曠灆锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐬楃纾╃%纾纾g纾$"纾纾犵Δ绌勭﹫绌囩绐哥绐辩绡炵绡х瘽绡曠绡氱绡圭瘮绡绡滅绡樼療绯掔硵绯楃硱绯戠笒绺$笚绺岀笩绺犵笓绺庣笢绺曠笟绺㈢笅绺忕笘绺嶇笖绺ョ袱缃冪交缃肩胶缇辩刊鑰�╄伂鑶辫啨鑶喒鑶佃啱鑶拌啲鑶磋啿鑶疯啩鑷茶墪鑹栬墬钑栬晠钑晬钑撹暋钑橈拷".split("");for(j=0;j!=D[234].length;++j)if(D[234][j].charCodeAt(0)!==65533){e[D[234][j]]=59904+j;d[59904+j]=D[234][j]}D[235]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷钑�钑嗚暏钑佽暍钑勮晳钑囪暎钄捐暃钑辫晭钑暤钑曡暓钑犺枌钑﹁暆钑旇暐钑櫍铏ヨ櫎铻涜瀼铻楄灀铻掕瀳铻佽灃铻樿澒铻囪灒铻呰瀽铻戣灊铻勮灁铻滆灇铻夎瑜﹁ぐ瑜ぎ瑜цけ瑜㈣ぉ瑜hく瑜瑙辫珷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷璜㈣璜磋璜濊瑪璜よ珶璜拌珗璜炶璜ㄨ璜璨戣矑璨愯车璩潮璩拌吵璧诞瓒ヨ锭韪宠妇韪歌箑韫呰付韪艰附韫佽赴韪胯航杓惰籍杓佃疾杓硅挤杓撮伓閬归伝閭嗛兒閯抽劦閯堕啌閱愰啈閱嶉啅閷ч尀閷堥専閷嗛審閸洪尭閷奸寷閷i寬閷侀崋閷寧閷嶉媼閷濋嫼閷ラ寭閶归嫹閷撮寕閷ら嬁閷╅尮閷甸尓閷旈寣锟�".split("");for(j=0;j!=D[235].length;++j)if(D[235][j].charCodeAt(0)!==65533){e[D[235][j]]=60160+j;d[60160+j]=D[235][j]}D[236]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷閷嬮嬀閷夐寑閶婚寲闁奸棈闁鹃柟闁洪柖闁块柕闁介毄闆旈湅闇掗湊闉欓灄闉旈煱闊搁牭闋牪椁ら椁чぉ棣為М椐Д椐らО椐iИ椐╅Ё楠归楠撮楂堕楂归楝抽畝楫呴畤榄奸榄婚畟楫撻畳楫愰楫曪拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介楫堥触榇楅礌榇為磾榇╅礉榇橀储榇愰礄榇熼簣楹嗛簢楹涵榛曢粬榛洪紥榧藉劍鍎ュ劉鍎ゅ劆鍎╁嫶鍤撳殞鍤嶅殕鍤勫殐鍣惧殏鍣垮殎澹栧澹忓瀣瀣插瀣瀣﹀瀣瀵卞宥峰宫骞揪寰绘噧鎲垫喖鎳ф嚑鎳ユ嚖鎳ㄦ嚍鎿摡鎿f摣鎿ゆ摠鏂佹杸鏂舵棜鏇掓獚妾栨獊妾ユ獕妾熸獩妾℃獮妾囨獡妾庯拷".split("");for(j=0;j!=D[236].length;++j)if(D[236][j].charCodeAt(0)!==65533){e[D[236][j]]=60416+j;d[60416+j]=D[236][j]}D[237]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷妾曟獌妾ㄦ妾戞┛妾︽獨妾呮獙妾掓瓫娈皦婵屾京婵存繑婵f繙婵咖婵︽繛婵叉繚婵㈡卡鐕$嚤鐕ㄧ嚥鐕ょ嚢鐕㈢嵆鐛嵂鐠楃挷鐠拹鐠挱鐠辩挜鐠攼鐢戠敀鐢忕杽鐧冪檲鐧夌檱鐨ょ洨鐬电灚鐬茬灧鐬讹拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界灤鐬辩灗鐭扮3纾界纾荤<纾茬纾圭>绀勭Λ绂ㄧ绌涚〇绌樼绌氱绔�绔佺皡绨忕绨�绡跨绨庣绨嬬绨傜皦绨冪皝绡哥绨嗙绡辩皭绨婄敞绺讣绻傜赋椤堢父绺箟绻�绻囩俯绻岀赴绺荤付绻勭负缃呯娇缃剧浇缈寸坎鑰喕鑷勮噷鑷婅噮鑷囪喖鑷╄墰鑹氳墱钖冭杸钖忚枾钖曡枲钖嬭枺钑昏枻钖氳枮锟�".split("");for(j=0;j!=D[237].length;++j)if(D[237][j].charCodeAt(0)!==65533){e[D[237][j]]=60672+j;d[60672+j]=D[237][j]}D[238]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷钑疯暭钖夎枴钑鸿暩钑楄枎钖栬枂钖嶈枡钖濊杹钖㈣杺钖堣枀钑硅暥钖樿枑钖熻櫒铻捐灙铻焻铻拌灛铻硅灥铻艰灝锜夎焹锜傝煂铻疯灟锜勮煀铻磋灦铻胯灨铻借煘铻茶さ瑜宠ぜ瑜捐瑗掕し瑗傝Ν瑕Ξ瑙茶С璎烇拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟借瑯璎栬瑧璎呰瑡璎㈣瑥璎掕瑫璎囪瑣璎堣瑔璎滆瑩璎氳睆璞拌辈璞辫悲璨曡矓璩硅弹韫庤箥韫撹箰韫岃箛杞冭絸閭呴伨閯搁啔閱㈤啗閱欓啛閱¢啙閱犻帯閹冮幆閸ら崠閸囬嵓閸橀崪閸堕崏閸愰崙閸犻嵀閹忛崒閸嵐閸楅崟閸掗崗閸遍嵎閸婚崱閸為崳閸ч巰閸庨崣闂囬梹闂夐梼闂呴柗闅毎闅湢闇熼湗闇濋湙闉氶灐闉滐拷".split("");for(j=0;j!=D[238].length;++j)if(D[238][j].charCodeAt(0)!==65533){e[D[238][j]]=60928+j;d[60928+j]=D[238][j]}D[239]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷闉為灊闊曢煍闊遍椤勯椤夐椤冮ぅ椁が椁こ椁查く椁け椁伴棣iΑ楱傞Ш椐撮Х椐归Ц椐堕Щ椐介Ь椐奸▋楠鹃楂介瑏楂奸瓐楫氶楫為疀楫﹂楫ラ楫嗛楫犻榇抽祦榈ч炊榇疮榇遍锤榇帮拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介祬榈傞祪榇鹃捶榈�榇界康榇簥楹夐簫楹伴粓榛氶换榛块激榧i饥榻旈緺鍎卞劖鍎殬鍤滃殫鍤氬殱鍤欏グ瀣煎暴灞穩骞巩鎳樻嚐鎳嚠鎳辨嚜鎳版嚝鎳栨嚛鎿挎攧鎿芥摳鏀佹攦鎿兼枖鏃涙洑鏇涙洏娅呮妾芥娅嗘妾舵娅囨妾瓰姣夋皨鐎囩�岀�嶇�佺�呯�旂�庢靠鐎�婵荤�︽考婵风�婄垇鐕跨嚬鐖冪嚱鐛讹拷".split("");for(j=0;j!=D[239].length;++j)if(D[239][j].charCodeAt(0)!==65533){e[D[239][j]]=61184+j;d[61184+j]=D[239][j]}D[240]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鐠哥搥鐠电搧鐠剧挾鐠荤搨鐢旂敁鐧滅櫎鐧欑檺鐧撶櫁鐧氱殾鐨界洭鐭傜灪纾跨绀撶绀夌绀掔绂Μ绌熺皽绨╃皺绨犵盁绨皾绨︾皑绨㈢哎绨扮箿绻愮箹绻g箻绻㈢篃绻戠範绻楃箵缇电境缈风扛鑱佃噾鑷掞拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟借噽鑹熻墳钖磋梿钘�钘冭梻钖宠柕钖借棁钘勮柨钘嬭棊钘堣梾钖辫柖钘掕槫钖歌柗钖捐櫓锜ц煢锜㈣煕锜煪锜ヨ煙锜宠煠锜旇煖锜撹煭锜樿煟铻よ煑锜欒爜锜磋煥锜濊瑗嬭瑗岃瑗愯瑗夎璎ц璎宠璎佃瓏璎璎捐璎ヨ璎﹁璎璎昏璎鸿眰璞佃矙璨樿矖璩捐磩璐傝磤韫滆耿韫犺箺韫栬篂韫ヨ恭锟�".split("");for(j=0;j!=D[240].length;++j)if(D[240][j].charCodeAt(0)!==65533){e[D[240][j]]=61440+j;d[61440+j]=D[240][j]}D[241]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷韫涜箽韫¤節韫╄箶杞嗚絿杞堣綃閯ㄩ労閯婚劸閱ㄩ啣閱ч啹閱幍閹岄帓閹烽帥閹濋帀閹ч帋閹帪閹﹂帟閹堥帣閹熼帊閹遍帒閹查帳閹ㄩ幋閹i帴闂掗棑闂戦毘闆楅洑宸傞洘闆橀洕闇i湤闇ラ灛闉灗闉灓闉拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介灑闉ラ煑闊欓煐闊橀熀椤愰椤掗⒏楗侀ぜ椁洪◤楱嬮▔楱嶉▌楱戦▕楱呴▏楱嗛珋楂滈瑘楝勯瑓楝╅榄婇瓕榄嬮瘒榀嗛瘍楫块瘉楫甸榀撻榀勯楫介禍榈撻祻榈婇禌榈嬮禉榈栭祵榈楅祾榈旈禑榈橀禋楹庨簩榛熼紒榧�榧栭讥榧吉榧╅绩榻岄綍鍎村劦鍔栧嫹鍘村毇鍤殾鍤у毆鍤澹濆澶掑瀣惧宸冨拱锟�".split("");for(j=0;j!=D[241].length;++j)if(D[241][j].charCodeAt(0)!==65533){e[D[241][j]]=61696+j;d[61696+j]=D[241][j]}D[242]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷寰挎嚮鏀囨攼鏀嶆攭鏀屾攷鏂勬棡鏃濇洖娅ф珷娅屾珣娅欐珛娅熸珳娅愭娅忔珝娅炴瓲娈版皩鐎欑�х�犵�栫��$�㈢�g�╃�楃�ょ�滅�垖鐖婄垏鐖傜垍鐘ョ姦鐘ょ姡鐘$搵鐡呯挿鐡冪敄鐧犵焿鐭婄焺鐭辩绀涳拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界ぁ绀滅绀炵Π绌х┄绨崇凹绨圭艾绨荤超绯苟绻电垢绻扮狗绻购绻茬勾绻ㄧ綃缃婄緝缇嗙痉缈界烤鑱歌嚄鑷曡墹鑹¤墸钘棻钘棛钘¤棬钘氳棗钘棽钘歌棙钘熻棧钘滆棏钘拌棪钘棡钘㈣爛锜鸿爟锜惰煼锠夎爩锠嬭爢锜艰爤锜胯爦锠傝ア瑗氳瑗楄ァ瑗滆瑗濊瑕堣Ψ瑕惰Ф璀愯瓐璀婅瓈璀撹瓥璀旇瓔璀曪拷".split("");
+for(j=0;j!=D[242].length;++j)if(D[242][j].charCodeAt(0)!==65533){e[D[242][j]]=61952+j;d[61952+j]=D[242][j]}D[243]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷璀戣瓊璀掕瓧璞冭狈璞惰矚璐嗚磭璐夎冬瓒董瓒弓韫歌钩韫汞韫昏粋杞掕綉杞忚綈杞撹敬閰�閯块啺閱彏閺囬弿閺傞彋閺愰徆閺弻閺欓帺閺﹂強閺旈彯閺i彆閺勯弾閺�閺掗彠闀介棜闂涢洝闇╅湯闇湪闇︼拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介灣闉烽灦闊濋煘闊熼椤欓椤楅⒖棰介⒒棰鹃楗囬棣﹂Η楱氶〞楱ラ楱ら楱㈤楱чǎ楱為楱旈珎楝嬮瑠楝庨瑢楝烽榀癄榀為榀﹂榀伴瘮榀楅榀滈瘷榀ラ瘯榀¢瘹榈烽秮槎婇秳槎堥当槎�榈搁秵槎嬮秾榈介但榈撮档榈伴旦槎呴党榈婚秱榈倒榈块秶榈ㄩ簲楹戦粈榛奸辑榻�榻侀綅榻栭綏榻樺尫鍤诧拷".split("");for(j=0;j!=D[243].length;++j)if(D[243][j].charCodeAt(0)!==65533){e[D[243][j]]=62208+j;d[62208+j]=D[243][j]}D[244]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鍤靛毘澹e瓍宸嗗穱寤化蹇�蹇佹嚬鏀楁敄鏀曟敁鏃熸洦鏇f洡娅虫娅娅规娅鐎肩�电��风�寸�辩亗鐎哥�跨�虹�圭亐鐎荤�崇亖鐖撶垟鐘ㄧ嵔鐛肩捄鐨毆鐨剧洯鐭岀煄鐭忕煃鐭茬ぅ绀gぇ绀ㄧい绀╋拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界Σ绌┈绌绫夌眻绫婄眹绫呯钞绻荤咕绾佺簚缇虹靠鑱硅嚊鑷欒垕鑹ㄨ墿铇㈣椏铇佽椌铇涜榾钘惰槃铇夎槄铇岃椊锠欒爯锠戣牀锠撹爾瑗hウ瑕硅Х璀犺璀濊璀h璀ц瓒簡韬堣簞杞欒綎杞楄綍杞樿綒閭嶉厓閰侀喎閱甸啿閱抽悑閻撻徎閻犻悘閻旈従閻曢悙閻ㄩ悪閻嶉彽閻�閺烽悋閻庨悥閻掗徍閻夐徃閻婇徔锟�".split("");for(j=0;j!=D[244].length;++j)if(D[244][j].charCodeAt(0)!==65533){e[D[244][j]]=62464+j;d[62464+j]=D[244][j]}D[245]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷閺奸悓閺堕悜閻嗛棡闂犻棢闇湳闉归灮闊介熅椤犻、椤i椋侀楗愰楗欓楗嬮楱查ù楱遍ì楱ǘ楱╅ó楱搁ō楂囬珚楂嗛瑦楝掗瑧榘嬮皥榀烽皡榘掗楸�榘囬皫榘嗛皸榘旈皦槎熼稒槎ら稘槎掗稑槎愰稕锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷槎犻稊槎滈丢槎楅丁槎氶盯槎ㄩ稙槎i犊槎╅稏槎﹂锭楹欓簺楹氶互榛ら户榛﹂及榧經榻犻綖榻濋綑榫戝労鍎瑰姌鍔楀泝鍤藉毦瀛堝瓏宸嬪窂寤辨嚱鏀涙瑐娅兼瑑娅告瑎鐏冪亜鐏婄亪鐏夌亝鐏嗙垵鐖氱垯鐛剧敆鐧煇绀け绀睌绫撶巢绾婄簢绾堢簨绾嗙簫缃嶇净鑰拌嚌铇樿槳铇﹁槦铇h槣铇欒槯铇槨铇犺槱铇炶槬锟�".split("");for(j=0;j!=D[245].length;++j)if(D[245][j].charCodeAt(0)!==65533){e[D[245][j]]=62720+j;d[62720+j]=D[245][j]}D[246]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锠╄牆锠涜牋锠よ牅锠瑗ォ瑗カ瑙鸿璀歌瓍璀鸿璐愯磾瓒簬韬岃綖杞涜綕閰嗛厔閰呴喒閻块惢閻堕惄閻介惣閻伴惞閻惙閻憖閻遍棩闂ら棧闇甸満闉块煛椤ら椋嗛楗橀楱归ń椹嗛﹦椹傞﹣楱猴拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介楂嶉瑫楝楅瑯楝栭榄掗矮榘濋皽榘埃榘ㄩ癌榘ら啊槎烽抖槎奸穪榉囬穵榉忛毒榉呴穬槎婚兜榉庨豆槎洪冬榉堥侗槎穼槎抽穽槎查购楹滈猾榛画榧涢紭榧氶急榻庨渐榻ら緬浜瑰泦鍥呭泲濂卞瓔瀛屽窌宸戝徊鏀℃敔鏀︽敘娆嬫瑘娆夋皪鐏曠仏鐏楃亽鐖炵垷鐘╃嵖鐡樼摃鐡欑摋鐧毉绀电Υ绌扮┍绫楃睖绫欑睕绫氾拷".split("");for(j=0;j!=D[246].length;++j)if(D[246][j].charCodeAt(0)!==65533){e[D[246][j]]=62976+j;d[62976+j]=D[246][j]}D[247]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绯寸潮绾戠綇缇囪嚍鑹槾铇佃槼铇槻铇惰牞锠ㄨ牔锠牓瑗辫瑕捐Щ璀捐畡璁傝畣璁呰璐曡簳韬旇簹韬掕簮韬栬簵杞犺舰閰囬憣閼愰憡閼嬮憦閼囬憛閼堥憠閼嗛溈闊i—椤╅楗旈椹庨椹旈椹忛﹫椹婏拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介椹掗楂愰瑱楝榄栭瓡楸嗛眻榘块眲榘归俺楸侀凹榘烽按榘查敖榘堕窙榉掗窞榉氶穻榉愰窚榉戦窡榉╅窓榉橀窎榉甸窌榉濋憾榛伴嫉榧抽疾榻傞将榫曢劲鍎藉姍澹ㄥ'濂插瓖宸樿牤褰忔垇鎴冩垊鏀╂敟鏂栨洬娆戞瑨娆忔瘖鐏涚仛鐖㈢巶鐜佺巸鐧扮煍绫х宝绾曡壃铇鸿檧铇硅樇铇辫樆铇捐牥锠茶牣锠宠ザ瑗磋コ瑙撅拷".split("");for(j=0;j!=D[247].length;++j)if(D[247][j].charCodeAt(0)!==65533){e[D[247][j]]=63232+j;d[63232+j]=D[247][j]}D[248]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷璁岃畮璁嬭畧璞呰礄韬樿饯杞i喖閼㈤憰閼濋憲閼為焺闊呴爛椹栭楝為瑹楝犻睊楸橀睈楸婇睄楸嬮睍楸欓睂楸庨坊榉烽矾榉i帆榉搁筏榉堕贰榉乏榉查钒榉㈤番榉撮烦榉ㄩ翻榛傞粣榛查怀榧嗛紲榧搁挤榧堕絻榻忥拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介奖榻伴疆榻洆鍥嶅瓗灞敪鏇洰娆撶仧鐏$仢鐏犵垼鐡涚摜鐭曠じ绂风Χ绫簵缇夎壄铏冭牳锠疯牭琛嬭當璁曡簽韬熻籂韬濋喚閱介噦閼懆閼╅洢闈嗛潈闈囬焽闊ラ楂曢瓩楸i抱楸﹂雹楸為睜楦傞肪楦囬竷楦嗛竻楦�楦侀笁榉块方楦勯籂榧為絾榻撮降榻跺洈鏀柛娆樻瑱娆楁瑲鐏㈢垿鐘煒鐭欑す绫╃鲍绯剁簹锟�".split("");for(j=0;j!=D[248].length;++j)if(D[248][j].charCodeAt(0)!==65533){e[D[248][j]]=63488+j;d[63488+j]=D[248][j]}D[249]="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷绾樼簺绾欒嚑鑷¤檰铏囪檲瑗硅ズ瑗艰セ瑙胯畼璁欒亥韬よ海閼懎閼懕閼抽潐椤查楸ㄩ碑楸笅楦嶉笎楦忛笒楦戦骸榛甸級榻囬礁榻婚胶榻瑰湠鐏︾悲锠艰恫韬﹂噧閼撮懜閼堕懙椹犻贝楸抽北楸甸笖楦撻欢榧婏拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介兢鐏ㄧ仴绯疯櫔锠捐牻锠胯疄璨滆憨杌夐潒椤抽〈椋岄ァ棣─椹﹂┃楝ら笗楦楅綀鎴囨瑸鐖ц檶韬ㄩ拏閽�閽侀┅椹ㄩ楦欑埄铏嬭疅閽冮惫楹风櫟椹焙楦濈仼鐏氦榻鹃綁榫樼閵硅澧绘亽绮у鈺斺暒鈺椻暊鈺暎鈺氣暕鈺濃晵鈺も晻鈺炩暘鈺♀晿鈺р暃鈺撯暐鈺栤暉鈺暍鈺欌暔鈺溾晳鈺愨暛鈺暟鈺枔锟�".split("");for(j=0;j!=D[249].length;++j)if(D[249][j].charCodeAt(0)!==65533){e[D[249][j]]=63744+j;d[63744+j]=D[249][j]}return{enc:e,dec:d}}();cptable[1250]=function(){var d="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~鈧拷鈥氾拷鈥炩�︹�犫�★拷鈥芭犫�古毰づ脚癸拷鈥樷�欌�溾�濃�⑩�撯�旓拷鈩⑴♀�号浥ヅ九郝犓囁樑伮つ劼β┡灺宦奥彼浥偮绰德堵仿改吪熉荒剿澞九寂斆伱偰偯勀鼓喢嚹屆壞樏嬆毭嵜幠幠惻兣嚸撁斉惷柮椗樑毰懊溍澟⒚熍暶∶⒛兠つ耗嚸嵜┠櫭浢從懪勁埫趁磁懨睹放櫯号泵济脚K�",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d[i]]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[1251]=function(){var d="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~袀袃鈥氀撯�炩�︹�犫�♀偓鈥靶夆�剐娦屝嬓徰掆�樷�欌�溾�濃�⑩�撯�旓拷鈩⒀欌�貉氀溠浹熉犘幯炐埪ひ惵β伮┬劼嚶奥毙喲栆懧德堵费戔剸褦禄褬袇褧褩袗袘袙袚袛袝袞袟袠袡袣袥袦袧袨袩袪小孝校肖啸笑效楔些歇蝎鞋协挟携邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌褉褋褌褍褎褏褑褔褕褖褗褘褜褝褞褟",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d[i]]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[1252]=function(){var d="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~鈧拷鈥毱掆�炩�︹�犫�∷嗏�芭犫�古掞拷沤锟斤拷鈥樷�欌�溾�濃�⑩�撯�斔溾劉拧鈥号擄拷啪鸥聽隆垄拢陇楼娄搂篓漏陋芦卢颅庐炉掳卤虏鲁麓碌露路赂鹿潞禄录陆戮驴脌脕脗脙脛脜脝脟脠脡脢脣脤脥脦脧脨脩脪脫脭脮脰脳脴脵脷脹脺脻脼脽脿谩芒茫盲氓忙莽猫茅锚毛矛铆卯茂冒帽貌贸么玫枚梅酶霉煤没眉媒镁每",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d[i]]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[1253]=function(){var d="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~鈧拷鈥毱掆�炩�︹�犫�★拷鈥帮拷鈥癸拷锟斤拷锟斤拷鈥樷�欌�溾�濃�⑩�撯�旓拷鈩拷鈥猴拷锟斤拷锟铰犖呂喡Bぢヂβ╋拷芦卢颅庐鈥暵奥甭猜澄劼德堵肺埼壩娐晃屄轿幬徫愇懳捨撐斘曃栁椢樜櫸毼浳溛澪炍熚犖★拷危韦违桅围唯惟为潍维苇萎委伟伪尾纬未蔚味畏胃喂魏位渭谓尉慰蟺蟻蟼蟽蟿蠀蠁蠂蠄蠅蠆蠇蠈蠉蠋锟�",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d[i]]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[1254]=function(){var d="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~鈧拷鈥毱掆�炩�︹�犫�∷嗏�芭犫�古掞拷锟斤拷锟解�樷�欌�溾�濃�⑩�撯�斔溾劉拧鈥号擄拷锟脚嘎犅÷⒙Bぢヂβ┞奥甭猜陈绰德堵仿嘎孤郝宦悸铰韭棵�脕脗脙脛脜脝脟脠脡脢脣脤脥脦脧臑脩脪脫脭脮脰脳脴脵脷脹脺陌艦脽脿谩芒茫盲氓忙莽猫茅锚毛矛铆卯茂臒帽貌贸么玫枚梅酶霉煤没眉谋艧每",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d[i]]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[1255]=function(){var d="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~鈧拷鈥毱掆�炩�︹�犫�∷嗏�帮拷鈥癸拷锟斤拷锟斤拷鈥樷�欌�溾�濃�⑩�撯�斔溾劉锟解�猴拷锟斤拷锟铰犅÷⒙b偑楼娄搂篓漏脳芦卢颅庐炉掳卤虏鲁麓碌露路赂鹿梅禄录陆戮驴职直植殖执值侄址指止锟街恢贾街局孔�讈讉變装妆撞壮状锟斤拷锟斤拷锟斤拷锟阶愖懽捵撟斪曌栕椬樧欁氉涀溩澴炞熥犠∽⒆Wぷプψёㄗ┳拷锟解�庘�忥拷",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d[i]]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[1256]=function(){var d="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~鈧锯�毱掆�炩�︹�犫�∷嗏�百光�古捼嗂樬堏�樷�欌�溾�濃�⑩�撯�斱┾劉趹鈥号撯�屸�嵹郝犡屄⒙Bぢヂβ┶韭奥甭猜陈绰德堵仿嘎关浡宦悸铰矩熪佖∝⒇Xへヘωжㄘ┴柏必藏池簇地睹椮坟肛关嘿�賮賯賰脿賱芒賲賳賴賵莽猫茅锚毛賶賷卯茂賸賹賺賻么購賽梅賾霉賿没眉鈥庘�徾�",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d[i]]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[1257]=function(){var d="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~鈧拷鈥氾拷鈥炩�︹�犫�★拷鈥帮拷鈥癸拷篓藝赂锟解�樷�欌�溾�濃�⑩�撯�旓拷鈩拷鈥猴拷炉藳锟铰狅拷垄拢陇锟铰β樎┡柭喡奥甭猜陈绰德堵访嘎古椔宦悸铰久δ勀�膯脛脜臉膾膶脡殴臇蘑亩莫幕艩艃艆脫艑脮脰脳挪艁艢弄脺呕沤脽膮寞膩膰盲氓臋膿膷茅藕臈模姆墨募拧艅艈贸艒玫枚梅懦艂艣奴眉偶啪藱",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d[i]]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[1258]=function(){var d="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~鈧拷鈥毱掆�炩�︹�犫�∷嗏�帮拷鈥古掞拷锟斤拷锟解�樷�欌�溾�濃�⑩�撯�斔溾劉锟解�号擄拷锟脚嘎犅÷⒙Bぢヂβ┞奥甭猜陈绰德堵仿嘎孤郝宦悸铰韭棵�脕脗膫脛脜脝脟脠脡脢脣虁脥脦脧膼脩虊脫脭茽脰脳脴脵脷脹脺漂虄脽脿谩芒膬盲氓忙莽猫茅锚毛虂铆卯茂膽帽蹋贸么啤枚梅酶霉煤没眉瓢鈧�",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d[i]]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[1e4]=function(){var d="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~脛脜脟脡脩脰脺谩脿芒盲茫氓莽茅猫锚毛铆矛卯茂帽贸貌么枚玫煤霉没眉鈥犅奥⒙Bр�⒙睹熉┾劉麓篓鈮犆喢樷垶卤鈮も墺楼碌鈭傗垜鈭徬�鈭衡劍忙酶驴隆卢鈭毱掆増鈭喡烩�β犆�脙脮艗艙鈥撯�斺�溾�濃�樷�櫭封棅每鸥鈦劼も�光�猴瑏铿傗�÷封�氣�炩�懊偯娒伱嬅埫嵜幟徝屆撁旓拷脪脷脹脵谋藛藴炉藰藱藲赂藵藳藝",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d[i]]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[10006]=function(){var d="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~脛鹿虏脡鲁脰脺螀脿芒盲蝿篓莽茅猫锚毛拢鈩⒚�⒙解�懊疵堵β姑幻尖�犖撐斘樜浳炍犆熉┪Nр墵掳螄螒卤鈮も墺楼螔螘螙螚螜螝螠桅潍唯惟维螡卢螣巍鈮埼ぢ烩�β犖ノ單埮撯�撯�曗�溾�濃�樷�櫭肺壩娢屛幬屛徬嵨蔽蚕埼次迪單澄肺刮疚何晃嘉轿肯�蠋蟻蟽蟿胃蠅蟼蠂蠀味蠆蠇螑伟锟�",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d[i]]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[10007]=function(){var d="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~袗袘袙袚袛袝袞袟袠袡袣袥袦袧袨袩袪小孝校肖啸笑效楔些歇蝎鞋协挟携鈥犅奥⒙Bр�⒙缎喡┾劉袀褣鈮犘冄撯垶卤鈮も墺褨碌鈭傂埿勓斝囇椥壯櫺娧氀樞吢垰茠鈮堚垎芦禄鈥β犘嬔浶屟溠曗�撯�斺�溾�濃�樷�櫭封�炐幯炐徰熲剸衼褢褟邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌褉褋褌褍褎褏褑褔褕褖褗褘褜褝褞陇",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d[i]]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[10029]=function(){var d="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~脛膧膩脡膭脰脺谩膮膶盲膷膯膰茅殴藕膸铆膹膾膿臇贸臈么枚玫煤臍臎眉鈥犅澳樎Bр�⒙睹熉┾劉臋篓鈮犇D墹鈮ツ垛垈鈭懪偰荒寄侥灸鼓号吪喤兟垰艅艊鈭喡烩�β犈埮惷暸懪屸�撯�斺�溾�濃�樷�櫭封棅艒艛艜艠鈥光�号櫯柵椗犫�氣�炁∨毰浢伵づッ嵟脚九撁斉毰芭迸才趁澝侥放慌伵寄⑺�",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d[i]]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[10079]=function(){var d="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~脛脜脟脡脩脰脺谩脿芒盲茫氓莽茅猫锚毛铆矛卯茂帽贸貌么枚玫煤霉没眉脻掳垄拢搂鈥⒙睹熉┾劉麓篓鈮犆喢樷垶卤鈮も墺楼碌鈭傗垜鈭徬�鈭衡劍忙酶驴隆卢鈭毱掆増鈭喡烩�β犆�脙脮艗艙鈥撯�斺�溾�濃�樷�櫭封棅每鸥鈦劼っ惷懊灻久铰封�氣�炩�懊偯娒伱嬅埫嵜幟徝屆撁旓拷脪脷脹脵谋藛藴炉藰藱藲赂藵藳藝",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d[i]]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[10081]=function(){var d="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~脛脜脟脡脩脰脺谩脿芒盲茫氓莽茅猫锚毛铆矛卯茂帽贸貌么枚玫煤霉没眉鈥犅奥⒙Bр�⒙睹熉┾劉麓篓鈮犆喢樷垶卤鈮も墺楼碌鈭傗垜鈭徬�鈭衡劍忙酶驴隆卢鈭毱掆増鈭喡烩�β犆�脙脮艗艙鈥撯�斺�溾�濃�樷�櫭封棅每鸥臑臒陌谋艦艧鈥÷封�氣�炩�懊偯娒伱嬅埫嵜幟徝屆撁旓拷脪脷脹脵锟剿喫溌標櫵毬杆澦浰�",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d[i]]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();if(typeof module!=="undefined"&&module.exports)module.exports=cptable;(function(root,factory){"use strict";if(typeof cptable==="undefined"){if(typeof require!=="undefined"){var cpt=require("./cpt"+"able");if(typeof module!=="undefined"&&module.exports)module.exports=factory(cpt);else root.cptable=factory(cpt)}else throw new Error("cptable not found")}else cptable=factory(cptable)})(this,function(cpt){"use strict";var magic={1200:"utf16le",1201:"utf16be",12000:"utf32le",12001:"utf32be",16969:"utf64le",20127:"ascii",65000:"utf7",65001:"utf8"};var sbcs_cache=[874,1250,1251,1252,1253,1254,1255,1256,1e4];var dbcs_cache=[932,936,949,950];var magic_cache=[65001];var magic_decode={};var magic_encode={};var cpecache={};var cpdcache={};var sfcc=function sfcc(x){return String.fromCharCode(x)};var cca=function cca(x){return x.charCodeAt(0)};var has_buf=typeof Buffer!=="undefined";if(has_buf){var mdl=1024,mdb=new Buffer(mdl);var make_EE=function make_EE(E){var EE=new Buffer(65536);for(var i=0;i<65536;++i)EE[i]=0;var keys=Object.keys(E),len=keys.length;for(var ee=0,e=keys[ee];ee<len;++ee){if(!(e=keys[ee]))continue;EE[e.charCodeAt(0)]=E[e]}return EE};var sbcs_encode=function make_sbcs_encode(cp){var EE=make_EE(cpt[cp].enc);return function sbcs_e(data,ofmt){var len=data.length;var out,i,j,D,w;if(typeof data==="string"){out=Buffer(len);for(i=0;i<len;++i)out[i]=EE[data.charCodeAt(i)]}else if(Buffer.isBuffer(data)){out=Buffer(2*len);j=0;for(i=0;i<len;++i){D=data[i];if(D<128)out[j++]=EE[D];else if(D<224){out[j++]=EE[((D&31)<<6)+(data[i+1]&63)];++i}else if(D<240){out[j++]=EE[((D&15)<<12)+((data[i+1]&63)<<6)+(data[i+2]&63)];i+=2}else{w=((D&7)<<18)+((data[i+1]&63)<<12)+((data[i+2]&63)<<6)+(data[i+3]&63);i+=3;if(w<65536)out[j++]=EE[w];else{w-=65536;out[j++]=EE[55296+(w>>10&1023)];out[j++]=EE[56320+(w&1023)]}}}out.length=j;out=out.slice(0,j)}else{out=Buffer(len);for(i=0;i<len;++i)out[i]=EE[data[i].charCodeAt(0)]}if(ofmt===undefined||ofmt==="buf")return out;if(ofmt!=="arr")return out.toString("binary");return[].slice.call(out)}};var sbcs_decode=function make_sbcs_decode(cp){var D=cpt[cp].dec;var DD=new Buffer(131072),d=0,c;for(d=0;d<D.length;++d){if(!(c=D[d]))continue;var w=c.charCodeAt(0);DD[2*d]=w&255;DD[2*d+1]=w>>8}return function sbcs_d(data){var len=data.length,i=0,j;if(2*len>mdl){mdl=2*len;mdb=new Buffer(mdl)}if(Buffer.isBuffer(data)){for(i=0;i<len;i++){j=2*data[i];mdb[2*i]=DD[j];mdb[2*i+1]=DD[j+1]}}else if(typeof data==="string"){for(i=0;i<len;i++){j=2*data.charCodeAt(i);mdb[2*i]=DD[j];mdb[2*i+1]=DD[j+1]}}else{for(i=0;i<len;i++){j=2*data[i];mdb[2*i]=DD[j];mdb[2*i+1]=DD[j+1]}}mdb.length=2*len;return mdb.toString("ucs2")}};var dbcs_encode=function make_dbcs_encode(cp){var E=cpt[cp].enc;var EE=new Buffer(131072);for(var i=0;i<131072;++i)EE[i]=0;var keys=Object.keys(E);for(var ee=0,e=keys[ee];ee<keys.length;++ee){if(!(e=keys[ee]))continue;var f=e.charCodeAt(0);EE[2*f]=E[e]&255;EE[2*f+1]=E[e]>>8}return function dbcs_e(data,ofmt){var len=data.length,out=new Buffer(2*len),i,j,jj,k,D;if(typeof data==="string"){for(i=k=0;i<len;++i){j=data.charCodeAt(i)*2;out[k++]=EE[j+1]||EE[j];if(EE[j+1]>0)out[k++]=EE[j]}out.length=k;out=out.slice(0,k)}else if(Buffer.isBuffer(data)){for(i=k=0;i<len;++i){D=data[i];if(D<128)j=D;else if(D<224){j=((D&31)<<6)+(data[i+1]&63);++i}else if(D<240){j=((D&15)<<12)+((data[i+1]&63)<<6)+(data[i+2]&63);i+=2}else{j=((D&7)<<18)+((data[i+1]&63)<<12)+((data[i+2]&63)<<6)+(data[i+3]&63);i+=3}if(j<65536){j*=2;out[k++]=EE[j+1]||EE[j];if(EE[j+1]>0)out[k++]=EE[j]}else{jj=j-65536;j=2*(55296+(jj>>10&1023));out[k++]=EE[j+1]||EE[j];if(EE[j+1]>0)out[k++]=EE[j];j=2*(56320+(jj&1023));out[k++]=EE[j+1]||EE[j];if(EE[j+1]>0)out[k++]=EE[j]}}out.length=k;out=out.slice(0,k)}else{for(i=k=0;i<len;i++){j=data[i].charCodeAt(0)*2;out[k++]=EE[j+1]||EE[j];if(EE[j+1]>0)out[k++]=EE[j]}}if(ofmt===undefined||ofmt==="buf")return out;if(ofmt!=="arr")return out.toString("binary");return[].slice.call(out)}};var dbcs_decode=function make_dbcs_decode(cp){var D=cpt[cp].dec;var DD=new Buffer(131072),d=0,c,w=0,j=0,i=0;for(i=0;i<65536;++i){DD[2*i]=255;DD[2*i+1]=253}for(d=0;d<D.length;++d){if(!(c=D[d]))continue;w=c.charCodeAt(0);j=2*d;DD[j]=w&255;DD[j+1]=w>>8}return function dbcs_d(data){var len=data.length,out=new Buffer(2*len),i,j,k=0;if(Buffer.isBuffer(data)){for(i=0;i<len;i++){j=2*data[i];if(DD[j]===255&&DD[j+1]===253){j=2*((data[i]<<8)+data[i+1]);++i}out[k++]=DD[j];out[k++]=DD[j+1]}}else if(typeof data==="string"){for(i=0;i<len;i++){j=2*data.charCodeAt(i);if(DD[j]===255&&DD[j+1]===253){j=2*((data.charCodeAt(i)<<8)+data.charCodeAt(i+1));++i}out[k++]=DD[j];out[k++]=DD[j+1]}}else{for(i=0;i<len;i++){j=2*data[i];if(DD[j]===255&&DD[j+1]===253){j=2*((data[i]<<8)+data[i+1]);++i}out[k++]=DD[j];out[k++]=DD[j+1]}}out.length=k;return out.toString("ucs2")}};magic_decode[65001]=function utf8_d(data){var len=data.length,w=0,ww=0;if(4*len>mdl){mdl=4*len;mdb=new Buffer(mdl)}mdb.length=0;var i=0;if(len>=3&&data[0]==239)if(data[1]==187&&data[2]==191)i=3;for(var j=1,k=0,D=0;i<len;i+=j){j=1;D=data[i];if(D<128)w=D;else if(D<224){w=(D&31)*64+(data[i+1]&63);j=2}else if(D<240){w=((D&15)<<12)+(data[i+1]&63)*64+(data[i+2]&63);j=3}else{w=(D&7)*262144+((data[i+1]&63)<<12)+(data[i+2]&63)*64+(data[i+3]&63);j=4}if(w<65536){mdb[k++]=w&255;mdb[k++]=w>>8}else{w-=65536;ww=55296+(w>>10&1023);w=56320+(w&1023);mdb[k++]=ww&255;mdb[k++]=ww>>>8;mdb[k++]=w&255;mdb[k++]=w>>>8&255}}mdb.length=k;return mdb.toString("ucs2")};magic_encode[65001]=function utf8_e(data,ofmt){var len=data.length,w=0,ww=0,j=0;var direct=typeof data==="string";if(4*len>mdl){mdl=4*len;mdb=new Buffer(mdl)}for(var i=0;i<len;++i){w=direct?data.charCodeAt(i):data[i].charCodeAt(0);if(w<=127)mdb[j++]=w;else if(w<=2047){mdb[j++]=192+(w>>6);mdb[j++]=128+(w&63)}else if(w>=55296&&w<=57343){w-=55296;++i;ww=(direct?data.charCodeAt(i):data[i].charCodeAt(0))-56320+(w<<10);mdb[j++]=240+(ww>>>18&7);mdb[j++]=144+(ww>>>12&63);mdb[j++]=128+(ww>>>6&63);mdb[j++]=128+(ww&63)}else{mdb[j++]=224+(w>>12);mdb[j++]=128+(w>>6&63);mdb[j++]=128+(w&63)}}mdb.length=j;if(ofmt===undefined||ofmt==="buf")return mdb;if(ofmt!=="arr")return mdb.toString("binary");return[].slice.call(mdb)}}var encache=function encache(){if(has_buf){if(cpdcache[sbcs_cache[0]])return;var i,s;for(i=0;i<sbcs_cache.length;++i){s=sbcs_cache[i];if(cpt[s]){cpdcache[s]=sbcs_decode(s);cpecache[s]=sbcs_encode(s)}}for(i=0;i<dbcs_cache.length;++i){s=dbcs_cache[i];if(cpt[s]){cpdcache[s]=dbcs_decode(s);cpecache[s]=dbcs_encode(s)}}for(i=0;i<magic_cache.length;++i){s=magic_cache[i];if(magic_decode[s])cpdcache[s]=magic_decode[s];if(magic_encode[s])cpecache[s]=magic_encode[s]}}};var cp_decache=function cp_decache(cp){cpdcache[cp]=cpecache[cp]=undefined};var decache=function decache(){if(has_buf){if(!cpdcache[sbcs_cache[0]])return;sbcs_cache.forEach(cp_decache);dbcs_cache.forEach(cp_decache);magic_cache.forEach(cp_decache)}last_enc=last_cp=undefined};var cache={encache:encache,decache:decache,sbcs:sbcs_cache,dbcs:dbcs_cache};encache();var BM="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var SetD="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'(),-./:?";var last_enc,last_cp;var encode=function encode(cp,data,ofmt){if(cp===last_cp){return last_enc(data,ofmt)}if(cpecache[cp]!==undefined){last_enc=cpecache[last_cp=cp];return last_enc(data,ofmt)}if(has_buf&&Buffer.isBuffer(data))data=data.toString("utf8");var len=data.length;var out=has_buf?new Buffer(4*len):[],w,i,j=0,c,tt,ww;var C=cpt[cp],E,M;if(C&&(E=C.enc))for(i=0;i<len;++i,++j){w=E[data[i]];out[j]=w&255;if(w>255){out[j]=w>>8;out[++j]=w&255}}else if(M=magic[cp])switch(M){case"utf8":if(has_buf&&typeof data==="string"){out=new Buffer(data,M);j=out.length;break}for(i=0;i<len;++i,++j){w=data[i].charCodeAt(0);if(w<=127)out[j]=w;else if(w<=2047){out[j]=192+(w>>6);out[++j]=128+(w&63)}else if(w>=55296&&w<=57343){w-=55296;ww=data[++i].charCodeAt(0)-56320+(w<<10);out[j]=240+(ww>>>18&7);out[++j]=144+(ww>>>12&63);out[++j]=128+(ww>>>6&63);out[++j]=128+(ww&63)}else{out[j]=224+(w>>12);out[++j]=128+(w>>6&63);out[++j]=128+(w&63)}}break;case"ascii":if(has_buf&&typeof data==="string"){out=new Buffer(data,M);j=out.length;break}for(i=0;i<len;++i,++j){w=data[i].charCodeAt(0);if(w<=127)out[j]=w;else throw new Error("bad ascii "+w)}break;case"utf16le":if(has_buf&&typeof data==="string"){out=new Buffer(data,M);j=out.length;break}for(i=0;i<len;++i){w=data[i].charCodeAt(0);out[j++]=w&255;out[j++]=w>>8}break;case"utf16be":for(i=0;i<len;++i){w=data[i].charCodeAt(0);out[j++]=w>>8;out[j++]=w&255}break;case"utf32le":for(i=0;i<len;++i){w=data[i].charCodeAt(0);if(w>=55296&&w<=57343)w=65536+(w-55296<<10)+(data[++i].charCodeAt(0)-56320);out[j++]=w&255;w>>=8;out[j++]=w&255;w>>=8;out[j++]=w&255;w>>=8;out[j++]=w&255}break;case"utf32be":for(i=0;i<len;++i){w=data[i].charCodeAt(0);if(w>=55296&&w<=57343)w=65536+(w-55296<<10)+(data[++i].charCodeAt(0)-56320);out[j+3]=w&255;w>>=8;out[j+2]=w&255;w>>=8;out[j+1]=w&255;w>>=8;out[j]=w&255;w>>=8;j+=4}break;case"utf7":for(i=0;i<len;i++){c=data[i];if(c==="+"){out[j++]=43;out[j++]=45;continue}if(SetD.indexOf(c)>-1){out[j++]=c.charCodeAt(0);continue}tt=encode(1201,c);out[j++]=43;out[j++]=BM.charCodeAt(tt[0]>>2);out[j++]=BM.charCodeAt(((tt[0]&3)<<4)+((tt[1]||0)>>4));out[j++]=BM.charCodeAt(((tt[1]&15)<<2)+((tt[2]||0)>>6));out[j++]=45}break;default:throw new Error("Unsupported magic: "+cp+" "+magic[cp])}else throw new Error("Unrecognized CP: "+cp);out.length=j;out=out.slice(0,j);if(typeof Buffer==="undefined")return ofmt=="str"?out.map(sfcc).join(""):out;if(ofmt===undefined||ofmt==="buf")return out;if(ofmt!=="arr")return out.toString("binary");return[].slice.call(out)};var decode=function decode(cp,data){var F;if(F=cpdcache[cp])return F(data);var len=data.length,out=new Array(len),w,i,j=1,k=0,ww;var C=cpt[cp],D,M;if(C&&(D=C.dec)){if(typeof data==="string")data=data.split("").map(cca);for(i=0;i<len;i+=j){j=2;w=D[(data[i]<<8)+data[i+1]];if(!w){j=1;w=D[data[i]]}if(!w)throw new Error("Unrecognized code: "+data[i]+" "+data[i+j-1]+" "+i+" "+j+" "+D[data[i]]);out[k++]=w}}else if(M=magic[cp])switch(M){case"utf8":i=0;if(len>=3&&data[0]==239)if(data[1]==187&&data[2]==191)i=3;for(;i<len;i+=j){j=1;if(data[i]<128)w=data[i];else if(data[i]<224){w=(data[i]&31)*64+(data[i+1]&63);j=2}else if(data[i]<240){w=((data[i]&15)<<12)+(data[i+1]&63)*64+(data[i+2]&63);j=3}else{w=(data[i]&7)*262144+((data[i+1]&63)<<12)+(data[i+2]&63)*64+(data[i+3]&63);j=4}if(w<65536){out[k++]=String.fromCharCode(w)}else{w-=65536;ww=55296+(w>>10&1023);w=56320+(w&1023);out[k++]=String.fromCharCode(ww);out[k++]=String.fromCharCode(w)}}break;case"ascii":if(has_buf&&Buffer.isBuffer(data))return data.toString(M);for(i=0;i<len;i++)out[i]=String.fromCharCode(data[i]);k=len;break;case"utf16le":i=0;if(len>=2&&data[0]==255)if(data[1]==254)i=2;if(has_buf&&Buffer.isBuffer(data))return data.toString(M);j=2;for(;i<len;i+=j){out[k++]=String.fromCharCode((data[i+1]<<8)+data[i])}break;case"utf16be":i=0;if(len>=2&&data[0]==254)if(data[1]==255)i=2;j=2;for(;i<len;i+=j){out[k++]=String.fromCharCode((data[i]<<8)+data[i+1])}break;case"utf32le":i=0;if(len>=4&&data[0]==255)if(data[1]==254&&data[2]==0&&data[3]==0)i=4;j=4;for(;i<len;i+=j){w=(data[i+3]<<24)+(data[i+2]<<16)+(data[i+1]<<8)+data[i];if(w>65535){w-=65536;out[k++]=String.fromCharCode(55296+(w>>10&1023));out[k++]=String.fromCharCode(56320+(w&1023))}else out[k++]=String.fromCharCode(w)}break;case"utf32be":i=0;if(len>=4&&data[3]==255)if(data[2]==254&&data[1]==0&&data[0]==0)i=4;j=4;for(;i<len;i+=j){w=(data[i]<<24)+(data[i+1]<<16)+(data[i+2]<<8)+data[i+3];if(w>65535){w-=65536;out[k++]=String.fromCharCode(55296+(w>>10&1023));out[k++]=String.fromCharCode(56320+(w&1023))}else out[k++]=String.fromCharCode(w)}break;case"utf7":i=0;if(len>=4&&data[0]==43&&data[1]==47&&data[2]==118){if(len>=5&&data[3]==56&&data[4]==45)i=5;else if(data[3]==56||data[3]==57||data[3]==43||data[3]==47)i=4}for(;i<len;i+=j){if(data[i]!==43){j=1;out[k++]=String.fromCharCode(data[i]);continue}j=1;if(data[i+1]===45){j=2;out[k++]="+";continue}while(String.fromCharCode(data[i+j]).match(/[A-Za-z0-9+\/]/))j++;var dash=0;if(data[i+j]===45){++j;dash=1}var tt=[];var o64;var c1,c2,c3;var e1,e2,e3,e4;for(var l=1;l<j-dash;){e1=BM.indexOf(String.fromCharCode(data[i+l++]));e2=BM.indexOf(String.fromCharCode(data[i+l++]));c1=e1<<2|e2>>4;tt.push(c1);e3=BM.indexOf(String.fromCharCode(data[i+l++]));if(e3===-1)break;c2=(e2&15)<<4|e3>>2;tt.push(c2);e4=BM.indexOf(String.fromCharCode(data[i+l++]));if(e4===-1)break;c3=(e3&3)<<6|e4;if(e4<64)tt.push(c3)}if((tt.length&1)===1)tt.length--;o64=decode(1201,tt);for(l=0;l<o64.length;++l)out[k++]=o64[l]}break;default:throw new Error("Unsupported magic: "+cp+" "+magic[cp])}else throw new Error("Unrecognized CP: "+cp);out.length=k;return out.join("")};var hascp=function hascp(cp){return cpt[cp]||magic[cp]};cpt.utils={decode:decode,encode:encode,hascp:hascp,magic:magic,cache:cache};return cpt});var XLSX={};(function make_xlsx(XLSX){XLSX.version="0.8.20";var current_codepage=1200,current_cptable;if(typeof module!=="undefined"&&typeof require!=="undefined"){if(typeof cptable==="undefined")cptable=require("./dist/cpexcel");current_cptable=cptable[current_codepage]}function reset_cp(){set_cp(1200)}var set_cp=function(cp){current_codepage=cp};function char_codes(data){var o=[];for(var i=0,len=data.length;i<len;++i)o[i]=data.charCodeAt(i);return o}var debom_xml=function(data){return data};var _getchar=function _gc1(x){return String.fromCharCode(x)};if(typeof cptable!=="undefined"){set_cp=function(cp){current_codepage=cp;current_cptable=cptable[cp]};debom_xml=function(data){if(data.charCodeAt(0)===255&&data.charCodeAt(1)===254){return cptable.utils.decode(1200,char_codes(data.substr(2)))}return data};_getchar=function _gc2(x){if(current_codepage===1200)return String.fromCharCode(x);return cptable.utils.decode(current_codepage,[x&255,x>>8])[0]}}var Base64=function make_b64(){var map="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";return{encode:function(input,utf8){var o="";var c1,c2,c3,e1,e2,e3,e4;for(var i=0;i<input.length;){c1=input.charCodeAt(i++);c2=input.charCodeAt(i++);c3=input.charCodeAt(i++);e1=c1>>2;e2=(c1&3)<<4|c2>>4;e3=(c2&15)<<2|c3>>6;e4=c3&63;if(isNaN(c2)){e3=e4=64}else if(isNaN(c3)){e4=64}o+=map.charAt(e1)+map.charAt(e2)+map.charAt(e3)+map.charAt(e4)}return o},decode:function b64_decode(input,utf8){var o="";var c1,c2,c3;var e1,e2,e3,e4;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");for(var i=0;i<input.length;){e1=map.indexOf(input.charAt(i++));e2=map.indexOf(input.charAt(i++));e3=map.indexOf(input.charAt(i++));e4=map.indexOf(input.charAt(i++));c1=e1<<2|e2>>4;c2=(e2&15)<<4|e3>>2;c3=(e3&3)<<6|e4;o+=String.fromCharCode(c1);if(e3!=64){o+=String.fromCharCode(c2)}if(e4!=64){o+=String.fromCharCode(c3)}}return o}}}();var has_buf=typeof Buffer!=="undefined";function new_raw_buf(len){return new(has_buf?Buffer:Array)(len)}function s2a(s){if(has_buf)return new Buffer(s,"binary");return s.split("").map(function(x){return x.charCodeAt(0)&255})}var bconcat=function(bufs){return[].concat.apply([],bufs)};var chr0=/\u0000/g,chr1=/[\u0001-\u0006]/;var SSF={};var make_ssf=function make_ssf(SSF){SSF.version="0.8.1";function _strrev(x){var o="",i=x.length-1;while(i>=0)o+=x.charAt(i--);return o}function fill(c,l){var o="";while(o.length<l)o+=c;return o}function pad0(v,d){var t=""+v;return t.length>=d?t:fill("0",d-t.length)+t}function pad_(v,d){var t=""+v;return t.length>=d?t:fill(" ",d-t.length)+t}function rpad_(v,d){var t=""+v;return t.length>=d?t:t+fill(" ",d-t.length)}function pad0r1(v,d){var t=""+Math.round(v);return t.length>=d?t:fill("0",d-t.length)+t}function pad0r2(v,d){var t=""+v;return t.length>=d?t:fill("0",d-t.length)+t}var p2_32=Math.pow(2,32);function pad0r(v,d){if(v>p2_32||v<-p2_32)return pad0r1(v,d);var i=Math.round(v);return pad0r2(i,d)}function isgeneral(s,i){return s.length>=7+i&&(s.charCodeAt(i)|32)===103&&(s.charCodeAt(i+1)|32)===101&&(s.charCodeAt(i+2)|32)===110&&(s.charCodeAt(i+3)|32)===101&&(s.charCodeAt(i+4)|32)===114&&(s.charCodeAt(i+5)|32)===97&&(s.charCodeAt(i+6)|32)===108}var opts_fmt=[["date1904",0],["output",""],["WTF",false]];function fixopts(o){for(var y=0;y!=opts_fmt.length;++y)if(o[opts_fmt[y][0]]===undefined)o[opts_fmt[y][0]]=opts_fmt[y][1]}SSF.opts=opts_fmt;var table_fmt={0:"General",1:"0",2:"0.00",3:"#,##0",4:"#,##0.00",9:"0%",10:"0.00%",11:"0.00E+00",12:"# ?/?",13:"# ??/??",14:"m/d/yy",15:"d-mmm-yy",16:"d-mmm",17:"mmm-yy",18:"h:mm AM/PM",19:"h:mm:ss AM/PM",20:"h:mm",21:"h:mm:ss",22:"m/d/yy h:mm",37:"#,##0 ;(#,##0)",38:"#,##0 ;[Red](#,##0)",39:"#,##0.00;(#,##0.00)",40:"#,##0.00;[Red](#,##0.00)",45:"mm:ss",46:"[h]:mm:ss",47:"mmss.0",48:"##0.0E+0",49:"@",56:'"涓婂崍/涓嬪崍 "hh"鏅�"mm"鍒�"ss"绉� "',65535:"General"};var days=[["Sun","Sunday"],["Mon","Monday"],["Tue","Tuesday"],["Wed","Wednesday"],["Thu","Thursday"],["Fri","Friday"],["Sat","Saturday"]];var months=[["J","Jan","January"],["F","Feb","February"],["M","Mar","March"],["A","Apr","April"],["M","May","May"],["J","Jun","June"],["J","Jul","July"],["A","Aug","August"],["S","Sep","September"],["O","Oct","October"],["N","Nov","November"],["D","Dec","December"]];function frac(x,D,mixed){var sgn=x<0?-1:1;var B=x*sgn;var P_2=0,P_1=1,P=0;var Q_2=1,Q_1=0,Q=0;var A=Math.floor(B);while(Q_1<D){A=Math.floor(B);P=A*P_1+P_2;Q=A*Q_1+Q_2;if(B-A<5e-10)break;B=1/(B-A);P_2=P_1;P_1=P;Q_2=Q_1;Q_1=Q}if(Q>D){Q=Q_1;P=P_1}if(Q>D){Q=Q_2;P=P_2}if(!mixed)return[0,sgn*P,Q];if(Q===0)throw"Unexpected state: "+P+" "+P_1+" "+P_2+" "+Q+" "+Q_1+" "+Q_2;var q=Math.floor(sgn*P/Q);return[q,sgn*P-q*Q,Q]}function general_fmt_int(v,opts){return""+v}SSF._general_int=general_fmt_int;var general_fmt_num=function make_general_fmt_num(){var gnr1=/\.(\d*[1-9])0+$/,gnr2=/\.0*$/,gnr4=/\.(\d*[1-9])0+/,gnr5=/\.0*[Ee]/,gnr6=/(E[+-])(\d)$/;function gfn2(v){var w=v<0?12:11;var o=gfn5(v.toFixed(12));if(o.length<=w)return o;o=v.toPrecision(10);if(o.length<=w)return o;return v.toExponential(5)}function gfn3(v){var o=v.toFixed(11).replace(gnr1,".$1");if(o.length>(v<0?12:11))o=v.toPrecision(6);return o}function gfn4(o){for(var i=0;i!=o.length;++i)if((o.charCodeAt(i)|32)===101)return o.replace(gnr4,".$1").replace(gnr5,"E").replace("e","E").replace(gnr6,"$10$2");return o}function gfn5(o){return o.indexOf(".")>-1?o.replace(gnr2,"").replace(gnr1,".$1"):o}return function general_fmt_num(v,opts){var V=Math.floor(Math.log(Math.abs(v))*Math.LOG10E),o;if(V>=-4&&V<=-1)o=v.toPrecision(10+V);else if(Math.abs(V)<=9)o=gfn2(v);else if(V===10)o=v.toFixed(10).substr(0,12);else o=gfn3(v);return gfn5(gfn4(o))}}();SSF._general_num=general_fmt_num;function general_fmt(v,opts){switch(typeof v){case"string":return v;case"boolean":return v?"TRUE":"FALSE";case"number":return(v|0)===v?general_fmt_int(v,opts):general_fmt_num(v,opts)}throw new Error("unsupported value in General format: "+v)}SSF._general=general_fmt;function fix_hijri(date,o){return 0}function parse_date_code(v,opts,b2){if(v>2958465||v<0)return null;var date=v|0,time=Math.floor(86400*(v-date)),dow=0;var dout=[];var out={D:date,T:time,u:86400*(v-date)-time,y:0,m:0,d:0,H:0,M:0,S:0,q:0};if(Math.abs(out.u)<1e-6)out.u=0;fixopts(opts!=null?opts:opts=[]);if(opts.date1904)date+=1462;if(out.u>.999){out.u=0;if(++time==86400){time=0;++date}}if(date===60){dout=b2?[1317,10,29]:[1900,2,29];dow=3}else if(date===0){dout=b2?[1317,8,29]:[1900,1,0];dow=6}else{if(date>60)--date;var d=new Date(1900,0,1);d.setDate(d.getDate()+date-1);dout=[d.getFullYear(),d.getMonth()+1,d.getDate()];dow=d.getDay();if(date<60)dow=(dow+6)%7;if(b2)dow=fix_hijri(d,dout)}out.y=dout[0];out.m=dout[1];out.d=dout[2];out.S=time%60;time=Math.floor(time/60);out.M=time%60;time=Math.floor(time/60);out.H=time;out.q=dow;return out}SSF.parse_date_code=parse_date_code;function write_date(type,fmt,val,ss0){var o="",ss=0,tt=0,y=val.y,out,outl=0;switch(type){case 98:y=val.y+543;case 121:switch(fmt.length){case 1:case 2:out=y%100;outl=2;break;default:out=y%1e4;outl=4;break}break;case 109:switch(fmt.length){case 1:case 2:out=val.m;outl=fmt.length;break;case 3:return months[val.m-1][1];case 5:return months[val.m-1][0];default:return months[val.m-1][2]}break;case 100:switch(fmt.length){case 1:case 2:out=val.d;outl=fmt.length;break;case 3:return days[val.q][0];default:return days[val.q][1]}break;case 104:switch(fmt.length){case 1:case 2:out=1+(val.H+11)%12;outl=fmt.length;break;default:throw"bad hour format: "+fmt}break;case 72:switch(fmt.length){case 1:case 2:out=val.H;outl=fmt.length;break;default:throw"bad hour format: "+fmt}break;case 77:switch(fmt.length){case 1:case 2:out=val.M;outl=fmt.length;break;default:throw"bad minute format: "+fmt}break;case 115:if(val.u===0)switch(fmt){case"s":case"ss":return pad0(val.S,fmt.length);case".0":case".00":case".000":}switch(fmt){case"s":case"ss":case".0":case".00":case".000":if(ss0>=2)tt=ss0===3?1e3:100;else tt=ss0===1?10:1;ss=Math.round(tt*(val.S+val.u));if(ss>=60*tt)ss=0;if(fmt==="s")return ss===0?"0":""+ss/tt;o=pad0(ss,2+ss0);if(fmt==="ss")return o.substr(0,2);return"."+o.substr(2,fmt.length-1);default:throw"bad second format: "+fmt}case 90:switch(fmt){case"[h]":case"[hh]":out=val.D*24+val.H;break;case"[m]":case"[mm]":out=(val.D*24+val.H)*60+val.M;break;case"[s]":case"[ss]":out=((val.D*24+val.H)*60+val.M)*60+Math.round(val.S+val.u);break;default:throw"bad abstime format: "+fmt}outl=fmt.length===3?1:2;break;case 101:out=y;outl=1}if(outl>0)return pad0(out,outl);else return""}function commaify(s){if(s.length<=3)return s;var j=s.length%3,o=s.substr(0,j);for(;j!=s.length;j+=3)o+=(o.length>0?",":"")+s.substr(j,3);return o}var write_num=function make_write_num(){var pct1=/%/g;function write_num_pct(type,fmt,val){var sfmt=fmt.replace(pct1,""),mul=fmt.length-sfmt.length;return write_num(type,sfmt,val*Math.pow(10,2*mul))+fill("%",mul)}function write_num_cm(type,fmt,val){var idx=fmt.length-1;while(fmt.charCodeAt(idx-1)===44)--idx;return write_num(type,fmt.substr(0,idx),val/Math.pow(10,3*(fmt.length-idx)))}function write_num_exp(fmt,val){var o;var idx=fmt.indexOf("E")-fmt.indexOf(".")-1;if(fmt.match(/^#+0.0E\+0$/)){var period=fmt.indexOf(".");if(period===-1)period=fmt.indexOf("E");var ee=Math.floor(Math.log(Math.abs(val))*Math.LOG10E)%period;if(ee<0)ee+=period;o=(val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);if(o.indexOf("e")===-1){var fakee=Math.floor(Math.log(Math.abs(val))*Math.LOG10E);if(o.indexOf(".")===-1)o=o[0]+"."+o.substr(1)+"E+"+(fakee-o.length+ee);else o+="E+"+(fakee-ee);while(o.substr(0,2)==="0."){o=o[0]+o.substr(2,period)+"."+o.substr(2+period);o=o.replace(/^0+([1-9])/,"$1").replace(/^0+\./,"0.")}o=o.replace(/\+-/,"-")}o=o.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/,function($$,$1,$2,$3){return $1+$2+$3.substr(0,(period+ee)%period)+"."+$3.substr(ee)+"E"})}else o=val.toExponential(idx);if(fmt.match(/E\+00$/)&&o.match(/e[+-]\d$/))o=o.substr(0,o.length-1)+"0"+o[o.length-1];if(fmt.match(/E\-/)&&o.match(/e\+/))o=o.replace(/e\+/,"e");return o.replace("e","E")}var frac1=/# (\?+)( ?)\/( ?)(\d+)/;function write_num_f1(r,aval,sign){var den=parseInt(r[4]),rr=Math.round(aval*den),base=Math.floor(rr/den);
+var myn=rr-base*den,myd=den;return sign+(base===0?"":""+base)+" "+(myn===0?fill(" ",r[1].length+1+r[4].length):pad_(myn,r[1].length)+r[2]+"/"+r[3]+pad0(myd,r[4].length))}function write_num_f2(r,aval,sign){return sign+(aval===0?"":""+aval)+fill(" ",r[1].length+2+r[4].length)}var dec1=/^#*0*\.(0+)/;var closeparen=/\).*[0#]/;var phone=/\(###\) ###\\?-####/;function hashq(str){var o="",cc;for(var i=0;i!=str.length;++i)switch(cc=str.charCodeAt(i)){case 35:break;case 63:o+=" ";break;case 48:o+="0";break;default:o+=String.fromCharCode(cc)}return o}function rnd(val,d){var dd=Math.pow(10,d);return""+Math.round(val*dd)/dd}function dec(val,d){return Math.round((val-Math.floor(val))*Math.pow(10,d))}function flr(val){if(val<2147483647&&val>-2147483648)return""+(val>=0?val|0:val-1|0);return""+Math.floor(val)}function write_num_flt(type,fmt,val){if(type.charCodeAt(0)===40&&!fmt.match(closeparen)){var ffmt=fmt.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,"");if(val>=0)return write_num_flt("n",ffmt,val);return"("+write_num_flt("n",ffmt,-val)+")"}if(fmt.charCodeAt(fmt.length-1)===44)return write_num_cm(type,fmt,val);if(fmt.indexOf("%")!==-1)return write_num_pct(type,fmt,val);if(fmt.indexOf("E")!==-1)return write_num_exp(fmt,val);if(fmt.charCodeAt(0)===36)return"$"+write_num_flt(type,fmt.substr(fmt[1]==" "?2:1),val);var o,oo;var r,ri,ff,aval=Math.abs(val),sign=val<0?"-":"";if(fmt.match(/^00+$/))return sign+pad0r(aval,fmt.length);if(fmt.match(/^[#?]+$/)){o=pad0r(val,0);if(o==="0")o="";return o.length>fmt.length?o:hashq(fmt.substr(0,fmt.length-o.length))+o}if((r=fmt.match(frac1))!==null)return write_num_f1(r,aval,sign);if(fmt.match(/^#+0+$/)!==null)return sign+pad0r(aval,fmt.length-fmt.indexOf("0"));if((r=fmt.match(dec1))!==null){o=rnd(val,r[1].length).replace(/^([^\.]+)$/,"$1."+r[1]).replace(/\.$/,"."+r[1]).replace(/\.(\d*)$/,function($$,$1){return"."+$1+fill("0",r[1].length-$1.length)});return fmt.indexOf("0.")!==-1?o:o.replace(/^0\./,".")}fmt=fmt.replace(/^#+([0.])/,"$1");if((r=fmt.match(/^(0*)\.(#*)$/))!==null){return sign+rnd(aval,r[2].length).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,r[1].length?"0.":".")}if((r=fmt.match(/^#,##0(\.?)$/))!==null)return sign+commaify(pad0r(aval,0));if((r=fmt.match(/^#,##0\.([#0]*0)$/))!==null){return val<0?"-"+write_num_flt(type,fmt,-val):commaify(""+Math.floor(val))+"."+pad0(dec(val,r[1].length),r[1].length)}if((r=fmt.match(/^#,#*,#0/))!==null)return write_num_flt(type,fmt.replace(/^#,#*,/,""),val);if((r=fmt.match(/^([0#]+)(\\?-([0#]+))+$/))!==null){o=_strrev(write_num_flt(type,fmt.replace(/[\\-]/g,""),val));ri=0;return _strrev(_strrev(fmt.replace(/\\/g,"")).replace(/[0#]/g,function(x){return ri<o.length?o[ri++]:x==="0"?"0":""}))}if(fmt.match(phone)!==null){o=write_num_flt(type,"##########",val);return"("+o.substr(0,3)+") "+o.substr(3,3)+"-"+o.substr(6)}var oa="";if((r=fmt.match(/^([#0?]+)( ?)\/( ?)([#0?]+)/))!==null){ri=Math.min(r[4].length,7);ff=frac(aval,Math.pow(10,ri)-1,false);o=""+sign;oa=write_num("n",r[1],ff[1]);if(oa[oa.length-1]==" ")oa=oa.substr(0,oa.length-1)+"0";o+=oa+r[2]+"/"+r[3];oa=rpad_(ff[2],ri);if(oa.length<r[4].length)oa=hashq(r[4].substr(r[4].length-oa.length))+oa;o+=oa;return o}if((r=fmt.match(/^# ([#0?]+)( ?)\/( ?)([#0?]+)/))!==null){ri=Math.min(Math.max(r[1].length,r[4].length),7);ff=frac(aval,Math.pow(10,ri)-1,true);return sign+(ff[0]||(ff[1]?"":"0"))+" "+(ff[1]?pad_(ff[1],ri)+r[2]+"/"+r[3]+rpad_(ff[2],ri):fill(" ",2*ri+1+r[2].length+r[3].length))}if((r=fmt.match(/^[#0?]+$/))!==null){o=pad0r(val,0);if(fmt.length<=o.length)return o;return hashq(fmt.substr(0,fmt.length-o.length))+o}if((r=fmt.match(/^([#0?]+)\.([#0]+)$/))!==null){o=""+val.toFixed(Math.min(r[2].length,10)).replace(/([^0])0+$/,"$1");ri=o.indexOf(".");var lres=fmt.indexOf(".")-ri,rres=fmt.length-o.length-lres;return hashq(fmt.substr(0,lres)+o+fmt.substr(fmt.length-rres))}if((r=fmt.match(/^00,000\.([#0]*0)$/))!==null){ri=dec(val,r[1].length);return val<0?"-"+write_num_flt(type,fmt,-val):commaify(flr(val)).replace(/^\d,\d{3}$/,"0$&").replace(/^\d*$/,function($$){return"00,"+($$.length<3?pad0(0,3-$$.length):"")+$$})+"."+pad0(ri,r[1].length)}switch(fmt){case"#,###":var x=commaify(pad0r(aval,0));return x!=="0"?sign+x:"";default:}throw new Error("unsupported format |"+fmt+"|")}function write_num_cm2(type,fmt,val){var idx=fmt.length-1;while(fmt.charCodeAt(idx-1)===44)--idx;return write_num(type,fmt.substr(0,idx),val/Math.pow(10,3*(fmt.length-idx)))}function write_num_pct2(type,fmt,val){var sfmt=fmt.replace(pct1,""),mul=fmt.length-sfmt.length;return write_num(type,sfmt,val*Math.pow(10,2*mul))+fill("%",mul)}function write_num_exp2(fmt,val){var o;var idx=fmt.indexOf("E")-fmt.indexOf(".")-1;if(fmt.match(/^#+0.0E\+0$/)){var period=fmt.indexOf(".");if(period===-1)period=fmt.indexOf("E");var ee=Math.floor(Math.log(Math.abs(val))*Math.LOG10E)%period;if(ee<0)ee+=period;o=(val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);if(!o.match(/[Ee]/)){var fakee=Math.floor(Math.log(Math.abs(val))*Math.LOG10E);if(o.indexOf(".")===-1)o=o[0]+"."+o.substr(1)+"E+"+(fakee-o.length+ee);else o+="E+"+(fakee-ee);o=o.replace(/\+-/,"-")}o=o.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/,function($$,$1,$2,$3){return $1+$2+$3.substr(0,(period+ee)%period)+"."+$3.substr(ee)+"E"})}else o=val.toExponential(idx);if(fmt.match(/E\+00$/)&&o.match(/e[+-]\d$/))o=o.substr(0,o.length-1)+"0"+o[o.length-1];if(fmt.match(/E\-/)&&o.match(/e\+/))o=o.replace(/e\+/,"e");return o.replace("e","E")}function write_num_int(type,fmt,val){if(type.charCodeAt(0)===40&&!fmt.match(closeparen)){var ffmt=fmt.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,"");if(val>=0)return write_num_int("n",ffmt,val);return"("+write_num_int("n",ffmt,-val)+")"}if(fmt.charCodeAt(fmt.length-1)===44)return write_num_cm2(type,fmt,val);if(fmt.indexOf("%")!==-1)return write_num_pct2(type,fmt,val);if(fmt.indexOf("E")!==-1)return write_num_exp2(fmt,val);if(fmt.charCodeAt(0)===36)return"$"+write_num_int(type,fmt.substr(fmt[1]==" "?2:1),val);var o;var r,ri,ff,aval=Math.abs(val),sign=val<0?"-":"";if(fmt.match(/^00+$/))return sign+pad0(aval,fmt.length);if(fmt.match(/^[#?]+$/)){o=""+val;if(val===0)o="";return o.length>fmt.length?o:hashq(fmt.substr(0,fmt.length-o.length))+o}if((r=fmt.match(frac1))!==null)return write_num_f2(r,aval,sign);if(fmt.match(/^#+0+$/)!==null)return sign+pad0(aval,fmt.length-fmt.indexOf("0"));if((r=fmt.match(dec1))!==null){o=(""+val).replace(/^([^\.]+)$/,"$1."+r[1]).replace(/\.$/,"."+r[1]).replace(/\.(\d*)$/,function($$,$1){return"."+$1+fill("0",r[1].length-$1.length)});return fmt.indexOf("0.")!==-1?o:o.replace(/^0\./,".")}fmt=fmt.replace(/^#+([0.])/,"$1");if((r=fmt.match(/^(0*)\.(#*)$/))!==null){return sign+(""+aval).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,r[1].length?"0.":".")}if((r=fmt.match(/^#,##0(\.?)$/))!==null)return sign+commaify(""+aval);if((r=fmt.match(/^#,##0\.([#0]*0)$/))!==null){return val<0?"-"+write_num_int(type,fmt,-val):commaify(""+val)+"."+fill("0",r[1].length)}if((r=fmt.match(/^#,#*,#0/))!==null)return write_num_int(type,fmt.replace(/^#,#*,/,""),val);if((r=fmt.match(/^([0#]+)(\\?-([0#]+))+$/))!==null){o=_strrev(write_num_int(type,fmt.replace(/[\\-]/g,""),val));ri=0;return _strrev(_strrev(fmt.replace(/\\/g,"")).replace(/[0#]/g,function(x){return ri<o.length?o[ri++]:x==="0"?"0":""}))}if(fmt.match(phone)!==null){o=write_num_int(type,"##########",val);return"("+o.substr(0,3)+") "+o.substr(3,3)+"-"+o.substr(6)}var oa="";if((r=fmt.match(/^([#0?]+)( ?)\/( ?)([#0?]+)/))!==null){ri=Math.min(r[4].length,7);ff=frac(aval,Math.pow(10,ri)-1,false);o=""+sign;oa=write_num("n",r[1],ff[1]);if(oa[oa.length-1]==" ")oa=oa.substr(0,oa.length-1)+"0";o+=oa+r[2]+"/"+r[3];oa=rpad_(ff[2],ri);if(oa.length<r[4].length)oa=hashq(r[4].substr(r[4].length-oa.length))+oa;o+=oa;return o}if((r=fmt.match(/^# ([#0?]+)( ?)\/( ?)([#0?]+)/))!==null){ri=Math.min(Math.max(r[1].length,r[4].length),7);ff=frac(aval,Math.pow(10,ri)-1,true);return sign+(ff[0]||(ff[1]?"":"0"))+" "+(ff[1]?pad_(ff[1],ri)+r[2]+"/"+r[3]+rpad_(ff[2],ri):fill(" ",2*ri+1+r[2].length+r[3].length))}if((r=fmt.match(/^[#0?]+$/))!==null){o=""+val;if(fmt.length<=o.length)return o;return hashq(fmt.substr(0,fmt.length-o.length))+o}if((r=fmt.match(/^([#0]+)\.([#0]+)$/))!==null){o=""+val.toFixed(Math.min(r[2].length,10)).replace(/([^0])0+$/,"$1");ri=o.indexOf(".");var lres=fmt.indexOf(".")-ri,rres=fmt.length-o.length-lres;return hashq(fmt.substr(0,lres)+o+fmt.substr(fmt.length-rres))}if((r=fmt.match(/^00,000\.([#0]*0)$/))!==null){return val<0?"-"+write_num_int(type,fmt,-val):commaify(""+val).replace(/^\d,\d{3}$/,"0$&").replace(/^\d*$/,function($$){return"00,"+($$.length<3?pad0(0,3-$$.length):"")+$$})+"."+pad0(0,r[1].length)}switch(fmt){case"#,###":var x=commaify(""+aval);return x!=="0"?sign+x:"";default:}throw new Error("unsupported format |"+fmt+"|")}return function write_num(type,fmt,val){return(val|0)===val?write_num_int(type,fmt,val):write_num_flt(type,fmt,val)}}();function split_fmt(fmt){var out=[];var in_str=false,cc;for(var i=0,j=0;i<fmt.length;++i)switch(cc=fmt.charCodeAt(i)){case 34:in_str=!in_str;break;case 95:case 42:case 92:++i;break;case 59:out[out.length]=fmt.substr(j,i-j);j=i+1}out[out.length]=fmt.substr(j);if(in_str===true)throw new Error("Format |"+fmt+"| unterminated string ");return out}SSF._split=split_fmt;var abstime=/\[[HhMmSs]*\]/;function eval_fmt(fmt,v,opts,flen){var out=[],o="",i=0,c="",lst="t",q,dt,j,cc;var hr="H";while(i<fmt.length){switch(c=fmt[i]){case"G":if(!isgeneral(fmt,i))throw new Error("unrecognized character "+c+" in "+fmt);out[out.length]={t:"G",v:"General"};i+=7;break;case'"':for(o="";(cc=fmt.charCodeAt(++i))!==34&&i<fmt.length;)o+=String.fromCharCode(cc);out[out.length]={t:"t",v:o};++i;break;case"\\":var w=fmt[++i],t=w==="("||w===")"?w:"t";out[out.length]={t:t,v:w};++i;break;case"_":out[out.length]={t:"t",v:" "};i+=2;break;case"@":out[out.length]={t:"T",v:v};++i;break;case"B":case"b":if(fmt[i+1]==="1"||fmt[i+1]==="2"){if(dt==null){dt=parse_date_code(v,opts,fmt[i+1]==="2");if(dt==null)return""}out[out.length]={t:"X",v:fmt.substr(i,2)};lst=c;i+=2;break}case"M":case"D":case"Y":case"H":case"S":case"E":c=c.toLowerCase();case"m":case"d":case"y":case"h":case"s":case"e":case"g":if(v<0)return"";if(dt==null){dt=parse_date_code(v,opts);if(dt==null)return""}o=c;while(++i<fmt.length&&fmt[i].toLowerCase()===c)o+=c;if(c==="m"&&lst.toLowerCase()==="h")c="M";if(c==="h")c=hr;out[out.length]={t:c,v:o};lst=c;break;case"A":q={t:c,v:"A"};if(dt==null)dt=parse_date_code(v,opts);if(fmt.substr(i,3)==="A/P"){if(dt!=null)q.v=dt.H>=12?"P":"A";q.t="T";hr="h";i+=3}else if(fmt.substr(i,5)==="AM/PM"){if(dt!=null)q.v=dt.H>=12?"PM":"AM";q.t="T";i+=5;hr="h"}else{q.t="t";++i}if(dt==null&&q.t==="T")return"";out[out.length]=q;lst=c;break;case"[":o=c;while(fmt[i++]!=="]"&&i<fmt.length)o+=fmt[i];if(o.substr(-1)!=="]")throw'unterminated "[" block: |'+o+"|";if(o.match(abstime)){if(dt==null){dt=parse_date_code(v,opts);if(dt==null)return""}out[out.length]={t:"Z",v:o.toLowerCase()}}else{o=""}break;case".":if(dt!=null){o=c;while((c=fmt[++i])==="0")o+=c;out[out.length]={t:"s",v:o};break}case"0":case"#":o=c;while("0#?.,E+-%".indexOf(c=fmt[++i])>-1||c=="\\"&&fmt[i+1]=="-"&&"0#".indexOf(fmt[i+2])>-1)o+=c;out[out.length]={t:"n",v:o};break;case"?":o=c;while(fmt[++i]===c)o+=c;q={t:c,v:o};out[out.length]=q;lst=c;break;case"*":++i;if(fmt[i]==" "||fmt[i]=="*")++i;break;case"(":case")":out[out.length]={t:flen===1?"t":c,v:c};++i;break;case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":o=c;while("0123456789".indexOf(fmt[++i])>-1)o+=fmt[i];out[out.length]={t:"D",v:o};break;case" ":out[out.length]={t:c,v:c};++i;break;default:if(",$-+/():!^&'~{}<>=鈧琣cfijklopqrtuvwxz".indexOf(c)===-1)throw new Error("unrecognized character "+c+" in "+fmt);out[out.length]={t:"t",v:c};++i;break}}var bt=0,ss0=0,ssm;for(i=out.length-1,lst="t";i>=0;--i){switch(out[i].t){case"h":case"H":out[i].t=hr;lst="h";if(bt<1)bt=1;break;case"s":if(ssm=out[i].v.match(/\.0+$/))ss0=Math.max(ss0,ssm[0].length-1);if(bt<3)bt=3;case"d":case"y":case"M":case"e":lst=out[i].t;break;case"m":if(lst==="s"){out[i].t="M";if(bt<2)bt=2}break;case"X":if(out[i].v==="B2");break;case"Z":if(bt<1&&out[i].v.match(/[Hh]/))bt=1;if(bt<2&&out[i].v.match(/[Mm]/))bt=2;if(bt<3&&out[i].v.match(/[Ss]/))bt=3}}switch(bt){case 0:break;case 1:if(dt.u>=.5){dt.u=0;++dt.S}if(dt.S>=60){dt.S=0;++dt.M}if(dt.M>=60){dt.M=0;++dt.H}break;case 2:if(dt.u>=.5){dt.u=0;++dt.S}if(dt.S>=60){dt.S=0;++dt.M}break}var nstr="",jj;for(i=0;i<out.length;++i){switch(out[i].t){case"t":case"T":case" ":case"D":break;case"X":out[i]=undefined;break;case"d":case"m":case"y":case"h":case"H":case"M":case"s":case"e":case"b":case"Z":out[i].v=write_date(out[i].t.charCodeAt(0),out[i].v,dt,ss0);out[i].t="t";break;case"n":case"(":case"?":jj=i+1;while(out[jj]!=null&&((c=out[jj].t)==="?"||c==="D"||(c===" "||c==="t")&&out[jj+1]!=null&&(out[jj+1].t==="?"||out[jj+1].t==="t"&&out[jj+1].v==="/")||out[i].t==="("&&(c===" "||c==="n"||c===")")||c==="t"&&(out[jj].v==="/"||"$鈧�".indexOf(out[jj].v)>-1||out[jj].v===" "&&out[jj+1]!=null&&out[jj+1].t=="?"))){out[i].v+=out[jj].v;out[jj]=undefined;++jj}nstr+=out[i].v;i=jj-1;break;case"G":out[i].t="t";out[i].v=general_fmt(v,opts);break}}var vv="",myv,ostr;if(nstr.length>0){myv=v<0&&nstr.charCodeAt(0)===45?-v:v;ostr=write_num(nstr.charCodeAt(0)===40?"(":"n",nstr,myv);jj=ostr.length-1;var decpt=out.length;for(i=0;i<out.length;++i)if(out[i]!=null&&out[i].v.indexOf(".")>-1){decpt=i;break}var lasti=out.length;if(decpt===out.length&&ostr.indexOf("E")===-1){for(i=out.length-1;i>=0;--i){if(out[i]==null||"n?(".indexOf(out[i].t)===-1)continue;if(jj>=out[i].v.length-1){jj-=out[i].v.length;out[i].v=ostr.substr(jj+1,out[i].v.length)}else if(jj<0)out[i].v="";else{out[i].v=ostr.substr(0,jj+1);jj=-1}out[i].t="t";lasti=i}if(jj>=0&&lasti<out.length)out[lasti].v=ostr.substr(0,jj+1)+out[lasti].v}else if(decpt!==out.length&&ostr.indexOf("E")===-1){jj=ostr.indexOf(".")-1;for(i=decpt;i>=0;--i){if(out[i]==null||"n?(".indexOf(out[i].t)===-1)continue;j=out[i].v.indexOf(".")>-1&&i===decpt?out[i].v.indexOf(".")-1:out[i].v.length-1;vv=out[i].v.substr(j+1);for(;j>=0;--j){if(jj>=0&&(out[i].v[j]==="0"||out[i].v[j]==="#"))vv=ostr[jj--]+vv}out[i].v=vv;out[i].t="t";lasti=i}if(jj>=0&&lasti<out.length)out[lasti].v=ostr.substr(0,jj+1)+out[lasti].v;jj=ostr.indexOf(".")+1;for(i=decpt;i<out.length;++i){if(out[i]==null||"n?(".indexOf(out[i].t)===-1&&i!==decpt)continue;j=out[i].v.indexOf(".")>-1&&i===decpt?out[i].v.indexOf(".")+1:0;vv=out[i].v.substr(0,j);for(;j<out[i].v.length;++j){if(jj<ostr.length)vv+=ostr[jj++]}out[i].v=vv;out[i].t="t";lasti=i}}}for(i=0;i<out.length;++i)if(out[i]!=null&&"n(?".indexOf(out[i].t)>-1){myv=flen>1&&v<0&&i>0&&out[i-1].v==="-"?-v:v;out[i].v=write_num(out[i].t,out[i].v,myv);out[i].t="t"}var retval="";for(i=0;i!==out.length;++i)if(out[i]!=null)retval+=out[i].v;return retval}SSF._eval=eval_fmt;var cfregex=/\[[=<>]/;var cfregex2=/\[([=<>]*)(-?\d+\.?\d*)\]/;function chkcond(v,rr){if(rr==null)return false;var thresh=parseFloat(rr[2]);switch(rr[1]){case"=":if(v==thresh)return true;break;case">":if(v>thresh)return true;break;case"<":if(v<thresh)return true;break;case"<>":if(v!=thresh)return true;break;case">=":if(v>=thresh)return true;break;case"<=":if(v<=thresh)return true;break}return false}function choose_fmt(f,v){var fmt=split_fmt(f);var l=fmt.length,lat=fmt[l-1].indexOf("@");if(l<4&&lat>-1)--l;if(fmt.length>4)throw"cannot find right format for |"+fmt+"|";if(typeof v!=="number")return[4,fmt.length===4||lat>-1?fmt[fmt.length-1]:"@"];switch(fmt.length){case 1:fmt=lat>-1?["General","General","General",fmt[0]]:[fmt[0],fmt[0],fmt[0],"@"];break;case 2:fmt=lat>-1?[fmt[0],fmt[0],fmt[0],fmt[1]]:[fmt[0],fmt[1],fmt[0],"@"];break;case 3:fmt=lat>-1?[fmt[0],fmt[1],fmt[0],fmt[2]]:[fmt[0],fmt[1],fmt[2],"@"];break;case 4:break}var ff=v>0?fmt[0]:v<0?fmt[1]:fmt[2];if(fmt[0].indexOf("[")===-1&&fmt[1].indexOf("[")===-1)return[l,ff];if(fmt[0].match(cfregex)!=null||fmt[1].match(cfregex)!=null){var m1=fmt[0].match(cfregex2);var m2=fmt[1].match(cfregex2);return chkcond(v,m1)?[l,fmt[0]]:chkcond(v,m2)?[l,fmt[1]]:[l,fmt[m1!=null&&m2!=null?2:1]]}return[l,ff]}function format(fmt,v,o){fixopts(o!=null?o:o=[]);var sfmt="";switch(typeof fmt){case"string":sfmt=fmt;break;case"number":sfmt=(o.table!=null?o.table:table_fmt)[fmt];break}if(isgeneral(sfmt,0))return general_fmt(v,o);var f=choose_fmt(sfmt,v);if(isgeneral(f[1]))return general_fmt(v,o);if(v===true)v="TRUE";else if(v===false)v="FALSE";else if(v===""||v==null)return"";return eval_fmt(f[1],v,o,f[0])}SSF._table=table_fmt;SSF.load=function load_entry(fmt,idx){table_fmt[idx]=fmt};SSF.format=format;SSF.get_table=function get_table(){return table_fmt};SSF.load_table=function load_table(tbl){for(var i=0;i!=392;++i)if(tbl[i]!==undefined)SSF.load(tbl[i],i)}};make_ssf(SSF);var XLMLFormatMap={"General Number":"General","General Date":SSF._table[22],"Long Date":"dddd, mmmm dd, yyyy","Medium Date":SSF._table[15],"Short Date":SSF._table[14],"Long Time":SSF._table[19],"Medium Time":SSF._table[18],"Short Time":SSF._table[20],Currency:'"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',Fixed:SSF._table[2],Standard:SSF._table[4],Percent:SSF._table[10],Scientific:SSF._table[11],"Yes/No":'"Yes";"Yes";"No";@',"True/False":'"True";"True";"False";@',"On/Off":'"Yes";"Yes";"No";@'};var DO_NOT_EXPORT_CFB=true;var CFB=function _CFB(){var exports={};exports.version="0.10.2";function parse(file){var mver=3;var ssz=512;var nmfs=0;var ndfs=0;var dir_start=0;var minifat_start=0;var difat_start=0;var fat_addrs=[];var blob=file.slice(0,512);prep_blob(blob,0);var mv=check_get_mver(blob);mver=mv[0];switch(mver){case 3:ssz=512;break;case 4:ssz=4096;break;default:throw"Major Version: Expected 3 or 4 saw "+mver}if(ssz!==512){blob=file.slice(0,ssz);prep_blob(blob,28)}var header=file.slice(0,ssz);check_shifts(blob,mver);var nds=blob.read_shift(4,"i");if(mver===3&&nds!==0)throw"# Directory Sectors: Expected 0 saw "+nds;blob.l+=4;dir_start=blob.read_shift(4,"i");blob.l+=4;blob.chk("00100000","Mini Stream Cutoff Size: ");minifat_start=blob.read_shift(4,"i");nmfs=blob.read_shift(4,"i");difat_start=blob.read_shift(4,"i");ndfs=blob.read_shift(4,"i");for(var q,j=0;j<109;++j){q=blob.read_shift(4,"i");if(q<0)break;fat_addrs[j]=q}var sectors=sectorify(file,ssz);sleuth_fat(difat_start,ndfs,sectors,ssz,fat_addrs);var sector_list=make_sector_list(sectors,dir_start,fat_addrs,ssz);sector_list[dir_start].name="!Directory";if(nmfs>0&&minifat_start!==ENDOFCHAIN)sector_list[minifat_start].name="!MiniFAT";sector_list[fat_addrs[0]].name="!FAT";sector_list.fat_addrs=fat_addrs;sector_list.ssz=ssz;var files={},Paths=[],FileIndex=[],FullPaths=[],FullPathDir={};read_directory(dir_start,sector_list,sectors,Paths,nmfs,files,FileIndex);build_full_paths(FileIndex,FullPathDir,FullPaths,Paths);var root_name=Paths.shift();Paths.root=root_name;var find_path=make_find_path(FullPaths,Paths,FileIndex,files,root_name);return{raw:{header:header,sectors:sectors},FileIndex:FileIndex,FullPaths:FullPaths,FullPathDir:FullPathDir,find:find_path}}function check_get_mver(blob){blob.chk(HEADER_SIGNATURE,"Header Signature: ");blob.chk(HEADER_CLSID,"CLSID: ");var mver=blob.read_shift(2,"u");return[blob.read_shift(2,"u"),mver]}function check_shifts(blob,mver){var shift=9;blob.chk("feff","Byte Order: ");switch(shift=blob.read_shift(2)){case 9:if(mver!==3)throw"MajorVersion/SectorShift Mismatch";break;case 12:if(mver!==4)throw"MajorVersion/SectorShift Mismatch";break;default:throw"Sector Shift: Expected 9 or 12 saw "+shift}blob.chk("0600","Mini Sector Shift: ");blob.chk("000000000000","Reserved: ")}function sectorify(file,ssz){var nsectors=Math.ceil(file.length/ssz)-1;var sectors=new Array(nsectors);for(var i=1;i<nsectors;++i)sectors[i-1]=file.slice(i*ssz,(i+1)*ssz);sectors[nsectors-1]=file.slice(nsectors*ssz);return sectors}function build_full_paths(FI,FPD,FP,Paths){var i=0,L=0,R=0,C=0,j=0,pl=Paths.length;var dad=new Array(pl),q=new Array(pl);for(;i<pl;++i){dad[i]=q[i]=i;FP[i]=Paths[i]}for(;j<q.length;++j){i=q[j];L=FI[i].L;R=FI[i].R;C=FI[i].C;if(dad[i]===i){if(L!==-1&&dad[L]!==L)dad[i]=dad[L];if(R!==-1&&dad[R]!==R)dad[i]=dad[R]}if(C!==-1)dad[C]=i;if(L!==-1){dad[L]=dad[i];q.push(L)}if(R!==-1){dad[R]=dad[i];q.push(R)}}for(i=1;i!==pl;++i)if(dad[i]===i){if(R!==-1&&dad[R]!==R)dad[i]=dad[R];else if(L!==-1&&dad[L]!==L)dad[i]=dad[L]}for(i=1;i<pl;++i){if(FI[i].type===0)continue;j=dad[i];if(j===0)FP[i]=FP[0]+"/"+FP[i];else while(j!==0){FP[i]=FP[j]+"/"+FP[i];j=dad[j]}dad[i]=0}FP[0]+="/";for(i=1;i<pl;++i){if(FI[i].type!==2)FP[i]+="/";FPD[FP[i]]=FI[i]}}function make_find_path(FullPaths,Paths,FileIndex,files,root_name){var UCFullPaths=new Array(FullPaths.length);var UCPaths=new Array(Paths.length),i;for(i=0;i<FullPaths.length;++i)UCFullPaths[i]=FullPaths[i].toUpperCase().replace(chr0,"").replace(chr1,"!");for(i=0;i<Paths.length;++i)UCPaths[i]=Paths[i].toUpperCase().replace(chr0,"").replace(chr1,"!");return function find_path(path){var k;if(path.charCodeAt(0)===47){k=true;path=root_name+path}else k=path.indexOf("/")!==-1;var UCPath=path.toUpperCase().replace(chr0,"").replace(chr1,"!");var w=k===true?UCFullPaths.indexOf(UCPath):UCPaths.indexOf(UCPath);if(w===-1)return null;return k===true?FileIndex[w]:files[Paths[w]]}}function sleuth_fat(idx,cnt,sectors,ssz,fat_addrs){var q;if(idx===ENDOFCHAIN){if(cnt!==0)throw"DIFAT chain shorter than expected"}else if(idx!==-1){var sector=sectors[idx],m=(ssz>>>2)-1;for(var i=0;i<m;++i){if((q=__readInt32LE(sector,i*4))===ENDOFCHAIN)break;fat_addrs.push(q)}sleuth_fat(__readInt32LE(sector,ssz-4),cnt-1,sectors,ssz,fat_addrs)}}function get_sector_list(sectors,start,fat_addrs,ssz,chkd){var sl=sectors.length;var buf,buf_chain;if(!chkd)chkd=new Array(sl);var modulus=ssz-1,j,jj;buf=[];buf_chain=[];for(j=start;j>=0;){chkd[j]=true;buf[buf.length]=j;buf_chain.push(sectors[j]);var addr=fat_addrs[Math.floor(j*4/ssz)];jj=j*4&modulus;if(ssz<4+jj)throw"FAT boundary crossed: "+j+" 4 "+ssz;j=__readInt32LE(sectors[addr],jj)}return{nodes:buf,data:__toBuffer([buf_chain])}}function make_sector_list(sectors,dir_start,fat_addrs,ssz){var sl=sectors.length,sector_list=new Array(sl);var chkd=new Array(sl),buf,buf_chain;var modulus=ssz-1,i,j,k,jj;for(i=0;i<sl;++i){buf=[];k=i+dir_start;if(k>=sl)k-=sl;if(chkd[k]===true)continue;buf_chain=[];for(j=k;j>=0;){chkd[j]=true;buf[buf.length]=j;buf_chain.push(sectors[j]);var addr=fat_addrs[Math.floor(j*4/ssz)];jj=j*4&modulus;if(ssz<4+jj)throw"FAT boundary crossed: "+j+" 4 "+ssz;j=__readInt32LE(sectors[addr],jj)}sector_list[k]={nodes:buf,data:__toBuffer([buf_chain])}}return sector_list}function read_directory(dir_start,sector_list,sectors,Paths,nmfs,files,FileIndex){var blob;var minifat_store=0,pl=Paths.length?2:0;var sector=sector_list[dir_start].data;var i=0,namelen=0,name,o,ctime,mtime;for(;i<sector.length;i+=128){blob=sector.slice(i,i+128);prep_blob(blob,64);namelen=blob.read_shift(2);if(namelen===0)continue;name=__utf16le(blob,0,namelen-pl);Paths.push(name);o={name:name,type:blob.read_shift(1),color:blob.read_shift(1),L:blob.read_shift(4,"i"),R:blob.read_shift(4,"i"),C:blob.read_shift(4,"i"),clsid:blob.read_shift(16),state:blob.read_shift(4,"i")};ctime=blob.read_shift(2)+blob.read_shift(2)+blob.read_shift(2)+blob.read_shift(2);if(ctime!==0){o.ctime=ctime;o.ct=read_date(blob,blob.l-8)}mtime=blob.read_shift(2)+blob.read_shift(2)+blob.read_shift(2)+blob.read_shift(2);if(mtime!==0){o.mtime=mtime;o.mt=read_date(blob,blob.l-8)}o.start=blob.read_shift(4,"i");o.size=blob.read_shift(4,"i");if(o.type===5){minifat_store=o.start;if(nmfs>0&&minifat_store!==ENDOFCHAIN)sector_list[minifat_store].name="!StreamData"}else if(o.size>=4096){o.storage="fat";if(sector_list[o.start]===undefined)sector_list[o.start]=get_sector_list(sectors,o.start,sector_list.fat_addrs,sector_list.ssz);sector_list[o.start].name=o.name;o.content=sector_list[o.start].data.slice(0,o.size);prep_blob(o.content,0)}else{o.storage="minifat";if(minifat_store!==ENDOFCHAIN&&o.start!==ENDOFCHAIN){o.content=sector_list[minifat_store].data.slice(o.start*MSSZ,o.start*MSSZ+o.size);prep_blob(o.content,0)}}files[name]=o;FileIndex.push(o)}}function read_date(blob,offset){return new Date((__readUInt32LE(blob,offset+4)/1e7*Math.pow(2,32)+__readUInt32LE(blob,offset)/1e7-11644473600)*1e3)}var fs;function readFileSync(filename,options){if(fs===undefined)fs=require("fs");return parse(fs.readFileSync(filename),options)}function readSync(blob,options){switch(options!==undefined&&options.type!==undefined?options.type:"base64"){case"file":return readFileSync(blob,options);case"base64":return parse(s2a(Base64.decode(blob)),options);case"binary":return parse(s2a(blob),options)}return parse(blob)}var MSSZ=64;var ENDOFCHAIN=-2;var HEADER_SIGNATURE="d0cf11e0a1b11ae1";var HEADER_CLSID="00000000000000000000000000000000";var consts={MAXREGSECT:-6,DIFSECT:-4,FATSECT:-3,ENDOFCHAIN:ENDOFCHAIN,FREESECT:-1,HEADER_SIGNATURE:HEADER_SIGNATURE,HEADER_MINOR_VERSION:"3e00",MAXREGSID:-6,NOSTREAM:-1,HEADER_CLSID:HEADER_CLSID,EntryTypes:["unknown","storage","stream","lockbytes","property","root"]};exports.read=readSync;exports.parse=parse;exports.utils={ReadShift:ReadShift,CheckField:CheckField,prep_blob:prep_blob,bconcat:bconcat,consts:consts};return exports}();if(typeof require!=="undefined"&&typeof module!=="undefined"&&typeof DO_NOT_EXPORT_CFB==="undefined"){module.exports=CFB}function isval(x){return x!==undefined&&x!==null}function keys(o){return Object.keys(o)}function evert_key(obj,key){var o=[],K=keys(obj);for(var i=0;i!==K.length;++i)o[obj[K[i]][key]]=K[i];return o}function evert(obj){var o=[],K=keys(obj);for(var i=0;i!==K.length;++i)o[obj[K[i]]]=K[i];return o}function evert_num(obj){var o=[],K=keys(obj);for(var i=0;i!==K.length;++i)o[obj[K[i]]]=parseInt(K[i],10);return o}function evert_arr(obj){var o=[],K=keys(obj);for(var i=0;i!==K.length;++i){if(o[obj[K[i]]]==null)o[obj[K[i]]]=[];o[obj[K[i]]].push(K[i])}return o}function datenum(v,date1904){if(date1904)v+=1462;var epoch=Date.parse(v);return(epoch+22091616e5)/(24*60*60*1e3)}function cc2str(arr){var o="";for(var i=0;i!=arr.length;++i)o+=String.fromCharCode(arr[i]);return o}function getdata(data){if(!data)return null;if(data.name.substr(-4)===".bin"){if(data.data)return char_codes(data.data);if(data.asNodeBuffer&&has_buf)return data.asNodeBuffer();if(data._data&&data._data.getContent)return Array.prototype.slice.call(data._data.getContent())}else{if(data.data)return data.name.substr(-4)!==".bin"?debom_xml(data.data):char_codes(data.data);if(data.asNodeBuffer&&has_buf)return debom_xml(data.asNodeBuffer().toString("binary"));if(data.asBinary)return debom_xml(data.asBinary());if(data._data&&data._data.getContent)return debom_xml(cc2str(Array.prototype.slice.call(data._data.getContent(),0)))}return null}function safegetzipfile(zip,file){var f=file;if(zip.files[f])return zip.files[f];var lowerCaseFiles={};for(var key in zip.files){lowerCaseFiles[key.toLowerCase()]=zip.files[key]}f=file.toLowerCase();if(lowerCaseFiles[f])return lowerCaseFiles[f];f=f.replace(/\//g,"\\");if(lowerCaseFiles[f])return lowerCaseFiles[f];return null}function getzipfile(zip,file){var o=safegetzipfile(zip,file);if(o==null)throw new Error("Cannot find file "+file+" in zip");return o}function getzipdata(zip,file,safe){if(!safe)return getdata(getzipfile(zip,file));if(!file)return null;try{return getzipdata(zip,file)}catch(e){return null}}var _fs,jszip;if(typeof JSZip!=="undefined")jszip=JSZip;if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports){if(has_buf&&typeof jszip==="undefined")jszip=require("js"+"zip");if(typeof jszip==="undefined")jszip=require("./js"+"zip").JSZip;_fs=require("f"+"s")}}var attregexg=/([\w:]+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:'))/g;var tagregex=/<[^>]*>/g;var nsregex=/<\w*:/,nsregex2=/<(\/?)\w+:/;function parsexmltag(tag,skip_root){var z=[];var eq=0,c=0;for(;eq!==tag.length;++eq)if((c=tag.charCodeAt(eq))===32||c===10||c===13)break;if(!skip_root)z[0]=tag.substr(0,eq);if(eq===tag.length)return z;var m=tag.match(attregexg),j=0,w="",v="",i=0,q="",cc="";if(m)for(i=0;i!=m.length;++i){cc=m[i];for(c=0;c!=cc.length;++c)if(cc.charCodeAt(c)===61)break;q=cc.substr(0,c);v=cc.substring(c+2,cc.length-1);for(j=0;j!=q.length;++j)if(q.charCodeAt(j)===58)break;if(j===q.length)z[q]=v;else z[(j===5&&q.substr(0,5)==="xmlns"?"xmlns":"")+q.substr(j+1)]=v}return z}function strip_ns(x){return x.replace(nsregex2,"<$1")}var encodings={"&quot;":'"',"&apos;":"'","&gt;":">","&lt;":"<","&amp;":"&"};var rencoding=evert(encodings);var rencstr="&<>'\"".split("");var unescapexml=function(){var encregex=/&[a-z]*;/g,coderegex=/_x([\da-fA-F]+)_/g;return function unescapexml(text){var s=text+"";return s.replace(encregex,function($$){return encodings[$$]}).replace(coderegex,function(m,c){return String.fromCharCode(parseInt(c,16))})}}();var decregex=/[&<>'"]/g,charegex=/[\u0000-\u0008\u000b-\u001f]/g;function escapexml(text){var s=text+"";return s.replace(decregex,function(y){return rencoding[y]}).replace(charegex,function(s){return"_x"+("000"+s.charCodeAt(0).toString(16)).substr(-4)+"_"})}var xlml_fixstr=function(){var entregex=/&#(\d+);/g;function entrepl($$,$1){return String.fromCharCode(parseInt($1,10))}return function xlml_fixstr(str){return str.replace(entregex,entrepl)}}();function parsexmlbool(value,tag){switch(value){case"1":case"true":case"TRUE":return true;default:return false}}var utf8read=function utf8reada(orig){var out="",i=0,c=0,d=0,e=0,f=0,w=0;while(i<orig.length){c=orig.charCodeAt(i++);if(c<128){out+=String.fromCharCode(c);continue}d=orig.charCodeAt(i++);if(c>191&&c<224){out+=String.fromCharCode((c&31)<<6|d&63);continue}e=orig.charCodeAt(i++);if(c<240){out+=String.fromCharCode((c&15)<<12|(d&63)<<6|e&63);continue}f=orig.charCodeAt(i++);w=((c&7)<<18|(d&63)<<12|(e&63)<<6|f&63)-65536;out+=String.fromCharCode(55296+(w>>>10&1023));out+=String.fromCharCode(56320+(w&1023))}return out};if(has_buf){var utf8readb=function utf8readb(data){var out=new Buffer(2*data.length),w,i,j=1,k=0,ww=0,c;for(i=0;i<data.length;i+=j){j=1;if((c=data.charCodeAt(i))<128)w=c;else if(c<224){w=(c&31)*64+(data.charCodeAt(i+1)&63);j=2}else if(c<240){w=(c&15)*4096+(data.charCodeAt(i+1)&63)*64+(data.charCodeAt(i+2)&63);j=3}else{j=4;w=(c&7)*262144+(data.charCodeAt(i+1)&63)*4096+(data.charCodeAt(i+2)&63)*64+(data.charCodeAt(i+3)&63);w-=65536;ww=55296+(w>>>10&1023);w=56320+(w&1023)}if(ww!==0){out[k++]=ww&255;out[k++]=ww>>>8;ww=0}out[k++]=w%256;out[k++]=w>>>8}out.length=k;return out.toString("ucs2")};var corpus="foo bar baz芒聵聝冒聼聧拢";if(utf8read(corpus)==utf8readb(corpus))utf8read=utf8readb;var utf8readc=function utf8readc(data){return Buffer(data,"binary").toString("utf8")};if(utf8read(corpus)==utf8readc(corpus))utf8read=utf8readc}var matchtag=function(){var mtcache={};return function matchtag(f,g){var t=f+"|"+g;if(mtcache[t]!==undefined)return mtcache[t];return mtcache[t]=new RegExp("<(?:\\w+:)?"+f+'(?: xml:space="preserve")?(?:[^>]*)>([^鈽僝*)</(?:\\w+:)?'+f+">",g||"")}}();var vtregex=function(){var vt_cache={};return function vt_regex(bt){if(vt_cache[bt]!==undefined)return vt_cache[bt];return vt_cache[bt]=new RegExp("<vt:"+bt+">(.*?)</vt:"+bt+">","g")}}();var vtvregex=/<\/?vt:variant>/g,vtmregex=/<vt:([^>]*)>(.*)</;function parseVector(data){var h=parsexmltag(data);var matches=data.match(vtregex(h.baseType))||[];if(matches.length!=h.size)throw"unexpected vector length "+matches.length+" != "+h.size;var res=[];matches.forEach(function(x){var v=x.replace(vtvregex,"").match(vtmregex);res.push({v:v[2],t:v[1]})});return res}var wtregex=/(^\s|\s$|\n)/;function writetag(f,g){return"<"+f+(g.match(wtregex)?' xml:space="preserve"':"")+">"+g+"</"+f+">"}function wxt_helper(h){return keys(h).map(function(k){return" "+k+'="'+h[k]+'"'}).join("")}function writextag(f,g,h){return"<"+f+(isval(h)?wxt_helper(h):"")+(isval(g)?(g.match(wtregex)?' xml:space="preserve"':"")+">"+g+"</"+f:"/")+">"}function write_w3cdtf(d,t){try{return d.toISOString().replace(/\.\d*/,"")}catch(e){if(t)throw e}}function write_vt(s){
+switch(typeof s){case"string":return writextag("vt:lpwstr",s);case"number":return writextag((s|0)==s?"vt:i4":"vt:r8",String(s));case"boolean":return writextag("vt:bool",s?"true":"false")}if(s instanceof Date)return writextag("vt:filetime",write_w3cdtf(s));throw new Error("Unable to serialize "+s)}var XML_HEADER='<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\r\n';var XMLNS={dc:"http://purl.org/dc/elements/1.1/",dcterms:"http://purl.org/dc/terms/",dcmitype:"http://purl.org/dc/dcmitype/",mx:"http://schemas.microsoft.com/office/mac/excel/2008/main",r:"http://schemas.openxmlformats.org/officeDocument/2006/relationships",sjs:"http://schemas.openxmlformats.org/package/2006/sheetjs/core-properties",vt:"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes",xsi:"http://www.w3.org/2001/XMLSchema-instance",xsd:"http://www.w3.org/2001/XMLSchema"};XMLNS.main=["http://schemas.openxmlformats.org/spreadsheetml/2006/main","http://purl.oclc.org/ooxml/spreadsheetml/main","http://schemas.microsoft.com/office/excel/2006/main","http://schemas.microsoft.com/office/excel/2006/2"];function readIEEE754(buf,idx,isLE,nl,ml){if(isLE===undefined)isLE=true;if(!nl)nl=8;if(!ml&&nl===8)ml=52;var e,m,el=nl*8-ml-1,eMax=(1<<el)-1,eBias=eMax>>1;var bits=-7,d=isLE?-1:1,i=isLE?nl-1:0,s=buf[idx+i];i+=d;e=s&(1<<-bits)-1;s>>>=-bits;bits+=el;for(;bits>0;e=e*256+buf[idx+i],i+=d,bits-=8);m=e&(1<<-bits)-1;e>>>=-bits;bits+=ml;for(;bits>0;m=m*256+buf[idx+i],i+=d,bits-=8);if(e===eMax)return m?NaN:(s?-1:1)*Infinity;else if(e===0)e=1-eBias;else{m=m+Math.pow(2,ml);e=e-eBias}return(s?-1:1)*m*Math.pow(2,e-ml)}var __toBuffer,___toBuffer;__toBuffer=___toBuffer=function toBuffer_(bufs){var x=[];for(var i=0;i<bufs[0].length;++i){x.push.apply(x,bufs[0][i])}return x};var __utf16le,___utf16le;__utf16le=___utf16le=function utf16le_(b,s,e){var ss=[];for(var i=s;i<e;i+=2)ss.push(String.fromCharCode(__readUInt16LE(b,i)));return ss.join("")};var __hexlify,___hexlify;__hexlify=___hexlify=function hexlify_(b,s,l){return b.slice(s,s+l).map(function(x){return(x<16?"0":"")+x.toString(16)}).join("")};var __utf8,___utf8;__utf8=___utf8=function(b,s,e){var ss=[];for(var i=s;i<e;i++)ss.push(String.fromCharCode(__readUInt8(b,i)));return ss.join("")};var __lpstr,___lpstr;__lpstr=___lpstr=function lpstr_(b,i){var len=__readUInt32LE(b,i);return len>0?__utf8(b,i+4,i+4+len-1):""};var __lpwstr,___lpwstr;__lpwstr=___lpwstr=function lpwstr_(b,i){var len=2*__readUInt32LE(b,i);return len>0?__utf8(b,i+4,i+4+len-1):""};var __double,___double;__double=___double=function(b,idx){return readIEEE754(b,idx)};var is_buf=function is_buf_a(a){return Array.isArray(a)};if(has_buf){__utf16le=function utf16le_b(b,s,e){if(!Buffer.isBuffer(b))return ___utf16le(b,s,e);return b.toString("utf16le",s,e)};__hexlify=function(b,s,l){return Buffer.isBuffer(b)?b.toString("hex",s,s+l):___hexlify(b,s,l)};__lpstr=function lpstr_b(b,i){if(!Buffer.isBuffer(b))return ___lpstr(b,i);var len=b.readUInt32LE(i);return len>0?b.toString("utf8",i+4,i+4+len-1):""};__lpwstr=function lpwstr_b(b,i){if(!Buffer.isBuffer(b))return ___lpwstr(b,i);var len=2*b.readUInt32LE(i);return b.toString("utf16le",i+4,i+4+len-1)};__utf8=function utf8_b(s,e){return this.toString("utf8",s,e)};__toBuffer=function(bufs){return bufs[0].length>0&&Buffer.isBuffer(bufs[0][0])?Buffer.concat(bufs[0]):___toBuffer(bufs)};bconcat=function(bufs){return Buffer.isBuffer(bufs[0])?Buffer.concat(bufs):[].concat.apply([],bufs)};__double=function double_(b,i){if(Buffer.isBuffer(b))return b.readDoubleLE(i);return ___double(b,i)};is_buf=function is_buf_b(a){return Buffer.isBuffer(a)||Array.isArray(a)}}if(typeof cptable!=="undefined"){__utf16le=function(b,s,e){return cptable.utils.decode(1200,b.slice(s,e))};__utf8=function(b,s,e){return cptable.utils.decode(65001,b.slice(s,e))};__lpstr=function(b,i){var len=__readUInt32LE(b,i);return len>0?cptable.utils.decode(current_codepage,b.slice(i+4,i+4+len-1)):""};__lpwstr=function(b,i){var len=2*__readUInt32LE(b,i);return len>0?cptable.utils.decode(1200,b.slice(i+4,i+4+len-1)):""}}var __readUInt8=function(b,idx){return b[idx]};var __readUInt16LE=function(b,idx){return b[idx+1]*(1<<8)+b[idx]};var __readInt16LE=function(b,idx){var u=b[idx+1]*(1<<8)+b[idx];return u<32768?u:(65535-u+1)*-1};var __readUInt32LE=function(b,idx){return b[idx+3]*(1<<24)+(b[idx+2]<<16)+(b[idx+1]<<8)+b[idx]};var __readInt32LE=function(b,idx){return b[idx+3]<<24|b[idx+2]<<16|b[idx+1]<<8|b[idx]};var ___unhexlify=function(s){return s.match(/../g).map(function(x){return parseInt(x,16)})};var __unhexlify=typeof Buffer!=="undefined"?function(s){return Buffer.isBuffer(s)?new Buffer(s,"hex"):___unhexlify(s)}:___unhexlify;function ReadShift(size,t){var o="",oI,oR,oo=[],w,vv,i,loc;switch(t){case"dbcs":loc=this.l;if(has_buf&&Buffer.isBuffer(this))o=this.slice(this.l,this.l+2*size).toString("utf16le");else for(i=0;i!=size;++i){o+=String.fromCharCode(__readUInt16LE(this,loc));loc+=2}size*=2;break;case"utf8":o=__utf8(this,this.l,this.l+size);break;case"utf16le":size*=2;o=__utf16le(this,this.l,this.l+size);break;case"lpstr":o=__lpstr(this,this.l);size=5+o.length;break;case"lpwstr":o=__lpwstr(this,this.l);size=5+o.length;if(o[o.length-1]=="\0")size+=2;break;case"cstr":size=0;o="";while((w=__readUInt8(this,this.l+size++))!==0)oo.push(_getchar(w));o=oo.join("");break;case"wstr":size=0;o="";while((w=__readUInt16LE(this,this.l+size))!==0){oo.push(_getchar(w));size+=2}size+=2;o=oo.join("");break;case"dbcs-cont":o="";loc=this.l;for(i=0;i!=size;++i){if(this.lens&&this.lens.indexOf(loc)!==-1){w=__readUInt8(this,loc);this.l=loc+1;vv=ReadShift.call(this,size-i,w?"dbcs-cont":"sbcs-cont");return oo.join("")+vv}oo.push(_getchar(__readUInt16LE(this,loc)));loc+=2}o=oo.join("");size*=2;break;case"sbcs-cont":o="";loc=this.l;for(i=0;i!=size;++i){if(this.lens&&this.lens.indexOf(loc)!==-1){w=__readUInt8(this,loc);this.l=loc+1;vv=ReadShift.call(this,size-i,w?"dbcs-cont":"sbcs-cont");return oo.join("")+vv}oo.push(_getchar(__readUInt8(this,loc)));loc+=1}o=oo.join("");break;default:switch(size){case 1:oI=__readUInt8(this,this.l);this.l++;return oI;case 2:oI=(t==="i"?__readInt16LE:__readUInt16LE)(this,this.l);this.l+=2;return oI;case 4:if(t==="i"||(this[this.l+3]&128)===0){oI=__readInt32LE(this,this.l);this.l+=4;return oI}else{oR=__readUInt32LE(this,this.l);this.l+=4;return oR}break;case 8:if(t==="f"){oR=__double(this,this.l);this.l+=8;return oR}case 16:o=__hexlify(this,this.l,size);break}}this.l+=size;return o}function WriteShift(t,val,f){var size,i;if(f==="dbcs"){for(i=0;i!=val.length;++i)this.writeUInt16LE(val.charCodeAt(i),this.l+2*i);size=2*val.length}else switch(t){case 1:size=1;this[this.l]=val&255;break;case 3:size=3;this[this.l+2]=val&255;val>>>=8;this[this.l+1]=val&255;val>>>=8;this[this.l]=val&255;break;case 4:size=4;this.writeUInt32LE(val,this.l);break;case 8:size=8;if(f==="f"){this.writeDoubleLE(val,this.l);break}case 16:break;case-4:size=4;this.writeInt32LE(val,this.l);break}this.l+=size;return this}function CheckField(hexstr,fld){var m=__hexlify(this,this.l,hexstr.length>>1);if(m!==hexstr)throw fld+"Expected "+hexstr+" saw "+m;this.l+=hexstr.length>>1}function prep_blob(blob,pos){blob.l=pos;blob.read_shift=ReadShift;blob.chk=CheckField;blob.write_shift=WriteShift}function parsenoop(blob,length){blob.l+=length}function writenoop(blob,length){blob.l+=length}function new_buf(sz){var o=new_raw_buf(sz);prep_blob(o,0);return o}function recordhopper(data,cb,opts){var tmpbyte,cntbyte,length;prep_blob(data,data.l||0);while(data.l<data.length){var RT=data.read_shift(1);if(RT&128)RT=(RT&127)+((data.read_shift(1)&127)<<7);var R=XLSBRecordEnum[RT]||XLSBRecordEnum[65535];tmpbyte=data.read_shift(1);length=tmpbyte&127;for(cntbyte=1;cntbyte<4&&tmpbyte&128;++cntbyte)length+=((tmpbyte=data.read_shift(1))&127)<<7*cntbyte;var d=R.f(data,length,opts);if(cb(d,R,RT))return}}function buf_array(){var bufs=[],blksz=2048;var newblk=function ba_newblk(sz){var o=new_buf(sz);prep_blob(o,0);return o};var curbuf=newblk(blksz);var endbuf=function ba_endbuf(){curbuf.length=curbuf.l;if(curbuf.length>0)bufs.push(curbuf);curbuf=null};var next=function ba_next(sz){if(sz<curbuf.length-curbuf.l)return curbuf;endbuf();return curbuf=newblk(Math.max(sz+1,blksz))};var end=function ba_end(){endbuf();return __toBuffer([bufs])};var push=function ba_push(buf){endbuf();curbuf=buf;next(blksz)};return{next:next,push:push,end:end,_bufs:bufs}}function write_record(ba,type,payload,length){var t=evert_RE[type],l;if(!length)length=XLSBRecordEnum[t].p||(payload||[]).length||0;l=1+(t>=128?1:0)+1+length;if(length>=128)++l;if(length>=16384)++l;if(length>=2097152)++l;var o=ba.next(l);if(t<=127)o.write_shift(1,t);else{o.write_shift(1,(t&127)+128);o.write_shift(1,t>>7)}for(var i=0;i!=4;++i){if(length>=128){o.write_shift(1,(length&127)+128);length>>=7}else{o.write_shift(1,length);break}}if(length>0&&is_buf(payload))ba.push(payload)}function shift_cell_xls(cell,tgt){if(tgt.s){if(cell.cRel)cell.c+=tgt.s.c;if(cell.rRel)cell.r+=tgt.s.r}else{cell.c+=tgt.c;cell.r+=tgt.r}cell.cRel=cell.rRel=0;while(cell.c>=256)cell.c-=256;while(cell.r>=65536)cell.r-=65536;return cell}function shift_range_xls(cell,range){cell.s=shift_cell_xls(cell.s,range.s);cell.e=shift_cell_xls(cell.e,range.s);return cell}var OFFCRYPTO={};var make_offcrypto=function(O,_crypto){var crypto;if(typeof _crypto!=="undefined")crypto=_crypto;else if(typeof require!=="undefined"){try{crypto=require("cry"+"pto")}catch(e){crypto=null}}O.rc4=function(key,data){var S=new Array(256);var c=0,i=0,j=0,t=0;for(i=0;i!=256;++i)S[i]=i;for(i=0;i!=256;++i){j=j+S[i]+key[i%key.length].charCodeAt(0)&255;t=S[i];S[i]=S[j];S[j]=t}i=j=0;out=Buffer(data.length);for(c=0;c!=data.length;++c){i=i+1&255;j=(j+S[i])%256;t=S[i];S[i]=S[j];S[j]=t;out[c]=data[c]^S[S[i]+S[j]&255]}return out};if(crypto){O.md5=function(hex){return crypto.createHash("md5").update(hex).digest("hex")}}else{O.md5=function(hex){throw"unimplemented"}}};make_offcrypto(OFFCRYPTO,typeof crypto!=="undefined"?crypto:undefined);function parse_StrRun(data,length){return{ich:data.read_shift(2),ifnt:data.read_shift(2)}}function parse_RichStr(data,length){var start=data.l;var flags=data.read_shift(1);var str=parse_XLWideString(data);var rgsStrRun=[];var z={t:str,h:str};if((flags&1)!==0){var dwSizeStrRun=data.read_shift(4);for(var i=0;i!=dwSizeStrRun;++i)rgsStrRun.push(parse_StrRun(data));z.r=rgsStrRun}else z.r="<t>"+escapexml(str)+"</t>";if((flags&2)!==0){}data.l=start+length;return z}function write_RichStr(str,o){if(o==null)o=new_buf(5+2*str.t.length);o.write_shift(1,0);write_XLWideString(str.t,o);return o}function parse_XLSBCell(data){var col=data.read_shift(4);var iStyleRef=data.read_shift(2);iStyleRef+=data.read_shift(1)<<16;var fPhShow=data.read_shift(1);return{c:col,iStyleRef:iStyleRef}}function write_XLSBCell(cell,o){if(o==null)o=new_buf(8);o.write_shift(-4,cell.c);o.write_shift(3,cell.iStyleRef===undefined?cell.iStyleRef:cell.s);o.write_shift(1,0);return o}function parse_XLSBCodeName(data,length){return parse_XLWideString(data,length)}function parse_XLNullableWideString(data){var cchCharacters=data.read_shift(4);return cchCharacters===0||cchCharacters===4294967295?"":data.read_shift(cchCharacters,"dbcs")}function write_XLNullableWideString(data,o){if(!o)o=new_buf(127);o.write_shift(4,data.length>0?data.length:4294967295);if(data.length>0)o.write_shift(0,data,"dbcs");return o}function parse_XLWideString(data){var cchCharacters=data.read_shift(4);return cchCharacters===0?"":data.read_shift(cchCharacters,"dbcs")}function write_XLWideString(data,o){if(o==null)o=new_buf(4+2*data.length);o.write_shift(4,data.length);if(data.length>0)o.write_shift(0,data,"dbcs");return o}var parse_RelID=parse_XLNullableWideString;var write_RelID=write_XLNullableWideString;function parse_RkNumber(data){var b=data.slice(data.l,data.l+4);var fX100=b[0]&1,fInt=b[0]&2;data.l+=4;b[0]&=252;var RK=fInt===0?__double([0,0,0,0,b[0],b[1],b[2],b[3]],0):__readInt32LE(b,0)>>2;return fX100?RK/100:RK}function parse_UncheckedRfX(data){var cell={s:{},e:{}};cell.s.r=data.read_shift(4);cell.e.r=data.read_shift(4);cell.s.c=data.read_shift(4);cell.e.c=data.read_shift(4);return cell}function write_UncheckedRfX(r,o){if(!o)o=new_buf(16);o.write_shift(4,r.s.r);o.write_shift(4,r.e.r);o.write_shift(4,r.s.c);o.write_shift(4,r.e.c);return o}function parse_Xnum(data,length){return data.read_shift(8,"f")}function write_Xnum(data,o){return(o||new_buf(8)).write_shift(8,"f",data)}var BErr={0:"#NULL!",7:"#DIV/0!",15:"#VALUE!",23:"#REF!",29:"#NAME?",36:"#NUM!",42:"#N/A",43:"#GETTING_DATA",255:"#WTF?"};var RBErr=evert_num(BErr);function parse_BrtColor(data,length){var out={};var d=data.read_shift(1);out.fValidRGB=d&1;out.xColorType=d>>>1;out.index=data.read_shift(1);out.nTintAndShade=data.read_shift(2,"i");out.bRed=data.read_shift(1);out.bGreen=data.read_shift(1);out.bBlue=data.read_shift(1);out.bAlpha=data.read_shift(1)}function parse_FontFlags(data,length){var d=data.read_shift(1);data.l++;var out={fItalic:d&2,fStrikeout:d&8,fOutline:d&16,fShadow:d&32,fCondense:d&64,fExtend:d&128};return out}{var VT_EMPTY=0;var VT_NULL=1;var VT_I2=2;var VT_I4=3;var VT_R4=4;var VT_R8=5;var VT_CY=6;var VT_DATE=7;var VT_BSTR=8;var VT_ERROR=10;var VT_BOOL=11;var VT_VARIANT=12;var VT_DECIMAL=14;var VT_I1=16;var VT_UI1=17;var VT_UI2=18;var VT_UI4=19;var VT_I8=20;var VT_UI8=21;var VT_INT=22;var VT_UINT=23;var VT_LPSTR=30;var VT_LPWSTR=31;var VT_FILETIME=64;var VT_BLOB=65;var VT_STREAM=66;var VT_STORAGE=67;var VT_STREAMED_Object=68;var VT_STORED_Object=69;var VT_BLOB_Object=70;var VT_CF=71;var VT_CLSID=72;var VT_VERSIONED_STREAM=73;var VT_VECTOR=4096;var VT_ARRAY=8192;var VT_STRING=80;var VT_USTR=81;var VT_CUSTOM=[VT_STRING,VT_USTR]}var DocSummaryPIDDSI={1:{n:"CodePage",t:VT_I2},2:{n:"Category",t:VT_STRING},3:{n:"PresentationFormat",t:VT_STRING},4:{n:"ByteCount",t:VT_I4},5:{n:"LineCount",t:VT_I4},6:{n:"ParagraphCount",t:VT_I4},7:{n:"SlideCount",t:VT_I4},8:{n:"NoteCount",t:VT_I4},9:{n:"HiddenCount",t:VT_I4},10:{n:"MultimediaClipCount",t:VT_I4},11:{n:"Scale",t:VT_BOOL},12:{n:"HeadingPair",t:VT_VECTOR|VT_VARIANT},13:{n:"DocParts",t:VT_VECTOR|VT_LPSTR},14:{n:"Manager",t:VT_STRING},15:{n:"Company",t:VT_STRING},16:{n:"LinksDirty",t:VT_BOOL},17:{n:"CharacterCount",t:VT_I4},19:{n:"SharedDoc",t:VT_BOOL},22:{n:"HLinksChanged",t:VT_BOOL},23:{n:"AppVersion",t:VT_I4,p:"version"},26:{n:"ContentType",t:VT_STRING},27:{n:"ContentStatus",t:VT_STRING},28:{n:"Language",t:VT_STRING},29:{n:"Version",t:VT_STRING},255:{}};var SummaryPIDSI={1:{n:"CodePage",t:VT_I2},2:{n:"Title",t:VT_STRING},3:{n:"Subject",t:VT_STRING},4:{n:"Author",t:VT_STRING},5:{n:"Keywords",t:VT_STRING},6:{n:"Comments",t:VT_STRING},7:{n:"Template",t:VT_STRING},8:{n:"LastAuthor",t:VT_STRING},9:{n:"RevNumber",t:VT_STRING},10:{n:"EditTime",t:VT_FILETIME},11:{n:"LastPrinted",t:VT_FILETIME},12:{n:"CreatedDate",t:VT_FILETIME},13:{n:"ModifiedDate",t:VT_FILETIME},14:{n:"PageCount",t:VT_I4},15:{n:"WordCount",t:VT_I4},16:{n:"CharCount",t:VT_I4},17:{n:"Thumbnail",t:VT_CF},18:{n:"ApplicationName",t:VT_LPSTR},19:{n:"DocumentSecurity",t:VT_I4},255:{}};var SpecialProperties={2147483648:{n:"Locale",t:VT_UI4},2147483651:{n:"Behavior",t:VT_UI4},1919054434:{}};(function(){for(var y in SpecialProperties)if(SpecialProperties.hasOwnProperty(y))DocSummaryPIDDSI[y]=SummaryPIDSI[y]=SpecialProperties[y]})();var CountryEnum={1:"US",2:"CA",3:"",7:"RU",20:"EG",30:"GR",31:"NL",32:"BE",33:"FR",34:"ES",36:"HU",39:"IT",41:"CH",43:"AT",44:"GB",45:"DK",46:"SE",47:"NO",48:"PL",49:"DE",52:"MX",55:"BR",61:"AU",64:"NZ",66:"TH",81:"JP",82:"KR",84:"VN",86:"CN",90:"TR",105:"JS",213:"DZ",216:"MA",218:"LY",351:"PT",354:"IS",358:"FI",420:"CZ",886:"TW",961:"LB",962:"JO",963:"SY",964:"IQ",965:"KW",966:"SA",971:"AE",972:"IL",974:"QA",981:"IR",65535:"US"};var XLSFillPattern=[null,"solid","mediumGray","darkGray","lightGray","darkHorizontal","darkVertical","darkDown","darkUp","darkGrid","darkTrellis","lightHorizontal","lightVertical","lightDown","lightUp","lightGrid","lightTrellis","gray125","gray0625"];function rgbify(arr){return arr.map(function(x){return[x>>16&255,x>>8&255,x&255]})}var XLSIcv=rgbify([0,16777215,16711680,65280,255,16776960,16711935,65535,0,16777215,16711680,65280,255,16776960,16711935,65535,8388608,32768,128,8421376,8388736,32896,12632256,8421504,10066431,10040166,16777164,13434879,6684774,16744576,26316,13421823,128,16711935,16776960,65535,8388736,8388608,32896,255,52479,13434879,13434828,16777113,10079487,16751052,13408767,16764057,3368703,3394764,10079232,16763904,16750848,16737792,6710937,9868950,13158,3381606,13056,3355392,10040064,10040166,3355545,3355443,16777215,0]);var ct2type={"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":"workbooks","application/vnd.ms-excel.binIndexWs":"TODO","application/vnd.ms-excel.chartsheet":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":"TODO","application/vnd.ms-excel.dialogsheet":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":"TODO","application/vnd.ms-excel.macrosheet":"TODO","application/vnd.ms-excel.macrosheet+xml":"TODO","application/vnd.ms-excel.intlmacrosheet":"TODO","application/vnd.ms-excel.binIndexMs":"TODO","application/vnd.openxmlformats-package.core-properties+xml":"coreprops","application/vnd.openxmlformats-officedocument.custom-properties+xml":"custprops","application/vnd.openxmlformats-officedocument.extended-properties+xml":"extprops","application/vnd.openxmlformats-officedocument.customXmlProperties+xml":"TODO","application/vnd.ms-excel.comments":"comments","application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":"comments","application/vnd.ms-excel.pivotTable":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml":"TODO","application/vnd.ms-excel.calcChain":"calcchains","application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml":"calcchains","application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings":"TODO","application/vnd.ms-office.activeX":"TODO","application/vnd.ms-office.activeX+xml":"TODO","application/vnd.ms-excel.attachedToolbars":"TODO","application/vnd.ms-excel.connections":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":"TODO","application/vnd.ms-excel.externalLink":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml":"TODO","application/vnd.ms-excel.sheetMetadata":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml":"TODO","application/vnd.ms-excel.pivotCacheDefinition":"TODO","application/vnd.ms-excel.pivotCacheRecords":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml":"TODO","application/vnd.ms-excel.queryTable":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml":"TODO","application/vnd.ms-excel.userNames":"TODO","application/vnd.ms-excel.revisionHeaders":"TODO","application/vnd.ms-excel.revisionLog":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml":"TODO","application/vnd.ms-excel.tableSingleCells":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml":"TODO","application/vnd.ms-excel.slicer":"TODO","application/vnd.ms-excel.slicerCache":"TODO","application/vnd.ms-excel.slicer+xml":"TODO","application/vnd.ms-excel.slicerCache+xml":"TODO","application/vnd.ms-excel.wsSortMap":"TODO","application/vnd.ms-excel.table":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":"TODO","application/vnd.openxmlformats-officedocument.theme+xml":"themes","application/vnd.ms-excel.Timeline+xml":"TODO","application/vnd.ms-excel.TimelineCache+xml":"TODO","application/vnd.ms-office.vbaProject":"vba","application/vnd.ms-office.vbaProjectSignature":"vba","application/vnd.ms-office.volatileDependencies":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml":"TODO","application/vnd.ms-excel.controlproperties+xml":"TODO","application/vnd.openxmlformats-officedocument.model+data":"TODO","application/vnd.ms-excel.Survey+xml":"TODO","application/vnd.openxmlformats-officedocument.drawing+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.chart+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml":"TODO","application/vnd.openxmlformats-officedocument.vmlDrawing":"TODO","application/vnd.openxmlformats-package.relationships+xml":"rels","application/vnd.openxmlformats-officedocument.oleObject":"TODO",sheet:"js"};var CT_LIST=function(){var o={workbooks:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml",xlsm:"application/vnd.ms-excel.sheet.macroEnabled.main+xml",xlsb:"application/vnd.ms-excel.sheet.binary.macroEnabled.main",xltx:"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml"},strs:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml",xlsb:"application/vnd.ms-excel.sharedStrings"},sheets:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml",xlsb:"application/vnd.ms-excel.worksheet"},styles:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml",xlsb:"application/vnd.ms-excel.styles"}};keys(o).forEach(function(k){if(!o[k].xlsm)o[k].xlsm=o[k].xlsx});keys(o).forEach(function(k){keys(o[k]).forEach(function(v){ct2type[o[k][v]]=k})});return o}();var type2ct=evert_arr(ct2type);XMLNS.CT="http://schemas.openxmlformats.org/package/2006/content-types";function parse_ct(data,opts){var ctext={};if(!data||!data.match)return data;var ct={workbooks:[],sheets:[],calcchains:[],themes:[],styles:[],coreprops:[],extprops:[],custprops:[],strs:[],comments:[],vba:[],TODO:[],rels:[],xmlns:""};(data.match(tagregex)||[]).forEach(function(x){var y=parsexmltag(x);switch(y[0].replace(nsregex,"<")){case"<?xml":break;case"<Types":ct.xmlns=y["xmlns"+(y[0].match(/<(\w+):/)||["",""])[1]];break;case"<Default":ctext[y.Extension]=y.ContentType;break;case"<Override":if(ct[ct2type[y.ContentType]]!==undefined)ct[ct2type[y.ContentType]].push(y.PartName);else if(opts.WTF)console.error(y);break}});if(ct.xmlns!==XMLNS.CT)throw new Error("Unknown Namespace: "+ct.xmlns);ct.calcchain=ct.calcchains.length>0?ct.calcchains[0]:"";ct.sst=ct.strs.length>0?ct.strs[0]:"";ct.style=ct.styles.length>0?ct.styles[0]:"";ct.defaults=ctext;delete ct.calcchains;return ct}var CTYPE_XML_ROOT=writextag("Types",null,{xmlns:XMLNS.CT,"xmlns:xsd":XMLNS.xsd,"xmlns:xsi":XMLNS.xsi});var CTYPE_DEFAULTS=[["xml","application/xml"],["bin","application/vnd.ms-excel.sheet.binary.macroEnabled.main"],["rels",type2ct.rels[0]]].map(function(x){return writextag("Default",null,{Extension:x[0],ContentType:x[1]})});function write_ct(ct,opts){var o=[],v;o[o.length]=XML_HEADER;o[o.length]=CTYPE_XML_ROOT;o=o.concat(CTYPE_DEFAULTS);var f1=function(w){if(ct[w]&&ct[w].length>0){v=ct[w][0];o[o.length]=writextag("Override",null,{PartName:(v[0]=="/"?"":"/")+v,ContentType:CT_LIST[w][opts.bookType||"xlsx"]})}};var f2=function(w){ct[w].forEach(function(v){o[o.length]=writextag("Override",null,{PartName:(v[0]=="/"?"":"/")+v,ContentType:CT_LIST[w][opts.bookType||"xlsx"]})})};var f3=function(t){(ct[t]||[]).forEach(function(v){o[o.length]=writextag("Override",null,{PartName:(v[0]=="/"?"":"/")+v,ContentType:type2ct[t][0]})})};f1("workbooks");f2("sheets");f3("themes");["strs","styles"].forEach(f1);["coreprops","extprops","custprops"].forEach(f3);if(o.length>2){o[o.length]="</Types>";o[1]=o[1].replace("/>",">")}return o.join("")}var RELS={WB:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",SHEET:"http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument"};function parse_rels(data,currentFilePath){if(!data)return data;if(currentFilePath.charAt(0)!=="/"){currentFilePath="/"+currentFilePath}var rels={};var hash={};var resolveRelativePathIntoAbsolute=function(to){var toksFrom=currentFilePath.split("/");toksFrom.pop();var toksTo=to.split("/");var reversed=[];while(toksTo.length!==0){var tokTo=toksTo.shift();if(tokTo===".."){toksFrom.pop()}else if(tokTo!=="."){toksFrom.push(tokTo)}}return toksFrom.join("/")};data.match(tagregex).forEach(function(x){var y=parsexmltag(x);if(y[0]==="<Relationship"){var rel={};rel.Type=y.Type;rel.Target=y.Target;rel.Id=y.Id;rel.TargetMode=y.TargetMode;var canonictarget=y.TargetMode==="External"?y.Target:resolveRelativePathIntoAbsolute(y.Target);rels[canonictarget]=rel;hash[y.Id]=rel}});rels["!id"]=hash;return rels}XMLNS.RELS="http://schemas.openxmlformats.org/package/2006/relationships";var RELS_ROOT=writextag("Relationships",null,{xmlns:XMLNS.RELS});function write_rels(rels){var o=[];o[o.length]=XML_HEADER;o[o.length]=RELS_ROOT;keys(rels["!id"]).forEach(function(rid){var rel=rels["!id"][rid];o[o.length]=writextag("Relationship",null,rel)});if(o.length>2){o[o.length]="</Relationships>";o[1]=o[1].replace("/>",">")}return o.join("")}var CORE_PROPS=[["cp:category","Category"],["cp:contentStatus","ContentStatus"],["cp:keywords","Keywords"],["cp:lastModifiedBy","LastAuthor"],["cp:lastPrinted","LastPrinted"],["cp:revision","RevNumber"],["cp:version","Version"],["dc:creator","Author"],["dc:description","Comments"],["dc:identifier","Identifier"],["dc:language","Language"],["dc:subject","Subject"],["dc:title","Title"],["dcterms:created","CreatedDate","date"],["dcterms:modified","ModifiedDate","date"]];XMLNS.CORE_PROPS="http://schemas.openxmlformats.org/package/2006/metadata/core-properties";RELS.CORE_PROPS="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties";var CORE_PROPS_REGEX=function(){var r=new Array(CORE_PROPS.length);for(var i=0;i<CORE_PROPS.length;++i){var f=CORE_PROPS[i];var g="(?:"+f[0].substr(0,f[0].indexOf(":"))+":)"+f[0].substr(f[0].indexOf(":")+1);r[i]=new RegExp("<"+g+"[^>]*>(.*)</"+g+">")}return r}();function parse_core_props(data){var p={};for(var i=0;i<CORE_PROPS.length;++i){var f=CORE_PROPS[i],cur=data.match(CORE_PROPS_REGEX[i]);if(cur!=null&&cur.length>0)p[f[1]]=cur[1];if(f[2]==="date"&&p[f[1]])p[f[1]]=new Date(p[f[1]])}return p}var CORE_PROPS_XML_ROOT=writextag("cp:coreProperties",null,{"xmlns:cp":XMLNS.CORE_PROPS,"xmlns:dc":XMLNS.dc,"xmlns:dcterms":XMLNS.dcterms,"xmlns:dcmitype":XMLNS.dcmitype,"xmlns:xsi":XMLNS.xsi});function cp_doit(f,g,h,o,p){if(p[f]!=null||g==null||g==="")return;p[f]=g;o[o.length]=h?writextag(f,g,h):writetag(f,g)}function write_core_props(cp,opts){var o=[XML_HEADER,CORE_PROPS_XML_ROOT],p={};if(opts&&opts.Props){if(opts.Props.title)o[o.length]="<dc:title>"+opts.Props.title+"</dc:title>";if(opts.Props.subject)o[o.length]="<dc:subject>"+opts.Props.subject+"</dc:subject>";if(opts.Props.creator)o[o.length]="<dc:creator>"+opts.Props.creator+"</dc:creator>";if(opts.Props.keywords)o[o.length]="<cp:keywords>"+opts.Props.keywords+"</cp:keywords>";if(opts.Props.description)o[o.length]="<dc:description>"+opts.Props.description+"</dc:description>"}if(cp){if(cp.CreatedDate!=null)cp_doit("dcterms:created",typeof cp.CreatedDate==="string"?cp.CreatedDate:write_w3cdtf(cp.CreatedDate,opts.WTF),{"xsi:type":"dcterms:W3CDTF"},o,p);if(cp.ModifiedDate!=null)cp_doit("dcterms:modified",typeof cp.ModifiedDate==="string"?cp.ModifiedDate:write_w3cdtf(cp.ModifiedDate,opts.WTF),{"xsi:type":"dcterms:W3CDTF"},o,p);for(var i=0;i!=CORE_PROPS.length;++i){var f=CORE_PROPS[i];cp_doit(f[0],cp[f[1]],null,o,p)}}if(o.length>2){o[o.length]="</cp:coreProperties>";o[1]=o[1].replace("/>",">")}return o.join("")}var EXT_PROPS=[["Application","Application","string"],["AppVersion","AppVersion","string"],["Company","Company","string"],["DocSecurity","DocSecurity","string"],["Manager","Manager","string"],["HyperlinksChanged","HyperlinksChanged","bool"],["SharedDoc","SharedDoc","bool"],["LinksUpToDate","LinksUpToDate","bool"],["ScaleCrop","ScaleCrop","bool"],["HeadingPairs","HeadingPairs","raw"],["TitlesOfParts","TitlesOfParts","raw"]];XMLNS.EXT_PROPS="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties";RELS.EXT_PROPS="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties";function parse_ext_props(data,p){var q={};if(!p)p={};EXT_PROPS.forEach(function(f){switch(f[2]){case"string":p[f[1]]=(data.match(matchtag(f[0]))||[])[1];break;case"bool":p[f[1]]=(data.match(matchtag(f[0]))||[])[1]==="true";break;case"raw":var cur=data.match(new RegExp("<"+f[0]+"[^>]*>(.*)</"+f[0]+">"));if(cur&&cur.length>0)q[f[1]]=cur[1];break}});if(q.HeadingPairs&&q.TitlesOfParts){var v=parseVector(q.HeadingPairs);var j=0,widx=0;for(var i=0;i!==v.length;++i){switch(v[i].v){case"Worksheets":widx=j;p.Worksheets=+v[++i].v;break;case"Named Ranges":++i;break}}var parts=parseVector(q.TitlesOfParts).map(function(x){return utf8read(x.v)});p.SheetNames=parts.slice(widx,widx+p.Worksheets)}return p}var EXT_PROPS_XML_ROOT=writextag("Properties",null,{xmlns:XMLNS.EXT_PROPS,"xmlns:vt":XMLNS.vt});function write_ext_props(cp,opts){var o=[],p={},W=writextag;if(!cp)cp={};cp.Application="SheetJS";o[o.length]=XML_HEADER;o[o.length]=EXT_PROPS_XML_ROOT;EXT_PROPS.forEach(function(f){if(cp[f[1]]===undefined)return;var v;switch(f[2]){case"string":v=cp[f[1]];break;case"bool":v=cp[f[1]]?"true":"false";break}if(v!==undefined)o[o.length]=W(f[0],v)});o[o.length]=W("HeadingPairs",W("vt:vector",W("vt:variant","<vt:lpstr>Worksheets</vt:lpstr>")+W("vt:variant",W("vt:i4",String(cp.Worksheets))),{size:2,baseType:"variant"}));o[o.length]=W("TitlesOfParts",W("vt:vector",cp.SheetNames.map(function(s){return"<vt:lpstr>"+s+"</vt:lpstr>"}).join(""),{size:cp.Worksheets,baseType:"lpstr"}));if(o.length>2){o[o.length]="</Properties>";o[1]=o[1].replace("/>",">")}return o.join("")}XMLNS.CUST_PROPS="http://schemas.openxmlformats.org/officeDocument/2006/custom-properties";RELS.CUST_PROPS="http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties";var custregex=/<[^>]+>[^<]*/g;function parse_cust_props(data,opts){var p={},name;var m=data.match(custregex);if(m)for(var i=0;i!=m.length;++i){var x=m[i],y=parsexmltag(x);switch(y[0]){case"<?xml":break;case"<Properties":if(y.xmlns!==XMLNS.CUST_PROPS)throw"unrecognized xmlns "+y.xmlns;if(y.xmlnsvt&&y.xmlnsvt!==XMLNS.vt)throw"unrecognized vt "+y.xmlnsvt;break;case"<property":name=y.name;break;case"</property>":name=null;break;default:if(x.indexOf("<vt:")===0){var toks=x.split(">");var type=toks[0].substring(4),text=toks[1];switch(type){case"lpstr":case"lpwstr":case"bstr":case"lpwstr":p[name]=unescapexml(text);break;case"bool":p[name]=parsexmlbool(text,"<vt:bool>");break;case"i1":case"i2":case"i4":case"i8":case"int":case"uint":p[name]=parseInt(text,10);break;case"r4":case"r8":case"decimal":p[name]=parseFloat(text);break;case"filetime":case"date":p[name]=new Date(text);break;case"cy":case"error":p[name]=unescapexml(text);break;default:if(typeof console!=="undefined")console.warn("Unexpected",x,type,toks)}}else if(x.substr(0,2)==="</"){}else if(opts.WTF)throw new Error(x)}}return p}var CUST_PROPS_XML_ROOT=writextag("Properties",null,{xmlns:XMLNS.CUST_PROPS,"xmlns:vt":XMLNS.vt});function write_cust_props(cp,opts){var o=[XML_HEADER,CUST_PROPS_XML_ROOT];if(!cp)return o.join("");var pid=1;keys(cp).forEach(function custprop(k){++pid;o[o.length]=writextag("property",write_vt(cp[k]),{fmtid:"{D5CDD505-2E9C-101B-9397-08002B2CF9AE}",pid:pid,name:k})});if(o.length>2){
+o[o.length]="</Properties>";o[1]=o[1].replace("/>",">")}return o.join("")}function xlml_set_prop(Props,tag,val){switch(tag){case"Description":tag="Comments";break}Props[tag]=val}function parse_FILETIME(blob){var dwLowDateTime=blob.read_shift(4),dwHighDateTime=blob.read_shift(4);return new Date((dwHighDateTime/1e7*Math.pow(2,32)+dwLowDateTime/1e7-11644473600)*1e3).toISOString().replace(/\.000/,"")}function parse_lpstr(blob,type,pad){var str=blob.read_shift(0,"lpstr");if(pad)blob.l+=4-(str.length+1&3)&3;return str}function parse_lpwstr(blob,type,pad){var str=blob.read_shift(0,"lpwstr");if(pad)blob.l+=4-(str.length+1&3)&3;return str}function parse_VtStringBase(blob,stringType,pad){if(stringType===31)return parse_lpwstr(blob);return parse_lpstr(blob,stringType,pad)}function parse_VtString(blob,t,pad){return parse_VtStringBase(blob,t,pad===false?0:4)}function parse_VtUnalignedString(blob,t){if(!t)throw new Error("dafuq?");return parse_VtStringBase(blob,t,0)}function parse_VtVecUnalignedLpstrValue(blob){var length=blob.read_shift(4);var ret=[];for(var i=0;i!=length;++i)ret[i]=blob.read_shift(0,"lpstr");return ret}function parse_VtVecUnalignedLpstr(blob){return parse_VtVecUnalignedLpstrValue(blob)}function parse_VtHeadingPair(blob){var headingString=parse_TypedPropertyValue(blob,VT_USTR);var headerParts=parse_TypedPropertyValue(blob,VT_I4);return[headingString,headerParts]}function parse_VtVecHeadingPairValue(blob){var cElements=blob.read_shift(4);var out=[];for(var i=0;i!=cElements/2;++i)out.push(parse_VtHeadingPair(blob));return out}function parse_VtVecHeadingPair(blob){return parse_VtVecHeadingPairValue(blob)}function parse_dictionary(blob,CodePage){var cnt=blob.read_shift(4);var dict={};for(var j=0;j!=cnt;++j){var pid=blob.read_shift(4);var len=blob.read_shift(4);dict[pid]=blob.read_shift(len,CodePage===1200?"utf16le":"utf8").replace(chr0,"").replace(chr1,"!")}if(blob.l&3)blob.l=blob.l>>2+1<<2;return dict}function parse_BLOB(blob){var size=blob.read_shift(4);var bytes=blob.slice(blob.l,blob.l+size);if(size&3>0)blob.l+=4-(size&3)&3;return bytes}function parse_ClipboardData(blob){var o={};o.Size=blob.read_shift(4);blob.l+=o.Size;return o}function parse_VtVector(blob,cb){}function parse_TypedPropertyValue(blob,type,_opts){var t=blob.read_shift(2),ret,opts=_opts||{};blob.l+=2;if(type!==VT_VARIANT)if(t!==type&&VT_CUSTOM.indexOf(type)===-1)throw new Error("Expected type "+type+" saw "+t);switch(type===VT_VARIANT?t:type){case 2:ret=blob.read_shift(2,"i");if(!opts.raw)blob.l+=2;return ret;case 3:ret=blob.read_shift(4,"i");return ret;case 11:return blob.read_shift(4)!==0;case 19:ret=blob.read_shift(4);return ret;case 30:return parse_lpstr(blob,t,4).replace(chr0,"");case 31:return parse_lpwstr(blob);case 64:return parse_FILETIME(blob);case 65:return parse_BLOB(blob);case 71:return parse_ClipboardData(blob);case 80:return parse_VtString(blob,t,!opts.raw&&4).replace(chr0,"");case 81:return parse_VtUnalignedString(blob,t,4).replace(chr0,"");case 4108:return parse_VtVecHeadingPair(blob);case 4126:return parse_VtVecUnalignedLpstr(blob);default:throw new Error("TypedPropertyValue unrecognized type "+type+" "+t)}}function parse_PropertySet(blob,PIDSI){var start_addr=blob.l;var size=blob.read_shift(4);var NumProps=blob.read_shift(4);var Props=[],i=0;var CodePage=0;var Dictionary=-1,DictObj;for(i=0;i!=NumProps;++i){var PropID=blob.read_shift(4);var Offset=blob.read_shift(4);Props[i]=[PropID,Offset+start_addr]}var PropH={};for(i=0;i!=NumProps;++i){if(blob.l!==Props[i][1]){var fail=true;if(i>0&&PIDSI)switch(PIDSI[Props[i-1][0]].t){case 2:if(blob.l+2===Props[i][1]){blob.l+=2;fail=false}break;case 80:if(blob.l<=Props[i][1]){blob.l=Props[i][1];fail=false}break;case 4108:if(blob.l<=Props[i][1]){blob.l=Props[i][1];fail=false}break}if(!PIDSI&&blob.l<=Props[i][1]){fail=false;blob.l=Props[i][1]}if(fail)throw new Error("Read Error: Expected address "+Props[i][1]+" at "+blob.l+" :"+i)}if(PIDSI){var piddsi=PIDSI[Props[i][0]];PropH[piddsi.n]=parse_TypedPropertyValue(blob,piddsi.t,{raw:true});if(piddsi.p==="version")PropH[piddsi.n]=String(PropH[piddsi.n]>>16)+"."+String(PropH[piddsi.n]&65535);if(piddsi.n=="CodePage")switch(PropH[piddsi.n]){case 0:PropH[piddsi.n]=1252;case 1e4:case 1252:case 874:case 1250:case 1251:case 1253:case 1254:case 1255:case 1256:case 1257:case 1258:case 932:case 936:case 949:case 950:case 1200:case 1201:case 65e3:case-536:case 65001:case-535:set_cp(CodePage=PropH[piddsi.n]);break;default:throw new Error("Unsupported CodePage: "+PropH[piddsi.n])}}else{if(Props[i][0]===1){CodePage=PropH.CodePage=parse_TypedPropertyValue(blob,VT_I2);set_cp(CodePage);if(Dictionary!==-1){var oldpos=blob.l;blob.l=Props[Dictionary][1];DictObj=parse_dictionary(blob,CodePage);blob.l=oldpos}}else if(Props[i][0]===0){if(CodePage===0){Dictionary=i;blob.l=Props[i+1][1];continue}DictObj=parse_dictionary(blob,CodePage)}else{var name=DictObj[Props[i][0]];var val;switch(blob[blob.l]){case 65:blob.l+=4;val=parse_BLOB(blob);break;case 30:blob.l+=4;val=parse_VtString(blob,blob[blob.l-4]);break;case 31:blob.l+=4;val=parse_VtString(blob,blob[blob.l-4]);break;case 3:blob.l+=4;val=blob.read_shift(4,"i");break;case 19:blob.l+=4;val=blob.read_shift(4);break;case 5:blob.l+=4;val=blob.read_shift(8,"f");break;case 11:blob.l+=4;val=parsebool(blob,4);break;case 64:blob.l+=4;val=new Date(parse_FILETIME(blob));break;default:throw new Error("unparsed value: "+blob[blob.l])}PropH[name]=val}}}blob.l=start_addr+size;return PropH}function parse_PropertySetStream(file,PIDSI){var blob=file.content;prep_blob(blob,0);var NumSets,FMTID0,FMTID1,Offset0,Offset1;blob.chk("feff","Byte Order: ");var vers=blob.read_shift(2);var SystemIdentifier=blob.read_shift(4);blob.chk(CFB.utils.consts.HEADER_CLSID,"CLSID: ");NumSets=blob.read_shift(4);if(NumSets!==1&&NumSets!==2)throw"Unrecognized #Sets: "+NumSets;FMTID0=blob.read_shift(16);Offset0=blob.read_shift(4);if(NumSets===1&&Offset0!==blob.l)throw"Length mismatch";else if(NumSets===2){FMTID1=blob.read_shift(16);Offset1=blob.read_shift(4)}var PSet0=parse_PropertySet(blob,PIDSI);var rval={SystemIdentifier:SystemIdentifier};for(var y in PSet0)rval[y]=PSet0[y];rval.FMTID=FMTID0;if(NumSets===1)return rval;if(blob.l!==Offset1)throw"Length mismatch 2: "+blob.l+" !== "+Offset1;var PSet1;try{PSet1=parse_PropertySet(blob,null)}catch(e){}for(y in PSet1)rval[y]=PSet1[y];rval.FMTID=[FMTID0,FMTID1];return rval}function parsenoop2(blob,length){blob.read_shift(length);return null}function parslurp(blob,length,cb){var arr=[],target=blob.l+length;while(blob.l<target)arr.push(cb(blob,target-blob.l));if(target!==blob.l)throw new Error("Slurp error");return arr}function parslurp2(blob,length,cb){var arr=[],target=blob.l+length,len=blob.read_shift(2);while(len--!==0)arr.push(cb(blob,target-blob.l));if(target!==blob.l)throw new Error("Slurp error");return arr}function parsebool(blob,length){return blob.read_shift(length)===1}function parseuint16(blob){return blob.read_shift(2,"u")}function parseuint16a(blob,length){return parslurp(blob,length,parseuint16)}var parse_Boolean=parsebool;function parse_Bes(blob){var v=blob.read_shift(1),t=blob.read_shift(1);return t===1?v:v===1}function parse_ShortXLUnicodeString(blob,length,opts){var cch=blob.read_shift(1);var width=1,encoding="sbcs-cont";var cp=current_codepage;if(opts&&opts.biff>=8)current_codepage=1200;if(opts===undefined||opts.biff!==5){var fHighByte=blob.read_shift(1);if(fHighByte){width=2;encoding="dbcs-cont"}}var o=cch?blob.read_shift(cch,encoding):"";current_codepage=cp;return o}function parse_XLUnicodeRichExtendedString(blob){var cp=current_codepage;current_codepage=1200;var cch=blob.read_shift(2),flags=blob.read_shift(1);var fHighByte=flags&1,fExtSt=flags&4,fRichSt=flags&8;var width=1+(flags&1);var cRun,cbExtRst;var z={};if(fRichSt)cRun=blob.read_shift(2);if(fExtSt)cbExtRst=blob.read_shift(4);var encoding=flags&1?"dbcs-cont":"sbcs-cont";var msg=cch===0?"":blob.read_shift(cch,encoding);if(fRichSt)blob.l+=4*cRun;if(fExtSt)blob.l+=cbExtRst;z.t=msg;if(!fRichSt){z.raw="<t>"+z.t+"</t>";z.r=z.t}current_codepage=cp;return z}function parse_XLUnicodeStringNoCch(blob,cch,opts){var retval;var fHighByte=blob.read_shift(1);if(fHighByte===0){retval=blob.read_shift(cch,"sbcs-cont")}else{retval=blob.read_shift(cch,"dbcs-cont")}return retval}function parse_XLUnicodeString(blob,length,opts){var cch=blob.read_shift(opts!==undefined&&opts.biff>0&&opts.biff<8?1:2);if(cch===0){blob.l++;return""}return parse_XLUnicodeStringNoCch(blob,cch,opts)}function parse_XLUnicodeString2(blob,length,opts){if(opts.biff!==5&&opts.biff!==2)return parse_XLUnicodeString(blob,length,opts);var cch=blob.read_shift(1);if(cch===0){blob.l++;return""}return blob.read_shift(cch,"sbcs-cont")}var parse_ControlInfo=parsenoop;var parse_URLMoniker=function(blob,length){var len=blob.read_shift(4),start=blob.l;var extra=false;if(len>24){blob.l+=len-24;if(blob.read_shift(16)==="795881f43b1d7f48af2c825dc4852763")extra=true;blob.l=start}var url=blob.read_shift((extra?len-24:len)>>1,"utf16le").replace(chr0,"");if(extra)blob.l+=24;return url};var parse_FileMoniker=function(blob,length){var cAnti=blob.read_shift(2);var ansiLength=blob.read_shift(4);var ansiPath=blob.read_shift(ansiLength,"cstr");var endServer=blob.read_shift(2);var versionNumber=blob.read_shift(2);var cbUnicodePathSize=blob.read_shift(4);if(cbUnicodePathSize===0)return ansiPath.replace(/\\/g,"/");var cbUnicodePathBytes=blob.read_shift(4);var usKeyValue=blob.read_shift(2);var unicodePath=blob.read_shift(cbUnicodePathBytes>>1,"utf16le").replace(chr0,"");return unicodePath};var parse_HyperlinkMoniker=function(blob,length){var clsid=blob.read_shift(16);length-=16;switch(clsid){case"e0c9ea79f9bace118c8200aa004ba90b":return parse_URLMoniker(blob,length);case"0303000000000000c000000000000046":return parse_FileMoniker(blob,length);default:throw"unsupported moniker "+clsid}};var parse_HyperlinkString=function(blob,length){var len=blob.read_shift(4);var o=blob.read_shift(len,"utf16le").replace(chr0,"");return o};var parse_Hyperlink=function(blob,length){var end=blob.l+length;var sVer=blob.read_shift(4);if(sVer!==2)throw new Error("Unrecognized streamVersion: "+sVer);var flags=blob.read_shift(2);blob.l+=2;var displayName,targetFrameName,moniker,oleMoniker,location,guid,fileTime;if(flags&16)displayName=parse_HyperlinkString(blob,end-blob.l);if(flags&128)targetFrameName=parse_HyperlinkString(blob,end-blob.l);if((flags&257)===257)moniker=parse_HyperlinkString(blob,end-blob.l);if((flags&257)===1)oleMoniker=parse_HyperlinkMoniker(blob,end-blob.l);if(flags&8)location=parse_HyperlinkString(blob,end-blob.l);if(flags&32)guid=blob.read_shift(16);if(flags&64)fileTime=parse_FILETIME(blob,8);blob.l=end;var target=targetFrameName||moniker||oleMoniker;if(location)target+="#"+location;return{Target:target}};function parse_LongRGBA(blob,length){var r=blob.read_shift(1),g=blob.read_shift(1),b=blob.read_shift(1),a=blob.read_shift(1);return[r,g,b,a]}function parse_LongRGB(blob,length){var x=parse_LongRGBA(blob,length);x[3]=0;return x}function parse_XLSCell(blob,length){var rw=blob.read_shift(2);var col=blob.read_shift(2);var ixfe=blob.read_shift(2);return{r:rw,c:col,ixfe:ixfe}}function parse_frtHeader(blob){var rt=blob.read_shift(2);var flags=blob.read_shift(2);blob.l+=8;return{type:rt,flags:flags}}function parse_OptXLUnicodeString(blob,length,opts){return length===0?"":parse_XLUnicodeString2(blob,length,opts)}var HIDEOBJENUM=["SHOWALL","SHOWPLACEHOLDER","HIDEALL"];var parse_HideObjEnum=parseuint16;function parse_XTI(blob,length){var iSupBook=blob.read_shift(2),itabFirst=blob.read_shift(2,"i"),itabLast=blob.read_shift(2,"i");return[iSupBook,itabFirst,itabLast]}function parse_RkRec(blob,length){var ixfe=blob.read_shift(2);var RK=parse_RkNumber(blob);return[ixfe,RK]}function parse_AddinUdf(blob,length){blob.l+=4;length-=4;var l=blob.l+length;var udfName=parse_ShortXLUnicodeString(blob,length);var cb=blob.read_shift(2);l-=blob.l;if(cb!==l)throw"Malformed AddinUdf: padding = "+l+" != "+cb;blob.l+=cb;return udfName}function parse_Ref8U(blob,length){var rwFirst=blob.read_shift(2);var rwLast=blob.read_shift(2);var colFirst=blob.read_shift(2);var colLast=blob.read_shift(2);return{s:{c:colFirst,r:rwFirst},e:{c:colLast,r:rwLast}}}function parse_RefU(blob,length){var rwFirst=blob.read_shift(2);var rwLast=blob.read_shift(2);var colFirst=blob.read_shift(1);var colLast=blob.read_shift(1);return{s:{c:colFirst,r:rwFirst},e:{c:colLast,r:rwLast}}}var parse_Ref=parse_RefU;function parse_FtCmo(blob,length){blob.l+=4;var ot=blob.read_shift(2);var id=blob.read_shift(2);var flags=blob.read_shift(2);blob.l+=12;return[id,ot,flags]}function parse_FtNts(blob,length){var out={};blob.l+=4;blob.l+=16;out.fSharedNote=blob.read_shift(2);blob.l+=4;return out}function parse_FtCf(blob,length){var out={};blob.l+=4;blob.cf=blob.read_shift(2);return out}var FtTab={21:parse_FtCmo,19:parsenoop,18:function(blob,length){blob.l+=12},17:function(blob,length){blob.l+=8},16:parsenoop,15:parsenoop,13:parse_FtNts,12:function(blob,length){blob.l+=24},11:function(blob,length){blob.l+=10},10:function(blob,length){blob.l+=16},9:parsenoop,8:function(blob,length){blob.l+=6},7:parse_FtCf,6:function(blob,length){blob.l+=6},4:parsenoop,0:function(blob,length){blob.l+=4}};function parse_FtArray(blob,length,ot){var s=blob.l;var fts=[];while(blob.l<s+length){var ft=blob.read_shift(2);blob.l-=2;try{fts.push(FtTab[ft](blob,s+length-blob.l))}catch(e){blob.l=s+length;return fts}}if(blob.l!=s+length)blob.l=s+length;return fts}var parse_FontIndex=parseuint16;function parse_BOF(blob,length){var o={};o.BIFFVer=blob.read_shift(2);length-=2;switch(o.BIFFVer){case 1536:case 1280:case 2:case 7:break;default:throw"Unexpected BIFF Ver "+o.BIFFVer}blob.read_shift(length);return o}function parse_InterfaceHdr(blob,length){if(length===0)return 1200;var q;if((q=blob.read_shift(2))!==1200)throw"InterfaceHdr codePage "+q;return 1200}function parse_WriteAccess(blob,length,opts){if(opts.enc){blob.l+=length;return""}var l=blob.l;var UserName=parse_XLUnicodeString(blob,0,opts);blob.read_shift(length+l-blob.l);return UserName}function parse_BoundSheet8(blob,length,opts){var pos=blob.read_shift(4);var hidden=blob.read_shift(1)>>6;var dt=blob.read_shift(1);switch(dt){case 0:dt="Worksheet";break;case 1:dt="Macrosheet";break;case 2:dt="Chartsheet";break;case 6:dt="VBAModule";break}var name=parse_ShortXLUnicodeString(blob,0,opts);if(name.length===0)name="Sheet1";return{pos:pos,hs:hidden,dt:dt,name:name}}function parse_SST(blob,length){var cnt=blob.read_shift(4);var ucnt=blob.read_shift(4);var strs=[];for(var i=0;i!=ucnt;++i){strs.push(parse_XLUnicodeRichExtendedString(blob))}strs.Count=cnt;strs.Unique=ucnt;return strs}function parse_ExtSST(blob,length){var extsst={};extsst.dsst=blob.read_shift(2);blob.l+=length-2;return extsst}function parse_Row(blob,length){var rw=blob.read_shift(2),col=blob.read_shift(2),Col=blob.read_shift(2),rht=blob.read_shift(2);blob.read_shift(4);var flags=blob.read_shift(1);blob.read_shift(1);blob.read_shift(2);return{r:rw,c:col,cnt:Col-col}}function parse_ForceFullCalculation(blob,length){var header=parse_frtHeader(blob);if(header.type!=2211)throw"Invalid Future Record "+header.type;var fullcalc=blob.read_shift(4);return fullcalc!==0}var parse_CompressPictures=parsenoop2;function parse_RecalcId(blob,length){blob.read_shift(2);return blob.read_shift(4)}function parse_DefaultRowHeight(blob,length){var f=blob.read_shift(2),miyRw;miyRw=blob.read_shift(2);var fl={Unsynced:f&1,DyZero:(f&2)>>1,ExAsc:(f&4)>>2,ExDsc:(f&8)>>3};return[fl,miyRw]}function parse_Window1(blob,length){var xWn=blob.read_shift(2),yWn=blob.read_shift(2),dxWn=blob.read_shift(2),dyWn=blob.read_shift(2);var flags=blob.read_shift(2),iTabCur=blob.read_shift(2),iTabFirst=blob.read_shift(2);var ctabSel=blob.read_shift(2),wTabRatio=blob.read_shift(2);return{Pos:[xWn,yWn],Dim:[dxWn,dyWn],Flags:flags,CurTab:iTabCur,FirstTab:iTabFirst,Selected:ctabSel,TabRatio:wTabRatio}}function parse_Font(blob,length,opts){blob.l+=14;var name=parse_ShortXLUnicodeString(blob,0,opts);return name}function parse_LabelSst(blob,length){var cell=parse_XLSCell(blob);cell.isst=blob.read_shift(4);return cell}function parse_Label(blob,length,opts){var cell=parse_XLSCell(blob,6);var str=parse_XLUnicodeString(blob,length-6,opts);cell.val=str;return cell}function parse_Format(blob,length,opts){var ifmt=blob.read_shift(2);var fmtstr=parse_XLUnicodeString2(blob,0,opts);return[ifmt,fmtstr]}function parse_Dimensions(blob,length){var w=length===10?2:4;var r=blob.read_shift(w),R=blob.read_shift(w),c=blob.read_shift(2),C=blob.read_shift(2);blob.l+=2;return{s:{r:r,c:c},e:{r:R,c:C}}}function parse_RK(blob,length){var rw=blob.read_shift(2),col=blob.read_shift(2);var rkrec=parse_RkRec(blob);return{r:rw,c:col,ixfe:rkrec[0],rknum:rkrec[1]}}function parse_MulRk(blob,length){var target=blob.l+length-2;var rw=blob.read_shift(2),col=blob.read_shift(2);var rkrecs=[];while(blob.l<target)rkrecs.push(parse_RkRec(blob));if(blob.l!==target)throw"MulRK read error";var lastcol=blob.read_shift(2);if(rkrecs.length!=lastcol-col+1)throw"MulRK length mismatch";return{r:rw,c:col,C:lastcol,rkrec:rkrecs}}function parse_CellStyleXF(blob,length,style){var o={};var a=blob.read_shift(4),b=blob.read_shift(4);var c=blob.read_shift(4),d=blob.read_shift(2);o.patternType=XLSFillPattern[c>>26];o.icvFore=d&127;o.icvBack=d>>7&127;return o}function parse_CellXF(blob,length){return parse_CellStyleXF(blob,length,0)}function parse_StyleXF(blob,length){return parse_CellStyleXF(blob,length,1)}function parse_XF(blob,length){var o={};o.ifnt=blob.read_shift(2);o.ifmt=blob.read_shift(2);o.flags=blob.read_shift(2);o.fStyle=o.flags>>2&1;length-=6;o.data=parse_CellStyleXF(blob,length,o.fStyle);return o}function parse_Guts(blob,length){blob.l+=4;var out=[blob.read_shift(2),blob.read_shift(2)];if(out[0]!==0)out[0]--;if(out[1]!==0)out[1]--;if(out[0]>7||out[1]>7)throw"Bad Gutters: "+out;return out}function parse_BoolErr(blob,length){var cell=parse_XLSCell(blob,6);var val=parse_Bes(blob,2);cell.val=val;cell.t=val===true||val===false?"b":"e";return cell}function parse_Number(blob,length){var cell=parse_XLSCell(blob,6);var xnum=parse_Xnum(blob,8);cell.val=xnum;return cell}var parse_XLHeaderFooter=parse_OptXLUnicodeString;function parse_SupBook(blob,length,opts){var end=blob.l+length;var ctab=blob.read_shift(2);var cch=blob.read_shift(2);var virtPath;if(cch>=1&&cch<=255)virtPath=parse_XLUnicodeStringNoCch(blob,cch);var rgst=blob.read_shift(end-blob.l);opts.sbcch=cch;return[cch,ctab,virtPath,rgst]}function parse_ExternName(blob,length,opts){var flags=blob.read_shift(2);var body;var o={fBuiltIn:flags&1,fWantAdvise:flags>>>1&1,fWantPict:flags>>>2&1,fOle:flags>>>3&1,fOleLink:flags>>>4&1,cf:flags>>>5&1023,fIcon:flags>>>15&1};if(opts.sbcch===14849)body=parse_AddinUdf(blob,length-2);o.body=body||blob.read_shift(length-2);return o}function parse_Lbl(blob,length,opts){if(opts.biff<8)return parse_Label(blob,length,opts);var target=blob.l+length;var flags=blob.read_shift(2);var chKey=blob.read_shift(1);var cch=blob.read_shift(1);var cce=blob.read_shift(2);blob.l+=2;var itab=blob.read_shift(2);blob.l+=4;var name=parse_XLUnicodeStringNoCch(blob,cch,opts);var rgce=parse_NameParsedFormula(blob,target-blob.l,opts,cce);return{chKey:chKey,Name:name,rgce:rgce}}function parse_ExternSheet(blob,length,opts){if(opts.biff<8)return parse_ShortXLUnicodeString(blob,length,opts);var o=parslurp2(blob,length,parse_XTI);var oo=[];if(opts.sbcch===1025){for(var i=0;i!=o.length;++i)oo.push(opts.snames[o[i][1]]);return oo}else return o}function parse_ShrFmla(blob,length,opts){var ref=parse_RefU(blob,6);blob.l++;var cUse=blob.read_shift(1);length-=8;return[parse_SharedParsedFormula(blob,length,opts),cUse]}function parse_Array(blob,length,opts){var ref=parse_Ref(blob,6);blob.l+=6;length-=12;return[ref,parse_ArrayParsedFormula(blob,length,opts,ref)]}function parse_MTRSettings(blob,length){var fMTREnabled=blob.read_shift(4)!==0;var fUserSetThreadCount=blob.read_shift(4)!==0;var cUserThreadCount=blob.read_shift(4);return[fMTREnabled,fUserSetThreadCount,cUserThreadCount]}function parse_NoteSh(blob,length,opts){if(opts.biff<8)return;var row=blob.read_shift(2),col=blob.read_shift(2);var flags=blob.read_shift(2),idObj=blob.read_shift(2);var stAuthor=parse_XLUnicodeString2(blob,0,opts);if(opts.biff<8)blob.read_shift(1);return[{r:row,c:col},stAuthor,idObj,flags]}function parse_Note(blob,length,opts){return parse_NoteSh(blob,length,opts)}function parse_MergeCells(blob,length){var merges=[];var cmcs=blob.read_shift(2);while(cmcs--)merges.push(parse_Ref8U(blob,length));return merges}function parse_Obj(blob,length){var cmo=parse_FtCmo(blob,22);var fts=parse_FtArray(blob,length-22,cmo[1]);return{cmo:cmo,ft:fts}}function parse_TxO(blob,length,opts){var s=blob.l;try{blob.l+=4;var ot=(opts.lastobj||{cmo:[0,0]}).cmo[1];var controlInfo;if([0,5,7,11,12,14].indexOf(ot)==-1)blob.l+=6;else controlInfo=parse_ControlInfo(blob,6,opts);var cchText=blob.read_shift(2);var cbRuns=blob.read_shift(2);var ifntEmpty=parse_FontIndex(blob,2);var len=blob.read_shift(2);blob.l+=len;var texts="";for(var i=1;i<blob.lens.length-1;++i){if(blob.l-s!=blob.lens[i])throw"TxO: bad continue record";var hdr=blob[blob.l];var t=parse_XLUnicodeStringNoCch(blob,blob.lens[i+1]-blob.lens[i]-1);texts+=t;if(texts.length>=(hdr?cchText:2*cchText))break}if(texts.length!==cchText&&texts.length!==cchText*2){throw"cchText: "+cchText+" != "+texts.length}blob.l=s+length;return{t:texts}}catch(e){blob.l=s+length;return{t:texts||""}}}var parse_HLink=function(blob,length){var ref=parse_Ref8U(blob,8);blob.l+=16;var hlink=parse_Hyperlink(blob,length-24);return[ref,hlink]};var parse_HLinkTooltip=function(blob,length){var end=blob.l+length;blob.read_shift(2);var ref=parse_Ref8U(blob,8);var wzTooltip=blob.read_shift((length-10)/2,"dbcs-cont");wzTooltip=wzTooltip.replace(chr0,"");return[ref,wzTooltip]};function parse_Country(blob,length){var o=[],d;d=blob.read_shift(2);o[0]=CountryEnum[d]||d;d=blob.read_shift(2);o[1]=CountryEnum[d]||d;return o}function parse_ClrtClient(blob,length){var ccv=blob.read_shift(2);var o=[];while(ccv-- >0)o.push(parse_LongRGB(blob,8));return o}function parse_Palette(blob,length){var ccv=blob.read_shift(2);var o=[];while(ccv-- >0)o.push(parse_LongRGB(blob,8));return o}function parse_XFCRC(blob,length){blob.l+=2;var o={cxfs:0,crc:0};o.cxfs=blob.read_shift(2);o.crc=blob.read_shift(4);return o}var parse_Style=parsenoop;var parse_StyleExt=parsenoop;var parse_ColInfo=parsenoop;var parse_Window2=parsenoop;var parse_Backup=parsebool;var parse_Blank=parse_XLSCell;var parse_BottomMargin=parse_Xnum;var parse_BuiltInFnGroupCount=parseuint16;var parse_CalcCount=parseuint16;var parse_CalcDelta=parse_Xnum;var parse_CalcIter=parsebool;var parse_CalcMode=parseuint16;var parse_CalcPrecision=parsebool;var parse_CalcRefMode=parsenoop2;var parse_CalcSaveRecalc=parsebool;var parse_CodePage=parseuint16;var parse_Compat12=parsebool;var parse_Date1904=parsebool;var parse_DefColWidth=parseuint16;var parse_DSF=parsenoop2;var parse_EntExU2=parsenoop2;var parse_EOF=parsenoop2;var parse_Excel9File=parsenoop2;var parse_FeatHdr=parsenoop2;var parse_FontX=parseuint16;var parse_Footer=parse_XLHeaderFooter;var parse_GridSet=parseuint16;var parse_HCenter=parsebool;var parse_Header=parse_XLHeaderFooter;var parse_HideObj=parse_HideObjEnum;var parse_InterfaceEnd=parsenoop2;var parse_LeftMargin=parse_Xnum;var parse_Mms=parsenoop2;var parse_ObjProtect=parsebool;var parse_Password=parseuint16;var parse_PrintGrid=parsebool;var parse_PrintRowCol=parsebool;var parse_PrintSize=parseuint16;var parse_Prot4Rev=parsebool;var parse_Prot4RevPass=parseuint16;var parse_Protect=parsebool;var parse_RefreshAll=parsebool;var parse_RightMargin=parse_Xnum;var parse_RRTabId=parseuint16a;var parse_ScenarioProtect=parsebool;var parse_Scl=parseuint16a;var parse_String=parse_XLUnicodeString;var parse_SxBool=parsebool;var parse_TopMargin=parse_Xnum;var parse_UsesELFs=parsebool;var parse_VCenter=parsebool;var parse_WinProtect=parsebool;var parse_WriteProtect=parsenoop;var parse_VerticalPageBreaks=parsenoop;var parse_HorizontalPageBreaks=parsenoop;var parse_Selection=parsenoop;var parse_Continue=parsenoop;var parse_Pane=parsenoop;var parse_Pls=parsenoop;var parse_DCon=parsenoop;var parse_DConRef=parsenoop;var parse_DConName=parsenoop;var parse_XCT=parsenoop;var parse_CRN=parsenoop;var parse_FileSharing=parsenoop;var parse_Uncalced=parsenoop;var parse_Template=parsenoop;var parse_Intl=parsenoop;var parse_WsBool=parsenoop;var parse_Sort=parsenoop;var parse_Sync=parsenoop;var parse_LPr=parsenoop;var parse_DxGCol=parsenoop;var parse_FnGroupName=parsenoop;var parse_FilterMode=parsenoop;var parse_AutoFilterInfo=parsenoop;var parse_AutoFilter=parsenoop;var parse_Setup=parsenoop;var parse_ScenMan=parsenoop;var parse_SCENARIO=parsenoop;var parse_SxView=parsenoop;var parse_Sxvd=parsenoop;var parse_SXVI=parsenoop;var parse_SxIvd=parsenoop;var parse_SXLI=parsenoop;var parse_SXPI=parsenoop;var parse_DocRoute=parsenoop;var parse_RecipName=parsenoop;var parse_MulBlank=parsenoop;var parse_SXDI=parsenoop;var parse_SXDB=parsenoop;var parse_SXFDB=parsenoop;var parse_SXDBB=parsenoop;var parse_SXNum=parsenoop;var parse_SxErr=parsenoop;var parse_SXInt=parsenoop;var parse_SXString=parsenoop;var parse_SXDtr=parsenoop;var parse_SxNil=parsenoop;var parse_SXTbl=parsenoop;var parse_SXTBRGIITM=parsenoop;var parse_SxTbpg=parsenoop;var parse_ObProj=parsenoop;var parse_SXStreamID=parsenoop;var parse_DBCell=parsenoop;var parse_SXRng=parsenoop;var parse_SxIsxoper=parsenoop;var parse_BookBool=parsenoop;var parse_DbOrParamQry=parsenoop;var parse_OleObjectSize=parsenoop;var parse_SXVS=parsenoop;var parse_BkHim=parsenoop;var parse_MsoDrawingGroup=parsenoop;var parse_MsoDrawing=parsenoop;var parse_MsoDrawingSelection=parsenoop;var parse_PhoneticInfo=parsenoop;var parse_SxRule=parsenoop;var parse_SXEx=parsenoop;var parse_SxFilt=parsenoop;var parse_SxDXF=parsenoop;var parse_SxItm=parsenoop;var parse_SxName=parsenoop;var parse_SxSelect=parsenoop;var parse_SXPair=parsenoop;var parse_SxFmla=parsenoop;var parse_SxFormat=parsenoop;var parse_SXVDEx=parsenoop;var parse_SXFormula=parsenoop;var parse_SXDBEx=parsenoop;var parse_RRDInsDel=parsenoop;var parse_RRDHead=parsenoop;var parse_RRDChgCell=parsenoop;var parse_RRDRenSheet=parsenoop;var parse_RRSort=parsenoop;var parse_RRDMove=parsenoop;var parse_RRFormat=parsenoop;var parse_RRAutoFmt=parsenoop;var parse_RRInsertSh=parsenoop;var parse_RRDMoveBegin=parsenoop;var parse_RRDMoveEnd=parsenoop;var parse_RRDInsDelBegin=parsenoop;var parse_RRDInsDelEnd=parsenoop;var parse_RRDConflict=parsenoop;var parse_RRDDefName=parsenoop;var parse_RRDRstEtxp=parsenoop;var parse_LRng=parsenoop;var parse_CUsr=parsenoop;var parse_CbUsr=parsenoop;var parse_UsrInfo=parsenoop;var parse_UsrExcl=parsenoop;var parse_FileLock=parsenoop;var parse_RRDInfo=parsenoop;var parse_BCUsrs=parsenoop;var parse_UsrChk=parsenoop;var parse_UserBView=parsenoop;var parse_UserSViewBegin=parsenoop;var parse_UserSViewEnd=parsenoop;var parse_RRDUserView=parsenoop;var parse_Qsi=parsenoop;var parse_CondFmt=parsenoop;var parse_CF=parsenoop;var parse_DVal=parsenoop;var parse_DConBin=parsenoop;var parse_Lel=parsenoop;var parse_XLSCodeName=parse_XLUnicodeString;var parse_SXFDBType=parsenoop;var parse_ObNoMacros=parsenoop;var parse_Dv=parsenoop;var parse_Index=parsenoop;var parse_Table=parsenoop;var parse_BigName=parsenoop;var parse_ContinueBigName=parsenoop;var parse_WebPub=parsenoop;var parse_QsiSXTag=parsenoop;var parse_DBQueryExt=parsenoop;var parse_ExtString=parsenoop;var parse_TxtQry=parsenoop;var parse_Qsir=parsenoop;var parse_Qsif=parsenoop;var parse_RRDTQSIF=parsenoop;var parse_OleDbConn=parsenoop;var parse_WOpt=parsenoop;var parse_SXViewEx=parsenoop;var parse_SXTH=parsenoop;var parse_SXPIEx=parsenoop;var parse_SXVDTEx=parsenoop;var parse_SXViewEx9=parsenoop;var parse_ContinueFrt=parsenoop;var parse_RealTimeData=parsenoop;var parse_ChartFrtInfo=parsenoop;var parse_FrtWrapper=parsenoop;var parse_StartBlock=parsenoop;var parse_EndBlock=parsenoop;var parse_StartObject=parsenoop;var parse_EndObject=parsenoop;var parse_CatLab=parsenoop;var parse_YMult=parsenoop;var parse_SXViewLink=parsenoop;var parse_PivotChartBits=parsenoop;var parse_FrtFontList=parsenoop;var parse_SheetExt=parsenoop;var parse_BookExt=parsenoop;var parse_SXAddl=parsenoop;var parse_CrErr=parsenoop;var parse_HFPicture=parsenoop;var parse_Feat=parsenoop;var parse_DataLabExt=parsenoop;var parse_DataLabExtContents=parsenoop;var parse_CellWatch=parsenoop;var parse_FeatHdr11=parsenoop;var parse_Feature11=parsenoop;var parse_DropDownObjIds=parsenoop;var parse_ContinueFrt11=parsenoop;var parse_DConn=parsenoop;var parse_List12=parsenoop;var parse_Feature12=parsenoop;var parse_CondFmt12=parsenoop;var parse_CF12=parsenoop;var parse_CFEx=parsenoop;var parse_AutoFilter12=parsenoop;var parse_ContinueFrt12=parsenoop;var parse_MDTInfo=parsenoop;var parse_MDXStr=parsenoop;var parse_MDXTuple=parsenoop;var parse_MDXSet=parsenoop;var parse_MDXProp=parsenoop;var parse_MDXKPI=parsenoop;var parse_MDB=parsenoop;var parse_PLV=parsenoop;var parse_DXF=parsenoop;var parse_TableStyles=parsenoop;var parse_TableStyle=parsenoop;var parse_TableStyleElement=parsenoop;var parse_NamePublish=parsenoop;var parse_NameCmt=parsenoop;var parse_SortData=parsenoop;var parse_GUIDTypeLib=parsenoop;var parse_FnGrp12=parsenoop;var parse_NameFnGrp12=parsenoop;var parse_HeaderFooter=parsenoop;var parse_CrtLayout12=parsenoop;var parse_CrtMlFrt=parsenoop;var parse_CrtMlFrtContinue=parsenoop;var parse_ShapePropsStream=parsenoop;var parse_TextPropsStream=parsenoop;var parse_RichTextStream=parsenoop;var parse_CrtLayout12A=parsenoop;var parse_Units=parsenoop;var parse_Chart=parsenoop;var parse_Series=parsenoop;var parse_DataFormat=parsenoop;var parse_LineFormat=parsenoop;var parse_MarkerFormat=parsenoop;var parse_AreaFormat=parsenoop;var parse_PieFormat=parsenoop;var parse_AttachedLabel=parsenoop;var parse_SeriesText=parsenoop;var parse_ChartFormat=parsenoop;var parse_Legend=parsenoop;var parse_SeriesList=parsenoop;var parse_Bar=parsenoop;var parse_Line=parsenoop;var parse_Pie=parsenoop;var parse_Area=parsenoop;var parse_Scatter=parsenoop;var parse_CrtLine=parsenoop;var parse_Axis=parsenoop;var parse_Tick=parsenoop;var parse_ValueRange=parsenoop;var parse_CatSerRange=parsenoop;var parse_AxisLine=parsenoop;var parse_CrtLink=parsenoop;var parse_DefaultText=parsenoop;var parse_Text=parsenoop;var parse_ObjectLink=parsenoop;var parse_Frame=parsenoop;var parse_Begin=parsenoop;var parse_End=parsenoop;var parse_PlotArea=parsenoop;var parse_Chart3d=parsenoop;var parse_PicF=parsenoop;var parse_DropBar=parsenoop;var parse_Radar=parsenoop;var parse_Surf=parsenoop;var parse_RadarArea=parsenoop;var parse_AxisParent=parsenoop;var parse_LegendException=parsenoop;var parse_ShtProps=parsenoop;var parse_SerToCrt=parsenoop;var parse_AxesUsed=parsenoop;var parse_SBaseRef=parsenoop;var parse_SerParent=parsenoop;var parse_SerAuxTrend=parsenoop;var parse_IFmtRecord=parsenoop;var parse_Pos=parsenoop;var parse_AlRuns=parsenoop;var parse_BRAI=parsenoop;var parse_SerAuxErrBar=parsenoop;var parse_SerFmt=parsenoop;var parse_Chart3DBarShape=parsenoop;var parse_Fbi=parsenoop;var parse_BopPop=parsenoop;var parse_AxcExt=parsenoop;var parse_Dat=parsenoop;var parse_PlotGrowth=parsenoop;var parse_SIIndex=parsenoop;var parse_GelFrame=parsenoop;var parse_BopPopCustom=parsenoop;var parse_Fbi2=parsenoop;function parse_BIFF5String(blob){var len=blob.read_shift(1);return blob.read_shift(len,"sbcs-cont")}function parse_BIFF2STR(blob,length,opts){var cell=parse_XLSCell(blob,6);++blob.l;var str=parse_XLUnicodeString2(blob,length-7,opts);cell.val=str;return cell}function parse_BIFF2NUM(blob,length,opts){var cell=parse_XLSCell(blob,6);++blob.l;var num=parse_Xnum(blob,8);cell.val=num;return cell}var CS2CP={0:1252,1:65001,2:65001,77:1e4,128:932,129:949,130:1361,134:936,136:950,161:1253,162:1254,163:1258,177:1255,178:1256,186:1257,204:1251,222:874,
+238:1250,255:1252,69:6969};var parse_rs=function parse_rs_factory(){var tregex=matchtag("t"),rpregex=matchtag("rPr"),rregex=/<r>/g,rend=/<\/r>/,nlregex=/\r\n/g;var parse_rpr=function parse_rpr(rpr,intro,outro){var font={},cp=65001;var m=rpr.match(tagregex),i=0;if(m)for(;i!=m.length;++i){var y=parsexmltag(m[i]);switch(y[0]){case"<condense":break;case"<extend":break;case"<shadow":case"<shadow/>":break;case"<charset":if(y.val=="1")break;cp=CS2CP[parseInt(y.val,10)];break;case"<outline":case"<outline/>":break;case"<rFont":font.name=y.val;break;case"<sz":font.sz=y.val;break;case"<strike":if(!y.val)break;case"<strike/>":font.strike=1;break;case"</strike>":break;case"<u":if(!y.val)break;case"<u/>":font.u=1;break;case"</u>":break;case"<b":if(!y.val)break;case"<b/>":font.b=1;break;case"</b>":break;case"<i":if(!y.val)break;case"<i/>":font.i=1;break;case"</i>":break;case"<color":if(y.rgb)font.color=y.rgb.substr(2,6);break;case"<family":font.family=y.val;break;case"<vertAlign":break;case"<scheme":break;default:if(y[0].charCodeAt(1)!==47)throw"Unrecognized rich format "+y[0]}}var style=[];if(font.b)style.push("font-weight: bold;");if(font.i)style.push("font-style: italic;");intro.push('<span style="'+style.join("")+'">');outro.push("</span>");return cp};function parse_r(r){var terms=[[],"",[]];var t=r.match(tregex),cp=65001;if(!isval(t))return"";terms[1]=t[1];var rpr=r.match(rpregex);if(isval(rpr))cp=parse_rpr(rpr[1],terms[0],terms[2]);return terms[0].join("")+terms[1].replace(nlregex,"<br/>")+terms[2].join("")}return function parse_rs(rs){return rs.replace(rregex,"").split(rend).map(parse_r).join("")}}();var sitregex=/<t[^>]*>([^<]*)<\/t>/g,sirregex=/<r>/;function parse_si(x,opts){var html=opts?opts.cellHTML:true;var z={};if(!x)return null;var y;if(x.charCodeAt(1)===116){z.t=utf8read(unescapexml(x.substr(x.indexOf(">")+1).split(/<\/t>/)[0]));z.r=x;if(html)z.h=z.t}else if(y=x.match(sirregex)){z.r=x;z.t=utf8read(unescapexml(x.match(sitregex).join("").replace(tagregex,"")));if(html)z.h=parse_rs(x)}return z}var sstr0=/<sst([^>]*)>([\s\S]*)<\/sst>/;var sstr1=/<(?:si|sstItem)>/g;var sstr2=/<\/(?:si|sstItem)>/;function parse_sst_xml(data,opts){var s=[],ss;var sst=data.match(sstr0);if(isval(sst)){ss=sst[2].replace(sstr1,"").split(sstr2);for(var i=0;i!=ss.length;++i){var o=parse_si(ss[i],opts);if(o!=null)s[s.length]=o}sst=parsexmltag(sst[1]);s.Count=sst.count;s.Unique=sst.uniqueCount}return s}RELS.SST="http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings";var straywsregex=/^\s|\s$|[\t\n\r]/;function write_sst_xml(sst,opts){if(!opts.bookSST)return"";var o=[XML_HEADER];o[o.length]=writextag("sst",null,{xmlns:XMLNS.main[0],count:sst.Count,uniqueCount:sst.Unique});for(var i=0;i!=sst.length;++i){if(sst[i]==null)continue;var s=sst[i];var sitag="<si>";if(s.r)sitag+=s.r;else{sitag+="<t";if(s.t.match(straywsregex))sitag+=' xml:space="preserve"';sitag+=">"+escapexml(s.t)+"</t>"}sitag+="</si>";o[o.length]=sitag}if(o.length>2){o[o.length]="</sst>";o[1]=o[1].replace("/>",">")}return o.join("")}function parse_BrtBeginSst(data,length){return[data.read_shift(4),data.read_shift(4)]}function parse_sst_bin(data,opts){var s=[];var pass=false;recordhopper(data,function hopper_sst(val,R,RT){switch(R.n){case"BrtBeginSst":s.Count=val[0];s.Unique=val[1];break;case"BrtSSTItem":s.push(val);break;case"BrtEndSst":return true;case"BrtFRTBegin":pass=true;break;case"BrtFRTEnd":pass=false;break;default:if(!pass||opts.WTF)throw new Error("Unexpected record "+RT+" "+R.n)}});return s}function write_BrtBeginSst(sst,o){if(!o)o=new_buf(8);o.write_shift(4,sst.Count);o.write_shift(4,sst.Unique);return o}var write_BrtSSTItem=write_RichStr;function write_sst_bin(sst,opts){var ba=buf_array();write_record(ba,"BrtBeginSst",write_BrtBeginSst(sst));for(var i=0;i<sst.length;++i)write_record(ba,"BrtSSTItem",write_BrtSSTItem(sst[i]));write_record(ba,"BrtEndSst");return ba.end()}function _JS2ANSI(str){if(typeof cptable!=="undefined")return cptable.utils.encode(1252,str);return str.split("").map(function(x){return x.charCodeAt(0)})}function parse_Version(blob,length){var o={};o.Major=blob.read_shift(2);o.Minor=blob.read_shift(2);return o}function parse_EncryptionHeader(blob,length){var o={};o.Flags=blob.read_shift(4);var tmp=blob.read_shift(4);if(tmp!==0)throw"Unrecognized SizeExtra: "+tmp;o.AlgID=blob.read_shift(4);switch(o.AlgID){case 0:case 26625:case 26126:case 26127:case 26128:break;default:throw"Unrecognized encryption algorithm: "+o.AlgID}parsenoop(blob,length-12);return o}function parse_EncryptionVerifier(blob,length){return parsenoop(blob,length)}function parse_RC4CryptoHeader(blob,length){var o={};var vers=o.EncryptionVersionInfo=parse_Version(blob,4);length-=4;if(vers.Minor!=2)throw"unrecognized minor version code: "+vers.Minor;if(vers.Major>4||vers.Major<2)throw"unrecognized major version code: "+vers.Major;o.Flags=blob.read_shift(4);length-=4;var sz=blob.read_shift(4);length-=4;o.EncryptionHeader=parse_EncryptionHeader(blob,sz);length-=sz;o.EncryptionVerifier=parse_EncryptionVerifier(blob,length);return o}function parse_RC4Header(blob,length){var o={};var vers=o.EncryptionVersionInfo=parse_Version(blob,4);length-=4;if(vers.Major!=1||vers.Minor!=1)throw"unrecognized version code "+vers.Major+" : "+vers.Minor;o.Salt=blob.read_shift(16);o.EncryptedVerifier=blob.read_shift(16);o.EncryptedVerifierHash=blob.read_shift(16);return o}function crypto_CreatePasswordVerifier_Method1(Password){var Verifier=0,PasswordArray;var PasswordDecoded=_JS2ANSI(Password);var len=PasswordDecoded.length+1,i,PasswordByte;var Intermediate1,Intermediate2,Intermediate3;PasswordArray=new_raw_buf(len);PasswordArray[0]=PasswordDecoded.length;for(i=1;i!=len;++i)PasswordArray[i]=PasswordDecoded[i-1];for(i=len-1;i>=0;--i){PasswordByte=PasswordArray[i];Intermediate1=(Verifier&16384)===0?0:1;Intermediate2=Verifier<<1&32767;Intermediate3=Intermediate1|Intermediate2;Verifier=Intermediate3^PasswordByte}return Verifier^52811}var crypto_CreateXorArray_Method1=function(){var PadArray=[187,255,255,186,255,255,185,128,0,190,15,0,191,15,0];var InitialCode=[57840,7439,52380,33984,4364,3600,61902,12606,6258,57657,54287,34041,10252,43370,20163];var XorMatrix=[44796,19929,39858,10053,20106,40212,10761,31585,63170,64933,60267,50935,40399,11199,17763,35526,1453,2906,5812,11624,23248,885,1770,3540,7080,14160,28320,56640,55369,41139,20807,41614,21821,43642,17621,28485,56970,44341,19019,38038,14605,29210,60195,50791,40175,10751,21502,43004,24537,18387,36774,3949,7898,15796,31592,63184,47201,24803,49606,37805,14203,28406,56812,17824,35648,1697,3394,6788,13576,27152,43601,17539,35078,557,1114,2228,4456,30388,60776,51953,34243,7079,14158,28316,14128,28256,56512,43425,17251,34502,7597,13105,26210,52420,35241,883,1766,3532,4129,8258,16516,33032,4657,9314,18628];var Ror=function(Byte){return(Byte/2|Byte*128)&255};var XorRor=function(byte1,byte2){return Ror(byte1^byte2)};var CreateXorKey_Method1=function(Password){var XorKey=InitialCode[Password.length-1];var CurrentElement=104;for(var i=Password.length-1;i>=0;--i){var Char=Password[i];for(var j=0;j!=7;++j){if(Char&64)XorKey^=XorMatrix[CurrentElement];Char*=2;--CurrentElement}}return XorKey};return function(password){var Password=_JS2ANSI(password);var XorKey=CreateXorKey_Method1(Password);var Index=Password.length;var ObfuscationArray=new_raw_buf(16);for(var i=0;i!=16;++i)ObfuscationArray[i]=0;var Temp,PasswordLastChar,PadIndex;if((Index&1)===1){Temp=XorKey>>8;ObfuscationArray[Index]=XorRor(PadArray[0],Temp);--Index;Temp=XorKey&255;PasswordLastChar=Password[Password.length-1];ObfuscationArray[Index]=XorRor(PasswordLastChar,Temp)}while(Index>0){--Index;Temp=XorKey>>8;ObfuscationArray[Index]=XorRor(Password[Index],Temp);--Index;Temp=XorKey&255;ObfuscationArray[Index]=XorRor(Password[Index],Temp)}Index=15;PadIndex=15-Password.length;while(PadIndex>0){Temp=XorKey>>8;ObfuscationArray[Index]=XorRor(PadArray[PadIndex],Temp);--Index;--PadIndex;Temp=XorKey&255;ObfuscationArray[Index]=XorRor(Password[Index],Temp);--Index;--PadIndex}return ObfuscationArray}}();var crypto_DecryptData_Method1=function(password,Data,XorArrayIndex,XorArray,O){if(!O)O=Data;if(!XorArray)XorArray=crypto_CreateXorArray_Method1(password);var Index,Value;for(Index=0;Index!=Data.length;++Index){Value=Data[Index];Value^=XorArray[XorArrayIndex];Value=(Value>>5|Value<<3)&255;O[Index]=Value;++XorArrayIndex}return[O,XorArrayIndex,XorArray]};var crypto_MakeXorDecryptor=function(password){var XorArrayIndex=0,XorArray=crypto_CreateXorArray_Method1(password);return function(Data){var O=crypto_DecryptData_Method1(null,Data,XorArrayIndex,XorArray);XorArrayIndex=O[1];return O[0]}};function parse_XORObfuscation(blob,length,opts,out){var o={key:parseuint16(blob),verificationBytes:parseuint16(blob)};if(opts.password)o.verifier=crypto_CreatePasswordVerifier_Method1(opts.password);out.valid=o.verificationBytes===o.verifier;if(out.valid)out.insitu_decrypt=crypto_MakeXorDecryptor(opts.password);return o}function parse_FilePassHeader(blob,length,oo){var o=oo||{};o.Info=blob.read_shift(2);blob.l-=2;if(o.Info===1)o.Data=parse_RC4Header(blob,length);else o.Data=parse_RC4CryptoHeader(blob,length);return o}function parse_FilePass(blob,length,opts){var o={Type:blob.read_shift(2)};if(o.Type)parse_FilePassHeader(blob,length-2,o);else parse_XORObfuscation(blob,length-2,opts,o);return o}function hex2RGB(h){var o=h.substr(h[0]==="#"?1:0,6);return[parseInt(o.substr(0,2),16),parseInt(o.substr(2,2),16),parseInt(o.substr(4,2),16)]}function rgb2Hex(rgb){for(var i=0,o=1;i!=3;++i)o=o*256+(rgb[i]>255?255:rgb[i]<0?0:rgb[i]);return o.toString(16).toUpperCase().substr(1)}function rgb2HSL(rgb){var R=rgb[0]/255,G=rgb[1]/255,B=rgb[2]/255;var M=Math.max(R,G,B),m=Math.min(R,G,B),C=M-m;if(C===0)return[0,0,R];var H6=0,S=0,L2=M+m;S=C/(L2>1?2-L2:L2);switch(M){case R:H6=((G-B)/C+6)%6;break;case G:H6=(B-R)/C+2;break;case B:H6=(R-G)/C+4;break}return[H6/6,S,L2/2]}function hsl2RGB(hsl){var H=hsl[0],S=hsl[1],L=hsl[2];var C=S*2*(L<.5?L:1-L),m=L-C/2;var rgb=[m,m,m],h6=6*H;var X;if(S!==0)switch(h6|0){case 0:case 6:X=C*h6;rgb[0]+=C;rgb[1]+=X;break;case 1:X=C*(2-h6);rgb[0]+=X;rgb[1]+=C;break;case 2:X=C*(h6-2);rgb[1]+=C;rgb[2]+=X;break;case 3:X=C*(4-h6);rgb[1]+=X;rgb[2]+=C;break;case 4:X=C*(h6-4);rgb[2]+=C;rgb[0]+=X;break;case 5:X=C*(6-h6);rgb[2]+=X;rgb[0]+=C;break}for(var i=0;i!=3;++i)rgb[i]=Math.round(rgb[i]*255);return rgb}function rgb_tint(hex,tint){if(tint==0)return hex;var hsl=rgb2HSL(hex2RGB(hex));if(tint<0)hsl[2]=hsl[2]*(1+tint);else hsl[2]=1-(1-hsl[2])*(1-tint);var rev=rgb2Hex(hsl2RGB(hsl));return rev}var DEF_MDW=7,MAX_MDW=15,MIN_MDW=1,MDW=DEF_MDW;function width2px(width){return(width+(128/MDW|0)/256)*MDW|0}function px2char(px){return((px-5)/MDW*100+.5|0)/100}function char2width(chr){return((chr*MDW+5)/MDW*256|0)/256}function cycle_width(collw){return char2width(px2char(width2px(collw)))}function find_mdw(collw,coll){if(cycle_width(collw)!=collw){for(MDW=DEF_MDW;MDW>MIN_MDW;--MDW)if(cycle_width(collw)===collw)break;if(MDW===MIN_MDW)for(MDW=DEF_MDW+1;MDW<MAX_MDW;++MDW)if(cycle_width(collw)===collw)break;if(MDW===MAX_MDW)MDW=DEF_MDW}}var XLMLPatternTypeMap={None:"none",Solid:"solid",Gray50:"mediumGray",Gray75:"darkGray",Gray25:"lightGray",HorzStripe:"darkHorizontal",VertStripe:"darkVertical",ReverseDiagStripe:"darkDown",DiagStripe:"darkUp",DiagCross:"darkGrid",ThickDiagCross:"darkTrellis",ThinHorzStripe:"lightHorizontal",ThinVertStripe:"lightVertical",ThinReverseDiagStripe:"lightDown",ThinHorzCross:"lightGrid"};var styles={};var themes={};function parse_fills(t,opts){styles.Fills=[];var fill={};t[0].match(tagregex).forEach(function(x){var y=parsexmltag(x);switch(y[0]){case"<fills":case"<fills>":case"</fills>":break;case"<fill>":break;case"</fill>":styles.Fills.push(fill);fill={};break;case"<patternFill":if(y.patternType)fill.patternType=y.patternType;break;case"<patternFill/>":case"</patternFill>":break;case"<bgColor":if(!fill.bgColor)fill.bgColor={};if(y.indexed)fill.bgColor.indexed=parseInt(y.indexed,10);if(y.theme)fill.bgColor.theme=parseInt(y.theme,10);if(y.tint)fill.bgColor.tint=parseFloat(y.tint);if(y.theme&&themes.themeElements&&themes.themeElements.clrScheme){fill.bgColor.rgb=rgb_tint(themes.themeElements.clrScheme[fill.bgColor.theme].rgb,fill.bgColor.tint||0);if(opts.WTF)fill.bgColor.raw_rgb=rgb_tint(themes.themeElements.clrScheme[fill.bgColor.theme].rgb,0)}if(y.rgb)fill.bgColor.rgb=y.rgb;break;case"<bgColor/>":case"</bgColor>":break;case"<fgColor":if(!fill.fgColor)fill.fgColor={};if(y.theme)fill.fgColor.theme=parseInt(y.theme,10);if(y.tint)fill.fgColor.tint=parseFloat(y.tint);if(y.theme&&themes.themeElements&&themes.themeElements.clrScheme){fill.fgColor.rgb=rgb_tint(themes.themeElements.clrScheme[fill.fgColor.theme].rgb,fill.fgColor.tint||0);if(opts.WTF)fill.fgColor.raw_rgb=rgb_tint(themes.themeElements.clrScheme[fill.fgColor.theme].rgb,0)}if(y.rgb)fill.fgColor.rgb=y.rgb;break;case"<fgColor/>":case"</fgColor>":break;default:if(opts.WTF)throw"unrecognized "+y[0]+" in fills"}})}function parse_fonts(t,opts){styles.Fonts=[];var font={};t[0].match(tagregex).forEach(function(x){var y=parsexmltag(x);switch(y[0]){case"<fonts":case"<fonts>":case"</fonts>":break;case"<font":break;case"</font>":styles.Fonts.push(font);font={};break;case"<name":if(y.val)font.name=y.val;break;case"<name/>":case"</name>":break;case"<b/>":font.bold=true;break;case"<u/>":font.underline=true;break;case"<i/>":font.italic=true;break;case"<strike/>":font.strike=true;break;case"<outline/>":font.outline=true;break;case"<shadow/>":font.shadow=true;break;case"<sz":if(y.val)font.sz=y.val;break;case"<sz/>":case"</sz>":break;case"<vertAlign":if(y.val)font.vertAlign=y.val;break;case"<vertAlign/>":case"</vertAlign>":break;case"<color":if(!font.color)font.color={};if(y.theme)font.color.theme=y.theme;if(y.tint)font.color.tint=y.tint;if(y.theme&&themes.themeElements&&themes.themeElements.clrScheme){font.color.rgb=rgb_tint(themes.themeElements.clrScheme[font.color.theme].rgb,font.color.tint||0)}if(y.rgb)font.color.rgb=y.rgb;break;case"<color/>":case"</color>":break}})}function parse_borders(t,opts){styles.Borders=[];var border={},sub_border={};t[0].match(tagregex).forEach(function(x){var y=parsexmltag(x);switch(y[0]){case"<borders":case"<borders>":case"</borders>":break;case"<border":case"<border>":border={};if(y.diagonalUp){border.diagonalUp=y.diagonalUp}if(y.diagonalDown){border.diagonalDown=y.diagonalDown}styles.Borders.push(border);break;break;case"</border>":break;case"<left":sub_border=border.left={};if(y.style){sub_border.style=y.style}break;case"<right":sub_border=border.right={};if(y.style){sub_border.style=y.style}break;case"<top":sub_border=border.top={};if(y.style){sub_border.style=y.style}break;case"<bottom":sub_border=border.bottom={};if(y.style){sub_border.style=y.style}break;case"<diagonal":sub_border=border.diagonal={};if(y.style){sub_border.style=y.style}break;case"<color":sub_border.color={};if(y.theme)sub_border.color.theme=y.theme;if(y.theme&&themes.themeElements&&themes.themeElements.clrScheme){sub_border.color.rgb=rgb_tint(themes.themeElements.clrScheme[sub_border.color.theme].rgb,sub_border.color.tint||0)}if(y.tint)sub_border.color.tint=y.tint;if(y.rgb)sub_border.color.rgb=y.rgb;if(y.auto)sub_border.color.auto=y.auto;break;case"<name/>":case"</name>":break;default:break}})}function parse_numFmts(t,opts){styles.NumberFmt=[];var k=keys(SSF._table);for(var i=0;i<k.length;++i)styles.NumberFmt[k[i]]=SSF._table[k[i]];var m=t[0].match(tagregex);for(i=0;i<m.length;++i){var y=parsexmltag(m[i]);switch(y[0]){case"<numFmts":case"</numFmts>":case"<numFmts/>":case"<numFmts>":break;case"<numFmt":{var f=unescapexml(utf8read(y.formatCode)),j=parseInt(y.numFmtId,10);styles.NumberFmt[j]=f;if(j>0)SSF.load(f,j)}break;default:if(opts.WTF)throw"unrecognized "+y[0]+" in numFmts"}}}function write_numFmts(NF,opts){var o=["<numFmts>"];[[5,8],[23,26],[41,44],[63,66],[164,392]].forEach(function(r){for(var i=r[0];i<=r[1];++i)if(NF[i]!==undefined)o[o.length]=writextag("numFmt",null,{numFmtId:i,formatCode:escapexml(NF[i])})});if(o.length===1)return"";o[o.length]="</numFmts>";o[0]=writextag("numFmts",null,{count:o.length-2}).replace("/>",">");return o.join("")}function parse_cellXfs(t,opts){styles.CellXf=[];var xf;t[0].match(tagregex).forEach(function(x){var y=parsexmltag(x);switch(y[0]){case"<cellXfs":case"<cellXfs>":case"<cellXfs/>":case"</cellXfs>":break;case"<xf":xf=y;delete xf[0];delete y[0];if(xf.numFmtId)xf.numFmtId=parseInt(xf.numFmtId,10);if(xf.fillId)xf.fillId=parseInt(xf.fillId,10);styles.CellXf.push(xf);break;case"</xf>":break;case"<alignment":case"<alignment/>":var alignment={};if(y.vertical){alignment.vertical=y.vertical}if(y.horizontal){alignment.horizontal=y.horizontal}if(y.textRotation!=undefined){alignment.textRotation=y.textRotation}if(y.indent){alignment.indent=y.indent}if(y.wrapText){alignment.wrapText=y.wrapText}xf.alignment=alignment;break;case"<protection":case"</protection>":case"<protection/>":break;case"<extLst":case"</extLst>":break;case"<ext":break;default:if(opts.WTF)throw"unrecognized "+y[0]+" in cellXfs"}})}function write_cellXfs(cellXfs){var o=[];o[o.length]=writextag("cellXfs",null);cellXfs.forEach(function(c){o[o.length]=writextag("xf",null,c)});o[o.length]="</cellXfs>";if(o.length===2)return"";o[0]=writextag("cellXfs",null,{count:o.length-2}).replace("/>",">");return o.join("")}var parse_sty_xml=function make_pstyx(){var numFmtRegex=/<numFmts([^>]*)>.*<\/numFmts>/;var cellXfRegex=/<cellXfs([^>]*)>.*<\/cellXfs>/;var fillsRegex=/<fills([^>]*)>.*<\/fills>/;var bordersRegex=/<borders([^>]*)>.*<\/borders>/;return function parse_sty_xml(data,opts){var t;if(t=data.match(numFmtRegex))parse_numFmts(t,opts);if(t=data.match(/<fonts([^>]*)>.*<\/fonts>/))parse_fonts(t,opts);if(t=data.match(fillsRegex))parse_fills(t,opts);if(t=data.match(bordersRegex))parse_borders(t,opts);if(t=data.match(cellXfRegex))parse_cellXfs(t,opts);return styles}}();var STYLES_XML_ROOT=writextag("styleSheet",null,{xmlns:XMLNS.main[0],"xmlns:vt":XMLNS.vt});RELS.STY="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles";function write_sty_xml(wb,opts){if(typeof style_builder!="undefined"&&typeof"require"!="undefined"){return style_builder.toXml()}var o=[XML_HEADER,STYLES_XML_ROOT],w;if((w=write_numFmts(wb.SSF))!=null)o[o.length]=w;o[o.length]='<fonts count="1"><font><sz val="12"/><color theme="1"/><name val="Calibri"/><family val="2"/><scheme val="minor"/></font></fonts>';o[o.length]='<fills count="2"><fill><patternFill patternType="none"/></fill><fill><patternFill patternType="gray125"/></fill></fills>';o[o.length]='<borders count="1"><border><left/><right/><top/><bottom/><diagonal/></border></borders>';o[o.length]='<cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0"/></cellStyleXfs>';if(w=write_cellXfs(opts.cellXfs))o[o.length]=w;o[o.length]='<cellStyles count="1"><cellStyle name="Normal" xfId="0" builtinId="0"/></cellStyles>';o[o.length]='<dxfs count="0"/>';o[o.length]='<tableStyles count="0" defaultTableStyle="TableStyleMedium9" defaultPivotStyle="PivotStyleMedium4"/>';if(o.length>2){o[o.length]="</styleSheet>";o[1]=o[1].replace("/>",">")}return o.join("")}function parse_BrtFmt(data,length){var ifmt=data.read_shift(2);var stFmtCode=parse_XLWideString(data,length-2);return[ifmt,stFmtCode]}function parse_BrtFont(data,length){var out={flags:{}};out.dyHeight=data.read_shift(2);out.grbit=parse_FontFlags(data,2);out.bls=data.read_shift(2);out.sss=data.read_shift(2);out.uls=data.read_shift(1);out.bFamily=data.read_shift(1);out.bCharSet=data.read_shift(1);data.l++;out.brtColor=parse_BrtColor(data,8);out.bFontScheme=data.read_shift(1);out.name=parse_XLWideString(data,length-21);out.flags.Bold=out.bls===700;out.flags.Italic=out.grbit.fItalic;out.flags.Strikeout=out.grbit.fStrikeout;out.flags.Outline=out.grbit.fOutline;out.flags.Shadow=out.grbit.fShadow;out.flags.Condense=out.grbit.fCondense;out.flags.Extend=out.grbit.fExtend;out.flags.Sub=out.sss&2;out.flags.Sup=out.sss&1;return out}function parse_BrtXF(data,length){var ixfeParent=data.read_shift(2);var ifmt=data.read_shift(2);parsenoop(data,length-4);return{ixfe:ixfeParent,ifmt:ifmt}}function parse_sty_bin(data,opts){styles.NumberFmt=[];for(var y in SSF._table)styles.NumberFmt[y]=SSF._table[y];styles.CellXf=[];var state="";var pass=false;recordhopper(data,function hopper_sty(val,R,RT){switch(R.n){case"BrtFmt":styles.NumberFmt[val[0]]=val[1];SSF.load(val[1],val[0]);break;case"BrtFont":break;case"BrtKnownFonts":break;case"BrtFill":break;case"BrtBorder":break;case"BrtXF":if(state==="CELLXFS"){styles.CellXf.push(val)}break;case"BrtStyle":break;case"BrtDXF":break;case"BrtMRUColor":break;case"BrtIndexedColor":break;case"BrtBeginStyleSheet":break;case"BrtEndStyleSheet":break;case"BrtBeginTableStyle":break;case"BrtTableStyleElement":break;case"BrtEndTableStyle":break;case"BrtBeginFmts":state="FMTS";break;case"BrtEndFmts":state="";break;case"BrtBeginFonts":state="FONTS";break;case"BrtEndFonts":state="";break;case"BrtACBegin":state="ACFONTS";break;case"BrtACEnd":state="";break;case"BrtBeginFills":state="FILLS";break;case"BrtEndFills":state="";break;case"BrtBeginBorders":state="BORDERS";break;case"BrtEndBorders":state="";break;case"BrtBeginCellStyleXFs":state="CELLSTYLEXFS";break;case"BrtEndCellStyleXFs":state="";break;case"BrtBeginCellXFs":state="CELLXFS";break;case"BrtEndCellXFs":state="";break;case"BrtBeginStyles":state="STYLES";break;case"BrtEndStyles":state="";break;case"BrtBeginDXFs":state="DXFS";break;case"BrtEndDXFs":state="";break;case"BrtBeginTableStyles":state="TABLESTYLES";break;case"BrtEndTableStyles":state="";break;case"BrtBeginColorPalette":state="COLORPALETTE";break;case"BrtEndColorPalette":state="";break;case"BrtBeginIndexedColors":state="INDEXEDCOLORS";break;case"BrtEndIndexedColors":state="";break;case"BrtBeginMRUColors":state="MRUCOLORS";break;case"BrtEndMRUColors":state="";break;case"BrtFRTBegin":pass=true;break;case"BrtFRTEnd":pass=false;break;case"BrtBeginStyleSheetExt14":break;case"BrtBeginSlicerStyles":break;case"BrtEndSlicerStyles":break;case"BrtBeginTimelineStylesheetExt15":break;case"BrtEndTimelineStylesheetExt15":break;case"BrtBeginTimelineStyles":break;case"BrtEndTimelineStyles":break;case"BrtEndStyleSheetExt14":break;default:if(!pass||opts.WTF)throw new Error("Unexpected record "+RT+" "+R.n)}});return styles}function write_sty_bin(data,opts){var ba=buf_array();write_record(ba,"BrtBeginStyleSheet");write_record(ba,"BrtEndStyleSheet");return ba.end()}RELS.THEME="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme";function parse_clrScheme(t,opts){themes.themeElements.clrScheme=[];var color={};t[0].match(tagregex).forEach(function(x){var y=parsexmltag(x);switch(y[0]){case"<a:clrScheme":case"</a:clrScheme>":break;case"<a:srgbClr":color.rgb=y.val;break;case"<a:sysClr":color.rgb=y.lastClr;break;case"<a:dk1>":case"</a:dk1>":case"<a:dk2>":case"</a:dk2>":case"<a:lt1>":case"</a:lt1>":case"<a:lt2>":case"</a:lt2>":case"<a:accent1>":case"</a:accent1>":case"<a:accent2>":case"</a:accent2>":case"<a:accent3>":case"</a:accent3>":case"<a:accent4>":case"</a:accent4>":case"<a:accent5>":case"</a:accent5>":case"<a:accent6>":case"</a:accent6>":case"<a:hlink>":case"</a:hlink>":case"<a:folHlink>":case"</a:folHlink>":if(y[0][1]==="/"){themes.themeElements.clrScheme.push(color);color={}}else{color.name=y[0].substring(3,y[0].length-1)}break;default:if(opts.WTF)throw"unrecognized "+y[0]+" in clrScheme"}})}function parse_fontScheme(t,opts){}function parse_fmtScheme(t,opts){}var clrsregex=/<a:clrScheme([^>]*)>[^\u2603]*<\/a:clrScheme>/;var fntsregex=/<a:fontScheme([^>]*)>[^\u2603]*<\/a:fontScheme>/;var fmtsregex=/<a:fmtScheme([^>]*)>[^\u2603]*<\/a:fmtScheme>/;function parse_themeElements(data,opts){themes.themeElements={};var t;[["clrScheme",clrsregex,parse_clrScheme],["fontScheme",fntsregex,parse_fontScheme],["fmtScheme",fmtsregex,parse_fmtScheme]].forEach(function(m){if(!(t=data.match(m[1])))throw m[0]+" not found in themeElements";m[2](t,opts)})}var themeltregex=/<a:themeElements([^>]*)>[^\u2603]*<\/a:themeElements>/;function parse_theme_xml(data,opts){if(!data||data.length===0)return themes;var t;if(!(t=data.match(themeltregex)))throw"themeElements not found in theme";parse_themeElements(t[0],opts);return themes}function write_theme(opts){if(opts.themeXml){return opts.themeXml}return'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n<a:theme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="Office Theme"><a:themeElements><a:clrScheme name="Office"><a:dk1><a:sysClr val="windowText" lastClr="000000"/></a:dk1><a:lt1><a:sysClr val="window" lastClr="FFFFFF"/></a:lt1><a:dk2><a:srgbClr val="1F497D"/></a:dk2><a:lt2><a:srgbClr val="EEECE1"/></a:lt2><a:accent1><a:srgbClr val="4F81BD"/></a:accent1><a:accent2><a:srgbClr val="C0504D"/></a:accent2><a:accent3><a:srgbClr val="9BBB59"/></a:accent3><a:accent4><a:srgbClr val="8064A2"/></a:accent4><a:accent5><a:srgbClr val="4BACC6"/></a:accent5><a:accent6><a:srgbClr val="F79646"/></a:accent6><a:hlink><a:srgbClr val="0000FF"/></a:hlink><a:folHlink><a:srgbClr val="800080"/></a:folHlink></a:clrScheme><a:fontScheme name="Office"><a:majorFont><a:latin typeface="Cambria"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Jpan" typeface="锛汲 锛般偞銈枫儍銈�"/><a:font script="Hang" typeface="毵戩潃 瓿犽敃"/><a:font script="Hans" typeface="瀹嬩綋"/><a:font script="Hant" typeface="鏂扮窗鏄庨珨"/><a:font script="Arab" typeface="Times New Roman"/><a:font script="Hebr" typeface="Times New Roman"/><a:font script="Thai" typeface="Tahoma"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="MoolBoran"/><a:font script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Times New Roman"/><a:font script="Uigh" typeface="Microsoft Uighur"/><a:font script="Geor" typeface="Sylfaen"/></a:majorFont><a:minorFont><a:latin typeface="Calibri"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Jpan" typeface="锛汲 锛般偞銈枫儍銈�"/><a:font script="Hang" typeface="毵戩潃 瓿犽敃"/><a:font script="Hans" typeface="瀹嬩綋"/><a:font script="Hant" typeface="鏂扮窗鏄庨珨"/><a:font script="Arab" typeface="Arial"/><a:font script="Hebr" typeface="Arial"/><a:font script="Thai" typeface="Tahoma"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="DaunPenh"/><a:font script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Arial"/><a:font script="Uigh" typeface="Microsoft Uighur"/><a:font script="Geor" typeface="Sylfaen"/></a:minorFont></a:fontScheme><a:fmtScheme name="Office"><a:fillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="50000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="35000"><a:schemeClr val="phClr"><a:tint val="37000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:tint val="15000"/><a:satMod val="350000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="16200000" scaled="1"/></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="100000"/><a:shade val="100000"/><a:satMod val="130000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:tint val="50000"/><a:shade val="100000"/><a:satMod val="350000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="16200000" scaled="0"/></a:gradFill></a:fillStyleLst><a:lnStyleLst><a:ln w="9525" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"><a:shade val="95000"/><a:satMod val="105000"/></a:schemeClr></a:solidFill><a:prstDash val="solid"/></a:ln><a:ln w="25400" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln><a:ln w="38100" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln></a:lnStyleLst><a:effectStyleLst><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="20000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="38000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw></a:effectLst><a:scene3d><a:camera prst="orthographicFront"><a:rot lat="0" lon="0" rev="0"/></a:camera><a:lightRig rig="threePt" dir="t"><a:rot lat="0" lon="0" rev="1200000"/></a:lightRig></a:scene3d><a:sp3d><a:bevelT w="63500" h="25400"/></a:sp3d></a:effectStyle></a:effectStyleLst><a:bgFillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="40000"/><a:satMod val="350000"/></a:schemeClr></a:gs><a:gs pos="40000"><a:schemeClr val="phClr"><a:tint val="45000"/><a:shade val="99000"/><a:satMod val="350000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="20000"/><a:satMod val="255000"/></a:schemeClr></a:gs></a:gsLst><a:path path="circle"><a:fillToRect l="50000" t="-80000" r="50000" b="180000"/></a:path></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="80000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="30000"/><a:satMod val="200000"/></a:schemeClr></a:gs></a:gsLst><a:path path="circle"><a:fillToRect l="50000" t="50000" r="50000" b="50000"/></a:path></a:gradFill></a:bgFillStyleLst></a:fmtScheme></a:themeElements><a:objectDefaults><a:spDef><a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx="1"><a:schemeClr val="accent1"/></a:lnRef><a:fillRef idx="3"><a:schemeClr val="accent1"/></a:fillRef><a:effectRef idx="2"><a:schemeClr val="accent1"/></a:effectRef><a:fontRef idx="minor"><a:schemeClr val="lt1"/></a:fontRef></a:style></a:spDef><a:lnDef><a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx="2"><a:schemeClr val="accent1"/></a:lnRef><a:fillRef idx="0"><a:schemeClr val="accent1"/></a:fillRef><a:effectRef idx="1"><a:schemeClr val="accent1"/></a:effectRef><a:fontRef idx="minor"><a:schemeClr val="tx1"/></a:fontRef></a:style></a:lnDef></a:objectDefaults><a:extraClrSchemeLst/></a:theme>'}function parse_Theme(blob,length){var dwThemeVersion=blob.read_shift(4);
+if(dwThemeVersion===124226)return;blob.l+=length-4}function parse_ColorTheme(blob,length){return blob.read_shift(4)}function parse_FullColorExt(blob,length){var o={};o.xclrType=blob.read_shift(2);o.nTintShade=blob.read_shift(2);switch(o.xclrType){case 0:blob.l+=4;break;case 1:o.xclrValue=parse_IcvXF(blob,4);break;case 2:o.xclrValue=parse_LongRGBA(blob,4);break;case 3:o.xclrValue=parse_ColorTheme(blob,4);break;case 4:blob.l+=4;break}blob.l+=8;return o}function parse_IcvXF(blob,length){return parsenoop(blob,length)}function parse_XFExtGradient(blob,length){return parsenoop(blob,length)}function parse_ExtProp(blob,length){var extType=blob.read_shift(2);var cb=blob.read_shift(2);var o=[extType];switch(extType){case 4:case 5:case 7:case 8:case 9:case 10:case 11:case 13:o[1]=parse_FullColorExt(blob,cb);break;case 6:o[1]=parse_XFExtGradient(blob,cb);break;case 14:case 15:o[1]=blob.read_shift(cb===5?1:2);break;default:throw new Error("Unrecognized ExtProp type: "+extType+" "+cb)}return o}function parse_XFExt(blob,length){var end=blob.l+length;blob.l+=2;var ixfe=blob.read_shift(2);blob.l+=2;var cexts=blob.read_shift(2);var ext=[];while(cexts-- >0)ext.push(parse_ExtProp(blob,end-blob.l));return{ixfe:ixfe,ext:ext}}function update_xfext(xf,xfext){xfext.forEach(function(xfe){switch(xfe[0]){case 4:break;case 5:break;case 7:case 8:case 9:case 10:break;case 13:break;case 14:break;default:throw"bafuq"+xfe[0].toString(16)}})}function parse_cc_xml(data,opts){var d=[];var l=0,i=1;(data.match(tagregex)||[]).forEach(function(x){var y=parsexmltag(x);switch(y[0]){case"<?xml":break;case"<calcChain":case"<calcChain>":case"</calcChain>":break;case"<c":delete y[0];if(y.i)i=y.i;else y.i=i;d.push(y);break}});return d}function write_cc_xml(data,opts){}function parse_BrtCalcChainItem$(data,length){var out={};out.i=data.read_shift(4);var cell={};cell.r=data.read_shift(4);cell.c=data.read_shift(4);out.r=encode_cell(cell);var flags=data.read_shift(1);if(flags&2)out.l="1";if(flags&8)out.a="1";return out}function parse_cc_bin(data,opts){var out=[];var pass=false;recordhopper(data,function hopper_cc(val,R,RT){switch(R.n){case"BrtCalcChainItem$":out.push(val);break;case"BrtBeginCalcChain$":break;case"BrtEndCalcChain$":break;default:if(!pass||opts.WTF)throw new Error("Unexpected record "+RT+" "+R.n)}});return out}function write_cc_bin(data,opts){}function parse_comments(zip,dirComments,sheets,sheetRels,opts){for(var i=0;i!=dirComments.length;++i){var canonicalpath=dirComments[i];var comments=parse_cmnt(getzipdata(zip,canonicalpath.replace(/^\//,""),true),canonicalpath,opts);if(!comments||!comments.length)continue;var sheetNames=keys(sheets);for(var j=0;j!=sheetNames.length;++j){var sheetName=sheetNames[j];var rels=sheetRels[sheetName];if(rels){var rel=rels[canonicalpath];if(rel)insertCommentsIntoSheet(sheetName,sheets[sheetName],comments)}}}}function insertCommentsIntoSheet(sheetName,sheet,comments){comments.forEach(function(comment){var cell=sheet[comment.ref];if(!cell){cell={};sheet[comment.ref]=cell;var range=safe_decode_range(sheet["!ref"]||"BDWGO1000001:A1");var thisCell=decode_cell(comment.ref);if(range.s.r>thisCell.r)range.s.r=thisCell.r;if(range.e.r<thisCell.r)range.e.r=thisCell.r;if(range.s.c>thisCell.c)range.s.c=thisCell.c;if(range.e.c<thisCell.c)range.e.c=thisCell.c;var encoded=encode_range(range);if(encoded!==sheet["!ref"])sheet["!ref"]=encoded}if(!cell.c)cell.c=[];var o={a:comment.author,t:comment.t,r:comment.r};if(comment.h)o.h=comment.h;cell.c.push(o)})}function parse_comments_xml(data,opts){if(data.match(/<(?:\w+:)?comments *\/>/))return[];var authors=[];var commentList=[];data.match(/<(?:\w+:)?authors>([^\u2603]*)<\/(?:\w+:)?authors>/)[1].split(/<\/\w*:?author>/).forEach(function(x){if(x===""||x.trim()==="")return;authors.push(x.match(/<(?:\w+:)?author[^>]*>(.*)/)[1])});(data.match(/<(?:\w+:)?commentList>([^\u2603]*)<\/(?:\w+:)?commentList>/)||["",""])[1].split(/<\/\w*:?comment>/).forEach(function(x,index){if(x===""||x.trim()==="")return;var y=parsexmltag(x.match(/<(?:\w+:)?comment[^>]*>/)[0]);var comment={author:y.authorId&&authors[y.authorId]?authors[y.authorId]:undefined,ref:y.ref,guid:y.guid};var cell=decode_cell(y.ref);if(opts.sheetRows&&opts.sheetRows<=cell.r)return;var textMatch=x.match(/<text>([^\u2603]*)<\/text>/);if(!textMatch||!textMatch[1])return;var rt=parse_si(textMatch[1]);comment.r=rt.r;comment.t=rt.t;if(opts.cellHTML)comment.h=rt.h;commentList.push(comment)});return commentList}function write_comments_xml(data,opts){}function parse_BrtBeginComment(data,length){var out={};out.iauthor=data.read_shift(4);var rfx=parse_UncheckedRfX(data,16);out.rfx=rfx.s;out.ref=encode_cell(rfx.s);data.l+=16;return out}var parse_BrtCommentAuthor=parse_XLWideString;var parse_BrtCommentText=parse_RichStr;function parse_comments_bin(data,opts){var out=[];var authors=[];var c={};var pass=false;recordhopper(data,function hopper_cmnt(val,R,RT){switch(R.n){case"BrtCommentAuthor":authors.push(val);break;case"BrtBeginComment":c=val;break;case"BrtCommentText":c.t=val.t;c.h=val.h;c.r=val.r;break;case"BrtEndComment":c.author=authors[c.iauthor];delete c.iauthor;if(opts.sheetRows&&opts.sheetRows<=c.rfx.r)break;delete c.rfx;out.push(c);break;case"BrtBeginComments":break;case"BrtEndComments":break;case"BrtBeginCommentAuthors":break;case"BrtEndCommentAuthors":break;case"BrtBeginCommentList":break;case"BrtEndCommentList":break;default:if(!pass||opts.WTF)throw new Error("Unexpected record "+RT+" "+R.n)}});return out}function write_comments_bin(data,opts){}var rc_to_a1=function(){var rcregex=/(^|[^A-Za-z])R(\[?)(-?\d+|)\]?C(\[?)(-?\d+|)\]?/g;var rcbase;function rcfunc($$,$1,$2,$3,$4,$5){var R=$3.length>0?parseInt($3,10)|0:0,C=$5.length>0?parseInt($5,10)|0:0;if(C<0&&$4.length===0)C=0;if($4.length>0)C+=rcbase.c;if($2.length>0)R+=rcbase.r;return $1+encode_col(C)+encode_row(R)}return function rc_to_a1(fstr,base){rcbase=base;return fstr.replace(rcregex,rcfunc)}}();function parseread(l){return function(blob,length){blob.l+=l;return}}function parseread1(blob,length){blob.l+=1;return}function parse_ColRelU(blob,length){var c=blob.read_shift(2);return[c&16383,c>>14&1,c>>15&1]}function parse_RgceArea(blob,length){var r=blob.read_shift(2),R=blob.read_shift(2);var c=parse_ColRelU(blob,2);var C=parse_ColRelU(blob,2);return{s:{r:r,c:c[0],cRel:c[1],rRel:c[2]},e:{r:R,c:C[0],cRel:C[1],rRel:C[2]}}}function parse_RgceAreaRel(blob,length){var r=blob.read_shift(2),R=blob.read_shift(2);var c=parse_ColRelU(blob,2);var C=parse_ColRelU(blob,2);return{s:{r:r,c:c[0],cRel:c[1],rRel:c[2]},e:{r:R,c:C[0],cRel:C[1],rRel:C[2]}}}function parse_RgceLoc(blob,length){var r=blob.read_shift(2);var c=parse_ColRelU(blob,2);return{r:r,c:c[0],cRel:c[1],rRel:c[2]}}function parse_RgceLocRel(blob,length){var r=blob.read_shift(2);var cl=blob.read_shift(2);var cRel=(cl&32768)>>15,rRel=(cl&16384)>>14;cl&=16383;if(cRel!==0)while(cl>=256)cl-=256;return{r:r,c:cl,cRel:cRel,rRel:rRel}}function parse_PtgArea(blob,length){var type=(blob[blob.l++]&96)>>5;var area=parse_RgceArea(blob,8);return[type,area]}function parse_PtgArea3d(blob,length){var type=(blob[blob.l++]&96)>>5;var ixti=blob.read_shift(2);var area=parse_RgceArea(blob,8);return[type,ixti,area]}function parse_PtgAreaErr(blob,length){var type=(blob[blob.l++]&96)>>5;blob.l+=8;return[type]}function parse_PtgAreaErr3d(blob,length){var type=(blob[blob.l++]&96)>>5;var ixti=blob.read_shift(2);blob.l+=8;return[type,ixti]}function parse_PtgAreaN(blob,length){var type=(blob[blob.l++]&96)>>5;var area=parse_RgceAreaRel(blob,8);return[type,area]}function parse_PtgArray(blob,length){var type=(blob[blob.l++]&96)>>5;blob.l+=7;return[type]}function parse_PtgAttrBaxcel(blob,length){var bitSemi=blob[blob.l+1]&1;var bitBaxcel=1;blob.l+=4;return[bitSemi,bitBaxcel]}function parse_PtgAttrChoose(blob,length){blob.l+=2;var offset=blob.read_shift(2);var o=[];for(var i=0;i<=offset;++i)o.push(blob.read_shift(2));return o}function parse_PtgAttrGoto(blob,length){var bitGoto=blob[blob.l+1]&255?1:0;blob.l+=2;return[bitGoto,blob.read_shift(2)]}function parse_PtgAttrIf(blob,length){var bitIf=blob[blob.l+1]&255?1:0;blob.l+=2;return[bitIf,blob.read_shift(2)]}function parse_PtgAttrSemi(blob,length){var bitSemi=blob[blob.l+1]&255?1:0;blob.l+=4;return[bitSemi]}function parse_PtgAttrSpaceType(blob,length){var type=blob.read_shift(1),cch=blob.read_shift(1);return[type,cch]}function parse_PtgAttrSpace(blob,length){blob.read_shift(2);return parse_PtgAttrSpaceType(blob,2)}function parse_PtgAttrSpaceSemi(blob,length){blob.read_shift(2);return parse_PtgAttrSpaceType(blob,2)}function parse_PtgRef(blob,length){var ptg=blob[blob.l]&31;var type=(blob[blob.l]&96)>>5;blob.l+=1;var loc=parse_RgceLoc(blob,4);return[type,loc]}function parse_PtgRefN(blob,length){var ptg=blob[blob.l]&31;var type=(blob[blob.l]&96)>>5;blob.l+=1;var loc=parse_RgceLocRel(blob,4);return[type,loc]}function parse_PtgRef3d(blob,length){var ptg=blob[blob.l]&31;var type=(blob[blob.l]&96)>>5;blob.l+=1;var ixti=blob.read_shift(2);var loc=parse_RgceLoc(blob,4);return[type,ixti,loc]}function parse_PtgFunc(blob,length){var ptg=blob[blob.l]&31;var type=(blob[blob.l]&96)>>5;blob.l+=1;var iftab=blob.read_shift(2);return[FtabArgc[iftab],Ftab[iftab]]}function parse_PtgFuncVar(blob,length){blob.l++;var cparams=blob.read_shift(1),tab=parsetab(blob);return[cparams,(tab[0]===0?Ftab:Cetab)[tab[1]]]}function parsetab(blob,length){return[blob[blob.l+1]>>7,blob.read_shift(2)&32767]}var parse_PtgAttrSum=parseread(4);var parse_PtgConcat=parseread1;function parse_PtgExp(blob,length){blob.l++;var row=blob.read_shift(2);var col=blob.read_shift(2);return[row,col]}function parse_PtgErr(blob,length){blob.l++;return BErr[blob.read_shift(1)]}function parse_PtgInt(blob,length){blob.l++;return blob.read_shift(2)}function parse_PtgBool(blob,length){blob.l++;return blob.read_shift(1)!==0}function parse_PtgNum(blob,length){blob.l++;return parse_Xnum(blob,8)}function parse_PtgStr(blob,length){blob.l++;return parse_ShortXLUnicodeString(blob)}function parse_SerAr(blob){var val=[];switch(val[0]=blob.read_shift(1)){case 4:val[1]=parsebool(blob,1)?"TRUE":"FALSE";blob.l+=7;break;case 16:val[1]=BErr[blob[blob.l]];blob.l+=8;break;case 0:blob.l+=8;break;case 1:val[1]=parse_Xnum(blob,8);break;case 2:val[1]=parse_XLUnicodeString(blob);break}return val}function parse_PtgExtraMem(blob,cce){var count=blob.read_shift(2);var out=[];for(var i=0;i!=count;++i)out.push(parse_Ref8U(blob,8));return out}function parse_PtgExtraArray(blob){var cols=1+blob.read_shift(1);var rows=1+blob.read_shift(2);for(var i=0,o=[];i!=rows&&(o[i]=[]);++i)for(var j=0;j!=cols;++j)o[i][j]=parse_SerAr(blob);return o}function parse_PtgName(blob,length){var type=blob.read_shift(1)>>>5&3;var nameindex=blob.read_shift(4);return[type,0,nameindex]}function parse_PtgNameX(blob,length){var type=blob.read_shift(1)>>>5&3;var ixti=blob.read_shift(2);var nameindex=blob.read_shift(4);return[type,ixti,nameindex]}function parse_PtgMemArea(blob,length){var type=blob.read_shift(1)>>>5&3;blob.l+=4;var cce=blob.read_shift(2);return[type,cce]}function parse_PtgMemFunc(blob,length){var type=blob.read_shift(1)>>>5&3;var cce=blob.read_shift(2);return[type,cce]}function parse_PtgRefErr(blob,length){var type=blob.read_shift(1)>>>5&3;blob.l+=4;return[type]}var parse_PtgAdd=parseread1;var parse_PtgDiv=parseread1;var parse_PtgEq=parseread1;var parse_PtgGe=parseread1;var parse_PtgGt=parseread1;var parse_PtgIsect=parseread1;var parse_PtgLe=parseread1;var parse_PtgLt=parseread1;var parse_PtgMissArg=parseread1;var parse_PtgMul=parseread1;var parse_PtgNe=parseread1;var parse_PtgParen=parseread1;var parse_PtgPercent=parseread1;var parse_PtgPower=parseread1;var parse_PtgRange=parseread1;var parse_PtgSub=parseread1;var parse_PtgUminus=parseread1;var parse_PtgUnion=parseread1;var parse_PtgUplus=parseread1;var parse_PtgMemErr=parsenoop;var parse_PtgMemNoMem=parsenoop;var parse_PtgRefErr3d=parsenoop;var parse_PtgTbl=parsenoop;var PtgTypes={1:{n:"PtgExp",f:parse_PtgExp},2:{n:"PtgTbl",f:parse_PtgTbl},3:{n:"PtgAdd",f:parse_PtgAdd},4:{n:"PtgSub",f:parse_PtgSub},5:{n:"PtgMul",f:parse_PtgMul},6:{n:"PtgDiv",f:parse_PtgDiv},7:{n:"PtgPower",f:parse_PtgPower},8:{n:"PtgConcat",f:parse_PtgConcat},9:{n:"PtgLt",f:parse_PtgLt},10:{n:"PtgLe",f:parse_PtgLe},11:{n:"PtgEq",f:parse_PtgEq},12:{n:"PtgGe",f:parse_PtgGe},13:{n:"PtgGt",f:parse_PtgGt},14:{n:"PtgNe",f:parse_PtgNe},15:{n:"PtgIsect",f:parse_PtgIsect},16:{n:"PtgUnion",f:parse_PtgUnion},17:{n:"PtgRange",f:parse_PtgRange},18:{n:"PtgUplus",f:parse_PtgUplus},19:{n:"PtgUminus",f:parse_PtgUminus},20:{n:"PtgPercent",f:parse_PtgPercent},21:{n:"PtgParen",f:parse_PtgParen},22:{n:"PtgMissArg",f:parse_PtgMissArg},23:{n:"PtgStr",f:parse_PtgStr},28:{n:"PtgErr",f:parse_PtgErr},29:{n:"PtgBool",f:parse_PtgBool},30:{n:"PtgInt",f:parse_PtgInt},31:{n:"PtgNum",f:parse_PtgNum},32:{n:"PtgArray",f:parse_PtgArray},33:{n:"PtgFunc",f:parse_PtgFunc},34:{n:"PtgFuncVar",f:parse_PtgFuncVar},35:{n:"PtgName",f:parse_PtgName},36:{n:"PtgRef",f:parse_PtgRef},37:{n:"PtgArea",f:parse_PtgArea},38:{n:"PtgMemArea",f:parse_PtgMemArea},39:{n:"PtgMemErr",f:parse_PtgMemErr},40:{n:"PtgMemNoMem",f:parse_PtgMemNoMem},41:{n:"PtgMemFunc",f:parse_PtgMemFunc},42:{n:"PtgRefErr",f:parse_PtgRefErr},43:{n:"PtgAreaErr",f:parse_PtgAreaErr},44:{n:"PtgRefN",f:parse_PtgRefN},45:{n:"PtgAreaN",f:parse_PtgAreaN},57:{n:"PtgNameX",f:parse_PtgNameX},58:{n:"PtgRef3d",f:parse_PtgRef3d},59:{n:"PtgArea3d",f:parse_PtgArea3d},60:{n:"PtgRefErr3d",f:parse_PtgRefErr3d},61:{n:"PtgAreaErr3d",f:parse_PtgAreaErr3d},255:{}};var PtgDupes={64:32,96:32,65:33,97:33,66:34,98:34,67:35,99:35,68:36,100:36,69:37,101:37,70:38,102:38,71:39,103:39,72:40,104:40,73:41,105:41,74:42,106:42,75:43,107:43,76:44,108:44,77:45,109:45,89:57,121:57,90:58,122:58,91:59,123:59,92:60,124:60,93:61,125:61};(function(){for(var y in PtgDupes)PtgTypes[y]=PtgTypes[PtgDupes[y]]})();var Ptg18={};var Ptg19={1:{n:"PtgAttrSemi",f:parse_PtgAttrSemi},2:{n:"PtgAttrIf",f:parse_PtgAttrIf},4:{n:"PtgAttrChoose",f:parse_PtgAttrChoose},8:{n:"PtgAttrGoto",f:parse_PtgAttrGoto},16:{n:"PtgAttrSum",f:parse_PtgAttrSum},32:{n:"PtgAttrBaxcel",f:parse_PtgAttrBaxcel},64:{n:"PtgAttrSpace",f:parse_PtgAttrSpace},65:{n:"PtgAttrSpaceSemi",f:parse_PtgAttrSpaceSemi},255:{}};function parse_Formula(blob,length,opts){var cell=parse_XLSCell(blob,6);var val=parse_FormulaValue(blob,8);var flags=blob.read_shift(1);blob.read_shift(1);var chn=blob.read_shift(4);var cbf="";if(opts.biff===5)blob.l+=length-20;else cbf=parse_XLSCellParsedFormula(blob,length-20,opts);return{cell:cell,val:val[0],formula:cbf,shared:flags>>3&1,tt:val[1]}}function parse_FormulaValue(blob){var b;if(__readUInt16LE(blob,blob.l+6)!==65535)return[parse_Xnum(blob),"n"];switch(blob[blob.l]){case 0:blob.l+=8;return["String","s"];case 1:b=blob[blob.l+2]===1;blob.l+=8;return[b,"b"];case 2:b=blob[blob.l+2];blob.l+=8;return[b,"e"];case 3:blob.l+=8;return["","s"]}}function parse_RgbExtra(blob,length,rgce,opts){if(opts.biff<8)return parsenoop(blob,length);var target=blob.l+length;var o=[];for(var i=0;i!==rgce.length;++i){switch(rgce[i][0]){case"PtgArray":rgce[i][1]=parse_PtgExtraArray(blob);o.push(rgce[i][1]);break;case"PtgMemArea":rgce[i][2]=parse_PtgExtraMem(blob,rgce[i][1]);o.push(rgce[i][2]);break;default:break}}length=target-blob.l;if(length!==0)o.push(parsenoop(blob,length));return o}function parse_NameParsedFormula(blob,length,opts,cce){var target=blob.l+length;var rgce=parse_Rgce(blob,cce);var rgcb;if(target!==blob.l)rgcb=parse_RgbExtra(blob,target-blob.l,rgce,opts);return[rgce,rgcb]}function parse_XLSCellParsedFormula(blob,length,opts){var target=blob.l+length;var rgcb,cce=blob.read_shift(2);if(cce==65535)return[[],parsenoop(blob,length-2)];var rgce=parse_Rgce(blob,cce);if(length!==cce+2)rgcb=parse_RgbExtra(blob,length-cce-2,rgce,opts);return[rgce,rgcb]}function parse_SharedParsedFormula(blob,length,opts){var target=blob.l+length;var rgcb,cce=blob.read_shift(2);var rgce=parse_Rgce(blob,cce);if(cce==65535)return[[],parsenoop(blob,length-2)];if(length!==cce+2)rgcb=parse_RgbExtra(blob,target-cce-2,rgce,opts);return[rgce,rgcb]}function parse_ArrayParsedFormula(blob,length,opts,ref){var target=blob.l+length;var rgcb,cce=blob.read_shift(2);if(cce==65535)return[[],parsenoop(blob,length-2)];var rgce=parse_Rgce(blob,cce);if(length!==cce+2)rgcb=parse_RgbExtra(blob,target-cce-2,rgce,opts);return[rgce,rgcb]}function parse_Rgce(blob,length){var target=blob.l+length;var R,id,ptgs=[];while(target!=blob.l){length=target-blob.l;id=blob[blob.l];R=PtgTypes[id];if(id===24||id===25){id=blob[blob.l+1];R=(id===24?Ptg18:Ptg19)[id]}if(!R||!R.f){ptgs.push(parsenoop(blob,length))}else{ptgs.push([R.n,R.f(blob,length)])}}return ptgs}function mapper(x){return x.map(function f2(y){return y[1]}).join(",")}function stringify_formula(formula,range,cell,supbooks,opts){if(opts!==undefined&&opts.biff===5)return"BIFF5??";var _range=range!==undefined?range:{s:{c:0,r:0}};var stack=[],e1,e2,type,c,ixti,nameidx,r;if(!formula[0]||!formula[0][0])return"";for(var ff=0,fflen=formula[0].length;ff<fflen;++ff){var f=formula[0][ff];switch(f[0]){case"PtgUminus":stack.push("-"+stack.pop());break;case"PtgUplus":stack.push("+"+stack.pop());break;case"PtgPercent":stack.push(stack.pop()+"%");break;case"PtgAdd":e1=stack.pop();e2=stack.pop();stack.push(e2+"+"+e1);break;case"PtgSub":e1=stack.pop();e2=stack.pop();stack.push(e2+"-"+e1);break;case"PtgMul":e1=stack.pop();e2=stack.pop();stack.push(e2+"*"+e1);break;case"PtgDiv":e1=stack.pop();e2=stack.pop();stack.push(e2+"/"+e1);break;case"PtgPower":e1=stack.pop();e2=stack.pop();stack.push(e2+"^"+e1);break;case"PtgConcat":e1=stack.pop();e2=stack.pop();stack.push(e2+"&"+e1);break;case"PtgLt":e1=stack.pop();e2=stack.pop();stack.push(e2+"<"+e1);break;case"PtgLe":e1=stack.pop();e2=stack.pop();stack.push(e2+"<="+e1);break;case"PtgEq":e1=stack.pop();e2=stack.pop();stack.push(e2+"="+e1);break;case"PtgGe":e1=stack.pop();e2=stack.pop();stack.push(e2+">="+e1);break;case"PtgGt":e1=stack.pop();e2=stack.pop();stack.push(e2+">"+e1);break;case"PtgNe":e1=stack.pop();e2=stack.pop();stack.push(e2+"<>"+e1);break;case"PtgIsect":e1=stack.pop();e2=stack.pop();stack.push(e2+" "+e1);break;case"PtgUnion":e1=stack.pop();e2=stack.pop();stack.push(e2+","+e1);break;case"PtgRange":break;case"PtgAttrChoose":break;case"PtgAttrGoto":break;case"PtgAttrIf":break;case"PtgRef":type=f[1][0];c=shift_cell_xls(decode_cell(encode_cell(f[1][1])),_range);stack.push(encode_cell(c));break;case"PtgRefN":type=f[1][0];c=shift_cell_xls(decode_cell(encode_cell(f[1][1])),cell);stack.push(encode_cell(c));break;case"PtgRef3d":type=f[1][0];ixti=f[1][1];c=shift_cell_xls(f[1][2],_range);stack.push(supbooks[1][ixti+1]+"!"+encode_cell(c));break;case"PtgFunc":case"PtgFuncVar":var argc=f[1][0],func=f[1][1];if(!argc)argc=0;var args=stack.slice(-argc);stack.length-=argc;if(func==="User")func=args.shift();stack.push(func+"("+args.join(",")+")");break;case"PtgBool":stack.push(f[1]?"TRUE":"FALSE");break;case"PtgInt":stack.push(f[1]);break;case"PtgNum":stack.push(String(f[1]));break;case"PtgStr":stack.push('"'+f[1]+'"');break;case"PtgErr":stack.push(f[1]);break;case"PtgArea":type=f[1][0];r=shift_range_xls(f[1][1],_range);stack.push(encode_range(r));break;case"PtgArea3d":type=f[1][0];ixti=f[1][1];r=f[1][2];stack.push(supbooks[1][ixti+1]+"!"+encode_range(r));break;case"PtgAttrSum":stack.push("SUM("+stack.pop()+")");break;case"PtgAttrSemi":break;case"PtgName":nameidx=f[1][2];var lbl=supbooks[0][nameidx];var name=lbl.Name;if(name in XLSXFutureFunctions)name=XLSXFutureFunctions[name];stack.push(name);break;case"PtgNameX":var bookidx=f[1][1];nameidx=f[1][2];var externbook;if(supbooks[bookidx+1])externbook=supbooks[bookidx+1][nameidx];else if(supbooks[bookidx-1])externbook=supbooks[bookidx-1][nameidx];if(!externbook)externbook={body:"??NAMEX??"};stack.push(externbook.body);break;case"PtgParen":stack.push("("+stack.pop()+")");break;case"PtgRefErr":stack.push("#REF!");break;case"PtgExp":c={c:f[1][1],r:f[1][0]};var q={c:cell.c,r:cell.r};if(supbooks.sharedf[encode_cell(c)]){var parsedf=supbooks.sharedf[encode_cell(c)];stack.push(stringify_formula(parsedf,_range,q,supbooks,opts))}else{var fnd=false;for(e1=0;e1!=supbooks.arrayf.length;++e1){e2=supbooks.arrayf[e1];if(c.c<e2[0].s.c||c.c>e2[0].e.c)continue;if(c.r<e2[0].s.r||c.r>e2[0].e.r)continue;stack.push(stringify_formula(e2[1],_range,q,supbooks,opts))}if(!fnd)stack.push(f[1])}break;case"PtgArray":stack.push("{"+f[1].map(mapper).join(";")+"}");break;case"PtgMemArea":break;case"PtgAttrSpace":break;case"PtgTbl":break;case"PtgMemErr":break;case"PtgMissArg":stack.push("");break;case"PtgAreaErr":break;case"PtgAreaN":stack.push("");break;case"PtgRefErr3d":break;case"PtgMemFunc":break;default:throw"Unrecognized Formula Token: "+f}}return stack[0]}function parse_XLSBCellParsedFormula(data,length){var cce=data.read_shift(4);return parsenoop(data,length-4)}var PtgDataType={1:"REFERENCE",2:"VALUE",3:"ARRAY"};var Cetab={0:"BEEP",1:"OPEN",2:"OPEN.LINKS",3:"CLOSE.ALL",4:"SAVE",5:"SAVE.AS",6:"FILE.DELETE",7:"PAGE.SETUP",8:"PRINT",9:"PRINTER.SETUP",10:"QUIT",11:"NEW.WINDOW",12:"ARRANGE.ALL",13:"WINDOW.SIZE",14:"WINDOW.MOVE",15:"FULL",16:"CLOSE",17:"RUN",22:"SET.PRINT.AREA",23:"SET.PRINT.TITLES",24:"SET.PAGE.BREAK",25:"REMOVE.PAGE.BREAK",26:"FONT",27:"DISPLAY",28:"PROTECT.DOCUMENT",29:"PRECISION",30:"A1.R1C1",31:"CALCULATE.NOW",32:"CALCULATION",34:"DATA.FIND",35:"EXTRACT",36:"DATA.DELETE",37:"SET.DATABASE",38:"SET.CRITERIA",39:"SORT",40:"DATA.SERIES",41:"TABLE",42:"FORMAT.NUMBER",43:"ALIGNMENT",44:"STYLE",45:"BORDER",46:"CELL.PROTECTION",47:"COLUMN.WIDTH",48:"UNDO",49:"CUT",50:"COPY",51:"PASTE",52:"CLEAR",53:"PASTE.SPECIAL",54:"EDIT.DELETE",55:"INSERT",56:"FILL.RIGHT",57:"FILL.DOWN",61:"DEFINE.NAME",62:"CREATE.NAMES",63:"FORMULA.GOTO",64:"FORMULA.FIND",65:"SELECT.LAST.CELL",66:"SHOW.ACTIVE.CELL",67:"GALLERY.AREA",68:"GALLERY.BAR",69:"GALLERY.COLUMN",70:"GALLERY.LINE",71:"GALLERY.PIE",72:"GALLERY.SCATTER",73:"COMBINATION",74:"PREFERRED",75:"ADD.OVERLAY",76:"GRIDLINES",77:"SET.PREFERRED",78:"AXES",79:"LEGEND",80:"ATTACH.TEXT",81:"ADD.ARROW",82:"SELECT.CHART",83:"SELECT.PLOT.AREA",84:"PATTERNS",85:"MAIN.CHART",86:"OVERLAY",87:"SCALE",88:"FORMAT.LEGEND",89:"FORMAT.TEXT",90:"EDIT.REPEAT",91:"PARSE",92:"JUSTIFY",93:"HIDE",94:"UNHIDE",95:"WORKSPACE",96:"FORMULA",97:"FORMULA.FILL",98:"FORMULA.ARRAY",99:"DATA.FIND.NEXT",100:"DATA.FIND.PREV",101:"FORMULA.FIND.NEXT",102:"FORMULA.FIND.PREV",103:"ACTIVATE",104:"ACTIVATE.NEXT",105:"ACTIVATE.PREV",106:"UNLOCKED.NEXT",107:"UNLOCKED.PREV",108:"COPY.PICTURE",109:"SELECT",110:"DELETE.NAME",111:"DELETE.FORMAT",112:"VLINE",113:"HLINE",114:"VPAGE",115:"HPAGE",116:"VSCROLL",117:"HSCROLL",118:"ALERT",119:"NEW",120:"CANCEL.COPY",121:"SHOW.CLIPBOARD",122:"MESSAGE",124:"PASTE.LINK",125:"APP.ACTIVATE",126:"DELETE.ARROW",127:"ROW.HEIGHT",128:"FORMAT.MOVE",129:"FORMAT.SIZE",130:"FORMULA.REPLACE",131:"SEND.KEYS",132:"SELECT.SPECIAL",133:"APPLY.NAMES",134:"REPLACE.FONT",135:"FREEZE.PANES",136:"SHOW.INFO",137:"SPLIT",138:"ON.WINDOW",139:"ON.DATA",140:"DISABLE.INPUT",142:"OUTLINE",143:"LIST.NAMES",144:"FILE.CLOSE",145:"SAVE.WORKBOOK",146:"DATA.FORM",147:"COPY.CHART",148:"ON.TIME",149:"WAIT",150:"FORMAT.FONT",151:"FILL.UP",152:"FILL.LEFT",153:"DELETE.OVERLAY",155:"SHORT.MENUS",159:"SET.UPDATE.STATUS",161:"COLOR.PALETTE",162:"DELETE.STYLE",163:"WINDOW.RESTORE",164:"WINDOW.MAXIMIZE",166:"CHANGE.LINK",167:"CALCULATE.DOCUMENT",168:"ON.KEY",169:"APP.RESTORE",170:"APP.MOVE",171:"APP.SIZE",172:"APP.MINIMIZE",173:"APP.MAXIMIZE",174:"BRING.TO.FRONT",175:"SEND.TO.BACK",185:"MAIN.CHART.TYPE",186:"OVERLAY.CHART.TYPE",187:"SELECT.END",188:"OPEN.MAIL",189:"SEND.MAIL",190:"STANDARD.FONT",191:"CONSOLIDATE",192:"SORT.SPECIAL",193:"GALLERY.3D.AREA",194:"GALLERY.3D.COLUMN",195:"GALLERY.3D.LINE",196:"GALLERY.3D.PIE",197:"VIEW.3D",198:"GOAL.SEEK",199:"WORKGROUP",200:"FILL.GROUP",201:"UPDATE.LINK",202:"PROMOTE",203:"DEMOTE",204:"SHOW.DETAIL",206:"UNGROUP",207:"OBJECT.PROPERTIES",208:"SAVE.NEW.OBJECT",209:"SHARE",210:"SHARE.NAME",211:"DUPLICATE",212:"APPLY.STYLE",213:"ASSIGN.TO.OBJECT",214:"OBJECT.PROTECTION",215:"HIDE.OBJECT",216:"SET.EXTRACT",217:"CREATE.PUBLISHER",218:"SUBSCRIBE.TO",219:"ATTRIBUTES",220:"SHOW.TOOLBAR",222:"PRINT.PREVIEW",223:"EDIT.COLOR",224:"SHOW.LEVELS",225:"FORMAT.MAIN",226:"FORMAT.OVERLAY",227:"ON.RECALC",228:"EDIT.SERIES",229:"DEFINE.STYLE",240:"LINE.PRINT",243:"ENTER.DATA",249:"GALLERY.RADAR",250:"MERGE.STYLES",251:"EDITION.OPTIONS",252:"PASTE.PICTURE",253:"PASTE.PICTURE.LINK",254:"SPELLING",256:"ZOOM",259:"INSERT.OBJECT",260:"WINDOW.MINIMIZE",265:"SOUND.NOTE",266:"SOUND.PLAY",267:"FORMAT.SHAPE",268:"EXTEND.POLYGON",269:"FORMAT.AUTO",272:"GALLERY.3D.BAR",273:"GALLERY.3D.SURFACE",274:"FILL.AUTO",276:"CUSTOMIZE.TOOLBAR",277:"ADD.TOOL",278:"EDIT.OBJECT",279:"ON.DOUBLECLICK",280:"ON.ENTRY",281:"WORKBOOK.ADD",282:"WORKBOOK.MOVE",283:"WORKBOOK.COPY",284:"WORKBOOK.OPTIONS",285:"SAVE.WORKSPACE",288:"CHART.WIZARD",289:"DELETE.TOOL",290:"MOVE.TOOL",291:"WORKBOOK.SELECT",292:"WORKBOOK.ACTIVATE",293:"ASSIGN.TO.TOOL",295:"COPY.TOOL",296:"RESET.TOOL",297:"CONSTRAIN.NUMERIC",298:"PASTE.TOOL",302:"WORKBOOK.NEW",305:"SCENARIO.CELLS",306:"SCENARIO.DELETE",307:"SCENARIO.ADD",308:"SCENARIO.EDIT",309:"SCENARIO.SHOW",310:"SCENARIO.SHOW.NEXT",311:"SCENARIO.SUMMARY",312:"PIVOT.TABLE.WIZARD",313:"PIVOT.FIELD.PROPERTIES",314:"PIVOT.FIELD",315:"PIVOT.ITEM",316:"PIVOT.ADD.FIELDS",318:"OPTIONS.CALCULATION",319:"OPTIONS.EDIT",320:"OPTIONS.VIEW",321:"ADDIN.MANAGER",322:"MENU.EDITOR",323:"ATTACH.TOOLBARS",324:"VBAActivate",325:"OPTIONS.CHART",328:"VBA.INSERT.FILE",330:"VBA.PROCEDURE.DEFINITION",336:"ROUTING.SLIP",338:"ROUTE.DOCUMENT",339:"MAIL.LOGON",342:"INSERT.PICTURE",343:"EDIT.TOOL",344:"GALLERY.DOUGHNUT",350:"CHART.TREND",352:"PIVOT.ITEM.PROPERTIES",354:"WORKBOOK.INSERT",355:"OPTIONS.TRANSITION",356:"OPTIONS.GENERAL",370:"FILTER.ADVANCED",373:"MAIL.ADD.MAILER",374:"MAIL.DELETE.MAILER",375:"MAIL.REPLY",376:"MAIL.REPLY.ALL",377:"MAIL.FORWARD",378:"MAIL.NEXT.LETTER",379:"DATA.LABEL",380:"INSERT.TITLE",381:"FONT.PROPERTIES",382:"MACRO.OPTIONS",383:"WORKBOOK.HIDE",384:"WORKBOOK.UNHIDE",385:"WORKBOOK.DELETE",386:"WORKBOOK.NAME",388:"GALLERY.CUSTOM",390:"ADD.CHART.AUTOFORMAT",391:"DELETE.CHART.AUTOFORMAT",392:"CHART.ADD.DATA",393:"AUTO.OUTLINE",394:"TAB.ORDER",395:"SHOW.DIALOG",396:"SELECT.ALL",397:"UNGROUP.SHEETS",398:"SUBTOTAL.CREATE",399:"SUBTOTAL.REMOVE",400:"RENAME.OBJECT",412:"WORKBOOK.SCROLL",413:"WORKBOOK.NEXT",414:"WORKBOOK.PREV",415:"WORKBOOK.TAB.SPLIT",416:"FULL.SCREEN",417:"WORKBOOK.PROTECT",420:"SCROLLBAR.PROPERTIES",421:"PIVOT.SHOW.PAGES",422:"TEXT.TO.COLUMNS",423:"FORMAT.CHARTTYPE",424:"LINK.FORMAT",425:"TRACER.DISPLAY",430:"TRACER.NAVIGATE",431:"TRACER.CLEAR",432:"TRACER.ERROR",433:"PIVOT.FIELD.GROUP",434:"PIVOT.FIELD.UNGROUP",435:"CHECKBOX.PROPERTIES",436:"LABEL.PROPERTIES",437:"LISTBOX.PROPERTIES",438:"EDITBOX.PROPERTIES",439:"PIVOT.REFRESH",440:"LINK.COMBO",441:"OPEN.TEXT",442:"HIDE.DIALOG",443:"SET.DIALOG.FOCUS",444:"ENABLE.OBJECT",445:"PUSHBUTTON.PROPERTIES",446:"SET.DIALOG.DEFAULT",447:"FILTER",448:"FILTER.SHOW.ALL",449:"CLEAR.OUTLINE",450:"FUNCTION.WIZARD",451:"ADD.LIST.ITEM",452:"SET.LIST.ITEM",453:"REMOVE.LIST.ITEM",454:"SELECT.LIST.ITEM",455:"SET.CONTROL.VALUE",456:"SAVE.COPY.AS",458:"OPTIONS.LISTS.ADD",459:"OPTIONS.LISTS.DELETE",460:"SERIES.AXES",461:"SERIES.X",462:"SERIES.Y",463:"ERRORBAR.X",464:"ERRORBAR.Y",465:"FORMAT.CHART",466:"SERIES.ORDER",467:"MAIL.LOGOFF",468:"CLEAR.ROUTING.SLIP",469:"APP.ACTIVATE.MICROSOFT",470:"MAIL.EDIT.MAILER",471:"ON.SHEET",472:"STANDARD.WIDTH",473:"SCENARIO.MERGE",474:"SUMMARY.INFO",475:"FIND.FILE",476:"ACTIVE.CELL.FONT",477:"ENABLE.TIPWIZARD",478:"VBA.MAKE.ADDIN",480:"INSERTDATATABLE",481:"WORKGROUP.OPTIONS",482:"MAIL.SEND.MAILER",485:"AUTOCORRECT",489:"POST.DOCUMENT",491:"PICKLIST",493:"VIEW.SHOW",494:"VIEW.DEFINE",495:"VIEW.DELETE",509:"SHEET.BACKGROUND",510:"INSERT.MAP.OBJECT",511:"OPTIONS.MENONO",517:"MSOCHECKS",518:"NORMAL",519:"LAYOUT",520:"RM.PRINT.AREA",521:"CLEAR.PRINT.AREA",522:"ADD.PRINT.AREA",523:"MOVE.BRK",545:"HIDECURR.NOTE",546:"HIDEALL.NOTES",547:"DELETE.NOTE",548:"TRAVERSE.NOTES",549:"ACTIVATE.NOTES",620:"PROTECT.REVISIONS",621:"UNPROTECT.REVISIONS",647:"OPTIONS.ME",653:"WEB.PUBLISH",667:"NEWWEBQUERY",673:"PIVOT.TABLE.CHART",753:"OPTIONS.SAVE",755:"OPTIONS.SPELL",808:"HIDEALL.INKANNOTS"};var Ftab={0:"COUNT",1:"IF",2:"ISNA",3:"ISERROR",4:"SUM",5:"AVERAGE",6:"MIN",7:"MAX",8:"ROW",9:"COLUMN",10:"NA",11:"NPV",12:"STDEV",13:"DOLLAR",14:"FIXED",15:"SIN",16:"COS",17:"TAN",18:"ATAN",19:"PI",20:"SQRT",21:"EXP",22:"LN",23:"LOG10",24:"ABS",25:"INT",26:"SIGN",27:"ROUND",28:"LOOKUP",29:"INDEX",30:"REPT",31:"MID",32:"LEN",33:"VALUE",34:"TRUE",35:"FALSE",36:"AND",37:"OR",38:"NOT",39:"MOD",40:"DCOUNT",41:"DSUM",42:"DAVERAGE",43:"DMIN",44:"DMAX",45:"DSTDEV",46:"VAR",47:"DVAR",48:"TEXT",49:"LINEST",50:"TREND",51:"LOGEST",52:"GROWTH",53:"GOTO",54:"HALT",55:"RETURN",56:"PV",57:"FV",58:"NPER",59:"PMT",60:"RATE",61:"MIRR",62:"IRR",63:"RAND",64:"MATCH",65:"DATE",66:"TIME",67:"DAY",68:"MONTH",69:"YEAR",70:"WEEKDAY",71:"HOUR",72:"MINUTE",73:"SECOND",74:"NOW",75:"AREAS",76:"ROWS",77:"COLUMNS",78:"OFFSET",79:"ABSREF",80:"RELREF",81:"ARGUMENT",82:"SEARCH",83:"TRANSPOSE",84:"ERROR",85:"STEP",86:"TYPE",87:"ECHO",88:"SET.NAME",89:"CALLER",90:"DEREF",91:"WINDOWS",92:"SERIES",93:"DOCUMENTS",94:"ACTIVE.CELL",95:"SELECTION",96:"RESULT",97:"ATAN2",98:"ASIN",99:"ACOS",100:"CHOOSE",101:"HLOOKUP",102:"VLOOKUP",103:"LINKS",104:"INPUT",105:"ISREF",106:"GET.FORMULA",107:"GET.NAME",108:"SET.VALUE",109:"LOG",110:"EXEC",111:"CHAR",112:"LOWER",113:"UPPER",114:"PROPER",115:"LEFT",116:"RIGHT",117:"EXACT",118:"TRIM",119:"REPLACE",120:"SUBSTITUTE",121:"CODE",122:"NAMES",123:"DIRECTORY",124:"FIND",125:"CELL",126:"ISERR",127:"ISTEXT",128:"ISNUMBER",129:"ISBLANK",130:"T",131:"N",132:"FOPEN",133:"FCLOSE",134:"FSIZE",135:"FREADLN",136:"FREAD",137:"FWRITELN",138:"FWRITE",139:"FPOS",140:"DATEVALUE",141:"TIMEVALUE",142:"SLN",143:"SYD",144:"DDB",145:"GET.DEF",146:"REFTEXT",147:"TEXTREF",148:"INDIRECT",149:"REGISTER",150:"CALL",151:"ADD.BAR",152:"ADD.MENU",153:"ADD.COMMAND",154:"ENABLE.COMMAND",155:"CHECK.COMMAND",156:"RENAME.COMMAND",157:"SHOW.BAR",158:"DELETE.MENU",159:"DELETE.COMMAND",160:"GET.CHART.ITEM",161:"DIALOG.BOX",162:"CLEAN",163:"MDETERM",164:"MINVERSE",165:"MMULT",166:"FILES",167:"IPMT",168:"PPMT",169:"COUNTA",170:"CANCEL.KEY",171:"FOR",172:"WHILE",173:"BREAK",174:"NEXT",175:"INITIATE",176:"REQUEST",177:"POKE",178:"EXECUTE",179:"TERMINATE",180:"RESTART",181:"HELP",182:"GET.BAR",183:"PRODUCT",184:"FACT",185:"GET.CELL",186:"GET.WORKSPACE",187:"GET.WINDOW",188:"GET.DOCUMENT",189:"DPRODUCT",190:"ISNONTEXT",191:"GET.NOTE",192:"NOTE",193:"STDEVP",194:"VARP",195:"DSTDEVP",196:"DVARP",197:"TRUNC",198:"ISLOGICAL",199:"DCOUNTA",200:"DELETE.BAR",201:"UNREGISTER",204:"USDOLLAR",205:"FINDB",206:"SEARCHB",207:"REPLACEB",208:"LEFTB",209:"RIGHTB",210:"MIDB",211:"LENB",212:"ROUNDUP",213:"ROUNDDOWN",214:"ASC",215:"DBCS",216:"RANK",219:"ADDRESS",220:"DAYS360",221:"TODAY",222:"VDB",223:"ELSE",224:"ELSE.IF",225:"END.IF",226:"FOR.CELL",227:"MEDIAN",228:"SUMPRODUCT",229:"SINH",230:"COSH",231:"TANH",232:"ASINH",233:"ACOSH",234:"ATANH",235:"DGET",236:"CREATE.OBJECT",237:"VOLATILE",238:"LAST.ERROR",239:"CUSTOM.UNDO",240:"CUSTOM.REPEAT",241:"FORMULA.CONVERT",242:"GET.LINK.INFO",243:"TEXT.BOX",244:"INFO",245:"GROUP",246:"GET.OBJECT",247:"DB",248:"PAUSE",251:"RESUME",252:"FREQUENCY",253:"ADD.TOOLBAR",254:"DELETE.TOOLBAR",255:"User",256:"RESET.TOOLBAR",257:"EVALUATE",258:"GET.TOOLBAR",259:"GET.TOOL",260:"SPELLING.CHECK",261:"ERROR.TYPE",262:"APP.TITLE",263:"WINDOW.TITLE",264:"SAVE.TOOLBAR",265:"ENABLE.TOOL",266:"PRESS.TOOL",267:"REGISTER.ID",268:"GET.WORKBOOK",269:"AVEDEV",270:"BETADIST",271:"GAMMALN",272:"BETAINV",273:"BINOMDIST",274:"CHIDIST",275:"CHIINV",276:"COMBIN",277:"CONFIDENCE",278:"CRITBINOM",279:"EVEN",280:"EXPONDIST",281:"FDIST",282:"FINV",283:"FISHER",284:"FISHERINV",285:"FLOOR",286:"GAMMADIST",287:"GAMMAINV",288:"CEILING",289:"HYPGEOMDIST",290:"LOGNORMDIST",291:"LOGINV",292:"NEGBINOMDIST",293:"NORMDIST",294:"NORMSDIST",295:"NORMINV",
+296:"NORMSINV",297:"STANDARDIZE",298:"ODD",299:"PERMUT",300:"POISSON",301:"TDIST",302:"WEIBULL",303:"SUMXMY2",304:"SUMX2MY2",305:"SUMX2PY2",306:"CHITEST",307:"CORREL",308:"COVAR",309:"FORECAST",310:"FTEST",311:"INTERCEPT",312:"PEARSON",313:"RSQ",314:"STEYX",315:"SLOPE",316:"TTEST",317:"PROB",318:"DEVSQ",319:"GEOMEAN",320:"HARMEAN",321:"SUMSQ",322:"KURT",323:"SKEW",324:"ZTEST",325:"LARGE",326:"SMALL",327:"QUARTILE",328:"PERCENTILE",329:"PERCENTRANK",330:"MODE",331:"TRIMMEAN",332:"TINV",334:"MOVIE.COMMAND",335:"GET.MOVIE",336:"CONCATENATE",337:"POWER",338:"PIVOT.ADD.DATA",339:"GET.PIVOT.TABLE",340:"GET.PIVOT.FIELD",341:"GET.PIVOT.ITEM",342:"RADIANS",343:"DEGREES",344:"SUBTOTAL",345:"SUMIF",346:"COUNTIF",347:"COUNTBLANK",348:"SCENARIO.GET",349:"OPTIONS.LISTS.GET",350:"ISPMT",351:"DATEDIF",352:"DATESTRING",353:"NUMBERSTRING",354:"ROMAN",355:"OPEN.DIALOG",356:"SAVE.DIALOG",357:"VIEW.GET",358:"GETPIVOTDATA",359:"HYPERLINK",360:"PHONETIC",361:"AVERAGEA",362:"MAXA",363:"MINA",364:"STDEVPA",365:"VARPA",366:"STDEVA",367:"VARA",368:"BAHTTEXT",369:"THAIDAYOFWEEK",370:"THAIDIGIT",371:"THAIMONTHOFYEAR",372:"THAINUMSOUND",373:"THAINUMSTRING",374:"THAISTRINGLENGTH",375:"ISTHAIDIGIT",376:"ROUNDBAHTDOWN",377:"ROUNDBAHTUP",378:"THAIYEAR",379:"RTD"};var FtabArgc={2:1,3:1,15:1,16:1,17:1,18:1,20:1,21:1,22:1,23:1,24:1,25:1,26:1,27:2,30:2,31:3,32:1,33:1,38:1,39:2,40:3,41:3,42:3,43:3,44:3,45:3,47:3,48:2,53:1,61:3,65:3,66:3,67:1,68:1,69:1,71:1,72:1,73:1,75:1,76:1,77:1,79:2,80:2,83:1,86:1,90:1,97:2,98:1,99:1,105:1,111:1,112:1,113:1,114:1,117:2,118:1,119:4,121:1,126:1,127:1,128:1,129:1,130:1,131:1,133:1,134:1,135:1,136:2,137:2,138:2,140:1,141:1,142:3,143:4,162:1,163:1,164:1,165:2,172:1,175:2,176:2,177:3,178:2,179:1,184:1,189:3,190:1,195:3,196:3,198:1,199:3,201:1,207:4,210:3,211:1,212:2,213:2,214:1,215:1,229:1,230:1,231:1,232:1,233:1,234:1,235:3,244:1,252:2,257:1,261:1,271:1,273:4,274:2,275:2,276:2,277:3,278:3,279:1,280:3,281:3,282:3,283:1,284:1,285:2,286:4,287:3,288:2,289:4,290:3,291:3,292:3,293:4,294:1,295:3,296:1,297:3,298:1,299:2,300:3,301:3,302:4,303:2,304:2,305:2,306:2,307:2,308:2,309:3,310:2,311:2,312:2,313:2,314:2,315:2,316:4,325:2,326:2,327:2,328:2,331:2,332:2,337:2,342:1,343:1,346:2,347:1,350:4,351:3,352:1,353:2,360:1,368:1,369:1,370:1,371:1,372:1,373:1,374:1,375:1,376:1,377:1,378:1,65535:0};var XLSXFutureFunctions={"_xlfn.ACOT":"ACOT","_xlfn.ACOTH":"ACOTH","_xlfn.AGGREGATE":"AGGREGATE","_xlfn.ARABIC":"ARABIC","_xlfn.AVERAGEIF":"AVERAGEIF","_xlfn.AVERAGEIFS":"AVERAGEIFS","_xlfn.BASE":"BASE","_xlfn.BETA.DIST":"BETA.DIST","_xlfn.BETA.INV":"BETA.INV","_xlfn.BINOM.DIST":"BINOM.DIST","_xlfn.BINOM.DIST.RANGE":"BINOM.DIST.RANGE","_xlfn.BINOM.INV":"BINOM.INV","_xlfn.BITAND":"BITAND","_xlfn.BITLSHIFT":"BITLSHIFT","_xlfn.BITOR":"BITOR","_xlfn.BITRSHIFT":"BITRSHIFT","_xlfn.BITXOR":"BITXOR","_xlfn.CEILING.MATH":"CEILING.MATH","_xlfn.CEILING.PRECISE":"CEILING.PRECISE","_xlfn.CHISQ.DIST":"CHISQ.DIST","_xlfn.CHISQ.DIST.RT":"CHISQ.DIST.RT","_xlfn.CHISQ.INV":"CHISQ.INV","_xlfn.CHISQ.INV.RT":"CHISQ.INV.RT","_xlfn.CHISQ.TEST":"CHISQ.TEST","_xlfn.COMBINA":"COMBINA","_xlfn.CONFIDENCE.NORM":"CONFIDENCE.NORM","_xlfn.CONFIDENCE.T":"CONFIDENCE.T","_xlfn.COT":"COT","_xlfn.COTH":"COTH","_xlfn.COUNTIFS":"COUNTIFS","_xlfn.COVARIANCE.P":"COVARIANCE.P","_xlfn.COVARIANCE.S":"COVARIANCE.S","_xlfn.CSC":"CSC","_xlfn.CSCH":"CSCH","_xlfn.DAYS":"DAYS","_xlfn.DECIMAL":"DECIMAL","_xlfn.ECMA.CEILING":"ECMA.CEILING","_xlfn.ERF.PRECISE":"ERF.PRECISE","_xlfn.ERFC.PRECISE":"ERFC.PRECISE","_xlfn.EXPON.DIST":"EXPON.DIST","_xlfn.F.DIST":"F.DIST","_xlfn.F.DIST.RT":"F.DIST.RT","_xlfn.F.INV":"F.INV","_xlfn.F.INV.RT":"F.INV.RT","_xlfn.F.TEST":"F.TEST","_xlfn.FILTERXML":"FILTERXML","_xlfn.FLOOR.MATH":"FLOOR.MATH","_xlfn.FLOOR.PRECISE":"FLOOR.PRECISE","_xlfn.FORMULATEXT":"FORMULATEXT","_xlfn.GAMMA":"GAMMA","_xlfn.GAMMA.DIST":"GAMMA.DIST","_xlfn.GAMMA.INV":"GAMMA.INV","_xlfn.GAMMALN.PRECISE":"GAMMALN.PRECISE","_xlfn.GAUSS":"GAUSS","_xlfn.HYPGEOM.DIST":"HYPGEOM.DIST","_xlfn.IFNA":"IFNA","_xlfn.IFERROR":"IFERROR","_xlfn.IMCOSH":"IMCOSH","_xlfn.IMCOT":"IMCOT","_xlfn.IMCSC":"IMCSC","_xlfn.IMCSCH":"IMCSCH","_xlfn.IMSEC":"IMSEC","_xlfn.IMSECH":"IMSECH","_xlfn.IMSINH":"IMSINH","_xlfn.IMTAN":"IMTAN","_xlfn.ISFORMULA":"ISFORMULA","_xlfn.ISO.CEILING":"ISO.CEILING","_xlfn.ISOWEEKNUM":"ISOWEEKNUM","_xlfn.LOGNORM.DIST":"LOGNORM.DIST","_xlfn.LOGNORM.INV":"LOGNORM.INV","_xlfn.MODE.MULT":"MODE.MULT","_xlfn.MODE.SNGL":"MODE.SNGL","_xlfn.MUNIT":"MUNIT","_xlfn.NEGBINOM.DIST":"NEGBINOM.DIST","_xlfn.NETWORKDAYS.INTL":"NETWORKDAYS.INTL","_xlfn.NIGBINOM":"NIGBINOM","_xlfn.NORM.DIST":"NORM.DIST","_xlfn.NORM.INV":"NORM.INV","_xlfn.NORM.S.DIST":"NORM.S.DIST","_xlfn.NORM.S.INV":"NORM.S.INV","_xlfn.NUMBERVALUE":"NUMBERVALUE","_xlfn.PDURATION":"PDURATION","_xlfn.PERCENTILE.EXC":"PERCENTILE.EXC","_xlfn.PERCENTILE.INC":"PERCENTILE.INC","_xlfn.PERCENTRANK.EXC":"PERCENTRANK.EXC","_xlfn.PERCENTRANK.INC":"PERCENTRANK.INC","_xlfn.PERMUTATIONA":"PERMUTATIONA","_xlfn.PHI":"PHI","_xlfn.POISSON.DIST":"POISSON.DIST","_xlfn.QUARTILE.EXC":"QUARTILE.EXC","_xlfn.QUARTILE.INC":"QUARTILE.INC","_xlfn.QUERYSTRING":"QUERYSTRING","_xlfn.RANK.AVG":"RANK.AVG","_xlfn.RANK.EQ":"RANK.EQ","_xlfn.RRI":"RRI","_xlfn.SEC":"SEC","_xlfn.SECH":"SECH","_xlfn.SHEET":"SHEET","_xlfn.SHEETS":"SHEETS","_xlfn.SKEW.P":"SKEW.P","_xlfn.STDEV.P":"STDEV.P","_xlfn.STDEV.S":"STDEV.S","_xlfn.SUMIFS":"SUMIFS","_xlfn.T.DIST":"T.DIST","_xlfn.T.DIST.2T":"T.DIST.2T","_xlfn.T.DIST.RT":"T.DIST.RT","_xlfn.T.INV":"T.INV","_xlfn.T.INV.2T":"T.INV.2T","_xlfn.T.TEST":"T.TEST","_xlfn.UNICHAR":"UNICHAR","_xlfn.UNICODE":"UNICODE","_xlfn.VAR.P":"VAR.P","_xlfn.VAR.S":"VAR.S","_xlfn.WEBSERVICE":"WEBSERVICE","_xlfn.WEIBULL.DIST":"WEIBULL.DIST","_xlfn.WORKDAY.INTL":"WORKDAY.INTL","_xlfn.XOR":"XOR","_xlfn.Z.TEST":"Z.TEST"};var strs={};var _ssfopts={};RELS.WS="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet";function get_sst_id(sst,str){for(var i=0,len=sst.length;i<len;++i)if(sst[i].t===str){sst.Count++;return i}sst[len]={t:str};sst.Count++;sst.Unique++;return len}function get_cell_style(styles,cell,opts){if(typeof style_builder!="undefined"){if(/^\d+$/.exec(cell.s)){return cell.s}if(cell.s&&cell.s==+cell.s){return cell.s}var s=cell.s||{};if(cell.z)s.numFmt=cell.z;return style_builder.addStyle(s)}else{var z=opts.revssf[cell.z!=null?cell.z:"General"];for(var i=0,len=styles.length;i!=len;++i)if(styles[i].numFmtId===z)return i;styles[len]={numFmtId:z,fontId:0,fillId:0,borderId:0,xfId:0,applyNumberFormat:1};return len}}function get_cell_style_csf(cellXf){if(cellXf){var s={};if(typeof cellXf.numFmtId!=undefined){s.numFmt=SSF._table[cellXf.numFmtId]}if(cellXf.fillId){s.fill=styles.Fills[cellXf.fillId]}if(cellXf.fontId){s.font=styles.Fonts[cellXf.fontId]}if(cellXf.borderId){s.border=styles.Borders[cellXf.borderId]}if(cellXf.applyAlignment==1){s.alignment=cellXf.alignment}return JSON.parse(JSON.stringify(s))}return null}function safe_format(p,fmtid,fillid,opts){try{if(p.t==="e")p.w=p.w||BErr[p.v];else if(fmtid===0){if(p.t==="n"){if((p.v|0)===p.v)p.w=SSF._general_int(p.v,_ssfopts);else p.w=SSF._general_num(p.v,_ssfopts)}else if(p.t==="d"){var dd=datenum(p.v);if((dd|0)===dd)p.w=SSF._general_int(dd,_ssfopts);else p.w=SSF._general_num(dd,_ssfopts)}else if(p.v===undefined)return"";else p.w=SSF._general(p.v,_ssfopts)}else if(p.t==="d")p.w=SSF.format(fmtid,datenum(p.v),_ssfopts);else p.w=SSF.format(fmtid,p.v,_ssfopts);if(opts.cellNF)p.z=SSF._table[fmtid]}catch(e){if(opts.WTF)throw e}}function parse_ws_xml_dim(ws,s){var d=safe_decode_range(s);if(d.s.r<=d.e.r&&d.s.c<=d.e.c&&d.s.r>=0&&d.s.c>=0)ws["!ref"]=encode_range(d)}var mergecregex=/<mergeCell ref="[A-Z0-9:]+"\s*\/>/g;var sheetdataregex=/<(?:\w+:)?sheetData>([^\u2603]*)<\/(?:\w+:)?sheetData>/;var hlinkregex=/<hyperlink[^>]*\/>/g;var dimregex=/"(\w*:\w*)"/;var colregex=/<col[^>]*\/>/g;function parse_ws_xml(data,opts,rels){if(!data)return data;var s={};var ridx=data.indexOf("<dimension");if(ridx>0){var ref=data.substr(ridx,50).match(dimregex);if(ref!=null)parse_ws_xml_dim(s,ref[1])}var mergecells=[];if(data.indexOf("</mergeCells>")!==-1){var merges=data.match(mergecregex);for(ridx=0;ridx!=merges.length;++ridx)mergecells[ridx]=safe_decode_range(merges[ridx].substr(merges[ridx].indexOf('"')+1))}var columns=[];if(opts.cellStyles&&data.indexOf("</cols>")!==-1){var cols=data.match(colregex);parse_ws_xml_cols(columns,cols)}var refguess={s:{r:1e6,c:1e6},e:{r:0,c:0}};var mtch=data.match(sheetdataregex);if(mtch)parse_ws_xml_data(mtch[1],s,opts,refguess);if(data.indexOf("</hyperlinks>")!==-1)parse_ws_xml_hlinks(s,data.match(hlinkregex),rels);if(!s["!ref"]&&refguess.e.c>=refguess.s.c&&refguess.e.r>=refguess.s.r)s["!ref"]=encode_range(refguess);if(opts.sheetRows>0&&s["!ref"]){var tmpref=safe_decode_range(s["!ref"]);if(opts.sheetRows<+tmpref.e.r){tmpref.e.r=opts.sheetRows-1;if(tmpref.e.r>refguess.e.r)tmpref.e.r=refguess.e.r;if(tmpref.e.r<tmpref.s.r)tmpref.s.r=tmpref.e.r;if(tmpref.e.c>refguess.e.c)tmpref.e.c=refguess.e.c;if(tmpref.e.c<tmpref.s.c)tmpref.s.c=tmpref.e.c;s["!fullref"]=s["!ref"];s["!ref"]=encode_range(tmpref)}}if(mergecells.length>0)s["!merges"]=mergecells;if(columns.length>0)s["!cols"]=columns;return s}function write_ws_xml_merges(merges){if(merges.length==0)return"";var o='<mergeCells count="'+merges.length+'">';for(var i=0;i!=merges.length;++i)o+='<mergeCell ref="'+encode_range(merges[i])+'"/>';return o+"</mergeCells>"}function write_ws_xml_pagesetup(setup){var pageSetup=writextag("pageSetup",null,{scale:setup.scale||"100",orientation:setup.orientation||"portrait",horizontalDpi:setup.horizontalDpi||"4294967292",verticalDpi:setup.verticalDpi||"4294967292"});return pageSetup}function parse_ws_xml_hlinks(s,data,rels){for(var i=0;i!=data.length;++i){var val=parsexmltag(data[i],true);if(!val.ref)return;var rel=rels?rels["!id"][val.id]:null;if(rel){val.Target=rel.Target;if(val.location)val.Target+="#"+val.location;val.Rel=rel}else{val.Target=val.location;rel={Target:val.location,TargetMode:"Internal"};val.Rel=rel}var rng=safe_decode_range(val.ref);for(var R=rng.s.r;R<=rng.e.r;++R)for(var C=rng.s.c;C<=rng.e.c;++C){var addr=encode_cell({c:C,r:R});if(!s[addr])s[addr]={t:"stub",v:undefined};s[addr].l=val}}}function parse_ws_xml_cols(columns,cols){var seencol=false;for(var coli=0;coli!=cols.length;++coli){var coll=parsexmltag(cols[coli],true);var colm=parseInt(coll.min,10)-1,colM=parseInt(coll.max,10)-1;delete coll.min;delete coll.max;if(!seencol&&coll.width){seencol=true;find_mdw(+coll.width,coll)}if(coll.width){coll.wpx=width2px(+coll.width);coll.wch=px2char(coll.wpx);coll.MDW=MDW}while(colm<=colM)columns[colm++]=coll}}function write_ws_xml_cols(ws,cols){var o=["<cols>"],col,width;for(var i=0;i!=cols.length;++i){if(!(col=cols[i]))continue;var p={min:i+1,max:i+1};width=-1;if(col.wpx)width=px2char(col.wpx);else if(col.wch)width=col.wch;if(width>-1){p.width=char2width(width);p.customWidth=1}o[o.length]=writextag("col",null,p)}o[o.length]="</cols>";return o.join("")}function write_ws_xml_cell(cell,ref,ws,opts,idx,wb){if(cell.v===undefined&&cell.s===undefined)return"";var vv="";var oldt=cell.t,oldv=cell.v;switch(cell.t){case"b":vv=cell.v?"1":"0";break;case"n":vv=""+cell.v;break;case"e":vv=BErr[cell.v];break;case"d":if(opts.cellDates)vv=new Date(cell.v).toISOString();else{cell.t="n";vv=""+(cell.v=datenum(cell.v));if(typeof cell.z==="undefined")cell.z=SSF._table[14]}break;default:vv=cell.v;break}var v=writetag("v",escapexml(vv)),o={r:ref};var os=get_cell_style(opts.cellXfs,cell,opts);if(os!==0)o.s=os;switch(cell.t){case"n":break;case"d":o.t="d";break;case"b":o.t="b";break;case"e":o.t="e";break;default:if(opts.bookSST){v=writetag("v",""+get_sst_id(opts.Strings,cell.v));o.t="s";break}o.t="str";break}if(cell.t!=oldt){cell.t=oldt;cell.v=oldv}return writextag("c",v,o)}var parse_ws_xml_data=function parse_ws_xml_data_factory(){var cellregex=/<(?:\w+:)?c[ >]/,rowregex=/<\/(?:\w+:)?row>/;var rregex=/r=["']([^"']*)["']/,isregex=/<is>([\S\s]*?)<\/is>/;var match_v=matchtag("v"),match_f=matchtag("f");return function parse_ws_xml_data(sdata,s,opts,guess){var ri=0,x="",cells=[],cref=[],idx=0,i=0,cc=0,d="",p;var tag,tagr=0,tagc=0;var sstr;var fmtid=0,fillid=0,do_format=Array.isArray(styles.CellXf),cf;for(var marr=sdata.split(rowregex),mt=0,marrlen=marr.length;mt!=marrlen;++mt){x=marr[mt].trim();var xlen=x.length;if(xlen===0)continue;for(ri=0;ri<xlen;++ri)if(x.charCodeAt(ri)===62)break;++ri;tag=parsexmltag(x.substr(0,ri),true);tagr=typeof tag.r!=="undefined"?parseInt(tag.r,10):tagr+1;tagc=-1;if(opts.sheetRows&&opts.sheetRows<tagr)continue;if(guess.s.r>tagr-1)guess.s.r=tagr-1;if(guess.e.r<tagr-1)guess.e.r=tagr-1;cells=x.substr(ri).split(cellregex);for(ri=typeof tag.r==="undefined"?0:1;ri!=cells.length;++ri){x=cells[ri].trim();if(x.length===0)continue;cref=x.match(rregex);idx=ri;i=0;cc=0;x="<c "+(x.substr(0,1)=="<"?">":"")+x;if(cref!==null&&cref.length===2){idx=0;d=cref[1];for(i=0;i!=d.length;++i){if((cc=d.charCodeAt(i)-64)<1||cc>26)break;idx=26*idx+cc}--idx;tagc=idx}else++tagc;for(i=0;i!=x.length;++i)if(x.charCodeAt(i)===62)break;++i;tag=parsexmltag(x.substr(0,i),true);if(!tag.r)tag.r=utils.encode_cell({r:tagr-1,c:tagc});d=x.substr(i);p={t:""};if((cref=d.match(match_v))!==null&&cref[1]!=="")p.v=unescapexml(cref[1]);if(opts.cellFormula&&(cref=d.match(match_f))!==null)p.f=unescapexml(cref[1]);if(tag.t===undefined&&tag.s===undefined&&p.v===undefined){if(!opts.sheetStubs)continue;p.t="stub"}else p.t=tag.t||"n";if(guess.s.c>idx)guess.s.c=idx;if(guess.e.c<idx)guess.e.c=idx;switch(p.t){case"n":p.v=parseFloat(p.v);if(isNaN(p.v))p.v="";break;case"s":sstr=strs[parseInt(p.v,10)];p.v=sstr.t;p.r=sstr.r;if(opts.cellHTML)p.h=sstr.h;break;case"str":p.t="s";p.v=p.v!=null?utf8read(p.v):"";if(opts.cellHTML)p.h=p.v;break;case"inlineStr":cref=d.match(isregex);p.t="s";if(cref!==null){sstr=parse_si(cref[1]);p.v=sstr.t}else p.v="";break;case"b":p.v=parsexmlbool(p.v);break;case"d":if(!opts.cellDates){p.v=datenum(p.v);p.t="n"}break;case"e":p.w=p.v;p.v=RBErr[p.v];break}fmtid=fillid=0;if(do_format&&tag.s!==undefined){cf=styles.CellXf[tag.s];if(opts.cellStyles){p.s=get_cell_style_csf(cf)}if(cf!=null){if(cf.numFmtId!=null)fmtid=cf.numFmtId;if(opts.cellStyles&&cf.fillId!=null)fillid=cf.fillId}}safe_format(p,fmtid,fillid,opts);s[tag.r]=p}}}}();function write_ws_xml_data(ws,opts,idx,wb){var o=[],r=[],range=safe_decode_range(ws["!ref"]),cell,ref,rr="",cols=[],R,C;for(C=range.s.c;C<=range.e.c;++C)cols[C]=encode_col(C);for(R=range.s.r;R<=range.e.r;++R){r=[];rr=encode_row(R);for(C=range.s.c;C<=range.e.c;++C){ref=cols[C]+rr;if(ws[ref]===undefined)continue;if((cell=write_ws_xml_cell(ws[ref],ref,ws,opts,idx,wb))!=null)r.push(cell)}if(r.length>0)o[o.length]=writextag("row",r.join(""),{r:rr})}return o.join("")}var WS_XML_ROOT=writextag("worksheet",null,{xmlns:XMLNS.main[0],"xmlns:r":XMLNS.r});function write_ws_xml(idx,opts,wb){var o=[XML_HEADER,WS_XML_ROOT];var s=wb.SheetNames[idx],sidx=0,rdata="";var ws=wb.Sheets[s];if(ws===undefined)ws={};var ref=ws["!ref"];if(ref===undefined)ref="A1";o[o.length]=writextag("dimension",null,{ref:ref});var kids=[];if(ws["!freeze"]){var pane="";pane=writextag("pane",null,ws["!freeze"]);kids.push(pane);var selection=writextag("selection",null,{pane:"topLeft"});kids.push(selection);var selection=writextag("selection",null,{pane:"bottomLeft"});kids.push(selection);var selection=writextag("selection",null,{pane:"bottomRight",activeCell:ws["!freeze"],sqref:ws["!freeze"]});kids.push(selection)}var sheetView=writextag("sheetView",kids.join("")||undefined,{showGridLines:opts.showGridLines==false?"0":"1",tabSelected:opts.tabSelected===undefined?"0":opts.tabSelected,workbookViewId:opts.workbookViewId===undefined?"0":opts.workbookViewId});o[o.length]=writextag("sheetViews",sheetView);if(ws["!cols"]!==undefined&&ws["!cols"].length>0)o[o.length]=write_ws_xml_cols(ws,ws["!cols"]);o[sidx=o.length]="<sheetData/>";if(ws["!ref"]!==undefined){rdata=write_ws_xml_data(ws,opts,idx,wb);if(rdata.length>0)o[o.length]=rdata}if(o.length>sidx+1){o[o.length]="</sheetData>";o[sidx]=o[sidx].replace("/>",">")}if(ws["!merges"]!==undefined&&ws["!merges"].length>0)o[o.length]=write_ws_xml_merges(ws["!merges"]);if(ws["!pageSetup"]!==undefined)o[o.length]=write_ws_xml_pagesetup(ws["!pageSetup"]);if(ws["!rowBreaks"]!==undefined)o[o.length]=write_ws_xml_row_breaks(ws["!rowBreaks"]);if(ws["!colBreaks"]!==undefined)o[o.length]=write_ws_xml_col_breaks(ws["!colBreaks"]);if(o.length>2){o[o.length]="</worksheet>";o[1]=o[1].replace("/>",">")}return o.join("")}function write_ws_xml_row_breaks(breaks){var brk=[];for(var i=0;i<breaks.length;i++){var thisBreak=""+breaks[i];var nextBreak=""+(breaks[i+1]||"16383");brk.push(writextag("brk",null,{id:thisBreak,max:nextBreak,man:"1"}))}return writextag("rowBreaks",brk.join(" "),{count:brk.length,manualBreakCount:brk.length})}function write_ws_xml_col_breaks(breaks){var brk=[];for(var i=0;i<breaks.length;i++){var thisBreak=""+breaks[i];var nextBreak=""+(breaks[i+1]||"1048575");brk.push(writextag("brk",null,{id:thisBreak,max:nextBreak,man:"1"}))}return writextag("colBreaks",brk.join(" "),{count:brk.length,manualBreakCount:brk.length})}function parse_BrtRowHdr(data,length){var z=[];z.r=data.read_shift(4);data.l+=length-4;return z}var parse_BrtWsDim=parse_UncheckedRfX;var write_BrtWsDim=write_UncheckedRfX;function parse_BrtWsProp(data,length){var z={};data.l+=19;z.name=parse_XLSBCodeName(data,length-19);return z}function parse_BrtCellBlank(data,length){var cell=parse_XLSBCell(data);return[cell]}function write_BrtCellBlank(cell,val,o){if(o==null)o=new_buf(8);return write_XLSBCell(val,o)}function parse_BrtCellBool(data,length){var cell=parse_XLSBCell(data);var fBool=data.read_shift(1);return[cell,fBool,"b"]}function parse_BrtCellError(data,length){var cell=parse_XLSBCell(data);var fBool=data.read_shift(1);return[cell,fBool,"e"]}function parse_BrtCellIsst(data,length){var cell=parse_XLSBCell(data);var isst=data.read_shift(4);return[cell,isst,"s"]}function parse_BrtCellReal(data,length){var cell=parse_XLSBCell(data);var value=parse_Xnum(data);return[cell,value,"n"]}function parse_BrtCellRk(data,length){var cell=parse_XLSBCell(data);var value=parse_RkNumber(data);return[cell,value,"n"]}function parse_BrtCellSt(data,length){var cell=parse_XLSBCell(data);var value=parse_XLWideString(data);return[cell,value,"str"]}function parse_BrtFmlaBool(data,length,opts){var cell=parse_XLSBCell(data);var value=data.read_shift(1);var o=[cell,value,"b"];if(opts.cellFormula){var formula=parse_XLSBCellParsedFormula(data,length-9);o[3]=""}else data.l+=length-9;return o}function parse_BrtFmlaError(data,length,opts){var cell=parse_XLSBCell(data);var value=data.read_shift(1);var o=[cell,value,"e"];if(opts.cellFormula){var formula=parse_XLSBCellParsedFormula(data,length-9);o[3]=""}else data.l+=length-9;return o}function parse_BrtFmlaNum(data,length,opts){var cell=parse_XLSBCell(data);var value=parse_Xnum(data);var o=[cell,value,"n"];if(opts.cellFormula){var formula=parse_XLSBCellParsedFormula(data,length-16);o[3]=""}else data.l+=length-16;return o}function parse_BrtFmlaString(data,length,opts){var start=data.l;var cell=parse_XLSBCell(data);var value=parse_XLWideString(data);var o=[cell,value,"str"];if(opts.cellFormula){var formula=parse_XLSBCellParsedFormula(data,start+length-data.l)}else data.l=start+length;return o}var parse_BrtMergeCell=parse_UncheckedRfX;function parse_BrtHLink(data,length,opts){var end=data.l+length;var rfx=parse_UncheckedRfX(data,16);var relId=parse_XLNullableWideString(data);var loc=parse_XLWideString(data);var tooltip=parse_XLWideString(data);var display=parse_XLWideString(data);data.l=end;return{rfx:rfx,relId:relId,loc:loc,tooltip:tooltip,display:display}}function parse_ws_bin(data,opts,rels){if(!data)return data;if(!rels)rels={"!id":{}};var s={};var ref;var refguess={s:{r:1e6,c:1e6},e:{r:0,c:0}};var pass=false,end=false;var row,p,cf,R,C,addr,sstr,rr;var mergecells=[];recordhopper(data,function ws_parse(val,R){if(end)return;switch(R.n){case"BrtWsDim":ref=val;break;case"BrtRowHdr":row=val;if(opts.sheetRows&&opts.sheetRows<=row.r)end=true;rr=encode_row(row.r);break;case"BrtFmlaBool":case"BrtFmlaError":case"BrtFmlaNum":case"BrtFmlaString":case"BrtCellBool":case"BrtCellError":case"BrtCellIsst":case"BrtCellReal":case"BrtCellRk":case"BrtCellSt":p={t:val[2]};switch(val[2]){case"n":p.v=val[1];break;case"s":sstr=strs[val[1]];p.v=sstr.t;p.r=sstr.r;break;case"b":p.v=val[1]?true:false;break;case"e":p.v=val[1];p.w=BErr[p.v];break;case"str":p.t="s";p.v=utf8read(val[1]);break}if(opts.cellFormula&&val.length>3)p.f=val[3];if(cf=styles.CellXf[val[0].iStyleRef])safe_format(p,cf.ifmt,null,opts);s[encode_col(C=val[0].c)+rr]=p;if(refguess.s.r>row.r)refguess.s.r=row.r;if(refguess.s.c>C)refguess.s.c=C;if(refguess.e.r<row.r)refguess.e.r=row.r;if(refguess.e.c<C)refguess.e.c=C;break;case"BrtCellBlank":if(!opts.sheetStubs)break;p={t:"s",v:undefined};s[encode_col(C=val[0].c)+rr]=p;if(refguess.s.r>row.r)refguess.s.r=row.r;if(refguess.s.c>C)refguess.s.c=C;if(refguess.e.r<row.r)refguess.e.r=row.r;if(refguess.e.c<C)refguess.e.c=C;break;case"BrtBeginMergeCells":break;case"BrtEndMergeCells":break;case"BrtMergeCell":mergecells.push(val);break;case"BrtHLink":var rel=rels["!id"][val.relId];if(rel){val.Target=rel.Target;if(val.loc)val.Target+="#"+val.loc;val.Rel=rel}for(R=val.rfx.s.r;R<=val.rfx.e.r;++R)for(C=val.rfx.s.c;C<=val.rfx.e.c;++C){addr=encode_cell({c:C,r:R});if(!s[addr])s[addr]={t:"s",v:undefined};s[addr].l=val}break;case"BrtArrFmla":break;case"BrtShrFmla":break;case"BrtBeginSheet":break;case"BrtWsProp":break;case"BrtSheetCalcProp":break;case"BrtBeginWsViews":break;case"BrtBeginWsView":break;case"BrtPane":break;case"BrtSel":break;case"BrtEndWsView":break;case"BrtEndWsViews":break;case"BrtACBegin":break;case"BrtRwDescent":break;case"BrtACEnd":break;case"BrtWsFmtInfoEx14":break;case"BrtWsFmtInfo":break;case"BrtBeginColInfos":break;case"BrtColInfo":break;case"BrtEndColInfos":break;case"BrtBeginSheetData":break;case"BrtEndSheetData":break;case"BrtSheetProtection":break;case"BrtPrintOptions":break;case"BrtMargins":break;case"BrtPageSetup":break;case"BrtFRTBegin":pass=true;break;case"BrtFRTEnd":pass=false;break;case"BrtEndSheet":break;case"BrtDrawing":break;case"BrtLegacyDrawing":break;case"BrtLegacyDrawingHF":break;case"BrtPhoneticInfo":break;case"BrtBeginHeaderFooter":break;case"BrtEndHeaderFooter":break;case"BrtBrk":break;case"BrtBeginRwBrk":break;case"BrtEndRwBrk":break;case"BrtBeginColBrk":break;case"BrtEndColBrk":break;case"BrtBeginUserShViews":break;case"BrtBeginUserShView":break;case"BrtEndUserShView":break;case"BrtEndUserShViews":break;case"BrtBkHim":break;case"BrtBeginOleObjects":break;case"BrtOleObject":break;case"BrtEndOleObjects":break;case"BrtBeginListParts":break;case"BrtListPart":break;case"BrtEndListParts":break;case"BrtBeginSortState":break;case"BrtBeginSortCond":break;case"BrtEndSortCond":break;case"BrtEndSortState":break;case"BrtBeginConditionalFormatting":break;case"BrtEndConditionalFormatting":break;case"BrtBeginCFRule":break;case"BrtEndCFRule":break;case"BrtBeginDVals":break;case"BrtDVal":break;case"BrtEndDVals":break;case"BrtRangeProtection":break;case"BrtBeginDCon":break;case"BrtEndDCon":break;case"BrtBeginDRefs":break;case"BrtDRef":break;case"BrtEndDRefs":break;case"BrtBeginActiveXControls":break;case"BrtActiveX":break;case"BrtEndActiveXControls":break;case"BrtBeginAFilter":break;case"BrtEndAFilter":break;case"BrtBeginFilterColumn":break;case"BrtBeginFilters":break;case"BrtFilter":break;case"BrtEndFilters":break;case"BrtEndFilterColumn":break;case"BrtDynamicFilter":break;case"BrtTop10Filter":break;case"BrtBeginCustomFilters":break;case"BrtCustomFilter":break;case"BrtEndCustomFilters":break;case"BrtBeginSmartTags":break;case"BrtBeginCellSmartTags":break;case"BrtBeginCellSmartTag":break;case"BrtCellSmartTagProperty":break;case"BrtEndCellSmartTag":break;case"BrtEndCellSmartTags":break;case"BrtEndSmartTags":break;case"BrtBeginCellWatches":break;case"BrtCellWatch":break;case"BrtEndCellWatches":break;case"BrtTable":break;case"BrtBeginCellIgnoreECs":break;case"BrtCellIgnoreEC":break;case"BrtEndCellIgnoreECs":break;default:if(!pass||opts.WTF)throw new Error("Unexpected record "+R.n)}},opts);if(!s["!ref"]&&(refguess.s.r<1e6||ref.e.r>0||ref.e.c>0||ref.s.r>0||ref.s.c>0))s["!ref"]=encode_range(ref);if(opts.sheetRows&&s["!ref"]){var tmpref=safe_decode_range(s["!ref"]);if(opts.sheetRows<+tmpref.e.r){tmpref.e.r=opts.sheetRows-1;if(tmpref.e.r>refguess.e.r)tmpref.e.r=refguess.e.r;if(tmpref.e.r<tmpref.s.r)tmpref.s.r=tmpref.e.r;if(tmpref.e.c>refguess.e.c)tmpref.e.c=refguess.e.c;if(tmpref.e.c<tmpref.s.c)tmpref.s.c=tmpref.e.c;s["!fullref"]=s["!ref"];s["!ref"]=encode_range(tmpref)}}if(mergecells.length>0)s["!merges"]=mergecells;return s}function write_ws_bin_cell(ba,cell,R,C,opts){if(cell.v===undefined)return"";var vv="";switch(cell.t){case"b":vv=cell.v?"1":"0";break;case"n":case"e":vv=""+cell.v;break;default:vv=cell.v;break}var o={r:R,c:C};o.s=get_cell_style(opts.cellXfs,cell,opts);switch(cell.t){case"s":case"str":if(opts.bookSST){vv=get_sst_id(opts.Strings,cell.v);o.t="s";break}o.t="str";break;case"n":break;case"b":o.t="b";break;case"e":o.t="e";break}write_record(ba,"BrtCellBlank",write_BrtCellBlank(cell,o))}function write_CELLTABLE(ba,ws,idx,opts,wb){var range=safe_decode_range(ws["!ref"]||"A1"),ref,rr="",cols=[];write_record(ba,"BrtBeginSheetData");for(var R=range.s.r;R<=range.e.r;++R){rr=encode_row(R);for(var C=range.s.c;C<=range.e.c;++C){if(R===range.s.r)cols[C]=encode_col(C);ref=cols[C]+rr;if(!ws[ref])continue;write_ws_bin_cell(ba,ws[ref],R,C,opts)}}write_record(ba,"BrtEndSheetData")}function write_ws_bin(idx,opts,wb){var ba=buf_array();var s=wb.SheetNames[idx],ws=wb.Sheets[s]||{};var r=safe_decode_range(ws["!ref"]||"A1");write_record(ba,"BrtBeginSheet");write_record(ba,"BrtWsDim",write_BrtWsDim(r));write_CELLTABLE(ba,ws,idx,opts,wb);write_record(ba,"BrtEndSheet");return ba.end()}var WBPropsDef=[["allowRefreshQuery","0"],["autoCompressPictures","1"],["backupFile","0"],["checkCompatibility","0"],["codeName",""],["date1904","0"],["dateCompatibility","1"],["filterPrivacy","0"],["hidePivotFieldList","0"],["promptedSolutions","0"],["publishItems","0"],["refreshAllConnections",false],["saveExternalLinkValues","1"],["showBorderUnselectedTables","1"],["showInkAnnotation","1"],["showObjects","all"],["showPivotChartFilter","0"]];var WBViewDef=[["activeTab","0"],["autoFilterDateGrouping","1"],["firstSheet","0"],["minimized","0"],["showHorizontalScroll","1"],["showSheetTabs","1"],["showVerticalScroll","1"],["tabRatio","600"],["visibility","visible"]];var SheetDef=[["state","visible"]];var CalcPrDef=[["calcCompleted","true"],["calcMode","auto"],["calcOnSave","true"],["concurrentCalc","true"],["fullCalcOnLoad","false"],["fullPrecision","true"],["iterate","false"],["iterateCount","100"],["iterateDelta","0.001"],["refMode","A1"]];var CustomWBViewDef=[["autoUpdate","false"],["changesSavedWin","false"],["includeHiddenRowCol","true"],["includePrintSettings","true"],["maximized","false"],["minimized","false"],["onlySync","false"],["personalView","false"],["showComments","commIndicator"],["showFormulaBar","true"],["showHorizontalScroll","true"],["showObjects","all"],["showSheetTabs","true"],["showStatusbar","true"],["showVerticalScroll","true"],["tabRatio","600"],["xWindow","0"],["yWindow","0"]];function push_defaults_array(target,defaults){for(var j=0;j!=target.length;++j){var w=target[j];for(var i=0;i!=defaults.length;++i){var z=defaults[i];if(w[z[0]]==null)w[z[0]]=z[1]}}}function push_defaults(target,defaults){for(var i=0;i!=defaults.length;++i){var z=defaults[i];if(target[z[0]]==null)target[z[0]]=z[1]}}function parse_wb_defaults(wb){push_defaults(wb.WBProps,WBPropsDef);push_defaults(wb.CalcPr,CalcPrDef);push_defaults_array(wb.WBView,WBViewDef);push_defaults_array(wb.Sheets,SheetDef);_ssfopts.date1904=parsexmlbool(wb.WBProps.date1904,"date1904")}var wbnsregex=/<\w+:workbook/;function parse_wb_xml(data,opts){var wb={AppVersion:{},WBProps:{},WBView:[],Sheets:[],CalcPr:{},xmlns:""};var pass=false,xmlns="xmlns";data.match(tagregex).forEach(function xml_wb(x){var y=parsexmltag(x);switch(strip_ns(y[0])){case"<?xml":break;case"<workbook":if(x.match(wbnsregex))xmlns="xmlns"+x.match(/<(\w+):/)[1];wb.xmlns=y[xmlns];break;case"</workbook>":break;case"<fileVersion":delete y[0];wb.AppVersion=y;break;case"<fileVersion/>":break;case"<fileSharing":case"<fileSharing/>":break;case"<workbookPr":delete y[0];wb.WBProps=y;break;case"<workbookPr/>":delete y[0];wb.WBProps=y;break;case"<workbookProtection":break;case"<workbookProtection/>":break;case"<bookViews>":case"</bookViews>":break;case"<workbookView":delete y[0];wb.WBView.push(y);break;case"<sheets>":case"</sheets>":break;case"<sheet":delete y[0];y.name=utf8read(y.name);wb.Sheets.push(y);break;case"<functionGroups":case"<functionGroups/>":break;case"<functionGroup":break;case"<externalReferences":case"</externalReferences>":case"<externalReferences>":break;case"<externalReference":break;case"<definedNames/>":break;case"<definedNames>":case"<definedNames":pass=true;break;case"</definedNames>":pass=false;break;case"<definedName":case"<definedName/>":case"</definedName>":break;case"<calcPr":delete y[0];wb.CalcPr=y;break;case"<calcPr/>":delete y[0];wb.CalcPr=y;break;case"<oleSize":break;case"<customWorkbookViews>":case"</customWorkbookViews>":case"<customWorkbookViews":break;case"<customWorkbookView":case"</customWorkbookView>":break;case"<pivotCaches>":case"</pivotCaches>":case"<pivotCaches":break;case"<pivotCache":break;case"<smartTagPr":case"<smartTagPr/>":break;case"<smartTagTypes":case"<smartTagTypes>":case"</smartTagTypes>":break;case"<smartTagType":break;case"<webPublishing":case"<webPublishing/>":break;case"<fileRecoveryPr":case"<fileRecoveryPr/>":break;case"<webPublishObjects>":case"<webPublishObjects":case"</webPublishObjects>":break;case"<webPublishObject":break;case"<extLst>":case"</extLst>":case"<extLst/>":break;case"<ext":pass=true;break;case"</ext>":pass=false;break;case"<ArchID":break;case"<AlternateContent":pass=true;break;case"</AlternateContent>":pass=false;break;default:if(!pass&&opts.WTF)throw"unrecognized "+y[0]+" in workbook"}});if(XMLNS.main.indexOf(wb.xmlns)===-1)throw new Error("Unknown Namespace: "+wb.xmlns);parse_wb_defaults(wb);return wb}var WB_XML_ROOT=writextag("workbook",null,{xmlns:XMLNS.main[0],"xmlns:r":XMLNS.r});function safe1904(wb){try{return parsexmlbool(wb.Workbook.WBProps.date1904)?"true":"false"}catch(e){return"false"}}function write_wb_xml(wb,opts){var o=[XML_HEADER];o[o.length]=WB_XML_ROOT;o[o.length]=writextag("workbookPr",null,{date1904:safe1904(wb)});o[o.length]="<sheets>";for(var i=0;i!=wb.SheetNames.length;++i)o[o.length]=writextag("sheet",null,{name:wb.SheetNames[i].substr(0,31),sheetId:""+(i+1),"r:id":"rId"+(i+1)});o[o.length]="</sheets>";var hasPrintHeaders=false;for(var i=0;i!=wb.SheetNames.length;++i){var sheetName=wb.SheetNames[i];var sheet=wb.Sheets[sheetName];if(sheet["!printHeader"]){if(sheet["!printHeader"].length!==2){throw"!printHeaders must be an array of length 2: "+sheet["!printHeader"]}hasPrintHeaders=true}}if(hasPrintHeaders){o[o.length]="<definedNames>";for(var i=0;i!=wb.SheetNames.length;++i){var sheetName=wb.SheetNames[i];var sheet=wb.Sheets[sheetName];if(sheet["!printHeader"]||sheet["!printColumns"]){var printHeader=sheet["!printHeader"];var printColumns=sheet["!printColumns"];var range="";if(printColumns)range+="'"+sheetName+"'!"+("$"+printColumns[0]+":$"+printColumns[1]);if(printColumns&&printHeader)range+=",";if(printHeader)range+="'"+sheetName+"'!"+("$"+printHeader[0]+":$"+printHeader[1]);console.log("-----------------------------");console.log(range);o[o.length]=writextag("definedName",range,{name:"_xlnm.Print_Titles",localSheetId:""+i})}}o[o.length]="</definedNames>"}if(o.length>2){o[o.length]="</workbook>";o[1]=o[1].replace("/>",">")}return o.join("")}function parse_BrtBundleSh(data,length){var z={};z.hsState=data.read_shift(4);z.iTabID=data.read_shift(4);z.strRelID=parse_RelID(data,length-8);
+z.name=parse_XLWideString(data);return z}function write_BrtBundleSh(data,o){if(!o)o=new_buf(127);o.write_shift(4,data.hsState);o.write_shift(4,data.iTabID);write_RelID(data.strRelID,o);write_XLWideString(data.name.substr(0,31),o);return o}function parse_BrtWbProp(data,length){data.read_shift(4);var dwThemeVersion=data.read_shift(4);var strName=length>8?parse_XLWideString(data):"";return[dwThemeVersion,strName]}function write_BrtWbProp(data,o){if(!o)o=new_buf(8);o.write_shift(4,0);o.write_shift(4,0);return o}function parse_BrtFRTArchID$(data,length){var o={};data.read_shift(4);o.ArchID=data.read_shift(4);data.l+=length-8;return o}function parse_wb_bin(data,opts){var wb={AppVersion:{},WBProps:{},WBView:[],Sheets:[],CalcPr:{},xmlns:""};var pass=false,z;recordhopper(data,function hopper_wb(val,R){switch(R.n){case"BrtBundleSh":wb.Sheets.push(val);break;case"BrtBeginBook":break;case"BrtFileVersion":break;case"BrtWbProp":break;case"BrtACBegin":break;case"BrtAbsPath15":break;case"BrtACEnd":break;case"BrtWbFactoid":break;case"BrtBookProtection":break;case"BrtBeginBookViews":break;case"BrtBookView":break;case"BrtEndBookViews":break;case"BrtBeginBundleShs":break;case"BrtEndBundleShs":break;case"BrtBeginFnGroup":break;case"BrtEndFnGroup":break;case"BrtBeginExternals":break;case"BrtSupSelf":break;case"BrtSupBookSrc":break;case"BrtExternSheet":break;case"BrtEndExternals":break;case"BrtName":break;case"BrtCalcProp":break;case"BrtUserBookView":break;case"BrtBeginPivotCacheIDs":break;case"BrtBeginPivotCacheID":break;case"BrtEndPivotCacheID":break;case"BrtEndPivotCacheIDs":break;case"BrtWebOpt":break;case"BrtFileRecover":break;case"BrtFileSharing":break;case"BrtBeginSmartTagTypes":break;case"BrtSmartTagType":break;case"BrtEndSmartTagTypes":break;case"BrtFRTBegin":pass=true;break;case"BrtFRTArchID$":break;case"BrtWorkBookPr15":break;case"BrtFRTEnd":pass=false;break;case"BrtEndBook":break;default:if(!pass||opts.WTF)throw new Error("Unexpected record "+R.n)}});parse_wb_defaults(wb);return wb}function write_BUNDLESHS(ba,wb,opts){write_record(ba,"BrtBeginBundleShs");for(var idx=0;idx!=wb.SheetNames.length;++idx){var d={hsState:0,iTabID:idx+1,strRelID:"rId"+(idx+1),name:wb.SheetNames[idx]};write_record(ba,"BrtBundleSh",write_BrtBundleSh(d))}write_record(ba,"BrtEndBundleShs")}function write_BrtFileVersion(data,o){if(!o)o=new_buf(127);for(var i=0;i!=4;++i)o.write_shift(4,0);write_XLWideString("SheetJS",o);write_XLWideString(XLSX.version,o);write_XLWideString(XLSX.version,o);write_XLWideString("7262",o);o.length=o.l;return o}function write_BOOKVIEWS(ba,wb,opts){write_record(ba,"BrtBeginBookViews");write_record(ba,"BrtEndBookViews")}function write_BrtCalcProp(data,o){if(!o)o=new_buf(26);o.write_shift(4,0);o.write_shift(4,1);o.write_shift(4,0);write_Xnum(0,o);o.write_shift(-4,1023);o.write_shift(1,51);o.write_shift(1,0);return o}function write_BrtFileRecover(data,o){if(!o)o=new_buf(1);o.write_shift(1,0);return o}function write_wb_bin(wb,opts){var ba=buf_array();write_record(ba,"BrtBeginBook");write_record(ba,"BrtFileVersion",write_BrtFileVersion());write_record(ba,"BrtWbProp",write_BrtWbProp());write_BOOKVIEWS(ba,wb,opts);write_BUNDLESHS(ba,wb,opts);write_record(ba,"BrtCalcProp",write_BrtCalcProp());write_record(ba,"BrtFileRecover",write_BrtFileRecover());write_record(ba,"BrtEndBook");return ba.end()}function parse_wb(data,name,opts){return(name.substr(-4)===".bin"?parse_wb_bin:parse_wb_xml)(data,opts)}function parse_ws(data,name,opts,rels){return(name.substr(-4)===".bin"?parse_ws_bin:parse_ws_xml)(data,opts,rels)}function parse_sty(data,name,opts){return(name.substr(-4)===".bin"?parse_sty_bin:parse_sty_xml)(data,opts)}function parse_theme(data,name,opts){return parse_theme_xml(data,opts)}function parse_sst(data,name,opts){return(name.substr(-4)===".bin"?parse_sst_bin:parse_sst_xml)(data,opts)}function parse_cmnt(data,name,opts){return(name.substr(-4)===".bin"?parse_comments_bin:parse_comments_xml)(data,opts)}function parse_cc(data,name,opts){return(name.substr(-4)===".bin"?parse_cc_bin:parse_cc_xml)(data,opts)}function write_wb(wb,name,opts){return(name.substr(-4)===".bin"?write_wb_bin:write_wb_xml)(wb,opts)}function write_ws(data,name,opts,wb){return(name.substr(-4)===".bin"?write_ws_bin:write_ws_xml)(data,opts,wb)}function write_sty(data,name,opts){return(name.substr(-4)===".bin"?write_sty_bin:write_sty_xml)(data,opts)}function write_sst(data,name,opts){return(name.substr(-4)===".bin"?write_sst_bin:write_sst_xml)(data,opts)}var attregexg2=/([\w:]+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:'))/g;var attregex2=/([\w:]+)=((?:")(?:[^"]*)(?:")|(?:')(?:[^']*)(?:'))/;var _chr=function(c){return String.fromCharCode(c)};function xlml_parsexmltag(tag,skip_root){var words=tag.split(/\s+/);var z=[];if(!skip_root)z[0]=words[0];if(words.length===1)return z;var m=tag.match(attregexg2),y,j,w,i;if(m)for(i=0;i!=m.length;++i){y=m[i].match(attregex2);if((j=y[1].indexOf(":"))===-1)z[y[1]]=y[2].substr(1,y[2].length-2);else{if(y[1].substr(0,6)==="xmlns:")w="xmlns"+y[1].substr(6);else w=y[1].substr(j+1);z[w]=y[2].substr(1,y[2].length-2)}}return z}function xlml_parsexmltagobj(tag){var words=tag.split(/\s+/);var z={};if(words.length===1)return z;var m=tag.match(attregexg2),y,j,w,i;if(m)for(i=0;i!=m.length;++i){y=m[i].match(attregex2);if((j=y[1].indexOf(":"))===-1)z[y[1]]=y[2].substr(1,y[2].length-2);else{if(y[1].substr(0,6)==="xmlns:")w="xmlns"+y[1].substr(6);else w=y[1].substr(j+1);z[w]=y[2].substr(1,y[2].length-2)}}return z}function xlml_format(format,value){var fmt=XLMLFormatMap[format]||unescapexml(format);if(fmt==="General")return SSF._general(value);return SSF.format(fmt,value)}function xlml_set_custprop(Custprops,Rn,cp,val){switch((cp[0].match(/dt:dt="([\w.]+)"/)||["",""])[1]){case"boolean":val=parsexmlbool(val);break;case"i2":case"int":val=parseInt(val,10);break;case"r4":case"float":val=parseFloat(val);break;case"date":case"dateTime.tz":val=new Date(val);break;case"i8":case"string":case"fixed":case"uuid":case"bin.base64":break;default:throw"bad custprop:"+cp[0]}Custprops[unescapexml(Rn[3])]=val}function safe_format_xlml(cell,nf,o){try{if(cell.t==="e"){cell.w=cell.w||BErr[cell.v]}else if(nf==="General"){if(cell.t==="n"){if((cell.v|0)===cell.v)cell.w=SSF._general_int(cell.v);else cell.w=SSF._general_num(cell.v)}else cell.w=SSF._general(cell.v)}else cell.w=xlml_format(nf||"General",cell.v);if(o.cellNF)cell.z=XLMLFormatMap[nf]||nf||"General"}catch(e){if(o.WTF)throw e}}function process_style_xlml(styles,stag,opts){if(opts.cellStyles){if(stag.Interior){var I=stag.Interior;if(I.Pattern)I.patternType=XLMLPatternTypeMap[I.Pattern]||I.Pattern}}styles[stag.ID]=stag}function parse_xlml_data(xml,ss,data,cell,base,styles,csty,row,o){var nf="General",sid=cell.StyleID,S={};o=o||{};var interiors=[];if(sid===undefined&&row)sid=row.StyleID;if(sid===undefined&&csty)sid=csty.StyleID;while(styles[sid]!==undefined){if(styles[sid].nf)nf=styles[sid].nf;if(styles[sid].Interior)interiors.push(styles[sid].Interior);if(!styles[sid].Parent)break;sid=styles[sid].Parent}switch(data.Type){case"Boolean":cell.t="b";cell.v=parsexmlbool(xml);break;case"String":cell.t="s";cell.r=xlml_fixstr(unescapexml(xml));cell.v=xml.indexOf("<")>-1?ss:cell.r;break;case"DateTime":cell.v=(Date.parse(xml)-new Date(Date.UTC(1899,11,30)))/(24*60*60*1e3);if(cell.v!==cell.v)cell.v=unescapexml(xml);else if(cell.v>=1&&cell.v<60)cell.v=cell.v-1;if(!nf||nf=="General")nf="yyyy-mm-dd";case"Number":if(cell.v===undefined)cell.v=+xml;if(!cell.t)cell.t="n";break;case"Error":cell.t="e";cell.v=RBErr[xml];cell.w=xml;break;default:cell.t="s";cell.v=xlml_fixstr(ss);break}safe_format_xlml(cell,nf,o);if(o.cellFormula!=null&&cell.Formula){cell.f=rc_to_a1(unescapexml(cell.Formula),base);cell.Formula=undefined}if(o.cellStyles){interiors.forEach(function(x){if(!S.patternType&&x.patternType)S.patternType=x.patternType});cell.s=S}cell.ixfe=cell.StyleID!==undefined?cell.StyleID:"Default"}function xlml_clean_comment(comment){comment.t=comment.v;comment.v=comment.w=comment.ixfe=undefined}function xlml_normalize(d){if(has_buf&&Buffer.isBuffer(d))return d.toString("utf8");if(typeof d==="string")return d;throw"badf"}var xlmlregex=/<(\/?)([a-z0-9]*:|)(\w+)[^>]*>/gm;function parse_xlml_xml(d,opts){var str=xlml_normalize(d);var Rn;var state=[],tmp;var sheets={},sheetnames=[],cursheet={},sheetname="";var table={},cell={},row={},dtag,didx;var c=0,r=0;var refguess={s:{r:1e6,c:1e6},e:{r:0,c:0}};var styles={},stag={};var ss="",fidx=0;var mergecells=[];var Props={},Custprops={},pidx=0,cp={};var comments=[],comment={};var cstys=[],csty;xlmlregex.lastIndex=0;while(Rn=xlmlregex.exec(str))switch(Rn[3]){case"Data":if(state[state.length-1][1])break;if(Rn[1]==="/")parse_xlml_data(str.slice(didx,Rn.index),ss,dtag,state[state.length-1][0]=="Comment"?comment:cell,{c:c,r:r},styles,cstys[c],row,opts);else{ss="";dtag=xlml_parsexmltag(Rn[0]);didx=Rn.index+Rn[0].length}break;case"Cell":if(Rn[1]==="/"){if(comments.length>0)cell.c=comments;if((!opts.sheetRows||opts.sheetRows>r)&&cell.v!==undefined)cursheet[encode_col(c)+encode_row(r)]=cell;if(cell.HRef){cell.l={Target:cell.HRef,tooltip:cell.HRefScreenTip};cell.HRef=cell.HRefScreenTip=undefined}if(cell.MergeAcross||cell.MergeDown){var cc=c+(parseInt(cell.MergeAcross,10)|0);var rr=r+(parseInt(cell.MergeDown,10)|0);mergecells.push({s:{c:c,r:r},e:{c:cc,r:rr}})}++c;if(cell.MergeAcross)c+=+cell.MergeAcross}else{cell=xlml_parsexmltagobj(Rn[0]);if(cell.Index)c=+cell.Index-1;if(c<refguess.s.c)refguess.s.c=c;if(c>refguess.e.c)refguess.e.c=c;if(Rn[0].substr(-2)==="/>")++c;comments=[]}break;case"Row":if(Rn[1]==="/"||Rn[0].substr(-2)==="/>"){if(r<refguess.s.r)refguess.s.r=r;if(r>refguess.e.r)refguess.e.r=r;if(Rn[0].substr(-2)==="/>"){row=xlml_parsexmltag(Rn[0]);if(row.Index)r=+row.Index-1}c=0;++r}else{row=xlml_parsexmltag(Rn[0]);if(row.Index)r=+row.Index-1}break;case"Worksheet":if(Rn[1]==="/"){if((tmp=state.pop())[0]!==Rn[3])throw"Bad state: "+tmp;sheetnames.push(sheetname);if(refguess.s.r<=refguess.e.r&&refguess.s.c<=refguess.e.c)cursheet["!ref"]=encode_range(refguess);if(mergecells.length)cursheet["!merges"]=mergecells;sheets[sheetname]=cursheet}else{refguess={s:{r:1e6,c:1e6},e:{r:0,c:0}};r=c=0;state.push([Rn[3],false]);tmp=xlml_parsexmltag(Rn[0]);sheetname=tmp.Name;cursheet={};mergecells=[]}break;case"Table":if(Rn[1]==="/"){if((tmp=state.pop())[0]!==Rn[3])throw"Bad state: "+tmp}else if(Rn[0].slice(-2)=="/>")break;else{table=xlml_parsexmltag(Rn[0]);state.push([Rn[3],false]);cstys=[]}break;case"Style":if(Rn[1]==="/")process_style_xlml(styles,stag,opts);else stag=xlml_parsexmltag(Rn[0]);break;case"NumberFormat":stag.nf=xlml_parsexmltag(Rn[0]).Format||"General";break;case"Column":if(state[state.length-1][0]!=="Table")break;csty=xlml_parsexmltag(Rn[0]);cstys[csty.Index-1||cstys.length]=csty;for(var i=0;i<+csty.Span;++i)cstys[cstys.length]=csty;break;case"NamedRange":break;case"NamedCell":break;case"B":break;case"I":break;case"U":break;case"S":break;case"Sub":break;case"Sup":break;case"Span":break;case"Border":break;case"Alignment":break;case"Borders":break;case"Font":if(Rn[0].substr(-2)==="/>")break;else if(Rn[1]==="/")ss+=str.slice(fidx,Rn.index);else fidx=Rn.index+Rn[0].length;break;case"Interior":if(!opts.cellStyles)break;stag.Interior=xlml_parsexmltag(Rn[0]);break;case"Protection":break;case"Author":case"Title":case"Description":case"Created":case"Keywords":case"Subject":case"Category":case"Company":case"LastAuthor":case"LastSaved":case"LastPrinted":case"Version":case"Revision":case"TotalTime":case"HyperlinkBase":case"Manager":if(Rn[0].substr(-2)==="/>")break;else if(Rn[1]==="/")xlml_set_prop(Props,Rn[3],str.slice(pidx,Rn.index));else pidx=Rn.index+Rn[0].length;break;case"Paragraphs":break;case"Styles":case"Workbook":if(Rn[1]==="/"){if((tmp=state.pop())[0]!==Rn[3])throw"Bad state: "+tmp}else state.push([Rn[3],false]);break;case"Comment":if(Rn[1]==="/"){if((tmp=state.pop())[0]!==Rn[3])throw"Bad state: "+tmp;xlml_clean_comment(comment);comments.push(comment)}else{state.push([Rn[3],false]);tmp=xlml_parsexmltag(Rn[0]);comment={a:tmp.Author}}break;case"Name":break;case"ComponentOptions":case"DocumentProperties":case"CustomDocumentProperties":case"OfficeDocumentSettings":case"PivotTable":case"PivotCache":case"Names":case"MapInfo":case"PageBreaks":case"QueryTable":case"DataValidation":case"AutoFilter":case"Sorting":case"Schema":case"data":case"ConditionalFormatting":case"SmartTagType":case"SmartTags":case"ExcelWorkbook":case"WorkbookOptions":case"WorksheetOptions":if(Rn[1]==="/"){if((tmp=state.pop())[0]!==Rn[3])throw"Bad state: "+tmp}else if(Rn[0].charAt(Rn[0].length-2)!=="/")state.push([Rn[3],true]);break;default:var seen=true;switch(state[state.length-1][0]){case"OfficeDocumentSettings":switch(Rn[3]){case"AllowPNG":break;case"RemovePersonalInformation":break;case"DownloadComponents":break;case"LocationOfComponents":break;case"Colors":break;case"Color":break;case"Index":break;case"RGB":break;case"PixelsPerInch":break;case"TargetScreenSize":break;case"ReadOnlyRecommended":break;default:seen=false}break;case"ComponentOptions":switch(Rn[3]){case"Toolbar":break;case"HideOfficeLogo":break;case"SpreadsheetAutoFit":break;case"Label":break;case"Caption":break;case"MaxHeight":break;case"MaxWidth":break;case"NextSheetNumber":break;default:seen=false}break;case"ExcelWorkbook":switch(Rn[3]){case"WindowHeight":break;case"WindowWidth":break;case"WindowTopX":break;case"WindowTopY":break;case"TabRatio":break;case"ProtectStructure":break;case"ProtectWindows":break;case"ActiveSheet":break;case"DisplayInkNotes":break;case"FirstVisibleSheet":break;case"SupBook":break;case"SheetName":break;case"SheetIndex":break;case"SheetIndexFirst":break;case"SheetIndexLast":break;case"Dll":break;case"AcceptLabelsInFormulas":break;case"DoNotSaveLinkValues":break;case"Date1904":break;case"Iteration":break;case"MaxIterations":break;case"MaxChange":break;case"Path":break;case"Xct":break;case"Count":break;case"SelectedSheets":break;case"Calculation":break;case"Uncalced":break;case"StartupPrompt":break;case"Crn":break;case"ExternName":break;case"Formula":break;case"ColFirst":break;case"ColLast":break;case"WantAdvise":break;case"Boolean":break;case"Error":break;case"Text":break;case"OLE":break;case"NoAutoRecover":break;case"PublishObjects":break;case"DoNotCalculateBeforeSave":break;case"Number":break;case"RefModeR1C1":break;case"EmbedSaveSmartTags":break;default:seen=false}break;case"WorkbookOptions":switch(Rn[3]){case"OWCVersion":break;case"Height":break;case"Width":break;default:seen=false}break;case"WorksheetOptions":switch(Rn[3]){case"Unsynced":break;case"Visible":break;case"Print":break;case"Panes":break;case"Scale":break;case"Pane":break;case"Number":break;case"Layout":break;case"Header":break;case"Footer":break;case"PageSetup":break;case"PageMargins":break;case"Selected":break;case"ProtectObjects":break;case"EnableSelection":break;case"ProtectScenarios":break;case"ValidPrinterInfo":break;case"HorizontalResolution":break;case"VerticalResolution":break;case"NumberofCopies":break;case"ActiveRow":break;case"ActiveCol":break;case"ActivePane":break;case"TopRowVisible":break;case"TopRowBottomPane":break;case"LeftColumnVisible":break;case"LeftColumnRightPane":break;case"FitToPage":break;case"RangeSelection":break;case"PaperSizeIndex":break;case"PageLayoutZoom":break;case"PageBreakZoom":break;case"FilterOn":break;case"DoNotDisplayGridlines":break;case"SplitHorizontal":break;case"SplitVertical":break;case"FreezePanes":break;case"FrozenNoSplit":break;case"FitWidth":break;case"FitHeight":break;case"CommentsLayout":break;case"Zoom":break;case"LeftToRight":break;case"Gridlines":break;case"AllowSort":break;case"AllowFilter":break;case"AllowInsertRows":break;case"AllowDeleteRows":break;case"AllowInsertCols":break;case"AllowDeleteCols":break;case"AllowInsertHyperlinks":break;case"AllowFormatCells":break;case"AllowSizeCols":break;case"AllowSizeRows":break;case"NoSummaryRowsBelowDetail":break;case"TabColorIndex":break;case"DoNotDisplayHeadings":break;case"ShowPageLayoutZoom":break;case"NoSummaryColumnsRightDetail":break;case"BlackAndWhite":break;case"DoNotDisplayZeros":break;case"DisplayPageBreak":break;case"RowColHeadings":break;case"DoNotDisplayOutline":break;case"NoOrientation":break;case"AllowUsePivotTables":break;case"ZeroHeight":break;case"ViewableRange":break;case"Selection":break;case"ProtectContents":break;default:seen=false}break;case"PivotTable":case"PivotCache":switch(Rn[3]){case"ImmediateItemsOnDrop":break;case"ShowPageMultipleItemLabel":break;case"CompactRowIndent":break;case"Location":break;case"PivotField":break;case"Orientation":break;case"LayoutForm":break;case"LayoutSubtotalLocation":break;case"LayoutCompactRow":break;case"Position":break;case"PivotItem":break;case"DataType":break;case"DataField":break;case"SourceName":break;case"ParentField":break;case"PTLineItems":break;case"PTLineItem":break;case"CountOfSameItems":break;case"Item":break;case"ItemType":break;case"PTSource":break;case"CacheIndex":break;case"ConsolidationReference":break;case"FileName":break;case"Reference":break;case"NoColumnGrand":break;case"NoRowGrand":break;case"BlankLineAfterItems":break;case"Hidden":break;case"Subtotal":break;case"BaseField":break;case"MapChildItems":break;case"Function":break;case"RefreshOnFileOpen":break;case"PrintSetTitles":break;case"MergeLabels":break;case"DefaultVersion":break;case"RefreshName":break;case"RefreshDate":break;case"RefreshDateCopy":break;case"VersionLastRefresh":break;case"VersionLastUpdate":break;case"VersionUpdateableMin":break;case"VersionRefreshableMin":break;case"Calculation":break;default:seen=false}break;case"PageBreaks":switch(Rn[3]){case"ColBreaks":break;case"ColBreak":break;case"RowBreaks":break;case"RowBreak":break;case"ColStart":break;case"ColEnd":break;case"RowEnd":break;default:seen=false}break;case"AutoFilter":switch(Rn[3]){case"AutoFilterColumn":break;case"AutoFilterCondition":break;case"AutoFilterAnd":break;case"AutoFilterOr":break;default:seen=false}break;case"QueryTable":switch(Rn[3]){case"Id":break;case"AutoFormatFont":break;case"AutoFormatPattern":break;case"QuerySource":break;case"QueryType":break;case"EnableRedirections":break;case"RefreshedInXl9":break;case"URLString":break;case"HTMLTables":break;case"Connection":break;case"CommandText":break;case"RefreshInfo":break;case"NoTitles":break;case"NextId":break;case"ColumnInfo":break;case"OverwriteCells":break;case"DoNotPromptForFile":break;case"TextWizardSettings":break;case"Source":break;case"Number":break;case"Decimal":break;case"ThousandSeparator":break;case"TrailingMinusNumbers":break;case"FormatSettings":break;case"FieldType":break;case"Delimiters":break;case"Tab":break;case"Comma":break;case"AutoFormatName":break;case"VersionLastEdit":break;case"VersionLastRefresh":break;default:seen=false}break;case"Sorting":case"ConditionalFormatting":case"DataValidation":switch(Rn[3]){case"Range":break;case"Type":break;case"Min":break;case"Max":break;case"Sort":break;case"Descending":break;case"Order":break;case"CaseSensitive":break;case"Value":break;case"ErrorStyle":break;case"ErrorMessage":break;case"ErrorTitle":break;case"CellRangeList":break;case"InputMessage":break;case"InputTitle":break;case"ComboHide":break;case"InputHide":break;case"Condition":break;case"Qualifier":break;case"UseBlank":break;case"Value1":break;case"Value2":break;case"Format":break;default:seen=false}break;case"MapInfo":case"Schema":case"data":switch(Rn[3]){case"Map":break;case"Entry":break;case"Range":break;case"XPath":break;case"Field":break;case"XSDType":break;case"FilterOn":break;case"Aggregate":break;case"ElementType":break;case"AttributeType":break;case"schema":case"element":case"complexType":case"datatype":case"all":case"attribute":case"extends":break;case"row":break;default:seen=false}break;case"SmartTags":break;default:seen=false;break}if(seen)break;if(!state[state.length-1][1])throw"Unrecognized tag: "+Rn[3]+"|"+state.join("|");if(state[state.length-1][0]==="CustomDocumentProperties"){if(Rn[0].substr(-2)==="/>")break;else if(Rn[1]==="/")xlml_set_custprop(Custprops,Rn,cp,str.slice(pidx,Rn.index));else{cp=Rn;pidx=Rn.index+Rn[0].length}break}if(opts.WTF)throw"Unrecognized tag: "+Rn[3]+"|"+state.join("|")}var out={};if(!opts.bookSheets&&!opts.bookProps)out.Sheets=sheets;out.SheetNames=sheetnames;out.SSF=SSF.get_table();out.Props=Props;out.Custprops=Custprops;return out}function parse_xlml(data,opts){fix_read_opts(opts=opts||{});switch(opts.type||"base64"){case"base64":return parse_xlml_xml(Base64.decode(data),opts);case"binary":case"buffer":case"file":return parse_xlml_xml(data,opts);case"array":return parse_xlml_xml(data.map(_chr).join(""),opts)}}function write_xlml(wb,opts){}function parse_compobj(obj){var v={};var o=obj.content;var l=28,m;m=__lpstr(o,l);l+=4+__readUInt32LE(o,l);v.UserType=m;m=__readUInt32LE(o,l);l+=4;switch(m){case 0:break;case 4294967295:case 4294967294:l+=4;break;default:if(m>400)throw new Error("Unsupported Clipboard: "+m.toString(16));l+=m}m=__lpstr(o,l);l+=m.length===0?0:5+m.length;v.Reserved1=m;if((m=__readUInt32LE(o,l))!==1907550708)return v;throw"Unsupported Unicode Extension"}function slurp(R,blob,length,opts){var l=length;var bufs=[];var d=blob.slice(blob.l,blob.l+l);if(opts&&opts.enc&&opts.enc.insitu_decrypt)switch(R.n){case"BOF":case"FilePass":case"FileLock":case"InterfaceHdr":case"RRDInfo":case"RRDHead":case"UsrExcl":break;default:if(d.length===0)break;opts.enc.insitu_decrypt(d)}bufs.push(d);blob.l+=l;var next=XLSRecordEnum[__readUInt16LE(blob,blob.l)];while(next!=null&&next.n==="Continue"){l=__readUInt16LE(blob,blob.l+2);bufs.push(blob.slice(blob.l+4,blob.l+4+l));blob.l+=4+l;next=XLSRecordEnum[__readUInt16LE(blob,blob.l)]}var b=bconcat(bufs);prep_blob(b,0);var ll=0;b.lens=[];for(var j=0;j<bufs.length;++j){b.lens.push(ll);ll+=bufs[j].length}return R.f(b,b.length,opts)}function safe_format_xf(p,opts,date1904){if(!p.XF)return;try{var fmtid=p.XF.ifmt||0;if(p.t==="e"){p.w=p.w||BErr[p.v]}else if(fmtid===0){if(p.t==="n"){if((p.v|0)===p.v)p.w=SSF._general_int(p.v);else p.w=SSF._general_num(p.v)}else p.w=SSF._general(p.v)}else p.w=SSF.format(fmtid,p.v,{date1904:date1904||false});if(opts.cellNF)p.z=SSF._table[fmtid]}catch(e){if(opts.WTF)throw e}}function make_cell(val,ixfe,t){return{v:val,ixfe:ixfe,t:t}}function parse_workbook(blob,options){var wb={opts:{}};var Sheets={};var out={};var Directory={};var found_sheet=false;var range={};var last_formula=null;var sst=[];var cur_sheet="";var Preamble={};var lastcell,last_cell,cc,cmnt,rng,rngC,rngR;var shared_formulae={};var array_formulae=[];var temp_val;var country;var cell_valid=true;var XFs=[];var palette=[];var get_rgb=function getrgb(icv){if(icv<8)return XLSIcv[icv];if(icv<64)return palette[icv-8]||XLSIcv[icv];return XLSIcv[icv]};var process_cell_style=function pcs(cell,line){var xfd=line.XF.data;if(!xfd||!xfd.patternType)return;line.s={};line.s.patternType=xfd.patternType;var t;if(t=rgb2Hex(get_rgb(xfd.icvFore))){line.s.fgColor={rgb:t}}if(t=rgb2Hex(get_rgb(xfd.icvBack))){line.s.bgColor={rgb:t}}};var addcell=function addcell(cell,line,options){if(!cell_valid)return;if(options.cellStyles&&line.XF&&line.XF.data)process_cell_style(cell,line);lastcell=cell;last_cell=encode_cell(cell);if(range.s){if(cell.r<range.s.r)range.s.r=cell.r;if(cell.c<range.s.c)range.s.c=cell.c}if(range.e){if(cell.r+1>range.e.r)range.e.r=cell.r+1;if(cell.c+1>range.e.c)range.e.c=cell.c+1}if(options.sheetRows&&lastcell.r>=options.sheetRows)cell_valid=false;else out[last_cell]=line};var opts={enc:false,sbcch:0,snames:[],sharedf:shared_formulae,arrayf:array_formulae,rrtabid:[],lastuser:"",biff:8,codepage:0,winlocked:0,wtf:false};if(options.password)opts.password=options.password;var mergecells=[];var objects=[];var supbooks=[[]];var sbc=0,sbci=0,sbcli=0;supbooks.SheetNames=opts.snames;supbooks.sharedf=opts.sharedf;supbooks.arrayf=opts.arrayf;var last_Rn="";var file_depth=0;opts.codepage=1200;set_cp(1200);while(blob.l<blob.length-1){var s=blob.l;var RecordType=blob.read_shift(2);if(RecordType===0&&last_Rn==="EOF")break;var length=blob.l===blob.length?0:blob.read_shift(2),y;var R=XLSRecordEnum[RecordType];if(R&&R.f){if(options.bookSheets){if(last_Rn==="BoundSheet8"&&R.n!=="BoundSheet8")break}last_Rn=R.n;if(R.r===2||R.r==12){var rt=blob.read_shift(2);length-=2;if(!opts.enc&&rt!==RecordType)throw"rt mismatch";if(R.r==12){blob.l+=10;length-=10}}var val;if(R.n==="EOF")val=R.f(blob,length,opts);else val=slurp(R,blob,length,opts);var Rn=R.n;if(opts.biff===5||opts.biff===2)switch(Rn){case"Lbl":Rn="Label";break}switch(Rn){case"Date1904":wb.opts.Date1904=val;break;case"WriteProtect":wb.opts.WriteProtect=true;break;case"FilePass":if(!opts.enc)blob.l=0;opts.enc=val;if(opts.WTF)console.error(val);if(!options.password)throw new Error("File is password-protected");if(val.Type!==0)throw new Error("Encryption scheme unsupported");if(!val.valid)throw new Error("Password is incorrect");break;case"WriteAccess":opts.lastuser=val;break;case"FileSharing":break;case"CodePage":if(val===21010)val=1200;else if(val===32769)val=1252;opts.codepage=val;set_cp(val);break;case"RRTabId":opts.rrtabid=val;break;case"WinProtect":opts.winlocked=val;break;case"Template":break;case"RefreshAll":wb.opts.RefreshAll=val;break;case"BookBool":break;case"UsesELFs":break;case"MTRSettings":{if(val[0]&&val[1])throw"Unsupported threads: "+val}break;case"CalcCount":wb.opts.CalcCount=val;break;case"CalcDelta":wb.opts.CalcDelta=val;break;case"CalcIter":wb.opts.CalcIter=val;break;case"CalcMode":wb.opts.CalcMode=val;break;case"CalcPrecision":wb.opts.CalcPrecision=val;break;case"CalcSaveRecalc":wb.opts.CalcSaveRecalc=val;break;case"CalcRefMode":opts.CalcRefMode=val;break;case"Uncalced":break;case"ForceFullCalculation":wb.opts.FullCalc=val;break;case"WsBool":break;case"XF":XFs.push(val);break;case"ExtSST":break;case"BookExt":break;case"RichTextStream":break;case"BkHim":break;case"SupBook":supbooks[++sbc]=[val];sbci=0;break;case"ExternName":supbooks[sbc][++sbci]=val;break;case"Index":break;case"Lbl":supbooks[0][++sbcli]=val;break;case"ExternSheet":supbooks[sbc]=supbooks[sbc].concat(val);sbci+=val.length;break;case"Protect":out["!protect"]=val;break;case"Password":if(val!==0&&opts.WTF)console.error("Password verifier: "+val);break;case"Prot4Rev":case"Prot4RevPass":break;case"BoundSheet8":{Directory[val.pos]=val;opts.snames.push(val.name)}break;case"EOF":{if(--file_depth)break;if(range.e){out["!range"]=range;if(range.e.r>0&&range.e.c>0){range.e.r--;range.e.c--;out["!ref"]=encode_range(range);range.e.r++;range.e.c++}if(mergecells.length>0)out["!merges"]=mergecells;if(objects.length>0)out["!objects"]=objects}if(cur_sheet==="")Preamble=out;else Sheets[cur_sheet]=out;out={}}break;case"BOF":{if(opts.biff!==8);else if(val.BIFFVer===1280)opts.biff=5;else if(val.BIFFVer===2)opts.biff=2;else if(val.BIFFVer===7)opts.biff=2;if(file_depth++)break;cell_valid=true;out={};if(opts.biff===2){if(cur_sheet==="")cur_sheet="Sheet1";range={s:{r:0,c:0},e:{r:0,c:0}}}else cur_sheet=(Directory[s]||{name:""}).name;mergecells=[];objects=[]}break;case"Number":case"BIFF2NUM":{temp_val={ixfe:val.ixfe,XF:XFs[val.ixfe],v:val.val,t:"n"};if(temp_val.XF)safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:val.c,r:val.r},temp_val,options)}break;case"BoolErr":{temp_val={ixfe:val.ixfe,XF:XFs[val.ixfe],v:val.val,t:val.t};if(temp_val.XF)safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:val.c,r:val.r},temp_val,options)}break;case"RK":{temp_val={ixfe:val.ixfe,XF:XFs[val.ixfe],v:val.rknum,t:"n"};if(temp_val.XF)safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:val.c,r:val.r},temp_val,options)}break;case"MulRk":{for(var j=val.c;j<=val.C;++j){var ixfe=val.rkrec[j-val.c][0];temp_val={ixfe:ixfe,XF:XFs[ixfe],v:val.rkrec[j-val.c][1],t:"n"};if(temp_val.XF)safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:j,r:val.r},temp_val,options)}}break;case"Formula":{switch(val.val){case"String":last_formula=val;break;case"Array Formula":throw"Array Formula unsupported";default:temp_val={v:val.val,ixfe:val.cell.ixfe,t:val.tt};temp_val.XF=XFs[temp_val.ixfe];if(options.cellFormula)temp_val.f="="+stringify_formula(val.formula,range,val.cell,supbooks,opts);if(temp_val.XF)safe_format_xf(temp_val,options,wb.opts.Date1904);addcell(val.cell,temp_val,options);last_formula=val}}break;case"String":{if(last_formula){last_formula.val=val;temp_val={v:last_formula.val,ixfe:last_formula.cell.ixfe,t:"s"};temp_val.XF=XFs[temp_val.ixfe];if(options.cellFormula)temp_val.f="="+stringify_formula(last_formula.formula,range,last_formula.cell,supbooks,opts);if(temp_val.XF)safe_format_xf(temp_val,options,wb.opts.Date1904);addcell(last_formula.cell,temp_val,options);last_formula=null}}break;case"Array":{array_formulae.push(val)}break;case"ShrFmla":{if(!cell_valid)break;shared_formulae[encode_cell(last_formula.cell)]=val[0]}break;case"LabelSst":temp_val=make_cell(sst[val.isst].t,val.ixfe,"s");temp_val.XF=XFs[temp_val.ixfe];if(temp_val.XF)safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:val.c,r:val.r},temp_val,options);break;case"Label":case"BIFF2STR":temp_val=make_cell(val.val,val.ixfe,"s");temp_val.XF=XFs[temp_val.ixfe];if(temp_val.XF)safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:val.c,r:val.r},temp_val,options);break;case"Dimensions":{if(file_depth===1)range=val}break;case"SST":{sst=val}break;case"Format":{SSF.load(val[1],val[0])}break;case"MergeCells":mergecells=mergecells.concat(val);break;case"Obj":objects[val.cmo[0]]=opts.lastobj=val;break;case"TxO":opts.lastobj.TxO=val;break;case"HLink":{for(rngR=val[0].s.r;rngR<=val[0].e.r;++rngR)for(rngC=val[0].s.c;rngC<=val[0].e.c;++rngC)if(out[encode_cell({c:rngC,r:rngR})])out[encode_cell({c:rngC,r:rngR})].l=val[1]}break;case"HLinkTooltip":{for(rngR=val[0].s.r;rngR<=val[0].e.r;++rngR)for(rngC=val[0].s.c;rngC<=val[0].e.c;++rngC)if(out[encode_cell({c:rngC,r:rngR})])out[encode_cell({c:rngC,r:rngR})].l.tooltip=val[1]}break;case"Note":{if(opts.biff<=5&&opts.biff>=2)break;cc=out[encode_cell(val[0])];var noteobj=objects[val[2]];if(!cc)break;if(!cc.c)cc.c=[];cmnt={a:val[1],t:noteobj.TxO.t};cc.c.push(cmnt)}break;default:switch(R.n){case"ClrtClient":break;case"XFExt":update_xfext(XFs[val.ixfe],val.ext);break;case"NameCmt":break;case"Header":break;case"Footer":break;case"HCenter":break;case"VCenter":break;case"Pls":break;case"Setup":break;case"DefColWidth":break;case"GCW":break;case"LHRecord":break;case"ColInfo":break;case"Row":break;case"DBCell":break;case"MulBlank":break;case"EntExU2":break;case"SxView":break;case"Sxvd":break;case"SXVI":break;case"SXVDEx":break;case"SxIvd":break;case"SXDI":break;case"SXLI":break;case"SXEx":break;case"QsiSXTag":break;case"Selection":break;case"Feat":break;case"FeatHdr":case"FeatHdr11":break;case"Feature11":case"Feature12":case"List12":break;case"Blank":break;case"Country":country=val;break;case"RecalcId":break;case"DefaultRowHeight":case"DxGCol":break;case"Fbi":case"Fbi2":case"GelFrame":break;case"Font":break;case"XFCRC":break;case"Style":break;case"StyleExt":break;case"Palette":palette=val;break;case"Theme":break;case"ScenarioProtect":break;case"ObjProtect":break;case"CondFmt12":break;case"Table":break;case"TableStyles":break;case"TableStyle":break;case"TableStyleElement":break;case"SXStreamID":break;case"SXVS":break;case"DConRef":break;case"SXAddl":break;case"DConBin":break;case"DConName":break;case"SXPI":break;case"SxFormat":break;case"SxSelect":break;case"SxRule":break;case"SxFilt":break;case"SxItm":break;case"SxDXF":break;case"ScenMan":break;case"DCon":break;case"CellWatch":break;case"PrintRowCol":break;case"PrintGrid":break;case"PrintSize":break;case"XCT":break;case"CRN":break;case"Scl":{}break;case"SheetExt":{}break;case"SheetExtOptional":{}break;case"ObNoMacros":{}break;case"ObProj":{}break;case"CodeName":{}break;case"GUIDTypeLib":{}break;case"WOpt":break;case"PhoneticInfo":break;case"OleObjectSize":break;case"DXF":case"DXFN":case"DXFN12":case"DXFN12List":case"DXFN12NoCB":break;case"Dv":case"DVal":break;case"BRAI":case"Series":case"SeriesText":break;case"DConn":break;
+case"DbOrParamQry":break;case"DBQueryExt":break;case"IFmtRecord":break;case"CondFmt":case"CF":case"CF12":case"CFEx":break;case"Excel9File":break;case"Units":break;case"InterfaceHdr":case"Mms":case"InterfaceEnd":case"DSF":case"BuiltInFnGroupCount":case"Window1":case"Window2":case"HideObj":case"GridSet":case"Guts":case"UserBView":case"UserSViewBegin":case"UserSViewEnd":case"Pane":break;default:switch(R.n){case"Dat":case"Begin":case"End":case"StartBlock":case"EndBlock":case"Frame":case"Area":case"Axis":case"AxisLine":case"Tick":break;case"AxesUsed":case"CrtLayout12":case"CrtLayout12A":case"CrtLink":case"CrtLine":case"CrtMlFrt":case"CrtMlFrtContinue":break;case"LineFormat":case"AreaFormat":case"Chart":case"Chart3d":case"Chart3DBarShape":case"ChartFormat":case"ChartFrtInfo":break;case"PlotArea":case"PlotGrowth":break;case"SeriesList":case"SerParent":case"SerAuxTrend":break;case"DataFormat":case"SerToCrt":case"FontX":break;case"CatSerRange":case"AxcExt":case"SerFmt":break;case"ShtProps":break;case"DefaultText":case"Text":case"CatLab":break;case"DataLabExtContents":break;case"Legend":case"LegendException":break;case"Pie":case"Scatter":break;case"PieFormat":case"MarkerFormat":break;case"StartObject":case"EndObject":break;case"AlRuns":case"ObjectLink":break;case"SIIndex":break;case"AttachedLabel":case"YMult":break;case"Line":case"Bar":break;case"Surf":break;case"AxisParent":break;case"Pos":break;case"ValueRange":break;case"SXViewEx9":break;case"SXViewLink":break;case"PivotChartBits":break;case"SBaseRef":break;case"TextPropsStream":break;case"LnExt":break;case"MkrExt":break;case"CrtCoopt":break;case"Qsi":case"Qsif":case"Qsir":case"QsiSXTag":break;case"TxtQry":break;case"FilterMode":break;case"AutoFilter":case"AutoFilterInfo":break;case"AutoFilter12":break;case"DropDownObjIds":break;case"Sort":break;case"SortData":break;case"ShapePropsStream":break;case"MsoDrawing":case"MsoDrawingGroup":case"MsoDrawingSelection":break;case"ImData":break;case"WebPub":case"AutoWebPub":case"RightMargin":case"LeftMargin":case"TopMargin":case"BottomMargin":case"HeaderFooter":case"HFPicture":case"PLV":case"HorizontalPageBreaks":case"VerticalPageBreaks":case"Backup":case"CompressPictures":case"Compat12":break;case"Continue":case"ContinueFrt12":break;case"FrtFontList":case"FrtWrapper":break;case"ExternCount":break;case"RString":break;case"TabIdConf":case"Radar":case"RadarArea":case"DropBar":case"Intl":case"CoordList":case"SerAuxErrBar":break;default:switch(R.n){case"SCENARIO":case"DConBin":case"PicF":case"DataLabExt":case"Lel":case"BopPop":case"BopPopCustom":case"RealTimeData":case"Name":break;default:if(options.WTF)throw"Unrecognized Record "+R.n}}}}}else blob.l+=length}var sheetnamesraw=opts.biff===2?["Sheet1"]:Object.keys(Directory).sort(function(a,b){return Number(a)-Number(b)}).map(function(x){return Directory[x].name});var sheetnames=sheetnamesraw.slice();wb.Directory=sheetnamesraw;wb.SheetNames=sheetnamesraw;if(!options.bookSheets)wb.Sheets=Sheets;wb.Preamble=Preamble;wb.Strings=sst;wb.SSF=SSF.get_table();if(opts.enc)wb.Encryption=opts.enc;wb.Metadata={};if(country!==undefined)wb.Metadata.Country=country;return wb}function parse_xlscfb(cfb,options){if(!options)options={};fix_read_opts(options);reset_cp();var CompObj,Summary,Workbook;if(cfb.find){CompObj=cfb.find("!CompObj");Summary=cfb.find("!SummaryInformation");Workbook=cfb.find("/Workbook")}else{prep_blob(cfb,0);Workbook={content:cfb}}if(!Workbook)Workbook=cfb.find("/Book");var CompObjP,SummaryP,WorkbookP;if(CompObj)CompObjP=parse_compobj(CompObj);if(options.bookProps&&!options.bookSheets)WorkbookP={};else{if(Workbook)WorkbookP=parse_workbook(Workbook.content,options,!!Workbook.find);else throw new Error("Cannot find Workbook stream")}if(cfb.find)parse_props(cfb);var props={};for(var y in cfb.Summary)props[y]=cfb.Summary[y];for(y in cfb.DocSummary)props[y]=cfb.DocSummary[y];WorkbookP.Props=WorkbookP.Custprops=props;if(options.bookFiles)WorkbookP.cfb=cfb;WorkbookP.CompObjP=CompObjP;return WorkbookP}function parse_props(cfb){var DSI=cfb.find("!DocumentSummaryInformation");if(DSI)try{cfb.DocSummary=parse_PropertySetStream(DSI,DocSummaryPIDDSI)}catch(e){}var SI=cfb.find("!SummaryInformation");if(SI)try{cfb.Summary=parse_PropertySetStream(SI,SummaryPIDSI)}catch(e){}}var XLSBRecordEnum={0:{n:"BrtRowHdr",f:parse_BrtRowHdr},1:{n:"BrtCellBlank",f:parse_BrtCellBlank},2:{n:"BrtCellRk",f:parse_BrtCellRk},3:{n:"BrtCellError",f:parse_BrtCellError},4:{n:"BrtCellBool",f:parse_BrtCellBool},5:{n:"BrtCellReal",f:parse_BrtCellReal},6:{n:"BrtCellSt",f:parse_BrtCellSt},7:{n:"BrtCellIsst",f:parse_BrtCellIsst},8:{n:"BrtFmlaString",f:parse_BrtFmlaString},9:{n:"BrtFmlaNum",f:parse_BrtFmlaNum},10:{n:"BrtFmlaBool",f:parse_BrtFmlaBool},11:{n:"BrtFmlaError",f:parse_BrtFmlaError},16:{n:"BrtFRTArchID$",f:parse_BrtFRTArchID$},19:{n:"BrtSSTItem",f:parse_RichStr},20:{n:"BrtPCDIMissing",f:parsenoop},21:{n:"BrtPCDINumber",f:parsenoop},22:{n:"BrtPCDIBoolean",f:parsenoop},23:{n:"BrtPCDIError",f:parsenoop},24:{n:"BrtPCDIString",f:parsenoop},25:{n:"BrtPCDIDatetime",f:parsenoop},26:{n:"BrtPCDIIndex",f:parsenoop},27:{n:"BrtPCDIAMissing",f:parsenoop},28:{n:"BrtPCDIANumber",f:parsenoop},29:{n:"BrtPCDIABoolean",f:parsenoop},30:{n:"BrtPCDIAError",f:parsenoop},31:{n:"BrtPCDIAString",f:parsenoop},32:{n:"BrtPCDIADatetime",f:parsenoop},33:{n:"BrtPCRRecord",f:parsenoop},34:{n:"BrtPCRRecordDt",f:parsenoop},35:{n:"BrtFRTBegin",f:parsenoop},36:{n:"BrtFRTEnd",f:parsenoop},37:{n:"BrtACBegin",f:parsenoop},38:{n:"BrtACEnd",f:parsenoop},39:{n:"BrtName",f:parsenoop},40:{n:"BrtIndexRowBlock",f:parsenoop},42:{n:"BrtIndexBlock",f:parsenoop},43:{n:"BrtFont",f:parse_BrtFont},44:{n:"BrtFmt",f:parse_BrtFmt},45:{n:"BrtFill",f:parsenoop},46:{n:"BrtBorder",f:parsenoop},47:{n:"BrtXF",f:parse_BrtXF},48:{n:"BrtStyle",f:parsenoop},49:{n:"BrtCellMeta",f:parsenoop},50:{n:"BrtValueMeta",f:parsenoop},51:{n:"BrtMdb",f:parsenoop},52:{n:"BrtBeginFmd",f:parsenoop},53:{n:"BrtEndFmd",f:parsenoop},54:{n:"BrtBeginMdx",f:parsenoop},55:{n:"BrtEndMdx",f:parsenoop},56:{n:"BrtBeginMdxTuple",f:parsenoop},57:{n:"BrtEndMdxTuple",f:parsenoop},58:{n:"BrtMdxMbrIstr",f:parsenoop},59:{n:"BrtStr",f:parsenoop},60:{n:"BrtColInfo",f:parsenoop},62:{n:"BrtCellRString",f:parsenoop},63:{n:"BrtCalcChainItem$",f:parse_BrtCalcChainItem$},64:{n:"BrtDVal",f:parsenoop},65:{n:"BrtSxvcellNum",f:parsenoop},66:{n:"BrtSxvcellStr",f:parsenoop},67:{n:"BrtSxvcellBool",f:parsenoop},68:{n:"BrtSxvcellErr",f:parsenoop},69:{n:"BrtSxvcellDate",f:parsenoop},70:{n:"BrtSxvcellNil",f:parsenoop},128:{n:"BrtFileVersion",f:parsenoop},129:{n:"BrtBeginSheet",f:parsenoop},130:{n:"BrtEndSheet",f:parsenoop},131:{n:"BrtBeginBook",f:parsenoop,p:0},132:{n:"BrtEndBook",f:parsenoop},133:{n:"BrtBeginWsViews",f:parsenoop},134:{n:"BrtEndWsViews",f:parsenoop},135:{n:"BrtBeginBookViews",f:parsenoop},136:{n:"BrtEndBookViews",f:parsenoop},137:{n:"BrtBeginWsView",f:parsenoop},138:{n:"BrtEndWsView",f:parsenoop},139:{n:"BrtBeginCsViews",f:parsenoop},140:{n:"BrtEndCsViews",f:parsenoop},141:{n:"BrtBeginCsView",f:parsenoop},142:{n:"BrtEndCsView",f:parsenoop},143:{n:"BrtBeginBundleShs",f:parsenoop},144:{n:"BrtEndBundleShs",f:parsenoop},145:{n:"BrtBeginSheetData",f:parsenoop},146:{n:"BrtEndSheetData",f:parsenoop},147:{n:"BrtWsProp",f:parse_BrtWsProp},148:{n:"BrtWsDim",f:parse_BrtWsDim,p:16},151:{n:"BrtPane",f:parsenoop},152:{n:"BrtSel",f:parsenoop},153:{n:"BrtWbProp",f:parse_BrtWbProp},154:{n:"BrtWbFactoid",f:parsenoop},155:{n:"BrtFileRecover",f:parsenoop},156:{n:"BrtBundleSh",f:parse_BrtBundleSh},157:{n:"BrtCalcProp",f:parsenoop},158:{n:"BrtBookView",f:parsenoop},159:{n:"BrtBeginSst",f:parse_BrtBeginSst},160:{n:"BrtEndSst",f:parsenoop},161:{n:"BrtBeginAFilter",f:parsenoop},162:{n:"BrtEndAFilter",f:parsenoop},163:{n:"BrtBeginFilterColumn",f:parsenoop},164:{n:"BrtEndFilterColumn",f:parsenoop},165:{n:"BrtBeginFilters",f:parsenoop},166:{n:"BrtEndFilters",f:parsenoop},167:{n:"BrtFilter",f:parsenoop},168:{n:"BrtColorFilter",f:parsenoop},169:{n:"BrtIconFilter",f:parsenoop},170:{n:"BrtTop10Filter",f:parsenoop},171:{n:"BrtDynamicFilter",f:parsenoop},172:{n:"BrtBeginCustomFilters",f:parsenoop},173:{n:"BrtEndCustomFilters",f:parsenoop},174:{n:"BrtCustomFilter",f:parsenoop},175:{n:"BrtAFilterDateGroupItem",f:parsenoop},176:{n:"BrtMergeCell",f:parse_BrtMergeCell},177:{n:"BrtBeginMergeCells",f:parsenoop},178:{n:"BrtEndMergeCells",f:parsenoop},179:{n:"BrtBeginPivotCacheDef",f:parsenoop},180:{n:"BrtEndPivotCacheDef",f:parsenoop},181:{n:"BrtBeginPCDFields",f:parsenoop},182:{n:"BrtEndPCDFields",f:parsenoop},183:{n:"BrtBeginPCDField",f:parsenoop},184:{n:"BrtEndPCDField",f:parsenoop},185:{n:"BrtBeginPCDSource",f:parsenoop},186:{n:"BrtEndPCDSource",f:parsenoop},187:{n:"BrtBeginPCDSRange",f:parsenoop},188:{n:"BrtEndPCDSRange",f:parsenoop},189:{n:"BrtBeginPCDFAtbl",f:parsenoop},190:{n:"BrtEndPCDFAtbl",f:parsenoop},191:{n:"BrtBeginPCDIRun",f:parsenoop},192:{n:"BrtEndPCDIRun",f:parsenoop},193:{n:"BrtBeginPivotCacheRecords",f:parsenoop},194:{n:"BrtEndPivotCacheRecords",f:parsenoop},195:{n:"BrtBeginPCDHierarchies",f:parsenoop},196:{n:"BrtEndPCDHierarchies",f:parsenoop},197:{n:"BrtBeginPCDHierarchy",f:parsenoop},198:{n:"BrtEndPCDHierarchy",f:parsenoop},199:{n:"BrtBeginPCDHFieldsUsage",f:parsenoop},200:{n:"BrtEndPCDHFieldsUsage",f:parsenoop},201:{n:"BrtBeginExtConnection",f:parsenoop},202:{n:"BrtEndExtConnection",f:parsenoop},203:{n:"BrtBeginECDbProps",f:parsenoop},204:{n:"BrtEndECDbProps",f:parsenoop},205:{n:"BrtBeginECOlapProps",f:parsenoop},206:{n:"BrtEndECOlapProps",f:parsenoop},207:{n:"BrtBeginPCDSConsol",f:parsenoop},208:{n:"BrtEndPCDSConsol",f:parsenoop},209:{n:"BrtBeginPCDSCPages",f:parsenoop},210:{n:"BrtEndPCDSCPages",f:parsenoop},211:{n:"BrtBeginPCDSCPage",f:parsenoop},212:{n:"BrtEndPCDSCPage",f:parsenoop},213:{n:"BrtBeginPCDSCPItem",f:parsenoop},214:{n:"BrtEndPCDSCPItem",f:parsenoop},215:{n:"BrtBeginPCDSCSets",f:parsenoop},216:{n:"BrtEndPCDSCSets",f:parsenoop},217:{n:"BrtBeginPCDSCSet",f:parsenoop},218:{n:"BrtEndPCDSCSet",f:parsenoop},219:{n:"BrtBeginPCDFGroup",f:parsenoop},220:{n:"BrtEndPCDFGroup",f:parsenoop},221:{n:"BrtBeginPCDFGItems",f:parsenoop},222:{n:"BrtEndPCDFGItems",f:parsenoop},223:{n:"BrtBeginPCDFGRange",f:parsenoop},224:{n:"BrtEndPCDFGRange",f:parsenoop},225:{n:"BrtBeginPCDFGDiscrete",f:parsenoop},226:{n:"BrtEndPCDFGDiscrete",f:parsenoop},227:{n:"BrtBeginPCDSDTupleCache",f:parsenoop},228:{n:"BrtEndPCDSDTupleCache",f:parsenoop},229:{n:"BrtBeginPCDSDTCEntries",f:parsenoop},230:{n:"BrtEndPCDSDTCEntries",f:parsenoop},231:{n:"BrtBeginPCDSDTCEMembers",f:parsenoop},232:{n:"BrtEndPCDSDTCEMembers",f:parsenoop},233:{n:"BrtBeginPCDSDTCEMember",f:parsenoop},234:{n:"BrtEndPCDSDTCEMember",f:parsenoop},235:{n:"BrtBeginPCDSDTCQueries",f:parsenoop},236:{n:"BrtEndPCDSDTCQueries",f:parsenoop},237:{n:"BrtBeginPCDSDTCQuery",f:parsenoop},238:{n:"BrtEndPCDSDTCQuery",f:parsenoop},239:{n:"BrtBeginPCDSDTCSets",f:parsenoop},240:{n:"BrtEndPCDSDTCSets",f:parsenoop},241:{n:"BrtBeginPCDSDTCSet",f:parsenoop},242:{n:"BrtEndPCDSDTCSet",f:parsenoop},243:{n:"BrtBeginPCDCalcItems",f:parsenoop},244:{n:"BrtEndPCDCalcItems",f:parsenoop},245:{n:"BrtBeginPCDCalcItem",f:parsenoop},246:{n:"BrtEndPCDCalcItem",f:parsenoop},247:{n:"BrtBeginPRule",f:parsenoop},248:{n:"BrtEndPRule",f:parsenoop},249:{n:"BrtBeginPRFilters",f:parsenoop},250:{n:"BrtEndPRFilters",f:parsenoop},251:{n:"BrtBeginPRFilter",f:parsenoop},252:{n:"BrtEndPRFilter",f:parsenoop},253:{n:"BrtBeginPNames",f:parsenoop},254:{n:"BrtEndPNames",f:parsenoop},255:{n:"BrtBeginPName",f:parsenoop},256:{n:"BrtEndPName",f:parsenoop},257:{n:"BrtBeginPNPairs",f:parsenoop},258:{n:"BrtEndPNPairs",f:parsenoop},259:{n:"BrtBeginPNPair",f:parsenoop},260:{n:"BrtEndPNPair",f:parsenoop},261:{n:"BrtBeginECWebProps",f:parsenoop},262:{n:"BrtEndECWebProps",f:parsenoop},263:{n:"BrtBeginEcWpTables",f:parsenoop},264:{n:"BrtEndECWPTables",f:parsenoop},265:{n:"BrtBeginECParams",f:parsenoop},266:{n:"BrtEndECParams",f:parsenoop},267:{n:"BrtBeginECParam",f:parsenoop},268:{n:"BrtEndECParam",f:parsenoop},269:{n:"BrtBeginPCDKPIs",f:parsenoop},270:{n:"BrtEndPCDKPIs",f:parsenoop},271:{n:"BrtBeginPCDKPI",f:parsenoop},272:{n:"BrtEndPCDKPI",f:parsenoop},273:{n:"BrtBeginDims",f:parsenoop},274:{n:"BrtEndDims",f:parsenoop},275:{n:"BrtBeginDim",f:parsenoop},276:{n:"BrtEndDim",f:parsenoop},277:{n:"BrtIndexPartEnd",f:parsenoop},278:{n:"BrtBeginStyleSheet",f:parsenoop},279:{n:"BrtEndStyleSheet",f:parsenoop},280:{n:"BrtBeginSXView",f:parsenoop},281:{n:"BrtEndSXVI",f:parsenoop},282:{n:"BrtBeginSXVI",f:parsenoop},283:{n:"BrtBeginSXVIs",f:parsenoop},284:{n:"BrtEndSXVIs",f:parsenoop},285:{n:"BrtBeginSXVD",f:parsenoop},286:{n:"BrtEndSXVD",f:parsenoop},287:{n:"BrtBeginSXVDs",f:parsenoop},288:{n:"BrtEndSXVDs",f:parsenoop},289:{n:"BrtBeginSXPI",f:parsenoop},290:{n:"BrtEndSXPI",f:parsenoop},291:{n:"BrtBeginSXPIs",f:parsenoop},292:{n:"BrtEndSXPIs",f:parsenoop},293:{n:"BrtBeginSXDI",f:parsenoop},294:{n:"BrtEndSXDI",f:parsenoop},295:{n:"BrtBeginSXDIs",f:parsenoop},296:{n:"BrtEndSXDIs",f:parsenoop},297:{n:"BrtBeginSXLI",f:parsenoop},298:{n:"BrtEndSXLI",f:parsenoop},299:{n:"BrtBeginSXLIRws",f:parsenoop},300:{n:"BrtEndSXLIRws",f:parsenoop},301:{n:"BrtBeginSXLICols",f:parsenoop},302:{n:"BrtEndSXLICols",f:parsenoop},303:{n:"BrtBeginSXFormat",f:parsenoop},304:{n:"BrtEndSXFormat",f:parsenoop},305:{n:"BrtBeginSXFormats",f:parsenoop},306:{n:"BrtEndSxFormats",f:parsenoop},307:{n:"BrtBeginSxSelect",f:parsenoop},308:{n:"BrtEndSxSelect",f:parsenoop},309:{n:"BrtBeginISXVDRws",f:parsenoop},310:{n:"BrtEndISXVDRws",f:parsenoop},311:{n:"BrtBeginISXVDCols",f:parsenoop},312:{n:"BrtEndISXVDCols",f:parsenoop},313:{n:"BrtEndSXLocation",f:parsenoop},314:{n:"BrtBeginSXLocation",f:parsenoop},315:{n:"BrtEndSXView",f:parsenoop},316:{n:"BrtBeginSXTHs",f:parsenoop},317:{n:"BrtEndSXTHs",f:parsenoop},318:{n:"BrtBeginSXTH",f:parsenoop},319:{n:"BrtEndSXTH",f:parsenoop},320:{n:"BrtBeginISXTHRws",f:parsenoop},321:{n:"BrtEndISXTHRws",f:parsenoop},322:{n:"BrtBeginISXTHCols",f:parsenoop},323:{n:"BrtEndISXTHCols",f:parsenoop},324:{n:"BrtBeginSXTDMPS",f:parsenoop},325:{n:"BrtEndSXTDMPs",f:parsenoop},326:{n:"BrtBeginSXTDMP",f:parsenoop},327:{n:"BrtEndSXTDMP",f:parsenoop},328:{n:"BrtBeginSXTHItems",f:parsenoop},329:{n:"BrtEndSXTHItems",f:parsenoop},330:{n:"BrtBeginSXTHItem",f:parsenoop},331:{n:"BrtEndSXTHItem",f:parsenoop},332:{n:"BrtBeginMetadata",f:parsenoop},333:{n:"BrtEndMetadata",f:parsenoop},334:{n:"BrtBeginEsmdtinfo",f:parsenoop},335:{n:"BrtMdtinfo",f:parsenoop},336:{n:"BrtEndEsmdtinfo",f:parsenoop},337:{n:"BrtBeginEsmdb",f:parsenoop},338:{n:"BrtEndEsmdb",f:parsenoop},339:{n:"BrtBeginEsfmd",f:parsenoop},340:{n:"BrtEndEsfmd",f:parsenoop},341:{n:"BrtBeginSingleCells",f:parsenoop},342:{n:"BrtEndSingleCells",f:parsenoop},343:{n:"BrtBeginList",f:parsenoop},344:{n:"BrtEndList",f:parsenoop},345:{n:"BrtBeginListCols",f:parsenoop},346:{n:"BrtEndListCols",f:parsenoop},347:{n:"BrtBeginListCol",f:parsenoop},348:{n:"BrtEndListCol",f:parsenoop},349:{n:"BrtBeginListXmlCPr",f:parsenoop},350:{n:"BrtEndListXmlCPr",f:parsenoop},351:{n:"BrtListCCFmla",f:parsenoop},352:{n:"BrtListTrFmla",f:parsenoop},353:{n:"BrtBeginExternals",f:parsenoop},354:{n:"BrtEndExternals",f:parsenoop},355:{n:"BrtSupBookSrc",f:parsenoop},357:{n:"BrtSupSelf",f:parsenoop},358:{n:"BrtSupSame",f:parsenoop},359:{n:"BrtSupTabs",f:parsenoop},360:{n:"BrtBeginSupBook",f:parsenoop},361:{n:"BrtPlaceholderName",f:parsenoop},362:{n:"BrtExternSheet",f:parsenoop},363:{n:"BrtExternTableStart",f:parsenoop},364:{n:"BrtExternTableEnd",f:parsenoop},366:{n:"BrtExternRowHdr",f:parsenoop},367:{n:"BrtExternCellBlank",f:parsenoop},368:{n:"BrtExternCellReal",f:parsenoop},369:{n:"BrtExternCellBool",f:parsenoop},370:{n:"BrtExternCellError",f:parsenoop},371:{n:"BrtExternCellString",f:parsenoop},372:{n:"BrtBeginEsmdx",f:parsenoop},373:{n:"BrtEndEsmdx",f:parsenoop},374:{n:"BrtBeginMdxSet",f:parsenoop},375:{n:"BrtEndMdxSet",f:parsenoop},376:{n:"BrtBeginMdxMbrProp",f:parsenoop},377:{n:"BrtEndMdxMbrProp",f:parsenoop},378:{n:"BrtBeginMdxKPI",f:parsenoop},379:{n:"BrtEndMdxKPI",f:parsenoop},380:{n:"BrtBeginEsstr",f:parsenoop},381:{n:"BrtEndEsstr",f:parsenoop},382:{n:"BrtBeginPRFItem",f:parsenoop},383:{n:"BrtEndPRFItem",f:parsenoop},384:{n:"BrtBeginPivotCacheIDs",f:parsenoop},385:{n:"BrtEndPivotCacheIDs",f:parsenoop},386:{n:"BrtBeginPivotCacheID",f:parsenoop},387:{n:"BrtEndPivotCacheID",f:parsenoop},388:{n:"BrtBeginISXVIs",f:parsenoop},389:{n:"BrtEndISXVIs",f:parsenoop},390:{n:"BrtBeginColInfos",f:parsenoop},391:{n:"BrtEndColInfos",f:parsenoop},392:{n:"BrtBeginRwBrk",f:parsenoop},393:{n:"BrtEndRwBrk",f:parsenoop},394:{n:"BrtBeginColBrk",f:parsenoop},395:{n:"BrtEndColBrk",f:parsenoop},396:{n:"BrtBrk",f:parsenoop},397:{n:"BrtUserBookView",f:parsenoop},398:{n:"BrtInfo",f:parsenoop},399:{n:"BrtCUsr",f:parsenoop},400:{n:"BrtUsr",f:parsenoop},401:{n:"BrtBeginUsers",f:parsenoop},403:{n:"BrtEOF",f:parsenoop},404:{n:"BrtUCR",f:parsenoop},405:{n:"BrtRRInsDel",f:parsenoop},406:{n:"BrtRREndInsDel",f:parsenoop},407:{n:"BrtRRMove",f:parsenoop},408:{n:"BrtRREndMove",f:parsenoop},409:{n:"BrtRRChgCell",f:parsenoop},410:{n:"BrtRREndChgCell",f:parsenoop},411:{n:"BrtRRHeader",f:parsenoop},412:{n:"BrtRRUserView",f:parsenoop},413:{n:"BrtRRRenSheet",f:parsenoop},414:{n:"BrtRRInsertSh",f:parsenoop},415:{n:"BrtRRDefName",f:parsenoop},416:{n:"BrtRRNote",f:parsenoop},417:{n:"BrtRRConflict",f:parsenoop},418:{n:"BrtRRTQSIF",f:parsenoop},419:{n:"BrtRRFormat",f:parsenoop},420:{n:"BrtRREndFormat",f:parsenoop},421:{n:"BrtRRAutoFmt",f:parsenoop},422:{n:"BrtBeginUserShViews",f:parsenoop},423:{n:"BrtBeginUserShView",f:parsenoop},424:{n:"BrtEndUserShView",f:parsenoop},425:{n:"BrtEndUserShViews",f:parsenoop},426:{n:"BrtArrFmla",f:parsenoop},427:{n:"BrtShrFmla",f:parsenoop},428:{n:"BrtTable",f:parsenoop},429:{n:"BrtBeginExtConnections",f:parsenoop},430:{n:"BrtEndExtConnections",f:parsenoop},431:{n:"BrtBeginPCDCalcMems",f:parsenoop},432:{n:"BrtEndPCDCalcMems",f:parsenoop},433:{n:"BrtBeginPCDCalcMem",f:parsenoop},434:{n:"BrtEndPCDCalcMem",f:parsenoop},435:{n:"BrtBeginPCDHGLevels",f:parsenoop},436:{n:"BrtEndPCDHGLevels",f:parsenoop},437:{n:"BrtBeginPCDHGLevel",f:parsenoop},438:{n:"BrtEndPCDHGLevel",f:parsenoop},439:{n:"BrtBeginPCDHGLGroups",f:parsenoop},440:{n:"BrtEndPCDHGLGroups",f:parsenoop},441:{n:"BrtBeginPCDHGLGroup",f:parsenoop},442:{n:"BrtEndPCDHGLGroup",f:parsenoop},443:{n:"BrtBeginPCDHGLGMembers",f:parsenoop},444:{n:"BrtEndPCDHGLGMembers",f:parsenoop},445:{n:"BrtBeginPCDHGLGMember",f:parsenoop},446:{n:"BrtEndPCDHGLGMember",f:parsenoop},447:{n:"BrtBeginQSI",f:parsenoop},448:{n:"BrtEndQSI",f:parsenoop},449:{n:"BrtBeginQSIR",f:parsenoop},450:{n:"BrtEndQSIR",f:parsenoop},451:{n:"BrtBeginDeletedNames",f:parsenoop},452:{n:"BrtEndDeletedNames",f:parsenoop},453:{n:"BrtBeginDeletedName",f:parsenoop},454:{n:"BrtEndDeletedName",f:parsenoop},455:{n:"BrtBeginQSIFs",f:parsenoop},456:{n:"BrtEndQSIFs",f:parsenoop},457:{n:"BrtBeginQSIF",f:parsenoop},458:{n:"BrtEndQSIF",f:parsenoop},459:{n:"BrtBeginAutoSortScope",f:parsenoop},460:{n:"BrtEndAutoSortScope",f:parsenoop},461:{n:"BrtBeginConditionalFormatting",f:parsenoop},462:{n:"BrtEndConditionalFormatting",f:parsenoop},463:{n:"BrtBeginCFRule",f:parsenoop},464:{n:"BrtEndCFRule",f:parsenoop},465:{n:"BrtBeginIconSet",f:parsenoop},466:{n:"BrtEndIconSet",f:parsenoop},467:{n:"BrtBeginDatabar",f:parsenoop},468:{n:"BrtEndDatabar",f:parsenoop},469:{n:"BrtBeginColorScale",f:parsenoop},470:{n:"BrtEndColorScale",f:parsenoop},471:{n:"BrtCFVO",f:parsenoop},472:{n:"BrtExternValueMeta",f:parsenoop},473:{n:"BrtBeginColorPalette",f:parsenoop},474:{n:"BrtEndColorPalette",f:parsenoop},475:{n:"BrtIndexedColor",f:parsenoop},476:{n:"BrtMargins",f:parsenoop},477:{n:"BrtPrintOptions",f:parsenoop},478:{n:"BrtPageSetup",f:parsenoop},479:{n:"BrtBeginHeaderFooter",f:parsenoop},480:{n:"BrtEndHeaderFooter",f:parsenoop},481:{n:"BrtBeginSXCrtFormat",f:parsenoop},482:{n:"BrtEndSXCrtFormat",f:parsenoop},483:{n:"BrtBeginSXCrtFormats",f:parsenoop},484:{n:"BrtEndSXCrtFormats",f:parsenoop},485:{n:"BrtWsFmtInfo",f:parsenoop},486:{n:"BrtBeginMgs",f:parsenoop},487:{n:"BrtEndMGs",f:parsenoop},488:{n:"BrtBeginMGMaps",f:parsenoop},489:{n:"BrtEndMGMaps",f:parsenoop},490:{n:"BrtBeginMG",f:parsenoop},491:{n:"BrtEndMG",f:parsenoop},492:{n:"BrtBeginMap",f:parsenoop},493:{n:"BrtEndMap",f:parsenoop},494:{n:"BrtHLink",f:parse_BrtHLink},495:{n:"BrtBeginDCon",f:parsenoop},496:{n:"BrtEndDCon",f:parsenoop},497:{n:"BrtBeginDRefs",f:parsenoop},498:{n:"BrtEndDRefs",f:parsenoop},499:{n:"BrtDRef",f:parsenoop},500:{n:"BrtBeginScenMan",f:parsenoop},501:{n:"BrtEndScenMan",f:parsenoop},502:{n:"BrtBeginSct",f:parsenoop},503:{n:"BrtEndSct",f:parsenoop},504:{n:"BrtSlc",f:parsenoop},505:{n:"BrtBeginDXFs",f:parsenoop},506:{n:"BrtEndDXFs",f:parsenoop},507:{n:"BrtDXF",f:parsenoop},508:{n:"BrtBeginTableStyles",f:parsenoop},509:{n:"BrtEndTableStyles",f:parsenoop},510:{n:"BrtBeginTableStyle",f:parsenoop},511:{n:"BrtEndTableStyle",f:parsenoop},512:{n:"BrtTableStyleElement",f:parsenoop},513:{n:"BrtTableStyleClient",f:parsenoop},514:{n:"BrtBeginVolDeps",f:parsenoop},515:{n:"BrtEndVolDeps",f:parsenoop},516:{n:"BrtBeginVolType",f:parsenoop},517:{n:"BrtEndVolType",f:parsenoop},518:{n:"BrtBeginVolMain",f:parsenoop},519:{n:"BrtEndVolMain",f:parsenoop},520:{n:"BrtBeginVolTopic",f:parsenoop},521:{n:"BrtEndVolTopic",f:parsenoop},522:{n:"BrtVolSubtopic",f:parsenoop},523:{n:"BrtVolRef",f:parsenoop},524:{n:"BrtVolNum",f:parsenoop},525:{n:"BrtVolErr",f:parsenoop},526:{n:"BrtVolStr",f:parsenoop},527:{n:"BrtVolBool",f:parsenoop},528:{n:"BrtBeginCalcChain$",f:parsenoop},529:{n:"BrtEndCalcChain$",f:parsenoop},530:{n:"BrtBeginSortState",f:parsenoop},531:{n:"BrtEndSortState",f:parsenoop},532:{n:"BrtBeginSortCond",f:parsenoop},533:{n:"BrtEndSortCond",f:parsenoop},534:{n:"BrtBookProtection",f:parsenoop},535:{n:"BrtSheetProtection",f:parsenoop},536:{n:"BrtRangeProtection",f:parsenoop},537:{n:"BrtPhoneticInfo",f:parsenoop},538:{n:"BrtBeginECTxtWiz",f:parsenoop},539:{n:"BrtEndECTxtWiz",f:parsenoop},540:{n:"BrtBeginECTWFldInfoLst",f:parsenoop},541:{n:"BrtEndECTWFldInfoLst",f:parsenoop},542:{n:"BrtBeginECTwFldInfo",f:parsenoop},548:{n:"BrtFileSharing",f:parsenoop},549:{n:"BrtOleSize",f:parsenoop},550:{n:"BrtDrawing",f:parsenoop},551:{n:"BrtLegacyDrawing",f:parsenoop},552:{n:"BrtLegacyDrawingHF",f:parsenoop},553:{n:"BrtWebOpt",f:parsenoop},554:{n:"BrtBeginWebPubItems",f:parsenoop},555:{n:"BrtEndWebPubItems",f:parsenoop},556:{n:"BrtBeginWebPubItem",f:parsenoop},557:{n:"BrtEndWebPubItem",f:parsenoop},558:{n:"BrtBeginSXCondFmt",f:parsenoop},559:{n:"BrtEndSXCondFmt",f:parsenoop},560:{n:"BrtBeginSXCondFmts",f:parsenoop},561:{n:"BrtEndSXCondFmts",f:parsenoop},562:{n:"BrtBkHim",f:parsenoop},564:{n:"BrtColor",f:parsenoop},565:{n:"BrtBeginIndexedColors",f:parsenoop},566:{n:"BrtEndIndexedColors",f:parsenoop},569:{n:"BrtBeginMRUColors",f:parsenoop},570:{n:"BrtEndMRUColors",f:parsenoop},572:{n:"BrtMRUColor",f:parsenoop},573:{n:"BrtBeginDVals",f:parsenoop},574:{n:"BrtEndDVals",f:parsenoop},577:{n:"BrtSupNameStart",f:parsenoop},578:{n:"BrtSupNameValueStart",f:parsenoop},579:{n:"BrtSupNameValueEnd",f:parsenoop},580:{n:"BrtSupNameNum",f:parsenoop},581:{n:"BrtSupNameErr",f:parsenoop},582:{n:"BrtSupNameSt",f:parsenoop},583:{n:"BrtSupNameNil",f:parsenoop},584:{n:"BrtSupNameBool",f:parsenoop},585:{n:"BrtSupNameFmla",f:parsenoop},586:{n:"BrtSupNameBits",f:parsenoop},587:{n:"BrtSupNameEnd",f:parsenoop},588:{n:"BrtEndSupBook",f:parsenoop},589:{n:"BrtCellSmartTagProperty",f:parsenoop},590:{n:"BrtBeginCellSmartTag",f:parsenoop},591:{n:"BrtEndCellSmartTag",f:parsenoop},592:{n:"BrtBeginCellSmartTags",f:parsenoop},593:{n:"BrtEndCellSmartTags",f:parsenoop},594:{n:"BrtBeginSmartTags",f:parsenoop},595:{n:"BrtEndSmartTags",f:parsenoop},596:{n:"BrtSmartTagType",f:parsenoop},597:{n:"BrtBeginSmartTagTypes",f:parsenoop},598:{n:"BrtEndSmartTagTypes",f:parsenoop},599:{n:"BrtBeginSXFilters",f:parsenoop},600:{n:"BrtEndSXFilters",f:parsenoop},601:{n:"BrtBeginSXFILTER",f:parsenoop},602:{n:"BrtEndSXFilter",f:parsenoop},603:{n:"BrtBeginFills",f:parsenoop},604:{n:"BrtEndFills",f:parsenoop},605:{n:"BrtBeginCellWatches",f:parsenoop},606:{n:"BrtEndCellWatches",f:parsenoop},607:{n:"BrtCellWatch",f:parsenoop},608:{n:"BrtBeginCRErrs",f:parsenoop},609:{n:"BrtEndCRErrs",f:parsenoop},610:{n:"BrtCrashRecErr",f:parsenoop},611:{n:"BrtBeginFonts",f:parsenoop},612:{n:"BrtEndFonts",f:parsenoop},613:{n:"BrtBeginBorders",f:parsenoop},614:{n:"BrtEndBorders",f:parsenoop},615:{n:"BrtBeginFmts",f:parsenoop},616:{n:"BrtEndFmts",f:parsenoop},617:{n:"BrtBeginCellXFs",f:parsenoop},618:{n:"BrtEndCellXFs",f:parsenoop},619:{n:"BrtBeginStyles",f:parsenoop},620:{n:"BrtEndStyles",f:parsenoop},625:{n:"BrtBigName",f:parsenoop},626:{n:"BrtBeginCellStyleXFs",f:parsenoop},627:{n:"BrtEndCellStyleXFs",f:parsenoop},628:{n:"BrtBeginComments",f:parsenoop},629:{n:"BrtEndComments",f:parsenoop},630:{n:"BrtBeginCommentAuthors",f:parsenoop},631:{n:"BrtEndCommentAuthors",f:parsenoop},632:{n:"BrtCommentAuthor",f:parse_BrtCommentAuthor},633:{n:"BrtBeginCommentList",f:parsenoop},634:{n:"BrtEndCommentList",f:parsenoop},635:{n:"BrtBeginComment",f:parse_BrtBeginComment},636:{n:"BrtEndComment",f:parsenoop},637:{n:"BrtCommentText",f:parse_BrtCommentText},638:{n:"BrtBeginOleObjects",f:parsenoop},639:{n:"BrtOleObject",f:parsenoop},640:{n:"BrtEndOleObjects",f:parsenoop},641:{n:"BrtBeginSxrules",f:parsenoop},642:{n:"BrtEndSxRules",f:parsenoop},643:{n:"BrtBeginActiveXControls",f:parsenoop},644:{n:"BrtActiveX",f:parsenoop},645:{n:"BrtEndActiveXControls",f:parsenoop},646:{n:"BrtBeginPCDSDTCEMembersSortBy",f:parsenoop},648:{n:"BrtBeginCellIgnoreECs",f:parsenoop},649:{n:"BrtCellIgnoreEC",f:parsenoop},650:{n:"BrtEndCellIgnoreECs",f:parsenoop},651:{n:"BrtCsProp",f:parsenoop},652:{n:"BrtCsPageSetup",f:parsenoop},653:{n:"BrtBeginUserCsViews",f:parsenoop},654:{n:"BrtEndUserCsViews",f:parsenoop},655:{n:"BrtBeginUserCsView",f:parsenoop},656:{n:"BrtEndUserCsView",f:parsenoop},657:{n:"BrtBeginPcdSFCIEntries",f:parsenoop},658:{n:"BrtEndPCDSFCIEntries",f:parsenoop},659:{n:"BrtPCDSFCIEntry",f:parsenoop},660:{n:"BrtBeginListParts",f:parsenoop},661:{n:"BrtListPart",f:parsenoop},662:{n:"BrtEndListParts",f:parsenoop},663:{n:"BrtSheetCalcProp",f:parsenoop},664:{n:"BrtBeginFnGroup",f:parsenoop},665:{n:"BrtFnGroup",f:parsenoop},666:{n:"BrtEndFnGroup",f:parsenoop},667:{n:"BrtSupAddin",f:parsenoop},668:{n:"BrtSXTDMPOrder",f:parsenoop},669:{n:"BrtCsProtection",f:parsenoop},671:{n:"BrtBeginWsSortMap",f:parsenoop},672:{n:"BrtEndWsSortMap",f:parsenoop},673:{n:"BrtBeginRRSort",f:parsenoop},674:{n:"BrtEndRRSort",f:parsenoop},675:{n:"BrtRRSortItem",f:parsenoop},676:{n:"BrtFileSharingIso",f:parsenoop},677:{n:"BrtBookProtectionIso",f:parsenoop},678:{n:"BrtSheetProtectionIso",f:parsenoop},679:{n:"BrtCsProtectionIso",f:parsenoop},680:{n:"BrtRangeProtectionIso",f:parsenoop},1024:{n:"BrtRwDescent",f:parsenoop},1025:{n:"BrtKnownFonts",f:parsenoop},1026:{n:"BrtBeginSXTupleSet",f:parsenoop},1027:{n:"BrtEndSXTupleSet",f:parsenoop},1028:{n:"BrtBeginSXTupleSetHeader",f:parsenoop},1029:{n:"BrtEndSXTupleSetHeader",f:parsenoop},1030:{n:"BrtSXTupleSetHeaderItem",f:parsenoop},1031:{n:"BrtBeginSXTupleSetData",f:parsenoop},1032:{n:"BrtEndSXTupleSetData",f:parsenoop},1033:{n:"BrtBeginSXTupleSetRow",f:parsenoop},1034:{n:"BrtEndSXTupleSetRow",f:parsenoop},1035:{n:"BrtSXTupleSetRowItem",f:parsenoop},1036:{n:"BrtNameExt",f:parsenoop},1037:{n:"BrtPCDH14",f:parsenoop},1038:{n:"BrtBeginPCDCalcMem14",f:parsenoop},1039:{n:"BrtEndPCDCalcMem14",f:parsenoop},1040:{n:"BrtSXTH14",f:parsenoop},1041:{n:"BrtBeginSparklineGroup",f:parsenoop},1042:{n:"BrtEndSparklineGroup",f:parsenoop},1043:{n:"BrtSparkline",f:parsenoop},1044:{n:"BrtSXDI14",f:parsenoop},1045:{n:"BrtWsFmtInfoEx14",f:parsenoop},1046:{n:"BrtBeginConditionalFormatting14",f:parsenoop},1047:{n:"BrtEndConditionalFormatting14",f:parsenoop},1048:{n:"BrtBeginCFRule14",f:parsenoop},1049:{n:"BrtEndCFRule14",f:parsenoop},1050:{n:"BrtCFVO14",f:parsenoop},1051:{n:"BrtBeginDatabar14",f:parsenoop},1052:{n:"BrtBeginIconSet14",f:parsenoop},1053:{n:"BrtDVal14",f:parsenoop},1054:{n:"BrtBeginDVals14",f:parsenoop},1055:{n:"BrtColor14",f:parsenoop},1056:{n:"BrtBeginSparklines",f:parsenoop},1057:{n:"BrtEndSparklines",f:parsenoop},1058:{n:"BrtBeginSparklineGroups",f:parsenoop},1059:{n:"BrtEndSparklineGroups",f:parsenoop},1061:{n:"BrtSXVD14",f:parsenoop},1062:{n:"BrtBeginSxview14",f:parsenoop},1063:{n:"BrtEndSxview14",f:parsenoop},1066:{n:"BrtBeginPCD14",f:parsenoop},1067:{n:"BrtEndPCD14",f:parsenoop},1068:{n:"BrtBeginExtConn14",f:parsenoop},1069:{n:"BrtEndExtConn14",f:parsenoop},1070:{n:"BrtBeginSlicerCacheIDs",f:parsenoop},1071:{n:"BrtEndSlicerCacheIDs",f:parsenoop},1072:{n:"BrtBeginSlicerCacheID",f:parsenoop},1073:{n:"BrtEndSlicerCacheID",f:parsenoop},1075:{n:"BrtBeginSlicerCache",f:parsenoop},1076:{n:"BrtEndSlicerCache",f:parsenoop},1077:{n:"BrtBeginSlicerCacheDef",f:parsenoop},1078:{n:"BrtEndSlicerCacheDef",f:parsenoop},1079:{n:"BrtBeginSlicersEx",f:parsenoop},1080:{n:"BrtEndSlicersEx",f:parsenoop},1081:{n:"BrtBeginSlicerEx",f:parsenoop},1082:{n:"BrtEndSlicerEx",f:parsenoop},1083:{n:"BrtBeginSlicer",f:parsenoop},1084:{n:"BrtEndSlicer",f:parsenoop},1085:{n:"BrtSlicerCachePivotTables",f:parsenoop},1086:{n:"BrtBeginSlicerCacheOlapImpl",f:parsenoop},1087:{n:"BrtEndSlicerCacheOlapImpl",f:parsenoop},1088:{n:"BrtBeginSlicerCacheLevelsData",f:parsenoop},1089:{n:"BrtEndSlicerCacheLevelsData",f:parsenoop},1090:{n:"BrtBeginSlicerCacheLevelData",f:parsenoop},1091:{n:"BrtEndSlicerCacheLevelData",f:parsenoop},1092:{n:"BrtBeginSlicerCacheSiRanges",f:parsenoop},1093:{n:"BrtEndSlicerCacheSiRanges",f:parsenoop},1094:{n:"BrtBeginSlicerCacheSiRange",f:parsenoop},1095:{n:"BrtEndSlicerCacheSiRange",f:parsenoop},1096:{n:"BrtSlicerCacheOlapItem",f:parsenoop},1097:{n:"BrtBeginSlicerCacheSelections",f:parsenoop},1098:{n:"BrtSlicerCacheSelection",f:parsenoop},1099:{n:"BrtEndSlicerCacheSelections",f:parsenoop},1100:{n:"BrtBeginSlicerCacheNative",f:parsenoop},1101:{n:"BrtEndSlicerCacheNative",f:parsenoop},1102:{n:"BrtSlicerCacheNativeItem",f:parsenoop},1103:{n:"BrtRangeProtection14",f:parsenoop},1104:{n:"BrtRangeProtectionIso14",f:parsenoop},1105:{n:"BrtCellIgnoreEC14",f:parsenoop},1111:{n:"BrtList14",f:parsenoop},1112:{n:"BrtCFIcon",f:parsenoop},1113:{n:"BrtBeginSlicerCachesPivotCacheIDs",f:parsenoop},1114:{n:"BrtEndSlicerCachesPivotCacheIDs",f:parsenoop},1115:{n:"BrtBeginSlicers",f:parsenoop},1116:{n:"BrtEndSlicers",f:parsenoop},1117:{n:"BrtWbProp14",f:parsenoop},1118:{n:"BrtBeginSXEdit",f:parsenoop},1119:{n:"BrtEndSXEdit",f:parsenoop},1120:{n:"BrtBeginSXEdits",f:parsenoop},1121:{n:"BrtEndSXEdits",f:parsenoop},1122:{n:"BrtBeginSXChange",f:parsenoop},1123:{n:"BrtEndSXChange",f:parsenoop},1124:{n:"BrtBeginSXChanges",f:parsenoop},1125:{n:"BrtEndSXChanges",f:parsenoop},1126:{n:"BrtSXTupleItems",f:parsenoop},1128:{n:"BrtBeginSlicerStyle",f:parsenoop},1129:{n:"BrtEndSlicerStyle",f:parsenoop},1130:{n:"BrtSlicerStyleElement",f:parsenoop},1131:{n:"BrtBeginStyleSheetExt14",f:parsenoop},1132:{n:"BrtEndStyleSheetExt14",f:parsenoop},1133:{n:"BrtBeginSlicerCachesPivotCacheID",f:parsenoop},1134:{n:"BrtEndSlicerCachesPivotCacheID",f:parsenoop},1135:{n:"BrtBeginConditionalFormattings",f:parsenoop},1136:{n:"BrtEndConditionalFormattings",f:parsenoop},1137:{n:"BrtBeginPCDCalcMemExt",f:parsenoop},1138:{n:"BrtEndPCDCalcMemExt",f:parsenoop},1139:{n:"BrtBeginPCDCalcMemsExt",f:parsenoop},1140:{n:"BrtEndPCDCalcMemsExt",f:parsenoop},1141:{n:"BrtPCDField14",f:parsenoop},1142:{n:"BrtBeginSlicerStyles",f:parsenoop},1143:{n:"BrtEndSlicerStyles",f:parsenoop},1144:{n:"BrtBeginSlicerStyleElements",f:parsenoop},1145:{n:"BrtEndSlicerStyleElements",f:parsenoop},1146:{n:"BrtCFRuleExt",f:parsenoop},1147:{n:"BrtBeginSXCondFmt14",f:parsenoop},1148:{n:"BrtEndSXCondFmt14",f:parsenoop},1149:{n:"BrtBeginSXCondFmts14",f:parsenoop},1150:{n:"BrtEndSXCondFmts14",f:parsenoop},1152:{n:"BrtBeginSortCond14",f:parsenoop},1153:{n:"BrtEndSortCond14",f:parsenoop},1154:{n:"BrtEndDVals14",f:parsenoop},1155:{n:"BrtEndIconSet14",f:parsenoop},1156:{n:"BrtEndDatabar14",f:parsenoop},1157:{n:"BrtBeginColorScale14",
+f:parsenoop},1158:{n:"BrtEndColorScale14",f:parsenoop},1159:{n:"BrtBeginSxrules14",f:parsenoop},1160:{n:"BrtEndSxrules14",f:parsenoop},1161:{n:"BrtBeginPRule14",f:parsenoop},1162:{n:"BrtEndPRule14",f:parsenoop},1163:{n:"BrtBeginPRFilters14",f:parsenoop},1164:{n:"BrtEndPRFilters14",f:parsenoop},1165:{n:"BrtBeginPRFilter14",f:parsenoop},1166:{n:"BrtEndPRFilter14",f:parsenoop},1167:{n:"BrtBeginPRFItem14",f:parsenoop},1168:{n:"BrtEndPRFItem14",f:parsenoop},1169:{n:"BrtBeginCellIgnoreECs14",f:parsenoop},1170:{n:"BrtEndCellIgnoreECs14",f:parsenoop},1171:{n:"BrtDxf14",f:parsenoop},1172:{n:"BrtBeginDxF14s",f:parsenoop},1173:{n:"BrtEndDxf14s",f:parsenoop},1177:{n:"BrtFilter14",f:parsenoop},1178:{n:"BrtBeginCustomFilters14",f:parsenoop},1180:{n:"BrtCustomFilter14",f:parsenoop},1181:{n:"BrtIconFilter14",f:parsenoop},1182:{n:"BrtPivotCacheConnectionName",f:parsenoop},2048:{n:"BrtBeginDecoupledPivotCacheIDs",f:parsenoop},2049:{n:"BrtEndDecoupledPivotCacheIDs",f:parsenoop},2050:{n:"BrtDecoupledPivotCacheID",f:parsenoop},2051:{n:"BrtBeginPivotTableRefs",f:parsenoop},2052:{n:"BrtEndPivotTableRefs",f:parsenoop},2053:{n:"BrtPivotTableRef",f:parsenoop},2054:{n:"BrtSlicerCacheBookPivotTables",f:parsenoop},2055:{n:"BrtBeginSxvcells",f:parsenoop},2056:{n:"BrtEndSxvcells",f:parsenoop},2057:{n:"BrtBeginSxRow",f:parsenoop},2058:{n:"BrtEndSxRow",f:parsenoop},2060:{n:"BrtPcdCalcMem15",f:parsenoop},2067:{n:"BrtQsi15",f:parsenoop},2068:{n:"BrtBeginWebExtensions",f:parsenoop},2069:{n:"BrtEndWebExtensions",f:parsenoop},2070:{n:"BrtWebExtension",f:parsenoop},2071:{n:"BrtAbsPath15",f:parsenoop},2072:{n:"BrtBeginPivotTableUISettings",f:parsenoop},2073:{n:"BrtEndPivotTableUISettings",f:parsenoop},2075:{n:"BrtTableSlicerCacheIDs",f:parsenoop},2076:{n:"BrtTableSlicerCacheID",f:parsenoop},2077:{n:"BrtBeginTableSlicerCache",f:parsenoop},2078:{n:"BrtEndTableSlicerCache",f:parsenoop},2079:{n:"BrtSxFilter15",f:parsenoop},2080:{n:"BrtBeginTimelineCachePivotCacheIDs",f:parsenoop},2081:{n:"BrtEndTimelineCachePivotCacheIDs",f:parsenoop},2082:{n:"BrtTimelineCachePivotCacheID",f:parsenoop},2083:{n:"BrtBeginTimelineCacheIDs",f:parsenoop},2084:{n:"BrtEndTimelineCacheIDs",f:parsenoop},2085:{n:"BrtBeginTimelineCacheID",f:parsenoop},2086:{n:"BrtEndTimelineCacheID",f:parsenoop},2087:{n:"BrtBeginTimelinesEx",f:parsenoop},2088:{n:"BrtEndTimelinesEx",f:parsenoop},2089:{n:"BrtBeginTimelineEx",f:parsenoop},2090:{n:"BrtEndTimelineEx",f:parsenoop},2091:{n:"BrtWorkBookPr15",f:parsenoop},2092:{n:"BrtPCDH15",f:parsenoop},2093:{n:"BrtBeginTimelineStyle",f:parsenoop},2094:{n:"BrtEndTimelineStyle",f:parsenoop},2095:{n:"BrtTimelineStyleElement",f:parsenoop},2096:{n:"BrtBeginTimelineStylesheetExt15",f:parsenoop},2097:{n:"BrtEndTimelineStylesheetExt15",f:parsenoop},2098:{n:"BrtBeginTimelineStyles",f:parsenoop},2099:{n:"BrtEndTimelineStyles",f:parsenoop},2100:{n:"BrtBeginTimelineStyleElements",f:parsenoop},2101:{n:"BrtEndTimelineStyleElements",f:parsenoop},2102:{n:"BrtDxf15",f:parsenoop},2103:{n:"BrtBeginDxfs15",f:parsenoop},2104:{n:"brtEndDxfs15",f:parsenoop},2105:{n:"BrtSlicerCacheHideItemsWithNoData",f:parsenoop},2106:{n:"BrtBeginItemUniqueNames",f:parsenoop},2107:{n:"BrtEndItemUniqueNames",f:parsenoop},2108:{n:"BrtItemUniqueName",f:parsenoop},2109:{n:"BrtBeginExtConn15",f:parsenoop},2110:{n:"BrtEndExtConn15",f:parsenoop},2111:{n:"BrtBeginOledbPr15",f:parsenoop},2112:{n:"BrtEndOledbPr15",f:parsenoop},2113:{n:"BrtBeginDataFeedPr15",f:parsenoop},2114:{n:"BrtEndDataFeedPr15",f:parsenoop},2115:{n:"BrtTextPr15",f:parsenoop},2116:{n:"BrtRangePr15",f:parsenoop},2117:{n:"BrtDbCommand15",f:parsenoop},2118:{n:"BrtBeginDbTables15",f:parsenoop},2119:{n:"BrtEndDbTables15",f:parsenoop},2120:{n:"BrtDbTable15",f:parsenoop},2121:{n:"BrtBeginDataModel",f:parsenoop},2122:{n:"BrtEndDataModel",f:parsenoop},2123:{n:"BrtBeginModelTables",f:parsenoop},2124:{n:"BrtEndModelTables",f:parsenoop},2125:{n:"BrtModelTable",f:parsenoop},2126:{n:"BrtBeginModelRelationships",f:parsenoop},2127:{n:"BrtEndModelRelationships",f:parsenoop},2128:{n:"BrtModelRelationship",f:parsenoop},2129:{n:"BrtBeginECTxtWiz15",f:parsenoop},2130:{n:"BrtEndECTxtWiz15",f:parsenoop},2131:{n:"BrtBeginECTWFldInfoLst15",f:parsenoop},2132:{n:"BrtEndECTWFldInfoLst15",f:parsenoop},2133:{n:"BrtBeginECTWFldInfo15",f:parsenoop},2134:{n:"BrtFieldListActiveItem",f:parsenoop},2135:{n:"BrtPivotCacheIdVersion",f:parsenoop},2136:{n:"BrtSXDI15",f:parsenoop},65535:{n:"",f:parsenoop}};var evert_RE=evert_key(XLSBRecordEnum,"n");var XLSRecordEnum={3:{n:"BIFF2NUM",f:parse_BIFF2NUM},4:{n:"BIFF2STR",f:parse_BIFF2STR},6:{n:"Formula",f:parse_Formula},9:{n:"BOF",f:parse_BOF},10:{n:"EOF",f:parse_EOF},12:{n:"CalcCount",f:parse_CalcCount},13:{n:"CalcMode",f:parse_CalcMode},14:{n:"CalcPrecision",f:parse_CalcPrecision},15:{n:"CalcRefMode",f:parse_CalcRefMode},16:{n:"CalcDelta",f:parse_CalcDelta},17:{n:"CalcIter",f:parse_CalcIter},18:{n:"Protect",f:parse_Protect},19:{n:"Password",f:parse_Password},20:{n:"Header",f:parse_Header},21:{n:"Footer",f:parse_Footer},23:{n:"ExternSheet",f:parse_ExternSheet},24:{n:"Lbl",f:parse_Lbl},25:{n:"WinProtect",f:parse_WinProtect},26:{n:"VerticalPageBreaks",f:parse_VerticalPageBreaks},27:{n:"HorizontalPageBreaks",f:parse_HorizontalPageBreaks},28:{n:"Note",f:parse_Note},29:{n:"Selection",f:parse_Selection},34:{n:"Date1904",f:parse_Date1904},35:{n:"ExternName",f:parse_ExternName},38:{n:"LeftMargin",f:parse_LeftMargin},39:{n:"RightMargin",f:parse_RightMargin},40:{n:"TopMargin",f:parse_TopMargin},41:{n:"BottomMargin",f:parse_BottomMargin},42:{n:"PrintRowCol",f:parse_PrintRowCol},43:{n:"PrintGrid",f:parse_PrintGrid},47:{n:"FilePass",f:parse_FilePass},49:{n:"Font",f:parse_Font},51:{n:"PrintSize",f:parse_PrintSize},60:{n:"Continue",f:parse_Continue},61:{n:"Window1",f:parse_Window1},64:{n:"Backup",f:parse_Backup},65:{n:"Pane",f:parse_Pane},66:{n:"CodePage",f:parse_CodePage},77:{n:"Pls",f:parse_Pls},80:{n:"DCon",f:parse_DCon},81:{n:"DConRef",f:parse_DConRef},82:{n:"DConName",f:parse_DConName},85:{n:"DefColWidth",f:parse_DefColWidth},89:{n:"XCT",f:parse_XCT},90:{n:"CRN",f:parse_CRN},91:{n:"FileSharing",f:parse_FileSharing},92:{n:"WriteAccess",f:parse_WriteAccess},93:{n:"Obj",f:parse_Obj},94:{n:"Uncalced",f:parse_Uncalced},95:{n:"CalcSaveRecalc",f:parse_CalcSaveRecalc},96:{n:"Template",f:parse_Template},97:{n:"Intl",f:parse_Intl},99:{n:"ObjProtect",f:parse_ObjProtect},125:{n:"ColInfo",f:parse_ColInfo},128:{n:"Guts",f:parse_Guts},129:{n:"WsBool",f:parse_WsBool},130:{n:"GridSet",f:parse_GridSet},131:{n:"HCenter",f:parse_HCenter},132:{n:"VCenter",f:parse_VCenter},133:{n:"BoundSheet8",f:parse_BoundSheet8},134:{n:"WriteProtect",f:parse_WriteProtect},140:{n:"Country",f:parse_Country},141:{n:"HideObj",f:parse_HideObj},144:{n:"Sort",f:parse_Sort},146:{n:"Palette",f:parse_Palette},151:{n:"Sync",f:parse_Sync},152:{n:"LPr",f:parse_LPr},153:{n:"DxGCol",f:parse_DxGCol},154:{n:"FnGroupName",f:parse_FnGroupName},155:{n:"FilterMode",f:parse_FilterMode},156:{n:"BuiltInFnGroupCount",f:parse_BuiltInFnGroupCount},157:{n:"AutoFilterInfo",f:parse_AutoFilterInfo},158:{n:"AutoFilter",f:parse_AutoFilter},160:{n:"Scl",f:parse_Scl},161:{n:"Setup",f:parse_Setup},174:{n:"ScenMan",f:parse_ScenMan},175:{n:"SCENARIO",f:parse_SCENARIO},176:{n:"SxView",f:parse_SxView},177:{n:"Sxvd",f:parse_Sxvd},178:{n:"SXVI",f:parse_SXVI},180:{n:"SxIvd",f:parse_SxIvd},181:{n:"SXLI",f:parse_SXLI},182:{n:"SXPI",f:parse_SXPI},184:{n:"DocRoute",f:parse_DocRoute},185:{n:"RecipName",f:parse_RecipName},189:{n:"MulRk",f:parse_MulRk},190:{n:"MulBlank",f:parse_MulBlank},193:{n:"Mms",f:parse_Mms},197:{n:"SXDI",f:parse_SXDI},198:{n:"SXDB",f:parse_SXDB},199:{n:"SXFDB",f:parse_SXFDB},200:{n:"SXDBB",f:parse_SXDBB},201:{n:"SXNum",f:parse_SXNum},202:{n:"SxBool",f:parse_SxBool},203:{n:"SxErr",f:parse_SxErr},204:{n:"SXInt",f:parse_SXInt},205:{n:"SXString",f:parse_SXString},206:{n:"SXDtr",f:parse_SXDtr},207:{n:"SxNil",f:parse_SxNil},208:{n:"SXTbl",f:parse_SXTbl},209:{n:"SXTBRGIITM",f:parse_SXTBRGIITM},210:{n:"SxTbpg",f:parse_SxTbpg},211:{n:"ObProj",f:parse_ObProj},213:{n:"SXStreamID",f:parse_SXStreamID},215:{n:"DBCell",f:parse_DBCell},216:{n:"SXRng",f:parse_SXRng},217:{n:"SxIsxoper",f:parse_SxIsxoper},218:{n:"BookBool",f:parse_BookBool},220:{n:"DbOrParamQry",f:parse_DbOrParamQry},221:{n:"ScenarioProtect",f:parse_ScenarioProtect},222:{n:"OleObjectSize",f:parse_OleObjectSize},224:{n:"XF",f:parse_XF},225:{n:"InterfaceHdr",f:parse_InterfaceHdr},226:{n:"InterfaceEnd",f:parse_InterfaceEnd},227:{n:"SXVS",f:parse_SXVS},229:{n:"MergeCells",f:parse_MergeCells},233:{n:"BkHim",f:parse_BkHim},235:{n:"MsoDrawingGroup",f:parse_MsoDrawingGroup},236:{n:"MsoDrawing",f:parse_MsoDrawing},237:{n:"MsoDrawingSelection",f:parse_MsoDrawingSelection},239:{n:"PhoneticInfo",f:parse_PhoneticInfo},240:{n:"SxRule",f:parse_SxRule},241:{n:"SXEx",f:parse_SXEx},242:{n:"SxFilt",f:parse_SxFilt},244:{n:"SxDXF",f:parse_SxDXF},245:{n:"SxItm",f:parse_SxItm},246:{n:"SxName",f:parse_SxName},247:{n:"SxSelect",f:parse_SxSelect},248:{n:"SXPair",f:parse_SXPair},249:{n:"SxFmla",f:parse_SxFmla},251:{n:"SxFormat",f:parse_SxFormat},252:{n:"SST",f:parse_SST},253:{n:"LabelSst",f:parse_LabelSst},255:{n:"ExtSST",f:parse_ExtSST},256:{n:"SXVDEx",f:parse_SXVDEx},259:{n:"SXFormula",f:parse_SXFormula},290:{n:"SXDBEx",f:parse_SXDBEx},311:{n:"RRDInsDel",f:parse_RRDInsDel},312:{n:"RRDHead",f:parse_RRDHead},315:{n:"RRDChgCell",f:parse_RRDChgCell},317:{n:"RRTabId",f:parse_RRTabId},318:{n:"RRDRenSheet",f:parse_RRDRenSheet},319:{n:"RRSort",f:parse_RRSort},320:{n:"RRDMove",f:parse_RRDMove},330:{n:"RRFormat",f:parse_RRFormat},331:{n:"RRAutoFmt",f:parse_RRAutoFmt},333:{n:"RRInsertSh",f:parse_RRInsertSh},334:{n:"RRDMoveBegin",f:parse_RRDMoveBegin},335:{n:"RRDMoveEnd",f:parse_RRDMoveEnd},336:{n:"RRDInsDelBegin",f:parse_RRDInsDelBegin},337:{n:"RRDInsDelEnd",f:parse_RRDInsDelEnd},338:{n:"RRDConflict",f:parse_RRDConflict},339:{n:"RRDDefName",f:parse_RRDDefName},340:{n:"RRDRstEtxp",f:parse_RRDRstEtxp},351:{n:"LRng",f:parse_LRng},352:{n:"UsesELFs",f:parse_UsesELFs},353:{n:"DSF",f:parse_DSF},401:{n:"CUsr",f:parse_CUsr},402:{n:"CbUsr",f:parse_CbUsr},403:{n:"UsrInfo",f:parse_UsrInfo},404:{n:"UsrExcl",f:parse_UsrExcl},405:{n:"FileLock",f:parse_FileLock},406:{n:"RRDInfo",f:parse_RRDInfo},407:{n:"BCUsrs",f:parse_BCUsrs},408:{n:"UsrChk",f:parse_UsrChk},425:{n:"UserBView",f:parse_UserBView},426:{n:"UserSViewBegin",f:parse_UserSViewBegin},427:{n:"UserSViewEnd",f:parse_UserSViewEnd},428:{n:"RRDUserView",f:parse_RRDUserView},429:{n:"Qsi",f:parse_Qsi},430:{n:"SupBook",f:parse_SupBook},431:{n:"Prot4Rev",f:parse_Prot4Rev},432:{n:"CondFmt",f:parse_CondFmt},433:{n:"CF",f:parse_CF},434:{n:"DVal",f:parse_DVal},437:{n:"DConBin",f:parse_DConBin},438:{n:"TxO",f:parse_TxO},439:{n:"RefreshAll",f:parse_RefreshAll},440:{n:"HLink",f:parse_HLink},441:{n:"Lel",f:parse_Lel},442:{n:"CodeName",f:parse_XLSCodeName},443:{n:"SXFDBType",f:parse_SXFDBType},444:{n:"Prot4RevPass",f:parse_Prot4RevPass},445:{n:"ObNoMacros",f:parse_ObNoMacros},446:{n:"Dv",f:parse_Dv},448:{n:"Excel9File",f:parse_Excel9File},449:{n:"RecalcId",f:parse_RecalcId,r:2},450:{n:"EntExU2",f:parse_EntExU2},512:{n:"Dimensions",f:parse_Dimensions},513:{n:"Blank",f:parse_Blank},515:{n:"Number",f:parse_Number},516:{n:"Label",f:parse_Label},517:{n:"BoolErr",f:parse_BoolErr},519:{n:"String",f:parse_String},520:{n:"Row",f:parse_Row},523:{n:"Index",f:parse_Index},545:{n:"Array",f:parse_Array},549:{n:"DefaultRowHeight",f:parse_DefaultRowHeight},566:{n:"Table",f:parse_Table},574:{n:"Window2",f:parse_Window2},638:{n:"RK",f:parse_RK},659:{n:"Style",f:parse_Style},1048:{n:"BigName",f:parse_BigName},1054:{n:"Format",f:parse_Format},1084:{n:"ContinueBigName",f:parse_ContinueBigName},1212:{n:"ShrFmla",f:parse_ShrFmla},2048:{n:"HLinkTooltip",f:parse_HLinkTooltip},2049:{n:"WebPub",f:parse_WebPub},2050:{n:"QsiSXTag",f:parse_QsiSXTag},2051:{n:"DBQueryExt",f:parse_DBQueryExt},2052:{n:"ExtString",f:parse_ExtString},2053:{n:"TxtQry",f:parse_TxtQry},2054:{n:"Qsir",f:parse_Qsir},2055:{n:"Qsif",f:parse_Qsif},2056:{n:"RRDTQSIF",f:parse_RRDTQSIF},2057:{n:"BOF",f:parse_BOF},2058:{n:"OleDbConn",f:parse_OleDbConn},2059:{n:"WOpt",f:parse_WOpt},2060:{n:"SXViewEx",f:parse_SXViewEx},2061:{n:"SXTH",f:parse_SXTH},2062:{n:"SXPIEx",f:parse_SXPIEx},2063:{n:"SXVDTEx",f:parse_SXVDTEx},2064:{n:"SXViewEx9",f:parse_SXViewEx9},2066:{n:"ContinueFrt",f:parse_ContinueFrt},2067:{n:"RealTimeData",f:parse_RealTimeData},2128:{n:"ChartFrtInfo",f:parse_ChartFrtInfo},2129:{n:"FrtWrapper",f:parse_FrtWrapper},2130:{n:"StartBlock",f:parse_StartBlock},2131:{n:"EndBlock",f:parse_EndBlock},2132:{n:"StartObject",f:parse_StartObject},2133:{n:"EndObject",f:parse_EndObject},2134:{n:"CatLab",f:parse_CatLab},2135:{n:"YMult",f:parse_YMult},2136:{n:"SXViewLink",f:parse_SXViewLink},2137:{n:"PivotChartBits",f:parse_PivotChartBits},2138:{n:"FrtFontList",f:parse_FrtFontList},2146:{n:"SheetExt",f:parse_SheetExt},2147:{n:"BookExt",f:parse_BookExt,r:12},2148:{n:"SXAddl",f:parse_SXAddl},2149:{n:"CrErr",f:parse_CrErr},2150:{n:"HFPicture",f:parse_HFPicture},2151:{n:"FeatHdr",f:parse_FeatHdr},2152:{n:"Feat",f:parse_Feat},2154:{n:"DataLabExt",f:parse_DataLabExt},2155:{n:"DataLabExtContents",f:parse_DataLabExtContents},2156:{n:"CellWatch",f:parse_CellWatch},2161:{n:"FeatHdr11",f:parse_FeatHdr11},2162:{n:"Feature11",f:parse_Feature11},2164:{n:"DropDownObjIds",f:parse_DropDownObjIds},2165:{n:"ContinueFrt11",f:parse_ContinueFrt11},2166:{n:"DConn",f:parse_DConn},2167:{n:"List12",f:parse_List12},2168:{n:"Feature12",f:parse_Feature12},2169:{n:"CondFmt12",f:parse_CondFmt12},2170:{n:"CF12",f:parse_CF12},2171:{n:"CFEx",f:parse_CFEx},2172:{n:"XFCRC",f:parse_XFCRC,r:12},2173:{n:"XFExt",f:parse_XFExt,r:12},2174:{n:"AutoFilter12",f:parse_AutoFilter12},2175:{n:"ContinueFrt12",f:parse_ContinueFrt12},2180:{n:"MDTInfo",f:parse_MDTInfo},2181:{n:"MDXStr",f:parse_MDXStr},2182:{n:"MDXTuple",f:parse_MDXTuple},2183:{n:"MDXSet",f:parse_MDXSet},2184:{n:"MDXProp",f:parse_MDXProp},2185:{n:"MDXKPI",f:parse_MDXKPI},2186:{n:"MDB",f:parse_MDB},2187:{n:"PLV",f:parse_PLV},2188:{n:"Compat12",f:parse_Compat12,r:12},2189:{n:"DXF",f:parse_DXF},2190:{n:"TableStyles",f:parse_TableStyles,r:12},2191:{n:"TableStyle",f:parse_TableStyle},2192:{n:"TableStyleElement",f:parse_TableStyleElement},2194:{n:"StyleExt",f:parse_StyleExt},2195:{n:"NamePublish",f:parse_NamePublish},2196:{n:"NameCmt",f:parse_NameCmt},2197:{n:"SortData",f:parse_SortData},2198:{n:"Theme",f:parse_Theme,r:12},2199:{n:"GUIDTypeLib",f:parse_GUIDTypeLib},2200:{n:"FnGrp12",f:parse_FnGrp12},2201:{n:"NameFnGrp12",f:parse_NameFnGrp12},2202:{n:"MTRSettings",f:parse_MTRSettings,r:12},2203:{n:"CompressPictures",f:parse_CompressPictures},2204:{n:"HeaderFooter",f:parse_HeaderFooter},2205:{n:"CrtLayout12",f:parse_CrtLayout12},2206:{n:"CrtMlFrt",f:parse_CrtMlFrt},2207:{n:"CrtMlFrtContinue",f:parse_CrtMlFrtContinue},2211:{n:"ForceFullCalculation",f:parse_ForceFullCalculation},2212:{n:"ShapePropsStream",f:parse_ShapePropsStream},2213:{n:"TextPropsStream",f:parse_TextPropsStream},2214:{n:"RichTextStream",f:parse_RichTextStream},2215:{n:"CrtLayout12A",f:parse_CrtLayout12A},4097:{n:"Units",f:parse_Units},4098:{n:"Chart",f:parse_Chart},4099:{n:"Series",f:parse_Series},4102:{n:"DataFormat",f:parse_DataFormat},4103:{n:"LineFormat",f:parse_LineFormat},4105:{n:"MarkerFormat",f:parse_MarkerFormat},4106:{n:"AreaFormat",f:parse_AreaFormat},4107:{n:"PieFormat",f:parse_PieFormat},4108:{n:"AttachedLabel",f:parse_AttachedLabel},4109:{n:"SeriesText",f:parse_SeriesText},4116:{n:"ChartFormat",f:parse_ChartFormat},4117:{n:"Legend",f:parse_Legend},4118:{n:"SeriesList",f:parse_SeriesList},4119:{n:"Bar",f:parse_Bar},4120:{n:"Line",f:parse_Line},4121:{n:"Pie",f:parse_Pie},4122:{n:"Area",f:parse_Area},4123:{n:"Scatter",f:parse_Scatter},4124:{n:"CrtLine",f:parse_CrtLine},4125:{n:"Axis",f:parse_Axis},4126:{n:"Tick",f:parse_Tick},4127:{n:"ValueRange",f:parse_ValueRange},4128:{n:"CatSerRange",f:parse_CatSerRange},4129:{n:"AxisLine",f:parse_AxisLine},4130:{n:"CrtLink",f:parse_CrtLink},4132:{n:"DefaultText",f:parse_DefaultText},4133:{n:"Text",f:parse_Text},4134:{n:"FontX",f:parse_FontX},4135:{n:"ObjectLink",f:parse_ObjectLink},4146:{n:"Frame",f:parse_Frame},4147:{n:"Begin",f:parse_Begin},4148:{n:"End",f:parse_End},4149:{n:"PlotArea",f:parse_PlotArea},4154:{n:"Chart3d",f:parse_Chart3d},4156:{n:"PicF",f:parse_PicF},4157:{n:"DropBar",f:parse_DropBar},4158:{n:"Radar",f:parse_Radar},4159:{n:"Surf",f:parse_Surf},4160:{n:"RadarArea",f:parse_RadarArea},4161:{n:"AxisParent",f:parse_AxisParent},4163:{n:"LegendException",f:parse_LegendException},4164:{n:"ShtProps",f:parse_ShtProps},4165:{n:"SerToCrt",f:parse_SerToCrt},4166:{n:"AxesUsed",f:parse_AxesUsed},4168:{n:"SBaseRef",f:parse_SBaseRef},4170:{n:"SerParent",f:parse_SerParent},4171:{n:"SerAuxTrend",f:parse_SerAuxTrend},4174:{n:"IFmtRecord",f:parse_IFmtRecord},4175:{n:"Pos",f:parse_Pos},4176:{n:"AlRuns",f:parse_AlRuns},4177:{n:"BRAI",f:parse_BRAI},4187:{n:"SerAuxErrBar",f:parse_SerAuxErrBar},4188:{n:"ClrtClient",f:parse_ClrtClient},4189:{n:"SerFmt",f:parse_SerFmt},4191:{n:"Chart3DBarShape",f:parse_Chart3DBarShape},4192:{n:"Fbi",f:parse_Fbi},4193:{n:"BopPop",f:parse_BopPop},4194:{n:"AxcExt",f:parse_AxcExt},4195:{n:"Dat",f:parse_Dat},4196:{n:"PlotGrowth",f:parse_PlotGrowth},4197:{n:"SIIndex",f:parse_SIIndex},4198:{n:"GelFrame",f:parse_GelFrame},4199:{n:"BopPopCustom",f:parse_BopPopCustom},4200:{n:"Fbi2",f:parse_Fbi2},22:{n:"ExternCount",f:parsenoop},126:{n:"RK",f:parsenoop},127:{n:"ImData",f:parsenoop},135:{n:"Addin",f:parsenoop},136:{n:"Edg",f:parsenoop},137:{n:"Pub",f:parsenoop},145:{n:"Sub",f:parsenoop},148:{n:"LHRecord",f:parsenoop},149:{n:"LHNGraph",f:parsenoop},150:{n:"Sound",f:parsenoop},169:{n:"CoordList",f:parsenoop},171:{n:"GCW",f:parsenoop},188:{n:"ShrFmla",f:parsenoop},194:{n:"AddMenu",f:parsenoop},195:{n:"DelMenu",f:parsenoop},214:{n:"RString",f:parsenoop},223:{n:"UDDesc",f:parsenoop},234:{n:"TabIdConf",f:parsenoop},354:{n:"XL5Modify",f:parsenoop},421:{n:"FileSharing2",f:parsenoop},536:{n:"Name",f:parsenoop},547:{n:"ExternName",f:parse_ExternName},561:{n:"Font",f:parsenoop},1030:{n:"Formula",f:parse_Formula},2157:{n:"FeatInfo",f:parsenoop},2163:{n:"FeatInfo11",f:parsenoop},2177:{n:"SXAddl12",f:parsenoop},2240:{n:"AutoWebPub",f:parsenoop},2241:{n:"ListObj",f:parsenoop},2242:{n:"ListField",f:parsenoop},2243:{n:"ListDV",f:parsenoop},2244:{n:"ListCondFmt",f:parsenoop},2245:{n:"ListCF",f:parsenoop},2246:{n:"FMQry",f:parsenoop},2247:{n:"FMSQry",f:parsenoop},2248:{n:"PLV",f:parsenoop},2249:{n:"LnExt",f:parsenoop},2250:{n:"MkrExt",f:parsenoop},2251:{n:"CrtCoopt",f:parsenoop},0:{}};function parse_ods(zip,opts){if(typeof module!=="undefined"&&typeof require!=="undefined"&&typeof ODS==="undefined")ODS=require("./od"+"s");if(typeof ODS==="undefined"||!ODS.parse_ods)throw new Error("Unsupported ODS");return ODS.parse_ods(zip,opts)}function fix_opts_func(defaults){return function fix_opts(opts){for(var i=0;i!=defaults.length;++i){var d=defaults[i];if(opts[d[0]]===undefined)opts[d[0]]=d[1];if(d[2]==="n")opts[d[0]]=Number(opts[d[0]])}}}var fix_read_opts=fix_opts_func([["cellNF",false],["cellHTML",true],["cellFormula",true],["cellStyles",false],["cellDates",false],["sheetStubs",false],["sheetRows",0,"n"],["bookDeps",false],["bookSheets",false],["bookProps",false],["bookFiles",false],["bookVBA",false],["password",""],["WTF",false]]);var fix_write_opts=fix_opts_func([["cellDates",false],["bookSST",false],["bookType","xlsx"],["WTF",false]]);function safe_parse_wbrels(wbrels,sheets){if(!wbrels)return 0;try{wbrels=sheets.map(function pwbr(w){return[w.name,wbrels["!id"][w.id].Target]})}catch(e){return null}return!wbrels||wbrels.length===0?null:wbrels}function safe_parse_ws(zip,path,relsPath,sheet,sheetRels,sheets,opts){try{sheetRels[sheet]=parse_rels(getzipdata(zip,relsPath,true),path);sheets[sheet]=parse_ws(getzipdata(zip,path),path,opts,sheetRels[sheet])}catch(e){if(opts.WTF)throw e}}var nodirs=function nodirs(x){return x.substr(-1)!="/"};function parse_zip(zip,opts){make_ssf(SSF);opts=opts||{};fix_read_opts(opts);reset_cp();if(safegetzipfile(zip,"META-INF/manifest.xml"))return parse_ods(zip,opts);var entries=keys(zip.files).filter(nodirs).sort();var dir=parse_ct(getzipdata(zip,"[Content_Types].xml"),opts);var xlsb=false;var sheets,binname;if(dir.workbooks.length===0){binname="xl/workbook.xml";if(getzipdata(zip,binname,true))dir.workbooks.push(binname)}if(dir.workbooks.length===0){binname="xl/workbook.bin";if(!getzipfile(zip,binname,true))throw new Error("Could not find workbook");dir.workbooks.push(binname);xlsb=true}if(dir.workbooks[0].substr(-3)=="bin")xlsb=true;if(xlsb)set_cp(1200);if(!opts.bookSheets&&!opts.bookProps){strs=[];if(dir.sst)strs=parse_sst(getzipdata(zip,dir.sst.replace(/^\//,"")),dir.sst,opts);themes={};if(opts.cellStyles&&dir.themes.length)themes=parse_theme(getzipdata(zip,dir.themes[0].replace(/^\//,""),true),dir.themes[0],opts);styles={};if(dir.style)styles=parse_sty(getzipdata(zip,dir.style.replace(/^\//,"")),dir.style,opts)}var wb=parse_wb(getzipdata(zip,dir.workbooks[0].replace(/^\//,"")),dir.workbooks[0],opts);var props={},propdata="";if(dir.coreprops.length!==0){propdata=getzipdata(zip,dir.coreprops[0].replace(/^\//,""),true);if(propdata)props=parse_core_props(propdata);if(dir.extprops.length!==0){propdata=getzipdata(zip,dir.extprops[0].replace(/^\//,""),true);if(propdata)parse_ext_props(propdata,props)}}var custprops={};if(!opts.bookSheets||opts.bookProps){if(dir.custprops.length!==0){propdata=getzipdata(zip,dir.custprops[0].replace(/^\//,""),true);if(propdata)custprops=parse_cust_props(propdata,opts)}}var out={};if(opts.bookSheets||opts.bookProps){if(props.Worksheets&&props.SheetNames.length>0)sheets=props.SheetNames;else if(wb.Sheets)sheets=wb.Sheets.map(function pluck(x){return x.name});if(opts.bookProps){out.Props=props;out.Custprops=custprops}if(typeof sheets!=="undefined")out.SheetNames=sheets;if(opts.bookSheets?out.SheetNames:opts.bookProps)return out}sheets={};var deps={};if(opts.bookDeps&&dir.calcchain)deps=parse_cc(getzipdata(zip,dir.calcchain.replace(/^\//,"")),dir.calcchain,opts);var i=0;var sheetRels={};var path,relsPath;if(!props.Worksheets){var wbsheets=wb.Sheets;props.Worksheets=wbsheets.length;props.SheetNames=[];for(var j=0;j!=wbsheets.length;++j){props.SheetNames[j]=wbsheets[j].name}}var wbext=xlsb?"bin":"xml";var wbrelsfile="xl/_rels/workbook."+wbext+".rels";var wbrels=parse_rels(getzipdata(zip,wbrelsfile,true),wbrelsfile);if(wbrels)wbrels=safe_parse_wbrels(wbrels,wb.Sheets);var nmode=getzipdata(zip,"xl/worksheets/sheet.xml",true)?1:0;for(i=0;i!=props.Worksheets;++i){if(wbrels)path="xl/"+wbrels[i][1].replace(/[\/]?xl\//,"");else{path="xl/worksheets/sheet"+(i+1-nmode)+"."+wbext;path=path.replace(/sheet0\./,"sheet.")}relsPath=path.replace(/^(.*)(\/)([^\/]*)$/,"$1/_rels/$3.rels");safe_parse_ws(zip,path,relsPath,props.SheetNames[i],sheetRels,sheets,opts)}if(dir.comments)parse_comments(zip,dir.comments,sheets,sheetRels,opts);out={Directory:dir,Workbook:wb,Props:props,Custprops:custprops,Deps:deps,Sheets:sheets,SheetNames:props.SheetNames,Strings:strs,Styles:styles,Themes:themes,SSF:SSF.get_table()};if(opts.bookFiles){out.keys=entries;out.files=zip.files}if(opts.bookVBA){if(dir.vba.length>0)out.vbaraw=getzipdata(zip,dir.vba[0],true);else if(dir.defaults.bin==="application/vnd.ms-office.vbaProject")out.vbaraw=getzipdata(zip,"xl/vbaProject.bin",true)}return out}function add_rels(rels,rId,f,type,relobj){if(!relobj)relobj={};if(!rels["!id"])rels["!id"]={};relobj.Id="rId"+rId;relobj.Type=type;relobj.Target=f;if(rels["!id"][relobj.Id])throw new Error("Cannot rewrite rId "+rId);rels["!id"][relobj.Id]=relobj;rels[("/"+relobj.Target).replace("//","/")]=relobj}function write_zip(wb,opts){if(wb&&!wb.SSF){wb.SSF=SSF.get_table()}if(wb&&wb.SSF){make_ssf(SSF);SSF.load_table(wb.SSF);opts.revssf=evert_num(wb.SSF);opts.revssf[wb.SSF[65535]]=0}opts.rels={};opts.wbrels={};opts.Strings=[];opts.Strings.Count=0;opts.Strings.Unique=0;var wbext=opts.bookType=="xlsb"?"bin":"xml";var ct={workbooks:[],sheets:[],calcchains:[],themes:[],styles:[],coreprops:[],extprops:[],custprops:[],strs:[],comments:[],vba:[],TODO:[],rels:[],xmlns:""};fix_write_opts(opts=opts||{});var zip=new jszip;var f="",rId=0;opts.cellXfs=[];get_cell_style(opts.cellXfs,{},{revssf:{General:0}});f="docProps/core.xml";zip.file(f,write_core_props(wb.Props,opts));ct.coreprops.push(f);add_rels(opts.rels,2,f,RELS.CORE_PROPS);f="docProps/app.xml";if(!wb.Props)wb.Props={};wb.Props.SheetNames=wb.SheetNames;wb.Props.Worksheets=wb.SheetNames.length;zip.file(f,write_ext_props(wb.Props,opts));ct.extprops.push(f);add_rels(opts.rels,3,f,RELS.EXT_PROPS);if(wb.Custprops!==wb.Props&&keys(wb.Custprops||{}).length>0){f="docProps/custom.xml";zip.file(f,write_cust_props(wb.Custprops,opts));ct.custprops.push(f);add_rels(opts.rels,4,f,RELS.CUST_PROPS)}f="xl/workbook."+wbext;zip.file(f,write_wb(wb,f,opts));ct.workbooks.push(f);add_rels(opts.rels,1,f,RELS.WB);for(rId=1;rId<=wb.SheetNames.length;++rId){f="xl/worksheets/sheet"+rId+"."+wbext;zip.file(f,write_ws(rId-1,f,opts,wb));ct.sheets.push(f);add_rels(opts.wbrels,rId,"worksheets/sheet"+rId+"."+wbext,RELS.WS)}if(opts.Strings!=null&&opts.Strings.length>0){f="xl/sharedStrings."+wbext;zip.file(f,write_sst(opts.Strings,f,opts));ct.strs.push(f);add_rels(opts.wbrels,++rId,"sharedStrings."+wbext,RELS.SST)}f="xl/theme/theme1.xml";zip.file(f,write_theme(opts));ct.themes.push(f);add_rels(opts.wbrels,++rId,"theme/theme1.xml",RELS.THEME);f="xl/styles."+wbext;zip.file(f,write_sty(wb,f,opts));ct.styles.push(f);add_rels(opts.wbrels,++rId,"styles."+wbext,RELS.STY);zip.file("[Content_Types].xml",write_ct(ct,opts));zip.file("_rels/.rels",write_rels(opts.rels));zip.file("xl/_rels/workbook."+wbext+".rels",write_rels(opts.wbrels));return zip}function firstbyte(f,o){switch((o||{}).type||"base64"){case"buffer":return f[0];case"base64":return Base64.decode(f.substr(0,12)).charCodeAt(0);case"binary":return f.charCodeAt(0);case"array":return f[0];default:throw new Error("Unrecognized type "+o.type)}}function read_zip(data,opts){var zip,d=data;var o=opts||{};if(!o.type)o.type=has_buf&&Buffer.isBuffer(data)?"buffer":"base64";switch(o.type){case"base64":zip=new jszip(d,{base64:true});break;case"binary":case"array":zip=new jszip(d,{base64:false});break;case"buffer":zip=new jszip(d);break;case"file":zip=new jszip(d=_fs.readFileSync(data));break;default:throw new Error("Unrecognized type "+o.type)}return parse_zip(zip,o)}function readSync(data,opts){var zip,d=data,isfile=false,n;var o=opts||{};if(!o.type)o.type=has_buf&&Buffer.isBuffer(data)?"buffer":"base64";if(o.type=="file"){isfile=true;o.type="buffer";d=_fs.readFileSync(data)}switch(n=firstbyte(d,o)){case 208:if(isfile)o.type="file";return parse_xlscfb(CFB.read(data,o),o);case 9:return parse_xlscfb(s2a(o.type==="base64"?Base64.decode(data):data),o);case 60:return parse_xlml(d,o);case 80:if(isfile)o.type="file";return read_zip(data,opts);default:throw new Error("Unsupported file "+n)}}function readFileSync(data,opts){var o=opts||{};o.type="file";var wb=readSync(data,o);wb.FILENAME=data;return wb}function write_zip_type(wb,opts){var o=opts||{};style_builder=new StyleBuilder(opts);var z=write_zip(wb,o);switch(o.type){case"base64":return z.generate({type:"base64"});case"binary":return z.generate({type:"string"});case"buffer":return z.generate({type:"nodebuffer"});case"file":return _fs.writeFileSync(o.file,z.generate({type:"nodebuffer"}));default:throw new Error("Unrecognized type "+o.type)}}function writeSync(wb,opts){var o=opts||{};switch(o.bookType){case"xml":return write_xlml(wb,o);default:return write_zip_type(wb,o)}}function writeFileSync(wb,filename,opts){var o=opts||{};o.type="file";o.file=filename;switch(o.file.substr(-5).toLowerCase()){case".xlsx":o.bookType="xlsx";break;case".xlsm":o.bookType="xlsm";break;case".xlsb":o.bookType="xlsb";break;default:switch(o.file.substr(-4).toLowerCase()){case".xls":o.bookType="xls";break;case".xml":o.bookType="xml";break}}return writeSync(wb,o)}function decode_row(rowstr){return parseInt(unfix_row(rowstr),10)-1}function encode_row(row){return""+(row+1)}function fix_row(cstr){return cstr.replace(/([A-Z]|^)(\d+)$/,"$1$$$2")}function unfix_row(cstr){return cstr.replace(/\$(\d+)$/,"$1")}function decode_col(colstr){var c=unfix_col(colstr),d=0,i=0;for(;i!==c.length;++i)d=26*d+c.charCodeAt(i)-64;return d-1}function encode_col(col){var s="";for(++col;col;col=Math.floor((col-1)/26))s=String.fromCharCode((col-1)%26+65)+s;return s}function fix_col(cstr){return cstr.replace(/^([A-Z])/,"$$$1")}function unfix_col(cstr){return cstr.replace(/^\$([A-Z])/,"$1")}function split_cell(cstr){return cstr.replace(/(\$?[A-Z]*)(\$?\d*)/,"$1,$2").split(",")}function decode_cell(cstr){var splt=split_cell(cstr);return{c:decode_col(splt[0]),r:decode_row(splt[1])}}function encode_cell(cell){return encode_col(cell.c)+encode_row(cell.r)}function fix_cell(cstr){return fix_col(fix_row(cstr))}function unfix_cell(cstr){return unfix_col(unfix_row(cstr))}function decode_range(range){var x=range.split(":").map(decode_cell);return{s:x[0],e:x[x.length-1]}}function encode_range(cs,ce){if(ce===undefined||typeof ce==="number")return encode_range(cs.s,cs.e);if(typeof cs!=="string")cs=encode_cell(cs);if(typeof ce!=="string")ce=encode_cell(ce);return cs==ce?cs:cs+":"+ce}function safe_decode_range(range){var o={s:{c:0,r:0},e:{c:0,r:0}};var idx=0,i=0,cc=0;var len=range.length;for(idx=0;i<len;++i){if((cc=range.charCodeAt(i)-64)<1||cc>26)break;idx=26*idx+cc}o.s.c=--idx;for(idx=0;i<len;++i){if((cc=range.charCodeAt(i)-48)<0||cc>9)break;idx=10*idx+cc}o.s.r=--idx;if(i===len||range.charCodeAt(++i)===58){o.e.c=o.s.c;o.e.r=o.s.r;return o}for(idx=0;i!=len;++i){if((cc=range.charCodeAt(i)-64)<1||cc>26)break;idx=26*idx+cc}o.e.c=--idx;for(idx=0;i!=len;++i){if((cc=range.charCodeAt(i)-48)<0||cc>9)break;idx=10*idx+cc}o.e.r=--idx;return o}function safe_format_cell(cell,v){if(cell.z!==undefined)try{return cell.w=SSF.format(cell.z,v)}catch(e){}if(!cell.XF)return v;try{return cell.w=SSF.format(cell.XF.ifmt||0,v)}catch(e){return""+v}}function format_cell(cell,v){if(cell==null||cell.t==null)return"";if(cell.w!==undefined)return cell.w;if(v===undefined)return safe_format_cell(cell,cell.v);return safe_format_cell(cell,v)}function sheet_to_json(sheet,opts){var val,row,range,header=0,offset=1,r,hdr=[],isempty,R,C,v;var o=opts!=null?opts:{};var raw=o.raw;if(sheet==null||sheet["!ref"]==null)return[];range=o.range!==undefined?o.range:sheet["!ref"];if(o.header===1)header=1;else if(o.header==="A")header=2;else if(Array.isArray(o.header))header=3;switch(typeof range){case"string":r=safe_decode_range(range);break;case"number":r=safe_decode_range(sheet["!ref"]);r.s.r=range;break;default:r=range}if(header>0)offset=0;var rr=encode_row(r.s.r);var cols=new Array(r.e.c-r.s.c+1);var out=new Array(r.e.r-r.s.r-offset+1);var outi=0;for(C=r.s.c;C<=r.e.c;++C){cols[C]=encode_col(C);val=sheet[cols[C]+rr];switch(header){case 1:hdr[C]=C;break;case 2:hdr[C]=cols[C];break;case 3:hdr[C]=o.header[C-r.s.c];break;default:if(val===undefined)continue;hdr[C]=format_cell(val)}}for(R=r.s.r+offset;R<=r.e.r;++R){rr=encode_row(R);isempty=true;if(header===1)row=[];else{row={};if(Object.defineProperty)Object.defineProperty(row,"__rowNum__",{value:R,enumerable:false});else row.__rowNum__=R}for(C=r.s.c;C<=r.e.c;++C){val=sheet[cols[C]+rr];if(val===undefined||val.t===undefined)continue;v=val.v;switch(val.t){case"e":continue;case"s":break;case"b":case"n":break;default:throw"unrecognized type "+val.t}if(v!==undefined){row[hdr[C]]=raw?v:format_cell(val,v);isempty=false}}if(isempty===false||header===1)out[outi++]=row}out.length=outi;return out}function sheet_to_row_object_array(sheet,opts){return sheet_to_json(sheet,opts!=null?opts:{})}function sheet_to_csv(sheet,opts){var out="",txt="",qreg=/"/g;var o=opts==null?{}:opts;if(sheet==null||sheet["!ref"]==null)return"";var r=safe_decode_range(sheet["!ref"]);var FS=o.FS!==undefined?o.FS:",",fs=FS.charCodeAt(0);var RS=o.RS!==undefined?o.RS:"\n",rs=RS.charCodeAt(0);var row="",rr="",cols=[];var i=0,cc=0,val;var R=0,C=0;
+for(C=r.s.c;C<=r.e.c;++C)cols[C]=encode_col(C);for(R=r.s.r;R<=r.e.r;++R){row="";rr=encode_row(R);for(C=r.s.c;C<=r.e.c;++C){val=sheet[cols[C]+rr];txt=val!==undefined?""+format_cell(val):"";for(i=0,cc=0;i!==txt.length;++i)if((cc=txt.charCodeAt(i))===fs||cc===rs||cc===34){txt='"'+txt.replace(qreg,'""')+'"';break}row+=(C===r.s.c?"":FS)+txt}out+=row+RS}return out}var make_csv=sheet_to_csv;function sheet_to_formulae(sheet){var cmds,y="",x,val="";if(sheet==null||sheet["!ref"]==null)return"";var r=safe_decode_range(sheet["!ref"]),rr="",cols=[],C;cmds=new Array((r.e.r-r.s.r+1)*(r.e.c-r.s.c+1));var i=0;for(C=r.s.c;C<=r.e.c;++C)cols[C]=encode_col(C);for(var R=r.s.r;R<=r.e.r;++R){rr=encode_row(R);for(C=r.s.c;C<=r.e.c;++C){y=cols[C]+rr;x=sheet[y];val="";if(x===undefined)continue;if(x.f!=null)val=x.f;else if(x.w!==undefined)val="'"+x.w;else if(x.v===undefined)continue;else val=""+x.v;cmds[i++]=y+"="+val}}cmds.length=i;return cmds}var utils={encode_col:encode_col,encode_row:encode_row,encode_cell:encode_cell,encode_range:encode_range,decode_col:decode_col,decode_row:decode_row,split_cell:split_cell,decode_cell:decode_cell,decode_range:decode_range,format_cell:format_cell,get_formulae:sheet_to_formulae,make_csv:sheet_to_csv,make_json:sheet_to_json,make_formulae:sheet_to_formulae,sheet_to_csv:sheet_to_csv,sheet_to_json:sheet_to_json,sheet_to_formulae:sheet_to_formulae,sheet_to_row_object_array:sheet_to_row_object_array};var XmlNode=function(){function XmlNode(tagName,attributes,children){if(!(this instanceof XmlNode)){return new XmlNode(tagName,attributes,children)}this.tagName=tagName;this._attributes=attributes||{};this._children=children||[];this._prefix="";return this}XmlNode.prototype.createElement=function(){return new XmlNode(arguments)};XmlNode.prototype.children=function(){return this._children};XmlNode.prototype.append=function(node){this._children.push(node);return this};XmlNode.prototype.prefix=function(prefix){if(arguments.length==0){return this._prefix}this._prefix=prefix;return this};XmlNode.prototype.attr=function(attr,value){if(value==undefined){delete this._attributes[attr];return this}if(arguments.length==0){return this._attributes}else if(typeof attr=="string"&&arguments.length==1){return this._attributes.attr[attr]}if(typeof attr=="object"&&arguments.length==1){for(var key in attr){this._attributes[key]=attr[key]}}else if(arguments.length==2&&typeof attr=="string"){this._attributes[attr]=value}return this};var APOS="'";QUOTE='"';var ESCAPED_QUOTE={};ESCAPED_QUOTE[QUOTE]="&quot;";ESCAPED_QUOTE[APOS]="&apos;";XmlNode.prototype.escapeAttributeValue=function(att_value){return'"'+att_value.replace(/\"/g,"&quot;")+'"'};XmlNode.prototype.toXml=function(node){if(!node)node=this;var xml=node._prefix;xml+="<"+node.tagName;if(node._attributes){for(var key in node._attributes){xml+=" "+key+"="+this.escapeAttributeValue(""+node._attributes[key])+""}}if(node._children&&node._children.length>0){xml+=">";for(var i=0;i<node._children.length;i++){xml+=this.toXml(node._children[i])}xml+="</"+node.tagName+">"}else{xml+="/>"}return xml};return XmlNode}();var StyleBuilder=function(options){var customNumFmtId=164;var table_fmt={0:"General",1:"0",2:"0.00",3:"#,##0",4:"#,##0.00",9:"0%",10:"0.00%",11:"0.00E+00",12:"# ?/?",13:"# ??/??",14:"m/d/yy",15:"d-mmm-yy",16:"d-mmm",17:"mmm-yy",18:"h:mm AM/PM",19:"h:mm:ss AM/PM",20:"h:mm",21:"h:mm:ss",22:"m/d/yy h:mm",37:"#,##0 ;(#,##0)",38:"#,##0 ;[Red](#,##0)",39:"#,##0.00;(#,##0.00)",40:"#,##0.00;[Red](#,##0.00)",45:"mm:ss",46:"[h]:mm:ss",47:"mmss.0",48:"##0.0E+0",49:"@",56:'"涓婂崍/涓嬪崍 "hh"鏅�"mm"鍒�"ss"绉� "'};var fmt_table={};for(var idx in table_fmt){fmt_table[table_fmt[idx]]=idx}_hashIndex={};_listIndex=[];return{initialize:function(options){this.$fonts=XmlNode("fonts").attr("count",0).attr("x14ac:knownFonts","1");this.$fills=XmlNode("fills").attr("count",0);this.$borders=XmlNode("borders").attr("count",0);this.$numFmts=XmlNode("numFmts").attr("count",0);this.$cellStyleXfs=XmlNode("cellStyleXfs");this.$xf=XmlNode("xf").attr("numFmtId",0).attr("fontId",0).attr("fillId",0).attr("borderId",0);this.$cellXfs=XmlNode("cellXfs").attr("count",0);this.$cellStyles=XmlNode("cellStyles").append(XmlNode("cellStyle").attr("name","Normal").attr("xfId",0).attr("builtinId",0));this.$dxfs=XmlNode("dxfs").attr("count","0");this.$tableStyles=XmlNode("tableStyles").attr("count","0").attr("defaultTableStyle","TableStyleMedium9").attr("defaultPivotStyle","PivotStyleMedium4");this.$styles=XmlNode("styleSheet").attr("xmlns:mc","http://schemas.openxmlformats.org/markup-compatibility/2006").attr("xmlns:x14ac","http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac").attr("xmlns","http://schemas.openxmlformats.org/spreadsheetml/2006/main").attr("mc:Ignorable","x14ac").prefix('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>').append(this.$numFmts).append(this.$fonts).append(this.$fills).append(this.$borders).append(this.$cellStyleXfs.append(this.$xf)).append(this.$cellXfs).append(this.$cellStyles).append(this.$dxfs).append(this.$tableStyles);var defaultStyle=options.defaultCellStyle||{};if(!defaultStyle.font)defaultStyle.font={name:"Calibri",sz:"12"};if(!defaultStyle.font.name)defaultStyle.font.name="Calibri";if(!defaultStyle.font.sz)defaultStyle.font.sz=11;if(!defaultStyle.fill)defaultStyle.fill={patternType:"none",fgColor:{}};if(!defaultStyle.border)defaultStyle.border={};if(!defaultStyle.numFmt)defaultStyle.numFmt=0;this.defaultStyle=defaultStyle;var gray125Style=JSON.parse(JSON.stringify(defaultStyle));gray125Style.fill={patternType:"gray125",fgColor:{}};this.addStyles([defaultStyle,gray125Style]);return this},addStyle:function(attributes){var hashKey=JSON.stringify(attributes);var index=_hashIndex[hashKey];if(index==undefined){index=this._addXf(attributes);_hashIndex[hashKey]=index}else{index=_hashIndex[hashKey]}return index},addStyles:function(styles){var self=this;return styles.map(function(style){return self.addStyle(style)})},_duckTypeStyle:function(attributes){if(typeof attributes=="object"&&(attributes.patternFill||attributes.fgColor)){return{fill:attributes}}else if(attributes.font||attributes.numFmt||attributes.border||attributes.fill){return attributes}else{return this._getStyleCSS(attributes)}},_getStyleCSS:function(css){return css},_addXf:function(attributes){var fontId=this._addFont(attributes.font);var fillId=this._addFill(attributes.fill);var borderId=this._addBorder(attributes.border);var numFmtId=this._addNumFmt(attributes.numFmt);var $xf=XmlNode("xf").attr("numFmtId",numFmtId).attr("fontId",fontId).attr("fillId",fillId).attr("borderId",borderId).attr("xfId","0");if(fontId>0){$xf.attr("applyFont","1")}if(fillId>0){$xf.attr("applyFill","1")}if(borderId>0){$xf.attr("applyBorder","1")}if(numFmtId>0){$xf.attr("applyNumberFormat","1")}if(attributes.alignment){var $alignment=XmlNode("alignment");if(attributes.alignment.horizontal){$alignment.attr("horizontal",attributes.alignment.horizontal)}if(attributes.alignment.vertical){$alignment.attr("vertical",attributes.alignment.vertical)}if(attributes.alignment.indent){$alignment.attr("indent",attributes.alignment.indent)}if(attributes.alignment.readingOrder){$alignment.attr("readingOrder",attributes.alignment.readingOrder)}if(attributes.alignment.wrapText){$alignment.attr("wrapText",attributes.alignment.wrapText)}if(attributes.alignment.textRotation!=undefined){$alignment.attr("textRotation",attributes.alignment.textRotation)}$xf.append($alignment).attr("applyAlignment",1)}this.$cellXfs.append($xf);var count=+this.$cellXfs.children().length;this.$cellXfs.attr("count",count);return count-1},_addFont:function(attributes){if(!attributes){return 0}var $font=XmlNode("font").append(XmlNode("sz").attr("val",attributes.sz||this.defaultStyle.font.sz)).append(XmlNode("name").attr("val",attributes.name||this.defaultStyle.font.name));if(attributes.bold)$font.append(XmlNode("b"));if(attributes.underline)$font.append(XmlNode("u"));if(attributes.italic)$font.append(XmlNode("i"));if(attributes.strike)$font.append(XmlNode("strike"));if(attributes.outline)$font.append(XmlNode("outline"));if(attributes.shadow)$font.append(XmlNode("shadow"));if(attributes.vertAlign){$font.append(XmlNode("vertAlign").attr("val",attributes.vertAlign))}if(attributes.color){if(attributes.color.theme){$font.append(XmlNode("color").attr("theme",attributes.color.theme));if(attributes.color.tint){$font.append(XmlNode("tint").attr("theme",attributes.color.tint))}}else if(attributes.color.rgb){$font.append(XmlNode("color").attr("rgb",attributes.color.rgb))}}this.$fonts.append($font);var count=this.$fonts.children().length;this.$fonts.attr("count",count);return count-1},_addNumFmt:function(numFmt){if(!numFmt){return 0}if(typeof numFmt=="string"){var numFmtIdx=fmt_table[numFmt];if(numFmtIdx>=0){return numFmtIdx}}if(/^[0-9]+$/.exec(numFmt)){return numFmt}numFmt=numFmt.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;");var $numFmt=XmlNode("numFmt").attr("numFmtId",++customNumFmtId).attr("formatCode",numFmt);this.$numFmts.append($numFmt);var count=this.$numFmts.children().length;this.$numFmts.attr("count",count);return customNumFmtId},_addFill:function(attributes){if(!attributes){return 0}var $patternFill=XmlNode("patternFill").attr("patternType",attributes.patternType||"solid");if(attributes.fgColor){var $fgColor=XmlNode("fgColor");if(attributes.fgColor.rgb){if(attributes.fgColor.rgb.length==6){attributes.fgColor.rgb="FF"+attributes.fgColor.rgb}$fgColor.attr("rgb",attributes.fgColor.rgb);$patternFill.append($fgColor)}else if(attributes.fgColor.theme){$fgColor.attr("theme",attributes.fgColor.theme);if(attributes.fgColor.tint){$fgColor.attr("tint",attributes.fgColor.tint)}$patternFill.append($fgColor)}if(!attributes.bgColor){attributes.bgColor={indexed:"64"}}}if(attributes.bgColor){var $bgColor=XmlNode("bgColor").attr(attributes.bgColor);$patternFill.append($bgColor)}var $fill=XmlNode("fill").append($patternFill);this.$fills.append($fill);var count=this.$fills.children().length;this.$fills.attr("count",count);return count-1},_getSubBorder:function(direction,spec){var $direction=XmlNode(direction);if(spec){if(spec.style)$direction.attr("style",spec.style);if(spec.color){var $color=XmlNode("color");if(spec.color.auto){$color.attr("auto",spec.color.auto)}else if(spec.color.rgb){$color.attr("rgb",spec.color.rgb)}else if(spec.color.theme||spec.color.tint){$color.attr("theme",spec.color.theme||"1");$color.attr("tint",spec.color.tint||"0")}$direction.append($color)}}return $direction},_addBorder:function(attributes){if(!attributes){return 0}var self=this;var $border=XmlNode("border").attr("diagonalUp",attributes.diagonalUp).attr("diagonalDown",attributes.diagonalDown);var directions=["left","right","top","bottom","diagonal"];directions.forEach(function(direction){$border.append(self._getSubBorder(direction,attributes[direction]))});this.$borders.append($border);var count=this.$borders.children().length;this.$borders.attr("count",count);return count-1},toXml:function(){return this.$styles.toXml()}}.initialize(options||{})};XLSX.parse_xlscfb=parse_xlscfb;XLSX.parse_zip=parse_zip;XLSX.read=readSync;XLSX.readFile=readFileSync;XLSX.readFileSync=readFileSync;XLSX.write=writeSync;XLSX.writeFile=writeFileSync;XLSX.writeFileSync=writeFileSync;XLSX.utils=utils;XLSX.CFB=CFB;XLSX.SSF=SSF})(typeof exports!=="undefined"?exports:XLSX);var XLS=XLSX;
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/dist/xlsx.full.min.map b/Source/UBCS-WEB/src/config/js-xlsx-master/dist/xlsx.full.min.map
new file mode 100644
index 0000000..e50682c
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/dist/xlsx.full.min.map
@@ -0,0 +1 @@
+{"version":3,"sources":["jszip.js","dist/cpexcel.js","xlsx.js"],"names":["e","exports","module","define","amd","f","window","global","self","JSZip","t","n","r","s","o","u","a","require","i","Error","call","length","1","_dereq_","_keyStr","encode","input","utf8","output","chr1","chr2","chr3","enc1","enc2","enc3","enc4","charCodeAt","isNaN","charAt","decode","replace","indexOf","String","fromCharCode","2","CompressedObject","this","compressedSize","uncompressedSize","crc32","compressionMethod","compressedContent","prototype","getContent","getCompressedContent","3","STORE","magic","compress","content","uncompress","compressInputType","uncompressInputType","DEFLATE","./flate","4","utils","table","crc","isArray","getTypeOf","x","y","b","iTop","./utils","5","DataReader","data","index","checkOffset","offset","checkIndex","newIndex","setIndex","skip","byteAt","readInt","size","result","readString","transformTo","readData","lastIndexOfSignature","sig","readDate","dostime","Date","6","base64","binary","dir","createFolders","date","compression","comment","7","string2binary","str","string2Uint8Array","uint8Array2String","array","string2Blob","buffer","arrayBuffer2Blob","outputType","checkSupport","type","MAX_VALUE_16BITS","MAX_VALUE_32BITS","pretty","findCompression","isRegExp","object","8","USE_TYPEDARRAY","Uint8Array","Uint16Array","Uint32Array","pako","deflateRaw","inflateRaw","9","options","files","root","load","clone","newObj","support","defaults","compressions","./base64","./compressions","./defaults","./deprecatedPublicUtils","./load","./object","./support","10","ZipEntries","zipEntries","file","fileName","decompressed","optimizedBinaryString","fileComment","zipComment","./zipEntries","11","Buffer","encoding","test","isBuffer","undefined","12","Uint8ArrayReader","NodeBufferReader","slice","./uint8ArrayReader","13","signature","nodeBuffer","StringWriter","Uint8ArrayWriter","getRawData","_data","copy","set","getBinaryData","nodebuffer","asBinary","dataToString","asUTF8","out","utf8decode","utf8encode","ZipObject","name","_initialMetadata","asText","asNodeBuffer","asUint8Array","asArrayBuffer","decToHex","dec","bytes","hex","extend","attr","arguments","hasOwnProperty","prepareFileAttrs","toUpperCase","fileAdd","dataType","parent","parentFolder","folderAdd","path","substring","lastSlash","lastIndexOf","generateCompressedObjectFrom","generateZipParts","compressedObject","utfEncodedFileName","utfEncodedComment","useUTF8ForFileName","useUTF8ForComment","dosTime","dosDate","extraFields","unicodePathExtraField","unicodeCommentExtraField","getHours","getMinutes","getSeconds","getFullYear","getMonth","getDate","header","fileRecord","LOCAL_FILE_HEADER","dirRecord","CENTRAL_FILE_HEADER","stream","filter","search","filename","relativePath","fileClone","push","regexp","folder","arg","newFolder","ret","remove","kids","generate","zipData","localDirLength","centralDirLength","writer","compressionName","zipPart","dirEnd","CENTRAL_DIRECTORY_END","typeName","toLowerCase","append","zip","finalize","string","./compressedObject","./crc32","./nodeBuffer","./signature","./stringWriter","./uint8ArrayWriter","./utf8","14","ZIP64_CENTRAL_DIRECTORY_LOCATOR","ZIP64_CENTRAL_DIRECTORY_END","DATA_DESCRIPTOR","15","StringReader","./dataReader","16","join","17","arraybuffer","ArrayBuffer","uint8array","blob","Blob","Builder","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","builder","getBlob","18","sig0","sig1","sig2","sig3","subarray","19","20","_utf8len","Array","string2buf","buf","c","c2","m_pos","str_len","buf_len","utf8border","max","pos","buf2string","c_len","len","utf16buf","applyFromCharCode","toString","k","chunk","nextBoundary","Math","min","21","identity","stringToArrayLike","arrayLikeToString","canUseApply","apply","resultStr","floor","arrayLikeToArrayLike","arrayFrom","arrayTo","transform","byteLength","inputType","Object","supported","res","code","method","22","ZipEntry","jszipProto","loadOptions","checkSignature","expectedSignature","reader","readBlockEndOfCentral","diskNumber","diskWithCentralDirStart","centralDirRecordsOnThisDisk","centralDirRecords","centralDirSize","centralDirOffset","zipCommentLength","readBlockZip64EndOfCentral","zip64EndOfCentralSize","versionMadeBy","versionNeeded","zip64ExtensibleData","extraDataSize","extraFieldId","extraFieldLength","extraFieldValue","id","value","readBlockZip64EndOfCentralLocator","diskWithZip64CentralDirStart","relativeOffsetEndOfZip64CentralDir","disksCount","readLocalFiles","localHeaderOffset","readLocalPart","handleUTF8","readCentralDir","zip64","readCentralPart","readEndOfCentral","prepareReader","./nodeBufferReader","./stringReader","./zipEntry","23","isEncrypted","bitFlag","useUTF8","prepareCompressedContent","from","previousIndex","compressedFileData","prepareContent","uncompressedFileData","localExtraFieldsLength","fileNameLength","checkCRC32","extraFieldsLength","fileCommentLength","diskNumberStart","internalFileAttributes","externalFileAttributes","readExtraFields","parseZIP64ExtraField","extraReader","start","upath","findExtraFieldUnicodePath","ucomment","findExtraFieldUnicodeComment","upathField","ucommentField","24","assign","deflate","inflate","constants","./lib/deflate","./lib/inflate","./lib/utils/common","./lib/zlib/constants","25","zlib_deflate","strings","msg","zstream","Z_NO_FLUSH","Z_FINISH","Z_OK","Z_STREAM_END","Z_DEFAULT_COMPRESSION","Z_DEFAULT_STRATEGY","Z_DEFLATED","Deflate","level","chunkSize","windowBits","memLevel","strategy","to","opt","raw","gzip","err","ended","chunks","strm","avail_out","status","deflateInit2","deflateSetHeader","mode","_mode","next_in","avail_in","Buf8","next_out","onEnd","onData","buf2binstring","shrinkBuf","deflateEnd","flattenChunks","deflator","./utils/common","./utils/strings","./zlib/deflate.js","./zlib/messages","./zlib/zstream","26","zlib_inflate","gzheader","Inflate","inflateInit2","inflateGetHeader","next_out_utf8","tail","utf8str","binstring2buf","arraySet","inflateEnd","inflator","ungzip","./zlib/constants","./zlib/gzheader","./zlib/inflate.js","27","TYPED_OK","Int32Array","obj","sources","source","shift","TypeError","p","fnTyped","dest","src","src_offs","dest_offs","l","fnUntyped","concat","setTyped","on","Buf16","Buf32","28","STR_APPLY_OK","STR_APPLY_UIA_OK","__","./common","29","adler32","adler","s1","s2","30","Z_PARTIAL_FLUSH","Z_SYNC_FLUSH","Z_FULL_FLUSH","Z_BLOCK","Z_TREES","Z_NEED_DICT","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_BUF_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_BINARY","Z_TEXT","Z_UNKNOWN","31","makeTable","crcTable","end","32","trees","MAX_MEM_LEVEL","MAX_WBITS","DEF_MEM_LEVEL","LENGTH_CODES","LITERALS","L_CODES","D_CODES","BL_CODES","HEAP_SIZE","MAX_BITS","MIN_MATCH","MAX_MATCH","MIN_LOOKAHEAD","PRESET_DICT","INIT_STATE","EXTRA_STATE","NAME_STATE","COMMENT_STATE","HCRC_STATE","BUSY_STATE","FINISH_STATE","BS_NEED_MORE","BS_BLOCK_DONE","BS_FINISH_STARTED","BS_FINISH_DONE","OS_CODE","errorCode","rank","zero","flush_pending","state","pending","pending_buf","pending_out","total_out","flush_block_only","last","_tr_flush_block","block_start","strstart","put_byte","putShortMSB","read_buf","wrap","total_in","longest_match","cur_match","chain_length","max_chain_length","scan","match","best_len","prev_length","nice_match","limit","w_size","_win","wmask","w_mask","prev","strend","scan_end1","scan_end","good_match","lookahead","match_start","fill_window","_w_size","m","more","window_size","hash_size","head","insert","ins_h","hash_shift","hash_mask","deflate_stored","flush","max_block_size","pending_buf_size","max_start","deflate_fast","hash_head","bflush","match_length","_tr_tally","max_lazy_match","last_lit","deflate_slow","max_insert","prev_match","match_available","deflate_rle","deflate_huff","Config","good_length","max_lazy","nice_length","max_chain","func","configuration_table","lm_init","DeflateState","gzhead","gzindex","last_flush","w_bits","hash_bits","dyn_ltree","dyn_dtree","bl_tree","l_desc","d_desc","bl_desc","bl_count","heap","heap_len","heap_max","depth","l_buf","lit_bufsize","d_buf","opt_len","static_len","matches","bi_buf","bi_valid","deflateResetKeep","data_type","_tr_init","deflateReset","deflateInit","old_flush","beg","val","text","hcrc","extra","time","os","level_flags","bstate","_tr_align","_tr_stored_block","deflateInfo","../utils/common","./adler32","./messages","./trees","33","GZheader","xflags","extra_len","done","34","BAD","TYPE","inflate_fast","_in","_out","dmax","wsize","whave","wnext","hold","bits","lcode","dcode","lmask","dmask","here","op","dist","from_source","lencode","distcode","lenbits","distbits","top","dolen","dodist","sane","35","inflate_table","CODES","LENS","DISTS","Z_MEM_ERROR","HEAD","FLAGS","TIME","OS","EXLEN","EXTRA","NAME","COMMENT","HCRC","DICTID","DICT","TYPEDO","STORED","COPY_","COPY","TABLE","LENLENS","CODELENS","LEN_","LEN","LENEXT","DIST","DISTEXT","MATCH","LIT","CHECK","LENGTH","DONE","MEM","SYNC","ENOUGH_LENS","ENOUGH_DISTS","DEF_WBITS","ZSWAP32","q","InflateState","havedict","flags","check","total","wbits","ncode","nlen","ndist","have","next","lens","work","lendyn","distdyn","back","was","inflateResetKeep","inflateReset","inflateReset2","inflateInit","virgin","lenfix","distfix","fixedtables","sym","updatewindow","put","left","here_bits","here_op","here_val","last_bits","last_op","last_val","hbuf","opts","order","inf_leave","inflateInfo","./inffast","./inftrees","36","MAXBITS","lbase","lext","dbase","dext","lens_index","codes","table_index","curr","drop","used","huff","incr","fill","low","mask","base","base_index","count","offs","extra_index","37","0","-1","-2","-3","-4","-5","-6","38","STORED_BLOCK","STATIC_TREES","DYN_TREES","Buf_size","MAX_BL_BITS","END_BLOCK","REP_3_6","REPZ_3_10","REPZ_11_138","extra_lbits","extra_dbits","extra_blbits","bl_order","DIST_CODE_LEN","static_ltree","static_dtree","_dist_code","_length_code","base_length","base_dist","StaticTreeDesc","static_tree","extra_bits","extra_base","elems","max_length","has_stree","static_l_desc","static_d_desc","static_bl_desc","TreeDesc","dyn_tree","stat_desc","max_code","d_code","put_short","w","send_bits","send_code","tree","bi_reverse","bi_flush","gen_bitlen","desc","stree","h","xbits","overflow","gen_codes","next_code","tr_static_init","init_block","bi_windup","copy_block","smaller","_n2","_m2","pqdownheap","v","j","compress_block","ltree","dtree","lc","lx","build_tree","node","scan_tree","prevlen","curlen","nextlen","max_count","min_count","send_tree","build_bl_tree","max_blindex","send_all_trees","lcodes","dcodes","blcodes","detect_data_type","black_mask","static_init_done","stored_len","opt_lenb","static_lenb","39","ZStream","cptable","version","d","D","enc","split","factory","cpt","1200","1201","12000","12001","16969","20127","65000","65001","sbcs_cache","dbcs_cache","magic_cache","magic_decode","magic_encode","cpecache","cpdcache","sfcc","cca","has_buf","mdl","mdb","make_EE","E","EE","keys","ee","sbcs_encode","make_sbcs_encode","cp","sbcs_e","ofmt","sbcs_decode","make_sbcs_decode","DD","sbcs_d","dbcs_encode","make_dbcs_encode","dbcs_e","jj","dbcs_decode","make_dbcs_decode","dbcs_d","utf8_d","ww","utf8_e","direct","encache","cp_decache","decache","forEach","last_enc","last_cp","cache","sbcs","dbcs","BM","SetD","tt","C","M","map","F","dash","o64","c1","c3","e1","e2","e3","e4","hascp","XLSX","make_xlsx","current_codepage","current_cptable","reset_cp","set_cp","char_codes","debom_xml","_getchar","_gc1","substr","_gc2","Base64","make_b64","b64_decode","new_raw_buf","s2a","bconcat","bufs","chr0","SSF","make_ssf","_strrev","pad0","pad_","rpad_","pad0r1","round","pad0r2","p2_32","pow","pad0r","isgeneral","opts_fmt","fixopts","table_fmt","40","45","46","47","48","49","56","65535","days","months","frac","mixed","sgn","B","P_2","P_1","P","Q_2","Q_1","Q","A","general_fmt_int","_general_int","general_fmt_num","make_general_fmt_num","gnr1","gnr2","gnr4","gnr5","gnr6","gfn2","gfn5","toFixed","toPrecision","toExponential","gfn3","gfn4","V","log","abs","LOG10E","_general_num","general_fmt","_general","fix_hijri","parse_date_code","b2","dow","dout","T","H","S","date1904","setDate","getDay","write_date","fmt","ss0","ss","outl","commaify","write_num","make_write_num","pct1","write_num_pct","sfmt","mul","write_num_cm","idx","write_num_exp","period","fakee","$$","$1","$2","$3","frac1","write_num_f1","aval","sign","den","parseInt","rr","myn","myd","write_num_f2","dec1","closeparen","phone","hashq","cc","rnd","dd","flr","write_num_flt","ffmt","oo","ri","ff","oa","lres","rres","write_num_cm2","write_num_pct2","write_num_exp2","write_num_int","split_fmt","in_str","_split","abstime","eval_fmt","flen","lst","dt","hr","bt","ssm","nstr","vv","myv","ostr","decpt","lasti","retval","_eval","cfregex","cfregex2","chkcond","thresh","parseFloat","choose_fmt","lat","m1","m2","format","_table","load_entry","get_table","load_table","tbl","XLMLFormatMap","General Number","General Date","Long Date","Medium Date","Short Date","Long Time","Medium Time","Short Time","Currency","Fixed","Standard","Percent","Scientific","Yes/No","True/False","On/Off","DO_NOT_EXPORT_CFB","CFB","_CFB","parse","mver","ssz","nmfs","ndfs","dir_start","minifat_start","difat_start","fat_addrs","prep_blob","mv","check_get_mver","check_shifts","nds","read_shift","chk","sectors","sectorify","sleuth_fat","sector_list","make_sector_list","ENDOFCHAIN","Paths","FileIndex","FullPaths","FullPathDir","read_directory","build_full_paths","root_name","find_path","make_find_path","find","HEADER_SIGNATURE","HEADER_CLSID","nsectors","ceil","FI","FPD","FP","L","R","pl","dad","UCFullPaths","UCPaths","UCPath","cnt","sector","__readInt32LE","get_sector_list","chkd","sl","buf_chain","modulus","addr","nodes","__toBuffer","minifat_store","namelen","ctime","mtime","__utf16le","color","clsid","ct","read_date","mt","storage","MSSZ","__readUInt32LE","fs","readFileSync","readSync","consts","MAXREGSECT","DIFSECT","FATSECT","FREESECT","HEADER_MINOR_VERSION","MAXREGSID","NOSTREAM","EntryTypes","read","ReadShift","CheckField","isval","evert_key","key","K","evert","evert_num","evert_arr","datenum","epoch","cc2str","arr","getdata","safegetzipfile","lowerCaseFiles","getzipfile","getzipdata","safe","_fs","jszip","attregexg","tagregex","nsregex","nsregex2","parsexmltag","tag","skip_root","z","eq","strip_ns","encodings","&quot;","&apos;","&gt;","&lt;","&amp;","rencoding","rencstr","unescapexml","encregex","coderegex","decregex","charegex","escapexml","xlml_fixstr","entregex","entrepl","parsexmlbool","utf8read","utf8reada","orig","utf8readb","corpus","utf8readc","matchtag","mtcache","g","RegExp","vtregex","vt_cache","vt_regex","vtvregex","vtmregex","parseVector","baseType","wtregex","writetag","wxt_helper","writextag","write_w3cdtf","toISOString","write_vt","XML_HEADER","XMLNS","dc","dcterms","dcmitype","mx","sjs","vt","xsi","xsd","main","readIEEE754","isLE","nl","ml","el","eMax","eBias","NaN","Infinity","___toBuffer","toBuffer_","___utf16le","utf16le_","__readUInt16LE","__hexlify","___hexlify","hexlify_","__utf8","___utf8","__readUInt8","__lpstr","___lpstr","lpstr_","__lpwstr","___lpwstr","lpwstr_","__double","___double","is_buf","is_buf_a","utf16le_b","lpstr_b","readUInt32LE","lpwstr_b","utf8_b","double_","readDoubleLE","is_buf_b","__readInt16LE","___unhexlify","__unhexlify","oI","oR","loc","WriteShift","writeUInt16LE","writeUInt32LE","writeDoubleLE","writeInt32LE","hexstr","fld","write_shift","parsenoop","writenoop","new_buf","sz","recordhopper","cb","tmpbyte","cntbyte","RT","XLSBRecordEnum","buf_array","blksz","newblk","ba_newblk","curbuf","endbuf","ba_endbuf","ba_next","ba_end","ba_push","_bufs","write_record","ba","payload","evert_RE","shift_cell_xls","cell","tgt","cRel","rRel","shift_range_xls","range","OFFCRYPTO","make_offcrypto","O","_crypto","crypto","rc4","md5","createHash","update","digest","parse_StrRun","ich","ifnt","parse_RichStr","parse_XLWideString","rgsStrRun","dwSizeStrRun","write_RichStr","write_XLWideString","parse_XLSBCell","col","iStyleRef","fPhShow","write_XLSBCell","parse_XLSBCodeName","parse_XLNullableWideString","cchCharacters","write_XLNullableWideString","parse_RelID","write_RelID","parse_RkNumber","fX100","fInt","RK","parse_UncheckedRfX","write_UncheckedRfX","parse_Xnum","write_Xnum","BErr","42","43","255","RBErr","parse_BrtColor","fValidRGB","xColorType","nTintAndShade","bRed","bGreen","bBlue","bAlpha","parse_FontFlags","fItalic","fStrikeout","fOutline","fShadow","fCondense","fExtend","VT_EMPTY","VT_NULL","VT_I2","VT_I4","VT_R4","VT_R8","VT_CY","VT_DATE","VT_BSTR","VT_ERROR","VT_BOOL","VT_VARIANT","VT_DECIMAL","VT_I1","VT_UI1","VT_UI2","VT_UI4","VT_I8","VT_UI8","VT_INT","VT_UINT","VT_LPSTR","VT_LPWSTR","VT_FILETIME","VT_BLOB","VT_STREAM","VT_STORAGE","VT_STREAMED_Object","VT_STORED_Object","VT_BLOB_Object","VT_CF","VT_CLSID","VT_VERSIONED_STREAM","VT_VECTOR","VT_ARRAY","VT_STRING","VT_USTR","VT_CUSTOM","DocSummaryPIDDSI","SummaryPIDSI","SpecialProperties","2147483648","2147483651","1919054434","CountryEnum","41","44","52","55","61","64","66","81","82","84","86","90","105","213","216","218","351","354","358","420","886","961","962","963","964","965","966","971","972","974","981","XLSFillPattern","rgbify","XLSIcv","ct2type","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml","application/vnd.ms-excel.binIndexWs","application/vnd.ms-excel.chartsheet","application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml","application/vnd.ms-excel.dialogsheet","application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml","application/vnd.ms-excel.macrosheet","application/vnd.ms-excel.macrosheet+xml","application/vnd.ms-excel.intlmacrosheet","application/vnd.ms-excel.binIndexMs","application/vnd.openxmlformats-package.core-properties+xml","application/vnd.openxmlformats-officedocument.custom-properties+xml","application/vnd.openxmlformats-officedocument.extended-properties+xml","application/vnd.openxmlformats-officedocument.customXmlProperties+xml","application/vnd.ms-excel.comments","application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml","application/vnd.ms-excel.pivotTable","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml","application/vnd.ms-excel.calcChain","application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml","application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings","application/vnd.ms-office.activeX","application/vnd.ms-office.activeX+xml","application/vnd.ms-excel.attachedToolbars","application/vnd.ms-excel.connections","application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml","application/vnd.ms-excel.externalLink","application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml","application/vnd.ms-excel.sheetMetadata","application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml","application/vnd.ms-excel.pivotCacheDefinition","application/vnd.ms-excel.pivotCacheRecords","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml","application/vnd.ms-excel.queryTable","application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml","application/vnd.ms-excel.userNames","application/vnd.ms-excel.revisionHeaders","application/vnd.ms-excel.revisionLog","application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml","application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml","application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml","application/vnd.ms-excel.tableSingleCells","application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml","application/vnd.ms-excel.slicer","application/vnd.ms-excel.slicerCache","application/vnd.ms-excel.slicer+xml","application/vnd.ms-excel.slicerCache+xml","application/vnd.ms-excel.wsSortMap","application/vnd.ms-excel.table","application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml","application/vnd.openxmlformats-officedocument.theme+xml","application/vnd.ms-excel.Timeline+xml","application/vnd.ms-excel.TimelineCache+xml","application/vnd.ms-office.vbaProject","application/vnd.ms-office.vbaProjectSignature","application/vnd.ms-office.volatileDependencies","application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml","application/vnd.ms-excel.controlproperties+xml","application/vnd.openxmlformats-officedocument.model+data","application/vnd.ms-excel.Survey+xml","application/vnd.openxmlformats-officedocument.drawing+xml","application/vnd.openxmlformats-officedocument.drawingml.chart+xml","application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml","application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml","application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml","application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml","application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml","application/vnd.openxmlformats-officedocument.vmlDrawing","application/vnd.openxmlformats-package.relationships+xml","application/vnd.openxmlformats-officedocument.oleObject","sheet","CT_LIST","workbooks","xlsx","xlsm","xlsb","xltx","strs","sheets","styles","type2ct","CT","parse_ct","ctext","calcchains","themes","coreprops","extprops","custprops","comments","vba","TODO","rels","xmlns","Extension","ContentType","PartName","WTF","console","error","calcchain","sst","style","CTYPE_XML_ROOT","xmlns:xsd","xmlns:xsi","CTYPE_DEFAULTS","write_ct","f1","bookType","f2","f3","RELS","WB","SHEET","parse_rels","currentFilePath","hash","resolveRelativePathIntoAbsolute","toksFrom","pop","toksTo","reversed","tokTo","rel","Type","Target","Id","TargetMode","canonictarget","RELS_ROOT","write_rels","rid","CORE_PROPS","CORE_PROPS_REGEX","parse_core_props","cur","CORE_PROPS_XML_ROOT","xmlns:cp","xmlns:dc","xmlns:dcterms","xmlns:dcmitype","cp_doit","write_core_props","Props","title","subject","creator","keywords","description","CreatedDate","xsi:type","ModifiedDate","EXT_PROPS","parse_ext_props","HeadingPairs","TitlesOfParts","widx","Worksheets","parts","SheetNames","EXT_PROPS_XML_ROOT","xmlns:vt","write_ext_props","W","Application","CUST_PROPS","custregex","parse_cust_props","xmlnsvt","toks","warn","CUST_PROPS_XML_ROOT","write_cust_props","pid","custprop","fmtid","xlml_set_prop","parse_FILETIME","dwLowDateTime","dwHighDateTime","parse_lpstr","pad","parse_lpwstr","parse_VtStringBase","stringType","parse_VtString","parse_VtUnalignedString","parse_VtVecUnalignedLpstrValue","parse_VtVecUnalignedLpstr","parse_VtHeadingPair","headingString","parse_TypedPropertyValue","headerParts","parse_VtVecHeadingPairValue","cElements","parse_VtVecHeadingPair","parse_dictionary","CodePage","dict","parse_BLOB","parse_ClipboardData","Size","parse_VtVector","_opts","parse_PropertySet","PIDSI","start_addr","NumProps","Dictionary","DictObj","PropID","Offset","PropH","fail","piddsi","oldpos","parsebool","parse_PropertySetStream","NumSets","FMTID0","FMTID1","Offset0","Offset1","vers","SystemIdentifier","PSet0","rval","FMTID","PSet1","parsenoop2","parslurp","target","parslurp2","parseuint16","parseuint16a","parse_Boolean","parse_Bes","parse_ShortXLUnicodeString","cch","width","biff","fHighByte","parse_XLUnicodeRichExtendedString","fExtSt","fRichSt","cRun","cbExtRst","parse_XLUnicodeStringNoCch","parse_XLUnicodeString","parse_XLUnicodeString2","parse_ControlInfo","parse_URLMoniker","url","parse_FileMoniker","cAnti","ansiLength","ansiPath","endServer","versionNumber","cbUnicodePathSize","cbUnicodePathBytes","usKeyValue","unicodePath","parse_HyperlinkMoniker","parse_HyperlinkString","parse_Hyperlink","sVer","displayName","targetFrameName","moniker","oleMoniker","location","guid","fileTime","parse_LongRGBA","parse_LongRGB","parse_XLSCell","rw","ixfe","parse_frtHeader","rt","parse_OptXLUnicodeString","HIDEOBJENUM","parse_HideObjEnum","parse_XTI","iSupBook","itabFirst","itabLast","parse_RkRec","parse_AddinUdf","udfName","parse_Ref8U","rwFirst","rwLast","colFirst","colLast","parse_RefU","parse_Ref","parse_FtCmo","ot","parse_FtNts","fSharedNote","parse_FtCf","cf","FtTab","parse_FtArray","fts","ft","parse_FontIndex","parse_BOF","BIFFVer","parse_InterfaceHdr","parse_WriteAccess","UserName","parse_BoundSheet8","hidden","hs","parse_SST","ucnt","Count","Unique","parse_ExtSST","extsst","dsst","parse_Row","Col","rht","parse_ForceFullCalculation","fullcalc","parse_CompressPictures","parse_RecalcId","parse_DefaultRowHeight","miyRw","fl","Unsynced","DyZero","ExAsc","ExDsc","parse_Window1","xWn","yWn","dxWn","dyWn","iTabCur","iTabFirst","ctabSel","wTabRatio","Pos","Dim","Flags","CurTab","FirstTab","Selected","TabRatio","parse_Font","parse_LabelSst","isst","parse_Label","parse_Format","ifmt","fmtstr","parse_Dimensions","parse_RK","rkrec","rknum","parse_MulRk","rkrecs","lastcol","parse_CellStyleXF","patternType","icvFore","icvBack","parse_CellXF","parse_StyleXF","parse_XF","fStyle","parse_Guts","parse_BoolErr","parse_Number","xnum","parse_XLHeaderFooter","parse_SupBook","ctab","virtPath","rgst","sbcch","parse_ExternName","body","fBuiltIn","fWantAdvise","fWantPict","fOle","fOleLink","fIcon","parse_Lbl","chKey","cce","itab","rgce","parse_NameParsedFormula","Name","parse_ExternSheet","snames","parse_ShrFmla","ref","cUse","parse_SharedParsedFormula","parse_Array","parse_ArrayParsedFormula","parse_MTRSettings","fMTREnabled","fUserSetThreadCount","cUserThreadCount","parse_NoteSh","row","idObj","stAuthor","parse_Note","parse_MergeCells","merges","cmcs","parse_Obj","cmo","parse_TxO","lastobj","controlInfo","cchText","cbRuns","ifntEmpty","texts","hdr","parse_HLink","hlink","parse_HLinkTooltip","wzTooltip","parse_Country","parse_ClrtClient","ccv","parse_Palette","parse_XFCRC","cxfs","parse_Style","parse_StyleExt","parse_ColInfo","parse_Window2","parse_Backup","parse_Blank","parse_BottomMargin","parse_BuiltInFnGroupCount","parse_CalcCount","parse_CalcDelta","parse_CalcIter","parse_CalcMode","parse_CalcPrecision","parse_CalcRefMode","parse_CalcSaveRecalc","parse_CodePage","parse_Compat12","parse_Date1904","parse_DefColWidth","parse_DSF","parse_EntExU2","parse_EOF","parse_Excel9File","parse_FeatHdr","parse_FontX","parse_Footer","parse_GridSet","parse_HCenter","parse_Header","parse_HideObj","parse_InterfaceEnd","parse_LeftMargin","parse_Mms","parse_ObjProtect","parse_Password","parse_PrintGrid","parse_PrintRowCol","parse_PrintSize","parse_Prot4Rev","parse_Prot4RevPass","parse_Protect","parse_RefreshAll","parse_RightMargin","parse_RRTabId","parse_ScenarioProtect","parse_Scl","parse_String","parse_SxBool","parse_TopMargin","parse_UsesELFs","parse_VCenter","parse_WinProtect","parse_WriteProtect","parse_VerticalPageBreaks","parse_HorizontalPageBreaks","parse_Selection","parse_Continue","parse_Pane","parse_Pls","parse_DCon","parse_DConRef","parse_DConName","parse_XCT","parse_CRN","parse_FileSharing","parse_Uncalced","parse_Template","parse_Intl","parse_WsBool","parse_Sort","parse_Sync","parse_LPr","parse_DxGCol","parse_FnGroupName","parse_FilterMode","parse_AutoFilterInfo","parse_AutoFilter","parse_Setup","parse_ScenMan","parse_SCENARIO","parse_SxView","parse_Sxvd","parse_SXVI","parse_SxIvd","parse_SXLI","parse_SXPI","parse_DocRoute","parse_RecipName","parse_MulBlank","parse_SXDI","parse_SXDB","parse_SXFDB","parse_SXDBB","parse_SXNum","parse_SxErr","parse_SXInt","parse_SXString","parse_SXDtr","parse_SxNil","parse_SXTbl","parse_SXTBRGIITM","parse_SxTbpg","parse_ObProj","parse_SXStreamID","parse_DBCell","parse_SXRng","parse_SxIsxoper","parse_BookBool","parse_DbOrParamQry","parse_OleObjectSize","parse_SXVS","parse_BkHim","parse_MsoDrawingGroup","parse_MsoDrawing","parse_MsoDrawingSelection","parse_PhoneticInfo","parse_SxRule","parse_SXEx","parse_SxFilt","parse_SxDXF","parse_SxItm","parse_SxName","parse_SxSelect","parse_SXPair","parse_SxFmla","parse_SxFormat","parse_SXVDEx","parse_SXFormula","parse_SXDBEx","parse_RRDInsDel","parse_RRDHead","parse_RRDChgCell","parse_RRDRenSheet","parse_RRSort","parse_RRDMove","parse_RRFormat","parse_RRAutoFmt","parse_RRInsertSh","parse_RRDMoveBegin","parse_RRDMoveEnd","parse_RRDInsDelBegin","parse_RRDInsDelEnd","parse_RRDConflict","parse_RRDDefName","parse_RRDRstEtxp","parse_LRng","parse_CUsr","parse_CbUsr","parse_UsrInfo","parse_UsrExcl","parse_FileLock","parse_RRDInfo","parse_BCUsrs","parse_UsrChk","parse_UserBView","parse_UserSViewBegin","parse_UserSViewEnd","parse_RRDUserView","parse_Qsi","parse_CondFmt","parse_CF","parse_DVal","parse_DConBin","parse_Lel","parse_XLSCodeName","parse_SXFDBType","parse_ObNoMacros","parse_Dv","parse_Index","parse_Table","parse_BigName","parse_ContinueBigName","parse_WebPub","parse_QsiSXTag","parse_DBQueryExt","parse_ExtString","parse_TxtQry","parse_Qsir","parse_Qsif","parse_RRDTQSIF","parse_OleDbConn","parse_WOpt","parse_SXViewEx","parse_SXTH","parse_SXPIEx","parse_SXVDTEx","parse_SXViewEx9","parse_ContinueFrt","parse_RealTimeData","parse_ChartFrtInfo","parse_FrtWrapper","parse_StartBlock","parse_EndBlock","parse_StartObject","parse_EndObject","parse_CatLab","parse_YMult","parse_SXViewLink","parse_PivotChartBits","parse_FrtFontList","parse_SheetExt","parse_BookExt","parse_SXAddl","parse_CrErr","parse_HFPicture","parse_Feat","parse_DataLabExt","parse_DataLabExtContents","parse_CellWatch","parse_FeatHdr11","parse_Feature11","parse_DropDownObjIds","parse_ContinueFrt11","parse_DConn","parse_List12","parse_Feature12","parse_CondFmt12","parse_CF12","parse_CFEx","parse_AutoFilter12","parse_ContinueFrt12","parse_MDTInfo","parse_MDXStr","parse_MDXTuple","parse_MDXSet","parse_MDXProp","parse_MDXKPI","parse_MDB","parse_PLV","parse_DXF","parse_TableStyles","parse_TableStyle","parse_TableStyleElement","parse_NamePublish","parse_NameCmt","parse_SortData","parse_GUIDTypeLib","parse_FnGrp12","parse_NameFnGrp12","parse_HeaderFooter","parse_CrtLayout12","parse_CrtMlFrt","parse_CrtMlFrtContinue","parse_ShapePropsStream","parse_TextPropsStream","parse_RichTextStream","parse_CrtLayout12A","parse_Units","parse_Chart","parse_Series","parse_DataFormat","parse_LineFormat","parse_MarkerFormat","parse_AreaFormat","parse_PieFormat","parse_AttachedLabel","parse_SeriesText","parse_ChartFormat","parse_Legend","parse_SeriesList","parse_Bar","parse_Line","parse_Pie","parse_Area","parse_Scatter","parse_CrtLine","parse_Axis","parse_Tick","parse_ValueRange","parse_CatSerRange","parse_AxisLine","parse_CrtLink","parse_DefaultText","parse_Text","parse_ObjectLink","parse_Frame","parse_Begin","parse_End","parse_PlotArea","parse_Chart3d","parse_PicF","parse_DropBar","parse_Radar","parse_Surf","parse_RadarArea","parse_AxisParent","parse_LegendException","parse_ShtProps","parse_SerToCrt","parse_AxesUsed","parse_SBaseRef","parse_SerParent","parse_SerAuxTrend","parse_IFmtRecord","parse_Pos","parse_AlRuns","parse_BRAI","parse_SerAuxErrBar","parse_SerFmt","parse_Chart3DBarShape","parse_Fbi","parse_BopPop","parse_AxcExt","parse_Dat","parse_PlotGrowth","parse_SIIndex","parse_GelFrame","parse_BopPopCustom","parse_Fbi2","parse_BIFF5String","parse_BIFF2STR","parse_BIFF2NUM","num","CS2CP","77","128","129","130","134","136","161","162","163","177","178","186","204","222","238","69","parse_rs","parse_rs_factory","tregex","rpregex","rregex","rend","nlregex","parse_rpr","rpr","intro","outro","font","strike","rgb","family","parse_r","terms","rs","sitregex","sirregex","parse_si","html","cellHTML","sstr0","sstr1","sstr2","parse_sst_xml","uniqueCount","SST","straywsregex","write_sst_xml","bookSST","sitag","parse_BrtBeginSst","parse_sst_bin","pass","hopper_sst","write_BrtBeginSst","write_BrtSSTItem","write_sst_bin","_JS2ANSI","parse_Version","Major","Minor","parse_EncryptionHeader","tmp","AlgID","parse_EncryptionVerifier","parse_RC4CryptoHeader","EncryptionVersionInfo","EncryptionHeader","EncryptionVerifier","parse_RC4Header","Salt","EncryptedVerifier","EncryptedVerifierHash","crypto_CreatePasswordVerifier_Method1","Password","Verifier","PasswordArray","PasswordDecoded","PasswordByte","Intermediate1","Intermediate2","Intermediate3","crypto_CreateXorArray_Method1","PadArray","InitialCode","XorMatrix","Ror","Byte","XorRor","byte1","byte2","CreateXorKey_Method1","XorKey","CurrentElement","Char","password","Index","ObfuscationArray","Temp","PasswordLastChar","PadIndex","crypto_DecryptData_Method1","Data","XorArrayIndex","XorArray","Value","crypto_MakeXorDecryptor","parse_XORObfuscation","verificationBytes","verifier","valid","insitu_decrypt","parse_FilePassHeader","Info","parse_FilePass","hex2RGB","rgb2Hex","rgb2HSL","G","H6","L2","hsl2RGB","hsl","h6","X","rgb_tint","tint","rev","DEF_MDW","MAX_MDW","MIN_MDW","MDW","width2px","px2char","px","char2width","chr","cycle_width","collw","find_mdw","coll","XLMLPatternTypeMap","None","Solid","Gray50","Gray75","Gray25","HorzStripe","VertStripe","ReverseDiagStripe","DiagStripe","DiagCross","ThickDiagCross","ThinHorzStripe","ThinVertStripe","ThinReverseDiagStripe","ThinHorzCross","parse_fills","Fills","bgColor","indexed","theme","themeElements","clrScheme","raw_rgb","fgColor","parse_fonts","Fonts","bold","underline","italic","outline","shadow","vertAlign","parse_borders","Borders","border","sub_border","diagonalUp","diagonalDown","right","bottom","diagonal","auto","parse_numFmts","NumberFmt","formatCode","numFmtId","write_numFmts","NF","parse_cellXfs","CellXf","xf","fillId","alignment","vertical","horizontal","textRotation","indent","wrapText","write_cellXfs","cellXfs","parse_sty_xml","make_pstyx","numFmtRegex","cellXfRegex","fillsRegex","bordersRegex","STYLES_XML_ROOT","STY","write_sty_xml","wb","style_builder","toXml","parse_BrtFmt","stFmtCode","parse_BrtFont","dyHeight","grbit","bls","sss","uls","bFamily","bCharSet","brtColor","bFontScheme","Bold","Italic","Strikeout","Outline","Shadow","Condense","Extend","Sub","Sup","parse_BrtXF","ixfeParent","parse_sty_bin","hopper_sty","write_sty_bin","THEME","parse_clrScheme","lastClr","parse_fontScheme","parse_fmtScheme","clrsregex","fntsregex","fmtsregex","parse_themeElements","themeltregex","parse_theme_xml","write_theme","themeXml","parse_Theme","dwThemeVersion","parse_ColorTheme","parse_FullColorExt","xclrType","nTintShade","xclrValue","parse_IcvXF","parse_XFExtGradient","parse_ExtProp","extType","parse_XFExt","cexts","ext","update_xfext","xfext","xfe","parse_cc_xml","write_cc_xml","parse_BrtCalcChainItem$","encode_cell","parse_cc_bin","hopper_cc","write_cc_bin","parse_comments","dirComments","sheetRels","canonicalpath","parse_cmnt","sheetNames","sheetName","insertCommentsIntoSheet","safe_decode_range","thisCell","decode_cell","encoded","encode_range","author","parse_comments_xml","authors","commentList","trim","authorId","sheetRows","textMatch","write_comments_xml","parse_BrtBeginComment","iauthor","rfx","parse_BrtCommentAuthor","parse_BrtCommentText","parse_comments_bin","hopper_cmnt","write_comments_bin","rc_to_a1","rcregex","rcbase","rcfunc","$4","$5","encode_col","encode_row","fstr","parseread","parseread1","parse_ColRelU","parse_RgceArea","parse_RgceAreaRel","parse_RgceLoc","parse_RgceLocRel","cl","parse_PtgArea","area","parse_PtgArea3d","ixti","parse_PtgAreaErr","parse_PtgAreaErr3d","parse_PtgAreaN","parse_PtgArray","parse_PtgAttrBaxcel","bitSemi","bitBaxcel","parse_PtgAttrChoose","parse_PtgAttrGoto","bitGoto","parse_PtgAttrIf","bitIf","parse_PtgAttrSemi","parse_PtgAttrSpaceType","parse_PtgAttrSpace","parse_PtgAttrSpaceSemi","parse_PtgRef","ptg","parse_PtgRefN","parse_PtgRef3d","parse_PtgFunc","iftab","FtabArgc","Ftab","parse_PtgFuncVar","cparams","tab","parsetab","Cetab","parse_PtgAttrSum","parse_PtgConcat","parse_PtgExp","parse_PtgErr","parse_PtgInt","parse_PtgBool","parse_PtgNum","parse_PtgStr","parse_SerAr","parse_PtgExtraMem","parse_PtgExtraArray","cols","rows","parse_PtgName","nameindex","parse_PtgNameX","parse_PtgMemArea","parse_PtgMemFunc","parse_PtgRefErr","parse_PtgAdd","parse_PtgDiv","parse_PtgEq","parse_PtgGe","parse_PtgGt","parse_PtgIsect","parse_PtgLe","parse_PtgLt","parse_PtgMissArg","parse_PtgMul","parse_PtgNe","parse_PtgParen","parse_PtgPercent","parse_PtgPower","parse_PtgRange","parse_PtgSub","parse_PtgUminus","parse_PtgUnion","parse_PtgUplus","parse_PtgMemErr","parse_PtgMemNoMem","parse_PtgRefErr3d","parse_PtgTbl","PtgTypes","57","58","59","60","PtgDupes","96","65","97","98","67","99","68","100","101","70","102","71","103","72","104","73","74","106","75","107","76","108","109","89","121","122","91","123","92","124","93","125","Ptg18","Ptg19","parse_Formula","parse_FormulaValue","chn","cbf","parse_XLSCellParsedFormula","formula","shared","parse_RgbExtra","parse_Rgce","rgcb","ptgs","mapper","stringify_formula","supbooks","_range","stack","nameidx","fflen","argc","args","lbl","XLSXFutureFunctions","bookidx","externbook","sharedf","parsedf","fnd","arrayf","parse_XLSBCellParsedFormula","PtgDataType","50","51","53","54","62","63","78","79","80","83","85","87","88","94","95","110","111","112","113","114","115","116","117","118","119","120","126","127","131","132","133","135","137","138","139","140","142","143","144","145","146","147","148","149","150","151","152","153","155","159","164","166","167","168","169","170","171","172","173","174","175","185","187","188","189","190","191","192","193","194","195","196","197","198","199","200","201","202","203","206","207","208","209","210","211","212","214","215","217","219","220","223","224","225","226","227","228","229","240","243","249","250","251","252","253","254","256","259","260","265","266","267","268","269","272","273","274","276","277","278","279","280","281","282","283","284","285","288","289","290","291","292","293","295","296","297","298","302","305","306","307","308","309","310","311","312","313","314","315","316","318","319","320","321","322","323","324","325","328","330","336","338","339","342","343","344","350","352","355","356","370","373","374","375","376","377","378","379","380","381","382","383","384","385","386","388","390","391","392","393","394","395","396","397","398","399","400","412","413","414","415","416","417","421","422","423","424","425","430","431","432","433","434","435","436","437","438","439","440","441","442","443","444","445","446","447","448","449","450","451","452","453","454","455","456","458","459","460","461","462","463","464","465","466","467","468","469","470","471","472","473","474","475","476","477","478","480","481","482","485","489","491","493","494","495","509","510","511","517","518","519","520","521","522","523","545","546","547","548","549","620","621","647","653","667","673","753","755","808","141","154","156","157","158","160","165","176","179","180","181","182","183","184","205","221","230","231","232","233","234","235","236","237","239","241","242","244","245","246","247","248","257","258","261","262","263","264","270","271","275","286","287","294","299","300","301","303","304","317","326","327","329","331","332","334","335","337","340","341","345","346","347","348","349","353","357","359","360","361","362","363","364","365","366","367","368","369","371","372","_xlfn.ACOT","_xlfn.ACOTH","_xlfn.AGGREGATE","_xlfn.ARABIC","_xlfn.AVERAGEIF","_xlfn.AVERAGEIFS","_xlfn.BASE","_xlfn.BETA.DIST","_xlfn.BETA.INV","_xlfn.BINOM.DIST","_xlfn.BINOM.DIST.RANGE","_xlfn.BINOM.INV","_xlfn.BITAND","_xlfn.BITLSHIFT","_xlfn.BITOR","_xlfn.BITRSHIFT","_xlfn.BITXOR","_xlfn.CEILING.MATH","_xlfn.CEILING.PRECISE","_xlfn.CHISQ.DIST","_xlfn.CHISQ.DIST.RT","_xlfn.CHISQ.INV","_xlfn.CHISQ.INV.RT","_xlfn.CHISQ.TEST","_xlfn.COMBINA","_xlfn.CONFIDENCE.NORM","_xlfn.CONFIDENCE.T","_xlfn.COT","_xlfn.COTH","_xlfn.COUNTIFS","_xlfn.COVARIANCE.P","_xlfn.COVARIANCE.S","_xlfn.CSC","_xlfn.CSCH","_xlfn.DAYS","_xlfn.DECIMAL","_xlfn.ECMA.CEILING","_xlfn.ERF.PRECISE","_xlfn.ERFC.PRECISE","_xlfn.EXPON.DIST","_xlfn.F.DIST","_xlfn.F.DIST.RT","_xlfn.F.INV","_xlfn.F.INV.RT","_xlfn.F.TEST","_xlfn.FILTERXML","_xlfn.FLOOR.MATH","_xlfn.FLOOR.PRECISE","_xlfn.FORMULATEXT","_xlfn.GAMMA","_xlfn.GAMMA.DIST","_xlfn.GAMMA.INV","_xlfn.GAMMALN.PRECISE","_xlfn.GAUSS","_xlfn.HYPGEOM.DIST","_xlfn.IFNA","_xlfn.IFERROR","_xlfn.IMCOSH","_xlfn.IMCOT","_xlfn.IMCSC","_xlfn.IMCSCH","_xlfn.IMSEC","_xlfn.IMSECH","_xlfn.IMSINH","_xlfn.IMTAN","_xlfn.ISFORMULA","_xlfn.ISO.CEILING","_xlfn.ISOWEEKNUM","_xlfn.LOGNORM.DIST","_xlfn.LOGNORM.INV","_xlfn.MODE.MULT","_xlfn.MODE.SNGL","_xlfn.MUNIT","_xlfn.NEGBINOM.DIST","_xlfn.NETWORKDAYS.INTL","_xlfn.NIGBINOM","_xlfn.NORM.DIST","_xlfn.NORM.INV","_xlfn.NORM.S.DIST","_xlfn.NORM.S.INV","_xlfn.NUMBERVALUE","_xlfn.PDURATION","_xlfn.PERCENTILE.EXC","_xlfn.PERCENTILE.INC","_xlfn.PERCENTRANK.EXC","_xlfn.PERCENTRANK.INC","_xlfn.PERMUTATIONA","_xlfn.PHI","_xlfn.POISSON.DIST","_xlfn.QUARTILE.EXC","_xlfn.QUARTILE.INC","_xlfn.QUERYSTRING","_xlfn.RANK.AVG","_xlfn.RANK.EQ","_xlfn.RRI","_xlfn.SEC","_xlfn.SECH","_xlfn.SHEET","_xlfn.SHEETS","_xlfn.SKEW.P","_xlfn.STDEV.P","_xlfn.STDEV.S","_xlfn.SUMIFS","_xlfn.T.DIST","_xlfn.T.DIST.2T","_xlfn.T.DIST.RT","_xlfn.T.INV","_xlfn.T.INV.2T","_xlfn.T.TEST","_xlfn.UNICHAR","_xlfn.UNICODE","_xlfn.VAR.P","_xlfn.VAR.S","_xlfn.WEBSERVICE","_xlfn.WEIBULL.DIST","_xlfn.WORKDAY.INTL","_xlfn.XOR","_xlfn.Z.TEST","_ssfopts","WS","get_sst_id","get_cell_style","exec","numFmt","addStyle","revssf","fontId","borderId","xfId","applyNumberFormat","get_cell_style_csf","cellXf","applyAlignment","JSON","stringify","safe_format","fillid","cellNF","parse_ws_xml_dim","ws","mergecregex","sheetdataregex","hlinkregex","dimregex","colregex","parse_ws_xml","ridx","mergecells","columns","cellStyles","parse_ws_xml_cols","refguess","mtch","parse_ws_xml_data","parse_ws_xml_hlinks","tmpref","write_ws_xml_merges","write_ws_xml_pagesetup","setup","pageSetup","scale","orientation","horizontalDpi","verticalDpi","Rel","rng","seencol","coli","colm","colM","wpx","wch","write_ws_xml_cols","customWidth","write_ws_xml_cell","oldt","oldv","cellDates","Strings","parse_ws_xml_data_factory","cellregex","rowregex","isregex","match_v","match_f","sdata","guess","cells","cref","tagr","tagc","sstr","do_format","marr","marrlen","xlen","cellFormula","sheetStubs","write_ws_xml_data","WS_XML_ROOT","xmlns:r","write_ws_xml","sidx","rdata","Sheets","pane","selection","activeCell","sqref","sheetView","showGridLines","tabSelected","workbookViewId","write_ws_xml_row_breaks","write_ws_xml_col_breaks","breaks","brk","thisBreak","nextBreak","man","manualBreakCount","parse_BrtRowHdr","parse_BrtWsDim","write_BrtWsDim","parse_BrtWsProp","parse_BrtCellBlank","write_BrtCellBlank","parse_BrtCellBool","fBool","parse_BrtCellError","parse_BrtCellIsst","parse_BrtCellReal","parse_BrtCellRk","parse_BrtCellSt","parse_BrtFmlaBool","parse_BrtFmlaError","parse_BrtFmlaNum","parse_BrtFmlaString","parse_BrtMergeCell","parse_BrtHLink","relId","tooltip","display","parse_ws_bin","!id","ws_parse","write_ws_bin_cell","write_CELLTABLE","write_ws_bin","WBPropsDef","WBViewDef","SheetDef","CalcPrDef","CustomWBViewDef","push_defaults_array","push_defaults","parse_wb_defaults","WBProps","CalcPr","WBView","wbnsregex","parse_wb_xml","AppVersion","xml_wb","WB_XML_ROOT","safe1904","Workbook","write_wb_xml","sheetId","r:id","hasPrintHeaders","printHeader","printColumns","localSheetId","parse_BrtBundleSh","hsState","iTabID","strRelID","write_BrtBundleSh","parse_BrtWbProp","strName","write_BrtWbProp","parse_BrtFRTArchID$","ArchID","parse_wb_bin","hopper_wb","write_BUNDLESHS","write_BrtFileVersion","write_BOOKVIEWS","write_BrtCalcProp","write_BrtFileRecover","write_wb_bin","parse_wb","parse_ws","parse_sty","parse_theme","parse_sst","parse_cc","write_wb","write_ws","write_sty","write_sst","attregexg2","attregex2","_chr","xlml_parsexmltag","words","xlml_parsexmltagobj","xlml_format","xlml_set_custprop","Custprops","Rn","safe_format_xlml","nf","process_style_xlml","stag","Interior","I","Pattern","ID","parse_xlml_data","xml","csty","sid","StyleID","interiors","Parent","UTC","Formula","xlml_clean_comment","xlml_normalize","xlmlregex","parse_xlml_xml","sheetnames","cursheet","sheetname","dtag","didx","fidx","pidx","cstys","lastIndex","HRef","HRefScreenTip","MergeAcross","MergeDown","Format","Span","Author","seen","bookSheets","bookProps","parse_xlml","fix_read_opts","write_xlml","parse_compobj","UserType","Reserved1","slurp","XLSRecordEnum","ll","safe_format_xf","XF","make_cell","parse_workbook","Directory","found_sheet","last_formula","cur_sheet","Preamble","lastcell","last_cell","cmnt","rngC","rngR","shared_formulae","array_formulae","temp_val","country","cell_valid","XFs","palette","get_rgb","getrgb","icv","process_cell_style","pcs","line","xfd","addcell","rrtabid","lastuser","codepage","winlocked","wtf","objects","sbc","sbci","sbcli","last_Rn","file_depth","RecordType","Date1904","WriteProtect","RefreshAll","CalcCount","CalcDelta","CalcIter","CalcMode","CalcPrecision","CalcSaveRecalc","CalcRefMode","FullCalc","TxO","noteobj","sheetnamesraw","sort","Number","Encryption","Metadata","Country","parse_xlscfb","cfb","CompObj","Summary","CompObjP","SummaryP","WorkbookP","parse_props","props","DocSummary","bookFiles","DSI","SI","333","387","389","401","403","404","405","406","407","408","409","410","411","418","419","426","427","428","429","457","479","483","484","486","487","488","490","492","496","497","498","499","500","501","502","503","504","505","506","507","508","512","513","514","515","516","524","525","526","527","528","529","530","531","532","533","534","535","536","537","538","539","540","541","542","550","551","552","553","554","555","556","557","558","559","560","561","562","564","565","566","569","570","572","573","574","577","578","579","580","581","582","583","584","585","586","587","588","589","590","591","592","593","594","595","596","597","598","599","600","601","602","603","604","605","606","607","608","609","610","611","612","613","614","615","616","617","618","619","625","626","627","628","629","630","631","632","633","634","635","636","637","638","639","640","641","642","643","644","645","646","648","649","650","651","652","654","655","656","657","658","659","660","661","662","663","664","665","666","668","669","671","672","674","675","676","677","678","679","680","1024","1025","1026","1027","1028","1029","1030","1031","1032","1033","1034","1035","1036","1037","1038","1039","1040","1041","1042","1043","1044","1045","1046","1047","1048","1049","1050","1051","1052","1053","1054","1055","1056","1057","1058","1059","1061","1062","1063","1066","1067","1068","1069","1070","1071","1072","1073","1075","1076","1077","1078","1079","1080","1081","1082","1083","1084","1085","1086","1087","1088","1089","1090","1091","1092","1093","1094","1095","1096","1097","1098","1099","1100","1101","1102","1103","1104","1105","1111","1112","1113","1114","1115","1116","1117","1118","1119","1120","1121","1122","1123","1124","1125","1126","1128","1129","1130","1131","1132","1133","1134","1135","1136","1137","1138","1139","1140","1141","1142","1143","1144","1145","1146","1147","1148","1149","1150","1152","1153","1154","1155","1156","1157","1158","1159","1160","1161","1162","1163","1164","1165","1166","1167","1168","1169","1170","1171","1172","1173","1177","1178","1180","1181","1182","2048","2049","2050","2051","2052","2053","2054","2055","2056","2057","2058","2060","2067","2068","2069","2070","2071","2072","2073","2075","2076","2077","2078","2079","2080","2081","2082","2083","2084","2085","2086","2087","2088","2089","2090","2091","2092","2093","2094","2095","2096","2097","2098","2099","2100","2101","2102","2103","2104","2105","2106","2107","2108","2109","2110","2111","2112","2113","2114","2115","2116","2117","2118","2119","2120","2121","2122","2123","2124","2125","2126","2127","2128","2129","2130","2131","2132","2133","2134","2135","2136","402","1212","2059","2061","2062","2063","2064","2066","2137","2138","2146","2147","2148","2149","2150","2151","2152","2154","2155","2156","2161","2162","2164","2165","2166","2167","2168","2169","2170","2171","2172","2173","2174","2175","2180","2181","2182","2183","2184","2185","2186","2187","2188","2189","2190","2191","2192","2194","2195","2196","2197","2198","2199","2200","2201","2202","2203","2204","2205","2206","2207","2211","2212","2213","2214","2215","4097","4098","4099","4102","4103","4105","4106","4107","4108","4109","4116","4117","4118","4119","4120","4121","4122","4123","4124","4125","4126","4127","4128","4129","4130","4132","4133","4134","4135","4146","4147","4148","4149","4154","4156","4157","4158","4159","4160","4161","4163","4164","4165","4166","4168","4170","4171","4174","4175","4176","4177","4187","4188","4189","4191","4192","4193","4194","4195","4196","4197","4198","4199","4200","2157","2163","2177","2240","2241","2242","2243","2244","2245","2246","2247","2248","2249","2250","2251","parse_ods","ODS","fix_opts_func","fix_opts","fix_write_opts","safe_parse_wbrels","wbrels","pwbr","safe_parse_ws","relsPath","nodirs","parse_zip","entries","binname","propdata","pluck","deps","bookDeps","wbsheets","wbext","wbrelsfile","nmode","Deps","Styles","Themes","bookVBA","vbaraw","bin","add_rels","rId","relobj","write_zip","General","firstbyte","read_zip","isfile","FILENAME","write_zip_type","StyleBuilder","writeFileSync","writeSync","decode_row","rowstr","unfix_row","fix_row","cstr","decode_col","colstr","unfix_col","fix_col","split_cell","splt","fix_cell","unfix_cell","decode_range","cs","ce","safe_format_cell","format_cell","sheet_to_json","isempty","outi","defineProperty","enumerable","__rowNum__","sheet_to_row_object_array","sheet_to_csv","txt","qreg","FS","RS","make_csv","sheet_to_formulae","cmds","get_formulae","make_json","make_formulae","XmlNode","tagName","attributes","children","_attributes","_children","_prefix","createElement","prefix","APOS","QUOTE","ESCAPED_QUOTE","escapeAttributeValue","att_value","customNumFmtId","fmt_table","_hashIndex","_listIndex","initialize","$fonts","$fills","$borders","$numFmts","$cellStyleXfs","$xf","$cellXfs","$cellStyles","$dxfs","$tableStyles","$styles","defaultStyle","defaultCellStyle","gray125Style","addStyles","hashKey","_addXf","_duckTypeStyle","patternFill","_getStyleCSS","css","_addFont","_addFill","_addBorder","_addNumFmt","$alignment","readingOrder","$font","numFmtIdx","$numFmt","$patternFill","$fgColor","$bgColor","$fill","_getSubBorder","direction","spec","$direction","$color","$border","directions","readFile","write","writeFile","XLS"],"mappings":"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AAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,SAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,SAAY,WACpC,WAAY,WAAY,SAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,SACpC,WAAY,WAAY,WAAY,SACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY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","file":"dist/xlsx.full.min.js"}
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/dist/xlsx.js b/Source/UBCS-WEB/src/config/js-xlsx-master/dist/xlsx.js
new file mode 100644
index 0000000..6bca3c6
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/dist/xlsx.js
@@ -0,0 +1,12577 @@
+/* xlsx.js (C) 2013-2015 SheetJS -- http://sheetjs.com */
+/* vim: set ts=2: */
+/*jshint -W041 */
+/*jshint funcscope:true, eqnull:true */
+var XLSX = {};
+(function make_xlsx(XLSX){
+XLSX.version = '0.8.20';
+var current_codepage = 1200, current_cptable;
+if(typeof module !== "undefined" && typeof require !== 'undefined') {
+	if(typeof cptable === 'undefined') cptable = require('./dist/cpexcel');
+	current_cptable = cptable[current_codepage];
+}
+function reset_cp() { set_cp(1200); }
+var set_cp = function(cp) { current_codepage = cp; };
+
+function char_codes(data) { var o = []; for(var i = 0, len = data.length; i < len; ++i) o[i] = data.charCodeAt(i); return o; }
+var debom_xml = function(data) { return data; };
+
+var _getchar = function _gc1(x) { return String.fromCharCode(x); };
+if(typeof cptable !== 'undefined') {
+	set_cp = function(cp) { current_codepage = cp; current_cptable = cptable[cp]; };
+	debom_xml = function(data) {
+		if(data.charCodeAt(0) === 0xFF && data.charCodeAt(1) === 0xFE) { return cptable.utils.decode(1200, char_codes(data.substr(2))); }
+		return data;
+	};
+	_getchar = function _gc2(x) {
+		if(current_codepage === 1200) return String.fromCharCode(x);
+		return cptable.utils.decode(current_codepage, [x&255,x>>8])[0];
+	};
+}
+var Base64 = (function make_b64(){
+	var map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
+	return {
+		encode: function(input, utf8) {
+			var o = "";
+			var c1, c2, c3, e1, e2, e3, e4;
+			for(var i = 0; i < input.length; ) {
+				c1 = input.charCodeAt(i++);
+				c2 = input.charCodeAt(i++);
+				c3 = input.charCodeAt(i++);
+				e1 = c1 >> 2;
+				e2 = (c1 & 3) << 4 | c2 >> 4;
+				e3 = (c2 & 15) << 2 | c3 >> 6;
+				e4 = c3 & 63;
+				if (isNaN(c2)) { e3 = e4 = 64; }
+				else if (isNaN(c3)) { e4 = 64; }
+				o += map.charAt(e1) + map.charAt(e2) + map.charAt(e3) + map.charAt(e4);
+			}
+			return o;
+		},
+		decode: function b64_decode(input, utf8) {
+			var o = "";
+			var c1, c2, c3;
+			var e1, e2, e3, e4;
+			input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
+			for(var i = 0; i < input.length;) {
+				e1 = map.indexOf(input.charAt(i++));
+				e2 = map.indexOf(input.charAt(i++));
+				e3 = map.indexOf(input.charAt(i++));
+				e4 = map.indexOf(input.charAt(i++));
+				c1 = e1 << 2 | e2 >> 4;
+				c2 = (e2 & 15) << 4 | e3 >> 2;
+				c3 = (e3 & 3) << 6 | e4;
+				o += String.fromCharCode(c1);
+				if (e3 != 64) { o += String.fromCharCode(c2); }
+				if (e4 != 64) { o += String.fromCharCode(c3); }
+			}
+			return o;
+		}
+	};
+})();
+var has_buf = (typeof Buffer !== 'undefined');
+
+function new_raw_buf(len) {
+	/* jshint -W056 */
+	return new (has_buf ? Buffer : Array)(len);
+	/* jshint +W056 */
+}
+
+function s2a(s) {
+	if(has_buf) return new Buffer(s, "binary");
+	return s.split("").map(function(x){ return x.charCodeAt(0) & 0xff; });
+}
+
+var bconcat = function(bufs) { return [].concat.apply([], bufs); };
+
+var chr0 = /\u0000/g, chr1 = /[\u0001-\u0006]/;
+/* ssf.js (C) 2013-2014 SheetJS -- http://sheetjs.com */
+/*jshint -W041 */
+var SSF = {};
+var make_ssf = function make_ssf(SSF){
+SSF.version = '0.8.1';
+function _strrev(x) { var o = "", i = x.length-1; while(i>=0) o += x.charAt(i--); return o; }
+function fill(c,l) { var o = ""; while(o.length < l) o+=c; return o; }
+function pad0(v,d){var t=""+v; return t.length>=d?t:fill('0',d-t.length)+t;}
+function pad_(v,d){var t=""+v;return t.length>=d?t:fill(' ',d-t.length)+t;}
+function rpad_(v,d){var t=""+v; return t.length>=d?t:t+fill(' ',d-t.length);}
+function pad0r1(v,d){var t=""+Math.round(v); return t.length>=d?t:fill('0',d-t.length)+t;}
+function pad0r2(v,d){var t=""+v; return t.length>=d?t:fill('0',d-t.length)+t;}
+var p2_32 = Math.pow(2,32);
+function pad0r(v,d){if(v>p2_32||v<-p2_32) return pad0r1(v,d); var i = Math.round(v); return pad0r2(i,d); }
+function isgeneral(s, i) { return s.length >= 7 + i && (s.charCodeAt(i)|32) === 103 && (s.charCodeAt(i+1)|32) === 101 && (s.charCodeAt(i+2)|32) === 110 && (s.charCodeAt(i+3)|32) === 101 && (s.charCodeAt(i+4)|32) === 114 && (s.charCodeAt(i+5)|32) === 97 && (s.charCodeAt(i+6)|32) === 108; }
+/* Options */
+var opts_fmt = [
+	["date1904", 0],
+	["output", ""],
+	["WTF", false]
+];
+function fixopts(o){
+	for(var y = 0; y != opts_fmt.length; ++y) if(o[opts_fmt[y][0]]===undefined) o[opts_fmt[y][0]]=opts_fmt[y][1];
+}
+SSF.opts = opts_fmt;
+var table_fmt = {
+	0:  'General',
+	1:  '0',
+	2:  '0.00',
+	3:  '#,##0',
+	4:  '#,##0.00',
+	9:  '0%',
+	10: '0.00%',
+	11: '0.00E+00',
+	12: '# ?/?',
+	13: '# ??/??',
+	14: 'm/d/yy',
+	15: 'd-mmm-yy',
+	16: 'd-mmm',
+	17: 'mmm-yy',
+	18: 'h:mm AM/PM',
+	19: 'h:mm:ss AM/PM',
+	20: 'h:mm',
+	21: 'h:mm:ss',
+	22: 'm/d/yy h:mm',
+	37: '#,##0 ;(#,##0)',
+	38: '#,##0 ;[Red](#,##0)',
+	39: '#,##0.00;(#,##0.00)',
+	40: '#,##0.00;[Red](#,##0.00)',
+	45: 'mm:ss',
+	46: '[h]:mm:ss',
+	47: 'mmss.0',
+	48: '##0.0E+0',
+	49: '@',
+	56: '"涓婂崍/涓嬪崍 "hh"鏅�"mm"鍒�"ss"绉� "',
+	65535: 'General'
+};
+var days = [
+	['Sun', 'Sunday'],
+	['Mon', 'Monday'],
+	['Tue', 'Tuesday'],
+	['Wed', 'Wednesday'],
+	['Thu', 'Thursday'],
+	['Fri', 'Friday'],
+	['Sat', 'Saturday']
+];
+var months = [
+	['J', 'Jan', 'January'],
+	['F', 'Feb', 'February'],
+	['M', 'Mar', 'March'],
+	['A', 'Apr', 'April'],
+	['M', 'May', 'May'],
+	['J', 'Jun', 'June'],
+	['J', 'Jul', 'July'],
+	['A', 'Aug', 'August'],
+	['S', 'Sep', 'September'],
+	['O', 'Oct', 'October'],
+	['N', 'Nov', 'November'],
+	['D', 'Dec', 'December']
+];
+function frac(x, D, mixed) {
+	var sgn = x < 0 ? -1 : 1;
+	var B = x * sgn;
+	var P_2 = 0, P_1 = 1, P = 0;
+	var Q_2 = 1, Q_1 = 0, Q = 0;
+	var A = Math.floor(B);
+	while(Q_1 < D) {
+		A = Math.floor(B);
+		P = A * P_1 + P_2;
+		Q = A * Q_1 + Q_2;
+		if((B - A) < 0.0000000005) break;
+		B = 1 / (B - A);
+		P_2 = P_1; P_1 = P;
+		Q_2 = Q_1; Q_1 = Q;
+	}
+	if(Q > D) { Q = Q_1; P = P_1; }
+	if(Q > D) { Q = Q_2; P = P_2; }
+	if(!mixed) return [0, sgn * P, Q];
+	if(Q===0) throw "Unexpected state: "+P+" "+P_1+" "+P_2+" "+Q+" "+Q_1+" "+Q_2;
+	var q = Math.floor(sgn * P/Q);
+	return [q, sgn*P - q*Q, Q];
+}
+function general_fmt_int(v, opts) { return ""+v; }
+SSF._general_int = general_fmt_int;
+var general_fmt_num = (function make_general_fmt_num() {
+var gnr1 = /\.(\d*[1-9])0+$/, gnr2 = /\.0*$/, gnr4 = /\.(\d*[1-9])0+/, gnr5 = /\.0*[Ee]/, gnr6 = /(E[+-])(\d)$/;
+function gfn2(v) {
+	var w = (v<0?12:11);
+	var o = gfn5(v.toFixed(12)); if(o.length <= w) return o;
+	o = v.toPrecision(10); if(o.length <= w) return o;
+	return v.toExponential(5);
+}
+function gfn3(v) {
+	var o = v.toFixed(11).replace(gnr1,".$1");
+	if(o.length > (v<0?12:11)) o = v.toPrecision(6);
+	return o;
+}
+function gfn4(o) {
+	for(var i = 0; i != o.length; ++i) if((o.charCodeAt(i) | 0x20) === 101) return o.replace(gnr4,".$1").replace(gnr5,"E").replace("e","E").replace(gnr6,"$10$2");
+	return o;
+}
+function gfn5(o) {
+	//for(var i = 0; i != o.length; ++i) if(o.charCodeAt(i) === 46) return o.replace(gnr2,"").replace(gnr1,".$1");
+	//return o;
+	return o.indexOf(".") > -1 ? o.replace(gnr2,"").replace(gnr1,".$1") : o;
+}
+return function general_fmt_num(v, opts) {
+	var V = Math.floor(Math.log(Math.abs(v))*Math.LOG10E), o;
+	if(V >= -4 && V <= -1) o = v.toPrecision(10+V);
+	else if(Math.abs(V) <= 9) o = gfn2(v);
+	else if(V === 10) o = v.toFixed(10).substr(0,12);
+	else o = gfn3(v);
+	return gfn5(gfn4(o));
+};})();
+SSF._general_num = general_fmt_num;
+function general_fmt(v, opts) {
+	switch(typeof v) {
+		case 'string': return v;
+		case 'boolean': return v ? "TRUE" : "FALSE";
+		case 'number': return (v|0) === v ? general_fmt_int(v, opts) : general_fmt_num(v, opts);
+	}
+	throw new Error("unsupported value in General format: " + v);
+}
+SSF._general = general_fmt;
+function fix_hijri(date, o) { return 0; }
+function parse_date_code(v,opts,b2) {
+	if(v > 2958465 || v < 0) return null;
+	var date = (v|0), time = Math.floor(86400 * (v - date)), dow=0;
+	var dout=[];
+	var out={D:date, T:time, u:86400*(v-date)-time,y:0,m:0,d:0,H:0,M:0,S:0,q:0};
+	if(Math.abs(out.u) < 1e-6) out.u = 0;
+	fixopts(opts != null ? opts : (opts=[]));
+	if(opts.date1904) date += 1462;
+	if(out.u > 0.999) {
+		out.u = 0;
+		if(++time == 86400) { time = 0; ++date; }
+	}
+	if(date === 60) {dout = b2 ? [1317,10,29] : [1900,2,29]; dow=3;}
+	else if(date === 0) {dout = b2 ? [1317,8,29] : [1900,1,0]; dow=6;}
+	else {
+		if(date > 60) --date;
+		/* 1 = Jan 1 1900 */
+		var d = new Date(1900,0,1);
+		d.setDate(d.getDate() + date - 1);
+		dout = [d.getFullYear(), d.getMonth()+1,d.getDate()];
+		dow = d.getDay();
+		if(date < 60) dow = (dow + 6) % 7;
+		if(b2) dow = fix_hijri(d, dout);
+	}
+	out.y = dout[0]; out.m = dout[1]; out.d = dout[2];
+	out.S = time % 60; time = Math.floor(time / 60);
+	out.M = time % 60; time = Math.floor(time / 60);
+	out.H = time;
+	out.q = dow;
+	return out;
+}
+SSF.parse_date_code = parse_date_code;
+/*jshint -W086 */
+function write_date(type, fmt, val, ss0) {
+	var o="", ss=0, tt=0, y = val.y, out, outl = 0;
+	switch(type) {
+		case 98: /* 'b' buddhist year */
+			y = val.y + 543;
+			/* falls through */
+		case 121: /* 'y' year */
+		switch(fmt.length) {
+			case 1: case 2: out = y % 100; outl = 2; break;
+			default: out = y % 10000; outl = 4; break;
+		} break;
+		case 109: /* 'm' month */
+		switch(fmt.length) {
+			case 1: case 2: out = val.m; outl = fmt.length; break;
+			case 3: return months[val.m-1][1];
+			case 5: return months[val.m-1][0];
+			default: return months[val.m-1][2];
+		} break;
+		case 100: /* 'd' day */
+		switch(fmt.length) {
+			case 1: case 2: out = val.d; outl = fmt.length; break;
+			case 3: return days[val.q][0];
+			default: return days[val.q][1];
+		} break;
+		case 104: /* 'h' 12-hour */
+		switch(fmt.length) {
+			case 1: case 2: out = 1+(val.H+11)%12; outl = fmt.length; break;
+			default: throw 'bad hour format: ' + fmt;
+		} break;
+		case 72: /* 'H' 24-hour */
+		switch(fmt.length) {
+			case 1: case 2: out = val.H; outl = fmt.length; break;
+			default: throw 'bad hour format: ' + fmt;
+		} break;
+		case 77: /* 'M' minutes */
+		switch(fmt.length) {
+			case 1: case 2: out = val.M; outl = fmt.length; break;
+			default: throw 'bad minute format: ' + fmt;
+		} break;
+		case 115: /* 's' seconds */
+		if(val.u === 0) switch(fmt) {
+			case 's': case 'ss': return pad0(val.S, fmt.length);
+			case '.0': case '.00': case '.000':
+		}
+		switch(fmt) {
+			case 's': case 'ss': case '.0': case '.00': case '.000':
+				if(ss0 >= 2) tt = ss0 === 3 ? 1000 : 100;
+				else tt = ss0 === 1 ? 10 : 1;
+				ss = Math.round((tt)*(val.S + val.u));
+				if(ss >= 60*tt) ss = 0;
+				if(fmt === 's') return ss === 0 ? "0" : ""+ss/tt;
+				o = pad0(ss,2 + ss0);
+				if(fmt === 'ss') return o.substr(0,2);
+				return "." + o.substr(2,fmt.length-1);
+			default: throw 'bad second format: ' + fmt;
+		}
+		case 90: /* 'Z' absolute time */
+		switch(fmt) {
+			case '[h]': case '[hh]': out = val.D*24+val.H; break;
+			case '[m]': case '[mm]': out = (val.D*24+val.H)*60+val.M; break;
+			case '[s]': case '[ss]': out = ((val.D*24+val.H)*60+val.M)*60+Math.round(val.S+val.u); break;
+			default: throw 'bad abstime format: ' + fmt;
+		} outl = fmt.length === 3 ? 1 : 2; break;
+		case 101: /* 'e' era */
+			out = y; outl = 1;
+	}
+	if(outl > 0) return pad0(out, outl); else return "";
+}
+/*jshint +W086 */
+function commaify(s) {
+	if(s.length <= 3) return s;
+	var j = (s.length % 3), o = s.substr(0,j);
+	for(; j!=s.length; j+=3) o+=(o.length > 0 ? "," : "") + s.substr(j,3);
+	return o;
+}
+var write_num = (function make_write_num(){
+var pct1 = /%/g;
+function write_num_pct(type, fmt, val){
+	var sfmt = fmt.replace(pct1,""), mul = fmt.length - sfmt.length;
+	return write_num(type, sfmt, val * Math.pow(10,2*mul)) + fill("%",mul);
+}
+function write_num_cm(type, fmt, val){
+	var idx = fmt.length - 1;
+	while(fmt.charCodeAt(idx-1) === 44) --idx;
+	return write_num(type, fmt.substr(0,idx), val / Math.pow(10,3*(fmt.length-idx)));
+}
+function write_num_exp(fmt, val){
+	var o;
+	var idx = fmt.indexOf("E") - fmt.indexOf(".") - 1;
+	if(fmt.match(/^#+0.0E\+0$/)) {
+		var period = fmt.indexOf("."); if(period === -1) period=fmt.indexOf('E');
+		var ee = Math.floor(Math.log(Math.abs(val))*Math.LOG10E)%period;
+		if(ee < 0) ee += period;
+		o = (val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);
+		if(o.indexOf("e") === -1) {
+			var fakee = Math.floor(Math.log(Math.abs(val))*Math.LOG10E);
+			if(o.indexOf(".") === -1) o = o[0] + "." + o.substr(1) + "E+" + (fakee - o.length+ee);
+			else o += "E+" + (fakee - ee);
+			while(o.substr(0,2) === "0.") {
+				o = o[0] + o.substr(2,period) + "." + o.substr(2+period);
+				o = o.replace(/^0+([1-9])/,"$1").replace(/^0+\./,"0.");
+			}
+			o = o.replace(/\+-/,"-");
+		}
+		o = o.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/,function($$,$1,$2,$3) { return $1 + $2 + $3.substr(0,(period+ee)%period) + "." + $3.substr(ee) + "E"; });
+	} else o = val.toExponential(idx);
+	if(fmt.match(/E\+00$/) && o.match(/e[+-]\d$/)) o = o.substr(0,o.length-1) + "0" + o[o.length-1];
+	if(fmt.match(/E\-/) && o.match(/e\+/)) o = o.replace(/e\+/,"e");
+	return o.replace("e","E");
+}
+var frac1 = /# (\?+)( ?)\/( ?)(\d+)/;
+function write_num_f1(r, aval, sign) {
+	var den = parseInt(r[4]), rr = Math.round(aval * den), base = Math.floor(rr/den);
+	var myn = (rr - base*den), myd = den;
+	return sign + (base === 0 ? "" : ""+base) + " " + (myn === 0 ? fill(" ", r[1].length + 1 + r[4].length) : pad_(myn,r[1].length) + r[2] + "/" + r[3] + pad0(myd,r[4].length));
+}
+function write_num_f2(r, aval, sign) {
+	return sign + (aval === 0 ? "" : ""+aval) + fill(" ", r[1].length + 2 + r[4].length);
+}
+var dec1 = /^#*0*\.(0+)/;
+var closeparen = /\).*[0#]/;
+var phone = /\(###\) ###\\?-####/;
+function hashq(str) {
+	var o = "", cc;
+	for(var i = 0; i != str.length; ++i) switch((cc=str.charCodeAt(i))) {
+		case 35: break;
+		case 63: o+= " "; break;
+		case 48: o+= "0"; break;
+		default: o+= String.fromCharCode(cc);
+	}
+	return o;
+}
+function rnd(val, d) { var dd = Math.pow(10,d); return ""+(Math.round(val * dd)/dd); }
+function dec(val, d) { return Math.round((val-Math.floor(val))*Math.pow(10,d)); }
+function flr(val) { if(val < 2147483647 && val > -2147483648) return ""+(val >= 0 ? (val|0) : (val-1|0)); return ""+Math.floor(val); }
+function write_num_flt(type, fmt, val) {
+	if(type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {
+		var ffmt = fmt.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,"");
+		if(val >= 0) return write_num_flt('n', ffmt, val);
+		return '(' + write_num_flt('n', ffmt, -val) + ')';
+	}
+	if(fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm(type, fmt, val);
+	if(fmt.indexOf('%') !== -1) return write_num_pct(type, fmt, val);
+	if(fmt.indexOf('E') !== -1) return write_num_exp(fmt, val);
+	if(fmt.charCodeAt(0) === 36) return "$"+write_num_flt(type,fmt.substr(fmt[1]==' '?2:1),val);
+	var o, oo;
+	var r, ri, ff, aval = Math.abs(val), sign = val < 0 ? "-" : "";
+	if(fmt.match(/^00+$/)) return sign + pad0r(aval,fmt.length);
+	if(fmt.match(/^[#?]+$/)) {
+		o = pad0r(val,0); if(o === "0") o = "";
+		return o.length > fmt.length ? o : hashq(fmt.substr(0,fmt.length-o.length)) + o;
+	}
+	if((r = fmt.match(frac1)) !== null) return write_num_f1(r, aval, sign);
+	if(fmt.match(/^#+0+$/) !== null) return sign + pad0r(aval,fmt.length - fmt.indexOf("0"));
+	if((r = fmt.match(dec1)) !== null) {
+		o = rnd(val, r[1].length).replace(/^([^\.]+)$/,"$1."+r[1]).replace(/\.$/,"."+r[1]).replace(/\.(\d*)$/,function($$, $1) { return "." + $1 + fill("0", r[1].length-$1.length); });
+		return fmt.indexOf("0.") !== -1 ? o : o.replace(/^0\./,".");
+	}
+	fmt = fmt.replace(/^#+([0.])/, "$1");
+	if((r = fmt.match(/^(0*)\.(#*)$/)) !== null) {
+		return sign + rnd(aval, r[2].length).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,r[1].length?"0.":".");
+	}
+	if((r = fmt.match(/^#,##0(\.?)$/)) !== null) return sign + commaify(pad0r(aval,0));
+	if((r = fmt.match(/^#,##0\.([#0]*0)$/)) !== null) {
+		return val < 0 ? "-" + write_num_flt(type, fmt, -val) : commaify(""+(Math.floor(val))) + "." + pad0(dec(val, r[1].length),r[1].length);
+	}
+	if((r = fmt.match(/^#,#*,#0/)) !== null) return write_num_flt(type,fmt.replace(/^#,#*,/,""),val);
+	if((r = fmt.match(/^([0#]+)(\\?-([0#]+))+$/)) !== null) {
+		o = _strrev(write_num_flt(type, fmt.replace(/[\\-]/g,""), val));
+		ri = 0;
+		return _strrev(_strrev(fmt.replace(/\\/g,"")).replace(/[0#]/g,function(x){return ri<o.length?o[ri++]:x==='0'?'0':"";}));
+	}
+	if(fmt.match(phone) !== null) {
+		o = write_num_flt(type, "##########", val);
+		return "(" + o.substr(0,3) + ") " + o.substr(3, 3) + "-" + o.substr(6);
+	}
+	var oa = "";
+	if((r = fmt.match(/^([#0?]+)( ?)\/( ?)([#0?]+)/)) !== null) {
+		ri = Math.min(r[4].length,7);
+		ff = frac(aval, Math.pow(10,ri)-1, false);
+		o = "" + sign;
+		oa = write_num("n", r[1], ff[1]);
+		if(oa[oa.length-1] == " ") oa = oa.substr(0,oa.length-1) + "0";
+		o += oa + r[2] + "/" + r[3];
+		oa = rpad_(ff[2],ri);
+		if(oa.length < r[4].length) oa = hashq(r[4].substr(r[4].length-oa.length)) + oa;
+		o += oa;
+		return o;
+	}
+	if((r = fmt.match(/^# ([#0?]+)( ?)\/( ?)([#0?]+)/)) !== null) {
+		ri = Math.min(Math.max(r[1].length, r[4].length),7);
+		ff = frac(aval, Math.pow(10,ri)-1, true);
+		return sign + (ff[0]||(ff[1] ? "" : "0")) + " " + (ff[1] ? pad_(ff[1],ri) + r[2] + "/" + r[3] + rpad_(ff[2],ri): fill(" ", 2*ri+1 + r[2].length + r[3].length));
+	}
+	if((r = fmt.match(/^[#0?]+$/)) !== null) {
+		o = pad0r(val, 0);
+		if(fmt.length <= o.length) return o;
+		return hashq(fmt.substr(0,fmt.length-o.length)) + o;
+	}
+  if((r = fmt.match(/^([#0?]+)\.([#0]+)$/)) !== null) {
+		o = "" + val.toFixed(Math.min(r[2].length,10)).replace(/([^0])0+$/,"$1");
+		ri = o.indexOf(".");
+		var lres = fmt.indexOf(".") - ri, rres = fmt.length - o.length - lres;
+		return hashq(fmt.substr(0,lres) + o + fmt.substr(fmt.length-rres));
+	}
+	if((r = fmt.match(/^00,000\.([#0]*0)$/)) !== null) {
+		ri = dec(val, r[1].length);
+		return val < 0 ? "-" + write_num_flt(type, fmt, -val) : commaify(flr(val)).replace(/^\d,\d{3}$/,"0$&").replace(/^\d*$/,function($$) { return "00," + ($$.length < 3 ? pad0(0,3-$$.length) : "") + $$; }) + "." + pad0(ri,r[1].length);
+	}
+	switch(fmt) {
+		case "#,###": var x = commaify(pad0r(aval,0)); return x !== "0" ? sign + x : "";
+		default:
+	}
+	throw new Error("unsupported format |" + fmt + "|");
+}
+function write_num_cm2(type, fmt, val){
+	var idx = fmt.length - 1;
+	while(fmt.charCodeAt(idx-1) === 44) --idx;
+	return write_num(type, fmt.substr(0,idx), val / Math.pow(10,3*(fmt.length-idx)));
+}
+function write_num_pct2(type, fmt, val){
+	var sfmt = fmt.replace(pct1,""), mul = fmt.length - sfmt.length;
+	return write_num(type, sfmt, val * Math.pow(10,2*mul)) + fill("%",mul);
+}
+function write_num_exp2(fmt, val){
+	var o;
+	var idx = fmt.indexOf("E") - fmt.indexOf(".") - 1;
+	if(fmt.match(/^#+0.0E\+0$/)) {
+		var period = fmt.indexOf("."); if(period === -1) period=fmt.indexOf('E');
+		var ee = Math.floor(Math.log(Math.abs(val))*Math.LOG10E)%period;
+		if(ee < 0) ee += period;
+		o = (val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);
+		if(!o.match(/[Ee]/)) {
+			var fakee = Math.floor(Math.log(Math.abs(val))*Math.LOG10E);
+			if(o.indexOf(".") === -1) o = o[0] + "." + o.substr(1) + "E+" + (fakee - o.length+ee);
+			else o += "E+" + (fakee - ee);
+			o = o.replace(/\+-/,"-");
+		}
+		o = o.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/,function($$,$1,$2,$3) { return $1 + $2 + $3.substr(0,(period+ee)%period) + "." + $3.substr(ee) + "E"; });
+	} else o = val.toExponential(idx);
+	if(fmt.match(/E\+00$/) && o.match(/e[+-]\d$/)) o = o.substr(0,o.length-1) + "0" + o[o.length-1];
+	if(fmt.match(/E\-/) && o.match(/e\+/)) o = o.replace(/e\+/,"e");
+	return o.replace("e","E");
+}
+function write_num_int(type, fmt, val) {
+	if(type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {
+		var ffmt = fmt.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,"");
+		if(val >= 0) return write_num_int('n', ffmt, val);
+		return '(' + write_num_int('n', ffmt, -val) + ')';
+	}
+	if(fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm2(type, fmt, val);
+	if(fmt.indexOf('%') !== -1) return write_num_pct2(type, fmt, val);
+	if(fmt.indexOf('E') !== -1) return write_num_exp2(fmt, val);
+	if(fmt.charCodeAt(0) === 36) return "$"+write_num_int(type,fmt.substr(fmt[1]==' '?2:1),val);
+	var o;
+	var r, ri, ff, aval = Math.abs(val), sign = val < 0 ? "-" : "";
+	if(fmt.match(/^00+$/)) return sign + pad0(aval,fmt.length);
+	if(fmt.match(/^[#?]+$/)) {
+		o = (""+val); if(val === 0) o = "";
+		return o.length > fmt.length ? o : hashq(fmt.substr(0,fmt.length-o.length)) + o;
+	}
+	if((r = fmt.match(frac1)) !== null) return write_num_f2(r, aval, sign);
+	if(fmt.match(/^#+0+$/) !== null) return sign + pad0(aval,fmt.length - fmt.indexOf("0"));
+	if((r = fmt.match(dec1)) !== null) {
+		o = (""+val).replace(/^([^\.]+)$/,"$1."+r[1]).replace(/\.$/,"."+r[1]).replace(/\.(\d*)$/,function($$, $1) { return "." + $1 + fill("0", r[1].length-$1.length); });
+		return fmt.indexOf("0.") !== -1 ? o : o.replace(/^0\./,".");
+	}
+	fmt = fmt.replace(/^#+([0.])/, "$1");
+	if((r = fmt.match(/^(0*)\.(#*)$/)) !== null) {
+		return sign + (""+aval).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,r[1].length?"0.":".");
+	}
+	if((r = fmt.match(/^#,##0(\.?)$/)) !== null) return sign + commaify((""+aval));
+	if((r = fmt.match(/^#,##0\.([#0]*0)$/)) !== null) {
+		return val < 0 ? "-" + write_num_int(type, fmt, -val) : commaify((""+val)) + "." + fill('0',r[1].length);
+	}
+	if((r = fmt.match(/^#,#*,#0/)) !== null) return write_num_int(type,fmt.replace(/^#,#*,/,""),val);
+	if((r = fmt.match(/^([0#]+)(\\?-([0#]+))+$/)) !== null) {
+		o = _strrev(write_num_int(type, fmt.replace(/[\\-]/g,""), val));
+		ri = 0;
+		return _strrev(_strrev(fmt.replace(/\\/g,"")).replace(/[0#]/g,function(x){return ri<o.length?o[ri++]:x==='0'?'0':"";}));
+	}
+	if(fmt.match(phone) !== null) {
+		o = write_num_int(type, "##########", val);
+		return "(" + o.substr(0,3) + ") " + o.substr(3, 3) + "-" + o.substr(6);
+	}
+	var oa = "";
+	if((r = fmt.match(/^([#0?]+)( ?)\/( ?)([#0?]+)/)) !== null) {
+		ri = Math.min(r[4].length,7);
+		ff = frac(aval, Math.pow(10,ri)-1, false);
+		o = "" + sign;
+		oa = write_num("n", r[1], ff[1]);
+		if(oa[oa.length-1] == " ") oa = oa.substr(0,oa.length-1) + "0";
+		o += oa + r[2] + "/" + r[3];
+		oa = rpad_(ff[2],ri);
+		if(oa.length < r[4].length) oa = hashq(r[4].substr(r[4].length-oa.length)) + oa;
+		o += oa;
+		return o;
+	}
+	if((r = fmt.match(/^# ([#0?]+)( ?)\/( ?)([#0?]+)/)) !== null) {
+		ri = Math.min(Math.max(r[1].length, r[4].length),7);
+		ff = frac(aval, Math.pow(10,ri)-1, true);
+		return sign + (ff[0]||(ff[1] ? "" : "0")) + " " + (ff[1] ? pad_(ff[1],ri) + r[2] + "/" + r[3] + rpad_(ff[2],ri): fill(" ", 2*ri+1 + r[2].length + r[3].length));
+	}
+	if((r = fmt.match(/^[#0?]+$/)) !== null) {
+		o = "" + val;
+		if(fmt.length <= o.length) return o;
+		return hashq(fmt.substr(0,fmt.length-o.length)) + o;
+	}
+	if((r = fmt.match(/^([#0]+)\.([#0]+)$/)) !== null) {
+		o = "" + val.toFixed(Math.min(r[2].length,10)).replace(/([^0])0+$/,"$1");
+		ri = o.indexOf(".");
+		var lres = fmt.indexOf(".") - ri, rres = fmt.length - o.length - lres;
+		return hashq(fmt.substr(0,lres) + o + fmt.substr(fmt.length-rres));
+	}
+	if((r = fmt.match(/^00,000\.([#0]*0)$/)) !== null) {
+		return val < 0 ? "-" + write_num_int(type, fmt, -val) : commaify(""+val).replace(/^\d,\d{3}$/,"0$&").replace(/^\d*$/,function($$) { return "00," + ($$.length < 3 ? pad0(0,3-$$.length) : "") + $$; }) + "." + pad0(0,r[1].length);
+	}
+	switch(fmt) {
+		case "#,###": var x = commaify(""+aval); return x !== "0" ? sign + x : "";
+		default:
+	}
+	throw new Error("unsupported format |" + fmt + "|");
+}
+return function write_num(type, fmt, val) {
+	return (val|0) === val ? write_num_int(type, fmt, val) : write_num_flt(type, fmt, val);
+};})();
+function split_fmt(fmt) {
+	var out = [];
+	var in_str = false, cc;
+	for(var i = 0, j = 0; i < fmt.length; ++i) switch((cc=fmt.charCodeAt(i))) {
+		case 34: /* '"' */
+			in_str = !in_str; break;
+		case 95: case 42: case 92: /* '_' '*' '\\' */
+			++i; break;
+		case 59: /* ';' */
+			out[out.length] = fmt.substr(j,i-j);
+			j = i+1;
+	}
+	out[out.length] = fmt.substr(j);
+	if(in_str === true) throw new Error("Format |" + fmt + "| unterminated string ");
+	return out;
+}
+SSF._split = split_fmt;
+var abstime = /\[[HhMmSs]*\]/;
+function eval_fmt(fmt, v, opts, flen) {
+	var out = [], o = "", i = 0, c = "", lst='t', q, dt, j, cc;
+	var hr='H';
+	/* Tokenize */
+	while(i < fmt.length) {
+		switch((c = fmt[i])) {
+			case 'G': /* General */
+				if(!isgeneral(fmt, i)) throw new Error('unrecognized character ' + c + ' in ' +fmt);
+				out[out.length] = {t:'G', v:'General'}; i+=7; break;
+			case '"': /* Literal text */
+				for(o="";(cc=fmt.charCodeAt(++i)) !== 34 && i < fmt.length;) o += String.fromCharCode(cc);
+				out[out.length] = {t:'t', v:o}; ++i; break;
+			case '\\': var w = fmt[++i], t = (w === "(" || w === ")") ? w : 't';
+				out[out.length] = {t:t, v:w}; ++i; break;
+			case '_': out[out.length] = {t:'t', v:" "}; i+=2; break;
+			case '@': /* Text Placeholder */
+				out[out.length] = {t:'T', v:v}; ++i; break;
+			case 'B': case 'b':
+				if(fmt[i+1] === "1" || fmt[i+1] === "2") {
+          if(dt==null) { dt=parse_date_code(v, opts, fmt[i+1] === "2"); if(dt==null) return ""; }
+					out[out.length] = {t:'X', v:fmt.substr(i,2)}; lst = c; i+=2; break;
+				}
+				/* falls through */
+			case 'M': case 'D': case 'Y': case 'H': case 'S': case 'E':
+				c = c.toLowerCase();
+				/* falls through */
+			case 'm': case 'd': case 'y': case 'h': case 's': case 'e': case 'g':
+				if(v < 0) return "";
+				if(dt==null) { dt=parse_date_code(v, opts); if(dt==null) return ""; }
+				o = c; while(++i<fmt.length && fmt[i].toLowerCase() === c) o+=c;
+				if(c === 'm' && lst.toLowerCase() === 'h') c = 'M'; /* m = minute */
+				if(c === 'h') c = hr;
+				out[out.length] = {t:c, v:o}; lst = c; break;
+			case 'A':
+				q={t:c, v:"A"};
+				if(dt==null) dt=parse_date_code(v, opts);
+        if(fmt.substr(i, 3) === "A/P") { if(dt!=null) q.v = dt.H >= 12 ? "P" : "A"; q.t = 'T'; hr='h';i+=3;}
+        else if(fmt.substr(i,5) === "AM/PM") { if(dt!=null) q.v = dt.H >= 12 ? "PM" : "AM"; q.t = 'T'; i+=5; hr='h'; }
+				else { q.t = "t"; ++i; }
+				if(dt==null && q.t === 'T') return "";
+				out[out.length] = q; lst = c; break;
+			case '[':
+				o = c;
+				while(fmt[i++] !== ']' && i < fmt.length) o += fmt[i];
+				if(o.substr(-1) !== ']') throw 'unterminated "[" block: |' + o + '|';
+				if(o.match(abstime)) {
+					if(dt==null) { dt=parse_date_code(v, opts); if(dt==null) return ""; }
+					out[out.length] = {t:'Z', v:o.toLowerCase()};
+				} else { o=""; }
+				break;
+			/* Numbers */
+			case '.':
+				if(dt != null) {
+					o = c; while((c=fmt[++i]) === "0") o += c;
+					out[out.length] = {t:'s', v:o}; break;
+				}
+				/* falls through */
+			case '0': case '#':
+				o = c; while("0#?.,E+-%".indexOf(c=fmt[++i]) > -1 || c=='\\' && fmt[i+1] == "-" && "0#".indexOf(fmt[i+2])>-1) o += c;
+				out[out.length] = {t:'n', v:o}; break;
+			case '?':
+				o = c; while(fmt[++i] === c) o+=c;
+				q={t:c, v:o}; out[out.length] = q; lst = c; break;
+			case '*': ++i; if(fmt[i] == ' ' || fmt[i] == '*') ++i; break; // **
+			case '(': case ')': out[out.length] = {t:(flen===1?'t':c), v:c}; ++i; break;
+			case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
+				o = c; while("0123456789".indexOf(fmt[++i]) > -1) o+=fmt[i];
+				out[out.length] = {t:'D', v:o}; break;
+			case ' ': out[out.length] = {t:c, v:c}; ++i; break;
+			default:
+				if(",$-+/():!^&'~{}<>=鈧琣cfijklopqrtuvwxz".indexOf(c) === -1) throw new Error('unrecognized character ' + c + ' in ' + fmt);
+				out[out.length] = {t:'t', v:c}; ++i; break;
+		}
+	}
+	var bt = 0, ss0 = 0, ssm;
+	for(i=out.length-1, lst='t'; i >= 0; --i) {
+		switch(out[i].t) {
+			case 'h': case 'H': out[i].t = hr; lst='h'; if(bt < 1) bt = 1; break;
+			case 's':
+				if((ssm=out[i].v.match(/\.0+$/))) ss0=Math.max(ss0,ssm[0].length-1);
+				if(bt < 3) bt = 3;
+			/* falls through */
+			case 'd': case 'y': case 'M': case 'e': lst=out[i].t; break;
+			case 'm': if(lst === 's') { out[i].t = 'M'; if(bt < 2) bt = 2; } break;
+			case 'X': if(out[i].v === "B2");
+				break;
+			case 'Z':
+				if(bt < 1 && out[i].v.match(/[Hh]/)) bt = 1;
+				if(bt < 2 && out[i].v.match(/[Mm]/)) bt = 2;
+				if(bt < 3 && out[i].v.match(/[Ss]/)) bt = 3;
+		}
+	}
+	switch(bt) {
+		case 0: break;
+		case 1:
+			if(dt.u >= 0.5) { dt.u = 0; ++dt.S; }
+			if(dt.S >=  60) { dt.S = 0; ++dt.M; }
+			if(dt.M >=  60) { dt.M = 0; ++dt.H; }
+			break;
+		case 2:
+			if(dt.u >= 0.5) { dt.u = 0; ++dt.S; }
+			if(dt.S >=  60) { dt.S = 0; ++dt.M; }
+			break;
+	}
+	/* replace fields */
+	var nstr = "", jj;
+	for(i=0; i < out.length; ++i) {
+		switch(out[i].t) {
+			case 't': case 'T': case ' ': case 'D': break;
+			case 'X': out[i] = undefined; break;
+			case 'd': case 'm': case 'y': case 'h': case 'H': case 'M': case 's': case 'e': case 'b': case 'Z':
+				out[i].v = write_date(out[i].t.charCodeAt(0), out[i].v, dt, ss0);
+				out[i].t = 't'; break;
+			case 'n': case '(': case '?':
+				jj = i+1;
+				while(out[jj] != null && (
+					(c=out[jj].t) === "?" || c === "D" ||
+					(c === " " || c === "t") && out[jj+1] != null && (out[jj+1].t === '?' || out[jj+1].t === "t" && out[jj+1].v === '/') ||
+					out[i].t === '(' && (c === ' ' || c === 'n' || c === ')') ||
+					c === 't' && (out[jj].v === '/' || '$鈧�'.indexOf(out[jj].v) > -1 || out[jj].v === ' ' && out[jj+1] != null && out[jj+1].t == '?')
+				)) {
+					out[i].v += out[jj].v;
+					out[jj] = undefined; ++jj;
+				}
+				nstr += out[i].v;
+				i = jj-1; break;
+			case 'G': out[i].t = 't'; out[i].v = general_fmt(v,opts); break;
+		}
+	}
+	var vv = "", myv, ostr;
+	if(nstr.length > 0) {
+		myv = (v<0&&nstr.charCodeAt(0) === 45 ? -v : v); /* '-' */
+		ostr = write_num(nstr.charCodeAt(0) === 40 ? '(' : 'n', nstr, myv); /* '(' */
+		jj=ostr.length-1;
+		var decpt = out.length;
+		for(i=0; i < out.length; ++i) if(out[i] != null && out[i].v.indexOf(".") > -1) { decpt = i; break; }
+		var lasti=out.length;
+		if(decpt === out.length && ostr.indexOf("E") === -1) {
+			for(i=out.length-1; i>= 0;--i) {
+				if(out[i] == null || 'n?('.indexOf(out[i].t) === -1) continue;
+				if(jj>=out[i].v.length-1) { jj -= out[i].v.length; out[i].v = ostr.substr(jj+1, out[i].v.length); }
+				else if(jj < 0) out[i].v = "";
+				else { out[i].v = ostr.substr(0, jj+1); jj = -1; }
+				out[i].t = 't';
+				lasti = i;
+			}
+			if(jj>=0 && lasti<out.length) out[lasti].v = ostr.substr(0,jj+1) + out[lasti].v;
+		}
+		else if(decpt !== out.length && ostr.indexOf("E") === -1) {
+			jj = ostr.indexOf(".")-1;
+			for(i=decpt; i>= 0; --i) {
+				if(out[i] == null || 'n?('.indexOf(out[i].t) === -1) continue;
+				j=out[i].v.indexOf(".")>-1&&i===decpt?out[i].v.indexOf(".")-1:out[i].v.length-1;
+				vv = out[i].v.substr(j+1);
+				for(; j>=0; --j) {
+					if(jj>=0 && (out[i].v[j] === "0" || out[i].v[j] === "#")) vv = ostr[jj--] + vv;
+				}
+				out[i].v = vv;
+				out[i].t = 't';
+				lasti = i;
+			}
+			if(jj>=0 && lasti<out.length) out[lasti].v = ostr.substr(0,jj+1) + out[lasti].v;
+			jj = ostr.indexOf(".")+1;
+			for(i=decpt; i<out.length; ++i) {
+				if(out[i] == null || 'n?('.indexOf(out[i].t) === -1 && i !== decpt ) continue;
+				j=out[i].v.indexOf(".")>-1&&i===decpt?out[i].v.indexOf(".")+1:0;
+				vv = out[i].v.substr(0,j);
+				for(; j<out[i].v.length; ++j) {
+					if(jj<ostr.length) vv += ostr[jj++];
+				}
+				out[i].v = vv;
+				out[i].t = 't';
+				lasti = i;
+			}
+		}
+	}
+	for(i=0; i<out.length; ++i) if(out[i] != null && 'n(?'.indexOf(out[i].t)>-1) {
+		myv = (flen >1 && v < 0 && i>0 && out[i-1].v === "-" ? -v:v);
+		out[i].v = write_num(out[i].t, out[i].v, myv);
+		out[i].t = 't';
+	}
+	var retval = "";
+	for(i=0; i !== out.length; ++i) if(out[i] != null) retval += out[i].v;
+	return retval;
+}
+SSF._eval = eval_fmt;
+var cfregex = /\[[=<>]/;
+var cfregex2 = /\[([=<>]*)(-?\d+\.?\d*)\]/;
+function chkcond(v, rr) {
+	if(rr == null) return false;
+	var thresh = parseFloat(rr[2]);
+	switch(rr[1]) {
+		case "=":  if(v == thresh) return true; break;
+		case ">":  if(v >  thresh) return true; break;
+		case "<":  if(v <  thresh) return true; break;
+		case "<>": if(v != thresh) return true; break;
+		case ">=": if(v >= thresh) return true; break;
+		case "<=": if(v <= thresh) return true; break;
+	}
+	return false;
+}
+function choose_fmt(f, v) {
+	var fmt = split_fmt(f);
+	var l = fmt.length, lat = fmt[l-1].indexOf("@");
+	if(l<4 && lat>-1) --l;
+	if(fmt.length > 4) throw "cannot find right format for |" + fmt + "|";
+	if(typeof v !== "number") return [4, fmt.length === 4 || lat>-1?fmt[fmt.length-1]:"@"];
+	switch(fmt.length) {
+		case 1: fmt = lat>-1 ? ["General", "General", "General", fmt[0]] : [fmt[0], fmt[0], fmt[0], "@"]; break;
+		case 2: fmt = lat>-1 ? [fmt[0], fmt[0], fmt[0], fmt[1]] : [fmt[0], fmt[1], fmt[0], "@"]; break;
+		case 3: fmt = lat>-1 ? [fmt[0], fmt[1], fmt[0], fmt[2]] : [fmt[0], fmt[1], fmt[2], "@"]; break;
+		case 4: break;
+	}
+	var ff = v > 0 ? fmt[0] : v < 0 ? fmt[1] : fmt[2];
+	if(fmt[0].indexOf("[") === -1 && fmt[1].indexOf("[") === -1) return [l, ff];
+	if(fmt[0].match(cfregex) != null || fmt[1].match(cfregex) != null) {
+		var m1 = fmt[0].match(cfregex2);
+		var m2 = fmt[1].match(cfregex2);
+		return chkcond(v, m1) ? [l, fmt[0]] : chkcond(v, m2) ? [l, fmt[1]] : [l, fmt[m1 != null && m2 != null ? 2 : 1]];
+	}
+	return [l, ff];
+}
+function format(fmt,v,o) {
+	fixopts(o != null ? o : (o=[]));
+	var sfmt = "";
+	switch(typeof fmt) {
+		case "string": sfmt = fmt; break;
+		case "number": sfmt = (o.table != null ? o.table : table_fmt)[fmt]; break;
+	}
+	if(isgeneral(sfmt,0)) return general_fmt(v, o);
+	var f = choose_fmt(sfmt, v);
+	if(isgeneral(f[1])) return general_fmt(v, o);
+	if(v === true) v = "TRUE"; else if(v === false) v = "FALSE";
+	else if(v === "" || v == null) return "";
+	return eval_fmt(f[1], v, o, f[0]);
+}
+SSF._table = table_fmt;
+SSF.load = function load_entry(fmt, idx) { table_fmt[idx] = fmt; };
+SSF.format = format;
+SSF.get_table = function get_table() { return table_fmt; };
+SSF.load_table = function load_table(tbl) { for(var i=0; i!=0x0188; ++i) if(tbl[i] !== undefined) SSF.load(tbl[i], i); };
+};
+make_ssf(SSF);
+/* map from xlml named formats to SSF TODO: localize */
+var XLMLFormatMap = {
+	"General Number": "General",
+	"General Date": SSF._table[22],
+	"Long Date": "dddd, mmmm dd, yyyy",
+	"Medium Date": SSF._table[15],
+	"Short Date": SSF._table[14],
+	"Long Time": SSF._table[19],
+	"Medium Time": SSF._table[18],
+	"Short Time": SSF._table[20],
+	"Currency": '"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',
+	"Fixed": SSF._table[2],
+	"Standard": SSF._table[4],
+	"Percent": SSF._table[10],
+	"Scientific": SSF._table[11],
+	"Yes/No": '"Yes";"Yes";"No";@',
+	"True/False": '"True";"True";"False";@',
+	"On/Off": '"Yes";"Yes";"No";@'
+};
+
+var DO_NOT_EXPORT_CFB = true;
+/* cfb.js (C) 2013-2014 SheetJS -- http://sheetjs.com */
+/* vim: set ts=2: */
+/*jshint eqnull:true */
+
+/* [MS-CFB] v20130118 */
+var CFB = (function _CFB(){
+var exports = {};
+exports.version = '0.10.2';
+function parse(file) {
+var mver = 3; // major version
+var ssz = 512; // sector size
+var nmfs = 0; // number of mini FAT sectors
+var ndfs = 0; // number of DIFAT sectors
+var dir_start = 0; // first directory sector location
+var minifat_start = 0; // first mini FAT sector location
+var difat_start = 0; // first mini FAT sector location
+
+var fat_addrs = []; // locations of FAT sectors
+
+/* [MS-CFB] 2.2 Compound File Header */
+var blob = file.slice(0,512);
+prep_blob(blob, 0);
+
+/* major version */
+var mv = check_get_mver(blob);
+mver = mv[0];
+switch(mver) {
+	case 3: ssz = 512; break; case 4: ssz = 4096; break;
+	default: throw "Major Version: Expected 3 or 4 saw " + mver;
+}
+
+/* reprocess header */
+if(ssz !== 512) { blob = file.slice(0,ssz); prep_blob(blob, 28 /* blob.l */); }
+/* Save header for final object */
+var header = file.slice(0,ssz);
+
+check_shifts(blob, mver);
+
+// Number of Directory Sectors
+var nds = blob.read_shift(4, 'i');
+if(mver === 3 && nds !== 0) throw '# Directory Sectors: Expected 0 saw ' + nds;
+
+// Number of FAT Sectors
+//var nfs = blob.read_shift(4, 'i');
+blob.l += 4;
+
+// First Directory Sector Location
+dir_start = blob.read_shift(4, 'i');
+
+// Transaction Signature
+blob.l += 4;
+
+// Mini Stream Cutoff Size
+blob.chk('00100000', 'Mini Stream Cutoff Size: ');
+
+// First Mini FAT Sector Location
+minifat_start = blob.read_shift(4, 'i');
+
+// Number of Mini FAT Sectors
+nmfs = blob.read_shift(4, 'i');
+
+// First DIFAT sector location
+difat_start = blob.read_shift(4, 'i');
+
+// Number of DIFAT Sectors
+ndfs = blob.read_shift(4, 'i');
+
+// Grab FAT Sector Locations
+for(var q, j = 0; j < 109; ++j) { /* 109 = (512 - blob.l)>>>2; */
+	q = blob.read_shift(4, 'i');
+	if(q<0) break;
+	fat_addrs[j] = q;
+}
+
+/** Break the file up into sectors */
+var sectors = sectorify(file, ssz);
+
+sleuth_fat(difat_start, ndfs, sectors, ssz, fat_addrs);
+
+/** Chains */
+var sector_list = make_sector_list(sectors, dir_start, fat_addrs, ssz);
+
+sector_list[dir_start].name = "!Directory";
+if(nmfs > 0 && minifat_start !== ENDOFCHAIN) sector_list[minifat_start].name = "!MiniFAT";
+sector_list[fat_addrs[0]].name = "!FAT";
+sector_list.fat_addrs = fat_addrs;
+sector_list.ssz = ssz;
+
+/* [MS-CFB] 2.6.1 Compound File Directory Entry */
+var files = {}, Paths = [], FileIndex = [], FullPaths = [], FullPathDir = {};
+read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex);
+
+build_full_paths(FileIndex, FullPathDir, FullPaths, Paths);
+
+var root_name = Paths.shift();
+Paths.root = root_name;
+
+/* [MS-CFB] 2.6.4 (Unicode 3.0.1 case conversion) */
+var find_path = make_find_path(FullPaths, Paths, FileIndex, files, root_name);
+
+return {
+	raw: {header: header, sectors: sectors},
+	FileIndex: FileIndex,
+	FullPaths: FullPaths,
+	FullPathDir: FullPathDir,
+	find: find_path
+};
+} // parse
+
+/* [MS-CFB] 2.2 Compound File Header -- read up to major version */
+function check_get_mver(blob) {
+	// header signature 8
+	blob.chk(HEADER_SIGNATURE, 'Header Signature: ');
+
+	// clsid 16
+	blob.chk(HEADER_CLSID, 'CLSID: ');
+
+	// minor version 2
+	var mver = blob.read_shift(2, 'u');
+
+	return [blob.read_shift(2,'u'), mver];
+}
+function check_shifts(blob, mver) {
+	var shift = 0x09;
+
+	// Byte Order
+	blob.chk('feff', 'Byte Order: ');
+
+	// Sector Shift
+	switch((shift = blob.read_shift(2))) {
+		case 0x09: if(mver !== 3) throw 'MajorVersion/SectorShift Mismatch'; break;
+		case 0x0c: if(mver !== 4) throw 'MajorVersion/SectorShift Mismatch'; break;
+		default: throw 'Sector Shift: Expected 9 or 12 saw ' + shift;
+	}
+
+	// Mini Sector Shift
+	blob.chk('0600', 'Mini Sector Shift: ');
+
+	// Reserved
+	blob.chk('000000000000', 'Reserved: ');
+}
+
+/** Break the file up into sectors */
+function sectorify(file, ssz) {
+	var nsectors = Math.ceil(file.length/ssz)-1;
+	var sectors = new Array(nsectors);
+	for(var i=1; i < nsectors; ++i) sectors[i-1] = file.slice(i*ssz,(i+1)*ssz);
+	sectors[nsectors-1] = file.slice(nsectors*ssz);
+	return sectors;
+}
+
+/* [MS-CFB] 2.6.4 Red-Black Tree */
+function build_full_paths(FI, FPD, FP, Paths) {
+	var i = 0, L = 0, R = 0, C = 0, j = 0, pl = Paths.length;
+	var dad = new Array(pl), q = new Array(pl);
+
+	for(; i < pl; ++i) { dad[i]=q[i]=i; FP[i]=Paths[i]; }
+
+	for(; j < q.length; ++j) {
+		i = q[j];
+		L = FI[i].L; R = FI[i].R; C = FI[i].C;
+		if(dad[i] === i) {
+			if(L !== -1 /*NOSTREAM*/ && dad[L] !== L) dad[i] = dad[L];
+			if(R !== -1 && dad[R] !== R) dad[i] = dad[R];
+		}
+		if(C !== -1 /*NOSTREAM*/) dad[C] = i;
+		if(L !== -1) { dad[L] = dad[i]; q.push(L); }
+		if(R !== -1) { dad[R] = dad[i]; q.push(R); }
+	}
+	for(i=1; i !== pl; ++i) if(dad[i] === i) {
+		if(R !== -1 /*NOSTREAM*/ && dad[R] !== R) dad[i] = dad[R];
+		else if(L !== -1 && dad[L] !== L) dad[i] = dad[L];
+	}
+
+	for(i=1; i < pl; ++i) {
+		if(FI[i].type === 0 /* unknown */) continue;
+		j = dad[i];
+		if(j === 0) FP[i] = FP[0] + "/" + FP[i];
+		else while(j !== 0) {
+			FP[i] = FP[j] + "/" + FP[i];
+			j = dad[j];
+		}
+		dad[i] = 0;
+	}
+
+	FP[0] += "/";
+	for(i=1; i < pl; ++i) {
+		if(FI[i].type !== 2 /* stream */) FP[i] += "/";
+		FPD[FP[i]] = FI[i];
+	}
+}
+
+/* [MS-CFB] 2.6.4 */
+function make_find_path(FullPaths, Paths, FileIndex, files, root_name) {
+	var UCFullPaths = new Array(FullPaths.length);
+	var UCPaths = new Array(Paths.length), i;
+	for(i = 0; i < FullPaths.length; ++i) UCFullPaths[i] = FullPaths[i].toUpperCase().replace(chr0,'').replace(chr1,'!');
+	for(i = 0; i < Paths.length; ++i) UCPaths[i] = Paths[i].toUpperCase().replace(chr0,'').replace(chr1,'!');
+	return function find_path(path) {
+		var k;
+		if(path.charCodeAt(0) === 47 /* "/" */) { k=true; path = root_name + path; }
+		else k = path.indexOf("/") !== -1;
+		var UCPath = path.toUpperCase().replace(chr0,'').replace(chr1,'!');
+		var w = k === true ? UCFullPaths.indexOf(UCPath) : UCPaths.indexOf(UCPath);
+		if(w === -1) return null;
+		return k === true ? FileIndex[w] : files[Paths[w]];
+	};
+}
+
+/** Chase down the rest of the DIFAT chain to build a comprehensive list
+    DIFAT chains by storing the next sector number as the last 32 bytes */
+function sleuth_fat(idx, cnt, sectors, ssz, fat_addrs) {
+	var q;
+	if(idx === ENDOFCHAIN) {
+		if(cnt !== 0) throw "DIFAT chain shorter than expected";
+	} else if(idx !== -1 /*FREESECT*/) {
+		var sector = sectors[idx], m = (ssz>>>2)-1;
+		for(var i = 0; i < m; ++i) {
+			if((q = __readInt32LE(sector,i*4)) === ENDOFCHAIN) break;
+			fat_addrs.push(q);
+		}
+		sleuth_fat(__readInt32LE(sector,ssz-4),cnt - 1, sectors, ssz, fat_addrs);
+	}
+}
+
+/** Follow the linked list of sectors for a given starting point */
+function get_sector_list(sectors, start, fat_addrs, ssz, chkd) {
+	var sl = sectors.length;
+	var buf, buf_chain;
+	if(!chkd) chkd = new Array(sl);
+	var modulus = ssz - 1, j, jj;
+	buf = [];
+	buf_chain = [];
+	for(j=start; j>=0;) {
+		chkd[j] = true;
+		buf[buf.length] = j;
+		buf_chain.push(sectors[j]);
+		var addr = fat_addrs[Math.floor(j*4/ssz)];
+		jj = ((j*4) & modulus);
+		if(ssz < 4 + jj) throw "FAT boundary crossed: " + j + " 4 "+ssz;
+		j = __readInt32LE(sectors[addr], jj);
+	}
+	return {nodes: buf, data:__toBuffer([buf_chain])};
+}
+
+/** Chase down the sector linked lists */
+function make_sector_list(sectors, dir_start, fat_addrs, ssz) {
+	var sl = sectors.length, sector_list = new Array(sl);
+	var chkd = new Array(sl), buf, buf_chain;
+	var modulus = ssz - 1, i, j, k, jj;
+	for(i=0; i < sl; ++i) {
+		buf = [];
+		k = (i + dir_start); if(k >= sl) k-=sl;
+		if(chkd[k] === true) continue;
+		buf_chain = [];
+		for(j=k; j>=0;) {
+			chkd[j] = true;
+			buf[buf.length] = j;
+			buf_chain.push(sectors[j]);
+			var addr = fat_addrs[Math.floor(j*4/ssz)];
+			jj = ((j*4) & modulus);
+			if(ssz < 4 + jj) throw "FAT boundary crossed: " + j + " 4 "+ssz;
+			j = __readInt32LE(sectors[addr], jj);
+		}
+		sector_list[k] = {nodes: buf, data:__toBuffer([buf_chain])};
+	}
+	return sector_list;
+}
+
+/* [MS-CFB] 2.6.1 Compound File Directory Entry */
+function read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex) {
+	var blob;
+	var minifat_store = 0, pl = (Paths.length?2:0);
+	var sector = sector_list[dir_start].data;
+	var i = 0, namelen = 0, name, o, ctime, mtime;
+	for(; i < sector.length; i+= 128) {
+		blob = sector.slice(i, i+128);
+		prep_blob(blob, 64);
+		namelen = blob.read_shift(2);
+		if(namelen === 0) continue;
+		name = __utf16le(blob,0,namelen-pl);
+		Paths.push(name);
+		o = {
+			name:  name,
+			type:  blob.read_shift(1),
+			color: blob.read_shift(1),
+			L:     blob.read_shift(4, 'i'),
+			R:     blob.read_shift(4, 'i'),
+			C:     blob.read_shift(4, 'i'),
+			clsid: blob.read_shift(16),
+			state: blob.read_shift(4, 'i')
+		};
+		ctime = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);
+		if(ctime !== 0) {
+			o.ctime = ctime; o.ct = read_date(blob, blob.l-8);
+		}
+		mtime = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);
+		if(mtime !== 0) {
+			o.mtime = mtime; o.mt = read_date(blob, blob.l-8);
+		}
+		o.start = blob.read_shift(4, 'i');
+		o.size = blob.read_shift(4, 'i');
+		if(o.type === 5) { /* root */
+			minifat_store = o.start;
+			if(nmfs > 0 && minifat_store !== ENDOFCHAIN) sector_list[minifat_store].name = "!StreamData";
+			/*minifat_size = o.size;*/
+		} else if(o.size >= 4096 /* MSCSZ */) {
+			o.storage = 'fat';
+			if(sector_list[o.start] === undefined) sector_list[o.start] = get_sector_list(sectors, o.start, sector_list.fat_addrs, sector_list.ssz);
+			sector_list[o.start].name = o.name;
+			o.content = sector_list[o.start].data.slice(0,o.size);
+			prep_blob(o.content, 0);
+		} else {
+			o.storage = 'minifat';
+			if(minifat_store !== ENDOFCHAIN && o.start !== ENDOFCHAIN) {
+				o.content = sector_list[minifat_store].data.slice(o.start*MSSZ,o.start*MSSZ+o.size);
+				prep_blob(o.content, 0);
+			}
+		}
+		files[name] = o;
+		FileIndex.push(o);
+	}
+}
+
+function read_date(blob, offset) {
+	return new Date(( ( (__readUInt32LE(blob,offset+4)/1e7)*Math.pow(2,32)+__readUInt32LE(blob,offset)/1e7 ) - 11644473600)*1000);
+}
+
+var fs;
+function readFileSync(filename, options) {
+	if(fs === undefined) fs = require('fs');
+	return parse(fs.readFileSync(filename), options);
+}
+
+function readSync(blob, options) {
+	switch(options !== undefined && options.type !== undefined ? options.type : "base64") {
+		case "file": return readFileSync(blob, options);
+		case "base64": return parse(s2a(Base64.decode(blob)), options);
+		case "binary": return parse(s2a(blob), options);
+	}
+	return parse(blob);
+}
+
+/** CFB Constants */
+var MSSZ = 64; /* Mini Sector Size = 1<<6 */
+//var MSCSZ = 4096; /* Mini Stream Cutoff Size */
+/* 2.1 Compound File Sector Numbers and Types */
+var ENDOFCHAIN = -2;
+/* 2.2 Compound File Header */
+var HEADER_SIGNATURE = 'd0cf11e0a1b11ae1';
+var HEADER_CLSID = '00000000000000000000000000000000';
+var consts = {
+	/* 2.1 Compund File Sector Numbers and Types */
+	MAXREGSECT: -6,
+	DIFSECT: -4,
+	FATSECT: -3,
+	ENDOFCHAIN: ENDOFCHAIN,
+	FREESECT: -1,
+	/* 2.2 Compound File Header */
+	HEADER_SIGNATURE: HEADER_SIGNATURE,
+	HEADER_MINOR_VERSION: '3e00',
+	MAXREGSID: -6,
+	NOSTREAM: -1,
+	HEADER_CLSID: HEADER_CLSID,
+	/* 2.6.1 Compound File Directory Entry */
+	EntryTypes: ['unknown','storage','stream','lockbytes','property','root']
+};
+
+exports.read = readSync;
+exports.parse = parse;
+exports.utils = {
+	ReadShift: ReadShift,
+	CheckField: CheckField,
+	prep_blob: prep_blob,
+	bconcat: bconcat,
+	consts: consts
+};
+
+return exports;
+})();
+
+if(typeof require !== 'undefined' && typeof module !== 'undefined' && typeof DO_NOT_EXPORT_CFB === 'undefined') { module.exports = CFB; }
+function isval(x) { return x !== undefined && x !== null; }
+
+function keys(o) { return Object.keys(o); }
+
+function evert_key(obj, key) {
+	var o = [], K = keys(obj);
+	for(var i = 0; i !== K.length; ++i) o[obj[K[i]][key]] = K[i];
+	return o;
+}
+
+function evert(obj) {
+	var o = [], K = keys(obj);
+	for(var i = 0; i !== K.length; ++i) o[obj[K[i]]] = K[i];
+	return o;
+}
+
+function evert_num(obj) {
+	var o = [], K = keys(obj);
+	for(var i = 0; i !== K.length; ++i) o[obj[K[i]]] = parseInt(K[i],10);
+	return o;
+}
+
+function evert_arr(obj) {
+	var o = [], K = keys(obj);
+	for(var i = 0; i !== K.length; ++i) {
+		if(o[obj[K[i]]] == null) o[obj[K[i]]] = [];
+		o[obj[K[i]]].push(K[i]);
+	}
+	return o;
+}
+
+/* TODO: date1904 logic */
+function datenum(v, date1904) {
+	if(date1904) v+=1462;
+	var epoch = Date.parse(v);
+	return (epoch + 2209161600000) / (24 * 60 * 60 * 1000);
+}
+
+function cc2str(arr) {
+	var o = "";
+	for(var i = 0; i != arr.length; ++i) o += String.fromCharCode(arr[i]);
+	return o;
+}
+
+function getdata(data) {
+	if(!data) return null;
+	if(data.name.substr(-4) === ".bin") {
+		if(data.data) return char_codes(data.data);
+		if(data.asNodeBuffer && has_buf) return data.asNodeBuffer();
+		if(data._data && data._data.getContent) return Array.prototype.slice.call(data._data.getContent());
+	} else {
+		if(data.data) return data.name.substr(-4) !== ".bin" ? debom_xml(data.data) : char_codes(data.data);
+		if(data.asNodeBuffer && has_buf) return debom_xml(data.asNodeBuffer().toString('binary'));
+		if(data.asBinary) return debom_xml(data.asBinary());
+		if(data._data && data._data.getContent) return debom_xml(cc2str(Array.prototype.slice.call(data._data.getContent(),0)));
+	}
+	return null;
+}
+
+function safegetzipfile(zip, file) {
+	var f = file; if(zip.files[f]) return zip.files[f];
+
+	var lowerCaseFiles = {};
+	for (var key in zip.files) {
+		lowerCaseFiles[key.toLowerCase()] = zip.files[key];
+	}
+
+	f = file.toLowerCase(); if(lowerCaseFiles[f]) return lowerCaseFiles[f];
+	f = f.replace(/\//g,'\\'); if(lowerCaseFiles[f]) return lowerCaseFiles[f];
+	return null;
+}
+
+function getzipfile(zip, file) {
+	var o = safegetzipfile(zip, file);
+	if(o == null) throw new Error("Cannot find file " + file + " in zip");
+	return o;
+}
+
+function getzipdata(zip, file, safe) {
+	if(!safe) return getdata(getzipfile(zip, file));
+	if(!file) return null;
+	try { return getzipdata(zip, file); } catch(e) { return null; }
+}
+
+var _fs, jszip;
+if(typeof JSZip !== 'undefined') jszip = JSZip;
+if (typeof exports !== 'undefined') {
+	if (typeof module !== 'undefined' && module.exports) {
+		if(has_buf && typeof jszip === 'undefined') jszip = require('js'+'zip');
+		if(typeof jszip === 'undefined') jszip = require('./js'+'zip').JSZip;
+		_fs = require('f'+'s');
+	}
+}
+var attregexg=/([\w:]+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:'))/g;
+var tagregex=/<[^>]*>/g;
+var nsregex=/<\w*:/, nsregex2 = /<(\/?)\w+:/;
+function parsexmltag(tag, skip_root) {
+	var z = [];
+	var eq = 0, c = 0;
+	for(; eq !== tag.length; ++eq) if((c = tag.charCodeAt(eq)) === 32 || c === 10 || c === 13) break;
+	if(!skip_root) z[0] = tag.substr(0, eq);
+	if(eq === tag.length) return z;
+	var m = tag.match(attregexg), j=0, w="", v="", i=0, q="", cc="";
+	if(m) for(i = 0; i != m.length; ++i) {
+		cc = m[i];
+		for(c=0; c != cc.length; ++c) if(cc.charCodeAt(c) === 61) break;
+		q = cc.substr(0,c); v = cc.substring(c+2, cc.length-1);
+		for(j=0;j!=q.length;++j) if(q.charCodeAt(j) === 58) break;
+		if(j===q.length) z[q] = v;
+		else z[(j===5 && q.substr(0,5)==="xmlns"?"xmlns":"")+q.substr(j+1)] = v;
+	}
+	return z;
+}
+function strip_ns(x) { return x.replace(nsregex2, "<$1"); }
+
+var encodings = {
+	'&quot;': '"',
+	'&apos;': "'",
+	'&gt;': '>',
+	'&lt;': '<',
+	'&amp;': '&'
+};
+var rencoding = evert(encodings);
+var rencstr = "&<>'\"".split("");
+
+// TODO: CP remap (need to read file version to determine OS)
+var unescapexml = (function() {
+	var encregex = /&[a-z]*;/g, coderegex = /_x([\da-fA-F]+)_/g;
+	return function unescapexml(text){
+		var s = text + '';
+		return s.replace(encregex, function($$) { return encodings[$$]; }).replace(coderegex,function(m,c) {return String.fromCharCode(parseInt(c,16));});
+	};
+})();
+
+var decregex=/[&<>'"]/g, charegex = /[\u0000-\u0008\u000b-\u001f]/g;
+function escapexml(text){
+	var s = text + '';
+	return s.replace(decregex, function(y) { return rencoding[y]; }).replace(charegex,function(s) { return "_x" + ("000"+s.charCodeAt(0).toString(16)).substr(-4) + "_";});
+}
+
+/* TODO: handle codepages */
+var xlml_fixstr = (function() {
+	var entregex = /&#(\d+);/g;
+	function entrepl($$,$1) { return String.fromCharCode(parseInt($1,10)); }
+	return function xlml_fixstr(str) { return str.replace(entregex,entrepl); };
+})();
+
+function parsexmlbool(value, tag) {
+	switch(value) {
+		case '1': case 'true': case 'TRUE': return true;
+		/* case '0': case 'false': case 'FALSE':*/
+		default: return false;
+	}
+}
+
+var utf8read = function utf8reada(orig) {
+	var out = "", i = 0, c = 0, d = 0, e = 0, f = 0, w = 0;
+	while (i < orig.length) {
+		c = orig.charCodeAt(i++);
+		if (c < 128) { out += String.fromCharCode(c); continue; }
+		d = orig.charCodeAt(i++);
+		if (c>191 && c<224) { out += String.fromCharCode(((c & 31) << 6) | (d & 63)); continue; }
+		e = orig.charCodeAt(i++);
+		if (c < 240) { out += String.fromCharCode(((c & 15) << 12) | ((d & 63) << 6) | (e & 63)); continue; }
+		f = orig.charCodeAt(i++);
+		w = (((c & 7) << 18) | ((d & 63) << 12) | ((e & 63) << 6) | (f & 63))-65536;
+		out += String.fromCharCode(0xD800 + ((w>>>10)&1023));
+		out += String.fromCharCode(0xDC00 + (w&1023));
+	}
+	return out;
+};
+
+
+if(has_buf) {
+	var utf8readb = function utf8readb(data) {
+		var out = new Buffer(2*data.length), w, i, j = 1, k = 0, ww=0, c;
+		for(i = 0; i < data.length; i+=j) {
+			j = 1;
+			if((c=data.charCodeAt(i)) < 128) w = c;
+			else if(c < 224) { w = (c&31)*64+(data.charCodeAt(i+1)&63); j=2; }
+			else if(c < 240) { w=(c&15)*4096+(data.charCodeAt(i+1)&63)*64+(data.charCodeAt(i+2)&63); j=3; }
+			else { j = 4;
+				w = (c & 7)*262144+(data.charCodeAt(i+1)&63)*4096+(data.charCodeAt(i+2)&63)*64+(data.charCodeAt(i+3)&63);
+				w -= 65536; ww = 0xD800 + ((w>>>10)&1023); w = 0xDC00 + (w&1023);
+			}
+			if(ww !== 0) { out[k++] = ww&255; out[k++] = ww>>>8; ww = 0; }
+			out[k++] = w%256; out[k++] = w>>>8;
+		}
+		out.length = k;
+		return out.toString('ucs2');
+	};
+	var corpus = "foo bar baz\u00e2\u0098\u0083\u00f0\u009f\u008d\u00a3";
+	if(utf8read(corpus) == utf8readb(corpus)) utf8read = utf8readb;
+	var utf8readc = function utf8readc(data) { return Buffer(data, 'binary').toString('utf8'); };
+	if(utf8read(corpus) == utf8readc(corpus)) utf8read = utf8readc;
+}
+
+// matches <foo>...</foo> extracts content
+var matchtag = (function() {
+	var mtcache = {};
+	return function matchtag(f,g) {
+		var t = f+"|"+g;
+		if(mtcache[t] !== undefined) return mtcache[t];
+		return (mtcache[t] = new RegExp('<(?:\\w+:)?'+f+'(?: xml:space="preserve")?(?:[^>]*)>([^\u2603]*)</(?:\\w+:)?'+f+'>',(g||"")));
+	};
+})();
+
+var vtregex = (function(){ var vt_cache = {};
+	return function vt_regex(bt) {
+		if(vt_cache[bt] !== undefined) return vt_cache[bt];
+		return (vt_cache[bt] = new RegExp("<vt:" + bt + ">(.*?)</vt:" + bt + ">", 'g') );
+};})();
+var vtvregex = /<\/?vt:variant>/g, vtmregex = /<vt:([^>]*)>(.*)</;
+function parseVector(data) {
+	var h = parsexmltag(data);
+
+	var matches = data.match(vtregex(h.baseType))||[];
+	if(matches.length != h.size) throw "unexpected vector length " + matches.length + " != " + h.size;
+	var res = [];
+	matches.forEach(function(x) {
+		var v = x.replace(vtvregex,"").match(vtmregex);
+		res.push({v:v[2], t:v[1]});
+	});
+	return res;
+}
+
+var wtregex = /(^\s|\s$|\n)/;
+function writetag(f,g) {return '<' + f + (g.match(wtregex)?' xml:space="preserve"' : "") + '>' + g + '</' + f + '>';}
+
+function wxt_helper(h) { return keys(h).map(function(k) { return " " + k + '="' + h[k] + '"';}).join(""); }
+function writextag(f,g,h) { return '<' + f + (isval(h) ? wxt_helper(h) : "") + (isval(g) ? (g.match(wtregex)?' xml:space="preserve"' : "") + '>' + g + '</' + f : "/") + '>';}
+
+function write_w3cdtf(d, t) { try { return d.toISOString().replace(/\.\d*/,""); } catch(e) { if(t) throw e; } }
+
+function write_vt(s) {
+	switch(typeof s) {
+		case 'string': return writextag('vt:lpwstr', s);
+		case 'number': return writextag((s|0)==s?'vt:i4':'vt:r8', String(s));
+		case 'boolean': return writextag('vt:bool',s?'true':'false');
+	}
+	if(s instanceof Date) return writextag('vt:filetime', write_w3cdtf(s));
+	throw new Error("Unable to serialize " + s);
+}
+
+var XML_HEADER = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\r\n';
+var XMLNS = {
+	'dc': 'http://purl.org/dc/elements/1.1/',
+	'dcterms': 'http://purl.org/dc/terms/',
+	'dcmitype': 'http://purl.org/dc/dcmitype/',
+	'mx': 'http://schemas.microsoft.com/office/mac/excel/2008/main',
+	'r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',
+	'sjs': 'http://schemas.openxmlformats.org/package/2006/sheetjs/core-properties',
+	'vt': 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes',
+	'xsi': 'http://www.w3.org/2001/XMLSchema-instance',
+	'xsd': 'http://www.w3.org/2001/XMLSchema'
+};
+
+XMLNS.main = [
+	'http://schemas.openxmlformats.org/spreadsheetml/2006/main',
+	'http://purl.oclc.org/ooxml/spreadsheetml/main',
+	'http://schemas.microsoft.com/office/excel/2006/main',
+	'http://schemas.microsoft.com/office/excel/2006/2'
+];
+
+function readIEEE754(buf, idx, isLE, nl, ml) {
+	if(isLE === undefined) isLE = true;
+	if(!nl) nl = 8;
+	if(!ml && nl === 8) ml = 52;
+	var e, m, el = nl * 8 - ml - 1, eMax = (1 << el) - 1, eBias = eMax >> 1;
+	var bits = -7, d = isLE ? -1 : 1, i = isLE ? (nl - 1) : 0, s = buf[idx + i];
+
+	i += d;
+	e = s & ((1 << (-bits)) - 1); s >>>= (-bits); bits += el;
+	for (; bits > 0; e = e * 256 + buf[idx + i], i += d, bits -= 8);
+	m = e & ((1 << (-bits)) - 1); e >>>= (-bits); bits += ml;
+	for (; bits > 0; m = m * 256 + buf[idx + i], i += d, bits -= 8);
+	if (e === eMax) return m ? NaN : ((s ? -1 : 1) * Infinity);
+	else if (e === 0) e = 1 - eBias;
+	else { m = m + Math.pow(2, ml); e = e - eBias; }
+	return (s ? -1 : 1) * m * Math.pow(2, e - ml);
+}
+
+var __toBuffer, ___toBuffer;
+__toBuffer = ___toBuffer = function toBuffer_(bufs) { var x = []; for(var i = 0; i < bufs[0].length; ++i) { x.push.apply(x, bufs[0][i]); } return x; };
+var __utf16le, ___utf16le;
+__utf16le = ___utf16le = function utf16le_(b,s,e) { var ss=[]; for(var i=s; i<e; i+=2) ss.push(String.fromCharCode(__readUInt16LE(b,i))); return ss.join(""); };
+var __hexlify, ___hexlify;
+__hexlify = ___hexlify = function hexlify_(b,s,l) { return b.slice(s,(s+l)).map(function(x){return (x<16?"0":"") + x.toString(16);}).join(""); };
+var __utf8, ___utf8;
+__utf8 = ___utf8 = function(b,s,e) { var ss=[]; for(var i=s; i<e; i++) ss.push(String.fromCharCode(__readUInt8(b,i))); return ss.join(""); };
+var __lpstr, ___lpstr;
+__lpstr = ___lpstr = function lpstr_(b,i) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : "";};
+var __lpwstr, ___lpwstr;
+__lpwstr = ___lpwstr = function lpwstr_(b,i) { var len = 2*__readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : "";};
+var __double, ___double;
+__double = ___double = function(b, idx) { return readIEEE754(b, idx);};
+
+var is_buf = function is_buf_a(a) { return Array.isArray(a); };
+if(has_buf) {
+	__utf16le = function utf16le_b(b,s,e) { if(!Buffer.isBuffer(b)) return ___utf16le(b,s,e); return b.toString('utf16le',s,e); };
+	__hexlify = function(b,s,l) { return Buffer.isBuffer(b) ? b.toString('hex',s,s+l) : ___hexlify(b,s,l); };
+	__lpstr = function lpstr_b(b,i) { if(!Buffer.isBuffer(b)) return ___lpstr(b, i); var len = b.readUInt32LE(i); return len > 0 ? b.toString('utf8',i+4,i+4+len-1) : "";};
+	__lpwstr = function lpwstr_b(b,i) { if(!Buffer.isBuffer(b)) return ___lpwstr(b, i); var len = 2*b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len-1);};
+	__utf8 = function utf8_b(s,e) { return this.toString('utf8',s,e); };
+	__toBuffer = function(bufs) { return (bufs[0].length > 0 && Buffer.isBuffer(bufs[0][0])) ? Buffer.concat(bufs[0]) : ___toBuffer(bufs);};
+	bconcat = function(bufs) { return Buffer.isBuffer(bufs[0]) ? Buffer.concat(bufs) : [].concat.apply([], bufs); };
+	__double = function double_(b,i) { if(Buffer.isBuffer(b)) return b.readDoubleLE(i); return ___double(b,i); };
+	is_buf = function is_buf_b(a) { return Buffer.isBuffer(a) || Array.isArray(a); };
+}
+
+/* from js-xls */
+if(typeof cptable !== 'undefined') {
+	__utf16le = function(b,s,e) { return cptable.utils.decode(1200, b.slice(s,e)); };
+	__utf8 = function(b,s,e) { return cptable.utils.decode(65001, b.slice(s,e)); };
+	__lpstr = function(b,i) { var len = __readUInt32LE(b,i); return len > 0 ? cptable.utils.decode(current_codepage, b.slice(i+4, i+4+len-1)) : "";};
+	__lpwstr = function(b,i) { var len = 2*__readUInt32LE(b,i); return len > 0 ? cptable.utils.decode(1200, b.slice(i+4,i+4+len-1)) : "";};
+}
+
+var __readUInt8 = function(b, idx) { return b[idx]; };
+var __readUInt16LE = function(b, idx) { return b[idx+1]*(1<<8)+b[idx]; };
+var __readInt16LE = function(b, idx) { var u = b[idx+1]*(1<<8)+b[idx]; return (u < 0x8000) ? u : (0xffff - u + 1) * -1; };
+var __readUInt32LE = function(b, idx) { return b[idx+3]*(1<<24)+(b[idx+2]<<16)+(b[idx+1]<<8)+b[idx]; };
+var __readInt32LE = function(b, idx) { return (b[idx+3]<<24)|(b[idx+2]<<16)|(b[idx+1]<<8)|b[idx]; };
+
+var ___unhexlify = function(s) { return s.match(/../g).map(function(x) { return parseInt(x,16);}); };
+var __unhexlify = typeof Buffer !== "undefined" ? function(s) { return Buffer.isBuffer(s) ? new Buffer(s, 'hex') : ___unhexlify(s); } : ___unhexlify;
+
+function ReadShift(size, t) {
+	var o="", oI, oR, oo=[], w, vv, i, loc;
+	switch(t) {
+		case 'dbcs':
+			loc = this.l;
+			if(has_buf && Buffer.isBuffer(this)) o = this.slice(this.l, this.l+2*size).toString("utf16le");
+			else for(i = 0; i != size; ++i) { o+=String.fromCharCode(__readUInt16LE(this, loc)); loc+=2; }
+			size *= 2;
+			break;
+
+		case 'utf8': o = __utf8(this, this.l, this.l + size); break;
+		case 'utf16le': size *= 2; o = __utf16le(this, this.l, this.l + size); break;
+
+		/* [MS-OLEDS] 2.1.4 LengthPrefixedAnsiString */
+		case 'lpstr': o = __lpstr(this, this.l); size = 5 + o.length; break;
+		/* [MS-OLEDS] 2.1.5 LengthPrefixedUnicodeString */
+		case 'lpwstr': o = __lpwstr(this, this.l); size = 5 + o.length; if(o[o.length-1] == '\u0000') size += 2; break;
+
+		case 'cstr': size = 0; o = "";
+			while((w=__readUInt8(this, this.l + size++))!==0) oo.push(_getchar(w));
+			o = oo.join(""); break;
+		case 'wstr': size = 0; o = "";
+			while((w=__readUInt16LE(this,this.l +size))!==0){oo.push(_getchar(w));size+=2;}
+			size+=2; o = oo.join(""); break;
+
+		/* sbcs and dbcs support continue records in the SST way TODO codepages */
+		case 'dbcs-cont': o = ""; loc = this.l;
+			for(i = 0; i != size; ++i) {
+				if(this.lens && this.lens.indexOf(loc) !== -1) {
+					w = __readUInt8(this, loc);
+					this.l = loc + 1;
+					vv = ReadShift.call(this, size-i, w ? 'dbcs-cont' : 'sbcs-cont');
+					return oo.join("") + vv;
+				}
+				oo.push(_getchar(__readUInt16LE(this, loc)));
+				loc+=2;
+			} o = oo.join(""); size *= 2; break;
+
+		case 'sbcs-cont': o = ""; loc = this.l;
+			for(i = 0; i != size; ++i) {
+				if(this.lens && this.lens.indexOf(loc) !== -1) {
+					w = __readUInt8(this, loc);
+					this.l = loc + 1;
+					vv = ReadShift.call(this, size-i, w ? 'dbcs-cont' : 'sbcs-cont');
+					return oo.join("") + vv;
+				}
+				oo.push(_getchar(__readUInt8(this, loc)));
+				loc+=1;
+			} o = oo.join(""); break;
+
+		default:
+	switch(size) {
+		case 1: oI = __readUInt8(this, this.l); this.l++; return oI;
+		case 2: oI = (t === 'i' ? __readInt16LE : __readUInt16LE)(this, this.l); this.l += 2; return oI;
+		case 4:
+			if(t === 'i' || (this[this.l+3] & 0x80)===0) { oI = __readInt32LE(this, this.l); this.l += 4; return oI; }
+			else { oR = __readUInt32LE(this, this.l); this.l += 4; return oR; } break;
+		case 8: if(t === 'f') { oR = __double(this, this.l); this.l += 8; return oR; }
+		/* falls through */
+		case 16: o = __hexlify(this, this.l, size); break;
+	}}
+	this.l+=size; return o;
+}
+
+function WriteShift(t, val, f) {
+	var size, i;
+	if(f === 'dbcs') {
+		for(i = 0; i != val.length; ++i) this.writeUInt16LE(val.charCodeAt(i), this.l + 2 * i);
+		size = 2 * val.length;
+	} else switch(t) {
+		case  1: size = 1; this[this.l] = val&255; break;
+		case  3: size = 3; this[this.l+2] = val & 255; val >>>= 8; this[this.l+1] = val&255; val >>>= 8; this[this.l] = val&255; break;
+		case  4: size = 4; this.writeUInt32LE(val, this.l); break;
+		case  8: size = 8; if(f === 'f') { this.writeDoubleLE(val, this.l); break; }
+		/* falls through */
+		case 16: break;
+		case -4: size = 4; this.writeInt32LE(val, this.l); break;
+	}
+	this.l += size; return this;
+}
+
+function CheckField(hexstr, fld) {
+	var m = __hexlify(this,this.l,hexstr.length>>1);
+	if(m !== hexstr) throw fld + 'Expected ' + hexstr + ' saw ' + m;
+	this.l += hexstr.length>>1;
+}
+
+function prep_blob(blob, pos) {
+	blob.l = pos;
+	blob.read_shift = ReadShift;
+	blob.chk = CheckField;
+	blob.write_shift = WriteShift;
+}
+
+function parsenoop(blob, length) { blob.l += length; }
+
+function writenoop(blob, length) { blob.l += length; }
+
+function new_buf(sz) {
+	var o = new_raw_buf(sz);
+	prep_blob(o, 0);
+	return o;
+}
+
+/* [MS-XLSB] 2.1.4 Record */
+function recordhopper(data, cb, opts) {
+	var tmpbyte, cntbyte, length;
+	prep_blob(data, data.l || 0);
+	while(data.l < data.length) {
+		var RT = data.read_shift(1);
+		if(RT & 0x80) RT = (RT & 0x7F) + ((data.read_shift(1) & 0x7F)<<7);
+		var R = XLSBRecordEnum[RT] || XLSBRecordEnum[0xFFFF];
+		tmpbyte = data.read_shift(1);
+		length = tmpbyte & 0x7F;
+		for(cntbyte = 1; cntbyte <4 && (tmpbyte & 0x80); ++cntbyte) length += ((tmpbyte = data.read_shift(1)) & 0x7F)<<(7*cntbyte);
+		var d = R.f(data, length, opts);
+		if(cb(d, R, RT)) return;
+	}
+}
+
+/* control buffer usage for fixed-length buffers */
+function buf_array() {
+	var bufs = [], blksz = 2048;
+	var newblk = function ba_newblk(sz) {
+		var o = new_buf(sz);
+		prep_blob(o, 0);
+		return o;
+	};
+
+	var curbuf = newblk(blksz);
+
+	var endbuf = function ba_endbuf() {
+		curbuf.length = curbuf.l;
+		if(curbuf.length > 0) bufs.push(curbuf);
+		curbuf = null;
+	};
+
+	var next = function ba_next(sz) {
+		if(sz < curbuf.length - curbuf.l) return curbuf;
+		endbuf();
+		return (curbuf = newblk(Math.max(sz+1, blksz)));
+	};
+
+	var end = function ba_end() {
+		endbuf();
+		return __toBuffer([bufs]);
+	};
+
+	var push = function ba_push(buf) { endbuf(); curbuf = buf; next(blksz); };
+
+	return { next:next, push:push, end:end, _bufs:bufs };
+}
+
+function write_record(ba, type, payload, length) {
+	var t = evert_RE[type], l;
+	if(!length) length = XLSBRecordEnum[t].p || (payload||[]).length || 0;
+	l = 1 + (t >= 0x80 ? 1 : 0) + 1 + length;
+	if(length >= 0x80) ++l; if(length >= 0x4000) ++l; if(length >= 0x200000) ++l;
+	var o = ba.next(l);
+	if(t <= 0x7F) o.write_shift(1, t);
+	else {
+		o.write_shift(1, (t & 0x7F) + 0x80);
+		o.write_shift(1, (t >> 7));
+	}
+	for(var i = 0; i != 4; ++i) {
+		if(length >= 0x80) { o.write_shift(1, (length & 0x7F)+0x80); length >>= 7; }
+		else { o.write_shift(1, length); break; }
+	}
+	if(length > 0 && is_buf(payload)) ba.push(payload);
+}
+/* XLS ranges enforced */
+function shift_cell_xls(cell, tgt) {
+	if(tgt.s) {
+		if(cell.cRel) cell.c += tgt.s.c;
+		if(cell.rRel) cell.r += tgt.s.r;
+	} else {
+		cell.c += tgt.c;
+		cell.r += tgt.r;
+	}
+	cell.cRel = cell.rRel = 0;
+	while(cell.c >= 0x100) cell.c -= 0x100;
+	while(cell.r >= 0x10000) cell.r -= 0x10000;
+	return cell;
+}
+
+function shift_range_xls(cell, range) {
+	cell.s = shift_cell_xls(cell.s, range.s);
+	cell.e = shift_cell_xls(cell.e, range.s);
+	return cell;
+}
+
+var OFFCRYPTO = {};
+var make_offcrypto = function(O, _crypto) {
+	var crypto;
+	if(typeof _crypto !== 'undefined') crypto = _crypto;
+	else if(typeof require !== 'undefined') {
+		try { crypto = require('cry'+'pto'); }
+		catch(e) { crypto = null; }
+	}
+
+	O.rc4 = function(key, data) {
+		var S = new Array(256);
+		var c = 0, i = 0, j = 0, t = 0;
+		for(i = 0; i != 256; ++i) S[i] = i;
+		for(i = 0; i != 256; ++i) {
+			j = (j + S[i] + (key[i%key.length]).charCodeAt(0))&255;
+			t = S[i]; S[i] = S[j]; S[j] = t;
+		}
+		i = j = 0; out = Buffer(data.length);
+		for(c = 0; c != data.length; ++c) {
+			i = (i + 1)&255;
+			j = (j + S[i])%256;
+			t = S[i]; S[i] = S[j]; S[j] = t;
+			out[c] = (data[c] ^ S[(S[i]+S[j])&255]);
+		}
+		return out;
+	};
+
+	if(crypto) {
+		O.md5 = function(hex) { return crypto.createHash('md5').update(hex).digest('hex'); };
+	} else {
+		O.md5 = function(hex) { throw "unimplemented"; };
+	}
+};
+make_offcrypto(OFFCRYPTO, typeof crypto !== "undefined" ? crypto : undefined);
+
+
+/* [MS-XLSB] 2.5.143 */
+function parse_StrRun(data, length) {
+	return { ich: data.read_shift(2), ifnt: data.read_shift(2) };
+}
+
+/* [MS-XLSB] 2.1.7.121 */
+function parse_RichStr(data, length) {
+	var start = data.l;
+	var flags = data.read_shift(1);
+	var str = parse_XLWideString(data);
+	var rgsStrRun = [];
+	var z = { t: str, h: str };
+	if((flags & 1) !== 0) { /* fRichStr */
+		/* TODO: formatted string */
+		var dwSizeStrRun = data.read_shift(4);
+		for(var i = 0; i != dwSizeStrRun; ++i) rgsStrRun.push(parse_StrRun(data));
+		z.r = rgsStrRun;
+	}
+	else z.r = "<t>" + escapexml(str) + "</t>";
+	if((flags & 2) !== 0) { /* fExtStr */
+		/* TODO: phonetic string */
+	}
+	data.l = start + length;
+	return z;
+}
+function write_RichStr(str, o) {
+	/* TODO: formatted string */
+	if(o == null) o = new_buf(5+2*str.t.length);
+	o.write_shift(1,0);
+	write_XLWideString(str.t, o);
+	return o;
+}
+
+/* [MS-XLSB] 2.5.9 */
+function parse_XLSBCell(data) {
+	var col = data.read_shift(4);
+	var iStyleRef = data.read_shift(2);
+	iStyleRef += data.read_shift(1) <<16;
+	var fPhShow = data.read_shift(1);
+	return { c:col, iStyleRef: iStyleRef };
+}
+function write_XLSBCell(cell, o) {
+	if(o == null) o = new_buf(8);
+	o.write_shift(-4, cell.c);
+	o.write_shift(3, cell.iStyleRef === undefined ? cell.iStyleRef : cell.s);
+	o.write_shift(1, 0); /* fPhShow */
+	return o;
+}
+
+
+/* [MS-XLSB] 2.5.21 */
+function parse_XLSBCodeName (data, length) { return parse_XLWideString(data, length); }
+
+/* [MS-XLSB] 2.5.166 */
+function parse_XLNullableWideString(data) {
+	var cchCharacters = data.read_shift(4);
+	return cchCharacters === 0 || cchCharacters === 0xFFFFFFFF ? "" : data.read_shift(cchCharacters, 'dbcs');
+}
+function write_XLNullableWideString(data, o) {
+	if(!o) o = new_buf(127);
+	o.write_shift(4, data.length > 0 ? data.length : 0xFFFFFFFF);
+	if(data.length > 0) o.write_shift(0, data, 'dbcs');
+	return o;
+}
+
+/* [MS-XLSB] 2.5.168 */
+function parse_XLWideString(data) {
+	var cchCharacters = data.read_shift(4);
+	return cchCharacters === 0 ? "" : data.read_shift(cchCharacters, 'dbcs');
+}
+function write_XLWideString(data, o) {
+	if(o == null) o = new_buf(4+2*data.length);
+	o.write_shift(4, data.length);
+	if(data.length > 0) o.write_shift(0, data, 'dbcs');
+	return o;
+}
+
+/* [MS-XLSB] 2.5.114 */
+var parse_RelID = parse_XLNullableWideString;
+var write_RelID = write_XLNullableWideString;
+
+
+/* [MS-XLSB] 2.5.122 */
+/* [MS-XLS] 2.5.217 */
+function parse_RkNumber(data) {
+	var b = data.slice(data.l, data.l+4);
+	var fX100 = b[0] & 1, fInt = b[0] & 2;
+	data.l+=4;
+	b[0] &= 0xFC; // b[0] &= ~3;
+	var RK = fInt === 0 ? __double([0,0,0,0,b[0],b[1],b[2],b[3]],0) : __readInt32LE(b,0)>>2;
+	return fX100 ? RK/100 : RK;
+}
+
+/* [MS-XLSB] 2.5.153 */
+function parse_UncheckedRfX(data) {
+	var cell = {s: {}, e: {}};
+	cell.s.r = data.read_shift(4);
+	cell.e.r = data.read_shift(4);
+	cell.s.c = data.read_shift(4);
+	cell.e.c = data.read_shift(4);
+	return cell;
+}
+
+function write_UncheckedRfX(r, o) {
+	if(!o) o = new_buf(16);
+	o.write_shift(4, r.s.r);
+	o.write_shift(4, r.e.r);
+	o.write_shift(4, r.s.c);
+	o.write_shift(4, r.e.c);
+	return o;
+}
+
+/* [MS-XLSB] 2.5.171 */
+/* [MS-XLS] 2.5.342 */
+function parse_Xnum(data, length) { return data.read_shift(8, 'f'); }
+function write_Xnum(data, o) { return (o || new_buf(8)).write_shift(8, 'f', data); }
+
+/* [MS-XLSB] 2.5.198.2 */
+var BErr = {
+	0x00: "#NULL!",
+	0x07: "#DIV/0!",
+	0x0F: "#VALUE!",
+	0x17: "#REF!",
+	0x1D: "#NAME?",
+	0x24: "#NUM!",
+	0x2A: "#N/A",
+	0x2B: "#GETTING_DATA",
+	0xFF: "#WTF?"
+};
+var RBErr = evert_num(BErr);
+
+/* [MS-XLSB] 2.4.321 BrtColor */
+function parse_BrtColor(data, length) {
+	var out = {};
+	var d = data.read_shift(1);
+	out.fValidRGB = d & 1;
+	out.xColorType = d >>> 1;
+	out.index = data.read_shift(1);
+	out.nTintAndShade = data.read_shift(2, 'i');
+	out.bRed   = data.read_shift(1);
+	out.bGreen = data.read_shift(1);
+	out.bBlue  = data.read_shift(1);
+	out.bAlpha = data.read_shift(1);
+}
+
+/* [MS-XLSB] 2.5.52 */
+function parse_FontFlags(data, length) {
+	var d = data.read_shift(1);
+	data.l++;
+	var out = {
+		fItalic: d & 0x2,
+		fStrikeout: d & 0x8,
+		fOutline: d & 0x10,
+		fShadow: d & 0x20,
+		fCondense: d & 0x40,
+		fExtend: d & 0x80
+	};
+	return out;
+}
+/* [MS-OLEPS] 2.2 PropertyType */
+{
+	var VT_EMPTY    = 0x0000;
+	var VT_NULL     = 0x0001;
+	var VT_I2       = 0x0002;
+	var VT_I4       = 0x0003;
+	var VT_R4       = 0x0004;
+	var VT_R8       = 0x0005;
+	var VT_CY       = 0x0006;
+	var VT_DATE     = 0x0007;
+	var VT_BSTR     = 0x0008;
+	var VT_ERROR    = 0x000A;
+	var VT_BOOL     = 0x000B;
+	var VT_VARIANT  = 0x000C;
+	var VT_DECIMAL  = 0x000E;
+	var VT_I1       = 0x0010;
+	var VT_UI1      = 0x0011;
+	var VT_UI2      = 0x0012;
+	var VT_UI4      = 0x0013;
+	var VT_I8       = 0x0014;
+	var VT_UI8      = 0x0015;
+	var VT_INT      = 0x0016;
+	var VT_UINT     = 0x0017;
+	var VT_LPSTR    = 0x001E;
+	var VT_LPWSTR   = 0x001F;
+	var VT_FILETIME = 0x0040;
+	var VT_BLOB     = 0x0041;
+	var VT_STREAM   = 0x0042;
+	var VT_STORAGE  = 0x0043;
+	var VT_STREAMED_Object  = 0x0044;
+	var VT_STORED_Object    = 0x0045;
+	var VT_BLOB_Object      = 0x0046;
+	var VT_CF       = 0x0047;
+	var VT_CLSID    = 0x0048;
+	var VT_VERSIONED_STREAM = 0x0049;
+	var VT_VECTOR   = 0x1000;
+	var VT_ARRAY    = 0x2000;
+
+	var VT_STRING   = 0x0050; // 2.3.3.1.11 VtString
+	var VT_USTR     = 0x0051; // 2.3.3.1.12 VtUnalignedString
+	var VT_CUSTOM   = [VT_STRING, VT_USTR];
+}
+
+/* [MS-OSHARED] 2.3.3.2.2.1 Document Summary Information PIDDSI */
+var DocSummaryPIDDSI = {
+	0x01: { n: 'CodePage', t: VT_I2 },
+	0x02: { n: 'Category', t: VT_STRING },
+	0x03: { n: 'PresentationFormat', t: VT_STRING },
+	0x04: { n: 'ByteCount', t: VT_I4 },
+	0x05: { n: 'LineCount', t: VT_I4 },
+	0x06: { n: 'ParagraphCount', t: VT_I4 },
+	0x07: { n: 'SlideCount', t: VT_I4 },
+	0x08: { n: 'NoteCount', t: VT_I4 },
+	0x09: { n: 'HiddenCount', t: VT_I4 },
+	0x0a: { n: 'MultimediaClipCount', t: VT_I4 },
+	0x0b: { n: 'Scale', t: VT_BOOL },
+	0x0c: { n: 'HeadingPair', t: VT_VECTOR | VT_VARIANT },
+	0x0d: { n: 'DocParts', t: VT_VECTOR | VT_LPSTR },
+	0x0e: { n: 'Manager', t: VT_STRING },
+	0x0f: { n: 'Company', t: VT_STRING },
+	0x10: { n: 'LinksDirty', t: VT_BOOL },
+	0x11: { n: 'CharacterCount', t: VT_I4 },
+	0x13: { n: 'SharedDoc', t: VT_BOOL },
+	0x16: { n: 'HLinksChanged', t: VT_BOOL },
+	0x17: { n: 'AppVersion', t: VT_I4, p: 'version' },
+	0x1A: { n: 'ContentType', t: VT_STRING },
+	0x1B: { n: 'ContentStatus', t: VT_STRING },
+	0x1C: { n: 'Language', t: VT_STRING },
+	0x1D: { n: 'Version', t: VT_STRING },
+	0xFF: {}
+};
+
+/* [MS-OSHARED] 2.3.3.2.1.1 Summary Information Property Set PIDSI */
+var SummaryPIDSI = {
+	0x01: { n: 'CodePage', t: VT_I2 },
+	0x02: { n: 'Title', t: VT_STRING },
+	0x03: { n: 'Subject', t: VT_STRING },
+	0x04: { n: 'Author', t: VT_STRING },
+	0x05: { n: 'Keywords', t: VT_STRING },
+	0x06: { n: 'Comments', t: VT_STRING },
+	0x07: { n: 'Template', t: VT_STRING },
+	0x08: { n: 'LastAuthor', t: VT_STRING },
+	0x09: { n: 'RevNumber', t: VT_STRING },
+	0x0A: { n: 'EditTime', t: VT_FILETIME },
+	0x0B: { n: 'LastPrinted', t: VT_FILETIME },
+	0x0C: { n: 'CreatedDate', t: VT_FILETIME },
+	0x0D: { n: 'ModifiedDate', t: VT_FILETIME },
+	0x0E: { n: 'PageCount', t: VT_I4 },
+	0x0F: { n: 'WordCount', t: VT_I4 },
+	0x10: { n: 'CharCount', t: VT_I4 },
+	0x11: { n: 'Thumbnail', t: VT_CF },
+	0x12: { n: 'ApplicationName', t: VT_LPSTR },
+	0x13: { n: 'DocumentSecurity', t: VT_I4 },
+	0xFF: {}
+};
+
+/* [MS-OLEPS] 2.18 */
+var SpecialProperties = {
+	0x80000000: { n: 'Locale', t: VT_UI4 },
+	0x80000003: { n: 'Behavior', t: VT_UI4 },
+	0x72627262: {}
+};
+
+(function() {
+	for(var y in SpecialProperties) if(SpecialProperties.hasOwnProperty(y))
+	DocSummaryPIDDSI[y] = SummaryPIDSI[y] = SpecialProperties[y];
+})();
+
+/* [MS-XLS] 2.4.63 Country/Region codes */
+var CountryEnum = {
+	0x0001: "US", // United States
+	0x0002: "CA", // Canada
+	0x0003: "", // Latin America (except Brazil)
+	0x0007: "RU", // Russia
+	0x0014: "EG", // Egypt
+	0x001E: "GR", // Greece
+	0x001F: "NL", // Netherlands
+	0x0020: "BE", // Belgium
+	0x0021: "FR", // France
+	0x0022: "ES", // Spain
+	0x0024: "HU", // Hungary
+	0x0027: "IT", // Italy
+	0x0029: "CH", // Switzerland
+	0x002B: "AT", // Austria
+	0x002C: "GB", // United Kingdom
+	0x002D: "DK", // Denmark
+	0x002E: "SE", // Sweden
+	0x002F: "NO", // Norway
+	0x0030: "PL", // Poland
+	0x0031: "DE", // Germany
+	0x0034: "MX", // Mexico
+	0x0037: "BR", // Brazil
+	0x003d: "AU", // Australia
+	0x0040: "NZ", // New Zealand
+	0x0042: "TH", // Thailand
+	0x0051: "JP", // Japan
+	0x0052: "KR", // Korea
+	0x0054: "VN", // Viet Nam
+	0x0056: "CN", // China
+	0x005A: "TR", // Turkey
+	0x0069: "JS", // Ramastan
+	0x00D5: "DZ", // Algeria
+	0x00D8: "MA", // Morocco
+	0x00DA: "LY", // Libya
+	0x015F: "PT", // Portugal
+	0x0162: "IS", // Iceland
+	0x0166: "FI", // Finland
+	0x01A4: "CZ", // Czech Republic
+	0x0376: "TW", // Taiwan
+	0x03C1: "LB", // Lebanon
+	0x03C2: "JO", // Jordan
+	0x03C3: "SY", // Syria
+	0x03C4: "IQ", // Iraq
+	0x03C5: "KW", // Kuwait
+	0x03C6: "SA", // Saudi Arabia
+	0x03CB: "AE", // United Arab Emirates
+	0x03CC: "IL", // Israel
+	0x03CE: "QA", // Qatar
+	0x03D5: "IR", // Iran
+	0xFFFF: "US"  // United States
+};
+
+/* [MS-XLS] 2.5.127 */
+var XLSFillPattern = [
+	null,
+	'solid',
+	'mediumGray',
+	'darkGray',
+	'lightGray',
+	'darkHorizontal',
+	'darkVertical',
+	'darkDown',
+	'darkUp',
+	'darkGrid',
+	'darkTrellis',
+	'lightHorizontal',
+	'lightVertical',
+	'lightDown',
+	'lightUp',
+	'lightGrid',
+	'lightTrellis',
+	'gray125',
+	'gray0625'
+];
+
+function rgbify(arr) { return arr.map(function(x) { return [(x>>16)&255,(x>>8)&255,x&255]; }); }
+
+/* [MS-XLS] 2.5.161 */
+var XLSIcv = rgbify([
+	/* Color Constants */
+	0x000000,
+	0xFFFFFF,
+	0xFF0000,
+	0x00FF00,
+	0x0000FF,
+	0xFFFF00,
+	0xFF00FF,
+	0x00FFFF,
+
+	/* Defaults */
+	0x000000,
+	0xFFFFFF,
+	0xFF0000,
+	0x00FF00,
+	0x0000FF,
+	0xFFFF00,
+	0xFF00FF,
+	0x00FFFF,
+
+	0x800000,
+	0x008000,
+	0x000080,
+	0x808000,
+	0x800080,
+	0x008080,
+	0xC0C0C0,
+	0x808080,
+	0x9999FF,
+	0x993366,
+	0xFFFFCC,
+	0xCCFFFF,
+	0x660066,
+	0xFF8080,
+	0x0066CC,
+	0xCCCCFF,
+
+	0x000080,
+	0xFF00FF,
+	0xFFFF00,
+	0x00FFFF,
+	0x800080,
+	0x800000,
+	0x008080,
+	0x0000FF,
+	0x00CCFF,
+	0xCCFFFF,
+	0xCCFFCC,
+	0xFFFF99,
+	0x99CCFF,
+	0xFF99CC,
+	0xCC99FF,
+	0xFFCC99,
+
+	0x3366FF,
+	0x33CCCC,
+	0x99CC00,
+	0xFFCC00,
+	0xFF9900,
+	0xFF6600,
+	0x666699,
+	0x969696,
+	0x003366,
+	0x339966,
+	0x003300,
+	0x333300,
+	0x993300,
+	0x993366,
+	0x333399,
+	0x333333,
+
+	/* Sheet */
+	0xFFFFFF,
+	0x000000
+]);
+
+/* Parts enumerated in OPC spec, MS-XLSB and MS-XLSX */
+/* 12.3 Part Summary <SpreadsheetML> */
+/* 14.2 Part Summary <DrawingML> */
+/* [MS-XLSX] 2.1 Part Enumerations */
+/* [MS-XLSB] 2.1.7 Part Enumeration */
+var ct2type = {
+	/* Workbook */
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": "workbooks",
+
+	/* Worksheet */
+	"application/vnd.ms-excel.binIndexWs": "TODO", /* Binary Index */
+
+	/* Chartsheet */
+	"application/vnd.ms-excel.chartsheet": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": "TODO",
+
+	/* Dialogsheet */
+	"application/vnd.ms-excel.dialogsheet": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": "TODO",
+
+	/* Macrosheet */
+	"application/vnd.ms-excel.macrosheet": "TODO",
+	"application/vnd.ms-excel.macrosheet+xml": "TODO",
+	"application/vnd.ms-excel.intlmacrosheet": "TODO",
+	"application/vnd.ms-excel.binIndexMs": "TODO", /* Binary Index */
+
+	/* File Properties */
+	"application/vnd.openxmlformats-package.core-properties+xml": "coreprops",
+	"application/vnd.openxmlformats-officedocument.custom-properties+xml": "custprops",
+	"application/vnd.openxmlformats-officedocument.extended-properties+xml": "extprops",
+
+	/* Custom Data Properties */
+	"application/vnd.openxmlformats-officedocument.customXmlProperties+xml": "TODO",
+
+	/* Comments */
+	"application/vnd.ms-excel.comments": "comments",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": "comments",
+
+	/* PivotTable */
+	"application/vnd.ms-excel.pivotTable": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml": "TODO",
+
+	/* Calculation Chain */
+	"application/vnd.ms-excel.calcChain": "calcchains",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml": "calcchains",
+
+	/* Printer Settings */
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings": "TODO",
+
+	/* ActiveX */
+	"application/vnd.ms-office.activeX": "TODO",
+	"application/vnd.ms-office.activeX+xml": "TODO",
+
+	/* Custom Toolbars */
+	"application/vnd.ms-excel.attachedToolbars": "TODO",
+
+	/* External Data Connections */
+	"application/vnd.ms-excel.connections": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": "TODO",
+
+	/* External Links */
+	"application/vnd.ms-excel.externalLink": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml": "TODO",
+
+	/* Metadata */
+	"application/vnd.ms-excel.sheetMetadata": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml": "TODO",
+
+	/* PivotCache */
+	"application/vnd.ms-excel.pivotCacheDefinition": "TODO",
+	"application/vnd.ms-excel.pivotCacheRecords": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml": "TODO",
+
+	/* Query Table */
+	"application/vnd.ms-excel.queryTable": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml": "TODO",
+
+	/* Shared Workbook */
+	"application/vnd.ms-excel.userNames": "TODO",
+	"application/vnd.ms-excel.revisionHeaders": "TODO",
+	"application/vnd.ms-excel.revisionLog": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml": "TODO",
+
+	/* Single Cell Table */
+	"application/vnd.ms-excel.tableSingleCells": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml": "TODO",
+
+	/* Slicer */
+	"application/vnd.ms-excel.slicer": "TODO",
+	"application/vnd.ms-excel.slicerCache": "TODO",
+	"application/vnd.ms-excel.slicer+xml": "TODO",
+	"application/vnd.ms-excel.slicerCache+xml": "TODO",
+
+	/* Sort Map */
+	"application/vnd.ms-excel.wsSortMap": "TODO",
+
+	/* Table */
+	"application/vnd.ms-excel.table": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": "TODO",
+
+	/* Themes */
+	"application/vnd.openxmlformats-officedocument.theme+xml": "themes",
+
+	/* Timeline */
+	"application/vnd.ms-excel.Timeline+xml": "TODO", /* verify */
+	"application/vnd.ms-excel.TimelineCache+xml": "TODO", /* verify */
+
+	/* VBA */
+	"application/vnd.ms-office.vbaProject": "vba",
+	"application/vnd.ms-office.vbaProjectSignature": "vba",
+
+	/* Volatile Dependencies */
+	"application/vnd.ms-office.volatileDependencies": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml": "TODO",
+
+	/* Control Properties */
+	"application/vnd.ms-excel.controlproperties+xml": "TODO",
+
+	/* Data Model */
+	"application/vnd.openxmlformats-officedocument.model+data": "TODO",
+
+	/* Survey */
+	"application/vnd.ms-excel.Survey+xml": "TODO",
+
+	/* Drawing */
+	"application/vnd.openxmlformats-officedocument.drawing+xml": "TODO",
+	"application/vnd.openxmlformats-officedocument.drawingml.chart+xml": "TODO",
+	"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": "TODO",
+	"application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml": "TODO",
+	"application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml": "TODO",
+	"application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml": "TODO",
+	"application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml": "TODO",
+
+	/* VML */
+	"application/vnd.openxmlformats-officedocument.vmlDrawing": "TODO",
+
+	"application/vnd.openxmlformats-package.relationships+xml": "rels",
+	"application/vnd.openxmlformats-officedocument.oleObject": "TODO",
+
+	"sheet": "js"
+};
+
+var CT_LIST = (function(){
+	var o = {
+		workbooks: {
+			xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml",
+			xlsm: "application/vnd.ms-excel.sheet.macroEnabled.main+xml",
+			xlsb: "application/vnd.ms-excel.sheet.binary.macroEnabled.main",
+			xltx: "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml"
+		},
+		strs: { /* Shared Strings */
+			xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml",
+			xlsb: "application/vnd.ms-excel.sharedStrings"
+		},
+		sheets: {
+			xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml",
+			xlsb: "application/vnd.ms-excel.worksheet"
+		},
+		styles: {/* Styles */
+			xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml",
+			xlsb: "application/vnd.ms-excel.styles"
+		}
+	};
+	keys(o).forEach(function(k) { if(!o[k].xlsm) o[k].xlsm = o[k].xlsx; });
+	keys(o).forEach(function(k){ keys(o[k]).forEach(function(v) { ct2type[o[k][v]] = k; }); });
+	return o;
+})();
+
+var type2ct = evert_arr(ct2type);
+
+XMLNS.CT = 'http://schemas.openxmlformats.org/package/2006/content-types';
+
+function parse_ct(data, opts) {
+	var ctext = {};
+	if(!data || !data.match) return data;
+	var ct = { workbooks: [], sheets: [], calcchains: [], themes: [], styles: [],
+		coreprops: [], extprops: [], custprops: [], strs:[], comments: [], vba: [],
+		TODO:[], rels:[], xmlns: "" };
+	(data.match(tagregex)||[]).forEach(function(x) {
+		var y = parsexmltag(x);
+		switch(y[0].replace(nsregex,"<")) {
+			case '<?xml': break;
+			case '<Types': ct.xmlns = y['xmlns' + (y[0].match(/<(\w+):/)||["",""])[1] ]; break;
+			case '<Default': ctext[y.Extension] = y.ContentType; break;
+			case '<Override':
+				if(ct[ct2type[y.ContentType]] !== undefined) ct[ct2type[y.ContentType]].push(y.PartName);
+				else if(opts.WTF) console.error(y);
+				break;
+		}
+	});
+	if(ct.xmlns !== XMLNS.CT) throw new Error("Unknown Namespace: " + ct.xmlns);
+	ct.calcchain = ct.calcchains.length > 0 ? ct.calcchains[0] : "";
+	ct.sst = ct.strs.length > 0 ? ct.strs[0] : "";
+	ct.style = ct.styles.length > 0 ? ct.styles[0] : "";
+	ct.defaults = ctext;
+	delete ct.calcchains;
+	return ct;
+}
+
+var CTYPE_XML_ROOT = writextag('Types', null, {
+	'xmlns': XMLNS.CT,
+	'xmlns:xsd': XMLNS.xsd,
+	'xmlns:xsi': XMLNS.xsi
+});
+
+var CTYPE_DEFAULTS = [
+	['xml', 'application/xml'],
+	['bin', 'application/vnd.ms-excel.sheet.binary.macroEnabled.main'],
+	['rels', type2ct.rels[0]]
+].map(function(x) {
+	return writextag('Default', null, {'Extension':x[0], 'ContentType': x[1]});
+});
+
+function write_ct(ct, opts) {
+	var o = [], v;
+	o[o.length] = (XML_HEADER);
+	o[o.length] = (CTYPE_XML_ROOT);
+	o = o.concat(CTYPE_DEFAULTS);
+	var f1 = function(w) {
+		if(ct[w] && ct[w].length > 0) {
+			v = ct[w][0];
+			o[o.length] = (writextag('Override', null, {
+				'PartName': (v[0] == '/' ? "":"/") + v,
+				'ContentType': CT_LIST[w][opts.bookType || 'xlsx']
+			}));
+		}
+	};
+	var f2 = function(w) {
+		ct[w].forEach(function(v) {
+			o[o.length] = (writextag('Override', null, {
+				'PartName': (v[0] == '/' ? "":"/") + v,
+				'ContentType': CT_LIST[w][opts.bookType || 'xlsx']
+			}));
+		});
+	};
+	var f3 = function(t) {
+		(ct[t]||[]).forEach(function(v) {
+			o[o.length] = (writextag('Override', null, {
+				'PartName': (v[0] == '/' ? "":"/") + v,
+				'ContentType': type2ct[t][0]
+			}));
+		});
+	};
+	f1('workbooks');
+	f2('sheets');
+	f3('themes');
+	['strs', 'styles'].forEach(f1);
+	['coreprops', 'extprops', 'custprops'].forEach(f3);
+	if(o.length>2){ o[o.length] = ('</Types>'); o[1]=o[1].replace("/>",">"); }
+	return o.join("");
+}
+/* 9.3.2 OPC Relationships Markup */
+var RELS = {
+	WB: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",
+	SHEET: "http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument"
+};
+
+function parse_rels(data, currentFilePath) {
+	if (!data) return data;
+	if (currentFilePath.charAt(0) !== '/') {
+		currentFilePath = '/'+currentFilePath;
+	}
+	var rels = {};
+	var hash = {};
+	var resolveRelativePathIntoAbsolute = function (to) {
+		var toksFrom = currentFilePath.split('/');
+		toksFrom.pop(); // folder path
+		var toksTo = to.split('/');
+		var reversed = [];
+		while (toksTo.length !== 0) {
+			var tokTo = toksTo.shift();
+			if (tokTo === '..') {
+				toksFrom.pop();
+			} else if (tokTo !== '.') {
+				toksFrom.push(tokTo);
+			}
+		}
+		return toksFrom.join('/');
+	};
+
+	data.match(tagregex).forEach(function(x) {
+		var y = parsexmltag(x);
+		/* 9.3.2.2 OPC_Relationships */
+		if (y[0] === '<Relationship') {
+			var rel = {}; rel.Type = y.Type; rel.Target = y.Target; rel.Id = y.Id; rel.TargetMode = y.TargetMode;
+			var canonictarget = y.TargetMode === 'External' ? y.Target : resolveRelativePathIntoAbsolute(y.Target);
+			rels[canonictarget] = rel;
+			hash[y.Id] = rel;
+		}
+	});
+	rels["!id"] = hash;
+	return rels;
+}
+
+XMLNS.RELS = 'http://schemas.openxmlformats.org/package/2006/relationships';
+
+var RELS_ROOT = writextag('Relationships', null, {
+	//'xmlns:ns0': XMLNS.RELS,
+	'xmlns': XMLNS.RELS
+});
+
+/* TODO */
+function write_rels(rels) {
+	var o = [];
+	o[o.length] = (XML_HEADER);
+	o[o.length] = (RELS_ROOT);
+	keys(rels['!id']).forEach(function(rid) { var rel = rels['!id'][rid];
+		o[o.length] = (writextag('Relationship', null, rel));
+	});
+	if(o.length>2){ o[o.length] = ('</Relationships>'); o[1]=o[1].replace("/>",">"); }
+	return o.join("");
+}
+/* ECMA-376 Part II 11.1 Core Properties Part */
+/* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */
+var CORE_PROPS = [
+	["cp:category", "Category"],
+	["cp:contentStatus", "ContentStatus"],
+	["cp:keywords", "Keywords"],
+	["cp:lastModifiedBy", "LastAuthor"],
+	["cp:lastPrinted", "LastPrinted"],
+	["cp:revision", "RevNumber"],
+	["cp:version", "Version"],
+	["dc:creator", "Author"],
+	["dc:description", "Comments"],
+	["dc:identifier", "Identifier"],
+	["dc:language", "Language"],
+	["dc:subject", "Subject"],
+	["dc:title", "Title"],
+	["dcterms:created", "CreatedDate", 'date'],
+	["dcterms:modified", "ModifiedDate", 'date']
+];
+
+XMLNS.CORE_PROPS = "http://schemas.openxmlformats.org/package/2006/metadata/core-properties";
+RELS.CORE_PROPS  = 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties';
+
+var CORE_PROPS_REGEX = (function() {
+	var r = new Array(CORE_PROPS.length);
+	for(var i = 0; i < CORE_PROPS.length; ++i) {
+		var f = CORE_PROPS[i];
+		var g = "(?:"+ f[0].substr(0,f[0].indexOf(":")) +":)"+ f[0].substr(f[0].indexOf(":")+1);
+		r[i] = new RegExp("<" + g + "[^>]*>(.*)<\/" + g + ">");
+	}
+	return r;
+})();
+
+function parse_core_props(data) {
+	var p = {};
+
+	for(var i = 0; i < CORE_PROPS.length; ++i) {
+		var f = CORE_PROPS[i], cur = data.match(CORE_PROPS_REGEX[i]);
+		if(cur != null && cur.length > 0) p[f[1]] = cur[1];
+		if(f[2] === 'date' && p[f[1]]) p[f[1]] = new Date(p[f[1]]);
+	}
+
+	return p;
+}
+
+var CORE_PROPS_XML_ROOT = writextag('cp:coreProperties', null, {
+	//'xmlns': XMLNS.CORE_PROPS,
+	'xmlns:cp': XMLNS.CORE_PROPS,
+	'xmlns:dc': XMLNS.dc,
+	'xmlns:dcterms': XMLNS.dcterms,
+	'xmlns:dcmitype': XMLNS.dcmitype,
+	'xmlns:xsi': XMLNS.xsi
+});
+
+function cp_doit(f, g, h, o, p) {
+	if(p[f] != null || g == null || g === "") return;
+	p[f] = g;
+	o[o.length] = (h ? writextag(f,g,h) : writetag(f,g));
+}
+
+function write_core_props(cp, opts) {
+	var o = [XML_HEADER, CORE_PROPS_XML_ROOT], p = {};
+  if (opts && opts.Props) {
+    if (opts.Props.title) o[o.length]       = '<dc:title>'       + opts.Props.title        + '</dc:title>';
+    if (opts.Props.subject) o[o.length]     = '<dc:subject>'     + opts.Props.subject      + '</dc:subject>';
+    if (opts.Props.creator) o[o.length]     = '<dc:creator>'     + opts.Props.creator      + '</dc:creator>';
+    if (opts.Props.keywords) o[o.length]    = '<cp:keywords>'    + opts.Props.keywords      + '</cp:keywords>';
+    if (opts.Props.description) o[o.length] = '<dc:description>' + opts.Props.description  + '</dc:description>';
+  }
+  if(cp) {
+
+    if(cp.CreatedDate != null) cp_doit("dcterms:created", typeof cp.CreatedDate === "string" ? cp.CreatedDate : write_w3cdtf(cp.CreatedDate, opts.WTF), {"xsi:type":"dcterms:W3CDTF"}, o, p);
+    if(cp.ModifiedDate != null) cp_doit("dcterms:modified", typeof cp.ModifiedDate === "string" ? cp.ModifiedDate : write_w3cdtf(cp.ModifiedDate, opts.WTF), {"xsi:type":"dcterms:W3CDTF"}, o, p);
+
+  	for(var i = 0; i != CORE_PROPS.length; ++i) { var f = CORE_PROPS[i]; cp_doit(f[0], cp[f[1]], null, o, p); }
+  }
+  if(o.length>2){ o[o.length] = ('</cp:coreProperties>'); o[1]=o[1].replace("/>",">"); }
+  return o.join("");
+}
+/* 15.2.12.3 Extended File Properties Part */
+/* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */
+var EXT_PROPS = [
+	["Application", "Application", "string"],
+	["AppVersion", "AppVersion", "string"],
+	["Company", "Company", "string"],
+	["DocSecurity", "DocSecurity", "string"],
+	["Manager", "Manager", "string"],
+	["HyperlinksChanged", "HyperlinksChanged", "bool"],
+	["SharedDoc", "SharedDoc", "bool"],
+	["LinksUpToDate", "LinksUpToDate", "bool"],
+	["ScaleCrop", "ScaleCrop", "bool"],
+	["HeadingPairs", "HeadingPairs", "raw"],
+	["TitlesOfParts", "TitlesOfParts", "raw"]
+];
+
+XMLNS.EXT_PROPS = "http://schemas.openxmlformats.org/officeDocument/2006/extended-properties";
+RELS.EXT_PROPS  = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties';
+
+function parse_ext_props(data, p) {
+	var q = {}; if(!p) p = {};
+
+	EXT_PROPS.forEach(function(f) {
+		switch(f[2]) {
+			case "string": p[f[1]] = (data.match(matchtag(f[0]))||[])[1]; break;
+			case "bool": p[f[1]] = (data.match(matchtag(f[0]))||[])[1] === "true"; break;
+			case "raw":
+				var cur = data.match(new RegExp("<" + f[0] + "[^>]*>(.*)<\/" + f[0] + ">"));
+				if(cur && cur.length > 0) q[f[1]] = cur[1];
+				break;
+		}
+	});
+
+	if(q.HeadingPairs && q.TitlesOfParts) {
+		var v = parseVector(q.HeadingPairs);
+		var j = 0, widx = 0;
+		for(var i = 0; i !== v.length; ++i) {
+			switch(v[i].v) {
+				case "Worksheets": widx = j; p.Worksheets = +(v[++i].v); break;
+				case "Named Ranges": ++i; break; // TODO: Handle Named Ranges
+			}
+		}
+		var parts = parseVector(q.TitlesOfParts).map(function(x) { return utf8read(x.v); });
+		p.SheetNames = parts.slice(widx, widx + p.Worksheets);
+	}
+	return p;
+}
+
+var EXT_PROPS_XML_ROOT = writextag('Properties', null, {
+	'xmlns': XMLNS.EXT_PROPS,
+	'xmlns:vt': XMLNS.vt
+});
+
+function write_ext_props(cp, opts) {
+	var o = [], p = {}, W = writextag;
+	if(!cp) cp = {};
+	cp.Application = "SheetJS";
+	o[o.length] = (XML_HEADER);
+	o[o.length] = (EXT_PROPS_XML_ROOT);
+
+	EXT_PROPS.forEach(function(f) {
+		if(cp[f[1]] === undefined) return;
+		var v;
+		switch(f[2]) {
+			case 'string': v = cp[f[1]]; break;
+			case 'bool': v = cp[f[1]] ? 'true' : 'false'; break;
+		}
+		if(v !== undefined) o[o.length] = (W(f[0], v));
+	});
+
+	/* TODO: HeadingPairs, TitlesOfParts */
+	o[o.length] = (W('HeadingPairs', W('vt:vector', W('vt:variant', '<vt:lpstr>Worksheets</vt:lpstr>')+W('vt:variant', W('vt:i4', String(cp.Worksheets))), {size:2, baseType:"variant"})));
+	o[o.length] = (W('TitlesOfParts', W('vt:vector', cp.SheetNames.map(function(s) { return "<vt:lpstr>" + s + "</vt:lpstr>"; }).join(""), {size: cp.Worksheets, baseType:"lpstr"})));
+	if(o.length>2){ o[o.length] = ('</Properties>'); o[1]=o[1].replace("/>",">"); }
+	return o.join("");
+}
+/* 15.2.12.2 Custom File Properties Part */
+XMLNS.CUST_PROPS = "http://schemas.openxmlformats.org/officeDocument/2006/custom-properties";
+RELS.CUST_PROPS  = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties';
+
+var custregex = /<[^>]+>[^<]*/g;
+function parse_cust_props(data, opts) {
+	var p = {}, name;
+	var m = data.match(custregex);
+	if(m) for(var i = 0; i != m.length; ++i) {
+		var x = m[i], y = parsexmltag(x);
+		switch(y[0]) {
+			case '<?xml': break;
+			case '<Properties':
+				if(y.xmlns !== XMLNS.CUST_PROPS) throw "unrecognized xmlns " + y.xmlns;
+				if(y.xmlnsvt && y.xmlnsvt !== XMLNS.vt) throw "unrecognized vt " + y.xmlnsvt;
+				break;
+			case '<property': name = y.name; break;
+			case '</property>': name = null; break;
+			default: if (x.indexOf('<vt:') === 0) {
+				var toks = x.split('>');
+				var type = toks[0].substring(4), text = toks[1];
+				/* 22.4.2.32 (CT_Variant). Omit the binary types from 22.4 (Variant Types) */
+				switch(type) {
+					case 'lpstr': case 'lpwstr': case 'bstr': case 'lpwstr':
+						p[name] = unescapexml(text);
+						break;
+					case 'bool':
+						p[name] = parsexmlbool(text, '<vt:bool>');
+						break;
+					case 'i1': case 'i2': case 'i4': case 'i8': case 'int': case 'uint':
+						p[name] = parseInt(text, 10);
+						break;
+					case 'r4': case 'r8': case 'decimal':
+						p[name] = parseFloat(text);
+						break;
+					case 'filetime': case 'date':
+						p[name] = new Date(text);
+						break;
+					case 'cy': case 'error':
+						p[name] = unescapexml(text);
+						break;
+					default:
+						if(typeof console !== 'undefined') console.warn('Unexpected', x, type, toks);
+				}
+			} else if(x.substr(0,2) === "</") {
+			} else if(opts.WTF) throw new Error(x);
+		}
+	}
+	return p;
+}
+
+var CUST_PROPS_XML_ROOT = writextag('Properties', null, {
+	'xmlns': XMLNS.CUST_PROPS,
+	'xmlns:vt': XMLNS.vt
+});
+
+function write_cust_props(cp, opts) {
+	var o = [XML_HEADER, CUST_PROPS_XML_ROOT];
+	if(!cp) return o.join("");
+	var pid = 1;
+	keys(cp).forEach(function custprop(k) { ++pid;
+		o[o.length] = (writextag('property', write_vt(cp[k]), {
+			'fmtid': '{D5CDD505-2E9C-101B-9397-08002B2CF9AE}',
+			'pid': pid,
+			'name': k
+		}));
+	});
+	if(o.length>2){ o[o.length] = '</Properties>'; o[1]=o[1].replace("/>",">"); }
+	return o.join("");
+}
+function xlml_set_prop(Props, tag, val) {
+	/* TODO: Normalize the properties */
+	switch(tag) {
+		case 'Description': tag = 'Comments'; break;
+	}
+	Props[tag] = val;
+}
+
+/* [MS-DTYP] 2.3.3 FILETIME */
+/* [MS-OLEDS] 2.1.3 FILETIME (Packet Version) */
+/* [MS-OLEPS] 2.8 FILETIME (Packet Version) */
+function parse_FILETIME(blob) {
+	var dwLowDateTime = blob.read_shift(4), dwHighDateTime = blob.read_shift(4);
+	return new Date(((dwHighDateTime/1e7*Math.pow(2,32) + dwLowDateTime/1e7) - 11644473600)*1000).toISOString().replace(/\.000/,"");
+}
+
+/* [MS-OSHARED] 2.3.3.1.4 Lpstr */
+function parse_lpstr(blob, type, pad) {
+	var str = blob.read_shift(0, 'lpstr');
+	if(pad) blob.l += (4 - ((str.length+1) & 3)) & 3;
+	return str;
+}
+
+/* [MS-OSHARED] 2.3.3.1.6 Lpwstr */
+function parse_lpwstr(blob, type, pad) {
+	var str = blob.read_shift(0, 'lpwstr');
+	if(pad) blob.l += (4 - ((str.length+1) & 3)) & 3;
+	return str;
+}
+
+
+/* [MS-OSHARED] 2.3.3.1.11 VtString */
+/* [MS-OSHARED] 2.3.3.1.12 VtUnalignedString */
+function parse_VtStringBase(blob, stringType, pad) {
+	if(stringType === 0x1F /*VT_LPWSTR*/) return parse_lpwstr(blob);
+	return parse_lpstr(blob, stringType, pad);
+}
+
+function parse_VtString(blob, t, pad) { return parse_VtStringBase(blob, t, pad === false ? 0: 4); }
+function parse_VtUnalignedString(blob, t) { if(!t) throw new Error("dafuq?"); return parse_VtStringBase(blob, t, 0); }
+
+/* [MS-OSHARED] 2.3.3.1.9 VtVecUnalignedLpstrValue */
+function parse_VtVecUnalignedLpstrValue(blob) {
+	var length = blob.read_shift(4);
+	var ret = [];
+	for(var i = 0; i != length; ++i) ret[i] = blob.read_shift(0, 'lpstr');
+	return ret;
+}
+
+/* [MS-OSHARED] 2.3.3.1.10 VtVecUnalignedLpstr */
+function parse_VtVecUnalignedLpstr(blob) {
+	return parse_VtVecUnalignedLpstrValue(blob);
+}
+
+/* [MS-OSHARED] 2.3.3.1.13 VtHeadingPair */
+function parse_VtHeadingPair(blob) {
+	var headingString = parse_TypedPropertyValue(blob, VT_USTR);
+	var headerParts = parse_TypedPropertyValue(blob, VT_I4);
+	return [headingString, headerParts];
+}
+
+/* [MS-OSHARED] 2.3.3.1.14 VtVecHeadingPairValue */
+function parse_VtVecHeadingPairValue(blob) {
+	var cElements = blob.read_shift(4);
+	var out = [];
+	for(var i = 0; i != cElements / 2; ++i) out.push(parse_VtHeadingPair(blob));
+	return out;
+}
+
+/* [MS-OSHARED] 2.3.3.1.15 VtVecHeadingPair */
+function parse_VtVecHeadingPair(blob) {
+	// NOTE: When invoked, wType & padding were already consumed
+	return parse_VtVecHeadingPairValue(blob);
+}
+
+/* [MS-OLEPS] 2.18.1 Dictionary (uses 2.17, 2.16) */
+function parse_dictionary(blob,CodePage) {
+	var cnt = blob.read_shift(4);
+	var dict = {};
+	for(var j = 0; j != cnt; ++j) {
+		var pid = blob.read_shift(4);
+		var len = blob.read_shift(4);
+		dict[pid] = blob.read_shift(len, (CodePage === 0x4B0 ?'utf16le':'utf8')).replace(chr0,'').replace(chr1,'!');
+	}
+	if(blob.l & 3) blob.l = (blob.l>>2+1)<<2;
+	return dict;
+}
+
+/* [MS-OLEPS] 2.9 BLOB */
+function parse_BLOB(blob) {
+	var size = blob.read_shift(4);
+	var bytes = blob.slice(blob.l,blob.l+size);
+	if(size & 3 > 0) blob.l += (4 - (size & 3)) & 3;
+	return bytes;
+}
+
+/* [MS-OLEPS] 2.11 ClipboardData */
+function parse_ClipboardData(blob) {
+	// TODO
+	var o = {};
+	o.Size = blob.read_shift(4);
+	//o.Format = blob.read_shift(4);
+	blob.l += o.Size;
+	return o;
+}
+
+/* [MS-OLEPS] 2.14 Vector and Array Property Types */
+function parse_VtVector(blob, cb) {
+	/* [MS-OLEPS] 2.14.2 VectorHeader */
+/*	var Length = blob.read_shift(4);
+	var o = [];
+	for(var i = 0; i != Length; ++i) {
+		o.push(cb(blob));
+	}
+	return o;*/
+}
+
+/* [MS-OLEPS] 2.15 TypedPropertyValue */
+function parse_TypedPropertyValue(blob, type, _opts) {
+	var t = blob.read_shift(2), ret, opts = _opts||{};
+	blob.l += 2;
+	if(type !== VT_VARIANT)
+	if(t !== type && VT_CUSTOM.indexOf(type)===-1) throw new Error('Expected type ' + type + ' saw ' + t);
+	switch(type === VT_VARIANT ? t : type) {
+		case 0x02 /*VT_I2*/: ret = blob.read_shift(2, 'i'); if(!opts.raw) blob.l += 2; return ret;
+		case 0x03 /*VT_I4*/: ret = blob.read_shift(4, 'i'); return ret;
+		case 0x0B /*VT_BOOL*/: return blob.read_shift(4) !== 0x0;
+		case 0x13 /*VT_UI4*/: ret = blob.read_shift(4); return ret;
+		case 0x1E /*VT_LPSTR*/: return parse_lpstr(blob, t, 4).replace(chr0,'');
+		case 0x1F /*VT_LPWSTR*/: return parse_lpwstr(blob);
+		case 0x40 /*VT_FILETIME*/: return parse_FILETIME(blob);
+		case 0x41 /*VT_BLOB*/: return parse_BLOB(blob);
+		case 0x47 /*VT_CF*/: return parse_ClipboardData(blob);
+		case 0x50 /*VT_STRING*/: return parse_VtString(blob, t, !opts.raw && 4).replace(chr0,'');
+		case 0x51 /*VT_USTR*/: return parse_VtUnalignedString(blob, t, 4).replace(chr0,'');
+		case 0x100C /*VT_VECTOR|VT_VARIANT*/: return parse_VtVecHeadingPair(blob);
+		case 0x101E /*VT_LPSTR*/: return parse_VtVecUnalignedLpstr(blob);
+		default: throw new Error("TypedPropertyValue unrecognized type " + type + " " + t);
+	}
+}
+/* [MS-OLEPS] 2.14.2 VectorHeader */
+/*function parse_VTVectorVariant(blob) {
+	var Length = blob.read_shift(4);
+
+	if(Length & 1 !== 0) throw new Error("VectorHeader Length=" + Length + " must be even");
+	var o = [];
+	for(var i = 0; i != Length; ++i) {
+		o.push(parse_TypedPropertyValue(blob, VT_VARIANT));
+	}
+	return o;
+}*/
+
+/* [MS-OLEPS] 2.20 PropertySet */
+function parse_PropertySet(blob, PIDSI) {
+	var start_addr = blob.l;
+	var size = blob.read_shift(4);
+	var NumProps = blob.read_shift(4);
+	var Props = [], i = 0;
+	var CodePage = 0;
+	var Dictionary = -1, DictObj;
+	for(i = 0; i != NumProps; ++i) {
+		var PropID = blob.read_shift(4);
+		var Offset = blob.read_shift(4);
+		Props[i] = [PropID, Offset + start_addr];
+	}
+	var PropH = {};
+	for(i = 0; i != NumProps; ++i) {
+		if(blob.l !== Props[i][1]) {
+			var fail = true;
+			if(i>0 && PIDSI) switch(PIDSI[Props[i-1][0]].t) {
+				case 0x02 /*VT_I2*/: if(blob.l +2 === Props[i][1]) { blob.l+=2; fail = false; } break;
+				case 0x50 /*VT_STRING*/: if(blob.l <= Props[i][1]) { blob.l=Props[i][1]; fail = false; } break;
+				case 0x100C /*VT_VECTOR|VT_VARIANT*/: if(blob.l <= Props[i][1]) { blob.l=Props[i][1]; fail = false; } break;
+			}
+			if(!PIDSI && blob.l <= Props[i][1]) { fail=false; blob.l = Props[i][1]; }
+			if(fail) throw new Error("Read Error: Expected address " + Props[i][1] + ' at ' + blob.l + ' :' + i);
+		}
+		if(PIDSI) {
+			var piddsi = PIDSI[Props[i][0]];
+			PropH[piddsi.n] = parse_TypedPropertyValue(blob, piddsi.t, {raw:true});
+			if(piddsi.p === 'version') PropH[piddsi.n] = String(PropH[piddsi.n] >> 16) + "." + String(PropH[piddsi.n] & 0xFFFF);
+			if(piddsi.n == "CodePage") switch(PropH[piddsi.n]) {
+				case 0: PropH[piddsi.n] = 1252;
+					/* falls through */
+				case 10000: // OSX Roman
+				case 1252: // Windows Latin
+
+				case 874: // SB Windows Thai
+				case 1250: // SB Windows Central Europe
+				case 1251: // SB Windows Cyrillic
+				case 1253: // SB Windows Greek
+				case 1254: // SB Windows Turkish
+				case 1255: // SB Windows Hebrew
+				case 1256: // SB Windows Arabic
+				case 1257: // SB Windows Baltic
+				case 1258: // SB Windows Vietnam
+
+				case 932: // DB Windows Japanese Shift-JIS
+				case 936: // DB Windows Simplified Chinese GBK
+				case 949: // DB Windows Korean
+				case 950: // DB Windows Traditional Chinese Big5
+
+				case 1200: // UTF16LE
+				case 1201: // UTF16BE
+				case 65000: case -536: // UTF-7
+				case 65001: case -535: // UTF-8
+					set_cp(CodePage = PropH[piddsi.n]); break;
+				default: throw new Error("Unsupported CodePage: " + PropH[piddsi.n]);
+			}
+		} else {
+			if(Props[i][0] === 0x1) {
+				CodePage = PropH.CodePage = parse_TypedPropertyValue(blob, VT_I2);
+				set_cp(CodePage);
+				if(Dictionary !== -1) {
+					var oldpos = blob.l;
+					blob.l = Props[Dictionary][1];
+					DictObj = parse_dictionary(blob,CodePage);
+					blob.l = oldpos;
+				}
+			} else if(Props[i][0] === 0) {
+				if(CodePage === 0) { Dictionary = i; blob.l = Props[i+1][1]; continue; }
+				DictObj = parse_dictionary(blob,CodePage);
+			} else {
+				var name = DictObj[Props[i][0]];
+				var val;
+				/* [MS-OSHARED] 2.3.3.2.3.1.2 + PROPVARIANT */
+				switch(blob[blob.l]) {
+					case 0x41 /*VT_BLOB*/: blob.l += 4; val = parse_BLOB(blob); break;
+					case 0x1E /*VT_LPSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]); break;
+					case 0x1F /*VT_LPWSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]); break;
+					case 0x03 /*VT_I4*/: blob.l += 4; val = blob.read_shift(4, 'i'); break;
+					case 0x13 /*VT_UI4*/: blob.l += 4; val = blob.read_shift(4); break;
+					case 0x05 /*VT_R8*/: blob.l += 4; val = blob.read_shift(8, 'f'); break;
+					case 0x0B /*VT_BOOL*/: blob.l += 4; val = parsebool(blob, 4); break;
+					case 0x40 /*VT_FILETIME*/: blob.l += 4; val = new Date(parse_FILETIME(blob)); break;
+					default: throw new Error("unparsed value: " + blob[blob.l]);
+				}
+				PropH[name] = val;
+			}
+		}
+	}
+	blob.l = start_addr + size; /* step ahead to skip padding */
+	return PropH;
+}
+
+/* [MS-OLEPS] 2.21 PropertySetStream */
+function parse_PropertySetStream(file, PIDSI) {
+	var blob = file.content;
+	prep_blob(blob, 0);
+
+	var NumSets, FMTID0, FMTID1, Offset0, Offset1;
+	blob.chk('feff', 'Byte Order: ');
+
+	var vers = blob.read_shift(2); // TODO: check version
+	var SystemIdentifier = blob.read_shift(4);
+	blob.chk(CFB.utils.consts.HEADER_CLSID, 'CLSID: ');
+	NumSets = blob.read_shift(4);
+	if(NumSets !== 1 && NumSets !== 2) throw "Unrecognized #Sets: " + NumSets;
+	FMTID0 = blob.read_shift(16); Offset0 = blob.read_shift(4);
+
+	if(NumSets === 1 && Offset0 !== blob.l) throw "Length mismatch";
+	else if(NumSets === 2) { FMTID1 = blob.read_shift(16); Offset1 = blob.read_shift(4); }
+	var PSet0 = parse_PropertySet(blob, PIDSI);
+
+	var rval = { SystemIdentifier: SystemIdentifier };
+	for(var y in PSet0) rval[y] = PSet0[y];
+	//rval.blob = blob;
+	rval.FMTID = FMTID0;
+	//rval.PSet0 = PSet0;
+	if(NumSets === 1) return rval;
+	if(blob.l !== Offset1) throw "Length mismatch 2: " + blob.l + " !== " + Offset1;
+	var PSet1;
+	try { PSet1 = parse_PropertySet(blob, null); } catch(e) { }
+	for(y in PSet1) rval[y] = PSet1[y];
+	rval.FMTID = [FMTID0, FMTID1]; // TODO: verify FMTID0/1
+	return rval;
+}
+
+
+function parsenoop2(blob, length) { blob.read_shift(length); return null; }
+
+function parslurp(blob, length, cb) {
+	var arr = [], target = blob.l + length;
+	while(blob.l < target) arr.push(cb(blob, target - blob.l));
+	if(target !== blob.l) throw new Error("Slurp error");
+	return arr;
+}
+
+function parslurp2(blob, length, cb) {
+	var arr = [], target = blob.l + length, len = blob.read_shift(2);
+	while(len-- !== 0) arr.push(cb(blob, target - blob.l));
+	if(target !== blob.l) throw new Error("Slurp error");
+	return arr;
+}
+
+function parsebool(blob, length) { return blob.read_shift(length) === 0x1; }
+
+function parseuint16(blob) { return blob.read_shift(2, 'u'); }
+function parseuint16a(blob, length) { return parslurp(blob,length,parseuint16);}
+
+/* --- 2.5 Structures --- */
+
+/* [MS-XLS] 2.5.14 Boolean */
+var parse_Boolean = parsebool;
+
+/* [MS-XLS] 2.5.10 Bes (boolean or error) */
+function parse_Bes(blob) {
+	var v = blob.read_shift(1), t = blob.read_shift(1);
+	return t === 0x01 ? v : v === 0x01;
+}
+
+/* [MS-XLS] 2.5.240 ShortXLUnicodeString */
+function parse_ShortXLUnicodeString(blob, length, opts) {
+	var cch = blob.read_shift(1);
+	var width = 1, encoding = 'sbcs-cont';
+	var cp = current_codepage;
+	if(opts && opts.biff >= 8) current_codepage = 1200;
+	if(opts === undefined || opts.biff !== 5) {
+		var fHighByte = blob.read_shift(1);
+		if(fHighByte) { width = 2; encoding = 'dbcs-cont'; }
+	}
+	var o = cch ? blob.read_shift(cch, encoding) : "";
+	current_codepage = cp;
+	return o;
+}
+
+/* 2.5.293 XLUnicodeRichExtendedString */
+function parse_XLUnicodeRichExtendedString(blob) {
+	var cp = current_codepage;
+	current_codepage = 1200;
+	var cch = blob.read_shift(2), flags = blob.read_shift(1);
+	var fHighByte = flags & 0x1, fExtSt = flags & 0x4, fRichSt = flags & 0x8;
+	var width = 1 + (flags & 0x1); // 0x0 -> utf8, 0x1 -> dbcs
+	var cRun, cbExtRst;
+	var z = {};
+	if(fRichSt) cRun = blob.read_shift(2);
+	if(fExtSt) cbExtRst = blob.read_shift(4);
+	var encoding = (flags & 0x1) ? 'dbcs-cont' : 'sbcs-cont';
+	var msg = cch === 0 ? "" : blob.read_shift(cch, encoding);
+	if(fRichSt) blob.l += 4 * cRun; //TODO: parse this
+	if(fExtSt) blob.l += cbExtRst; //TODO: parse this
+	z.t = msg;
+	if(!fRichSt) { z.raw = "<t>" + z.t + "</t>"; z.r = z.t; }
+	current_codepage = cp;
+	return z;
+}
+
+/* 2.5.296 XLUnicodeStringNoCch */
+function parse_XLUnicodeStringNoCch(blob, cch, opts) {
+	var retval;
+	var fHighByte = blob.read_shift(1);
+	if(fHighByte===0) { retval = blob.read_shift(cch, 'sbcs-cont'); }
+	else { retval = blob.read_shift(cch, 'dbcs-cont'); }
+	return retval;
+}
+
+/* 2.5.294 XLUnicodeString */
+function parse_XLUnicodeString(blob, length, opts) {
+	var cch = blob.read_shift(opts !== undefined && opts.biff > 0 && opts.biff < 8 ? 1 : 2);
+	if(cch === 0) { blob.l++; return ""; }
+	return parse_XLUnicodeStringNoCch(blob, cch, opts);
+}
+/* BIFF5 override */
+function parse_XLUnicodeString2(blob, length, opts) {
+	if(opts.biff !== 5 && opts.biff !== 2) return parse_XLUnicodeString(blob, length, opts);
+	var cch = blob.read_shift(1);
+	if(cch === 0) { blob.l++; return ""; }
+	return blob.read_shift(cch, 'sbcs-cont');
+}
+
+/* [MS-XLS] 2.5.61 ControlInfo */
+var parse_ControlInfo = parsenoop;
+
+/* [MS-OSHARED] 2.3.7.6 URLMoniker TODO: flags */
+var parse_URLMoniker = function(blob, length) {
+	var len = blob.read_shift(4), start = blob.l;
+	var extra = false;
+	if(len > 24) {
+		/* look ahead */
+		blob.l += len - 24;
+		if(blob.read_shift(16) === "795881f43b1d7f48af2c825dc4852763") extra = true;
+		blob.l = start;
+	}
+	var url = blob.read_shift((extra?len-24:len)>>1, 'utf16le').replace(chr0,"");
+	if(extra) blob.l += 24;
+	return url;
+};
+
+/* [MS-OSHARED] 2.3.7.8 FileMoniker TODO: all fields */
+var parse_FileMoniker = function(blob, length) {
+	var cAnti = blob.read_shift(2);
+	var ansiLength = blob.read_shift(4);
+	var ansiPath = blob.read_shift(ansiLength, 'cstr');
+	var endServer = blob.read_shift(2);
+	var versionNumber = blob.read_shift(2);
+	var cbUnicodePathSize = blob.read_shift(4);
+	if(cbUnicodePathSize === 0) return ansiPath.replace(/\\/g,"/");
+	var cbUnicodePathBytes = blob.read_shift(4);
+	var usKeyValue = blob.read_shift(2);
+	var unicodePath = blob.read_shift(cbUnicodePathBytes>>1, 'utf16le').replace(chr0,"");
+	return unicodePath;
+};
+
+/* [MS-OSHARED] 2.3.7.2 HyperlinkMoniker TODO: all the monikers */
+var parse_HyperlinkMoniker = function(blob, length) {
+	var clsid = blob.read_shift(16); length -= 16;
+	switch(clsid) {
+		case "e0c9ea79f9bace118c8200aa004ba90b": return parse_URLMoniker(blob, length);
+		case "0303000000000000c000000000000046": return parse_FileMoniker(blob, length);
+		default: throw "unsupported moniker " + clsid;
+	}
+};
+
+/* [MS-OSHARED] 2.3.7.9 HyperlinkString */
+var parse_HyperlinkString = function(blob, length) {
+	var len = blob.read_shift(4);
+	var o = blob.read_shift(len, 'utf16le').replace(chr0, "");
+	return o;
+};
+
+/* [MS-OSHARED] 2.3.7.1 Hyperlink Object TODO: unify params with XLSX */
+var parse_Hyperlink = function(blob, length) {
+	var end = blob.l + length;
+	var sVer = blob.read_shift(4);
+	if(sVer !== 2) throw new Error("Unrecognized streamVersion: " + sVer);
+	var flags = blob.read_shift(2);
+	blob.l += 2;
+	var displayName, targetFrameName, moniker, oleMoniker, location, guid, fileTime;
+	if(flags & 0x0010) displayName = parse_HyperlinkString(blob, end - blob.l);
+	if(flags & 0x0080) targetFrameName = parse_HyperlinkString(blob, end - blob.l);
+	if((flags & 0x0101) === 0x0101) moniker = parse_HyperlinkString(blob, end - blob.l);
+	if((flags & 0x0101) === 0x0001) oleMoniker = parse_HyperlinkMoniker(blob, end - blob.l);
+	if(flags & 0x0008) location = parse_HyperlinkString(blob, end - blob.l);
+	if(flags & 0x0020) guid = blob.read_shift(16);
+	if(flags & 0x0040) fileTime = parse_FILETIME(blob, 8);
+	blob.l = end;
+	var target = (targetFrameName||moniker||oleMoniker);
+	if(location) target+="#"+location;
+	return {Target: target};
+};
+
+/* 2.5.178 LongRGBA */
+function parse_LongRGBA(blob, length) { var r = blob.read_shift(1), g = blob.read_shift(1), b = blob.read_shift(1), a = blob.read_shift(1); return [r,g,b,a]; }
+
+/* 2.5.177 LongRGB */
+function parse_LongRGB(blob, length) { var x = parse_LongRGBA(blob, length); x[3] = 0; return x; }
+
+
+/* --- MS-XLS --- */
+
+/* 2.5.19 */
+function parse_XLSCell(blob, length) {
+	var rw = blob.read_shift(2); // 0-indexed
+	var col = blob.read_shift(2);
+	var ixfe = blob.read_shift(2);
+	return {r:rw, c:col, ixfe:ixfe};
+}
+
+/* 2.5.134 */
+function parse_frtHeader(blob) {
+	var rt = blob.read_shift(2);
+	var flags = blob.read_shift(2); // TODO: parse these flags
+	blob.l += 8;
+	return {type: rt, flags: flags};
+}
+
+
+
+function parse_OptXLUnicodeString(blob, length, opts) { return length === 0 ? "" : parse_XLUnicodeString2(blob, length, opts); }
+
+/* 2.5.158 */
+var HIDEOBJENUM = ['SHOWALL', 'SHOWPLACEHOLDER', 'HIDEALL'];
+var parse_HideObjEnum = parseuint16;
+
+/* 2.5.344 */
+function parse_XTI(blob, length) {
+	var iSupBook = blob.read_shift(2), itabFirst = blob.read_shift(2,'i'), itabLast = blob.read_shift(2,'i');
+	return [iSupBook, itabFirst, itabLast];
+}
+
+/* 2.5.218 */
+function parse_RkRec(blob, length) {
+	var ixfe = blob.read_shift(2);
+	var RK = parse_RkNumber(blob);
+	//console.log("::", ixfe, RK,";;");
+	return [ixfe, RK];
+}
+
+/* 2.5.1 */
+function parse_AddinUdf(blob, length) {
+	blob.l += 4; length -= 4;
+	var l = blob.l + length;
+	var udfName = parse_ShortXLUnicodeString(blob, length);
+	var cb = blob.read_shift(2);
+	l -= blob.l;
+	if(cb !== l) throw "Malformed AddinUdf: padding = " + l + " != " + cb;
+	blob.l += cb;
+	return udfName;
+}
+
+/* 2.5.209 TODO: Check sizes */
+function parse_Ref8U(blob, length) {
+	var rwFirst = blob.read_shift(2);
+	var rwLast = blob.read_shift(2);
+	var colFirst = blob.read_shift(2);
+	var colLast = blob.read_shift(2);
+	return {s:{c:colFirst, r:rwFirst}, e:{c:colLast,r:rwLast}};
+}
+
+/* 2.5.211 */
+function parse_RefU(blob, length) {
+	var rwFirst = blob.read_shift(2);
+	var rwLast = blob.read_shift(2);
+	var colFirst = blob.read_shift(1);
+	var colLast = blob.read_shift(1);
+	return {s:{c:colFirst, r:rwFirst}, e:{c:colLast,r:rwLast}};
+}
+
+/* 2.5.207 */
+var parse_Ref = parse_RefU;
+
+/* 2.5.143 */
+function parse_FtCmo(blob, length) {
+	blob.l += 4;
+	var ot = blob.read_shift(2);
+	var id = blob.read_shift(2);
+	var flags = blob.read_shift(2);
+	blob.l+=12;
+	return [id, ot, flags];
+}
+
+/* 2.5.149 */
+function parse_FtNts(blob, length) {
+	var out = {};
+	blob.l += 4;
+	blob.l += 16; // GUID TODO
+	out.fSharedNote = blob.read_shift(2);
+	blob.l += 4;
+	return out;
+}
+
+/* 2.5.142 */
+function parse_FtCf(blob, length) {
+	var out = {};
+	blob.l += 4;
+	blob.cf = blob.read_shift(2);
+	return out;
+}
+
+/* 2.5.140 - 2.5.154 and friends */
+var FtTab = {
+	0x15: parse_FtCmo,
+	0x13: parsenoop,                                /* FtLbsData */
+	0x12: function(blob, length) { blob.l += 12; }, /* FtCblsData */
+	0x11: function(blob, length) { blob.l += 8; },  /* FtRboData */
+	0x10: parsenoop,                                /* FtEdoData */
+	0x0F: parsenoop,                                /* FtGboData */
+	0x0D: parse_FtNts,                              /* FtNts */
+	0x0C: function(blob, length) { blob.l += 24; }, /* FtSbs */
+	0x0B: function(blob, length) { blob.l += 10; }, /* FtRbo */
+	0x0A: function(blob, length) { blob.l += 16; }, /* FtCbls */
+	0x09: parsenoop,                                /* FtPictFmla */
+	0x08: function(blob, length) { blob.l += 6; },  /* FtPioGrbit */
+	0x07: parse_FtCf,                               /* FtCf */
+	0x06: function(blob, length) { blob.l += 6; },  /* FtGmo */
+	0x04: parsenoop,                                /* FtMacro */
+	0x00: function(blob, length) { blob.l += 4; }   /* FtEnding */
+};
+function parse_FtArray(blob, length, ot) {
+	var s = blob.l;
+	var fts = [];
+	while(blob.l < s + length) {
+		var ft = blob.read_shift(2);
+		blob.l-=2;
+		try {
+			fts.push(FtTab[ft](blob, s + length - blob.l));
+		} catch(e) { blob.l = s + length; return fts; }
+	}
+	if(blob.l != s + length) blob.l = s + length; //throw "bad Object Ft-sequence";
+	return fts;
+}
+
+/* 2.5.129 */
+var parse_FontIndex = parseuint16;
+
+/* --- 2.4 Records --- */
+
+/* 2.4.21 */
+function parse_BOF(blob, length) {
+	var o = {};
+	o.BIFFVer = blob.read_shift(2); length -= 2;
+	switch(o.BIFFVer) {
+		case 0x0600: /* BIFF8 */
+		case 0x0500: /* BIFF5 */
+		case 0x0002: case 0x0007: /* BIFF2 */
+			break;
+		default: throw "Unexpected BIFF Ver " + o.BIFFVer;
+	}
+	blob.read_shift(length);
+	return o;
+}
+
+
+/* 2.4.146 */
+function parse_InterfaceHdr(blob, length) {
+	if(length === 0) return 0x04b0;
+	var q;
+	if((q=blob.read_shift(2))!==0x04b0) throw 'InterfaceHdr codePage ' + q;
+	return 0x04b0;
+}
+
+
+/* 2.4.349 */
+function parse_WriteAccess(blob, length, opts) {
+	if(opts.enc) { blob.l += length; return ""; }
+	var l = blob.l;
+	// TODO: make sure XLUnicodeString doesnt overrun
+	var UserName = parse_XLUnicodeString(blob, 0, opts);
+	blob.read_shift(length + l - blob.l);
+	return UserName;
+}
+
+/* 2.4.28 */
+function parse_BoundSheet8(blob, length, opts) {
+	var pos = blob.read_shift(4);
+	var hidden = blob.read_shift(1) >> 6;
+	var dt = blob.read_shift(1);
+	switch(dt) {
+		case 0: dt = 'Worksheet'; break;
+		case 1: dt = 'Macrosheet'; break;
+		case 2: dt = 'Chartsheet'; break;
+		case 6: dt = 'VBAModule'; break;
+	}
+	var name = parse_ShortXLUnicodeString(blob, 0, opts);
+	if(name.length === 0) name = "Sheet1";
+	return { pos:pos, hs:hidden, dt:dt, name:name };
+}
+
+/* 2.4.265 TODO */
+function parse_SST(blob, length) {
+	var cnt = blob.read_shift(4);
+	var ucnt = blob.read_shift(4);
+	var strs = [];
+	for(var i = 0; i != ucnt; ++i) {
+		strs.push(parse_XLUnicodeRichExtendedString(blob));
+	}
+	strs.Count = cnt; strs.Unique = ucnt;
+	return strs;
+}
+
+/* 2.4.107 */
+function parse_ExtSST(blob, length) {
+	var extsst = {};
+	extsst.dsst = blob.read_shift(2);
+	blob.l += length-2;
+	return extsst;
+}
+
+
+/* 2.4.221 TODO*/
+function parse_Row(blob, length) {
+	var rw = blob.read_shift(2), col = blob.read_shift(2), Col = blob.read_shift(2), rht = blob.read_shift(2);
+	blob.read_shift(4); // reserved(2), unused(2)
+	var flags = blob.read_shift(1); // various flags
+	blob.read_shift(1); // reserved
+	blob.read_shift(2); //ixfe, other flags
+	return {r:rw, c:col, cnt:Col-col};
+}
+
+
+/* 2.4.125 */
+function parse_ForceFullCalculation(blob, length) {
+	var header = parse_frtHeader(blob);
+	if(header.type != 0x08A3) throw "Invalid Future Record " + header.type;
+	var fullcalc = blob.read_shift(4);
+	return fullcalc !== 0x0;
+}
+
+
+var parse_CompressPictures = parsenoop2; /* 2.4.55 Not interesting */
+
+
+
+/* 2.4.215 rt */
+function parse_RecalcId(blob, length) {
+	blob.read_shift(2);
+	return blob.read_shift(4);
+}
+
+/* 2.4.87 */
+function parse_DefaultRowHeight (blob, length) {
+	var f = blob.read_shift(2), miyRw;
+	miyRw = blob.read_shift(2); // flags & 0x02 -> hidden, else empty
+	var fl = {Unsynced:f&1,DyZero:(f&2)>>1,ExAsc:(f&4)>>2,ExDsc:(f&8)>>3};
+	return [fl, miyRw];
+}
+
+/* 2.4.345 TODO */
+function parse_Window1(blob, length) {
+	var xWn = blob.read_shift(2), yWn = blob.read_shift(2), dxWn = blob.read_shift(2), dyWn = blob.read_shift(2);
+	var flags = blob.read_shift(2), iTabCur = blob.read_shift(2), iTabFirst = blob.read_shift(2);
+	var ctabSel = blob.read_shift(2), wTabRatio = blob.read_shift(2);
+	return { Pos: [xWn, yWn], Dim: [dxWn, dyWn], Flags: flags, CurTab: iTabCur,
+		FirstTab: iTabFirst, Selected: ctabSel, TabRatio: wTabRatio };
+}
+
+/* 2.4.122 TODO */
+function parse_Font(blob, length, opts) {
+	blob.l += 14;
+	var name = parse_ShortXLUnicodeString(blob, 0, opts);
+	return name;
+}
+
+/* 2.4.149 */
+function parse_LabelSst(blob, length) {
+	var cell = parse_XLSCell(blob);
+	cell.isst = blob.read_shift(4);
+	return cell;
+}
+
+/* 2.4.148 */
+function parse_Label(blob, length, opts) {
+	var cell = parse_XLSCell(blob, 6);
+	var str = parse_XLUnicodeString(blob, length-6, opts);
+	cell.val = str;
+	return cell;
+}
+
+/* 2.4.126 Number Formats */
+function parse_Format(blob, length, opts) {
+	var ifmt = blob.read_shift(2);
+	var fmtstr = parse_XLUnicodeString2(blob, 0, opts);
+	return [ifmt, fmtstr];
+}
+
+/* 2.4.90 */
+function parse_Dimensions(blob, length) {
+	var w = length === 10 ? 2 : 4;
+	var r = blob.read_shift(w), R = blob.read_shift(w),
+	    c = blob.read_shift(2), C = blob.read_shift(2);
+	blob.l += 2;
+	return {s: {r:r, c:c}, e: {r:R, c:C}};
+}
+
+/* 2.4.220 */
+function parse_RK(blob, length) {
+	var rw = blob.read_shift(2), col = blob.read_shift(2);
+	var rkrec = parse_RkRec(blob);
+	return {r:rw, c:col, ixfe:rkrec[0], rknum:rkrec[1]};
+}
+
+/* 2.4.175 */
+function parse_MulRk(blob, length) {
+	var target = blob.l + length - 2;
+	var rw = blob.read_shift(2), col = blob.read_shift(2);
+	var rkrecs = [];
+	while(blob.l < target) rkrecs.push(parse_RkRec(blob));
+	if(blob.l !== target) throw "MulRK read error";
+	var lastcol = blob.read_shift(2);
+	if(rkrecs.length != lastcol - col + 1) throw "MulRK length mismatch";
+	return {r:rw, c:col, C:lastcol, rkrec:rkrecs};
+}
+
+/* 2.5.20 2.5.249 TODO */
+function parse_CellStyleXF(blob, length, style) {
+	var o = {};
+	var a = blob.read_shift(4), b = blob.read_shift(4);
+	var c = blob.read_shift(4), d = blob.read_shift(2);
+	o.patternType = XLSFillPattern[c >> 26];
+	o.icvFore = d & 0x7F;
+	o.icvBack = (d >> 7) & 0x7F;
+	return o;
+}
+function parse_CellXF(blob, length) {return parse_CellStyleXF(blob,length,0);}
+function parse_StyleXF(blob, length) {return parse_CellStyleXF(blob,length,1);}
+
+/* 2.4.353 TODO: actually do this right */
+function parse_XF(blob, length) {
+	var o = {};
+	o.ifnt = blob.read_shift(2); o.ifmt = blob.read_shift(2); o.flags = blob.read_shift(2);
+	o.fStyle = (o.flags >> 2) & 0x01;
+	length -= 6;
+	o.data = parse_CellStyleXF(blob, length, o.fStyle);
+	return o;
+}
+
+/* 2.4.134 */
+function parse_Guts(blob, length) {
+	blob.l += 4;
+	var out = [blob.read_shift(2), blob.read_shift(2)];
+	if(out[0] !== 0) out[0]--;
+	if(out[1] !== 0) out[1]--;
+	if(out[0] > 7 || out[1] > 7) throw "Bad Gutters: " + out;
+	return out;
+}
+
+/* 2.4.24 */
+function parse_BoolErr(blob, length) {
+	var cell = parse_XLSCell(blob, 6);
+	var val = parse_Bes(blob, 2);
+	cell.val = val;
+	cell.t = (val === true || val === false) ? 'b' : 'e';
+	return cell;
+}
+
+/* 2.4.180 Number */
+function parse_Number(blob, length) {
+	var cell = parse_XLSCell(blob, 6);
+	var xnum = parse_Xnum(blob, 8);
+	cell.val = xnum;
+	return cell;
+}
+
+var parse_XLHeaderFooter = parse_OptXLUnicodeString; // TODO: parse 2.4.136
+
+/* 2.4.271 */
+function parse_SupBook(blob, length, opts) {
+	var end = blob.l + length;
+	var ctab = blob.read_shift(2);
+	var cch = blob.read_shift(2);
+	var virtPath;
+	if(cch >=0x01 && cch <=0xff) virtPath = parse_XLUnicodeStringNoCch(blob, cch);
+	var rgst = blob.read_shift(end - blob.l);
+	opts.sbcch = cch;
+	return [cch, ctab, virtPath, rgst];
+}
+
+/* 2.4.105 TODO */
+function parse_ExternName(blob, length, opts) {
+	var flags = blob.read_shift(2);
+	var body;
+	var o = {
+		fBuiltIn: flags & 0x01,
+		fWantAdvise: (flags >>> 1) & 0x01,
+		fWantPict: (flags >>> 2) & 0x01,
+		fOle: (flags >>> 3) & 0x01,
+		fOleLink: (flags >>> 4) & 0x01,
+		cf: (flags >>> 5) & 0x3FF,
+		fIcon: flags >>> 15 & 0x01
+	};
+	if(opts.sbcch === 0x3A01) body = parse_AddinUdf(blob, length-2);
+	//else throw new Error("unsupported SupBook cch: " + opts.sbcch);
+	o.body = body || blob.read_shift(length-2);
+	return o;
+}
+
+/* 2.4.150 TODO */
+function parse_Lbl(blob, length, opts) {
+	if(opts.biff < 8) return parse_Label(blob, length, opts);
+	var target = blob.l + length;
+	var flags = blob.read_shift(2);
+	var chKey = blob.read_shift(1);
+	var cch = blob.read_shift(1);
+	var cce = blob.read_shift(2);
+	blob.l += 2;
+	var itab = blob.read_shift(2);
+	blob.l += 4;
+	var name = parse_XLUnicodeStringNoCch(blob, cch, opts);
+	var rgce = parse_NameParsedFormula(blob, target - blob.l, opts, cce);
+	return {
+		chKey: chKey,
+		Name: name,
+		rgce: rgce
+	};
+}
+
+/* 2.4.106 TODO: verify supbook manipulation */
+function parse_ExternSheet(blob, length, opts) {
+	if(opts.biff < 8) return parse_ShortXLUnicodeString(blob, length, opts);
+	var o = parslurp2(blob,length,parse_XTI);
+	var oo = [];
+	if(opts.sbcch === 0x0401) {
+		for(var i = 0; i != o.length; ++i) oo.push(opts.snames[o[i][1]]);
+		return oo;
+	}
+	else return o;
+}
+
+/* 2.4.260 */
+function parse_ShrFmla(blob, length, opts) {
+	var ref = parse_RefU(blob, 6);
+	blob.l++;
+	var cUse = blob.read_shift(1);
+	length -= 8;
+	return [parse_SharedParsedFormula(blob, length, opts), cUse];
+}
+
+/* 2.4.4 TODO */
+function parse_Array(blob, length, opts) {
+	var ref = parse_Ref(blob, 6);
+	blob.l += 6; length -= 12; /* TODO: fAlwaysCalc */
+	return [ref, parse_ArrayParsedFormula(blob, length, opts, ref)];
+}
+
+/* 2.4.173 */
+function parse_MTRSettings(blob, length) {
+	var fMTREnabled = blob.read_shift(4) !== 0x00;
+	var fUserSetThreadCount = blob.read_shift(4) !== 0x00;
+	var cUserThreadCount = blob.read_shift(4);
+	return [fMTREnabled, fUserSetThreadCount, cUserThreadCount];
+}
+
+/* 2.5.186 TODO: BIFF5 */
+function parse_NoteSh(blob, length, opts) {
+	if(opts.biff < 8) return;
+	var row = blob.read_shift(2), col = blob.read_shift(2);
+	var flags = blob.read_shift(2), idObj = blob.read_shift(2);
+	var stAuthor = parse_XLUnicodeString2(blob, 0, opts);
+	if(opts.biff < 8) blob.read_shift(1);
+	return [{r:row,c:col}, stAuthor, idObj, flags];
+}
+
+/* 2.4.179 */
+function parse_Note(blob, length, opts) {
+	/* TODO: Support revisions */
+	return parse_NoteSh(blob, length, opts);
+}
+
+/* 2.4.168 */
+function parse_MergeCells(blob, length) {
+	var merges = [];
+	var cmcs = blob.read_shift(2);
+	while (cmcs--) merges.push(parse_Ref8U(blob,length));
+	return merges;
+}
+
+/* 2.4.181 TODO: parse all the things! */
+function parse_Obj(blob, length) {
+	var cmo = parse_FtCmo(blob, 22); // id, ot, flags
+	var fts = parse_FtArray(blob, length-22, cmo[1]);
+	return { cmo: cmo, ft:fts };
+}
+
+/* 2.4.329 TODO: parse properly */
+function parse_TxO(blob, length, opts) {
+	var s = blob.l;
+try {
+	blob.l += 4;
+	var ot = (opts.lastobj||{cmo:[0,0]}).cmo[1];
+	var controlInfo;
+	if([0,5,7,11,12,14].indexOf(ot) == -1) blob.l += 6;
+	else controlInfo = parse_ControlInfo(blob, 6, opts);
+	var cchText = blob.read_shift(2);
+	var cbRuns = blob.read_shift(2);
+	var ifntEmpty = parse_FontIndex(blob, 2);
+	var len = blob.read_shift(2);
+	blob.l += len;
+	//var fmla = parse_ObjFmla(blob, s + length - blob.l);
+
+	var texts = "";
+	for(var i = 1; i < blob.lens.length-1; ++i) {
+		if(blob.l-s != blob.lens[i]) throw "TxO: bad continue record";
+		var hdr = blob[blob.l];
+		var t = parse_XLUnicodeStringNoCch(blob, blob.lens[i+1]-blob.lens[i]-1);
+		texts += t;
+		if(texts.length >= (hdr ? cchText : 2*cchText)) break;
+	}
+	if(texts.length !== cchText && texts.length !== cchText*2) {
+		throw "cchText: " + cchText + " != " + texts.length;
+	}
+
+	blob.l = s + length;
+	/* 2.5.272 TxORuns */
+//	var rgTxoRuns = [];
+//	for(var j = 0; j != cbRuns/8-1; ++j) blob.l += 8;
+//	var cchText2 = blob.read_shift(2);
+//	if(cchText2 !== cchText) throw "TxOLastRun mismatch: " + cchText2 + " " + cchText;
+//	blob.l += 6;
+//	if(s + length != blob.l) throw "TxO " + (s + length) + ", at " + blob.l;
+	return { t: texts };
+} catch(e) { blob.l = s + length; return { t: texts||"" }; }
+}
+
+/* 2.4.140 */
+var parse_HLink = function(blob, length) {
+	var ref = parse_Ref8U(blob, 8);
+	blob.l += 16; /* CLSID */
+	var hlink = parse_Hyperlink(blob, length-24);
+	return [ref, hlink];
+};
+
+/* 2.4.141 */
+var parse_HLinkTooltip = function(blob, length) {
+	var end = blob.l + length;
+	blob.read_shift(2);
+	var ref = parse_Ref8U(blob, 8);
+	var wzTooltip = blob.read_shift((length-10)/2, 'dbcs-cont');
+	wzTooltip = wzTooltip.replace(chr0,"");
+	return [ref, wzTooltip];
+};
+
+/* 2.4.63 */
+function parse_Country(blob, length) {
+	var o = [], d;
+	d = blob.read_shift(2); o[0] = CountryEnum[d] || d;
+	d = blob.read_shift(2); o[1] = CountryEnum[d] || d;
+	return o;
+}
+
+/* 2.4.50 ClrtClient */
+function parse_ClrtClient(blob, length) {
+	var ccv = blob.read_shift(2);
+	var o = [];
+	while(ccv-->0) o.push(parse_LongRGB(blob, 8));
+	return o;
+}
+
+/* 2.4.188 */
+function parse_Palette(blob, length) {
+	var ccv = blob.read_shift(2);
+	var o = [];
+	while(ccv-->0) o.push(parse_LongRGB(blob, 8));
+	return o;
+}
+
+/* 2.4.354 */
+function parse_XFCRC(blob, length) {
+	blob.l += 2;
+	var o = {cxfs:0, crc:0};
+	o.cxfs = blob.read_shift(2);
+	o.crc = blob.read_shift(4);
+	return o;
+}
+
+
+var parse_Style = parsenoop;
+var parse_StyleExt = parsenoop;
+
+var parse_ColInfo = parsenoop;
+
+var parse_Window2 = parsenoop;
+
+
+var parse_Backup = parsebool; /* 2.4.14 */
+var parse_Blank = parse_XLSCell; /* 2.4.20 Just the cell */
+var parse_BottomMargin = parse_Xnum; /* 2.4.27 */
+var parse_BuiltInFnGroupCount = parseuint16; /* 2.4.30 0x0E or 0x10 but excel 2011 generates 0x11? */
+var parse_CalcCount = parseuint16; /* 2.4.31 #Iterations */
+var parse_CalcDelta = parse_Xnum; /* 2.4.32 */
+var parse_CalcIter = parsebool;  /* 2.4.33 1=iterative calc */
+var parse_CalcMode = parseuint16; /* 2.4.34 0=manual, 1=auto (def), 2=table */
+var parse_CalcPrecision = parsebool; /* 2.4.35 */
+var parse_CalcRefMode = parsenoop2; /* 2.4.36 */
+var parse_CalcSaveRecalc = parsebool; /* 2.4.37 */
+var parse_CodePage = parseuint16; /* 2.4.52 */
+var parse_Compat12 = parsebool; /* 2.4.54 true = no compatibility check */
+var parse_Date1904 = parsebool; /* 2.4.77 - 1=1904,0=1900 */
+var parse_DefColWidth = parseuint16; /* 2.4.89 */
+var parse_DSF = parsenoop2; /* 2.4.94 -- MUST be ignored */
+var parse_EntExU2 = parsenoop2; /* 2.4.102 -- Explicitly says to ignore */
+var parse_EOF = parsenoop2; /* 2.4.103 */
+var parse_Excel9File = parsenoop2; /* 2.4.104 -- Optional and unused */
+var parse_FeatHdr = parsenoop2; /* 2.4.112 */
+var parse_FontX = parseuint16; /* 2.4.123 */
+var parse_Footer = parse_XLHeaderFooter; /* 2.4.124 */
+var parse_GridSet = parseuint16; /* 2.4.132, =1 */
+var parse_HCenter = parsebool; /* 2.4.135 sheet centered horizontal on print */
+var parse_Header = parse_XLHeaderFooter; /* 2.4.136 */
+var parse_HideObj = parse_HideObjEnum; /* 2.4.139 */
+var parse_InterfaceEnd = parsenoop2; /* 2.4.145 -- noop */
+var parse_LeftMargin = parse_Xnum; /* 2.4.151 */
+var parse_Mms = parsenoop2; /* 2.4.169 -- Explicitly says to ignore */
+var parse_ObjProtect = parsebool; /* 2.4.183 -- must be 1 if present */
+var parse_Password = parseuint16; /* 2.4.191 */
+var parse_PrintGrid = parsebool; /* 2.4.202 */
+var parse_PrintRowCol = parsebool; /* 2.4.203 */
+var parse_PrintSize = parseuint16; /* 2.4.204 0:3 */
+var parse_Prot4Rev = parsebool; /* 2.4.205 */
+var parse_Prot4RevPass = parseuint16; /* 2.4.206 */
+var parse_Protect = parsebool; /* 2.4.207 */
+var parse_RefreshAll = parsebool; /* 2.4.217 -- must be 0 if not template */
+var parse_RightMargin = parse_Xnum; /* 2.4.219 */
+var parse_RRTabId = parseuint16a; /* 2.4.241 */
+var parse_ScenarioProtect = parsebool; /* 2.4.245 */
+var parse_Scl = parseuint16a; /* 2.4.247 num, den */
+var parse_String = parse_XLUnicodeString; /* 2.4.268 */
+var parse_SxBool = parsebool; /* 2.4.274 */
+var parse_TopMargin = parse_Xnum; /* 2.4.328 */
+var parse_UsesELFs = parsebool; /* 2.4.337 -- should be 0 */
+var parse_VCenter = parsebool; /* 2.4.342 */
+var parse_WinProtect = parsebool; /* 2.4.347 */
+var parse_WriteProtect = parsenoop; /* 2.4.350 empty record */
+
+
+/* ---- */
+var parse_VerticalPageBreaks = parsenoop;
+var parse_HorizontalPageBreaks = parsenoop;
+var parse_Selection = parsenoop;
+var parse_Continue = parsenoop;
+var parse_Pane = parsenoop;
+var parse_Pls = parsenoop;
+var parse_DCon = parsenoop;
+var parse_DConRef = parsenoop;
+var parse_DConName = parsenoop;
+var parse_XCT = parsenoop;
+var parse_CRN = parsenoop;
+var parse_FileSharing = parsenoop;
+var parse_Uncalced = parsenoop;
+var parse_Template = parsenoop;
+var parse_Intl = parsenoop;
+var parse_WsBool = parsenoop;
+var parse_Sort = parsenoop;
+var parse_Sync = parsenoop;
+var parse_LPr = parsenoop;
+var parse_DxGCol = parsenoop;
+var parse_FnGroupName = parsenoop;
+var parse_FilterMode = parsenoop;
+var parse_AutoFilterInfo = parsenoop;
+var parse_AutoFilter = parsenoop;
+var parse_Setup = parsenoop;
+var parse_ScenMan = parsenoop;
+var parse_SCENARIO = parsenoop;
+var parse_SxView = parsenoop;
+var parse_Sxvd = parsenoop;
+var parse_SXVI = parsenoop;
+var parse_SxIvd = parsenoop;
+var parse_SXLI = parsenoop;
+var parse_SXPI = parsenoop;
+var parse_DocRoute = parsenoop;
+var parse_RecipName = parsenoop;
+var parse_MulBlank = parsenoop;
+var parse_SXDI = parsenoop;
+var parse_SXDB = parsenoop;
+var parse_SXFDB = parsenoop;
+var parse_SXDBB = parsenoop;
+var parse_SXNum = parsenoop;
+var parse_SxErr = parsenoop;
+var parse_SXInt = parsenoop;
+var parse_SXString = parsenoop;
+var parse_SXDtr = parsenoop;
+var parse_SxNil = parsenoop;
+var parse_SXTbl = parsenoop;
+var parse_SXTBRGIITM = parsenoop;
+var parse_SxTbpg = parsenoop;
+var parse_ObProj = parsenoop;
+var parse_SXStreamID = parsenoop;
+var parse_DBCell = parsenoop;
+var parse_SXRng = parsenoop;
+var parse_SxIsxoper = parsenoop;
+var parse_BookBool = parsenoop;
+var parse_DbOrParamQry = parsenoop;
+var parse_OleObjectSize = parsenoop;
+var parse_SXVS = parsenoop;
+var parse_BkHim = parsenoop;
+var parse_MsoDrawingGroup = parsenoop;
+var parse_MsoDrawing = parsenoop;
+var parse_MsoDrawingSelection = parsenoop;
+var parse_PhoneticInfo = parsenoop;
+var parse_SxRule = parsenoop;
+var parse_SXEx = parsenoop;
+var parse_SxFilt = parsenoop;
+var parse_SxDXF = parsenoop;
+var parse_SxItm = parsenoop;
+var parse_SxName = parsenoop;
+var parse_SxSelect = parsenoop;
+var parse_SXPair = parsenoop;
+var parse_SxFmla = parsenoop;
+var parse_SxFormat = parsenoop;
+var parse_SXVDEx = parsenoop;
+var parse_SXFormula = parsenoop;
+var parse_SXDBEx = parsenoop;
+var parse_RRDInsDel = parsenoop;
+var parse_RRDHead = parsenoop;
+var parse_RRDChgCell = parsenoop;
+var parse_RRDRenSheet = parsenoop;
+var parse_RRSort = parsenoop;
+var parse_RRDMove = parsenoop;
+var parse_RRFormat = parsenoop;
+var parse_RRAutoFmt = parsenoop;
+var parse_RRInsertSh = parsenoop;
+var parse_RRDMoveBegin = parsenoop;
+var parse_RRDMoveEnd = parsenoop;
+var parse_RRDInsDelBegin = parsenoop;
+var parse_RRDInsDelEnd = parsenoop;
+var parse_RRDConflict = parsenoop;
+var parse_RRDDefName = parsenoop;
+var parse_RRDRstEtxp = parsenoop;
+var parse_LRng = parsenoop;
+var parse_CUsr = parsenoop;
+var parse_CbUsr = parsenoop;
+var parse_UsrInfo = parsenoop;
+var parse_UsrExcl = parsenoop;
+var parse_FileLock = parsenoop;
+var parse_RRDInfo = parsenoop;
+var parse_BCUsrs = parsenoop;
+var parse_UsrChk = parsenoop;
+var parse_UserBView = parsenoop;
+var parse_UserSViewBegin = parsenoop; // overloaded
+var parse_UserSViewEnd = parsenoop;
+var parse_RRDUserView = parsenoop;
+var parse_Qsi = parsenoop;
+var parse_CondFmt = parsenoop;
+var parse_CF = parsenoop;
+var parse_DVal = parsenoop;
+var parse_DConBin = parsenoop;
+var parse_Lel = parsenoop;
+var parse_XLSCodeName = parse_XLUnicodeString;
+var parse_SXFDBType = parsenoop;
+var parse_ObNoMacros = parsenoop;
+var parse_Dv = parsenoop;
+var parse_Index = parsenoop;
+var parse_Table = parsenoop;
+var parse_BigName = parsenoop;
+var parse_ContinueBigName = parsenoop;
+var parse_WebPub = parsenoop;
+var parse_QsiSXTag = parsenoop;
+var parse_DBQueryExt = parsenoop;
+var parse_ExtString = parsenoop;
+var parse_TxtQry = parsenoop;
+var parse_Qsir = parsenoop;
+var parse_Qsif = parsenoop;
+var parse_RRDTQSIF = parsenoop;
+var parse_OleDbConn = parsenoop;
+var parse_WOpt = parsenoop;
+var parse_SXViewEx = parsenoop;
+var parse_SXTH = parsenoop;
+var parse_SXPIEx = parsenoop;
+var parse_SXVDTEx = parsenoop;
+var parse_SXViewEx9 = parsenoop;
+var parse_ContinueFrt = parsenoop;
+var parse_RealTimeData = parsenoop;
+var parse_ChartFrtInfo = parsenoop;
+var parse_FrtWrapper = parsenoop;
+var parse_StartBlock = parsenoop;
+var parse_EndBlock = parsenoop;
+var parse_StartObject = parsenoop;
+var parse_EndObject = parsenoop;
+var parse_CatLab = parsenoop;
+var parse_YMult = parsenoop;
+var parse_SXViewLink = parsenoop;
+var parse_PivotChartBits = parsenoop;
+var parse_FrtFontList = parsenoop;
+var parse_SheetExt = parsenoop;
+var parse_BookExt = parsenoop;
+var parse_SXAddl = parsenoop;
+var parse_CrErr = parsenoop;
+var parse_HFPicture = parsenoop;
+var parse_Feat = parsenoop;
+var parse_DataLabExt = parsenoop;
+var parse_DataLabExtContents = parsenoop;
+var parse_CellWatch = parsenoop;
+var parse_FeatHdr11 = parsenoop;
+var parse_Feature11 = parsenoop;
+var parse_DropDownObjIds = parsenoop;
+var parse_ContinueFrt11 = parsenoop;
+var parse_DConn = parsenoop;
+var parse_List12 = parsenoop;
+var parse_Feature12 = parsenoop;
+var parse_CondFmt12 = parsenoop;
+var parse_CF12 = parsenoop;
+var parse_CFEx = parsenoop;
+var parse_AutoFilter12 = parsenoop;
+var parse_ContinueFrt12 = parsenoop;
+var parse_MDTInfo = parsenoop;
+var parse_MDXStr = parsenoop;
+var parse_MDXTuple = parsenoop;
+var parse_MDXSet = parsenoop;
+var parse_MDXProp = parsenoop;
+var parse_MDXKPI = parsenoop;
+var parse_MDB = parsenoop;
+var parse_PLV = parsenoop;
+var parse_DXF = parsenoop;
+var parse_TableStyles = parsenoop;
+var parse_TableStyle = parsenoop;
+var parse_TableStyleElement = parsenoop;
+var parse_NamePublish = parsenoop;
+var parse_NameCmt = parsenoop;
+var parse_SortData = parsenoop;
+var parse_GUIDTypeLib = parsenoop;
+var parse_FnGrp12 = parsenoop;
+var parse_NameFnGrp12 = parsenoop;
+var parse_HeaderFooter = parsenoop;
+var parse_CrtLayout12 = parsenoop;
+var parse_CrtMlFrt = parsenoop;
+var parse_CrtMlFrtContinue = parsenoop;
+var parse_ShapePropsStream = parsenoop;
+var parse_TextPropsStream = parsenoop;
+var parse_RichTextStream = parsenoop;
+var parse_CrtLayout12A = parsenoop;
+var parse_Units = parsenoop;
+var parse_Chart = parsenoop;
+var parse_Series = parsenoop;
+var parse_DataFormat = parsenoop;
+var parse_LineFormat = parsenoop;
+var parse_MarkerFormat = parsenoop;
+var parse_AreaFormat = parsenoop;
+var parse_PieFormat = parsenoop;
+var parse_AttachedLabel = parsenoop;
+var parse_SeriesText = parsenoop;
+var parse_ChartFormat = parsenoop;
+var parse_Legend = parsenoop;
+var parse_SeriesList = parsenoop;
+var parse_Bar = parsenoop;
+var parse_Line = parsenoop;
+var parse_Pie = parsenoop;
+var parse_Area = parsenoop;
+var parse_Scatter = parsenoop;
+var parse_CrtLine = parsenoop;
+var parse_Axis = parsenoop;
+var parse_Tick = parsenoop;
+var parse_ValueRange = parsenoop;
+var parse_CatSerRange = parsenoop;
+var parse_AxisLine = parsenoop;
+var parse_CrtLink = parsenoop;
+var parse_DefaultText = parsenoop;
+var parse_Text = parsenoop;
+var parse_ObjectLink = parsenoop;
+var parse_Frame = parsenoop;
+var parse_Begin = parsenoop;
+var parse_End = parsenoop;
+var parse_PlotArea = parsenoop;
+var parse_Chart3d = parsenoop;
+var parse_PicF = parsenoop;
+var parse_DropBar = parsenoop;
+var parse_Radar = parsenoop;
+var parse_Surf = parsenoop;
+var parse_RadarArea = parsenoop;
+var parse_AxisParent = parsenoop;
+var parse_LegendException = parsenoop;
+var parse_ShtProps = parsenoop;
+var parse_SerToCrt = parsenoop;
+var parse_AxesUsed = parsenoop;
+var parse_SBaseRef = parsenoop;
+var parse_SerParent = parsenoop;
+var parse_SerAuxTrend = parsenoop;
+var parse_IFmtRecord = parsenoop;
+var parse_Pos = parsenoop;
+var parse_AlRuns = parsenoop;
+var parse_BRAI = parsenoop;
+var parse_SerAuxErrBar = parsenoop;
+var parse_SerFmt = parsenoop;
+var parse_Chart3DBarShape = parsenoop;
+var parse_Fbi = parsenoop;
+var parse_BopPop = parsenoop;
+var parse_AxcExt = parsenoop;
+var parse_Dat = parsenoop;
+var parse_PlotGrowth = parsenoop;
+var parse_SIIndex = parsenoop;
+var parse_GelFrame = parsenoop;
+var parse_BopPopCustom = parsenoop;
+var parse_Fbi2 = parsenoop;
+
+/* --- Specific to versions before BIFF8 --- */
+function parse_BIFF5String(blob) {
+	var len = blob.read_shift(1);
+	return blob.read_shift(len, 'sbcs-cont');
+}
+
+/* BIFF2_??? where ??? is the name from [XLS] */
+function parse_BIFF2STR(blob, length, opts) {
+	var cell = parse_XLSCell(blob, 6);
+	++blob.l;
+	var str = parse_XLUnicodeString2(blob, length-7, opts);
+	cell.val = str;
+	return cell;
+}
+
+function parse_BIFF2NUM(blob, length, opts) {
+	var cell = parse_XLSCell(blob, 6);
+	++blob.l;
+	var num = parse_Xnum(blob, 8);
+	cell.val = num;
+	return cell;
+}
+
+/* 18.4.1 charset to codepage mapping */
+var CS2CP = {
+	0:    1252, /* ANSI */
+	1:   65001, /* DEFAULT */
+	2:   65001, /* SYMBOL */
+	77:  10000, /* MAC */
+	128:   932, /* SHIFTJIS */
+	129:   949, /* HANGUL */
+	130:  1361, /* JOHAB */
+	134:   936, /* GB2312 */
+	136:   950, /* CHINESEBIG5 */
+	161:  1253, /* GREEK */
+	162:  1254, /* TURKISH */
+	163:  1258, /* VIETNAMESE */
+	177:  1255, /* HEBREW */
+	178:  1256, /* ARABIC */
+	186:  1257, /* BALTIC */
+	204:  1251, /* RUSSIAN */
+	222:   874, /* THAI */
+	238:  1250, /* EASTEUROPE */
+	255:  1252, /* OEM */
+	69:   6969  /* MISC */
+};
+
+/* Parse a list of <r> tags */
+var parse_rs = (function parse_rs_factory() {
+	var tregex = matchtag("t"), rpregex = matchtag("rPr"), rregex = /<r>/g, rend = /<\/r>/, nlregex = /\r\n/g;
+	/* 18.4.7 rPr CT_RPrElt */
+	var parse_rpr = function parse_rpr(rpr, intro, outro) {
+		var font = {}, cp = 65001;
+		var m = rpr.match(tagregex), i = 0;
+		if(m) for(;i!=m.length; ++i) {
+			var y = parsexmltag(m[i]);
+			switch(y[0]) {
+				/* 18.8.12 condense CT_BooleanProperty */
+				/* ** not required . */
+				case '<condense': break;
+				/* 18.8.17 extend CT_BooleanProperty */
+				/* ** not required . */
+				case '<extend': break;
+				/* 18.8.36 shadow CT_BooleanProperty */
+				/* ** not required . */
+				case '<shadow':
+					/* falls through */
+				case '<shadow/>': break;
+
+				/* 18.4.1 charset CT_IntProperty TODO */
+				case '<charset':
+					if(y.val == '1') break;
+					cp = CS2CP[parseInt(y.val, 10)];
+					break;
+
+				/* 18.4.2 outline CT_BooleanProperty TODO */
+				case '<outline':
+					/* falls through */
+				case '<outline/>': break;
+
+				/* 18.4.5 rFont CT_FontName */
+				case '<rFont': font.name = y.val; break;
+
+				/* 18.4.11 sz CT_FontSize */
+				case '<sz': font.sz = y.val; break;
+
+				/* 18.4.10 strike CT_BooleanProperty */
+				case '<strike':
+					if(!y.val) break;
+					/* falls through */
+				case '<strike/>': font.strike = 1; break;
+				case '</strike>': break;
+
+				/* 18.4.13 u CT_UnderlineProperty */
+				case '<u':
+					if(!y.val) break;
+					/* falls through */
+				case '<u/>': font.u = 1; break;
+				case '</u>': break;
+
+				/* 18.8.2 b */
+				case '<b':
+					if(!y.val) break;
+					/* falls through */
+				case '<b/>': font.b = 1; break;
+				case '</b>': break;
+
+				/* 18.8.26 i */
+				case '<i':
+					if(!y.val) break;
+					/* falls through */
+				case '<i/>': font.i = 1; break;
+				case '</i>': break;
+
+				/* 18.3.1.15 color CT_Color TODO: tint, theme, auto, indexed */
+				case '<color':
+					if(y.rgb) font.color = y.rgb.substr(2,6);
+					break;
+
+				/* 18.8.18 family ST_FontFamily */
+				case '<family': font.family = y.val; break;
+
+				/* 18.4.14 vertAlign CT_VerticalAlignFontProperty TODO */
+				case '<vertAlign': break;
+
+				/* 18.8.35 scheme CT_FontScheme TODO */
+				case '<scheme': break;
+
+				default:
+					if(y[0].charCodeAt(1) !== 47) throw 'Unrecognized rich format ' + y[0];
+			}
+		}
+		/* TODO: These should be generated styles, not inline */
+		var style = [];
+		if(font.b) style.push("font-weight: bold;");
+		if(font.i) style.push("font-style: italic;");
+		intro.push('<span style="' + style.join("") + '">');
+		outro.push("</span>");
+		return cp;
+	};
+
+	/* 18.4.4 r CT_RElt */
+	function parse_r(r) {
+		var terms = [[],"",[]];
+		/* 18.4.12 t ST_Xstring */
+		var t = r.match(tregex), cp = 65001;
+		if(!isval(t)) return "";
+		terms[1] = t[1];
+
+		var rpr = r.match(rpregex);
+		if(isval(rpr)) cp = parse_rpr(rpr[1], terms[0], terms[2]);
+
+		return terms[0].join("") + terms[1].replace(nlregex,'<br/>') + terms[2].join("");
+	}
+	return function parse_rs(rs) {
+		return rs.replace(rregex,"").split(rend).map(parse_r).join("");
+	};
+})();
+
+/* 18.4.8 si CT_Rst */
+var sitregex = /<t[^>]*>([^<]*)<\/t>/g, sirregex = /<r>/;
+function parse_si(x, opts) {
+	var html = opts ? opts.cellHTML : true;
+	var z = {};
+	if(!x) return null;
+	var y;
+	/* 18.4.12 t ST_Xstring (Plaintext String) */
+	if(x.charCodeAt(1) === 116) {
+		z.t = utf8read(unescapexml(x.substr(x.indexOf(">")+1).split(/<\/t>/)[0]));
+		z.r = x;
+		if(html) z.h = z.t;
+	}
+	/* 18.4.4 r CT_RElt (Rich Text Run) */
+	else if((y = x.match(sirregex))) {
+		z.r = x;
+		z.t = utf8read(unescapexml(x.match(sitregex).join("").replace(tagregex,"")));
+		if(html) z.h = parse_rs(x);
+	}
+	/* 18.4.3 phoneticPr CT_PhoneticPr (TODO: needed for Asian support) */
+	/* 18.4.6 rPh CT_PhoneticRun (TODO: needed for Asian support) */
+	return z;
+}
+
+/* 18.4 Shared String Table */
+var sstr0 = /<sst([^>]*)>([\s\S]*)<\/sst>/;
+var sstr1 = /<(?:si|sstItem)>/g;
+var sstr2 = /<\/(?:si|sstItem)>/;
+function parse_sst_xml(data, opts) {
+	var s = [], ss;
+	/* 18.4.9 sst CT_Sst */
+	var sst = data.match(sstr0);
+	if(isval(sst)) {
+		ss = sst[2].replace(sstr1,"").split(sstr2);
+		for(var i = 0; i != ss.length; ++i) {
+			var o = parse_si(ss[i], opts);
+			if(o != null) s[s.length] = o;
+		}
+		sst = parsexmltag(sst[1]); s.Count = sst.count; s.Unique = sst.uniqueCount;
+	}
+	return s;
+}
+
+RELS.SST = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings";
+var straywsregex = /^\s|\s$|[\t\n\r]/;
+function write_sst_xml(sst, opts) {
+	if(!opts.bookSST) return "";
+	var o = [XML_HEADER];
+	o[o.length] = (writextag('sst', null, {
+		xmlns: XMLNS.main[0],
+		count: sst.Count,
+		uniqueCount: sst.Unique
+	}));
+	for(var i = 0; i != sst.length; ++i) { if(sst[i] == null) continue;
+		var s = sst[i];
+		var sitag = "<si>";
+		if(s.r) sitag += s.r;
+		else {
+			sitag += "<t";
+			if(s.t.match(straywsregex)) sitag += ' xml:space="preserve"';
+			sitag += ">" + escapexml(s.t) + "</t>";
+		}
+		sitag += "</si>";
+		o[o.length] = (sitag);
+	}
+	if(o.length>2){ o[o.length] = ('</sst>'); o[1]=o[1].replace("/>",">"); }
+	return o.join("");
+}
+/* [MS-XLSB] 2.4.219 BrtBeginSst */
+function parse_BrtBeginSst(data, length) {
+	return [data.read_shift(4), data.read_shift(4)];
+}
+
+/* [MS-XLSB] 2.1.7.45 Shared Strings */
+function parse_sst_bin(data, opts) {
+	var s = [];
+	var pass = false;
+	recordhopper(data, function hopper_sst(val, R, RT) {
+		switch(R.n) {
+			case 'BrtBeginSst': s.Count = val[0]; s.Unique = val[1]; break;
+			case 'BrtSSTItem': s.push(val); break;
+			case 'BrtEndSst': return true;
+			/* TODO: produce a test case with a future record */
+			case 'BrtFRTBegin': pass = true; break;
+			case 'BrtFRTEnd': pass = false; break;
+			default: if(!pass || opts.WTF) throw new Error("Unexpected record " + RT + " " + R.n);
+		}
+	});
+	return s;
+}
+
+function write_BrtBeginSst(sst, o) {
+	if(!o) o = new_buf(8);
+	o.write_shift(4, sst.Count);
+	o.write_shift(4, sst.Unique);
+	return o;
+}
+
+var write_BrtSSTItem = write_RichStr;
+
+function write_sst_bin(sst, opts) {
+	var ba = buf_array();
+	write_record(ba, "BrtBeginSst", write_BrtBeginSst(sst));
+	for(var i = 0; i < sst.length; ++i) write_record(ba, "BrtSSTItem", write_BrtSSTItem(sst[i]));
+	write_record(ba, "BrtEndSst");
+	return ba.end();
+}
+function _JS2ANSI(str) { if(typeof cptable !== 'undefined') return cptable.utils.encode(1252, str); return str.split("").map(function(x) { return x.charCodeAt(0); }); }
+
+/* [MS-OFFCRYPTO] 2.1.4 Version */
+function parse_Version(blob, length) {
+	var o = {};
+	o.Major = blob.read_shift(2);
+	o.Minor = blob.read_shift(2);
+	return o;
+}
+/* [MS-OFFCRYPTO] 2.3.2 Encryption Header */
+function parse_EncryptionHeader(blob, length) {
+	var o = {};
+	o.Flags = blob.read_shift(4);
+
+	// Check if SizeExtra is 0x00000000
+	var tmp = blob.read_shift(4);
+	if(tmp !== 0) throw 'Unrecognized SizeExtra: ' + tmp;
+
+	o.AlgID = blob.read_shift(4);
+	switch(o.AlgID) {
+		case 0: case 0x6801: case 0x660E: case 0x660F: case 0x6610: break;
+		default: throw 'Unrecognized encryption algorithm: ' + o.AlgID;
+	}
+	parsenoop(blob, length-12);
+	return o;
+}
+
+/* [MS-OFFCRYPTO] 2.3.3 Encryption Verifier */
+function parse_EncryptionVerifier(blob, length) {
+	return parsenoop(blob, length);
+}
+/* [MS-OFFCRYPTO] 2.3.5.1 RC4 CryptoAPI Encryption Header */
+function parse_RC4CryptoHeader(blob, length) {
+	var o = {};
+	var vers = o.EncryptionVersionInfo = parse_Version(blob, 4); length -= 4;
+	if(vers.Minor != 2) throw 'unrecognized minor version code: ' + vers.Minor;
+	if(vers.Major > 4 || vers.Major < 2) throw 'unrecognized major version code: ' + vers.Major;
+	o.Flags = blob.read_shift(4); length -= 4;
+	var sz = blob.read_shift(4); length -= 4;
+	o.EncryptionHeader = parse_EncryptionHeader(blob, sz); length -= sz;
+	o.EncryptionVerifier = parse_EncryptionVerifier(blob, length);
+	return o;
+}
+/* [MS-OFFCRYPTO] 2.3.6.1 RC4 Encryption Header */
+function parse_RC4Header(blob, length) {
+	var o = {};
+	var vers = o.EncryptionVersionInfo = parse_Version(blob, 4); length -= 4;
+	if(vers.Major != 1 || vers.Minor != 1) throw 'unrecognized version code ' + vers.Major + ' : ' + vers.Minor;
+	o.Salt = blob.read_shift(16);
+	o.EncryptedVerifier = blob.read_shift(16);
+	o.EncryptedVerifierHash = blob.read_shift(16);
+	return o;
+}
+
+/* [MS-OFFCRYPTO] 2.3.7.1 Binary Document Password Verifier Derivation */
+function crypto_CreatePasswordVerifier_Method1(Password) {
+	var Verifier = 0x0000, PasswordArray;
+	var PasswordDecoded = _JS2ANSI(Password);
+	var len = PasswordDecoded.length + 1, i, PasswordByte;
+	var Intermediate1, Intermediate2, Intermediate3;
+	PasswordArray = new_raw_buf(len);
+	PasswordArray[0] = PasswordDecoded.length;
+	for(i = 1; i != len; ++i) PasswordArray[i] = PasswordDecoded[i-1];
+	for(i = len-1; i >= 0; --i) {
+		PasswordByte = PasswordArray[i];
+		Intermediate1 = ((Verifier & 0x4000) === 0x0000) ? 0 : 1;
+		Intermediate2 = (Verifier << 1) & 0x7FFF;
+		Intermediate3 = Intermediate1 | Intermediate2;
+		Verifier = Intermediate3 ^ PasswordByte;
+	}
+	return Verifier ^ 0xCE4B;
+}
+
+/* [MS-OFFCRYPTO] 2.3.7.2 Binary Document XOR Array Initialization */
+var crypto_CreateXorArray_Method1 = (function() {
+	var PadArray = [0xBB, 0xFF, 0xFF, 0xBA, 0xFF, 0xFF, 0xB9, 0x80, 0x00, 0xBE, 0x0F, 0x00, 0xBF, 0x0F, 0x00];
+	var InitialCode = [0xE1F0, 0x1D0F, 0xCC9C, 0x84C0, 0x110C, 0x0E10, 0xF1CE, 0x313E, 0x1872, 0xE139, 0xD40F, 0x84F9, 0x280C, 0xA96A, 0x4EC3];
+	var XorMatrix = [0xAEFC, 0x4DD9, 0x9BB2, 0x2745, 0x4E8A, 0x9D14, 0x2A09, 0x7B61, 0xF6C2, 0xFDA5, 0xEB6B, 0xC6F7, 0x9DCF, 0x2BBF, 0x4563, 0x8AC6, 0x05AD, 0x0B5A, 0x16B4, 0x2D68, 0x5AD0, 0x0375, 0x06EA, 0x0DD4, 0x1BA8, 0x3750, 0x6EA0, 0xDD40, 0xD849, 0xA0B3, 0x5147, 0xA28E, 0x553D, 0xAA7A, 0x44D5, 0x6F45, 0xDE8A, 0xAD35, 0x4A4B, 0x9496, 0x390D, 0x721A, 0xEB23, 0xC667, 0x9CEF, 0x29FF, 0x53FE, 0xA7FC, 0x5FD9, 0x47D3, 0x8FA6, 0x0F6D, 0x1EDA, 0x3DB4, 0x7B68, 0xF6D0, 0xB861, 0x60E3, 0xC1C6, 0x93AD, 0x377B, 0x6EF6, 0xDDEC, 0x45A0, 0x8B40, 0x06A1, 0x0D42, 0x1A84, 0x3508, 0x6A10, 0xAA51, 0x4483, 0x8906, 0x022D, 0x045A, 0x08B4, 0x1168, 0x76B4, 0xED68, 0xCAF1, 0x85C3, 0x1BA7, 0x374E, 0x6E9C, 0x3730, 0x6E60, 0xDCC0, 0xA9A1, 0x4363, 0x86C6, 0x1DAD, 0x3331, 0x6662, 0xCCC4, 0x89A9, 0x0373, 0x06E6, 0x0DCC, 0x1021, 0x2042, 0x4084, 0x8108, 0x1231, 0x2462, 0x48C4];
+	var Ror = function(Byte) { return ((Byte/2) | (Byte*128)) & 0xFF; };
+	var XorRor = function(byte1, byte2) { return Ror(byte1 ^ byte2); };
+	var CreateXorKey_Method1 = function(Password) {
+		var XorKey = InitialCode[Password.length - 1];
+		var CurrentElement = 0x68;
+		for(var i = Password.length-1; i >= 0; --i) {
+			var Char = Password[i];
+			for(var j = 0; j != 7; ++j) {
+				if(Char & 0x40) XorKey ^= XorMatrix[CurrentElement];
+				Char *= 2; --CurrentElement;
+			}
+		}
+		return XorKey;
+	};
+	return function(password) {
+		var Password = _JS2ANSI(password);
+		var XorKey = CreateXorKey_Method1(Password);
+		var Index = Password.length;
+		var ObfuscationArray = new_raw_buf(16);
+		for(var i = 0; i != 16; ++i) ObfuscationArray[i] = 0x00;
+		var Temp, PasswordLastChar, PadIndex;
+		if((Index & 1) === 1) {
+			Temp = XorKey >> 8;
+			ObfuscationArray[Index] = XorRor(PadArray[0], Temp);
+			--Index;
+			Temp = XorKey & 0xFF;
+			PasswordLastChar = Password[Password.length - 1];
+			ObfuscationArray[Index] = XorRor(PasswordLastChar, Temp);
+		}
+		while(Index > 0) {
+			--Index;
+			Temp = XorKey >> 8;
+			ObfuscationArray[Index] = XorRor(Password[Index], Temp);
+			--Index;
+			Temp = XorKey & 0xFF;
+			ObfuscationArray[Index] = XorRor(Password[Index], Temp);
+		}
+		Index = 15;
+		PadIndex = 15 - Password.length;
+		while(PadIndex > 0) {
+			Temp = XorKey >> 8;
+			ObfuscationArray[Index] = XorRor(PadArray[PadIndex], Temp);
+			--Index;
+			--PadIndex;
+			Temp = XorKey & 0xFF;
+			ObfuscationArray[Index] = XorRor(Password[Index], Temp);
+			--Index;
+			--PadIndex;
+		}
+		return ObfuscationArray;
+	};
+})();
+
+/* [MS-OFFCRYPTO] 2.3.7.3 Binary Document XOR Data Transformation Method 1 */
+var crypto_DecryptData_Method1 = function(password, Data, XorArrayIndex, XorArray, O) {
+	/* If XorArray is set, use it; if O is not set, make changes in-place */
+	if(!O) O = Data;
+	if(!XorArray) XorArray = crypto_CreateXorArray_Method1(password);
+	var Index, Value;
+	for(Index = 0; Index != Data.length; ++Index) {
+		Value = Data[Index];
+		Value ^= XorArray[XorArrayIndex];
+		Value = ((Value>>5) | (Value<<3)) & 0xFF;
+		O[Index] = Value;
+		++XorArrayIndex;
+	}
+	return [O, XorArrayIndex, XorArray];
+};
+
+var crypto_MakeXorDecryptor = function(password) {
+	var XorArrayIndex = 0, XorArray = crypto_CreateXorArray_Method1(password);
+	return function(Data) {
+		var O = crypto_DecryptData_Method1(null, Data, XorArrayIndex, XorArray);
+		XorArrayIndex = O[1];
+		return O[0];
+	};
+};
+
+/* 2.5.343 */
+function parse_XORObfuscation(blob, length, opts, out) {
+	var o = { key: parseuint16(blob), verificationBytes: parseuint16(blob) };
+	if(opts.password) o.verifier = crypto_CreatePasswordVerifier_Method1(opts.password);
+	out.valid = o.verificationBytes === o.verifier;
+	if(out.valid) out.insitu_decrypt = crypto_MakeXorDecryptor(opts.password);
+	return o;
+}
+
+/* 2.4.117 */
+function parse_FilePassHeader(blob, length, oo) {
+	var o = oo || {}; o.Info = blob.read_shift(2); blob.l -= 2;
+	if(o.Info === 1) o.Data = parse_RC4Header(blob, length);
+	else o.Data = parse_RC4CryptoHeader(blob, length);
+	return o;
+}
+function parse_FilePass(blob, length, opts) {
+	var o = { Type: blob.read_shift(2) }; /* wEncryptionType */
+	if(o.Type) parse_FilePassHeader(blob, length-2, o);
+	else parse_XORObfuscation(blob, length-2, opts, o);
+	return o;
+}
+
+
+function hex2RGB(h) {
+	var o = h.substr(h[0]==="#"?1:0,6);
+	return [parseInt(o.substr(0,2),16),parseInt(o.substr(2,2),16),parseInt(o.substr(4,2),16)];
+}
+function rgb2Hex(rgb) {
+	for(var i=0,o=1; i!=3; ++i) o = o*256 + (rgb[i]>255?255:rgb[i]<0?0:rgb[i]);
+	return o.toString(16).toUpperCase().substr(1);
+}
+
+function rgb2HSL(rgb) {
+	var R = rgb[0]/255, G = rgb[1]/255, B=rgb[2]/255;
+	var M = Math.max(R, G, B), m = Math.min(R, G, B), C = M - m;
+	if(C === 0) return [0, 0, R];
+
+	var H6 = 0, S = 0, L2 = (M + m);
+	S = C / (L2 > 1 ? 2 - L2 : L2);
+	switch(M){
+		case R: H6 = ((G - B) / C + 6)%6; break;
+		case G: H6 = ((B - R) / C + 2); break;
+		case B: H6 = ((R - G) / C + 4); break;
+	}
+	return [H6 / 6, S, L2 / 2];
+}
+
+function hsl2RGB(hsl){
+	var H = hsl[0], S = hsl[1], L = hsl[2];
+	var C = S * 2 * (L < 0.5 ? L : 1 - L), m = L - C/2;
+	var rgb = [m,m,m], h6 = 6*H;
+
+	var X;
+	if(S !== 0) switch(h6|0) {
+		case 0: case 6: X = C * h6; rgb[0] += C; rgb[1] += X; break;
+		case 1: X = C * (2 - h6);   rgb[0] += X; rgb[1] += C; break;
+		case 2: X = C * (h6 - 2);   rgb[1] += C; rgb[2] += X; break;
+		case 3: X = C * (4 - h6);   rgb[1] += X; rgb[2] += C; break;
+		case 4: X = C * (h6 - 4);   rgb[2] += C; rgb[0] += X; break;
+		case 5: X = C * (6 - h6);   rgb[2] += X; rgb[0] += C; break;
+	}
+	for(var i = 0; i != 3; ++i) rgb[i] = Math.round(rgb[i]*255);
+	return rgb;
+}
+
+/* 18.8.3 bgColor tint algorithm */
+function rgb_tint(hex, tint) {
+	if(tint == 0) return hex;
+	var hsl = rgb2HSL(hex2RGB(hex));
+	if (tint < 0) hsl[2] = hsl[2] * (1 + tint);
+	else hsl[2] = 1 - (1 - hsl[2]) * (1 - tint);
+  var rev =rgb2Hex(hsl2RGB(hsl))
+	return rev;
+}
+
+/* 18.3.1.13 width calculations */
+var DEF_MDW = 7, MAX_MDW = 15, MIN_MDW = 1, MDW = DEF_MDW;
+function width2px(width) { return (( width + ((128/MDW)|0)/256 )* MDW )|0; }
+function px2char(px) { return (((px - 5)/MDW * 100 + 0.5)|0)/100; }
+function char2width(chr) { return (((chr * MDW + 5)/MDW*256)|0)/256; }
+function cycle_width(collw) { return char2width(px2char(width2px(collw))); }
+function find_mdw(collw, coll) {
+	if(cycle_width(collw) != collw) {
+		for(MDW=DEF_MDW; MDW>MIN_MDW; --MDW) if(cycle_width(collw) === collw) break;
+		if(MDW === MIN_MDW) for(MDW=DEF_MDW+1; MDW<MAX_MDW; ++MDW) if(cycle_width(collw) === collw) break;
+		if(MDW === MAX_MDW) MDW = DEF_MDW;
+	}
+}
+
+/* [MS-EXSPXML3] 2.4.54 ST_enmPattern */
+var XLMLPatternTypeMap = {
+	"None": "none",
+	"Solid": "solid",
+	"Gray50": "mediumGray",
+	"Gray75": "darkGray",
+	"Gray25": "lightGray",
+	"HorzStripe": "darkHorizontal",
+	"VertStripe": "darkVertical",
+	"ReverseDiagStripe": "darkDown",
+	"DiagStripe": "darkUp",
+	"DiagCross": "darkGrid",
+	"ThickDiagCross": "darkTrellis",
+	"ThinHorzStripe": "lightHorizontal",
+	"ThinVertStripe": "lightVertical",
+	"ThinReverseDiagStripe": "lightDown",
+	"ThinHorzCross": "lightGrid"
+};
+
+var styles = {}; // shared styles
+
+var themes = {}; // shared themes
+
+/* 18.8.21 fills CT_Fills */
+function parse_fills(t, opts) {
+  styles.Fills = [];
+  var fill = {};
+  t[0].match(tagregex).forEach(function (x) {
+    var y = parsexmltag(x);
+    switch (y[0]) {
+      case '<fills':
+      case '<fills>':
+      case '</fills>':
+        break;
+
+      /* 18.8.20 fill CT_Fill */
+      case '<fill>':
+        break;
+      case '</fill>':
+        styles.Fills.push(fill);
+        fill = {};
+        break;
+
+      /* 18.8.32 patternFill CT_PatternFill */
+      case '<patternFill':
+        if (y.patternType) fill.patternType = y.patternType;
+        break;
+      case '<patternFill/>':
+      case '</patternFill>':
+        break;
+
+      /* 18.8.3 bgColor CT_Color */
+      case '<bgColor':
+        if (!fill.bgColor) fill.bgColor = {};
+        if (y.indexed) fill.bgColor.indexed = parseInt(y.indexed, 10);
+        if (y.theme) fill.bgColor.theme = parseInt(y.theme, 10);
+        if (y.tint) fill.bgColor.tint = parseFloat(y.tint);
+
+
+        if (y.theme && themes.themeElements && themes.themeElements.clrScheme) {
+          fill.bgColor.rgb = rgb_tint(themes.themeElements.clrScheme[fill.bgColor.theme].rgb, fill.bgColor.tint || 0);
+          if (opts.WTF) fill.bgColor.raw_rgb = rgb_tint(themes.themeElements.clrScheme[fill.bgColor.theme].rgb,0);
+        }
+        /* Excel uses ARGB strings */
+        if (y.rgb) fill.bgColor.rgb = y.rgb;//.substring(y.rgb.length - 6);
+        break;
+      case '<bgColor/>':
+      case '</bgColor>':
+        break;
+
+      /* 18.8.19 fgColor CT_Color */
+      case '<fgColor':
+        if (!fill.fgColor) fill.fgColor = {};
+        if (y.theme) fill.fgColor.theme = parseInt(y.theme, 10);
+        if (y.tint) fill.fgColor.tint = parseFloat(y.tint);
+
+        if (y.theme && themes.themeElements && themes.themeElements.clrScheme) {
+          fill.fgColor.rgb = rgb_tint(themes.themeElements.clrScheme[fill.fgColor.theme].rgb, fill.fgColor.tint || 0);
+          if (opts.WTF) fill.fgColor.raw_rgb = rgb_tint(themes.themeElements.clrScheme[fill.fgColor.theme].rgb,0);
+        }
+
+        /* Excel uses ARGB strings */
+        if (y.rgb) fill.fgColor.rgb = y.rgb;//.substring(y.rgb.length - 6);
+        break;
+      case '<fgColor/>':
+      case '</fgColor>':
+        break;
+
+      default:
+        if (opts.WTF) throw 'unrecognized ' + y[0] + ' in fills';
+    }
+  });
+}
+
+function parse_fonts(t, opts) {
+  styles.Fonts = [];
+  var font = {};
+  t[0].match(tagregex).forEach(function (x) {
+    var y = parsexmltag(x);
+    switch (y[0]) {
+
+      case '<fonts':
+      case  '<fonts>':
+      case '</fonts>':
+        break;
+      case '<font':
+        break;
+      case '</font>':
+        styles.Fonts.push(font);
+        ;
+        font = {};
+        break;
+
+      case '<name':
+        if (y.val) font.name = y.val;
+        break;
+      case '<name/>':
+      case '</name>':
+        break;
+
+
+      case '<b/>':
+        font.bold = true;
+        break;
+      case '<u/>':
+        font.underline = true;
+        break;
+      case '<i/>':
+        font.italic = true;
+        break;
+      case '<strike/>':
+        font.strike = true;
+        break;
+      case '<outline/>':
+        font.outline = true;
+        break;
+      case '<shadow/>':
+        font.shadow = true;
+        break;
+
+
+      case '<sz':
+        if (y.val) font.sz = y.val;
+        break;
+      case '<sz/>':
+      case '</sz>':
+        break;
+
+      case '<vertAlign':
+        if (y.val) font.vertAlign = y.val;
+        break;
+      case '<vertAlign/>':
+      case '</vertAlign>':
+        break;
+
+
+      case '<color':
+        if (!font.color) font.color = {};
+        if (y.theme) font.color.theme = y.theme;
+        if (y.tint) font.color.tint = y.tint;
+        if (y.theme && themes.themeElements && themes.themeElements.clrScheme) {
+          font.color.rgb = rgb_tint(themes.themeElements.clrScheme[font.color.theme].rgb, font.color.tint || 0);
+        }
+        if (y.rgb) font.color.rgb = y.rgb;
+        break;
+      case '<color/>':
+      case '</color>':
+        break;
+    }
+  });
+}
+
+function parse_borders(t, opts) {
+  styles.Borders = [];
+  var border = {}, sub_border = {};
+  t[0].match(tagregex).forEach(function (x) {
+    var y = parsexmltag(x);
+    switch (y[0]) {
+      case '<borders':
+      case  '<borders>':
+      case '</borders>':
+        break;
+      case '<border':
+      case '<border>':
+        border = {};
+        if (y.diagonalUp) { border.diagonalUp = y.diagonalUp; }
+        if (y.diagonalDown) { border.diagonalDown = y.diagonalDown; }
+        styles.Borders.push(border);
+
+        break;
+        break;
+      case '</border>':
+        break;
+
+      case '<left':
+        sub_border = border.left = {};
+        if (y.style) {
+          sub_border.style = y.style;
+        }
+        break;
+      case '<right':
+        sub_border = border.right = {};
+        if (y.style) {
+          sub_border.style = y.style;
+        }
+        break;
+      case '<top':
+        sub_border = border.top = {};
+        if (y.style) {
+          sub_border.style = y.style;
+        }
+        break;
+      case '<bottom':
+        sub_border = border.bottom = {};
+        if (y.style) {
+          sub_border.style = y.style;
+        }
+        break;
+      case '<diagonal':
+        sub_border = border.diagonal = {};
+        if (y.style) {
+          sub_border.style = y.style;
+        }
+        break;
+
+      case '<color':
+        sub_border.color = {};
+        if (y.theme) sub_border.color.theme = y.theme;
+        if (y.theme && themes.themeElements && themes.themeElements.clrScheme) {
+          sub_border.color.rgb = rgb_tint(themes.themeElements.clrScheme[sub_border.color.theme].rgb, sub_border.color.tint || 0);
+        }
+
+        if (y.tint) sub_border.color.tint = y.tint;
+        if (y.rgb) sub_border.color.rgb = y.rgb;
+        if (y.auto) sub_border.color.auto = y.auto;
+        break;
+      case '<name/>':
+      case '</name>':
+        break;
+      default:
+        break;
+    }
+  });
+
+}
+
+/* 18.8.31 numFmts CT_NumFmts */
+function parse_numFmts(t, opts) {
+  styles.NumberFmt = [];
+  var k = keys(SSF._table);
+  for (var i = 0; i < k.length; ++i) styles.NumberFmt[k[i]] = SSF._table[k[i]];
+  var m = t[0].match(tagregex);
+  for (i = 0; i < m.length; ++i) {
+    var y = parsexmltag(m[i]);
+    switch (y[0]) {
+      case '<numFmts':
+      case '</numFmts>':
+      case '<numFmts/>':
+      case '<numFmts>':
+        break;
+      case '<numFmt':
+      {
+        var f = unescapexml(utf8read(y.formatCode)), j = parseInt(y.numFmtId, 10);
+        styles.NumberFmt[j] = f;
+        if (j > 0) SSF.load(f, j);
+      }
+        break;
+      default:
+        if (opts.WTF) throw 'unrecognized ' + y[0] + ' in numFmts';
+    }
+  }
+}
+
+function write_numFmts(NF, opts) {
+  var o = ["<numFmts>"];
+  [
+    [5, 8],
+    [23, 26],
+    [41, 44],
+    [63, 66],
+    [164, 392]
+  ].forEach(function (r) {
+    for (var i = r[0]; i <= r[1]; ++i) if (NF[i] !== undefined) o[o.length] = (writextag('numFmt', null, {numFmtId: i, formatCode: escapexml(NF[i])}));
+  });
+  if (o.length === 1) return "";
+  o[o.length] = ("</numFmts>");
+  o[0] = writextag('numFmts', null, { count: o.length - 2 }).replace("/>", ">");
+  return o.join("");
+}
+
+/* 18.8.10 cellXfs CT_CellXfs */
+function parse_cellXfs(t, opts) {
+  styles.CellXf = [];
+  var xf;
+  t[0].match(tagregex).forEach(function (x) {
+    var y = parsexmltag(x);
+    switch (y[0]) {
+      case '<cellXfs':
+      case '<cellXfs>':
+      case '<cellXfs/>':
+      case '</cellXfs>':
+        break;
+
+      /* 18.8.45 xf CT_Xf */
+      case '<xf':
+          xf = y;
+          delete xf[0];
+        delete y[0];
+        if (xf.numFmtId) xf.numFmtId = parseInt(xf.numFmtId, 10);
+        if (xf.fillId) xf.fillId = parseInt(xf.fillId, 10);
+        styles.CellXf.push(xf);
+        break;
+      case '</xf>':
+        break;
+
+      /* 18.8.1 alignment CT_CellAlignment */
+      case '<alignment':
+      case '<alignment/>':
+        var alignment = {}
+          if (y.vertical) { alignment.vertical = y.vertical;}
+          if (y.horizontal) { alignment.horizontal = y.horizontal;}
+          if (y.textRotation != undefined) { alignment.textRotation = y.textRotation; }
+          if (y.indent) { alignment.indent = y.indent; }
+          if (y.wrapText) { alignment.wrapText = y.wrapText; }
+          xf.alignment = alignment;
+
+        break;
+
+      /* 18.8.33 protection CT_CellProtection */
+      case '<protection':
+      case '</protection>':
+      case '<protection/>':
+        break;
+
+      case '<extLst':
+      case '</extLst>':
+        break;
+      case '<ext':
+        break;
+      default:
+        if (opts.WTF) throw 'unrecognized ' + y[0] + ' in cellXfs';
+    }
+  });
+}
+
+function write_cellXfs(cellXfs) {
+  var o = [];
+  o[o.length] = (writextag('cellXfs', null));
+  cellXfs.forEach(function (c) {
+    o[o.length] = (writextag('xf', null, c));
+  });
+  o[o.length] = ("</cellXfs>");
+  if (o.length === 2) return "";
+  o[0] = writextag('cellXfs', null, {count: o.length - 2}).replace("/>", ">");
+  return o.join("");
+}
+
+/* 18.8 Styles CT_Stylesheet*/
+var parse_sty_xml = (function make_pstyx() {
+  var numFmtRegex = /<numFmts([^>]*)>.*<\/numFmts>/;
+  var cellXfRegex = /<cellXfs([^>]*)>.*<\/cellXfs>/;
+  var fillsRegex = /<fills([^>]*)>.*<\/fills>/;
+  var bordersRegex = /<borders([^>]*)>.*<\/borders>/;
+
+  return function parse_sty_xml(data, opts) {
+    /* 18.8.39 styleSheet CT_Stylesheet */
+    var t;
+
+    /* numFmts CT_NumFmts ? */
+    if ((t = data.match(numFmtRegex))) parse_numFmts(t, opts);
+
+    /* fonts CT_Fonts ? */
+    if ((t = data.match(/<fonts([^>]*)>.*<\/fonts>/))) parse_fonts(t, opts)
+
+    /* fills CT_Fills */
+    if ((t = data.match(fillsRegex))) parse_fills(t, opts);
+
+    /* borders CT_Borders ? */
+    if ((t = data.match(bordersRegex))) parse_borders(t, opts);
+    /* cellStyleXfs CT_CellStyleXfs ? */
+
+    /* cellXfs CT_CellXfs ? */
+    if ((t = data.match(cellXfRegex))) parse_cellXfs(t, opts);
+
+    /* dxfs CT_Dxfs ? */
+    /* tableStyles CT_TableStyles ? */
+    /* colors CT_Colors ? */
+    /* extLst CT_ExtensionList ? */
+
+    return styles;
+  };
+})();
+
+var STYLES_XML_ROOT = writextag('styleSheet', null, {
+  'xmlns': XMLNS.main[0],
+  'xmlns:vt': XMLNS.vt
+});
+
+RELS.STY = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles";
+
+function write_sty_xml(wb, opts) {
+
+  if (typeof style_builder != 'undefined' && typeof 'require' != 'undefined') {
+    return style_builder.toXml();
+  }
+
+  var o = [XML_HEADER, STYLES_XML_ROOT], w;
+  if ((w = write_numFmts(wb.SSF)) != null) o[o.length] = w;
+  o[o.length] = ('<fonts count="1"><font><sz val="12"/><color theme="1"/><name val="Calibri"/><family val="2"/><scheme val="minor"/></font></fonts>');
+  o[o.length] = ('<fills count="2"><fill><patternFill patternType="none"/></fill><fill><patternFill patternType="gray125"/></fill></fills>');
+  o[o.length] = ('<borders count="1"><border><left/><right/><top/><bottom/><diagonal/></border></borders>');
+  o[o.length] = ('<cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0"/></cellStyleXfs>');
+  if ((w = write_cellXfs(opts.cellXfs))) o[o.length] = (w);
+  o[o.length] = ('<cellStyles count="1"><cellStyle name="Normal" xfId="0" builtinId="0"/></cellStyles>');
+  o[o.length] = ('<dxfs count="0"/>');
+  o[o.length] = ('<tableStyles count="0" defaultTableStyle="TableStyleMedium9" defaultPivotStyle="PivotStyleMedium4"/>');
+
+  if (o.length > 2) {
+    o[o.length] = ('</styleSheet>');
+    o[1] = o[1].replace("/>", ">");
+  }
+  return o.join("");
+}
+/* [MS-XLSB] 2.4.651 BrtFmt */
+function parse_BrtFmt(data, length) {
+	var ifmt = data.read_shift(2);
+	var stFmtCode = parse_XLWideString(data,length-2);
+	return [ifmt, stFmtCode];
+}
+
+/* [MS-XLSB] 2.4.653 BrtFont TODO */
+function parse_BrtFont(data, length) {
+	var out = {flags:{}};
+	out.dyHeight = data.read_shift(2);
+	out.grbit = parse_FontFlags(data, 2);
+	out.bls = data.read_shift(2);
+	out.sss = data.read_shift(2);
+	out.uls = data.read_shift(1);
+	out.bFamily = data.read_shift(1);
+	out.bCharSet = data.read_shift(1);
+	data.l++;
+	out.brtColor = parse_BrtColor(data, 8);
+	out.bFontScheme = data.read_shift(1);
+	out.name = parse_XLWideString(data, length - 21);
+
+	out.flags.Bold = out.bls === 0x02BC;
+	out.flags.Italic = out.grbit.fItalic;
+	out.flags.Strikeout = out.grbit.fStrikeout;
+	out.flags.Outline = out.grbit.fOutline;
+	out.flags.Shadow = out.grbit.fShadow;
+	out.flags.Condense = out.grbit.fCondense;
+	out.flags.Extend = out.grbit.fExtend;
+	out.flags.Sub = out.sss & 0x2;
+	out.flags.Sup = out.sss & 0x1;
+	return out;
+}
+
+/* [MS-XLSB] 2.4.816 BrtXF */
+function parse_BrtXF(data, length) {
+	var ixfeParent = data.read_shift(2);
+	var ifmt = data.read_shift(2);
+	parsenoop(data, length-4);
+	return {ixfe:ixfeParent, ifmt:ifmt };
+}
+
+/* [MS-XLSB] 2.1.7.50 Styles */
+function parse_sty_bin(data, opts) {
+	styles.NumberFmt = [];
+	for(var y in SSF._table) styles.NumberFmt[y] = SSF._table[y];
+
+	styles.CellXf = [];
+	var state = ""; /* TODO: this should be a stack */
+	var pass = false;
+	recordhopper(data, function hopper_sty(val, R, RT) {
+		switch(R.n) {
+			case 'BrtFmt':
+				styles.NumberFmt[val[0]] = val[1]; SSF.load(val[1], val[0]);
+				break;
+			case 'BrtFont': break; /* TODO */
+			case 'BrtKnownFonts': break; /* TODO */
+			case 'BrtFill': break; /* TODO */
+			case 'BrtBorder': break; /* TODO */
+			case 'BrtXF':
+				if(state === "CELLXFS") {
+					styles.CellXf.push(val);
+				}
+				break; /* TODO */
+			case 'BrtStyle': break; /* TODO */
+			case 'BrtDXF': break; /* TODO */
+			case 'BrtMRUColor': break; /* TODO */
+			case 'BrtIndexedColor': break; /* TODO */
+			case 'BrtBeginStyleSheet': break;
+			case 'BrtEndStyleSheet': break;
+			case 'BrtBeginTableStyle': break;
+			case 'BrtTableStyleElement': break;
+			case 'BrtEndTableStyle': break;
+			case 'BrtBeginFmts': state = "FMTS"; break;
+			case 'BrtEndFmts': state = ""; break;
+			case 'BrtBeginFonts': state = "FONTS"; break;
+			case 'BrtEndFonts': state = ""; break;
+			case 'BrtACBegin': state = "ACFONTS"; break;
+			case 'BrtACEnd': state = ""; break;
+			case 'BrtBeginFills': state = "FILLS"; break;
+			case 'BrtEndFills': state = ""; break;
+			case 'BrtBeginBorders': state = "BORDERS"; break;
+			case 'BrtEndBorders': state = ""; break;
+			case 'BrtBeginCellStyleXFs': state = "CELLSTYLEXFS"; break;
+			case 'BrtEndCellStyleXFs': state = ""; break;
+			case 'BrtBeginCellXFs': state = "CELLXFS"; break;
+			case 'BrtEndCellXFs': state = ""; break;
+			case 'BrtBeginStyles': state = "STYLES"; break;
+			case 'BrtEndStyles': state = ""; break;
+			case 'BrtBeginDXFs': state = "DXFS"; break;
+			case 'BrtEndDXFs': state = ""; break;
+			case 'BrtBeginTableStyles': state = "TABLESTYLES"; break;
+			case 'BrtEndTableStyles': state = ""; break;
+			case 'BrtBeginColorPalette': state = "COLORPALETTE"; break;
+			case 'BrtEndColorPalette': state = ""; break;
+			case 'BrtBeginIndexedColors': state = "INDEXEDCOLORS"; break;
+			case 'BrtEndIndexedColors': state = ""; break;
+			case 'BrtBeginMRUColors': state = "MRUCOLORS"; break;
+			case 'BrtEndMRUColors': state = ""; break;
+			case 'BrtFRTBegin': pass = true; break;
+			case 'BrtFRTEnd': pass = false; break;
+			case 'BrtBeginStyleSheetExt14': break;
+			case 'BrtBeginSlicerStyles': break;
+			case 'BrtEndSlicerStyles': break;
+			case 'BrtBeginTimelineStylesheetExt15': break;
+			case 'BrtEndTimelineStylesheetExt15': break;
+			case 'BrtBeginTimelineStyles': break;
+			case 'BrtEndTimelineStyles': break;
+			case 'BrtEndStyleSheetExt14': break;
+			default: if(!pass || opts.WTF) throw new Error("Unexpected record " + RT + " " + R.n);
+		}
+	});
+	return styles;
+}
+
+/* [MS-XLSB] 2.1.7.50 Styles */
+function write_sty_bin(data, opts) {
+	var ba = buf_array();
+	write_record(ba, "BrtBeginStyleSheet");
+	/* [FMTS] */
+	/* [FONTS] */
+	/* [FILLS] */
+	/* [BORDERS] */
+	/* CELLSTYLEXFS */
+	/* CELLXFS*/
+	/* STYLES */
+	/* DXFS */
+	/* TABLESTYLES */
+	/* [COLORPALETTE] */
+	/* FRTSTYLESHEET*/
+	write_record(ba, "BrtEndStyleSheet");
+	return ba.end();
+}
+RELS.THEME = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme";
+
+/* 20.1.6.2 clrScheme CT_ColorScheme */
+function parse_clrScheme(t, opts) {
+	themes.themeElements.clrScheme = [];
+	var color = {};
+	t[0].match(tagregex).forEach(function(x) {
+		var y = parsexmltag(x);
+		switch(y[0]) {
+			case '<a:clrScheme': case '</a:clrScheme>': break;
+
+			/* 20.1.2.3.32 srgbClr CT_SRgbColor */
+			case '<a:srgbClr': color.rgb = y.val; break;
+
+			/* 20.1.2.3.33 sysClr CT_SystemColor */
+			case '<a:sysClr': color.rgb = y.lastClr; break;
+
+			/* 20.1.4.1.9 dk1 (Dark 1) */
+			case '<a:dk1>':
+			case '</a:dk1>':
+			/* 20.1.4.1.10 dk2 (Dark 2) */
+			case '<a:dk2>':
+			case '</a:dk2>':
+			/* 20.1.4.1.22 lt1 (Light 1) */
+			case '<a:lt1>':
+			case '</a:lt1>':
+			/* 20.1.4.1.23 lt2 (Light 2) */
+			case '<a:lt2>':
+			case '</a:lt2>':
+			/* 20.1.4.1.1 accent1 (Accent 1) */
+			case '<a:accent1>':
+			case '</a:accent1>':
+			/* 20.1.4.1.2 accent2 (Accent 2) */
+			case '<a:accent2>':
+			case '</a:accent2>':
+			/* 20.1.4.1.3 accent3 (Accent 3) */
+			case '<a:accent3>':
+			case '</a:accent3>':
+			/* 20.1.4.1.4 accent4 (Accent 4) */
+			case '<a:accent4>':
+			case '</a:accent4>':
+			/* 20.1.4.1.5 accent5 (Accent 5) */
+			case '<a:accent5>':
+			case '</a:accent5>':
+			/* 20.1.4.1.6 accent6 (Accent 6) */
+			case '<a:accent6>':
+			case '</a:accent6>':
+			/* 20.1.4.1.19 hlink (Hyperlink) */
+			case '<a:hlink>':
+			case '</a:hlink>':
+			/* 20.1.4.1.15 folHlink (Followed Hyperlink) */
+			case '<a:folHlink>':
+			case '</a:folHlink>':
+				if (y[0][1] === '/') {
+					themes.themeElements.clrScheme.push(color);
+					color = {};
+				} else {
+					color.name = y[0].substring(3, y[0].length - 1);
+				}
+				break;
+
+			default: if(opts.WTF) throw 'unrecognized ' + y[0] + ' in clrScheme';
+		}
+	});
+}
+
+/* 20.1.4.1.18 fontScheme CT_FontScheme */
+function parse_fontScheme(t, opts) { }
+
+/* 20.1.4.1.15 fmtScheme CT_StyleMatrix */
+function parse_fmtScheme(t, opts) { }
+
+var clrsregex = /<a:clrScheme([^>]*)>[^\u2603]*<\/a:clrScheme>/;
+var fntsregex = /<a:fontScheme([^>]*)>[^\u2603]*<\/a:fontScheme>/;
+var fmtsregex = /<a:fmtScheme([^>]*)>[^\u2603]*<\/a:fmtScheme>/;
+
+/* 20.1.6.10 themeElements CT_BaseStyles */
+function parse_themeElements(data, opts) {
+	themes.themeElements = {};
+
+	var t;
+
+	[
+		/* clrScheme CT_ColorScheme */
+		['clrScheme', clrsregex, parse_clrScheme],
+		/* fontScheme CT_FontScheme */
+		['fontScheme', fntsregex, parse_fontScheme],
+		/* fmtScheme CT_StyleMatrix */
+		['fmtScheme', fmtsregex, parse_fmtScheme]
+	].forEach(function(m) {
+		if(!(t=data.match(m[1]))) throw m[0] + ' not found in themeElements';
+		m[2](t, opts);
+	});
+}
+
+var themeltregex = /<a:themeElements([^>]*)>[^\u2603]*<\/a:themeElements>/;
+
+/* 14.2.7 Theme Part */
+function parse_theme_xml(data, opts) {
+	/* 20.1.6.9 theme CT_OfficeStyleSheet */
+	if(!data || data.length === 0) return themes;
+
+	var t;
+
+	/* themeElements CT_BaseStyles */
+	if(!(t=data.match(themeltregex))) throw 'themeElements not found in theme';
+	parse_themeElements(t[0], opts);
+
+	return themes;
+}
+
+//function write_theme() { return '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n<a:theme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="Office Theme"><a:themeElements><a:clrScheme name="Office"><a:dk1><a:sysClr val="windowText" lastClr="000000"/></a:dk1><a:lt1><a:sysClr val="window" lastClr="FFFFFF"/></a:lt1><a:dk2><a:srgbClr val="1F497D"/></a:dk2><a:lt2><a:srgbClr val="EEECE1"/></a:lt2><a:accent1><a:srgbClr val="4F81BD"/></a:accent1><a:accent2><a:srgbClr val="C0504D"/></a:accent2><a:accent3><a:srgbClr val="9BBB59"/></a:accent3><a:accent4><a:srgbClr val="8064A2"/></a:accent4><a:accent5><a:srgbClr val="4BACC6"/></a:accent5><a:accent6><a:srgbClr val="F79646"/></a:accent6><a:hlink><a:srgbClr val="0000FF"/></a:hlink><a:folHlink><a:srgbClr val="800080"/></a:folHlink></a:clrScheme><a:fontScheme name="Office"><a:majorFont><a:latin typeface="Cambria"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Jpan" typeface="锛汲 锛般偞銈枫儍銈�"/><a:font script="Hang" typeface="毵戩潃 瓿犽敃"/><a:font script="Hans" typeface="瀹嬩綋"/><a:font script="Hant" typeface="鏂扮窗鏄庨珨"/><a:font script="Arab" typeface="Times New Roman"/><a:font script="Hebr" typeface="Times New Roman"/><a:font script="Thai" typeface="Tahoma"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="MoolBoran"/><a:font script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Times New Roman"/><a:font script="Uigh" typeface="Microsoft Uighur"/><a:font script="Geor" typeface="Sylfaen"/></a:majorFont><a:minorFont><a:latin typeface="Calibri"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Jpan" typeface="锛汲 锛般偞銈枫儍銈�"/><a:font script="Hang" typeface="毵戩潃 瓿犽敃"/><a:font script="Hans" typeface="瀹嬩綋"/><a:font script="Hant" typeface="鏂扮窗鏄庨珨"/><a:font script="Arab" typeface="Arial"/><a:font script="Hebr" typeface="Arial"/><a:font script="Thai" typeface="Tahoma"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="DaunPenh"/><a:font script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Arial"/><a:font script="Uigh" typeface="Microsoft Uighur"/><a:font script="Geor" typeface="Sylfaen"/></a:minorFont></a:fontScheme><a:fmtScheme name="Office"><a:fillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="50000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="35000"><a:schemeClr val="phClr"><a:tint val="37000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:tint val="15000"/><a:satMod val="350000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="16200000" scaled="1"/></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="100000"/><a:shade val="100000"/><a:satMod val="130000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:tint val="50000"/><a:shade val="100000"/><a:satMod val="350000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="16200000" scaled="0"/></a:gradFill></a:fillStyleLst><a:lnStyleLst><a:ln w="9525" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"><a:shade val="95000"/><a:satMod val="105000"/></a:schemeClr></a:solidFill><a:prstDash val="solid"/></a:ln><a:ln w="25400" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln><a:ln w="38100" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln></a:lnStyleLst><a:effectStyleLst><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="20000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="38000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw></a:effectLst><a:scene3d><a:camera prst="orthographicFront"><a:rot lat="0" lon="0" rev="0"/></a:camera><a:lightRig rig="threePt" dir="t"><a:rot lat="0" lon="0" rev="1200000"/></a:lightRig></a:scene3d><a:sp3d><a:bevelT w="63500" h="25400"/></a:sp3d></a:effectStyle></a:effectStyleLst><a:bgFillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="40000"/><a:satMod val="350000"/></a:schemeClr></a:gs><a:gs pos="40000"><a:schemeClr val="phClr"><a:tint val="45000"/><a:shade val="99000"/><a:satMod val="350000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="20000"/><a:satMod val="255000"/></a:schemeClr></a:gs></a:gsLst><a:path path="circle"><a:fillToRect l="50000" t="-80000" r="50000" b="180000"/></a:path></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="80000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="30000"/><a:satMod val="200000"/></a:schemeClr></a:gs></a:gsLst><a:path path="circle"><a:fillToRect l="50000" t="50000" r="50000" b="50000"/></a:path></a:gradFill></a:bgFillStyleLst></a:fmtScheme></a:themeElements><a:objectDefaults><a:spDef><a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx="1"><a:schemeClr val="accent1"/></a:lnRef><a:fillRef idx="3"><a:schemeClr val="accent1"/></a:fillRef><a:effectRef idx="2"><a:schemeClr val="accent1"/></a:effectRef><a:fontRef idx="minor"><a:schemeClr val="lt1"/></a:fontRef></a:style></a:spDef><a:lnDef><a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx="2"><a:schemeClr val="accent1"/></a:lnRef><a:fillRef idx="0"><a:schemeClr val="accent1"/></a:fillRef><a:effectRef idx="1"><a:schemeClr val="accent1"/></a:effectRef><a:fontRef idx="minor"><a:schemeClr val="tx1"/></a:fontRef></a:style></a:lnDef></a:objectDefaults><a:extraClrSchemeLst/></a:theme>'; }
+function write_theme(opts) {
+  if (opts.themeXml) { return opts.themeXml; }
+  return '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n<a:theme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="Office Theme"><a:themeElements><a:clrScheme name="Office"><a:dk1><a:sysClr val="windowText" lastClr="000000"/></a:dk1><a:lt1><a:sysClr val="window" lastClr="FFFFFF"/></a:lt1><a:dk2><a:srgbClr val="1F497D"/></a:dk2><a:lt2><a:srgbClr val="EEECE1"/></a:lt2><a:accent1><a:srgbClr val="4F81BD"/></a:accent1><a:accent2><a:srgbClr val="C0504D"/></a:accent2><a:accent3><a:srgbClr val="9BBB59"/></a:accent3><a:accent4><a:srgbClr val="8064A2"/></a:accent4><a:accent5><a:srgbClr val="4BACC6"/></a:accent5><a:accent6><a:srgbClr val="F79646"/></a:accent6><a:hlink><a:srgbClr val="0000FF"/></a:hlink><a:folHlink><a:srgbClr val="800080"/></a:folHlink></a:clrScheme><a:fontScheme name="Office"><a:majorFont><a:latin typeface="Cambria"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Jpan" typeface="锛汲 锛般偞銈枫儍銈�"/><a:font script="Hang" typeface="毵戩潃 瓿犽敃"/><a:font script="Hans" typeface="瀹嬩綋"/><a:font script="Hant" typeface="鏂扮窗鏄庨珨"/><a:font script="Arab" typeface="Times New Roman"/><a:font script="Hebr" typeface="Times New Roman"/><a:font script="Thai" typeface="Tahoma"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="MoolBoran"/><a:font script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Times New Roman"/><a:font script="Uigh" typeface="Microsoft Uighur"/><a:font script="Geor" typeface="Sylfaen"/></a:majorFont><a:minorFont><a:latin typeface="Calibri"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Jpan" typeface="锛汲 锛般偞銈枫儍銈�"/><a:font script="Hang" typeface="毵戩潃 瓿犽敃"/><a:font script="Hans" typeface="瀹嬩綋"/><a:font script="Hant" typeface="鏂扮窗鏄庨珨"/><a:font script="Arab" typeface="Arial"/><a:font script="Hebr" typeface="Arial"/><a:font script="Thai" typeface="Tahoma"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="DaunPenh"/><a:font script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Arial"/><a:font script="Uigh" typeface="Microsoft Uighur"/><a:font script="Geor" typeface="Sylfaen"/></a:minorFont></a:fontScheme><a:fmtScheme name="Office"><a:fillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="50000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="35000"><a:schemeClr val="phClr"><a:tint val="37000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:tint val="15000"/><a:satMod val="350000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="16200000" scaled="1"/></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="100000"/><a:shade val="100000"/><a:satMod val="130000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:tint val="50000"/><a:shade val="100000"/><a:satMod val="350000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="16200000" scaled="0"/></a:gradFill></a:fillStyleLst><a:lnStyleLst><a:ln w="9525" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"><a:shade val="95000"/><a:satMod val="105000"/></a:schemeClr></a:solidFill><a:prstDash val="solid"/></a:ln><a:ln w="25400" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln><a:ln w="38100" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln></a:lnStyleLst><a:effectStyleLst><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="20000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="38000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw></a:effectLst><a:scene3d><a:camera prst="orthographicFront"><a:rot lat="0" lon="0" rev="0"/></a:camera><a:lightRig rig="threePt" dir="t"><a:rot lat="0" lon="0" rev="1200000"/></a:lightRig></a:scene3d><a:sp3d><a:bevelT w="63500" h="25400"/></a:sp3d></a:effectStyle></a:effectStyleLst><a:bgFillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="40000"/><a:satMod val="350000"/></a:schemeClr></a:gs><a:gs pos="40000"><a:schemeClr val="phClr"><a:tint val="45000"/><a:shade val="99000"/><a:satMod val="350000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="20000"/><a:satMod val="255000"/></a:schemeClr></a:gs></a:gsLst><a:path path="circle"><a:fillToRect l="50000" t="-80000" r="50000" b="180000"/></a:path></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="80000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="30000"/><a:satMod val="200000"/></a:schemeClr></a:gs></a:gsLst><a:path path="circle"><a:fillToRect l="50000" t="50000" r="50000" b="50000"/></a:path></a:gradFill></a:bgFillStyleLst></a:fmtScheme></a:themeElements><a:objectDefaults><a:spDef><a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx="1"><a:schemeClr val="accent1"/></a:lnRef><a:fillRef idx="3"><a:schemeClr val="accent1"/></a:fillRef><a:effectRef idx="2"><a:schemeClr val="accent1"/></a:effectRef><a:fontRef idx="minor"><a:schemeClr val="lt1"/></a:fontRef></a:style></a:spDef><a:lnDef><a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx="2"><a:schemeClr val="accent1"/></a:lnRef><a:fillRef idx="0"><a:schemeClr val="accent1"/></a:fillRef><a:effectRef idx="1"><a:schemeClr val="accent1"/></a:effectRef><a:fontRef idx="minor"><a:schemeClr val="tx1"/></a:fontRef></a:style></a:lnDef></a:objectDefaults><a:extraClrSchemeLst/></a:theme>';
+}/* [MS-XLS] 2.4.326 TODO: payload is a zip file */
+function parse_Theme(blob, length) {
+	var dwThemeVersion = blob.read_shift(4);
+	if(dwThemeVersion === 124226) return;
+	blob.l += length-4;
+}
+
+/* 2.5.49 */
+function parse_ColorTheme(blob, length) { return blob.read_shift(4); }
+
+/* 2.5.155 */
+function parse_FullColorExt(blob, length) {
+	var o = {};
+	o.xclrType = blob.read_shift(2);
+	o.nTintShade = blob.read_shift(2);
+	switch(o.xclrType) {
+		case 0: blob.l += 4; break;
+		case 1: o.xclrValue = parse_IcvXF(blob, 4); break;
+		case 2: o.xclrValue = parse_LongRGBA(blob, 4); break;
+		case 3: o.xclrValue = parse_ColorTheme(blob, 4); break;
+		case 4: blob.l += 4; break;
+	}
+	blob.l += 8;
+	return o;
+}
+
+/* 2.5.164 TODO: read 7 bits*/
+function parse_IcvXF(blob, length) {
+	return parsenoop(blob, length);
+}
+
+/* 2.5.280 */
+function parse_XFExtGradient(blob, length) {
+	return parsenoop(blob, length);
+}
+
+/* 2.5.108 */
+function parse_ExtProp(blob, length) {
+	var extType = blob.read_shift(2);
+	var cb = blob.read_shift(2);
+	var o = [extType];
+	switch(extType) {
+		case 0x04: case 0x05: case 0x07: case 0x08:
+		case 0x09: case 0x0A: case 0x0B: case 0x0D:
+			o[1] = parse_FullColorExt(blob, cb); break;
+		case 0x06: o[1] = parse_XFExtGradient(blob, cb); break;
+		case 0x0E: case 0x0F: o[1] = blob.read_shift(cb === 5 ? 1 : 2); break;
+		default: throw new Error("Unrecognized ExtProp type: " + extType + " " + cb);
+	}
+	return o;
+}
+
+/* 2.4.355 */
+function parse_XFExt(blob, length) {
+	var end = blob.l + length;
+	blob.l += 2;
+	var ixfe = blob.read_shift(2);
+	blob.l += 2;
+	var cexts = blob.read_shift(2);
+	var ext = [];
+	while(cexts-- > 0) ext.push(parse_ExtProp(blob, end-blob.l));
+	return {ixfe:ixfe, ext:ext};
+}
+
+/* xf is an XF, see parse_XFExt for xfext */
+function update_xfext(xf, xfext) {
+	xfext.forEach(function(xfe) {
+		switch(xfe[0]) { /* 2.5.108 extPropData */
+			case 0x04: break; /* foreground color */
+			case 0x05: break; /* background color */
+			case 0x07: case 0x08: case 0x09: case 0x0a: break;
+			case 0x0d: break; /* text color */
+			case 0x0e: break; /* font scheme */
+			default: throw "bafuq" + xfe[0].toString(16);
+		}
+	});
+}
+
+/* 18.6 Calculation Chain */
+function parse_cc_xml(data, opts) {
+	var d = [];
+	var l = 0, i = 1;
+	(data.match(tagregex)||[]).forEach(function(x) {
+		var y = parsexmltag(x);
+		switch(y[0]) {
+			case '<?xml': break;
+			/* 18.6.2  calcChain CT_CalcChain 1 */
+			case '<calcChain': case '<calcChain>': case '</calcChain>': break;
+			/* 18.6.1  c CT_CalcCell 1 */
+			case '<c': delete y[0]; if(y.i) i = y.i; else y.i = i; d.push(y); break;
+		}
+	});
+	return d;
+}
+
+function write_cc_xml(data, opts) { }
+/* [MS-XLSB] 2.6.4.1 */
+function parse_BrtCalcChainItem$(data, length) {
+	var out = {};
+	out.i = data.read_shift(4);
+	var cell = {};
+	cell.r = data.read_shift(4);
+	cell.c = data.read_shift(4);
+	out.r = encode_cell(cell);
+	var flags = data.read_shift(1);
+	if(flags & 0x2) out.l = '1';
+	if(flags & 0x8) out.a = '1';
+	return out;
+}
+
+/* 18.6 Calculation Chain */
+function parse_cc_bin(data, opts) {
+	var out = [];
+	var pass = false;
+	recordhopper(data, function hopper_cc(val, R, RT) {
+		switch(R.n) {
+			case 'BrtCalcChainItem$': out.push(val); break;
+			case 'BrtBeginCalcChain$': break;
+			case 'BrtEndCalcChain$': break;
+			default: if(!pass || opts.WTF) throw new Error("Unexpected record " + RT + " " + R.n);
+		}
+	});
+	return out;
+}
+
+function write_cc_bin(data, opts) { }
+
+function parse_comments(zip, dirComments, sheets, sheetRels, opts) {
+	for(var i = 0; i != dirComments.length; ++i) {
+		var canonicalpath=dirComments[i];
+		var comments=parse_cmnt(getzipdata(zip, canonicalpath.replace(/^\//,''), true), canonicalpath, opts);
+		if(!comments || !comments.length) continue;
+		// find the sheets targeted by these comments
+		var sheetNames = keys(sheets);
+		for(var j = 0; j != sheetNames.length; ++j) {
+			var sheetName = sheetNames[j];
+			var rels = sheetRels[sheetName];
+			if(rels) {
+				var rel = rels[canonicalpath];
+				if(rel) insertCommentsIntoSheet(sheetName, sheets[sheetName], comments);
+			}
+		}
+	}
+}
+
+function insertCommentsIntoSheet(sheetName, sheet, comments) {
+	comments.forEach(function(comment) {
+		var cell = sheet[comment.ref];
+		if (!cell) {
+			cell = {};
+			sheet[comment.ref] = cell;
+			var range = safe_decode_range(sheet["!ref"]||"BDWGO1000001:A1");
+			var thisCell = decode_cell(comment.ref);
+			if(range.s.r > thisCell.r) range.s.r = thisCell.r;
+			if(range.e.r < thisCell.r) range.e.r = thisCell.r;
+			if(range.s.c > thisCell.c) range.s.c = thisCell.c;
+			if(range.e.c < thisCell.c) range.e.c = thisCell.c;
+			var encoded = encode_range(range);
+			if (encoded !== sheet["!ref"]) sheet["!ref"] = encoded;
+		}
+
+		if (!cell.c) cell.c = [];
+		var o = {a: comment.author, t: comment.t, r: comment.r};
+		if(comment.h) o.h = comment.h;
+		cell.c.push(o);
+	});
+}
+
+/* 18.7.3 CT_Comment */
+function parse_comments_xml(data, opts) {
+	if(data.match(/<(?:\w+:)?comments *\/>/)) return [];
+	var authors = [];
+	var commentList = [];
+	data.match(/<(?:\w+:)?authors>([^\u2603]*)<\/(?:\w+:)?authors>/)[1].split(/<\/\w*:?author>/).forEach(function(x) {
+		if(x === "" || x.trim() === "") return;
+		authors.push(x.match(/<(?:\w+:)?author[^>]*>(.*)/)[1]);
+	});
+	(data.match(/<(?:\w+:)?commentList>([^\u2603]*)<\/(?:\w+:)?commentList>/)||["",""])[1].split(/<\/\w*:?comment>/).forEach(function(x, index) {
+		if(x === "" || x.trim() === "") return;
+		var y = parsexmltag(x.match(/<(?:\w+:)?comment[^>]*>/)[0]);
+		var comment = { author: y.authorId && authors[y.authorId] ? authors[y.authorId] : undefined, ref: y.ref, guid: y.guid };
+		var cell = decode_cell(y.ref);
+		if(opts.sheetRows && opts.sheetRows <= cell.r) return;
+		var textMatch = x.match(/<text>([^\u2603]*)<\/text>/);
+		if (!textMatch || !textMatch[1]) return; // a comment may contain an empty text tag.
+		var rt = parse_si(textMatch[1]);
+		comment.r = rt.r;
+		comment.t = rt.t;
+		if(opts.cellHTML) comment.h = rt.h;
+		commentList.push(comment);
+	});
+	return commentList;
+}
+
+function write_comments_xml(data, opts) { }
+/* [MS-XLSB] 2.4.28 BrtBeginComment */
+function parse_BrtBeginComment(data, length) {
+	var out = {};
+	out.iauthor = data.read_shift(4);
+	var rfx = parse_UncheckedRfX(data, 16);
+	out.rfx = rfx.s;
+	out.ref = encode_cell(rfx.s);
+	data.l += 16; /*var guid = parse_GUID(data); */
+	return out;
+}
+
+/* [MS-XLSB] 2.4.324 BrtCommentAuthor */
+var parse_BrtCommentAuthor = parse_XLWideString;
+
+/* [MS-XLSB] 2.4.325 BrtCommentText */
+var parse_BrtCommentText = parse_RichStr;
+
+/* [MS-XLSB] 2.1.7.8 Comments */
+function parse_comments_bin(data, opts) {
+	var out = [];
+	var authors = [];
+	var c = {};
+	var pass = false;
+	recordhopper(data, function hopper_cmnt(val, R, RT) {
+		switch(R.n) {
+			case 'BrtCommentAuthor': authors.push(val); break;
+			case 'BrtBeginComment': c = val; break;
+			case 'BrtCommentText': c.t = val.t; c.h = val.h; c.r = val.r; break;
+			case 'BrtEndComment':
+				c.author = authors[c.iauthor];
+				delete c.iauthor;
+				if(opts.sheetRows && opts.sheetRows <= c.rfx.r) break;
+				delete c.rfx; out.push(c); break;
+			case 'BrtBeginComments': break;
+			case 'BrtEndComments': break;
+			case 'BrtBeginCommentAuthors': break;
+			case 'BrtEndCommentAuthors': break;
+			case 'BrtBeginCommentList': break;
+			case 'BrtEndCommentList': break;
+			default: if(!pass || opts.WTF) throw new Error("Unexpected record " + RT + " " + R.n);
+		}
+	});
+	return out;
+}
+
+function write_comments_bin(data, opts) { }
+/* TODO: it will be useful to parse the function str */
+var rc_to_a1 = (function(){
+	var rcregex = /(^|[^A-Za-z])R(\[?)(-?\d+|)\]?C(\[?)(-?\d+|)\]?/g;
+	var rcbase;
+	function rcfunc($$,$1,$2,$3,$4,$5) {
+		var R = $3.length>0?parseInt($3,10)|0:0, C = $5.length>0?parseInt($5,10)|0:0;
+		if(C<0 && $4.length === 0) C=0;
+		if($4.length > 0) C += rcbase.c;
+		if($2.length > 0) R += rcbase.r;
+		return $1 + encode_col(C) + encode_row(R);
+	}
+	return function rc_to_a1(fstr, base) {
+		rcbase = base;
+		return fstr.replace(rcregex, rcfunc);
+	};
+})();
+
+/* --- formula references point to MS-XLS --- */
+/* Small helpers */
+function parseread(l) { return function(blob, length) { blob.l+=l; return; }; }
+function parseread1(blob, length) { blob.l+=1; return; }
+
+/* Rgce Helpers */
+
+/* 2.5.51 */
+function parse_ColRelU(blob, length) {
+	var c = blob.read_shift(2);
+	return [c & 0x3FFF, (c >> 14) & 1, (c >> 15) & 1];
+}
+
+/* 2.5.198.105 */
+function parse_RgceArea(blob, length) {
+	var r=blob.read_shift(2), R=blob.read_shift(2);
+	var c=parse_ColRelU(blob, 2);
+	var C=parse_ColRelU(blob, 2);
+	return { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} };
+}
+
+/* 2.5.198.105 TODO */
+function parse_RgceAreaRel(blob, length) {
+	var r=blob.read_shift(2), R=blob.read_shift(2);
+	var c=parse_ColRelU(blob, 2);
+	var C=parse_ColRelU(blob, 2);
+	return { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} };
+}
+
+/* 2.5.198.109 */
+function parse_RgceLoc(blob, length) {
+	var r = blob.read_shift(2);
+	var c = parse_ColRelU(blob, 2);
+	return {r:r, c:c[0], cRel:c[1], rRel:c[2]};
+}
+
+/* 2.5.198.111 */
+function parse_RgceLocRel(blob, length) {
+	var r = blob.read_shift(2);
+	var cl = blob.read_shift(2);
+	var cRel = (cl & 0x8000) >> 15, rRel = (cl & 0x4000) >> 14;
+	cl &= 0x3FFF;
+	if(cRel !== 0) while(cl >= 0x100) cl -= 0x100;
+	return {r:r,c:cl,cRel:cRel,rRel:rRel};
+}
+
+/* Ptg Tokens */
+
+/* 2.5.198.27 */
+function parse_PtgArea(blob, length) {
+	var type = (blob[blob.l++] & 0x60) >> 5;
+	var area = parse_RgceArea(blob, 8);
+	return [type, area];
+}
+
+/* 2.5.198.28 */
+function parse_PtgArea3d(blob, length) {
+	var type = (blob[blob.l++] & 0x60) >> 5;
+	var ixti = blob.read_shift(2);
+	var area = parse_RgceArea(blob, 8);
+	return [type, ixti, area];
+}
+
+/* 2.5.198.29 */
+function parse_PtgAreaErr(blob, length) {
+	var type = (blob[blob.l++] & 0x60) >> 5;
+	blob.l += 8;
+	return [type];
+}
+/* 2.5.198.30 */
+function parse_PtgAreaErr3d(blob, length) {
+	var type = (blob[blob.l++] & 0x60) >> 5;
+	var ixti = blob.read_shift(2);
+	blob.l += 8;
+	return [type, ixti];
+}
+
+/* 2.5.198.31 */
+function parse_PtgAreaN(blob, length) {
+	var type = (blob[blob.l++] & 0x60) >> 5;
+	var area = parse_RgceAreaRel(blob, 8);
+	return [type, area];
+}
+
+/* 2.5.198.32 -- ignore this and look in PtgExtraArray for shape + values */
+function parse_PtgArray(blob, length) {
+	var type = (blob[blob.l++] & 0x60) >> 5;
+	blob.l += 7;
+	return [type];
+}
+
+/* 2.5.198.33 */
+function parse_PtgAttrBaxcel(blob, length) {
+	var bitSemi = blob[blob.l+1] & 0x01; /* 1 = volatile */
+	var bitBaxcel = 1;
+	blob.l += 4;
+	return [bitSemi, bitBaxcel];
+}
+
+/* 2.5.198.34 */
+function parse_PtgAttrChoose(blob, length) {
+	blob.l +=2;
+	var offset = blob.read_shift(2);
+	var o = [];
+	/* offset is 1 less than the number of elements */
+	for(var i = 0; i <= offset; ++i) o.push(blob.read_shift(2));
+	return o;
+}
+
+/* 2.5.198.35 */
+function parse_PtgAttrGoto(blob, length) {
+	var bitGoto = (blob[blob.l+1] & 0xFF) ? 1 : 0;
+	blob.l += 2;
+	return [bitGoto, blob.read_shift(2)];
+}
+
+/* 2.5.198.36 */
+function parse_PtgAttrIf(blob, length) {
+	var bitIf = (blob[blob.l+1] & 0xFF) ? 1 : 0;
+	blob.l += 2;
+	return [bitIf, blob.read_shift(2)];
+}
+
+/* 2.5.198.37 */
+function parse_PtgAttrSemi(blob, length) {
+	var bitSemi = (blob[blob.l+1] & 0xFF) ? 1 : 0;
+	blob.l += 4;
+	return [bitSemi];
+}
+
+/* 2.5.198.40 (used by PtgAttrSpace and PtgAttrSpaceSemi) */
+function parse_PtgAttrSpaceType(blob, length) {
+	var type = blob.read_shift(1), cch = blob.read_shift(1);
+	return [type, cch];
+}
+
+/* 2.5.198.38 */
+function parse_PtgAttrSpace(blob, length) {
+	blob.read_shift(2);
+	return parse_PtgAttrSpaceType(blob, 2);
+}
+
+/* 2.5.198.39 */
+function parse_PtgAttrSpaceSemi(blob, length) {
+	blob.read_shift(2);
+	return parse_PtgAttrSpaceType(blob, 2);
+}
+
+/* 2.5.198.84 TODO */
+function parse_PtgRef(blob, length) {
+	var ptg = blob[blob.l] & 0x1F;
+	var type = (blob[blob.l] & 0x60)>>5;
+	blob.l += 1;
+	var loc = parse_RgceLoc(blob,4);
+	return [type, loc];
+}
+
+/* 2.5.198.88 TODO */
+function parse_PtgRefN(blob, length) {
+	var ptg = blob[blob.l] & 0x1F;
+	var type = (blob[blob.l] & 0x60)>>5;
+	blob.l += 1;
+	var loc = parse_RgceLocRel(blob,4);
+	return [type, loc];
+}
+
+/* 2.5.198.85 TODO */
+function parse_PtgRef3d(blob, length) {
+	var ptg = blob[blob.l] & 0x1F;
+	var type = (blob[blob.l] & 0x60)>>5;
+	blob.l += 1;
+	var ixti = blob.read_shift(2); // XtiIndex
+	var loc = parse_RgceLoc(blob,4);
+	return [type, ixti, loc];
+}
+
+
+/* 2.5.198.62 TODO */
+function parse_PtgFunc(blob, length) {
+	var ptg = blob[blob.l] & 0x1F;
+	var type = (blob[blob.l] & 0x60)>>5;
+	blob.l += 1;
+	var iftab = blob.read_shift(2);
+	return [FtabArgc[iftab], Ftab[iftab]];
+}
+/* 2.5.198.63 TODO */
+function parse_PtgFuncVar(blob, length) {
+	blob.l++;
+	var cparams = blob.read_shift(1), tab = parsetab(blob);
+	return [cparams, (tab[0] === 0 ? Ftab : Cetab)[tab[1]]];
+}
+
+function parsetab(blob, length) {
+	return [blob[blob.l+1]>>7, blob.read_shift(2) & 0x7FFF];
+}
+
+/* 2.5.198.41 */
+var parse_PtgAttrSum = parseread(4);
+/* 2.5.198.43 */
+var parse_PtgConcat = parseread1;
+
+/* 2.5.198.58 */
+function parse_PtgExp(blob, length) {
+	blob.l++;
+	var row = blob.read_shift(2);
+	var col = blob.read_shift(2);
+	return [row, col];
+}
+
+/* 2.5.198.57 */
+function parse_PtgErr(blob, length) { blob.l++; return BErr[blob.read_shift(1)]; }
+
+/* 2.5.198.66 TODO */
+function parse_PtgInt(blob, length) { blob.l++; return blob.read_shift(2); }
+
+/* 2.5.198.42 */
+function parse_PtgBool(blob, length) { blob.l++; return blob.read_shift(1)!==0;}
+
+/* 2.5.198.79 */
+function parse_PtgNum(blob, length) { blob.l++; return parse_Xnum(blob, 8); }
+
+/* 2.5.198.89 */
+function parse_PtgStr(blob, length) { blob.l++; return parse_ShortXLUnicodeString(blob); }
+
+/* 2.5.192.112 + 2.5.192.11{3,4,5,6,7} */
+function parse_SerAr(blob) {
+	var val = [];
+	switch((val[0] = blob.read_shift(1))) {
+		/* 2.5.192.113 */
+		case 0x04: /* SerBool -- boolean */
+			val[1] = parsebool(blob, 1) ? 'TRUE' : 'FALSE';
+			blob.l += 7; break;
+		/* 2.5.192.114 */
+		case 0x10: /* SerErr -- error */
+			val[1] = BErr[blob[blob.l]];
+			blob.l += 8; break;
+		/* 2.5.192.115 */
+		case 0x00: /* SerNil -- honestly, I'm not sure how to reproduce this */
+			blob.l += 8; break;
+		/* 2.5.192.116 */
+		case 0x01: /* SerNum -- Xnum */
+			val[1] = parse_Xnum(blob, 8); break;
+		/* 2.5.192.117 */
+		case 0x02: /* SerStr -- XLUnicodeString (<256 chars) */
+			val[1] = parse_XLUnicodeString(blob); break;
+		// default: throw "Bad SerAr: " + val[0]; /* Unreachable */
+	}
+	return val;
+}
+
+/* 2.5.198.61 */
+function parse_PtgExtraMem(blob, cce) {
+	var count = blob.read_shift(2);
+	var out = [];
+	for(var i = 0; i != count; ++i) out.push(parse_Ref8U(blob, 8));
+	return out;
+}
+
+/* 2.5.198.59 */
+function parse_PtgExtraArray(blob) {
+	var cols = 1 + blob.read_shift(1); //DColByteU
+	var rows = 1 + blob.read_shift(2); //DRw
+	for(var i = 0, o=[]; i != rows && (o[i] = []); ++i)
+		for(var j = 0; j != cols; ++j) o[i][j] = parse_SerAr(blob);
+	return o;
+}
+
+/* 2.5.198.76 */
+function parse_PtgName(blob, length) {
+	var type = (blob.read_shift(1) >>> 5) & 0x03;
+	var nameindex = blob.read_shift(4);
+	return [type, 0, nameindex];
+}
+
+/* 2.5.198.77 */
+function parse_PtgNameX(blob, length) {
+	var type = (blob.read_shift(1) >>> 5) & 0x03;
+	var ixti = blob.read_shift(2); // XtiIndex
+	var nameindex = blob.read_shift(4);
+	return [type, ixti, nameindex];
+}
+
+/* 2.5.198.70 */
+function parse_PtgMemArea(blob, length) {
+	var type = (blob.read_shift(1) >>> 5) & 0x03;
+	blob.l += 4;
+	var cce = blob.read_shift(2);
+	return [type, cce];
+}
+
+/* 2.5.198.72 */
+function parse_PtgMemFunc(blob, length) {
+	var type = (blob.read_shift(1) >>> 5) & 0x03;
+	var cce = blob.read_shift(2);
+	return [type, cce];
+}
+
+
+/* 2.5.198.86 */
+function parse_PtgRefErr(blob, length) {
+	var type = (blob.read_shift(1) >>> 5) & 0x03;
+	blob.l += 4;
+	return [type];
+}
+
+/* 2.5.198.26 */
+var parse_PtgAdd = parseread1;
+/* 2.5.198.45 */
+var parse_PtgDiv = parseread1;
+/* 2.5.198.56 */
+var parse_PtgEq = parseread1;
+/* 2.5.198.64 */
+var parse_PtgGe = parseread1;
+/* 2.5.198.65 */
+var parse_PtgGt = parseread1;
+/* 2.5.198.67 */
+var parse_PtgIsect = parseread1;
+/* 2.5.198.68 */
+var parse_PtgLe = parseread1;
+/* 2.5.198.69 */
+var parse_PtgLt = parseread1;
+/* 2.5.198.74 */
+var parse_PtgMissArg = parseread1;
+/* 2.5.198.75 */
+var parse_PtgMul = parseread1;
+/* 2.5.198.78 */
+var parse_PtgNe = parseread1;
+/* 2.5.198.80 */
+var parse_PtgParen = parseread1;
+/* 2.5.198.81 */
+var parse_PtgPercent = parseread1;
+/* 2.5.198.82 */
+var parse_PtgPower = parseread1;
+/* 2.5.198.83 */
+var parse_PtgRange = parseread1;
+/* 2.5.198.90 */
+var parse_PtgSub = parseread1;
+/* 2.5.198.93 */
+var parse_PtgUminus = parseread1;
+/* 2.5.198.94 */
+var parse_PtgUnion = parseread1;
+/* 2.5.198.95 */
+var parse_PtgUplus = parseread1;
+
+/* 2.5.198.71 */
+var parse_PtgMemErr = parsenoop;
+/* 2.5.198.73 */
+var parse_PtgMemNoMem = parsenoop;
+/* 2.5.198.87 */
+var parse_PtgRefErr3d = parsenoop;
+/* 2.5.198.92 */
+var parse_PtgTbl = parsenoop;
+
+/* 2.5.198.25 */
+var PtgTypes = {
+	0x01: { n:'PtgExp', f:parse_PtgExp },
+	0x02: { n:'PtgTbl', f:parse_PtgTbl },
+	0x03: { n:'PtgAdd', f:parse_PtgAdd },
+	0x04: { n:'PtgSub', f:parse_PtgSub },
+	0x05: { n:'PtgMul', f:parse_PtgMul },
+	0x06: { n:'PtgDiv', f:parse_PtgDiv },
+	0x07: { n:'PtgPower', f:parse_PtgPower },
+	0x08: { n:'PtgConcat', f:parse_PtgConcat },
+	0x09: { n:'PtgLt', f:parse_PtgLt },
+	0x0A: { n:'PtgLe', f:parse_PtgLe },
+	0x0B: { n:'PtgEq', f:parse_PtgEq },
+	0x0C: { n:'PtgGe', f:parse_PtgGe },
+	0x0D: { n:'PtgGt', f:parse_PtgGt },
+	0x0E: { n:'PtgNe', f:parse_PtgNe },
+	0x0F: { n:'PtgIsect', f:parse_PtgIsect },
+	0x10: { n:'PtgUnion', f:parse_PtgUnion },
+	0x11: { n:'PtgRange', f:parse_PtgRange },
+	0x12: { n:'PtgUplus', f:parse_PtgUplus },
+	0x13: { n:'PtgUminus', f:parse_PtgUminus },
+	0x14: { n:'PtgPercent', f:parse_PtgPercent },
+	0x15: { n:'PtgParen', f:parse_PtgParen },
+	0x16: { n:'PtgMissArg', f:parse_PtgMissArg },
+	0x17: { n:'PtgStr', f:parse_PtgStr },
+	0x1C: { n:'PtgErr', f:parse_PtgErr },
+	0x1D: { n:'PtgBool', f:parse_PtgBool },
+	0x1E: { n:'PtgInt', f:parse_PtgInt },
+	0x1F: { n:'PtgNum', f:parse_PtgNum },
+	0x20: { n:'PtgArray', f:parse_PtgArray },
+	0x21: { n:'PtgFunc', f:parse_PtgFunc },
+	0x22: { n:'PtgFuncVar', f:parse_PtgFuncVar },
+	0x23: { n:'PtgName', f:parse_PtgName },
+	0x24: { n:'PtgRef', f:parse_PtgRef },
+	0x25: { n:'PtgArea', f:parse_PtgArea },
+	0x26: { n:'PtgMemArea', f:parse_PtgMemArea },
+	0x27: { n:'PtgMemErr', f:parse_PtgMemErr },
+	0x28: { n:'PtgMemNoMem', f:parse_PtgMemNoMem },
+	0x29: { n:'PtgMemFunc', f:parse_PtgMemFunc },
+	0x2A: { n:'PtgRefErr', f:parse_PtgRefErr },
+	0x2B: { n:'PtgAreaErr', f:parse_PtgAreaErr },
+	0x2C: { n:'PtgRefN', f:parse_PtgRefN },
+	0x2D: { n:'PtgAreaN', f:parse_PtgAreaN },
+	0x39: { n:'PtgNameX', f:parse_PtgNameX },
+	0x3A: { n:'PtgRef3d', f:parse_PtgRef3d },
+	0x3B: { n:'PtgArea3d', f:parse_PtgArea3d },
+	0x3C: { n:'PtgRefErr3d', f:parse_PtgRefErr3d },
+	0x3D: { n:'PtgAreaErr3d', f:parse_PtgAreaErr3d },
+	0xFF: {}
+};
+/* These are duplicated in the PtgTypes table */
+var PtgDupes = {
+	0x40: 0x20, 0x60: 0x20,
+	0x41: 0x21, 0x61: 0x21,
+	0x42: 0x22, 0x62: 0x22,
+	0x43: 0x23, 0x63: 0x23,
+	0x44: 0x24, 0x64: 0x24,
+	0x45: 0x25, 0x65: 0x25,
+	0x46: 0x26, 0x66: 0x26,
+	0x47: 0x27, 0x67: 0x27,
+	0x48: 0x28, 0x68: 0x28,
+	0x49: 0x29, 0x69: 0x29,
+	0x4A: 0x2A, 0x6A: 0x2A,
+	0x4B: 0x2B, 0x6B: 0x2B,
+	0x4C: 0x2C, 0x6C: 0x2C,
+	0x4D: 0x2D, 0x6D: 0x2D,
+	0x59: 0x39, 0x79: 0x39,
+	0x5A: 0x3A, 0x7A: 0x3A,
+	0x5B: 0x3B, 0x7B: 0x3B,
+	0x5C: 0x3C, 0x7C: 0x3C,
+	0x5D: 0x3D, 0x7D: 0x3D
+};
+(function(){for(var y in PtgDupes) PtgTypes[y] = PtgTypes[PtgDupes[y]];})();
+
+var Ptg18 = {};
+var Ptg19 = {
+	0x01: { n:'PtgAttrSemi', f:parse_PtgAttrSemi },
+	0x02: { n:'PtgAttrIf', f:parse_PtgAttrIf },
+	0x04: { n:'PtgAttrChoose', f:parse_PtgAttrChoose },
+	0x08: { n:'PtgAttrGoto', f:parse_PtgAttrGoto },
+	0x10: { n:'PtgAttrSum', f:parse_PtgAttrSum },
+	0x20: { n:'PtgAttrBaxcel', f:parse_PtgAttrBaxcel },
+	0x40: { n:'PtgAttrSpace', f:parse_PtgAttrSpace },
+	0x41: { n:'PtgAttrSpaceSemi', f:parse_PtgAttrSpaceSemi },
+	0xFF: {}
+};
+
+/* 2.4.127 TODO */
+function parse_Formula(blob, length, opts) {
+	var cell = parse_XLSCell(blob, 6);
+	var val = parse_FormulaValue(blob,8);
+	var flags = blob.read_shift(1);
+	blob.read_shift(1);
+	var chn = blob.read_shift(4);
+	var cbf = "";
+	if(opts.biff === 5) blob.l += length-20;
+	else cbf = parse_XLSCellParsedFormula(blob, length-20, opts);
+	return {cell:cell, val:val[0], formula:cbf, shared: (flags >> 3) & 1, tt:val[1]};
+}
+
+/* 2.5.133 TODO: how to emit empty strings? */
+function parse_FormulaValue(blob) {
+	var b;
+	if(__readUInt16LE(blob,blob.l + 6) !== 0xFFFF) return [parse_Xnum(blob),'n'];
+	switch(blob[blob.l]) {
+		case 0x00: blob.l += 8; return ["String", 's'];
+		case 0x01: b = blob[blob.l+2] === 0x1; blob.l += 8; return [b,'b'];
+		case 0x02: b = blob[blob.l+2]; blob.l += 8; return [b,'e'];
+		case 0x03: blob.l += 8; return ["",'s'];
+	}
+}
+
+/* 2.5.198.103 */
+function parse_RgbExtra(blob, length, rgce, opts) {
+	if(opts.biff < 8) return parsenoop(blob, length);
+	var target = blob.l + length;
+	var o = [];
+	for(var i = 0; i !== rgce.length; ++i) {
+		switch(rgce[i][0]) {
+			case 'PtgArray': /* PtgArray -> PtgExtraArray */
+				rgce[i][1] = parse_PtgExtraArray(blob);
+				o.push(rgce[i][1]);
+				break;
+			case 'PtgMemArea': /* PtgMemArea -> PtgExtraMem */
+				rgce[i][2] = parse_PtgExtraMem(blob, rgce[i][1]);
+				o.push(rgce[i][2]);
+				break;
+			default: break;
+		}
+	}
+	length = target - blob.l;
+	if(length !== 0) o.push(parsenoop(blob, length));
+	return o;
+}
+
+/* 2.5.198.21 */
+function parse_NameParsedFormula(blob, length, opts, cce) {
+	var target = blob.l + length;
+	var rgce = parse_Rgce(blob, cce);
+	var rgcb;
+	if(target !== blob.l) rgcb = parse_RgbExtra(blob, target - blob.l, rgce, opts);
+	return [rgce, rgcb];
+}
+
+/* 2.5.198.3 TODO */
+function parse_XLSCellParsedFormula(blob, length, opts) {
+	var target = blob.l + length;
+	var rgcb, cce = blob.read_shift(2); // length of rgce
+	if(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];
+	var rgce = parse_Rgce(blob, cce);
+	if(length !== cce + 2) rgcb = parse_RgbExtra(blob, length - cce - 2, rgce, opts);
+	return [rgce, rgcb];
+}
+
+/* 2.5.198.118 TODO */
+function parse_SharedParsedFormula(blob, length, opts) {
+	var target = blob.l + length;
+	var rgcb, cce = blob.read_shift(2); // length of rgce
+	var rgce = parse_Rgce(blob, cce);
+	if(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];
+	if(length !== cce + 2) rgcb = parse_RgbExtra(blob, target - cce - 2, rgce, opts);
+	return [rgce, rgcb];
+}
+
+/* 2.5.198.1 TODO */
+function parse_ArrayParsedFormula(blob, length, opts, ref) {
+	var target = blob.l + length;
+	var rgcb, cce = blob.read_shift(2); // length of rgce
+	if(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];
+	var rgce = parse_Rgce(blob, cce);
+	if(length !== cce + 2) rgcb = parse_RgbExtra(blob, target - cce - 2, rgce, opts);
+	return [rgce, rgcb];
+}
+
+/* 2.5.198.104 */
+function parse_Rgce(blob, length) {
+	var target = blob.l + length;
+	var R, id, ptgs = [];
+	while(target != blob.l) {
+		length = target - blob.l;
+		id = blob[blob.l];
+		R = PtgTypes[id];
+		//console.log("ptg", id, R)
+		if(id === 0x18 || id === 0x19) {
+			id = blob[blob.l + 1];
+			R = (id === 0x18 ? Ptg18 : Ptg19)[id];
+		}
+		if(!R || !R.f) { ptgs.push(parsenoop(blob, length)); }
+		else { ptgs.push([R.n, R.f(blob, length)]); }
+	}
+	return ptgs;
+}
+
+function mapper(x) { return x.map(function f2(y) { return y[1];}).join(",");}
+
+/* 2.2.2 + Magic TODO */
+function stringify_formula(formula, range, cell, supbooks, opts) {
+	if(opts !== undefined && opts.biff === 5) return "BIFF5??";
+	var _range = range !== undefined ? range : {s:{c:0, r:0}};
+	var stack = [], e1, e2, type, c, ixti, nameidx, r;
+	if(!formula[0] || !formula[0][0]) return "";
+	//console.log("--",cell,formula[0])
+	for(var ff = 0, fflen = formula[0].length; ff < fflen; ++ff) {
+		var f = formula[0][ff];
+		//console.log("++",f, stack)
+		switch(f[0]) {
+		/* 2.2.2.1 Unary Operator Tokens */
+			/* 2.5.198.93 */
+			case 'PtgUminus': stack.push("-" + stack.pop()); break;
+			/* 2.5.198.95 */
+			case 'PtgUplus': stack.push("+" + stack.pop()); break;
+			/* 2.5.198.81 */
+			case 'PtgPercent': stack.push(stack.pop() + "%"); break;
+
+		/* 2.2.2.1 Binary Value Operator Token */
+			/* 2.5.198.26 */
+			case 'PtgAdd':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+"+"+e1);
+				break;
+			/* 2.5.198.90 */
+			case 'PtgSub':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+"-"+e1);
+				break;
+			/* 2.5.198.75 */
+			case 'PtgMul':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+"*"+e1);
+				break;
+			/* 2.5.198.45 */
+			case 'PtgDiv':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+"/"+e1);
+				break;
+			/* 2.5.198.82 */
+			case 'PtgPower':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+"^"+e1);
+				break;
+			/* 2.5.198.43 */
+			case 'PtgConcat':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+"&"+e1);
+				break;
+			/* 2.5.198.69 */
+			case 'PtgLt':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+"<"+e1);
+				break;
+			/* 2.5.198.68 */
+			case 'PtgLe':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+"<="+e1);
+				break;
+			/* 2.5.198.56 */
+			case 'PtgEq':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+"="+e1);
+				break;
+			/* 2.5.198.64 */
+			case 'PtgGe':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+">="+e1);
+				break;
+			/* 2.5.198.65 */
+			case 'PtgGt':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+">"+e1);
+				break;
+			/* 2.5.198.78 */
+			case 'PtgNe':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+"<>"+e1);
+				break;
+
+		/* 2.2.2.1 Binary Reference Operator Token */
+			/* 2.5.198.67 */
+			case 'PtgIsect':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+" "+e1);
+				break;
+			case 'PtgUnion':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+","+e1);
+				break;
+			case 'PtgRange': break;
+
+		/* 2.2.2.3 Control Tokens "can be ignored" */
+			/* 2.5.198.34 */
+			case 'PtgAttrChoose': break;
+			/* 2.5.198.35 */
+			case 'PtgAttrGoto': break;
+			/* 2.5.198.36 */
+			case 'PtgAttrIf': break;
+
+
+			/* 2.5.198.84 */
+			case 'PtgRef':
+				type = f[1][0]; c = shift_cell_xls(decode_cell(encode_cell(f[1][1])), _range);
+				stack.push(encode_cell(c));
+				break;
+			/* 2.5.198.88 */
+			case 'PtgRefN':
+				type = f[1][0]; c = shift_cell_xls(decode_cell(encode_cell(f[1][1])), cell);
+				stack.push(encode_cell(c));
+				break;
+			case 'PtgRef3d': // TODO: lots of stuff
+				type = f[1][0]; ixti = f[1][1]; c = shift_cell_xls(f[1][2], _range);
+				stack.push(supbooks[1][ixti+1]+"!"+encode_cell(c));
+				break;
+
+		/* Function Call */
+			/* 2.5.198.62 */
+			case 'PtgFunc':
+			/* 2.5.198.63 */
+			case 'PtgFuncVar':
+				/* f[1] = [argc, func] */
+				var argc = f[1][0], func = f[1][1];
+				if(!argc) argc = 0;
+				var args = stack.slice(-argc);
+				stack.length -= argc;
+				if(func === 'User') func = args.shift();
+				stack.push(func + "(" + args.join(",") + ")");
+				break;
+
+			/* 2.5.198.42 */
+			case 'PtgBool': stack.push(f[1] ? "TRUE" : "FALSE"); break;
+			/* 2.5.198.66 */
+			case 'PtgInt': stack.push(f[1]); break;
+			/* 2.5.198.79 TODO: precision? */
+			case 'PtgNum': stack.push(String(f[1])); break;
+			/* 2.5.198.89 */
+			case 'PtgStr': stack.push('"' + f[1] + '"'); break;
+			/* 2.5.198.57 */
+			case 'PtgErr': stack.push(f[1]); break;
+			/* 2.5.198.27 TODO: fixed points */
+			case 'PtgArea':
+				type = f[1][0]; r = shift_range_xls(f[1][1], _range);
+				stack.push(encode_range(r));
+				break;
+			/* 2.5.198.28 */
+			case 'PtgArea3d': // TODO: lots of stuff
+				type = f[1][0]; ixti = f[1][1]; r = f[1][2];
+				stack.push(supbooks[1][ixti+1]+"!"+encode_range(r));
+				break;
+			/* 2.5.198.41 */
+			case 'PtgAttrSum':
+				stack.push("SUM(" + stack.pop() + ")");
+				break;
+
+		/* Expression Prefixes */
+			/* 2.5.198.37 */
+			case 'PtgAttrSemi': break;
+
+			/* 2.5.97.60 TODO: do something different for revisions */
+			case 'PtgName':
+				/* f[1] = type, 0, nameindex */
+				nameidx = f[1][2];
+				var lbl = supbooks[0][nameidx];
+				var name = lbl.Name;
+				if(name in XLSXFutureFunctions) name = XLSXFutureFunctions[name];
+				stack.push(name);
+				break;
+
+			/* 2.5.97.61 TODO: do something different for revisions */
+			case 'PtgNameX':
+				/* f[1] = type, ixti, nameindex */
+				var bookidx = f[1][1]; nameidx = f[1][2]; var externbook;
+				/* TODO: Properly handle missing values */
+				if(supbooks[bookidx+1]) externbook = supbooks[bookidx+1][nameidx];
+				else if(supbooks[bookidx-1]) externbook = supbooks[bookidx-1][nameidx];
+				if(!externbook) externbook = {body: "??NAMEX??"};
+				stack.push(externbook.body);
+				break;
+
+		/* 2.2.2.4 Display Tokens */
+			/* 2.5.198.80 */
+			case 'PtgParen': stack.push('(' + stack.pop() + ')'); break;
+
+			/* 2.5.198.86 */
+			case 'PtgRefErr': stack.push('#REF!'); break;
+
+		/* */
+			/* 2.5.198.58 TODO */
+			case 'PtgExp':
+				c = {c:f[1][1],r:f[1][0]};
+				var q = {c: cell.c, r:cell.r};
+				if(supbooks.sharedf[encode_cell(c)]) {
+					var parsedf = (supbooks.sharedf[encode_cell(c)]);
+					stack.push(stringify_formula(parsedf, _range, q, supbooks, opts));
+				}
+				else {
+					var fnd = false;
+					for(e1=0;e1!=supbooks.arrayf.length; ++e1) {
+						/* TODO: should be something like range_has */
+						e2 = supbooks.arrayf[e1];
+						if(c.c < e2[0].s.c || c.c > e2[0].e.c) continue;
+						if(c.r < e2[0].s.r || c.r > e2[0].e.r) continue;
+						stack.push(stringify_formula(e2[1], _range, q, supbooks, opts));
+					}
+					if(!fnd) stack.push(f[1]);
+				}
+				break;
+
+			/* 2.5.198.32 TODO */
+			case 'PtgArray':
+				stack.push("{" + f[1].map(mapper).join(";") + "}");
+				break;
+
+		/* 2.2.2.5 Mem Tokens */
+			/* 2.5.198.70 TODO: confirm this is a non-display */
+			case 'PtgMemArea':
+				//stack.push("(" + f[2].map(encode_range).join(",") + ")");
+				break;
+
+			/* 2.5.198.38 TODO */
+			case 'PtgAttrSpace': break;
+
+			/* 2.5.198.92 TODO */
+			case 'PtgTbl': break;
+
+			/* 2.5.198.71 */
+			case 'PtgMemErr': break;
+
+			/* 2.5.198.74 */
+			case 'PtgMissArg':
+				stack.push("");
+				break;
+
+			/* 2.5.198.29 TODO */
+			case 'PtgAreaErr': break;
+
+			/* 2.5.198.31 TODO */
+			case 'PtgAreaN': stack.push(""); break;
+
+			/* 2.5.198.87 TODO */
+			case 'PtgRefErr3d': break;
+
+			/* 2.5.198.72 TODO */
+			case 'PtgMemFunc': break;
+
+			default: throw 'Unrecognized Formula Token: ' + f;
+		}
+		//console.log("::",f, stack)
+	}
+	//console.log("--",stack);
+	return stack[0];
+}
+
+/* [MS-XLSB] 2.5.97.4 CellParsedFormula TODO: use similar logic to js-xls */
+function parse_XLSBCellParsedFormula(data, length) {
+	var cce = data.read_shift(4);
+	return parsenoop(data, length-4);
+}
+/* [MS-XLS] 2.5.198.44 */
+var PtgDataType = {
+	0x1: "REFERENCE", // reference to range
+	0x2: "VALUE", // single value
+	0x3: "ARRAY" // array of values
+};
+
+/* [MS-XLS] 2.5.198.4 */
+var Cetab = {
+	0x0000: 'BEEP',
+	0x0001: 'OPEN',
+	0x0002: 'OPEN.LINKS',
+	0x0003: 'CLOSE.ALL',
+	0x0004: 'SAVE',
+	0x0005: 'SAVE.AS',
+	0x0006: 'FILE.DELETE',
+	0x0007: 'PAGE.SETUP',
+	0x0008: 'PRINT',
+	0x0009: 'PRINTER.SETUP',
+	0x000A: 'QUIT',
+	0x000B: 'NEW.WINDOW',
+	0x000C: 'ARRANGE.ALL',
+	0x000D: 'WINDOW.SIZE',
+	0x000E: 'WINDOW.MOVE',
+	0x000F: 'FULL',
+	0x0010: 'CLOSE',
+	0x0011: 'RUN',
+	0x0016: 'SET.PRINT.AREA',
+	0x0017: 'SET.PRINT.TITLES',
+	0x0018: 'SET.PAGE.BREAK',
+	0x0019: 'REMOVE.PAGE.BREAK',
+	0x001A: 'FONT',
+	0x001B: 'DISPLAY',
+	0x001C: 'PROTECT.DOCUMENT',
+	0x001D: 'PRECISION',
+	0x001E: 'A1.R1C1',
+	0x001F: 'CALCULATE.NOW',
+	0x0020: 'CALCULATION',
+	0x0022: 'DATA.FIND',
+	0x0023: 'EXTRACT',
+	0x0024: 'DATA.DELETE',
+	0x0025: 'SET.DATABASE',
+	0x0026: 'SET.CRITERIA',
+	0x0027: 'SORT',
+	0x0028: 'DATA.SERIES',
+	0x0029: 'TABLE',
+	0x002A: 'FORMAT.NUMBER',
+	0x002B: 'ALIGNMENT',
+	0x002C: 'STYLE',
+	0x002D: 'BORDER',
+	0x002E: 'CELL.PROTECTION',
+	0x002F: 'COLUMN.WIDTH',
+	0x0030: 'UNDO',
+	0x0031: 'CUT',
+	0x0032: 'COPY',
+	0x0033: 'PASTE',
+	0x0034: 'CLEAR',
+	0x0035: 'PASTE.SPECIAL',
+	0x0036: 'EDIT.DELETE',
+	0x0037: 'INSERT',
+	0x0038: 'FILL.RIGHT',
+	0x0039: 'FILL.DOWN',
+	0x003D: 'DEFINE.NAME',
+	0x003E: 'CREATE.NAMES',
+	0x003F: 'FORMULA.GOTO',
+	0x0040: 'FORMULA.FIND',
+	0x0041: 'SELECT.LAST.CELL',
+	0x0042: 'SHOW.ACTIVE.CELL',
+	0x0043: 'GALLERY.AREA',
+	0x0044: 'GALLERY.BAR',
+	0x0045: 'GALLERY.COLUMN',
+	0x0046: 'GALLERY.LINE',
+	0x0047: 'GALLERY.PIE',
+	0x0048: 'GALLERY.SCATTER',
+	0x0049: 'COMBINATION',
+	0x004A: 'PREFERRED',
+	0x004B: 'ADD.OVERLAY',
+	0x004C: 'GRIDLINES',
+	0x004D: 'SET.PREFERRED',
+	0x004E: 'AXES',
+	0x004F: 'LEGEND',
+	0x0050: 'ATTACH.TEXT',
+	0x0051: 'ADD.ARROW',
+	0x0052: 'SELECT.CHART',
+	0x0053: 'SELECT.PLOT.AREA',
+	0x0054: 'PATTERNS',
+	0x0055: 'MAIN.CHART',
+	0x0056: 'OVERLAY',
+	0x0057: 'SCALE',
+	0x0058: 'FORMAT.LEGEND',
+	0x0059: 'FORMAT.TEXT',
+	0x005A: 'EDIT.REPEAT',
+	0x005B: 'PARSE',
+	0x005C: 'JUSTIFY',
+	0x005D: 'HIDE',
+	0x005E: 'UNHIDE',
+	0x005F: 'WORKSPACE',
+	0x0060: 'FORMULA',
+	0x0061: 'FORMULA.FILL',
+	0x0062: 'FORMULA.ARRAY',
+	0x0063: 'DATA.FIND.NEXT',
+	0x0064: 'DATA.FIND.PREV',
+	0x0065: 'FORMULA.FIND.NEXT',
+	0x0066: 'FORMULA.FIND.PREV',
+	0x0067: 'ACTIVATE',
+	0x0068: 'ACTIVATE.NEXT',
+	0x0069: 'ACTIVATE.PREV',
+	0x006A: 'UNLOCKED.NEXT',
+	0x006B: 'UNLOCKED.PREV',
+	0x006C: 'COPY.PICTURE',
+	0x006D: 'SELECT',
+	0x006E: 'DELETE.NAME',
+	0x006F: 'DELETE.FORMAT',
+	0x0070: 'VLINE',
+	0x0071: 'HLINE',
+	0x0072: 'VPAGE',
+	0x0073: 'HPAGE',
+	0x0074: 'VSCROLL',
+	0x0075: 'HSCROLL',
+	0x0076: 'ALERT',
+	0x0077: 'NEW',
+	0x0078: 'CANCEL.COPY',
+	0x0079: 'SHOW.CLIPBOARD',
+	0x007A: 'MESSAGE',
+	0x007C: 'PASTE.LINK',
+	0x007D: 'APP.ACTIVATE',
+	0x007E: 'DELETE.ARROW',
+	0x007F: 'ROW.HEIGHT',
+	0x0080: 'FORMAT.MOVE',
+	0x0081: 'FORMAT.SIZE',
+	0x0082: 'FORMULA.REPLACE',
+	0x0083: 'SEND.KEYS',
+	0x0084: 'SELECT.SPECIAL',
+	0x0085: 'APPLY.NAMES',
+	0x0086: 'REPLACE.FONT',
+	0x0087: 'FREEZE.PANES',
+	0x0088: 'SHOW.INFO',
+	0x0089: 'SPLIT',
+	0x008A: 'ON.WINDOW',
+	0x008B: 'ON.DATA',
+	0x008C: 'DISABLE.INPUT',
+	0x008E: 'OUTLINE',
+	0x008F: 'LIST.NAMES',
+	0x0090: 'FILE.CLOSE',
+	0x0091: 'SAVE.WORKBOOK',
+	0x0092: 'DATA.FORM',
+	0x0093: 'COPY.CHART',
+	0x0094: 'ON.TIME',
+	0x0095: 'WAIT',
+	0x0096: 'FORMAT.FONT',
+	0x0097: 'FILL.UP',
+	0x0098: 'FILL.LEFT',
+	0x0099: 'DELETE.OVERLAY',
+	0x009B: 'SHORT.MENUS',
+	0x009F: 'SET.UPDATE.STATUS',
+	0x00A1: 'COLOR.PALETTE',
+	0x00A2: 'DELETE.STYLE',
+	0x00A3: 'WINDOW.RESTORE',
+	0x00A4: 'WINDOW.MAXIMIZE',
+	0x00A6: 'CHANGE.LINK',
+	0x00A7: 'CALCULATE.DOCUMENT',
+	0x00A8: 'ON.KEY',
+	0x00A9: 'APP.RESTORE',
+	0x00AA: 'APP.MOVE',
+	0x00AB: 'APP.SIZE',
+	0x00AC: 'APP.MINIMIZE',
+	0x00AD: 'APP.MAXIMIZE',
+	0x00AE: 'BRING.TO.FRONT',
+	0x00AF: 'SEND.TO.BACK',
+	0x00B9: 'MAIN.CHART.TYPE',
+	0x00BA: 'OVERLAY.CHART.TYPE',
+	0x00BB: 'SELECT.END',
+	0x00BC: 'OPEN.MAIL',
+	0x00BD: 'SEND.MAIL',
+	0x00BE: 'STANDARD.FONT',
+	0x00BF: 'CONSOLIDATE',
+	0x00C0: 'SORT.SPECIAL',
+	0x00C1: 'GALLERY.3D.AREA',
+	0x00C2: 'GALLERY.3D.COLUMN',
+	0x00C3: 'GALLERY.3D.LINE',
+	0x00C4: 'GALLERY.3D.PIE',
+	0x00C5: 'VIEW.3D',
+	0x00C6: 'GOAL.SEEK',
+	0x00C7: 'WORKGROUP',
+	0x00C8: 'FILL.GROUP',
+	0x00C9: 'UPDATE.LINK',
+	0x00CA: 'PROMOTE',
+	0x00CB: 'DEMOTE',
+	0x00CC: 'SHOW.DETAIL',
+	0x00CE: 'UNGROUP',
+	0x00CF: 'OBJECT.PROPERTIES',
+	0x00D0: 'SAVE.NEW.OBJECT',
+	0x00D1: 'SHARE',
+	0x00D2: 'SHARE.NAME',
+	0x00D3: 'DUPLICATE',
+	0x00D4: 'APPLY.STYLE',
+	0x00D5: 'ASSIGN.TO.OBJECT',
+	0x00D6: 'OBJECT.PROTECTION',
+	0x00D7: 'HIDE.OBJECT',
+	0x00D8: 'SET.EXTRACT',
+	0x00D9: 'CREATE.PUBLISHER',
+	0x00DA: 'SUBSCRIBE.TO',
+	0x00DB: 'ATTRIBUTES',
+	0x00DC: 'SHOW.TOOLBAR',
+	0x00DE: 'PRINT.PREVIEW',
+	0x00DF: 'EDIT.COLOR',
+	0x00E0: 'SHOW.LEVELS',
+	0x00E1: 'FORMAT.MAIN',
+	0x00E2: 'FORMAT.OVERLAY',
+	0x00E3: 'ON.RECALC',
+	0x00E4: 'EDIT.SERIES',
+	0x00E5: 'DEFINE.STYLE',
+	0x00F0: 'LINE.PRINT',
+	0x00F3: 'ENTER.DATA',
+	0x00F9: 'GALLERY.RADAR',
+	0x00FA: 'MERGE.STYLES',
+	0x00FB: 'EDITION.OPTIONS',
+	0x00FC: 'PASTE.PICTURE',
+	0x00FD: 'PASTE.PICTURE.LINK',
+	0x00FE: 'SPELLING',
+	0x0100: 'ZOOM',
+	0x0103: 'INSERT.OBJECT',
+	0x0104: 'WINDOW.MINIMIZE',
+	0x0109: 'SOUND.NOTE',
+	0x010A: 'SOUND.PLAY',
+	0x010B: 'FORMAT.SHAPE',
+	0x010C: 'EXTEND.POLYGON',
+	0x010D: 'FORMAT.AUTO',
+	0x0110: 'GALLERY.3D.BAR',
+	0x0111: 'GALLERY.3D.SURFACE',
+	0x0112: 'FILL.AUTO',
+	0x0114: 'CUSTOMIZE.TOOLBAR',
+	0x0115: 'ADD.TOOL',
+	0x0116: 'EDIT.OBJECT',
+	0x0117: 'ON.DOUBLECLICK',
+	0x0118: 'ON.ENTRY',
+	0x0119: 'WORKBOOK.ADD',
+	0x011A: 'WORKBOOK.MOVE',
+	0x011B: 'WORKBOOK.COPY',
+	0x011C: 'WORKBOOK.OPTIONS',
+	0x011D: 'SAVE.WORKSPACE',
+	0x0120: 'CHART.WIZARD',
+	0x0121: 'DELETE.TOOL',
+	0x0122: 'MOVE.TOOL',
+	0x0123: 'WORKBOOK.SELECT',
+	0x0124: 'WORKBOOK.ACTIVATE',
+	0x0125: 'ASSIGN.TO.TOOL',
+	0x0127: 'COPY.TOOL',
+	0x0128: 'RESET.TOOL',
+	0x0129: 'CONSTRAIN.NUMERIC',
+	0x012A: 'PASTE.TOOL',
+	0x012E: 'WORKBOOK.NEW',
+	0x0131: 'SCENARIO.CELLS',
+	0x0132: 'SCENARIO.DELETE',
+	0x0133: 'SCENARIO.ADD',
+	0x0134: 'SCENARIO.EDIT',
+	0x0135: 'SCENARIO.SHOW',
+	0x0136: 'SCENARIO.SHOW.NEXT',
+	0x0137: 'SCENARIO.SUMMARY',
+	0x0138: 'PIVOT.TABLE.WIZARD',
+	0x0139: 'PIVOT.FIELD.PROPERTIES',
+	0x013A: 'PIVOT.FIELD',
+	0x013B: 'PIVOT.ITEM',
+	0x013C: 'PIVOT.ADD.FIELDS',
+	0x013E: 'OPTIONS.CALCULATION',
+	0x013F: 'OPTIONS.EDIT',
+	0x0140: 'OPTIONS.VIEW',
+	0x0141: 'ADDIN.MANAGER',
+	0x0142: 'MENU.EDITOR',
+	0x0143: 'ATTACH.TOOLBARS',
+	0x0144: 'VBAActivate',
+	0x0145: 'OPTIONS.CHART',
+	0x0148: 'VBA.INSERT.FILE',
+	0x014A: 'VBA.PROCEDURE.DEFINITION',
+	0x0150: 'ROUTING.SLIP',
+	0x0152: 'ROUTE.DOCUMENT',
+	0x0153: 'MAIL.LOGON',
+	0x0156: 'INSERT.PICTURE',
+	0x0157: 'EDIT.TOOL',
+	0x0158: 'GALLERY.DOUGHNUT',
+	0x015E: 'CHART.TREND',
+	0x0160: 'PIVOT.ITEM.PROPERTIES',
+	0x0162: 'WORKBOOK.INSERT',
+	0x0163: 'OPTIONS.TRANSITION',
+	0x0164: 'OPTIONS.GENERAL',
+	0x0172: 'FILTER.ADVANCED',
+	0x0175: 'MAIL.ADD.MAILER',
+	0x0176: 'MAIL.DELETE.MAILER',
+	0x0177: 'MAIL.REPLY',
+	0x0178: 'MAIL.REPLY.ALL',
+	0x0179: 'MAIL.FORWARD',
+	0x017A: 'MAIL.NEXT.LETTER',
+	0x017B: 'DATA.LABEL',
+	0x017C: 'INSERT.TITLE',
+	0x017D: 'FONT.PROPERTIES',
+	0x017E: 'MACRO.OPTIONS',
+	0x017F: 'WORKBOOK.HIDE',
+	0x0180: 'WORKBOOK.UNHIDE',
+	0x0181: 'WORKBOOK.DELETE',
+	0x0182: 'WORKBOOK.NAME',
+	0x0184: 'GALLERY.CUSTOM',
+	0x0186: 'ADD.CHART.AUTOFORMAT',
+	0x0187: 'DELETE.CHART.AUTOFORMAT',
+	0x0188: 'CHART.ADD.DATA',
+	0x0189: 'AUTO.OUTLINE',
+	0x018A: 'TAB.ORDER',
+	0x018B: 'SHOW.DIALOG',
+	0x018C: 'SELECT.ALL',
+	0x018D: 'UNGROUP.SHEETS',
+	0x018E: 'SUBTOTAL.CREATE',
+	0x018F: 'SUBTOTAL.REMOVE',
+	0x0190: 'RENAME.OBJECT',
+	0x019C: 'WORKBOOK.SCROLL',
+	0x019D: 'WORKBOOK.NEXT',
+	0x019E: 'WORKBOOK.PREV',
+	0x019F: 'WORKBOOK.TAB.SPLIT',
+	0x01A0: 'FULL.SCREEN',
+	0x01A1: 'WORKBOOK.PROTECT',
+	0x01A4: 'SCROLLBAR.PROPERTIES',
+	0x01A5: 'PIVOT.SHOW.PAGES',
+	0x01A6: 'TEXT.TO.COLUMNS',
+	0x01A7: 'FORMAT.CHARTTYPE',
+	0x01A8: 'LINK.FORMAT',
+	0x01A9: 'TRACER.DISPLAY',
+	0x01AE: 'TRACER.NAVIGATE',
+	0x01AF: 'TRACER.CLEAR',
+	0x01B0: 'TRACER.ERROR',
+	0x01B1: 'PIVOT.FIELD.GROUP',
+	0x01B2: 'PIVOT.FIELD.UNGROUP',
+	0x01B3: 'CHECKBOX.PROPERTIES',
+	0x01B4: 'LABEL.PROPERTIES',
+	0x01B5: 'LISTBOX.PROPERTIES',
+	0x01B6: 'EDITBOX.PROPERTIES',
+	0x01B7: 'PIVOT.REFRESH',
+	0x01B8: 'LINK.COMBO',
+	0x01B9: 'OPEN.TEXT',
+	0x01BA: 'HIDE.DIALOG',
+	0x01BB: 'SET.DIALOG.FOCUS',
+	0x01BC: 'ENABLE.OBJECT',
+	0x01BD: 'PUSHBUTTON.PROPERTIES',
+	0x01BE: 'SET.DIALOG.DEFAULT',
+	0x01BF: 'FILTER',
+	0x01C0: 'FILTER.SHOW.ALL',
+	0x01C1: 'CLEAR.OUTLINE',
+	0x01C2: 'FUNCTION.WIZARD',
+	0x01C3: 'ADD.LIST.ITEM',
+	0x01C4: 'SET.LIST.ITEM',
+	0x01C5: 'REMOVE.LIST.ITEM',
+	0x01C6: 'SELECT.LIST.ITEM',
+	0x01C7: 'SET.CONTROL.VALUE',
+	0x01C8: 'SAVE.COPY.AS',
+	0x01CA: 'OPTIONS.LISTS.ADD',
+	0x01CB: 'OPTIONS.LISTS.DELETE',
+	0x01CC: 'SERIES.AXES',
+	0x01CD: 'SERIES.X',
+	0x01CE: 'SERIES.Y',
+	0x01CF: 'ERRORBAR.X',
+	0x01D0: 'ERRORBAR.Y',
+	0x01D1: 'FORMAT.CHART',
+	0x01D2: 'SERIES.ORDER',
+	0x01D3: 'MAIL.LOGOFF',
+	0x01D4: 'CLEAR.ROUTING.SLIP',
+	0x01D5: 'APP.ACTIVATE.MICROSOFT',
+	0x01D6: 'MAIL.EDIT.MAILER',
+	0x01D7: 'ON.SHEET',
+	0x01D8: 'STANDARD.WIDTH',
+	0x01D9: 'SCENARIO.MERGE',
+	0x01DA: 'SUMMARY.INFO',
+	0x01DB: 'FIND.FILE',
+	0x01DC: 'ACTIVE.CELL.FONT',
+	0x01DD: 'ENABLE.TIPWIZARD',
+	0x01DE: 'VBA.MAKE.ADDIN',
+	0x01E0: 'INSERTDATATABLE',
+	0x01E1: 'WORKGROUP.OPTIONS',
+	0x01E2: 'MAIL.SEND.MAILER',
+	0x01E5: 'AUTOCORRECT',
+	0x01E9: 'POST.DOCUMENT',
+	0x01EB: 'PICKLIST',
+	0x01ED: 'VIEW.SHOW',
+	0x01EE: 'VIEW.DEFINE',
+	0x01EF: 'VIEW.DELETE',
+	0x01FD: 'SHEET.BACKGROUND',
+	0x01FE: 'INSERT.MAP.OBJECT',
+	0x01FF: 'OPTIONS.MENONO',
+	0x0205: 'MSOCHECKS',
+	0x0206: 'NORMAL',
+	0x0207: 'LAYOUT',
+	0x0208: 'RM.PRINT.AREA',
+	0x0209: 'CLEAR.PRINT.AREA',
+	0x020A: 'ADD.PRINT.AREA',
+	0x020B: 'MOVE.BRK',
+	0x0221: 'HIDECURR.NOTE',
+	0x0222: 'HIDEALL.NOTES',
+	0x0223: 'DELETE.NOTE',
+	0x0224: 'TRAVERSE.NOTES',
+	0x0225: 'ACTIVATE.NOTES',
+	0x026C: 'PROTECT.REVISIONS',
+	0x026D: 'UNPROTECT.REVISIONS',
+	0x0287: 'OPTIONS.ME',
+	0x028D: 'WEB.PUBLISH',
+	0x029B: 'NEWWEBQUERY',
+	0x02A1: 'PIVOT.TABLE.CHART',
+	0x02F1: 'OPTIONS.SAVE',
+	0x02F3: 'OPTIONS.SPELL',
+	0x0328: 'HIDEALL.INKANNOTS'
+};
+
+/* [MS-XLS] 2.5.198.17 */
+var Ftab = {
+	0x0000: 'COUNT',
+	0x0001: 'IF',
+	0x0002: 'ISNA',
+	0x0003: 'ISERROR',
+	0x0004: 'SUM',
+	0x0005: 'AVERAGE',
+	0x0006: 'MIN',
+	0x0007: 'MAX',
+	0x0008: 'ROW',
+	0x0009: 'COLUMN',
+	0x000A: 'NA',
+	0x000B: 'NPV',
+	0x000C: 'STDEV',
+	0x000D: 'DOLLAR',
+	0x000E: 'FIXED',
+	0x000F: 'SIN',
+	0x0010: 'COS',
+	0x0011: 'TAN',
+	0x0012: 'ATAN',
+	0x0013: 'PI',
+	0x0014: 'SQRT',
+	0x0015: 'EXP',
+	0x0016: 'LN',
+	0x0017: 'LOG10',
+	0x0018: 'ABS',
+	0x0019: 'INT',
+	0x001A: 'SIGN',
+	0x001B: 'ROUND',
+	0x001C: 'LOOKUP',
+	0x001D: 'INDEX',
+	0x001E: 'REPT',
+	0x001F: 'MID',
+	0x0020: 'LEN',
+	0x0021: 'VALUE',
+	0x0022: 'TRUE',
+	0x0023: 'FALSE',
+	0x0024: 'AND',
+	0x0025: 'OR',
+	0x0026: 'NOT',
+	0x0027: 'MOD',
+	0x0028: 'DCOUNT',
+	0x0029: 'DSUM',
+	0x002A: 'DAVERAGE',
+	0x002B: 'DMIN',
+	0x002C: 'DMAX',
+	0x002D: 'DSTDEV',
+	0x002E: 'VAR',
+	0x002F: 'DVAR',
+	0x0030: 'TEXT',
+	0x0031: 'LINEST',
+	0x0032: 'TREND',
+	0x0033: 'LOGEST',
+	0x0034: 'GROWTH',
+	0x0035: 'GOTO',
+	0x0036: 'HALT',
+	0x0037: 'RETURN',
+	0x0038: 'PV',
+	0x0039: 'FV',
+	0x003A: 'NPER',
+	0x003B: 'PMT',
+	0x003C: 'RATE',
+	0x003D: 'MIRR',
+	0x003E: 'IRR',
+	0x003F: 'RAND',
+	0x0040: 'MATCH',
+	0x0041: 'DATE',
+	0x0042: 'TIME',
+	0x0043: 'DAY',
+	0x0044: 'MONTH',
+	0x0045: 'YEAR',
+	0x0046: 'WEEKDAY',
+	0x0047: 'HOUR',
+	0x0048: 'MINUTE',
+	0x0049: 'SECOND',
+	0x004A: 'NOW',
+	0x004B: 'AREAS',
+	0x004C: 'ROWS',
+	0x004D: 'COLUMNS',
+	0x004E: 'OFFSET',
+	0x004F: 'ABSREF',
+	0x0050: 'RELREF',
+	0x0051: 'ARGUMENT',
+	0x0052: 'SEARCH',
+	0x0053: 'TRANSPOSE',
+	0x0054: 'ERROR',
+	0x0055: 'STEP',
+	0x0056: 'TYPE',
+	0x0057: 'ECHO',
+	0x0058: 'SET.NAME',
+	0x0059: 'CALLER',
+	0x005A: 'DEREF',
+	0x005B: 'WINDOWS',
+	0x005C: 'SERIES',
+	0x005D: 'DOCUMENTS',
+	0x005E: 'ACTIVE.CELL',
+	0x005F: 'SELECTION',
+	0x0060: 'RESULT',
+	0x0061: 'ATAN2',
+	0x0062: 'ASIN',
+	0x0063: 'ACOS',
+	0x0064: 'CHOOSE',
+	0x0065: 'HLOOKUP',
+	0x0066: 'VLOOKUP',
+	0x0067: 'LINKS',
+	0x0068: 'INPUT',
+	0x0069: 'ISREF',
+	0x006A: 'GET.FORMULA',
+	0x006B: 'GET.NAME',
+	0x006C: 'SET.VALUE',
+	0x006D: 'LOG',
+	0x006E: 'EXEC',
+	0x006F: 'CHAR',
+	0x0070: 'LOWER',
+	0x0071: 'UPPER',
+	0x0072: 'PROPER',
+	0x0073: 'LEFT',
+	0x0074: 'RIGHT',
+	0x0075: 'EXACT',
+	0x0076: 'TRIM',
+	0x0077: 'REPLACE',
+	0x0078: 'SUBSTITUTE',
+	0x0079: 'CODE',
+	0x007A: 'NAMES',
+	0x007B: 'DIRECTORY',
+	0x007C: 'FIND',
+	0x007D: 'CELL',
+	0x007E: 'ISERR',
+	0x007F: 'ISTEXT',
+	0x0080: 'ISNUMBER',
+	0x0081: 'ISBLANK',
+	0x0082: 'T',
+	0x0083: 'N',
+	0x0084: 'FOPEN',
+	0x0085: 'FCLOSE',
+	0x0086: 'FSIZE',
+	0x0087: 'FREADLN',
+	0x0088: 'FREAD',
+	0x0089: 'FWRITELN',
+	0x008A: 'FWRITE',
+	0x008B: 'FPOS',
+	0x008C: 'DATEVALUE',
+	0x008D: 'TIMEVALUE',
+	0x008E: 'SLN',
+	0x008F: 'SYD',
+	0x0090: 'DDB',
+	0x0091: 'GET.DEF',
+	0x0092: 'REFTEXT',
+	0x0093: 'TEXTREF',
+	0x0094: 'INDIRECT',
+	0x0095: 'REGISTER',
+	0x0096: 'CALL',
+	0x0097: 'ADD.BAR',
+	0x0098: 'ADD.MENU',
+	0x0099: 'ADD.COMMAND',
+	0x009A: 'ENABLE.COMMAND',
+	0x009B: 'CHECK.COMMAND',
+	0x009C: 'RENAME.COMMAND',
+	0x009D: 'SHOW.BAR',
+	0x009E: 'DELETE.MENU',
+	0x009F: 'DELETE.COMMAND',
+	0x00A0: 'GET.CHART.ITEM',
+	0x00A1: 'DIALOG.BOX',
+	0x00A2: 'CLEAN',
+	0x00A3: 'MDETERM',
+	0x00A4: 'MINVERSE',
+	0x00A5: 'MMULT',
+	0x00A6: 'FILES',
+	0x00A7: 'IPMT',
+	0x00A8: 'PPMT',
+	0x00A9: 'COUNTA',
+	0x00AA: 'CANCEL.KEY',
+	0x00AB: 'FOR',
+	0x00AC: 'WHILE',
+	0x00AD: 'BREAK',
+	0x00AE: 'NEXT',
+	0x00AF: 'INITIATE',
+	0x00B0: 'REQUEST',
+	0x00B1: 'POKE',
+	0x00B2: 'EXECUTE',
+	0x00B3: 'TERMINATE',
+	0x00B4: 'RESTART',
+	0x00B5: 'HELP',
+	0x00B6: 'GET.BAR',
+	0x00B7: 'PRODUCT',
+	0x00B8: 'FACT',
+	0x00B9: 'GET.CELL',
+	0x00BA: 'GET.WORKSPACE',
+	0x00BB: 'GET.WINDOW',
+	0x00BC: 'GET.DOCUMENT',
+	0x00BD: 'DPRODUCT',
+	0x00BE: 'ISNONTEXT',
+	0x00BF: 'GET.NOTE',
+	0x00C0: 'NOTE',
+	0x00C1: 'STDEVP',
+	0x00C2: 'VARP',
+	0x00C3: 'DSTDEVP',
+	0x00C4: 'DVARP',
+	0x00C5: 'TRUNC',
+	0x00C6: 'ISLOGICAL',
+	0x00C7: 'DCOUNTA',
+	0x00C8: 'DELETE.BAR',
+	0x00C9: 'UNREGISTER',
+	0x00CC: 'USDOLLAR',
+	0x00CD: 'FINDB',
+	0x00CE: 'SEARCHB',
+	0x00CF: 'REPLACEB',
+	0x00D0: 'LEFTB',
+	0x00D1: 'RIGHTB',
+	0x00D2: 'MIDB',
+	0x00D3: 'LENB',
+	0x00D4: 'ROUNDUP',
+	0x00D5: 'ROUNDDOWN',
+	0x00D6: 'ASC',
+	0x00D7: 'DBCS',
+	0x00D8: 'RANK',
+	0x00DB: 'ADDRESS',
+	0x00DC: 'DAYS360',
+	0x00DD: 'TODAY',
+	0x00DE: 'VDB',
+	0x00DF: 'ELSE',
+	0x00E0: 'ELSE.IF',
+	0x00E1: 'END.IF',
+	0x00E2: 'FOR.CELL',
+	0x00E3: 'MEDIAN',
+	0x00E4: 'SUMPRODUCT',
+	0x00E5: 'SINH',
+	0x00E6: 'COSH',
+	0x00E7: 'TANH',
+	0x00E8: 'ASINH',
+	0x00E9: 'ACOSH',
+	0x00EA: 'ATANH',
+	0x00EB: 'DGET',
+	0x00EC: 'CREATE.OBJECT',
+	0x00ED: 'VOLATILE',
+	0x00EE: 'LAST.ERROR',
+	0x00EF: 'CUSTOM.UNDO',
+	0x00F0: 'CUSTOM.REPEAT',
+	0x00F1: 'FORMULA.CONVERT',
+	0x00F2: 'GET.LINK.INFO',
+	0x00F3: 'TEXT.BOX',
+	0x00F4: 'INFO',
+	0x00F5: 'GROUP',
+	0x00F6: 'GET.OBJECT',
+	0x00F7: 'DB',
+	0x00F8: 'PAUSE',
+	0x00FB: 'RESUME',
+	0x00FC: 'FREQUENCY',
+	0x00FD: 'ADD.TOOLBAR',
+	0x00FE: 'DELETE.TOOLBAR',
+	0x00FF: 'User',
+	0x0100: 'RESET.TOOLBAR',
+	0x0101: 'EVALUATE',
+	0x0102: 'GET.TOOLBAR',
+	0x0103: 'GET.TOOL',
+	0x0104: 'SPELLING.CHECK',
+	0x0105: 'ERROR.TYPE',
+	0x0106: 'APP.TITLE',
+	0x0107: 'WINDOW.TITLE',
+	0x0108: 'SAVE.TOOLBAR',
+	0x0109: 'ENABLE.TOOL',
+	0x010A: 'PRESS.TOOL',
+	0x010B: 'REGISTER.ID',
+	0x010C: 'GET.WORKBOOK',
+	0x010D: 'AVEDEV',
+	0x010E: 'BETADIST',
+	0x010F: 'GAMMALN',
+	0x0110: 'BETAINV',
+	0x0111: 'BINOMDIST',
+	0x0112: 'CHIDIST',
+	0x0113: 'CHIINV',
+	0x0114: 'COMBIN',
+	0x0115: 'CONFIDENCE',
+	0x0116: 'CRITBINOM',
+	0x0117: 'EVEN',
+	0x0118: 'EXPONDIST',
+	0x0119: 'FDIST',
+	0x011A: 'FINV',
+	0x011B: 'FISHER',
+	0x011C: 'FISHERINV',
+	0x011D: 'FLOOR',
+	0x011E: 'GAMMADIST',
+	0x011F: 'GAMMAINV',
+	0x0120: 'CEILING',
+	0x0121: 'HYPGEOMDIST',
+	0x0122: 'LOGNORMDIST',
+	0x0123: 'LOGINV',
+	0x0124: 'NEGBINOMDIST',
+	0x0125: 'NORMDIST',
+	0x0126: 'NORMSDIST',
+	0x0127: 'NORMINV',
+	0x0128: 'NORMSINV',
+	0x0129: 'STANDARDIZE',
+	0x012A: 'ODD',
+	0x012B: 'PERMUT',
+	0x012C: 'POISSON',
+	0x012D: 'TDIST',
+	0x012E: 'WEIBULL',
+	0x012F: 'SUMXMY2',
+	0x0130: 'SUMX2MY2',
+	0x0131: 'SUMX2PY2',
+	0x0132: 'CHITEST',
+	0x0133: 'CORREL',
+	0x0134: 'COVAR',
+	0x0135: 'FORECAST',
+	0x0136: 'FTEST',
+	0x0137: 'INTERCEPT',
+	0x0138: 'PEARSON',
+	0x0139: 'RSQ',
+	0x013A: 'STEYX',
+	0x013B: 'SLOPE',
+	0x013C: 'TTEST',
+	0x013D: 'PROB',
+	0x013E: 'DEVSQ',
+	0x013F: 'GEOMEAN',
+	0x0140: 'HARMEAN',
+	0x0141: 'SUMSQ',
+	0x0142: 'KURT',
+	0x0143: 'SKEW',
+	0x0144: 'ZTEST',
+	0x0145: 'LARGE',
+	0x0146: 'SMALL',
+	0x0147: 'QUARTILE',
+	0x0148: 'PERCENTILE',
+	0x0149: 'PERCENTRANK',
+	0x014A: 'MODE',
+	0x014B: 'TRIMMEAN',
+	0x014C: 'TINV',
+	0x014E: 'MOVIE.COMMAND',
+	0x014F: 'GET.MOVIE',
+	0x0150: 'CONCATENATE',
+	0x0151: 'POWER',
+	0x0152: 'PIVOT.ADD.DATA',
+	0x0153: 'GET.PIVOT.TABLE',
+	0x0154: 'GET.PIVOT.FIELD',
+	0x0155: 'GET.PIVOT.ITEM',
+	0x0156: 'RADIANS',
+	0x0157: 'DEGREES',
+	0x0158: 'SUBTOTAL',
+	0x0159: 'SUMIF',
+	0x015A: 'COUNTIF',
+	0x015B: 'COUNTBLANK',
+	0x015C: 'SCENARIO.GET',
+	0x015D: 'OPTIONS.LISTS.GET',
+	0x015E: 'ISPMT',
+	0x015F: 'DATEDIF',
+	0x0160: 'DATESTRING',
+	0x0161: 'NUMBERSTRING',
+	0x0162: 'ROMAN',
+	0x0163: 'OPEN.DIALOG',
+	0x0164: 'SAVE.DIALOG',
+	0x0165: 'VIEW.GET',
+	0x0166: 'GETPIVOTDATA',
+	0x0167: 'HYPERLINK',
+	0x0168: 'PHONETIC',
+	0x0169: 'AVERAGEA',
+	0x016A: 'MAXA',
+	0x016B: 'MINA',
+	0x016C: 'STDEVPA',
+	0x016D: 'VARPA',
+	0x016E: 'STDEVA',
+	0x016F: 'VARA',
+	0x0170: 'BAHTTEXT',
+	0x0171: 'THAIDAYOFWEEK',
+	0x0172: 'THAIDIGIT',
+	0x0173: 'THAIMONTHOFYEAR',
+	0x0174: 'THAINUMSOUND',
+	0x0175: 'THAINUMSTRING',
+	0x0176: 'THAISTRINGLENGTH',
+	0x0177: 'ISTHAIDIGIT',
+	0x0178: 'ROUNDBAHTDOWN',
+	0x0179: 'ROUNDBAHTUP',
+	0x017A: 'THAIYEAR',
+	0x017B: 'RTD'
+};
+var FtabArgc = {
+	0x0002: 1, /* ISNA */
+	0x0003: 1, /* ISERROR */
+	0x000F: 1, /* SIN */
+	0x0010: 1, /* COS */
+	0x0011: 1, /* TAN */
+	0x0012: 1, /* ATAN */
+	0x0014: 1, /* SQRT */
+	0x0015: 1, /* EXP */
+	0x0016: 1, /* LN */
+	0x0017: 1, /* LOG10 */
+	0x0018: 1, /* ABS */
+	0x0019: 1, /* INT */
+	0x001A: 1, /* SIGN */
+	0x001B: 2, /* ROUND */
+	0x001E: 2, /* REPT */
+	0x001F: 3, /* MID */
+	0x0020: 1, /* LEN */
+	0x0021: 1, /* VALUE */
+	0x0026: 1, /* NOT */
+	0x0027: 2, /* MOD */
+	0x0028: 3, /* DCOUNT */
+	0x0029: 3, /* DSUM */
+	0x002A: 3, /* DAVERAGE */
+	0x002B: 3, /* DMIN */
+	0x002C: 3, /* DMAX */
+	0x002D: 3, /* DSTDEV */
+	0x002F: 3, /* DVAR */
+	0x0030: 2, /* TEXT */
+	0x0035: 1, /* GOTO */
+	0x003D: 3, /* MIRR */
+	0x0041: 3, /* DATE */
+	0x0042: 3, /* TIME */
+	0x0043: 1, /* DAY */
+	0x0044: 1, /* MONTH */
+	0x0045: 1, /* YEAR */
+	0x0047: 1, /* HOUR */
+	0x0048: 1, /* MINUTE */
+	0x0049: 1, /* SECOND */
+	0x004B: 1, /* AREAS */
+	0x004C: 1, /* ROWS */
+	0x004D: 1, /* COLUMNS */
+	0x004F: 2, /* ABSREF */
+	0x0050: 2, /* RELREF */
+	0x0053: 1, /* TRANSPOSE */
+	0x0056: 1, /* TYPE */
+	0x005A: 1, /* DEREF */
+	0x0061: 2, /* ATAN2 */
+	0x0062: 1, /* ASIN */
+	0x0063: 1, /* ACOS */
+	0x0069: 1, /* ISREF */
+	0x006F: 1, /* CHAR */
+	0x0070: 1, /* LOWER */
+	0x0071: 1, /* UPPER */
+	0x0072: 1, /* PROPER */
+	0x0075: 2, /* EXACT */
+	0x0076: 1, /* TRIM */
+	0x0077: 4, /* REPLACE */
+	0x0079: 1, /* CODE */
+	0x007E: 1, /* ISERR */
+	0x007F: 1, /* ISTEXT */
+	0x0080: 1, /* ISNUMBER */
+	0x0081: 1, /* ISBLANK */
+	0x0082: 1, /* T */
+	0x0083: 1, /* N */
+	0x0085: 1, /* FCLOSE */
+	0x0086: 1, /* FSIZE */
+	0x0087: 1, /* FREADLN */
+	0x0088: 2, /* FREAD */
+	0x0089: 2, /* FWRITELN */
+	0x008A: 2, /* FWRITE */
+	0x008C: 1, /* DATEVALUE */
+	0x008D: 1, /* TIMEVALUE */
+	0x008E: 3, /* SLN */
+	0x008F: 4, /* SYD */
+	0x00A2: 1, /* CLEAN */
+	0x00A3: 1, /* MDETERM */
+	0x00A4: 1, /* MINVERSE */
+	0x00A5: 2, /* MMULT */
+	0x00AC: 1, /* WHILE */
+	0x00AF: 2, /* INITIATE */
+	0x00B0: 2, /* REQUEST */
+	0x00B1: 3, /* POKE */
+	0x00B2: 2, /* EXECUTE */
+	0x00B3: 1, /* TERMINATE */
+	0x00B8: 1, /* FACT */
+	0x00BD: 3, /* DPRODUCT */
+	0x00BE: 1, /* ISNONTEXT */
+	0x00C3: 3, /* DSTDEVP */
+	0x00C4: 3, /* DVARP */
+	0x00C6: 1, /* ISLOGICAL */
+	0x00C7: 3, /* DCOUNTA */
+	0x00C9: 1, /* UNREGISTER */
+	0x00CF: 4, /* REPLACEB */
+	0x00D2: 3, /* MIDB */
+	0x00D3: 1, /* LENB */
+	0x00D4: 2, /* ROUNDUP */
+	0x00D5: 2, /* ROUNDDOWN */
+	0x00D6: 1, /* ASC */
+	0x00D7: 1, /* DBCS */
+	0x00E5: 1, /* SINH */
+	0x00E6: 1, /* COSH */
+	0x00E7: 1, /* TANH */
+	0x00E8: 1, /* ASINH */
+	0x00E9: 1, /* ACOSH */
+	0x00EA: 1, /* ATANH */
+	0x00EB: 3, /* DGET */
+	0x00F4: 1, /* INFO */
+	0x00FC: 2, /* FREQUENCY */
+	0x0101: 1, /* EVALUATE */
+	0x0105: 1, /* ERROR.TYPE */
+	0x010F: 1, /* GAMMALN */
+	0x0111: 4, /* BINOMDIST */
+	0x0112: 2, /* CHIDIST */
+	0x0113: 2, /* CHIINV */
+	0x0114: 2, /* COMBIN */
+	0x0115: 3, /* CONFIDENCE */
+	0x0116: 3, /* CRITBINOM */
+	0x0117: 1, /* EVEN */
+	0x0118: 3, /* EXPONDIST */
+	0x0119: 3, /* FDIST */
+	0x011A: 3, /* FINV */
+	0x011B: 1, /* FISHER */
+	0x011C: 1, /* FISHERINV */
+	0x011D: 2, /* FLOOR */
+	0x011E: 4, /* GAMMADIST */
+	0x011F: 3, /* GAMMAINV */
+	0x0120: 2, /* CEILING */
+	0x0121: 4, /* HYPGEOMDIST */
+	0x0122: 3, /* LOGNORMDIST */
+	0x0123: 3, /* LOGINV */
+	0x0124: 3, /* NEGBINOMDIST */
+	0x0125: 4, /* NORMDIST */
+	0x0126: 1, /* NORMSDIST */
+	0x0127: 3, /* NORMINV */
+	0x0128: 1, /* NORMSINV */
+	0x0129: 3, /* STANDARDIZE */
+	0x012A: 1, /* ODD */
+	0x012B: 2, /* PERMUT */
+	0x012C: 3, /* POISSON */
+	0x012D: 3, /* TDIST */
+	0x012E: 4, /* WEIBULL */
+	0x012F: 2, /* SUMXMY2 */
+	0x0130: 2, /* SUMX2MY2 */
+	0x0131: 2, /* SUMX2PY2 */
+	0x0132: 2, /* CHITEST */
+	0x0133: 2, /* CORREL */
+	0x0134: 2, /* COVAR */
+	0x0135: 3, /* FORECAST */
+	0x0136: 2, /* FTEST */
+	0x0137: 2, /* INTERCEPT */
+	0x0138: 2, /* PEARSON */
+	0x0139: 2, /* RSQ */
+	0x013A: 2, /* STEYX */
+	0x013B: 2, /* SLOPE */
+	0x013C: 4, /* TTEST */
+	0x0145: 2, /* LARGE */
+	0x0146: 2, /* SMALL */
+	0x0147: 2, /* QUARTILE */
+	0x0148: 2, /* PERCENTILE */
+	0x014B: 2, /* TRIMMEAN */
+	0x014C: 2, /* TINV */
+	0x0151: 2, /* POWER */
+	0x0156: 1, /* RADIANS */
+	0x0157: 1, /* DEGREES */
+	0x015A: 2, /* COUNTIF */
+	0x015B: 1, /* COUNTBLANK */
+	0x015E: 4, /* ISPMT */
+	0x015F: 3, /* DATEDIF */
+	0x0160: 1, /* DATESTRING */
+	0x0161: 2, /* NUMBERSTRING */
+	0x0168: 1, /* PHONETIC */
+	0x0170: 1, /* BAHTTEXT */
+	0x0171: 1, /* THAIDAYOFWEEK */
+	0x0172: 1, /* THAIDIGIT */
+	0x0173: 1, /* THAIMONTHOFYEAR */
+	0x0174: 1, /* THAINUMSOUND */
+	0x0175: 1, /* THAINUMSTRING */
+	0x0176: 1, /* THAISTRINGLENGTH */
+	0x0177: 1, /* ISTHAIDIGIT */
+	0x0178: 1, /* ROUNDBAHTDOWN */
+	0x0179: 1, /* ROUNDBAHTUP */
+	0x017A: 1, /* THAIYEAR */
+	0xFFFF: 0
+};
+/* [MS-XLSX] 2.2.3 Functions */
+var XLSXFutureFunctions = {
+	"_xlfn.ACOT": "ACOT",
+	"_xlfn.ACOTH": "ACOTH",
+	"_xlfn.AGGREGATE": "AGGREGATE",
+	"_xlfn.ARABIC": "ARABIC",
+	"_xlfn.AVERAGEIF": "AVERAGEIF",
+	"_xlfn.AVERAGEIFS": "AVERAGEIFS",
+	"_xlfn.BASE": "BASE",
+	"_xlfn.BETA.DIST": "BETA.DIST",
+	"_xlfn.BETA.INV": "BETA.INV",
+	"_xlfn.BINOM.DIST": "BINOM.DIST",
+	"_xlfn.BINOM.DIST.RANGE": "BINOM.DIST.RANGE",
+	"_xlfn.BINOM.INV": "BINOM.INV",
+	"_xlfn.BITAND": "BITAND",
+	"_xlfn.BITLSHIFT": "BITLSHIFT",
+	"_xlfn.BITOR": "BITOR",
+	"_xlfn.BITRSHIFT": "BITRSHIFT",
+	"_xlfn.BITXOR": "BITXOR",
+	"_xlfn.CEILING.MATH": "CEILING.MATH",
+	"_xlfn.CEILING.PRECISE": "CEILING.PRECISE",
+	"_xlfn.CHISQ.DIST": "CHISQ.DIST",
+	"_xlfn.CHISQ.DIST.RT": "CHISQ.DIST.RT",
+	"_xlfn.CHISQ.INV": "CHISQ.INV",
+	"_xlfn.CHISQ.INV.RT": "CHISQ.INV.RT",
+	"_xlfn.CHISQ.TEST": "CHISQ.TEST",
+	"_xlfn.COMBINA": "COMBINA",
+	"_xlfn.CONFIDENCE.NORM": "CONFIDENCE.NORM",
+	"_xlfn.CONFIDENCE.T": "CONFIDENCE.T",
+	"_xlfn.COT": "COT",
+	"_xlfn.COTH": "COTH",
+	"_xlfn.COUNTIFS": "COUNTIFS",
+	"_xlfn.COVARIANCE.P": "COVARIANCE.P",
+	"_xlfn.COVARIANCE.S": "COVARIANCE.S",
+	"_xlfn.CSC": "CSC",
+	"_xlfn.CSCH": "CSCH",
+	"_xlfn.DAYS": "DAYS",
+	"_xlfn.DECIMAL": "DECIMAL",
+	"_xlfn.ECMA.CEILING": "ECMA.CEILING",
+	"_xlfn.ERF.PRECISE": "ERF.PRECISE",
+	"_xlfn.ERFC.PRECISE": "ERFC.PRECISE",
+	"_xlfn.EXPON.DIST": "EXPON.DIST",
+	"_xlfn.F.DIST": "F.DIST",
+	"_xlfn.F.DIST.RT": "F.DIST.RT",
+	"_xlfn.F.INV": "F.INV",
+	"_xlfn.F.INV.RT": "F.INV.RT",
+	"_xlfn.F.TEST": "F.TEST",
+	"_xlfn.FILTERXML": "FILTERXML",
+	"_xlfn.FLOOR.MATH": "FLOOR.MATH",
+	"_xlfn.FLOOR.PRECISE": "FLOOR.PRECISE",
+	"_xlfn.FORMULATEXT": "FORMULATEXT",
+	"_xlfn.GAMMA": "GAMMA",
+	"_xlfn.GAMMA.DIST": "GAMMA.DIST",
+	"_xlfn.GAMMA.INV": "GAMMA.INV",
+	"_xlfn.GAMMALN.PRECISE": "GAMMALN.PRECISE",
+	"_xlfn.GAUSS": "GAUSS",
+	"_xlfn.HYPGEOM.DIST": "HYPGEOM.DIST",
+	"_xlfn.IFNA": "IFNA",
+	"_xlfn.IFERROR": "IFERROR",
+	"_xlfn.IMCOSH": "IMCOSH",
+	"_xlfn.IMCOT": "IMCOT",
+	"_xlfn.IMCSC": "IMCSC",
+	"_xlfn.IMCSCH": "IMCSCH",
+	"_xlfn.IMSEC": "IMSEC",
+	"_xlfn.IMSECH": "IMSECH",
+	"_xlfn.IMSINH": "IMSINH",
+	"_xlfn.IMTAN": "IMTAN",
+	"_xlfn.ISFORMULA": "ISFORMULA",
+	"_xlfn.ISO.CEILING": "ISO.CEILING",
+	"_xlfn.ISOWEEKNUM": "ISOWEEKNUM",
+	"_xlfn.LOGNORM.DIST": "LOGNORM.DIST",
+	"_xlfn.LOGNORM.INV": "LOGNORM.INV",
+	"_xlfn.MODE.MULT": "MODE.MULT",
+	"_xlfn.MODE.SNGL": "MODE.SNGL",
+	"_xlfn.MUNIT": "MUNIT",
+	"_xlfn.NEGBINOM.DIST": "NEGBINOM.DIST",
+	"_xlfn.NETWORKDAYS.INTL": "NETWORKDAYS.INTL",
+	"_xlfn.NIGBINOM": "NIGBINOM",
+	"_xlfn.NORM.DIST": "NORM.DIST",
+	"_xlfn.NORM.INV": "NORM.INV",
+	"_xlfn.NORM.S.DIST": "NORM.S.DIST",
+	"_xlfn.NORM.S.INV": "NORM.S.INV",
+	"_xlfn.NUMBERVALUE": "NUMBERVALUE",
+	"_xlfn.PDURATION": "PDURATION",
+	"_xlfn.PERCENTILE.EXC": "PERCENTILE.EXC",
+	"_xlfn.PERCENTILE.INC": "PERCENTILE.INC",
+	"_xlfn.PERCENTRANK.EXC": "PERCENTRANK.EXC",
+	"_xlfn.PERCENTRANK.INC": "PERCENTRANK.INC",
+	"_xlfn.PERMUTATIONA": "PERMUTATIONA",
+	"_xlfn.PHI": "PHI",
+	"_xlfn.POISSON.DIST": "POISSON.DIST",
+	"_xlfn.QUARTILE.EXC": "QUARTILE.EXC",
+	"_xlfn.QUARTILE.INC": "QUARTILE.INC",
+	"_xlfn.QUERYSTRING": "QUERYSTRING",
+	"_xlfn.RANK.AVG": "RANK.AVG",
+	"_xlfn.RANK.EQ": "RANK.EQ",
+	"_xlfn.RRI": "RRI",
+	"_xlfn.SEC": "SEC",
+	"_xlfn.SECH": "SECH",
+	"_xlfn.SHEET": "SHEET",
+	"_xlfn.SHEETS": "SHEETS",
+	"_xlfn.SKEW.P": "SKEW.P",
+	"_xlfn.STDEV.P": "STDEV.P",
+	"_xlfn.STDEV.S": "STDEV.S",
+	"_xlfn.SUMIFS": "SUMIFS",
+	"_xlfn.T.DIST": "T.DIST",
+	"_xlfn.T.DIST.2T": "T.DIST.2T",
+	"_xlfn.T.DIST.RT": "T.DIST.RT",
+	"_xlfn.T.INV": "T.INV",
+	"_xlfn.T.INV.2T": "T.INV.2T",
+	"_xlfn.T.TEST": "T.TEST",
+	"_xlfn.UNICHAR": "UNICHAR",
+	"_xlfn.UNICODE": "UNICODE",
+	"_xlfn.VAR.P": "VAR.P",
+	"_xlfn.VAR.S": "VAR.S",
+	"_xlfn.WEBSERVICE": "WEBSERVICE",
+	"_xlfn.WEIBULL.DIST": "WEIBULL.DIST",
+	"_xlfn.WORKDAY.INTL": "WORKDAY.INTL",
+	"_xlfn.XOR": "XOR",
+	"_xlfn.Z.TEST": "Z.TEST"
+};
+
+var strs = {}; // shared strings
+var _ssfopts = {}; // spreadsheet formatting options
+
+RELS.WS = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet";
+
+function get_sst_id(sst, str) {
+	for(var i = 0, len = sst.length; i < len; ++i) if(sst[i].t === str) { sst.Count ++; return i; }
+	sst[len] = {t:str}; sst.Count ++; sst.Unique ++; return len;
+}
+
+function get_cell_style(styles, cell, opts) {
+  if (typeof style_builder != 'undefined') {
+    if (/^\d+$/.exec(cell.s)) { return cell.s}  // if its already an integer index, let it be
+    if (cell.s && (cell.s == +cell.s)) { return cell.s}  // if its already an integer index, let it be
+    var s = cell.s || {};
+    if (cell.z) s.numFmt = cell.z;
+    return style_builder.addStyle(s);
+  }
+  else {
+    var z = opts.revssf[cell.z != null ? cell.z : "General"];
+    for(var i = 0, len = styles.length; i != len; ++i) if(styles[i].numFmtId === z) return i;
+    styles[len] = {
+      numFmtId:z,
+      fontId:0,
+      fillId:0,
+      borderId:0,
+      xfId:0,
+      applyNumberFormat:1
+    };
+    return len;
+  }
+}
+
+function get_cell_style_csf(cellXf) {
+
+  if (cellXf) {
+
+    var s = {}
+
+    if (typeof cellXf.numFmtId != undefined)  {
+      s.numFmt = SSF._table[cellXf.numFmtId];
+    }
+
+    if(cellXf.fillId)  {
+      s.fill =  styles.Fills[cellXf.fillId];
+    }
+
+    if (cellXf.fontId) {
+      s.font = styles.Fonts[cellXf.fontId];
+    }
+    if (cellXf.borderId) {
+      s.border = styles.Borders[cellXf.borderId];
+    }
+    if (cellXf.applyAlignment==1) {
+      s.alignment = cellXf.alignment;
+    }
+
+
+    return JSON.parse(JSON.stringify(s));
+  }
+  return null;
+}
+
+function safe_format(p, fmtid, fillid, opts) {
+	try {
+		if(p.t === 'e') p.w = p.w || BErr[p.v];
+		else if(fmtid === 0) {
+			if(p.t === 'n') {
+				if((p.v|0) === p.v) p.w = SSF._general_int(p.v,_ssfopts);
+				else p.w = SSF._general_num(p.v,_ssfopts);
+			}
+			else if(p.t === 'd') {
+				var dd = datenum(p.v);
+				if((dd|0) === dd) p.w = SSF._general_int(dd,_ssfopts);
+				else p.w = SSF._general_num(dd,_ssfopts);
+			}
+			else if(p.v === undefined) return "";
+			else p.w = SSF._general(p.v,_ssfopts);
+		}
+		else if(p.t === 'd') p.w = SSF.format(fmtid,datenum(p.v),_ssfopts);
+		else p.w = SSF.format(fmtid,p.v,_ssfopts);
+		if(opts.cellNF) p.z = SSF._table[fmtid];
+	} catch(e) { if(opts.WTF) throw e; }
+}
+function parse_ws_xml_dim(ws, s) {
+  var d = safe_decode_range(s);
+  if (d.s.r <= d.e.r && d.s.c <= d.e.c && d.s.r >= 0 && d.s.c >= 0) ws["!ref"] = encode_range(d);
+}
+var mergecregex = /<mergeCell ref="[A-Z0-9:]+"\s*\/>/g;
+var sheetdataregex = /<(?:\w+:)?sheetData>([^\u2603]*)<\/(?:\w+:)?sheetData>/;
+var hlinkregex = /<hyperlink[^>]*\/>/g;
+var dimregex = /"(\w*:\w*)"/;
+var colregex = /<col[^>]*\/>/g;
+/* 18.3 Worksheets */
+function parse_ws_xml(data, opts, rels) {
+  if (!data) return data;
+  /* 18.3.1.99 worksheet CT_Worksheet */
+  var s = {};
+
+  /* 18.3.1.35 dimension CT_SheetDimension ? */
+  var ridx = data.indexOf("<dimension");
+  if (ridx > 0) {
+    var ref = data.substr(ridx, 50).match(dimregex);
+    if (ref != null) parse_ws_xml_dim(s, ref[1]);
+  }
+
+  /* 18.3.1.55 mergeCells CT_MergeCells */
+  var mergecells = [];
+  if (data.indexOf("</mergeCells>") !== -1) {
+    var merges = data.match(mergecregex);
+    for (ridx = 0; ridx != merges.length; ++ridx)
+      mergecells[ridx] = safe_decode_range(merges[ridx].substr(merges[ridx].indexOf("\"") + 1));
+  }
+
+  /* 18.3.1.17 cols CT_Cols */
+  var columns = [];
+  if (opts.cellStyles && data.indexOf("</cols>") !== -1) {
+    /* 18.3.1.13 col CT_Col */
+    var cols = data.match(colregex);
+    parse_ws_xml_cols(columns, cols);
+  }
+
+  var refguess = {s: {r: 1000000, c: 1000000}, e: {r: 0, c: 0}};
+
+  /* 18.3.1.80 sheetData CT_SheetData ? */
+  var mtch = data.match(sheetdataregex);
+  if (mtch) parse_ws_xml_data(mtch[1], s, opts, refguess);
+
+  /* 18.3.1.48 hyperlinks CT_Hyperlinks */
+  if (data.indexOf("</hyperlinks>") !== -1) parse_ws_xml_hlinks(s, data.match(hlinkregex), rels);
+
+  if (!s["!ref"] && refguess.e.c >= refguess.s.c && refguess.e.r >= refguess.s.r) s["!ref"] = encode_range(refguess);
+  if (opts.sheetRows > 0 && s["!ref"]) {
+    var tmpref = safe_decode_range(s["!ref"]);
+    if (opts.sheetRows < +tmpref.e.r) {
+      tmpref.e.r = opts.sheetRows - 1;
+      if (tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;
+      if (tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;
+      if (tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;
+      if (tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;
+      s["!fullref"] = s["!ref"];
+      s["!ref"] = encode_range(tmpref);
+    }
+  }
+  if (mergecells.length > 0) s["!merges"] = mergecells;
+  if (columns.length > 0) s["!cols"] = columns;
+  return s;
+}
+
+function write_ws_xml_merges(merges) {
+  if (merges.length == 0) return "";
+  var o = '<mergeCells count="' + merges.length + '">';
+  for (var i = 0; i != merges.length; ++i) o += '<mergeCell ref="' + encode_range(merges[i]) + '"/>';
+  return o + '</mergeCells>';
+}
+
+function write_ws_xml_pagesetup(setup) {
+  var pageSetup = writextag('pageSetup', null, {
+    scale: setup.scale || '100',
+    orientation: setup.orientation || 'portrait',
+    horizontalDpi: setup.horizontalDpi || '4294967292',
+    verticalDpi: setup.verticalDpi || '4294967292'
+  })
+  return pageSetup;
+}
+
+
+function parse_ws_xml_hlinks(s, data, rels) {
+  for (var i = 0; i != data.length; ++i) {
+    var val = parsexmltag(data[i], true);
+    if (!val.ref) return;
+    var rel = rels ? rels['!id'][val.id] : null;
+    if (rel) {
+      val.Target = rel.Target;
+      if (val.location) val.Target += "#" + val.location;
+      val.Rel = rel;
+    } else {
+      val.Target = val.location;
+      rel = {Target: val.location, TargetMode: 'Internal'};
+      val.Rel = rel;
+    }
+    var rng = safe_decode_range(val.ref);
+    for (var R = rng.s.r; R <= rng.e.r; ++R) for (var C = rng.s.c; C <= rng.e.c; ++C) {
+      var addr = encode_cell({c: C, r: R});
+      if (!s[addr]) s[addr] = {t: "stub", v: undefined};
+      s[addr].l = val;
+    }
+  }
+}
+
+function parse_ws_xml_cols(columns, cols) {
+  var seencol = false;
+  for (var coli = 0; coli != cols.length; ++coli) {
+    var coll = parsexmltag(cols[coli], true);
+    var colm = parseInt(coll.min, 10) - 1, colM = parseInt(coll.max, 10) - 1;
+    delete coll.min;
+    delete coll.max;
+    if (!seencol && coll.width) {
+      seencol = true;
+      find_mdw(+coll.width, coll);
+    }
+    if (coll.width) {
+      coll.wpx = width2px(+coll.width);
+      coll.wch = px2char(coll.wpx);
+      coll.MDW = MDW;
+    }
+    while (colm <= colM) columns[colm++] = coll;
+  }
+}
+
+function write_ws_xml_cols(ws, cols) {
+  var o = ["<cols>"], col, width;
+  for (var i = 0; i != cols.length; ++i) {
+    if (!(col = cols[i])) continue;
+    var p = {min: i + 1, max: i + 1};
+    /* wch (chars), wpx (pixels) */
+    width = -1;
+    if (col.wpx) width = px2char(col.wpx);
+    else if (col.wch) width = col.wch;
+    if (width > -1) {
+      p.width = char2width(width);
+      p.customWidth = 1;
+    }
+    o[o.length] = (writextag('col', null, p));
+  }
+  o[o.length] = "</cols>";
+  return o.join("");
+}
+
+function write_ws_xml_cell(cell, ref, ws, opts, idx, wb) {
+  if (cell.v === undefined && cell.s === undefined) return "";
+  var vv = "";
+  var oldt = cell.t, oldv = cell.v;
+  switch (cell.t) {
+    case 'b':
+      vv = cell.v ? "1" : "0";
+      break;
+    case 'n':
+      vv = '' + cell.v;
+      break;
+    case 'e':
+      vv = BErr[cell.v];
+      break;
+    case 'd':
+      if (opts.cellDates) vv = new Date(cell.v).toISOString();
+      else {
+        cell.t = 'n';
+        vv = '' + (cell.v = datenum(cell.v));
+        if (typeof cell.z === 'undefined') cell.z = SSF._table[14];
+      }
+      break;
+    default:
+      vv = cell.v;
+      break;
+  }
+  var v = writetag('v', escapexml(vv)), o = {r: ref};
+  /* TODO: cell style */
+  var os = get_cell_style(opts.cellXfs, cell, opts);
+  if (os !== 0) o.s = os;
+  switch (cell.t) {
+    case 'n':
+      break;
+    case 'd':
+      o.t = "d";
+      break;
+    case 'b':
+      o.t = "b";
+      break;
+    case 'e':
+      o.t = "e";
+      break;
+    default:
+      if (opts.bookSST) {
+        v = writetag('v', '' + get_sst_id(opts.Strings, cell.v));
+        o.t = "s";
+        break;
+      }
+      o.t = "str";
+      break;
+  }
+  if (cell.t != oldt) {
+    cell.t = oldt;
+    cell.v = oldv;
+  }
+  return writextag('c', v, o);
+}
+
+var parse_ws_xml_data = (function parse_ws_xml_data_factory() {
+  var cellregex = /<(?:\w+:)?c[ >]/, rowregex = /<\/(?:\w+:)?row>/;
+  var rregex = /r=["']([^"']*)["']/, isregex = /<is>([\S\s]*?)<\/is>/;
+  var match_v = matchtag("v"), match_f = matchtag("f");
+
+  return function parse_ws_xml_data(sdata, s, opts, guess) {
+    var ri = 0, x = "", cells = [], cref = [], idx = 0, i = 0, cc = 0, d = "", p;
+    var tag, tagr = 0, tagc = 0;
+    var sstr;
+    var fmtid = 0, fillid = 0, do_format = Array.isArray(styles.CellXf), cf;
+    for (var marr = sdata.split(rowregex), mt = 0, marrlen = marr.length; mt != marrlen; ++mt) {
+      x = marr[mt].trim();
+      var xlen = x.length;
+      if (xlen === 0) continue;
+
+      /* 18.3.1.73 row CT_Row */
+      for (ri = 0; ri < xlen; ++ri) if (x.charCodeAt(ri) === 62) break;
+      ++ri;
+      tag = parsexmltag(x.substr(0, ri), true);
+      /* SpreadSheetGear uses implicit r/c */
+      tagr = typeof tag.r !== 'undefined' ? parseInt(tag.r, 10) : tagr + 1;
+      tagc = -1;
+      if (opts.sheetRows && opts.sheetRows < tagr) continue;
+      if (guess.s.r > tagr - 1) guess.s.r = tagr - 1;
+      if (guess.e.r < tagr - 1) guess.e.r = tagr - 1;
+
+      /* 18.3.1.4 c CT_Cell */
+      cells = x.substr(ri).split(cellregex);
+      for (ri = typeof tag.r === 'undefined' ? 0 : 1; ri != cells.length; ++ri) {
+        x = cells[ri].trim();
+        if (x.length === 0) continue;
+        cref = x.match(rregex);
+        idx = ri;
+        i = 0;
+        cc = 0;
+        x = "<c " + (x.substr(0, 1) == "<" ? ">" : "") + x;
+        if (cref !== null && cref.length === 2) {
+          idx = 0;
+          d = cref[1];
+          for (i = 0; i != d.length; ++i) {
+            if ((cc = d.charCodeAt(i) - 64) < 1 || cc > 26) break;
+            idx = 26 * idx + cc;
+          }
+          --idx;
+          tagc = idx;
+        } else ++tagc;
+        for (i = 0; i != x.length; ++i) if (x.charCodeAt(i) === 62) break;
+        ++i;
+        tag = parsexmltag(x.substr(0, i), true);
+        if (!tag.r) tag.r = utils.encode_cell({r: tagr - 1, c: tagc});
+        d = x.substr(i);
+        p = {t: ""};
+
+        if ((cref = d.match(match_v)) !== null && cref[1] !== '') p.v = unescapexml(cref[1]);
+        if (opts.cellFormula && (cref = d.match(match_f)) !== null) p.f = unescapexml(cref[1]);
+
+        /* SCHEMA IS ACTUALLY INCORRECT HERE.  IF A CELL HAS NO T, EMIT "" */
+        if (tag.t === undefined && tag.s === undefined && p.v === undefined) {
+          if (!opts.sheetStubs) continue;
+          p.t = "stub";
+        }
+        else p.t = tag.t || "n";
+        if (guess.s.c > idx) guess.s.c = idx;
+        if (guess.e.c < idx) guess.e.c = idx;
+        /* 18.18.11 t ST_CellType */
+        switch (p.t) {
+          case 'n':
+            p.v = parseFloat(p.v);
+            if (isNaN(p.v)) p.v = "" // we don't want NaN if p.v is null
+            break;
+          case 's':
+            // if (!p.hasOwnProperty('v')) continue;
+            sstr = strs[parseInt(p.v, 10)];
+            p.v = sstr.t;
+            p.r = sstr.r;
+            if (opts.cellHTML) p.h = sstr.h;
+            break;
+          case 'str':
+            p.t = "s";
+            p.v = (p.v != null) ? utf8read(p.v) : '';
+            if (opts.cellHTML) p.h = p.v;
+            break;
+          case 'inlineStr':
+            cref = d.match(isregex);
+            p.t = 's';
+            if (cref !== null) {
+              sstr = parse_si(cref[1]);
+              p.v = sstr.t;
+            } else p.v = "";
+            break; // inline string
+          case 'b':
+            p.v = parsexmlbool(p.v);
+            break;
+          case 'd':
+            if (!opts.cellDates) {
+              p.v = datenum(p.v);
+              p.t = 'n';
+            }
+            break;
+            /* error string in .v, number in .v */
+          case 'e':
+            p.w = p.v;
+            p.v = RBErr[p.v];
+            break;
+        }
+        /* formatting */
+        fmtid = fillid = 0;
+        if (do_format && tag.s !== undefined) {
+          cf = styles.CellXf[tag.s];
+          if (opts.cellStyles) {
+            p.s = get_cell_style_csf(cf)
+          }
+          if (cf != null) {
+            if (cf.numFmtId != null) fmtid = cf.numFmtId;
+            if (opts.cellStyles && cf.fillId != null) fillid = cf.fillId;
+          }
+        }
+        safe_format(p, fmtid, fillid, opts);
+        s[tag.r] = p;
+      }
+    }
+  };
+})();
+
+function write_ws_xml_data(ws, opts, idx, wb) {
+  var o = [], r = [], range = safe_decode_range(ws['!ref']), cell, ref, rr = "", cols = [], R, C;
+  for (C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);
+  for (R = range.s.r; R <= range.e.r; ++R) {
+    r = [];
+    rr = encode_row(R);
+    for (C = range.s.c; C <= range.e.c; ++C) {
+      ref = cols[C] + rr;
+      if (ws[ref] === undefined) continue;
+      if ((cell = write_ws_xml_cell(ws[ref], ref, ws, opts, idx, wb)) != null) r.push(cell);
+    }
+    if (r.length > 0) o[o.length] = (writextag('row', r.join(""), {r: rr}));
+  }
+  return o.join("");
+}
+
+var WS_XML_ROOT = writextag('worksheet', null, {
+  'xmlns': XMLNS.main[0],
+  'xmlns:r': XMLNS.r
+});
+
+function write_ws_xml(idx, opts, wb) {
+  var o = [XML_HEADER, WS_XML_ROOT];
+  var s = wb.SheetNames[idx], sidx = 0, rdata = "";
+  var ws = wb.Sheets[s];
+  if (ws === undefined) ws = {};
+  var ref = ws['!ref'];
+  if (ref === undefined) ref = 'A1';
+  o[o.length] = (writextag('dimension', null, {'ref': ref}));
+
+  var kids = [];
+  if (ws['!freeze']) {
+    var pane = '';
+    pane = writextag('pane', null, ws['!freeze'])
+    kids.push(pane)
+
+    var selection = writextag('selection', null, {
+      pane: "topLeft"
+    })
+    kids.push(selection)
+
+    var selection = writextag('selection', null, {
+      pane: "bottomLeft"
+    })
+    kids.push(selection)
+
+    var selection = writextag('selection', null, {
+      pane: "bottomRight",
+      activeCell: ws['!freeze'],
+      sqref: ws['!freeze']
+    })
+    kids.push(selection)
+  }
+
+
+//<selection pane="bottomRight" activeCell="A4" sqref="A4"/>
+
+  var sheetView = writextag('sheetView', kids.join('') || undefined, {
+    showGridLines: opts.showGridLines == false ? '0' : '1',
+    tabSelected: opts.tabSelected === undefined ? '0' : opts.tabSelected,  // see issue #26, need to set WorkbookViews if this is set
+    workbookViewId: opts.workbookViewId === undefined ? '0' : opts.workbookViewId
+  });
+  o[o.length] = writextag('sheetViews', sheetView);
+
+  if (ws['!cols'] !== undefined && ws['!cols'].length > 0) o[o.length] = (write_ws_xml_cols(ws, ws['!cols']));
+  o[sidx = o.length] = '<sheetData/>';
+  if (ws['!ref'] !== undefined) {
+    rdata = write_ws_xml_data(ws, opts, idx, wb);
+    if (rdata.length > 0) o[o.length] = (rdata);
+  }
+  if (o.length > sidx + 1) {
+    o[o.length] = ('</sheetData>');
+    o[sidx] = o[sidx].replace("/>", ">");
+  }
+
+  if (ws['!merges'] !== undefined && ws['!merges'].length > 0) o[o.length] = (write_ws_xml_merges(ws['!merges']));
+
+  if (ws['!pageSetup'] !== undefined) o[o.length] = write_ws_xml_pagesetup(ws['!pageSetup']);
+  if (ws['!rowBreaks'] !== undefined) o[o.length] = write_ws_xml_row_breaks(ws['!rowBreaks']);
+  if (ws['!colBreaks'] !== undefined) o[o.length] = write_ws_xml_col_breaks(ws['!colBreaks']);
+
+  if (o.length > 2) {
+    o[o.length] = ('</worksheet>');
+    o[1] = o[1].replace("/>", ">");
+  }
+  return o.join("");
+}
+
+function write_ws_xml_row_breaks(breaks) {
+  var brk = [];
+  for (var i = 0; i < breaks.length; i++) {
+    var thisBreak = '' + (breaks[i]);
+    var nextBreak = '' + (breaks[i + 1] || '16383');
+    brk.push(writextag('brk', null, {id: thisBreak, max: nextBreak, man: '1'}))
+  }
+  return writextag('rowBreaks', brk.join(' '), {count: brk.length, manualBreakCount: brk.length})
+}
+function write_ws_xml_col_breaks(breaks) {
+  var brk = [];
+  for (var i = 0; i < breaks.length; i++) {
+    var thisBreak = '' + (breaks[i]);
+    var nextBreak = '' + (breaks[i + 1] || '1048575');
+    brk.push(writextag('brk', null, {id: thisBreak, max: nextBreak, man: '1'}))
+  }
+  return writextag('colBreaks', brk.join(' '), {count: brk.length, manualBreakCount: brk.length})
+}
+
+/* [MS-XLSB] 2.4.718 BrtRowHdr */
+function parse_BrtRowHdr(data, length) {
+	var z = [];
+	z.r = data.read_shift(4);
+	data.l += length-4;
+	return z;
+}
+
+/* [MS-XLSB] 2.4.812 BrtWsDim */
+var parse_BrtWsDim = parse_UncheckedRfX;
+var write_BrtWsDim = write_UncheckedRfX;
+
+/* [MS-XLSB] 2.4.815 BrtWsProp */
+function parse_BrtWsProp(data, length) {
+	var z = {};
+	/* TODO: pull flags */
+	data.l += 19;
+	z.name = parse_XLSBCodeName(data, length - 19);
+	return z;
+}
+
+/* [MS-XLSB] 2.4.303 BrtCellBlank */
+function parse_BrtCellBlank(data, length) {
+	var cell = parse_XLSBCell(data);
+	return [cell];
+}
+function write_BrtCellBlank(cell, val, o) {
+	if(o == null) o = new_buf(8);
+	return write_XLSBCell(val, o);
+}
+
+
+/* [MS-XLSB] 2.4.304 BrtCellBool */
+function parse_BrtCellBool(data, length) {
+	var cell = parse_XLSBCell(data);
+	var fBool = data.read_shift(1);
+	return [cell, fBool, 'b'];
+}
+
+/* [MS-XLSB] 2.4.305 BrtCellError */
+function parse_BrtCellError(data, length) {
+	var cell = parse_XLSBCell(data);
+	var fBool = data.read_shift(1);
+	return [cell, fBool, 'e'];
+}
+
+/* [MS-XLSB] 2.4.308 BrtCellIsst */
+function parse_BrtCellIsst(data, length) {
+	var cell = parse_XLSBCell(data);
+	var isst = data.read_shift(4);
+	return [cell, isst, 's'];
+}
+
+/* [MS-XLSB] 2.4.310 BrtCellReal */
+function parse_BrtCellReal(data, length) {
+	var cell = parse_XLSBCell(data);
+	var value = parse_Xnum(data);
+	return [cell, value, 'n'];
+}
+
+/* [MS-XLSB] 2.4.311 BrtCellRk */
+function parse_BrtCellRk(data, length) {
+	var cell = parse_XLSBCell(data);
+	var value = parse_RkNumber(data);
+	return [cell, value, 'n'];
+}
+
+/* [MS-XLSB] 2.4.314 BrtCellSt */
+function parse_BrtCellSt(data, length) {
+	var cell = parse_XLSBCell(data);
+	var value = parse_XLWideString(data);
+	return [cell, value, 'str'];
+}
+
+/* [MS-XLSB] 2.4.647 BrtFmlaBool */
+function parse_BrtFmlaBool(data, length, opts) {
+	var cell = parse_XLSBCell(data);
+	var value = data.read_shift(1);
+	var o = [cell, value, 'b'];
+	if(opts.cellFormula) {
+		var formula = parse_XLSBCellParsedFormula(data, length-9);
+		o[3] = ""; /* TODO */
+	}
+	else data.l += length-9;
+	return o;
+}
+
+/* [MS-XLSB] 2.4.648 BrtFmlaError */
+function parse_BrtFmlaError(data, length, opts) {
+	var cell = parse_XLSBCell(data);
+	var value = data.read_shift(1);
+	var o = [cell, value, 'e'];
+	if(opts.cellFormula) {
+		var formula = parse_XLSBCellParsedFormula(data, length-9);
+		o[3] = ""; /* TODO */
+	}
+	else data.l += length-9;
+	return o;
+}
+
+/* [MS-XLSB] 2.4.649 BrtFmlaNum */
+function parse_BrtFmlaNum(data, length, opts) {
+	var cell = parse_XLSBCell(data);
+	var value = parse_Xnum(data);
+	var o = [cell, value, 'n'];
+	if(opts.cellFormula) {
+		var formula = parse_XLSBCellParsedFormula(data, length - 16);
+		o[3] = ""; /* TODO */
+	}
+	else data.l += length-16;
+	return o;
+}
+
+/* [MS-XLSB] 2.4.650 BrtFmlaString */
+function parse_BrtFmlaString(data, length, opts) {
+	var start = data.l;
+	var cell = parse_XLSBCell(data);
+	var value = parse_XLWideString(data);
+	var o = [cell, value, 'str'];
+	if(opts.cellFormula) {
+		var formula = parse_XLSBCellParsedFormula(data, start + length - data.l);
+	}
+	else data.l = start + length;
+	return o;
+}
+
+/* [MS-XLSB] 2.4.676 BrtMergeCell */
+var parse_BrtMergeCell = parse_UncheckedRfX;
+
+/* [MS-XLSB] 2.4.656 BrtHLink */
+function parse_BrtHLink(data, length, opts) {
+	var end = data.l + length;
+	var rfx = parse_UncheckedRfX(data, 16);
+	var relId = parse_XLNullableWideString(data);
+	var loc = parse_XLWideString(data);
+	var tooltip = parse_XLWideString(data);
+	var display = parse_XLWideString(data);
+	data.l = end;
+	return {rfx:rfx, relId:relId, loc:loc, tooltip:tooltip, display:display};
+}
+
+/* [MS-XLSB] 2.1.7.61 Worksheet */
+function parse_ws_bin(data, opts, rels) {
+	if(!data) return data;
+	if(!rels) rels = {'!id':{}};
+	var s = {};
+
+	var ref;
+	var refguess = {s: {r:1000000, c:1000000}, e: {r:0, c:0} };
+
+	var pass = false, end = false;
+	var row, p, cf, R, C, addr, sstr, rr;
+	var mergecells = [];
+	recordhopper(data, function ws_parse(val, R) {
+		if(end) return;
+		switch(R.n) {
+			case 'BrtWsDim': ref = val; break;
+			case 'BrtRowHdr':
+				row = val;
+				if(opts.sheetRows && opts.sheetRows <= row.r) end=true;
+				rr = encode_row(row.r);
+				break;
+
+			case 'BrtFmlaBool':
+			case 'BrtFmlaError':
+			case 'BrtFmlaNum':
+			case 'BrtFmlaString':
+			case 'BrtCellBool':
+			case 'BrtCellError':
+			case 'BrtCellIsst':
+			case 'BrtCellReal':
+			case 'BrtCellRk':
+			case 'BrtCellSt':
+				p = {t:val[2]};
+				switch(val[2]) {
+					case 'n': p.v = val[1]; break;
+					case 's': sstr = strs[val[1]]; p.v = sstr.t; p.r = sstr.r; break;
+					case 'b': p.v = val[1] ? true : false; break;
+					case 'e': p.v = val[1]; p.w = BErr[p.v]; break;
+					case 'str': p.t = 's'; p.v = utf8read(val[1]); break;
+				}
+				if(opts.cellFormula && val.length > 3) p.f = val[3];
+				if((cf = styles.CellXf[val[0].iStyleRef])) safe_format(p,cf.ifmt,null,opts);
+				s[encode_col(C=val[0].c) + rr] = p;
+				if(refguess.s.r > row.r) refguess.s.r = row.r;
+				if(refguess.s.c > C) refguess.s.c = C;
+				if(refguess.e.r < row.r) refguess.e.r = row.r;
+				if(refguess.e.c < C) refguess.e.c = C;
+				break;
+
+			case 'BrtCellBlank': if(!opts.sheetStubs) break;
+				p = {t:'s',v:undefined};
+				s[encode_col(C=val[0].c) + rr] = p;
+				if(refguess.s.r > row.r) refguess.s.r = row.r;
+				if(refguess.s.c > C) refguess.s.c = C;
+				if(refguess.e.r < row.r) refguess.e.r = row.r;
+				if(refguess.e.c < C) refguess.e.c = C;
+				break;
+
+			/* Merge Cells */
+			case 'BrtBeginMergeCells': break;
+			case 'BrtEndMergeCells': break;
+			case 'BrtMergeCell': mergecells.push(val); break;
+
+			case 'BrtHLink':
+				var rel = rels['!id'][val.relId];
+				if(rel) {
+					val.Target = rel.Target;
+					if(val.loc) val.Target += "#"+val.loc;
+					val.Rel = rel;
+				}
+				for(R=val.rfx.s.r;R<=val.rfx.e.r;++R) for(C=val.rfx.s.c;C<=val.rfx.e.c;++C) {
+					addr = encode_cell({c:C,r:R});
+					if(!s[addr]) s[addr] = {t:'s',v:undefined};
+					s[addr].l = val;
+				}
+				break;
+
+			case 'BrtArrFmla': break; // TODO
+			case 'BrtShrFmla': break; // TODO
+			case 'BrtBeginSheet': break;
+			case 'BrtWsProp': break; // TODO
+			case 'BrtSheetCalcProp': break; // TODO
+			case 'BrtBeginWsViews': break; // TODO
+			case 'BrtBeginWsView': break; // TODO
+			case 'BrtPane': break; // TODO
+			case 'BrtSel': break; // TODO
+			case 'BrtEndWsView': break; // TODO
+			case 'BrtEndWsViews': break; // TODO
+			case 'BrtACBegin': break; // TODO
+			case 'BrtRwDescent': break; // TODO
+			case 'BrtACEnd': break; // TODO
+			case 'BrtWsFmtInfoEx14': break; // TODO
+			case 'BrtWsFmtInfo': break; // TODO
+			case 'BrtBeginColInfos': break; // TODO
+			case 'BrtColInfo': break; // TODO
+			case 'BrtEndColInfos': break; // TODO
+			case 'BrtBeginSheetData': break; // TODO
+			case 'BrtEndSheetData': break; // TODO
+			case 'BrtSheetProtection': break; // TODO
+			case 'BrtPrintOptions': break; // TODO
+			case 'BrtMargins': break; // TODO
+			case 'BrtPageSetup': break; // TODO
+			case 'BrtFRTBegin': pass = true; break;
+			case 'BrtFRTEnd': pass = false; break;
+			case 'BrtEndSheet': break; // TODO
+			case 'BrtDrawing': break; // TODO
+			case 'BrtLegacyDrawing': break; // TODO
+			case 'BrtLegacyDrawingHF': break; // TODO
+			case 'BrtPhoneticInfo': break; // TODO
+			case 'BrtBeginHeaderFooter': break; // TODO
+			case 'BrtEndHeaderFooter': break; // TODO
+			case 'BrtBrk': break; // TODO
+			case 'BrtBeginRwBrk': break; // TODO
+			case 'BrtEndRwBrk': break; // TODO
+			case 'BrtBeginColBrk': break; // TODO
+			case 'BrtEndColBrk': break; // TODO
+			case 'BrtBeginUserShViews': break; // TODO
+			case 'BrtBeginUserShView': break; // TODO
+			case 'BrtEndUserShView': break; // TODO
+			case 'BrtEndUserShViews': break; // TODO
+			case 'BrtBkHim': break; // TODO
+			case 'BrtBeginOleObjects': break; // TODO
+			case 'BrtOleObject': break; // TODO
+			case 'BrtEndOleObjects': break; // TODO
+			case 'BrtBeginListParts': break; // TODO
+			case 'BrtListPart': break; // TODO
+			case 'BrtEndListParts': break; // TODO
+			case 'BrtBeginSortState': break; // TODO
+			case 'BrtBeginSortCond': break; // TODO
+			case 'BrtEndSortCond': break; // TODO
+			case 'BrtEndSortState': break; // TODO
+			case 'BrtBeginConditionalFormatting': break; // TODO
+			case 'BrtEndConditionalFormatting': break; // TODO
+			case 'BrtBeginCFRule': break; // TODO
+			case 'BrtEndCFRule': break; // TODO
+			case 'BrtBeginDVals': break; // TODO
+			case 'BrtDVal': break; // TODO
+			case 'BrtEndDVals': break; // TODO
+			case 'BrtRangeProtection': break; // TODO
+			case 'BrtBeginDCon': break; // TODO
+			case 'BrtEndDCon': break; // TODO
+			case 'BrtBeginDRefs': break;
+			case 'BrtDRef': break;
+			case 'BrtEndDRefs': break;
+
+			/* ActiveX */
+			case 'BrtBeginActiveXControls': break;
+			case 'BrtActiveX': break;
+			case 'BrtEndActiveXControls': break;
+
+			/* AutoFilter */
+			case 'BrtBeginAFilter': break;
+			case 'BrtEndAFilter': break;
+			case 'BrtBeginFilterColumn': break;
+			case 'BrtBeginFilters': break;
+			case 'BrtFilter': break;
+			case 'BrtEndFilters': break;
+			case 'BrtEndFilterColumn': break;
+			case 'BrtDynamicFilter': break;
+			case 'BrtTop10Filter': break;
+			case 'BrtBeginCustomFilters': break;
+			case 'BrtCustomFilter': break;
+			case 'BrtEndCustomFilters': break;
+
+			/* Smart Tags */
+			case 'BrtBeginSmartTags': break;
+			case 'BrtBeginCellSmartTags': break;
+			case 'BrtBeginCellSmartTag': break;
+			case 'BrtCellSmartTagProperty': break;
+			case 'BrtEndCellSmartTag': break;
+			case 'BrtEndCellSmartTags': break;
+			case 'BrtEndSmartTags': break;
+
+			/* Cell Watch */
+			case 'BrtBeginCellWatches': break;
+			case 'BrtCellWatch': break;
+			case 'BrtEndCellWatches': break;
+
+			/* Table */
+			case 'BrtTable': break;
+
+			/* Ignore Cell Errors */
+			case 'BrtBeginCellIgnoreECs': break;
+			case 'BrtCellIgnoreEC': break;
+			case 'BrtEndCellIgnoreECs': break;
+
+			default: if(!pass || opts.WTF) throw new Error("Unexpected record " + R.n);
+		}
+	}, opts);
+	if(!s["!ref"] && (refguess.s.r < 1000000 || ref.e.r > 0 || ref.e.c > 0 || ref.s.r > 0 || ref.s.c > 0)) s["!ref"] = encode_range(ref);
+	if(opts.sheetRows && s["!ref"]) {
+		var tmpref = safe_decode_range(s["!ref"]);
+		if(opts.sheetRows < +tmpref.e.r) {
+			tmpref.e.r = opts.sheetRows - 1;
+			if(tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;
+			if(tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;
+			if(tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;
+			if(tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;
+			s["!fullref"] = s["!ref"];
+			s["!ref"] = encode_range(tmpref);
+		}
+	}
+	if(mergecells.length > 0) s["!merges"] = mergecells;
+	return s;
+}
+
+/* TODO: something useful -- this is a stub */
+function write_ws_bin_cell(ba, cell, R, C, opts) {
+	if(cell.v === undefined) return "";
+	var vv = "";
+	switch(cell.t) {
+		case 'b': vv = cell.v ? "1" : "0"; break;
+		case 'n': case 'e': vv = ''+cell.v; break;
+		default: vv = cell.v; break;
+	}
+	var o = {r:R, c:C};
+	/* TODO: cell style */
+	o.s = get_cell_style(opts.cellXfs, cell, opts);
+	switch(cell.t) {
+		case 's': case 'str':
+			if(opts.bookSST) {
+				vv = get_sst_id(opts.Strings, cell.v);
+				o.t = "s"; break;
+			}
+			o.t = "str"; break;
+		case 'n': break;
+		case 'b': o.t = "b"; break;
+		case 'e': o.t = "e"; break;
+	}
+	write_record(ba, "BrtCellBlank", write_BrtCellBlank(cell, o));
+}
+
+function write_CELLTABLE(ba, ws, idx, opts, wb) {
+	var range = safe_decode_range(ws['!ref'] || "A1"), ref, rr = "", cols = [];
+	write_record(ba, 'BrtBeginSheetData');
+	for(var R = range.s.r; R <= range.e.r; ++R) {
+		rr = encode_row(R);
+		/* [ACCELLTABLE] */
+		/* BrtRowHdr */
+		for(var C = range.s.c; C <= range.e.c; ++C) {
+			/* *16384CELL */
+			if(R === range.s.r) cols[C] = encode_col(C);
+			ref = cols[C] + rr;
+			if(!ws[ref]) continue;
+			/* write cell */
+			write_ws_bin_cell(ba, ws[ref], R, C, opts);
+		}
+	}
+	write_record(ba, 'BrtEndSheetData');
+}
+
+function write_ws_bin(idx, opts, wb) {
+	var ba = buf_array();
+	var s = wb.SheetNames[idx], ws = wb.Sheets[s] || {};
+	var r = safe_decode_range(ws['!ref'] || "A1");
+	write_record(ba, "BrtBeginSheet");
+	/* [BrtWsProp] */
+	write_record(ba, "BrtWsDim", write_BrtWsDim(r));
+	/* [WSVIEWS2] */
+	/* [WSFMTINFO] */
+	/* *COLINFOS */
+	write_CELLTABLE(ba, ws, idx, opts, wb);
+	/* [BrtSheetCalcProp] */
+	/* [[BrtSheetProtectionIso] BrtSheetProtection] */
+	/* *([BrtRangeProtectionIso] BrtRangeProtection) */
+	/* [SCENMAN] */
+	/* [AUTOFILTER] */
+	/* [SORTSTATE] */
+	/* [DCON] */
+	/* [USERSHVIEWS] */
+	/* [MERGECELLS] */
+	/* [BrtPhoneticInfo] */
+	/* *CONDITIONALFORMATTING */
+	/* [DVALS] */
+	/* *BrtHLink */
+	/* [BrtPrintOptions] */
+	/* [BrtMargins] */
+	/* [BrtPageSetup] */
+	/* [HEADERFOOTER] */
+	/* [RWBRK] */
+	/* [COLBRK] */
+	/* *BrtBigName */
+	/* [CELLWATCHES] */
+	/* [IGNOREECS] */
+	/* [SMARTTAGS] */
+	/* [BrtDrawing] */
+	/* [BrtLegacyDrawing] */
+	/* [BrtLegacyDrawingHF] */
+	/* [BrtBkHim] */
+	/* [OLEOBJECTS] */
+	/* [ACTIVEXCONTROLS] */
+	/* [WEBPUBITEMS] */
+	/* [LISTPARTS] */
+	/* FRTWORKSHEET */
+	write_record(ba, "BrtEndSheet");
+	return ba.end();
+}
+/* 18.2.28 (CT_WorkbookProtection) Defaults */
+var WBPropsDef = [
+	['allowRefreshQuery', '0'],
+	['autoCompressPictures', '1'],
+	['backupFile', '0'],
+	['checkCompatibility', '0'],
+	['codeName', ''],
+	['date1904', '0'],
+	['dateCompatibility', '1'],
+	//['defaultThemeVersion', '0'],
+	['filterPrivacy', '0'],
+	['hidePivotFieldList', '0'],
+	['promptedSolutions', '0'],
+	['publishItems', '0'],
+	['refreshAllConnections', false],
+	['saveExternalLinkValues', '1'],
+	['showBorderUnselectedTables', '1'],
+	['showInkAnnotation', '1'],
+	['showObjects', 'all'],
+	['showPivotChartFilter', '0']
+	//['updateLinks', 'userSet']
+];
+
+/* 18.2.30 (CT_BookView) Defaults */
+var WBViewDef = [
+	['activeTab', '0'],
+	['autoFilterDateGrouping', '1'],
+	['firstSheet', '0'],
+	['minimized', '0'],
+	['showHorizontalScroll', '1'],
+	['showSheetTabs', '1'],
+	['showVerticalScroll', '1'],
+	['tabRatio', '600'],
+	['visibility', 'visible']
+	//window{Height,Width}, {x,y}Window
+];
+
+/* 18.2.19 (CT_Sheet) Defaults */
+var SheetDef = [
+	['state', 'visible']
+];
+
+/* 18.2.2  (CT_CalcPr) Defaults */
+var CalcPrDef = [
+	['calcCompleted', 'true'],
+	['calcMode', 'auto'],
+	['calcOnSave', 'true'],
+	['concurrentCalc', 'true'],
+	['fullCalcOnLoad', 'false'],
+	['fullPrecision', 'true'],
+	['iterate', 'false'],
+	['iterateCount', '100'],
+	['iterateDelta', '0.001'],
+	['refMode', 'A1']
+];
+
+/* 18.2.3 (CT_CustomWorkbookView) Defaults */
+var CustomWBViewDef = [
+	['autoUpdate', 'false'],
+	['changesSavedWin', 'false'],
+	['includeHiddenRowCol', 'true'],
+	['includePrintSettings', 'true'],
+	['maximized', 'false'],
+	['minimized', 'false'],
+	['onlySync', 'false'],
+	['personalView', 'false'],
+	['showComments', 'commIndicator'],
+	['showFormulaBar', 'true'],
+	['showHorizontalScroll', 'true'],
+	['showObjects', 'all'],
+	['showSheetTabs', 'true'],
+	['showStatusbar', 'true'],
+	['showVerticalScroll', 'true'],
+	['tabRatio', '600'],
+	['xWindow', '0'],
+	['yWindow', '0']
+];
+
+function push_defaults_array(target, defaults) {
+	for(var j = 0; j != target.length; ++j) { var w = target[j];
+		for(var i=0; i != defaults.length; ++i) { var z = defaults[i];
+			if(w[z[0]] == null) w[z[0]] = z[1];
+		}
+	}
+}
+function push_defaults(target, defaults) {
+	for(var i = 0; i != defaults.length; ++i) { var z = defaults[i];
+		if(target[z[0]] == null) target[z[0]] = z[1];
+	}
+}
+
+function parse_wb_defaults(wb) {
+	push_defaults(wb.WBProps, WBPropsDef);
+	push_defaults(wb.CalcPr, CalcPrDef);
+
+	push_defaults_array(wb.WBView, WBViewDef);
+	push_defaults_array(wb.Sheets, SheetDef);
+
+	_ssfopts.date1904 = parsexmlbool(wb.WBProps.date1904, 'date1904');
+}
+/* 18.2 Workbook */
+var wbnsregex = /<\w+:workbook/;
+function parse_wb_xml(data, opts) {
+	var wb = { AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, xmlns: "" };
+	var pass = false, xmlns = "xmlns";
+	data.match(tagregex).forEach(function xml_wb(x) {
+		var y = parsexmltag(x);
+		switch(strip_ns(y[0])) {
+			case '<?xml': break;
+
+			/* 18.2.27 workbook CT_Workbook 1 */
+			case '<workbook':
+				if(x.match(wbnsregex)) xmlns = "xmlns" + x.match(/<(\w+):/)[1];
+				wb.xmlns = y[xmlns];
+				break;
+			case '</workbook>': break;
+
+			/* 18.2.13 fileVersion CT_FileVersion ? */
+			case '<fileVersion': delete y[0]; wb.AppVersion = y; break;
+			case '<fileVersion/>': break;
+
+			/* 18.2.12 fileSharing CT_FileSharing ? */
+			case '<fileSharing': case '<fileSharing/>': break;
+
+			/* 18.2.28 workbookPr CT_WorkbookPr ? */
+			case '<workbookPr': delete y[0]; wb.WBProps = y; break;
+			case '<workbookPr/>': delete y[0]; wb.WBProps = y; break;
+
+			/* 18.2.29 workbookProtection CT_WorkbookProtection ? */
+			case '<workbookProtection': break;
+			case '<workbookProtection/>': break;
+
+			/* 18.2.1  bookViews CT_BookViews ? */
+			case '<bookViews>': case '</bookViews>': break;
+			/* 18.2.30   workbookView CT_BookView + */
+			case '<workbookView': delete y[0]; wb.WBView.push(y); break;
+
+			/* 18.2.20 sheets CT_Sheets 1 */
+			case '<sheets>': case '</sheets>': break; // aggregate sheet
+			/* 18.2.19   sheet CT_Sheet + */
+			case '<sheet': delete y[0]; y.name = utf8read(y.name); wb.Sheets.push(y); break;
+
+			/* 18.2.15 functionGroups CT_FunctionGroups ? */
+			case '<functionGroups': case '<functionGroups/>': break;
+			/* 18.2.14   functionGroup CT_FunctionGroup + */
+			case '<functionGroup': break;
+
+			/* 18.2.9  externalReferences CT_ExternalReferences ? */
+			case '<externalReferences': case '</externalReferences>': case '<externalReferences>': break;
+			/* 18.2.8    externalReference CT_ExternalReference + */
+			case '<externalReference': break;
+
+			/* 18.2.6  definedNames CT_DefinedNames ? */
+			case '<definedNames/>': break;
+			case '<definedNames>': case '<definedNames': pass=true; break;
+			case '</definedNames>': pass=false; break;
+			/* 18.2.5    definedName CT_DefinedName + */
+			case '<definedName': case '<definedName/>': case '</definedName>': break;
+
+			/* 18.2.2  calcPr CT_CalcPr ? */
+			case '<calcPr': delete y[0]; wb.CalcPr = y; break;
+			case '<calcPr/>': delete y[0]; wb.CalcPr = y; break;
+
+			/* 18.2.16 oleSize CT_OleSize ? (ref required) */
+			case '<oleSize': break;
+
+			/* 18.2.4  customWorkbookViews CT_CustomWorkbookViews ? */
+			case '<customWorkbookViews>': case '</customWorkbookViews>': case '<customWorkbookViews': break;
+			/* 18.2.3    customWorkbookView CT_CustomWorkbookView + */
+			case '<customWorkbookView': case '</customWorkbookView>': break;
+
+			/* 18.2.18 pivotCaches CT_PivotCaches ? */
+			case '<pivotCaches>': case '</pivotCaches>': case '<pivotCaches': break;
+			/* 18.2.17 pivotCache CT_PivotCache ? */
+			case '<pivotCache': break;
+
+			/* 18.2.21 smartTagPr CT_SmartTagPr ? */
+			case '<smartTagPr': case '<smartTagPr/>': break;
+
+			/* 18.2.23 smartTagTypes CT_SmartTagTypes ? */
+			case '<smartTagTypes': case '<smartTagTypes>': case '</smartTagTypes>': break;
+			/* 18.2.22   smartTagType CT_SmartTagType ? */
+			case '<smartTagType': break;
+
+			/* 18.2.24 webPublishing CT_WebPublishing ? */
+			case '<webPublishing': case '<webPublishing/>': break;
+
+			/* 18.2.11 fileRecoveryPr CT_FileRecoveryPr ? */
+			case '<fileRecoveryPr': case '<fileRecoveryPr/>': break;
+
+			/* 18.2.26 webPublishObjects CT_WebPublishObjects ? */
+			case '<webPublishObjects>': case '<webPublishObjects': case '</webPublishObjects>': break;
+			/* 18.2.25 webPublishObject CT_WebPublishObject ? */
+			case '<webPublishObject': break;
+
+			/* 18.2.10 extLst CT_ExtensionList ? */
+			case '<extLst>': case '</extLst>': case '<extLst/>': break;
+			/* 18.2.7    ext CT_Extension + */
+			case '<ext': pass=true; break; //TODO: check with versions of excel
+			case '</ext>': pass=false; break;
+
+			/* Others */
+			case '<ArchID': break;
+			case '<AlternateContent': pass=true; break;
+			case '</AlternateContent>': pass=false; break;
+
+			default: if(!pass && opts.WTF) throw 'unrecognized ' + y[0] + ' in workbook';
+		}
+	});
+	if(XMLNS.main.indexOf(wb.xmlns) === -1) throw new Error("Unknown Namespace: " + wb.xmlns);
+
+	parse_wb_defaults(wb);
+
+	return wb;
+}
+
+var WB_XML_ROOT = writextag('workbook', null, {
+	'xmlns': XMLNS.main[0],
+	//'xmlns:mx': XMLNS.mx,
+	//'xmlns:s': XMLNS.main[0],
+	'xmlns:r': XMLNS.r
+});
+
+function safe1904(wb) {
+	/* TODO: store date1904 somewhere else */
+	try { return parsexmlbool(wb.Workbook.WBProps.date1904) ? "true" : "false"; } catch(e) { return "false"; }
+}
+
+function write_wb_xml(wb, opts) {
+	var o = [XML_HEADER];
+	o[o.length] = WB_XML_ROOT;
+	o[o.length] = (writextag('workbookPr', null, {date1904:safe1904(wb)}));
+	o[o.length] = "<sheets>";
+	for(var i = 0; i != wb.SheetNames.length; ++i)
+		o[o.length] = (writextag('sheet',null,{name:wb.SheetNames[i].substr(0,31), sheetId:""+(i+1), "r:id":"rId"+(i+1)}));
+	o[o.length] = "</sheets>";
+
+  var hasPrintHeaders = false;
+  for(var i = 0; i != wb.SheetNames.length; ++i) {
+    var sheetName = wb.SheetNames[i];
+    var sheet = wb.Sheets[sheetName]
+    if (sheet['!printHeader']) {
+      if (sheet['!printHeader'].length !== 2) {
+        throw "!printHeaders must be an array of length 2: "+sheet['!printHeader'];
+
+      }
+      hasPrintHeaders = true;
+    }
+
+  }
+
+  if (hasPrintHeaders) {
+    o[o.length] = '<definedNames>';
+    for(var i = 0; i != wb.SheetNames.length; ++i) {
+      var sheetName = wb.SheetNames[i];
+      var sheet = wb.Sheets[sheetName]
+      if (sheet['!printHeader'] || sheet['!printColumns']) {
+          var printHeader = sheet['!printHeader'];
+          var printColumns = sheet['!printColumns'];
+
+        //Sheet1!$A:$C,Sheet1!$1:$1
+        var range = "";
+
+        if (printColumns)  range += ("'" + sheetName + "'!")  + ("$" + printColumns[0] + ":$" + printColumns[1]);
+        if (printColumns && printHeader)  range += ","
+        if (printHeader) range += ("'" + sheetName + "'!" ) +  ("$" + printHeader[0] + ":$" + printHeader[1]);
+
+        console.log("-----------------------------")
+        console.log(range)
+        o[o.length] = (writextag('definedName', range, {
+          "name":"_xlnm.Print_Titles",
+          localSheetId : ''+i
+        }))
+      }
+    }
+    o[o.length] = '</definedNames>';
+  }
+
+	if(o.length>2){ o[o.length] = '</workbook>'; o[1]=o[1].replace("/>",">"); }
+	return o.join("");
+}
+/* [MS-XLSB] 2.4.301 BrtBundleSh */
+function parse_BrtBundleSh(data, length) {
+	var z = {};
+	z.hsState = data.read_shift(4); //ST_SheetState
+	z.iTabID = data.read_shift(4);
+	z.strRelID = parse_RelID(data,length-8);
+	z.name = parse_XLWideString(data);
+	return z;
+}
+function write_BrtBundleSh(data, o) {
+	if(!o) o = new_buf(127);
+	o.write_shift(4, data.hsState);
+	o.write_shift(4, data.iTabID);
+	write_RelID(data.strRelID, o);
+	write_XLWideString(data.name.substr(0,31), o);
+	return o;
+}
+
+/* [MS-XLSB] 2.4.807 BrtWbProp */
+function parse_BrtWbProp(data, length) {
+	data.read_shift(4);
+	var dwThemeVersion = data.read_shift(4);
+	var strName = (length > 8) ? parse_XLWideString(data) : "";
+	return [dwThemeVersion, strName];
+}
+function write_BrtWbProp(data, o) {
+	if(!o) o = new_buf(8);
+	o.write_shift(4, 0);
+	o.write_shift(4, 0);
+	return o;
+}
+
+function parse_BrtFRTArchID$(data, length) {
+	var o = {};
+	data.read_shift(4);
+	o.ArchID = data.read_shift(4);
+	data.l += length - 8;
+	return o;
+}
+
+/* [MS-XLSB] 2.1.7.60 Workbook */
+function parse_wb_bin(data, opts) {
+	var wb = { AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, xmlns: "" };
+	var pass = false, z;
+
+	recordhopper(data, function hopper_wb(val, R) {
+		switch(R.n) {
+			case 'BrtBundleSh': wb.Sheets.push(val); break;
+
+			case 'BrtBeginBook': break;
+			case 'BrtFileVersion': break;
+			case 'BrtWbProp': break;
+			case 'BrtACBegin': break;
+			case 'BrtAbsPath15': break;
+			case 'BrtACEnd': break;
+			case 'BrtWbFactoid': break;
+			/*case 'BrtBookProtectionIso': break;*/
+			case 'BrtBookProtection': break;
+			case 'BrtBeginBookViews': break;
+			case 'BrtBookView': break;
+			case 'BrtEndBookViews': break;
+			case 'BrtBeginBundleShs': break;
+			case 'BrtEndBundleShs': break;
+			case 'BrtBeginFnGroup': break;
+			case 'BrtEndFnGroup': break;
+			case 'BrtBeginExternals': break;
+			case 'BrtSupSelf': break;
+			case 'BrtSupBookSrc': break;
+			case 'BrtExternSheet': break;
+			case 'BrtEndExternals': break;
+			case 'BrtName': break;
+			case 'BrtCalcProp': break;
+			case 'BrtUserBookView': break;
+			case 'BrtBeginPivotCacheIDs': break;
+			case 'BrtBeginPivotCacheID': break;
+			case 'BrtEndPivotCacheID': break;
+			case 'BrtEndPivotCacheIDs': break;
+			case 'BrtWebOpt': break;
+			case 'BrtFileRecover': break;
+			case 'BrtFileSharing': break;
+			/*case 'BrtBeginWebPubItems': break;
+			case 'BrtBeginWebPubItem': break;
+			case 'BrtEndWebPubItem': break;
+			case 'BrtEndWebPubItems': break;*/
+
+			/* Smart Tags */
+			case 'BrtBeginSmartTagTypes': break;
+			case 'BrtSmartTagType': break;
+			case 'BrtEndSmartTagTypes': break;
+
+			case 'BrtFRTBegin': pass = true; break;
+			case 'BrtFRTArchID$': break;
+			case 'BrtWorkBookPr15': break;
+			case 'BrtFRTEnd': pass = false; break;
+			case 'BrtEndBook': break;
+			default: if(!pass || opts.WTF) throw new Error("Unexpected record " + R.n);
+		}
+	});
+
+	parse_wb_defaults(wb);
+
+	return wb;
+}
+
+/* [MS-XLSB] 2.1.7.60 Workbook */
+function write_BUNDLESHS(ba, wb, opts) {
+	write_record(ba, "BrtBeginBundleShs");
+	for(var idx = 0; idx != wb.SheetNames.length; ++idx) {
+		var d = { hsState: 0, iTabID: idx+1, strRelID: 'rId' + (idx+1), name: wb.SheetNames[idx] };
+		write_record(ba, "BrtBundleSh", write_BrtBundleSh(d));
+	}
+	write_record(ba, "BrtEndBundleShs");
+}
+
+/* [MS-XLSB] 2.4.643 BrtFileVersion */
+function write_BrtFileVersion(data, o) {
+	if(!o) o = new_buf(127);
+	for(var i = 0; i != 4; ++i) o.write_shift(4, 0);
+	write_XLWideString("SheetJS", o);
+	write_XLWideString(XLSX.version, o);
+	write_XLWideString(XLSX.version, o);
+	write_XLWideString("7262", o);
+	o.length = o.l;
+	return o;
+}
+
+/* [MS-XLSB] 2.1.7.60 Workbook */
+function write_BOOKVIEWS(ba, wb, opts) {
+	write_record(ba, "BrtBeginBookViews");
+	/* 1*(BrtBookView *FRT) */
+	write_record(ba, "BrtEndBookViews");
+}
+
+/* [MS-XLSB] 2.4.302 BrtCalcProp */
+function write_BrtCalcProp(data, o) {
+	if(!o) o = new_buf(26);
+	o.write_shift(4,0); /* force recalc */
+	o.write_shift(4,1);
+	o.write_shift(4,0);
+	write_Xnum(0, o);
+	o.write_shift(-4, 1023);
+	o.write_shift(1, 0x33);
+	o.write_shift(1, 0x00);
+	return o;
+}
+
+function write_BrtFileRecover(data, o) {
+	if(!o) o = new_buf(1);
+	o.write_shift(1,0);
+	return o;
+}
+
+/* [MS-XLSB] 2.1.7.60 Workbook */
+function write_wb_bin(wb, opts) {
+	var ba = buf_array();
+	write_record(ba, "BrtBeginBook");
+	write_record(ba, "BrtFileVersion", write_BrtFileVersion());
+	/* [[BrtFileSharingIso] BrtFileSharing] */
+	write_record(ba, "BrtWbProp", write_BrtWbProp());
+	/* [ACABSPATH] */
+	/* [[BrtBookProtectionIso] BrtBookProtection] */
+	write_BOOKVIEWS(ba, wb, opts);
+	write_BUNDLESHS(ba, wb, opts);
+	/* [FNGROUP] */
+	/* [EXTERNALS] */
+	/* *BrtName */
+	write_record(ba, "BrtCalcProp", write_BrtCalcProp());
+	/* [BrtOleSize] */
+	/* *(BrtUserBookView *FRT) */
+	/* [PIVOTCACHEIDS] */
+	/* [BrtWbFactoid] */
+	/* [SMARTTAGTYPES] */
+	/* [BrtWebOpt] */
+	write_record(ba, "BrtFileRecover", write_BrtFileRecover());
+	/* [WEBPUBITEMS] */
+	/* [CRERRS] */
+	/* FRTWORKBOOK */
+	write_record(ba, "BrtEndBook");
+
+	return ba.end();
+}
+function parse_wb(data, name, opts) {
+	return (name.substr(-4)===".bin" ? parse_wb_bin : parse_wb_xml)(data, opts);
+}
+
+function parse_ws(data, name, opts, rels) {
+	return (name.substr(-4)===".bin" ? parse_ws_bin : parse_ws_xml)(data, opts, rels);
+}
+
+function parse_sty(data, name, opts) {
+	return (name.substr(-4)===".bin" ? parse_sty_bin : parse_sty_xml)(data, opts);
+}
+
+function parse_theme(data, name, opts) {
+	return parse_theme_xml(data, opts);
+}
+
+function parse_sst(data, name, opts) {
+	return (name.substr(-4)===".bin" ? parse_sst_bin : parse_sst_xml)(data, opts);
+}
+
+function parse_cmnt(data, name, opts) {
+	return (name.substr(-4)===".bin" ? parse_comments_bin : parse_comments_xml)(data, opts);
+}
+
+function parse_cc(data, name, opts) {
+	return (name.substr(-4)===".bin" ? parse_cc_bin : parse_cc_xml)(data, opts);
+}
+
+function write_wb(wb, name, opts) {
+	return (name.substr(-4)===".bin" ? write_wb_bin : write_wb_xml)(wb, opts);
+}
+
+function write_ws(data, name, opts, wb) {
+	return (name.substr(-4)===".bin" ? write_ws_bin : write_ws_xml)(data, opts, wb);
+}
+
+function write_sty(data, name, opts) {
+	return (name.substr(-4)===".bin" ? write_sty_bin : write_sty_xml)(data, opts);
+}
+
+function write_sst(data, name, opts) {
+	return (name.substr(-4)===".bin" ? write_sst_bin : write_sst_xml)(data, opts);
+}
+/*
+function write_cmnt(data, name, opts) {
+	return (name.substr(-4)===".bin" ? write_comments_bin : write_comments_xml)(data, opts);
+}
+
+function write_cc(data, name, opts) {
+	return (name.substr(-4)===".bin" ? write_cc_bin : write_cc_xml)(data, opts);
+}
+*/
+var attregexg2=/([\w:]+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:'))/g;
+var attregex2=/([\w:]+)=((?:")(?:[^"]*)(?:")|(?:')(?:[^']*)(?:'))/;
+var _chr = function(c) { return String.fromCharCode(c); };
+function xlml_parsexmltag(tag, skip_root) {
+	var words = tag.split(/\s+/);
+	var z = []; if(!skip_root) z[0] = words[0];
+	if(words.length === 1) return z;
+	var m = tag.match(attregexg2), y, j, w, i;
+	if(m) for(i = 0; i != m.length; ++i) {
+		y = m[i].match(attregex2);
+		if((j=y[1].indexOf(":")) === -1) z[y[1]] = y[2].substr(1,y[2].length-2);
+		else {
+			if(y[1].substr(0,6) === "xmlns:") w = "xmlns"+y[1].substr(6);
+			else w = y[1].substr(j+1);
+			z[w] = y[2].substr(1,y[2].length-2);
+		}
+	}
+	return z;
+}
+function xlml_parsexmltagobj(tag) {
+	var words = tag.split(/\s+/);
+	var z = {};
+	if(words.length === 1) return z;
+	var m = tag.match(attregexg2), y, j, w, i;
+	if(m) for(i = 0; i != m.length; ++i) {
+		y = m[i].match(attregex2);
+		if((j=y[1].indexOf(":")) === -1) z[y[1]] = y[2].substr(1,y[2].length-2);
+		else {
+			if(y[1].substr(0,6) === "xmlns:") w = "xmlns"+y[1].substr(6);
+			else w = y[1].substr(j+1);
+			z[w] = y[2].substr(1,y[2].length-2);
+		}
+	}
+	return z;
+}
+
+// ----
+
+function xlml_format(format, value) {
+	var fmt = XLMLFormatMap[format] || unescapexml(format);
+	if(fmt === "General") return SSF._general(value);
+	return SSF.format(fmt, value);
+}
+
+function xlml_set_custprop(Custprops, Rn, cp, val) {
+	switch((cp[0].match(/dt:dt="([\w.]+)"/)||["",""])[1]) {
+		case "boolean": val = parsexmlbool(val); break;
+		case "i2": case "int": val = parseInt(val, 10); break;
+		case "r4": case "float": val = parseFloat(val); break;
+		case "date": case "dateTime.tz": val = new Date(val); break;
+		case "i8": case "string": case "fixed": case "uuid": case "bin.base64": break;
+		default: throw "bad custprop:" + cp[0];
+	}
+	Custprops[unescapexml(Rn[3])] = val;
+}
+
+function safe_format_xlml(cell, nf, o) {
+	try {
+		if(cell.t === 'e') { cell.w = cell.w || BErr[cell.v]; }
+		else if(nf === "General") {
+			if(cell.t === 'n') {
+				if((cell.v|0) === cell.v) cell.w = SSF._general_int(cell.v);
+				else cell.w = SSF._general_num(cell.v);
+			}
+			else cell.w = SSF._general(cell.v);
+		}
+		else cell.w = xlml_format(nf||"General", cell.v);
+		if(o.cellNF) cell.z = XLMLFormatMap[nf]||nf||"General";
+	} catch(e) { if(o.WTF) throw e; }
+}
+
+function process_style_xlml(styles, stag, opts) {
+	if(opts.cellStyles) {
+		if(stag.Interior) {
+			var I = stag.Interior;
+			if(I.Pattern) I.patternType = XLMLPatternTypeMap[I.Pattern] || I.Pattern;
+		}
+	}
+	styles[stag.ID] = stag;
+}
+
+/* TODO: there must exist some form of OSP-blessed spec */
+function parse_xlml_data(xml, ss, data, cell, base, styles, csty, row, o) {
+	var nf = "General", sid = cell.StyleID, S = {}; o = o || {};
+	var interiors = [];
+	if(sid === undefined && row) sid = row.StyleID;
+	if(sid === undefined && csty) sid = csty.StyleID;
+	while(styles[sid] !== undefined) {
+		if(styles[sid].nf) nf = styles[sid].nf;
+		if(styles[sid].Interior) interiors.push(styles[sid].Interior);
+		if(!styles[sid].Parent) break;
+		sid = styles[sid].Parent;
+	}
+	switch(data.Type) {
+		case 'Boolean':
+			cell.t = 'b';
+			cell.v = parsexmlbool(xml);
+			break;
+		case 'String':
+			cell.t = 's'; cell.r = xlml_fixstr(unescapexml(xml));
+			cell.v = xml.indexOf("<") > -1 ? ss : cell.r;
+			break;
+		case 'DateTime':
+			cell.v = (Date.parse(xml) - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);
+			if(cell.v !== cell.v) cell.v = unescapexml(xml);
+			else if(cell.v >= 1 && cell.v<60) cell.v = cell.v -1;
+			if(!nf || nf == "General") nf = "yyyy-mm-dd";
+			/* falls through */
+		case 'Number':
+			if(cell.v === undefined) cell.v=+xml;
+			if(!cell.t) cell.t = 'n';
+			break;
+		case 'Error': cell.t = 'e'; cell.v = RBErr[xml]; cell.w = xml; break;
+		default: cell.t = 's'; cell.v = xlml_fixstr(ss); break;
+	}
+	safe_format_xlml(cell, nf, o);
+	if(o.cellFormula != null && cell.Formula) {
+		cell.f = rc_to_a1(unescapexml(cell.Formula), base);
+		cell.Formula = undefined;
+	}
+	if(o.cellStyles) {
+		interiors.forEach(function(x) {
+			if(!S.patternType && x.patternType) S.patternType = x.patternType;
+		});
+		cell.s = S;
+	}
+	cell.ixfe = cell.StyleID !== undefined ? cell.StyleID : 'Default';
+}
+
+function xlml_clean_comment(comment) {
+	comment.t = comment.v;
+	comment.v = comment.w = comment.ixfe = undefined;
+}
+
+function xlml_normalize(d) {
+	if(has_buf && Buffer.isBuffer(d)) return d.toString('utf8');
+	if(typeof d === 'string') return d;
+	throw "badf";
+}
+
+/* TODO: Everything */
+var xlmlregex = /<(\/?)([a-z0-9]*:|)(\w+)[^>]*>/mg;
+function parse_xlml_xml(d, opts) {
+	var str = xlml_normalize(d);
+	var Rn;
+	var state = [], tmp;
+	var sheets = {}, sheetnames = [], cursheet = {}, sheetname = "";
+	var table = {}, cell = {}, row = {}, dtag, didx;
+	var c = 0, r = 0;
+	var refguess = {s: {r:1000000, c:1000000}, e: {r:0, c:0} };
+	var styles = {}, stag = {};
+	var ss = "", fidx = 0;
+	var mergecells = [];
+	var Props = {}, Custprops = {}, pidx = 0, cp = {};
+	var comments = [], comment = {};
+	var cstys = [], csty;
+	xlmlregex.lastIndex = 0;
+	while((Rn = xlmlregex.exec(str))) switch(Rn[3]) {
+		case 'Data':
+			if(state[state.length-1][1]) break;
+			if(Rn[1]==='/') parse_xlml_data(str.slice(didx, Rn.index), ss, dtag, state[state.length-1][0]=="Comment"?comment:cell, {c:c,r:r}, styles, cstys[c], row, opts);
+			else { ss = ""; dtag = xlml_parsexmltag(Rn[0]); didx = Rn.index + Rn[0].length; }
+			break;
+		case 'Cell':
+			if(Rn[1]==='/'){
+				if(comments.length > 0) cell.c = comments;
+				if((!opts.sheetRows || opts.sheetRows > r) && cell.v !== undefined) cursheet[encode_col(c) + encode_row(r)] = cell;
+				if(cell.HRef) {
+					cell.l = {Target:cell.HRef, tooltip:cell.HRefScreenTip};
+					cell.HRef = cell.HRefScreenTip = undefined;
+				}
+				if(cell.MergeAcross || cell.MergeDown) {
+					var cc = c + (parseInt(cell.MergeAcross,10)|0);
+					var rr = r + (parseInt(cell.MergeDown,10)|0);
+					mergecells.push({s:{c:c,r:r},e:{c:cc,r:rr}});
+				}
+				++c;
+				if(cell.MergeAcross) c += +cell.MergeAcross;
+			} else {
+				cell = xlml_parsexmltagobj(Rn[0]);
+				if(cell.Index) c = +cell.Index - 1;
+				if(c < refguess.s.c) refguess.s.c = c;
+				if(c > refguess.e.c) refguess.e.c = c;
+				if(Rn[0].substr(-2) === "/>") ++c;
+				comments = [];
+			}
+			break;
+		case 'Row':
+			if(Rn[1]==='/' || Rn[0].substr(-2) === "/>") {
+				if(r < refguess.s.r) refguess.s.r = r;
+				if(r > refguess.e.r) refguess.e.r = r;
+				if(Rn[0].substr(-2) === "/>") {
+					row = xlml_parsexmltag(Rn[0]);
+					if(row.Index) r = +row.Index - 1;
+				}
+				c = 0; ++r;
+			} else {
+				row = xlml_parsexmltag(Rn[0]);
+				if(row.Index) r = +row.Index - 1;
+			}
+			break;
+		case 'Worksheet': /* TODO: read range from FullRows/FullColumns */
+			if(Rn[1]==='/'){
+				if((tmp=state.pop())[0]!==Rn[3]) throw "Bad state: "+tmp;
+				sheetnames.push(sheetname);
+				if(refguess.s.r <= refguess.e.r && refguess.s.c <= refguess.e.c) cursheet["!ref"] = encode_range(refguess);
+				if(mergecells.length) cursheet["!merges"] = mergecells;
+				sheets[sheetname] = cursheet;
+			} else {
+				refguess = {s: {r:1000000, c:1000000}, e: {r:0, c:0} };
+				r = c = 0;
+				state.push([Rn[3], false]);
+				tmp = xlml_parsexmltag(Rn[0]);
+				sheetname = tmp.Name;
+				cursheet = {};
+				mergecells = [];
+			}
+			break;
+		case 'Table':
+			if(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw "Bad state: "+tmp;}
+			else if(Rn[0].slice(-2) == "/>") break;
+			else {
+				table = xlml_parsexmltag(Rn[0]);
+				state.push([Rn[3], false]);
+				cstys = [];
+			}
+			break;
+
+		case 'Style':
+			if(Rn[1]==='/') process_style_xlml(styles, stag, opts);
+			else stag = xlml_parsexmltag(Rn[0]);
+			break;
+
+		case 'NumberFormat':
+			stag.nf = xlml_parsexmltag(Rn[0]).Format || "General";
+			break;
+
+		case 'Column':
+			if(state[state.length-1][0] !== 'Table') break;
+			csty = xlml_parsexmltag(Rn[0]);
+			cstys[(csty.Index-1||cstys.length)] = csty;
+			for(var i = 0; i < +csty.Span; ++i) cstys[cstys.length] = csty;
+			break;
+
+		case 'NamedRange': break;
+		case 'NamedCell': break;
+		case 'B': break;
+		case 'I': break;
+		case 'U': break;
+		case 'S': break;
+		case 'Sub': break;
+		case 'Sup': break;
+		case 'Span': break;
+		case 'Border': break;
+		case 'Alignment': break;
+		case 'Borders': break;
+		case 'Font':
+			if(Rn[0].substr(-2) === "/>") break;
+			else if(Rn[1]==="/") ss += str.slice(fidx, Rn.index);
+			else fidx = Rn.index + Rn[0].length;
+			break;
+		case 'Interior':
+			if(!opts.cellStyles) break;
+			stag.Interior = xlml_parsexmltag(Rn[0]);
+			break;
+		case 'Protection': break;
+
+		case 'Author':
+		case 'Title':
+		case 'Description':
+		case 'Created':
+		case 'Keywords':
+		case 'Subject':
+		case 'Category':
+		case 'Company':
+		case 'LastAuthor':
+		case 'LastSaved':
+		case 'LastPrinted':
+		case 'Version':
+		case 'Revision':
+		case 'TotalTime':
+		case 'HyperlinkBase':
+		case 'Manager':
+			if(Rn[0].substr(-2) === "/>") break;
+			else if(Rn[1]==="/") xlml_set_prop(Props, Rn[3], str.slice(pidx, Rn.index));
+			else pidx = Rn.index + Rn[0].length;
+			break;
+		case 'Paragraphs': break;
+
+		case 'Styles':
+		case 'Workbook':
+			if(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw "Bad state: "+tmp;}
+			else state.push([Rn[3], false]);
+			break;
+
+		case 'Comment':
+			if(Rn[1]==='/'){
+				if((tmp=state.pop())[0]!==Rn[3]) throw "Bad state: "+tmp;
+				xlml_clean_comment(comment);
+				comments.push(comment);
+			} else {
+				state.push([Rn[3], false]);
+				tmp = xlml_parsexmltag(Rn[0]);
+				comment = {a:tmp.Author};
+			}
+			break;
+
+		case 'Name': break;
+
+		case 'ComponentOptions':
+		case 'DocumentProperties':
+		case 'CustomDocumentProperties':
+		case 'OfficeDocumentSettings':
+		case 'PivotTable':
+		case 'PivotCache':
+		case 'Names':
+		case 'MapInfo':
+		case 'PageBreaks':
+		case 'QueryTable':
+		case 'DataValidation':
+		case 'AutoFilter':
+		case 'Sorting':
+		case 'Schema':
+		case 'data':
+		case 'ConditionalFormatting':
+		case 'SmartTagType':
+		case 'SmartTags':
+		case 'ExcelWorkbook':
+		case 'WorkbookOptions':
+		case 'WorksheetOptions':
+			if(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw "Bad state: "+tmp;}
+			else if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);
+			break;
+
+		default:
+			var seen = true;
+			switch(state[state.length-1][0]) {
+				/* OfficeDocumentSettings */
+				case 'OfficeDocumentSettings': switch(Rn[3]) {
+					case 'AllowPNG': break;
+					case 'RemovePersonalInformation': break;
+					case 'DownloadComponents': break;
+					case 'LocationOfComponents': break;
+					case 'Colors': break;
+					case 'Color': break;
+					case 'Index': break;
+					case 'RGB': break;
+					case 'PixelsPerInch': break;
+					case 'TargetScreenSize': break;
+					case 'ReadOnlyRecommended': break;
+					default: seen = false;
+				} break;
+
+				/* ComponentOptions */
+				case 'ComponentOptions': switch(Rn[3]) {
+					case 'Toolbar': break;
+					case 'HideOfficeLogo': break;
+					case 'SpreadsheetAutoFit': break;
+					case 'Label': break;
+					case 'Caption': break;
+					case 'MaxHeight': break;
+					case 'MaxWidth': break;
+					case 'NextSheetNumber': break;
+					default: seen = false;
+				} break;
+
+				/* ExcelWorkbook */
+				case 'ExcelWorkbook': switch(Rn[3]) {
+					case 'WindowHeight': break;
+					case 'WindowWidth': break;
+					case 'WindowTopX': break;
+					case 'WindowTopY': break;
+					case 'TabRatio': break;
+					case 'ProtectStructure': break;
+					case 'ProtectWindows': break;
+					case 'ActiveSheet': break;
+					case 'DisplayInkNotes': break;
+					case 'FirstVisibleSheet': break;
+					case 'SupBook': break;
+					case 'SheetName': break;
+					case 'SheetIndex': break;
+					case 'SheetIndexFirst': break;
+					case 'SheetIndexLast': break;
+					case 'Dll': break;
+					case 'AcceptLabelsInFormulas': break;
+					case 'DoNotSaveLinkValues': break;
+					case 'Date1904': break;
+					case 'Iteration': break;
+					case 'MaxIterations': break;
+					case 'MaxChange': break;
+					case 'Path': break;
+					case 'Xct': break;
+					case 'Count': break;
+					case 'SelectedSheets': break;
+					case 'Calculation': break;
+					case 'Uncalced': break;
+					case 'StartupPrompt': break;
+					case 'Crn': break;
+					case 'ExternName': break;
+					case 'Formula': break;
+					case 'ColFirst': break;
+					case 'ColLast': break;
+					case 'WantAdvise': break;
+					case 'Boolean': break;
+					case 'Error': break;
+					case 'Text': break;
+					case 'OLE': break;
+					case 'NoAutoRecover': break;
+					case 'PublishObjects': break;
+					case 'DoNotCalculateBeforeSave': break;
+					case 'Number': break;
+					case 'RefModeR1C1': break;
+					case 'EmbedSaveSmartTags': break;
+					default: seen = false;
+				} break;
+
+				/* WorkbookOptions */
+				case 'WorkbookOptions': switch(Rn[3]) {
+					case 'OWCVersion': break;
+					case 'Height': break;
+					case 'Width': break;
+					default: seen = false;
+				} break;
+
+				/* WorksheetOptions */
+				case 'WorksheetOptions': switch(Rn[3]) {
+					case 'Unsynced': break;
+					case 'Visible': break;
+					case 'Print': break;
+					case 'Panes': break;
+					case 'Scale': break;
+					case 'Pane': break;
+					case 'Number': break;
+					case 'Layout': break;
+					case 'Header': break;
+					case 'Footer': break;
+					case 'PageSetup': break;
+					case 'PageMargins': break;
+					case 'Selected': break;
+					case 'ProtectObjects': break;
+					case 'EnableSelection': break;
+					case 'ProtectScenarios': break;
+					case 'ValidPrinterInfo': break;
+					case 'HorizontalResolution': break;
+					case 'VerticalResolution': break;
+					case 'NumberofCopies': break;
+					case 'ActiveRow': break;
+					case 'ActiveCol': break;
+					case 'ActivePane': break;
+					case 'TopRowVisible': break;
+					case 'TopRowBottomPane': break;
+					case 'LeftColumnVisible': break;
+					case 'LeftColumnRightPane': break;
+					case 'FitToPage': break;
+					case 'RangeSelection': break;
+					case 'PaperSizeIndex': break;
+					case 'PageLayoutZoom': break;
+					case 'PageBreakZoom': break;
+					case 'FilterOn': break;
+					case 'DoNotDisplayGridlines': break;
+					case 'SplitHorizontal': break;
+					case 'SplitVertical': break;
+					case 'FreezePanes': break;
+					case 'FrozenNoSplit': break;
+					case 'FitWidth': break;
+					case 'FitHeight': break;
+					case 'CommentsLayout': break;
+					case 'Zoom': break;
+					case 'LeftToRight': break;
+					case 'Gridlines': break;
+					case 'AllowSort': break;
+					case 'AllowFilter': break;
+					case 'AllowInsertRows': break;
+					case 'AllowDeleteRows': break;
+					case 'AllowInsertCols': break;
+					case 'AllowDeleteCols': break;
+					case 'AllowInsertHyperlinks': break;
+					case 'AllowFormatCells': break;
+					case 'AllowSizeCols': break;
+					case 'AllowSizeRows': break;
+					case 'NoSummaryRowsBelowDetail': break;
+					case 'TabColorIndex': break;
+					case 'DoNotDisplayHeadings': break;
+					case 'ShowPageLayoutZoom': break;
+					case 'NoSummaryColumnsRightDetail': break;
+					case 'BlackAndWhite': break;
+					case 'DoNotDisplayZeros': break;
+					case 'DisplayPageBreak': break;
+					case 'RowColHeadings': break;
+					case 'DoNotDisplayOutline': break;
+					case 'NoOrientation': break;
+					case 'AllowUsePivotTables': break;
+					case 'ZeroHeight': break;
+					case 'ViewableRange': break;
+					case 'Selection': break;
+					case 'ProtectContents': break;
+					default: seen = false;
+				} break;
+
+				/* PivotTable */
+				case 'PivotTable': case 'PivotCache': switch(Rn[3]) {
+					case 'ImmediateItemsOnDrop': break;
+					case 'ShowPageMultipleItemLabel': break;
+					case 'CompactRowIndent': break;
+					case 'Location': break;
+					case 'PivotField': break;
+					case 'Orientation': break;
+					case 'LayoutForm': break;
+					case 'LayoutSubtotalLocation': break;
+					case 'LayoutCompactRow': break;
+					case 'Position': break;
+					case 'PivotItem': break;
+					case 'DataType': break;
+					case 'DataField': break;
+					case 'SourceName': break;
+					case 'ParentField': break;
+					case 'PTLineItems': break;
+					case 'PTLineItem': break;
+					case 'CountOfSameItems': break;
+					case 'Item': break;
+					case 'ItemType': break;
+					case 'PTSource': break;
+					case 'CacheIndex': break;
+					case 'ConsolidationReference': break;
+					case 'FileName': break;
+					case 'Reference': break;
+					case 'NoColumnGrand': break;
+					case 'NoRowGrand': break;
+					case 'BlankLineAfterItems': break;
+					case 'Hidden': break;
+					case 'Subtotal': break;
+					case 'BaseField': break;
+					case 'MapChildItems': break;
+					case 'Function': break;
+					case 'RefreshOnFileOpen': break;
+					case 'PrintSetTitles': break;
+					case 'MergeLabels': break;
+					case 'DefaultVersion': break;
+					case 'RefreshName': break;
+					case 'RefreshDate': break;
+					case 'RefreshDateCopy': break;
+					case 'VersionLastRefresh': break;
+					case 'VersionLastUpdate': break;
+					case 'VersionUpdateableMin': break;
+					case 'VersionRefreshableMin': break;
+					case 'Calculation': break;
+					default: seen = false;
+				} break;
+
+				/* PageBreaks */
+				case 'PageBreaks': switch(Rn[3]) {
+					case 'ColBreaks': break;
+					case 'ColBreak': break;
+					case 'RowBreaks': break;
+					case 'RowBreak': break;
+					case 'ColStart': break;
+					case 'ColEnd': break;
+					case 'RowEnd': break;
+					default: seen = false;
+				} break;
+
+				/* AutoFilter */
+				case 'AutoFilter': switch(Rn[3]) {
+					case 'AutoFilterColumn': break;
+					case 'AutoFilterCondition': break;
+					case 'AutoFilterAnd': break;
+					case 'AutoFilterOr': break;
+					default: seen = false;
+				} break;
+
+				/* QueryTable */
+				case 'QueryTable': switch(Rn[3]) {
+					case 'Id': break;
+					case 'AutoFormatFont': break;
+					case 'AutoFormatPattern': break;
+					case 'QuerySource': break;
+					case 'QueryType': break;
+					case 'EnableRedirections': break;
+					case 'RefreshedInXl9': break;
+					case 'URLString': break;
+					case 'HTMLTables': break;
+					case 'Connection': break;
+					case 'CommandText': break;
+					case 'RefreshInfo': break;
+					case 'NoTitles': break;
+					case 'NextId': break;
+					case 'ColumnInfo': break;
+					case 'OverwriteCells': break;
+					case 'DoNotPromptForFile': break;
+					case 'TextWizardSettings': break;
+					case 'Source': break;
+					case 'Number': break;
+					case 'Decimal': break;
+					case 'ThousandSeparator': break;
+					case 'TrailingMinusNumbers': break;
+					case 'FormatSettings': break;
+					case 'FieldType': break;
+					case 'Delimiters': break;
+					case 'Tab': break;
+					case 'Comma': break;
+					case 'AutoFormatName': break;
+					case 'VersionLastEdit': break;
+					case 'VersionLastRefresh': break;
+					default: seen = false;
+				} break;
+
+				/* Sorting */
+				case 'Sorting':
+				/* ConditionalFormatting */
+				case 'ConditionalFormatting':
+				/* DataValidation */
+				case 'DataValidation': switch(Rn[3]) {
+					case 'Range': break;
+					case 'Type': break;
+					case 'Min': break;
+					case 'Max': break;
+					case 'Sort': break;
+					case 'Descending': break;
+					case 'Order': break;
+					case 'CaseSensitive': break;
+					case 'Value': break;
+					case 'ErrorStyle': break;
+					case 'ErrorMessage': break;
+					case 'ErrorTitle': break;
+					case 'CellRangeList': break;
+					case 'InputMessage': break;
+					case 'InputTitle': break;
+					case 'ComboHide': break;
+					case 'InputHide': break;
+					case 'Condition': break;
+					case 'Qualifier': break;
+					case 'UseBlank': break;
+					case 'Value1': break;
+					case 'Value2': break;
+					case 'Format': break;
+					default: seen = false;
+				} break;
+
+				/* MapInfo (schema) */
+				case 'MapInfo': case 'Schema': case 'data': switch(Rn[3]) {
+					case 'Map': break;
+					case 'Entry': break;
+					case 'Range': break;
+					case 'XPath': break;
+					case 'Field': break;
+					case 'XSDType': break;
+					case 'FilterOn': break;
+					case 'Aggregate': break;
+					case 'ElementType': break;
+					case 'AttributeType': break;
+				/* These are from xsd (XML Schema Definition) */
+					case 'schema':
+					case 'element':
+					case 'complexType':
+					case 'datatype':
+					case 'all':
+					case 'attribute':
+					case 'extends': break;
+
+					case 'row': break;
+					default: seen = false;
+				} break;
+
+				/* SmartTags (can be anything) */
+				case 'SmartTags': break;
+
+				default: seen = false; break;
+			}
+			if(seen) break;
+			/* CustomDocumentProperties */
+			if(!state[state.length-1][1]) throw 'Unrecognized tag: ' + Rn[3] + "|" + state.join("|");
+			if(state[state.length-1][0]==='CustomDocumentProperties') {
+				if(Rn[0].substr(-2) === "/>") break;
+				else if(Rn[1]==="/") xlml_set_custprop(Custprops, Rn, cp, str.slice(pidx, Rn.index));
+				else { cp = Rn; pidx = Rn.index + Rn[0].length; }
+				break;
+			}
+			if(opts.WTF) throw 'Unrecognized tag: ' + Rn[3] + "|" + state.join("|");
+	}
+	var out = {};
+	if(!opts.bookSheets && !opts.bookProps) out.Sheets = sheets;
+	out.SheetNames = sheetnames;
+	out.SSF = SSF.get_table();
+	out.Props = Props;
+	out.Custprops = Custprops;
+	return out;
+}
+
+function parse_xlml(data, opts) {
+	fix_read_opts(opts=opts||{});
+	switch(opts.type||"base64") {
+		case "base64": return parse_xlml_xml(Base64.decode(data), opts);
+		case "binary": case "buffer": case "file": return parse_xlml_xml(data, opts);
+		case "array": return parse_xlml_xml(data.map(_chr).join(""), opts);
+	}
+}
+
+function write_xlml(wb, opts) { }
+
+/* [MS-OLEDS] 2.3.8 CompObjStream */
+function parse_compobj(obj) {
+	var v = {};
+	var o = obj.content;
+
+	/* [MS-OLEDS] 2.3.7 CompObjHeader -- All fields MUST be ignored */
+	var l = 28, m;
+	m = __lpstr(o, l);
+	l += 4 + __readUInt32LE(o,l);
+	v.UserType = m;
+
+	/* [MS-OLEDS] 2.3.1 ClipboardFormatOrAnsiString */
+	m = __readUInt32LE(o,l); l+= 4;
+	switch(m) {
+		case 0x00000000: break;
+		case 0xffffffff: case 0xfffffffe: l+=4; break;
+		default:
+			if(m > 0x190) throw new Error("Unsupported Clipboard: " + m.toString(16));
+			l += m;
+	}
+
+	m = __lpstr(o, l); l += m.length === 0 ? 0 : 5 + m.length; v.Reserved1 = m;
+
+	if((m = __readUInt32LE(o,l)) !== 0x71b2e9f4) return v;
+	throw "Unsupported Unicode Extension";
+}
+
+/* 2.4.58 Continue logic */
+function slurp(R, blob, length, opts) {
+	var l = length;
+	var bufs = [];
+	var d = blob.slice(blob.l,blob.l+l);
+	if(opts && opts.enc && opts.enc.insitu_decrypt) switch(R.n) {
+	case 'BOF': case 'FilePass': case 'FileLock': case 'InterfaceHdr': case 'RRDInfo': case 'RRDHead': case 'UsrExcl': break;
+	default:
+		if(d.length === 0) break;
+		opts.enc.insitu_decrypt(d);
+	}
+	bufs.push(d);
+	blob.l += l;
+	var next = (XLSRecordEnum[__readUInt16LE(blob,blob.l)]);
+	while(next != null && next.n === 'Continue') {
+		l = __readUInt16LE(blob,blob.l+2);
+		bufs.push(blob.slice(blob.l+4,blob.l+4+l));
+		blob.l += 4+l;
+		next = (XLSRecordEnum[__readUInt16LE(blob, blob.l)]);
+	}
+	var b = bconcat(bufs);
+	prep_blob(b, 0);
+	var ll = 0; b.lens = [];
+	for(var j = 0; j < bufs.length; ++j) { b.lens.push(ll); ll += bufs[j].length; }
+	return R.f(b, b.length, opts);
+}
+
+function safe_format_xf(p, opts, date1904) {
+	if(!p.XF) return;
+	try {
+		var fmtid = p.XF.ifmt||0;
+		if(p.t === 'e') { p.w = p.w || BErr[p.v]; }
+		else if(fmtid === 0) {
+			if(p.t === 'n') {
+				if((p.v|0) === p.v) p.w = SSF._general_int(p.v);
+				else p.w = SSF._general_num(p.v);
+			}
+			else p.w = SSF._general(p.v);
+		}
+		else p.w = SSF.format(fmtid,p.v, {date1904:date1904||false});
+		if(opts.cellNF) p.z = SSF._table[fmtid];
+	} catch(e) { if(opts.WTF) throw e; }
+}
+
+function make_cell(val, ixfe, t) {
+	return {v:val, ixfe:ixfe, t:t};
+}
+
+// 2.3.2
+function parse_workbook(blob, options) {
+	var wb = {opts:{}};
+	var Sheets = {};
+	var out = {};
+	var Directory = {};
+	var found_sheet = false;
+	var range = {};
+	var last_formula = null;
+	var sst = [];
+	var cur_sheet = "";
+	var Preamble = {};
+	var lastcell, last_cell, cc, cmnt, rng, rngC, rngR;
+	var shared_formulae = {};
+	var array_formulae = []; /* TODO: something more clever */
+	var temp_val;
+	var country;
+	var cell_valid = true;
+	var XFs = []; /* XF records */
+	var palette = [];
+	var get_rgb = function getrgb(icv) {
+		if(icv < 8) return XLSIcv[icv];
+		if(icv < 64) return palette[icv-8] || XLSIcv[icv];
+		return XLSIcv[icv];
+	};
+	var process_cell_style = function pcs(cell, line) {
+		var xfd = line.XF.data;
+		if(!xfd || !xfd.patternType) return;
+		line.s = {};
+		line.s.patternType = xfd.patternType;
+		var t;
+		if((t = rgb2Hex(get_rgb(xfd.icvFore)))) { line.s.fgColor = {rgb:t}; }
+		if((t = rgb2Hex(get_rgb(xfd.icvBack)))) { line.s.bgColor = {rgb:t}; }
+	};
+	var addcell = function addcell(cell, line, options) {
+		if(!cell_valid) return;
+		if(options.cellStyles && line.XF && line.XF.data) process_cell_style(cell, line);
+		lastcell = cell;
+		last_cell = encode_cell(cell);
+		if(range.s) {
+			if(cell.r < range.s.r) range.s.r = cell.r;
+			if(cell.c < range.s.c) range.s.c = cell.c;
+		}
+		if(range.e) {
+			if(cell.r + 1 > range.e.r) range.e.r = cell.r + 1;
+			if(cell.c + 1 > range.e.c) range.e.c = cell.c + 1;
+		}
+		if(options.sheetRows && lastcell.r >= options.sheetRows) cell_valid = false;
+		else out[last_cell] = line;
+	};
+	var opts = {
+		enc: false, // encrypted
+		sbcch: 0, // cch in the preceding SupBook
+		snames: [], // sheetnames
+		sharedf: shared_formulae, // shared formulae by address
+		arrayf: array_formulae, // array formulae array
+		rrtabid: [], // RRTabId
+		lastuser: "", // Last User from WriteAccess
+		biff: 8, // BIFF version
+		codepage: 0, // CP from CodePage record
+		winlocked: 0, // fLockWn from WinProtect
+		wtf: false
+	};
+	if(options.password) opts.password = options.password;
+	var mergecells = [];
+	var objects = [];
+	var supbooks = [[]]; // 1-indexed, will hold extern names
+	var sbc = 0, sbci = 0, sbcli = 0;
+	supbooks.SheetNames = opts.snames;
+	supbooks.sharedf = opts.sharedf;
+	supbooks.arrayf = opts.arrayf;
+	var last_Rn = '';
+	var file_depth = 0; /* TODO: make a real stack */
+
+	/* explicit override for some broken writers */
+	opts.codepage = 1200;
+	set_cp(1200);
+
+	while(blob.l < blob.length - 1) {
+		var s = blob.l;
+		var RecordType = blob.read_shift(2);
+		if(RecordType === 0 && last_Rn === 'EOF') break;
+		var length = (blob.l === blob.length ? 0 : blob.read_shift(2)), y;
+		var R = XLSRecordEnum[RecordType];
+		if(R && R.f) {
+			if(options.bookSheets) {
+				if(last_Rn === 'BoundSheet8' && R.n !== 'BoundSheet8') break;
+			}
+			last_Rn = R.n;
+			if(R.r === 2 || R.r == 12) {
+				var rt = blob.read_shift(2); length -= 2;
+				if(!opts.enc && rt !== RecordType) throw "rt mismatch";
+				if(R.r == 12){ blob.l += 10; length -= 10; } // skip FRT
+			}
+			//console.error(R,blob.l,length,blob.length);
+			var val;
+			if(R.n === 'EOF') val = R.f(blob, length, opts);
+			else val = slurp(R, blob, length, opts);
+			var Rn = R.n;
+			/* BIFF5 overrides */
+			if(opts.biff === 5 || opts.biff === 2) switch(Rn) {
+				case 'Lbl': Rn = 'Label'; break;
+			}
+			/* nested switch statements to workaround V8 128 limit */
+			switch(Rn) {
+				/* Workbook Options */
+				case 'Date1904': wb.opts.Date1904 = val; break;
+				case 'WriteProtect': wb.opts.WriteProtect = true; break;
+				case 'FilePass':
+					if(!opts.enc) blob.l = 0;
+					opts.enc = val;
+					if(opts.WTF) console.error(val);
+					if(!options.password) throw new Error("File is password-protected");
+					if(val.Type !== 0) throw new Error("Encryption scheme unsupported");
+					if(!val.valid) throw new Error("Password is incorrect");
+					break;
+				case 'WriteAccess': opts.lastuser = val; break;
+				case 'FileSharing': break; //TODO
+				case 'CodePage':
+					/* overrides based on test cases */
+					if(val === 0x5212) val = 1200;
+					else if(val === 0x8001) val = 1252;
+					opts.codepage = val;
+					set_cp(val);
+					break;
+				case 'RRTabId': opts.rrtabid = val; break;
+				case 'WinProtect': opts.winlocked = val; break;
+				case 'Template': break; // TODO
+				case 'RefreshAll': wb.opts.RefreshAll = val; break;
+				case 'BookBool': break; // TODO
+				case 'UsesELFs': /* if(val) console.error("Unsupported ELFs"); */ break;
+				case 'MTRSettings': {
+					if(val[0] && val[1]) throw "Unsupported threads: " + val;
+				} break; // TODO: actually support threads
+				case 'CalcCount': wb.opts.CalcCount = val; break;
+				case 'CalcDelta': wb.opts.CalcDelta = val; break;
+				case 'CalcIter': wb.opts.CalcIter = val; break;
+				case 'CalcMode': wb.opts.CalcMode = val; break;
+				case 'CalcPrecision': wb.opts.CalcPrecision = val; break;
+				case 'CalcSaveRecalc': wb.opts.CalcSaveRecalc = val; break;
+				case 'CalcRefMode': opts.CalcRefMode = val; break; // TODO: implement R1C1
+				case 'Uncalced': break;
+				case 'ForceFullCalculation': wb.opts.FullCalc = val; break;
+				case 'WsBool': break; // TODO
+				case 'XF': XFs.push(val); break;
+				case 'ExtSST': break; // TODO
+				case 'BookExt': break; // TODO
+				case 'RichTextStream': break;
+				case 'BkHim': break;
+
+				case 'SupBook': supbooks[++sbc] = [val]; sbci = 0; break;
+				case 'ExternName': supbooks[sbc][++sbci] = val; break;
+				case 'Index': break; // TODO
+				case 'Lbl': supbooks[0][++sbcli] = val; break;
+				case 'ExternSheet': supbooks[sbc] = supbooks[sbc].concat(val); sbci += val.length; break;
+
+				case 'Protect': out["!protect"] = val; break; /* for sheet or book */
+				case 'Password': if(val !== 0 && opts.WTF) console.error("Password verifier: " + val); break;
+				case 'Prot4Rev': case 'Prot4RevPass': break; /*TODO: Revision Control*/
+
+				case 'BoundSheet8': {
+					Directory[val.pos] = val;
+					opts.snames.push(val.name);
+				} break;
+				case 'EOF': {
+					if(--file_depth) break;
+					if(range.e) {
+						out["!range"] = range;
+						if(range.e.r > 0 && range.e.c > 0) {
+							range.e.r--; range.e.c--;
+							out["!ref"] = encode_range(range);
+							range.e.r++; range.e.c++;
+						}
+						if(mergecells.length > 0) out["!merges"] = mergecells;
+						if(objects.length > 0) out["!objects"] = objects;
+					}
+					if(cur_sheet === "") Preamble = out; else Sheets[cur_sheet] = out;
+					out = {};
+				} break;
+				case 'BOF': {
+					if(opts.biff !== 8);
+					else if(val.BIFFVer === 0x0500) opts.biff = 5;
+					else if(val.BIFFVer === 0x0002) opts.biff = 2;
+					else if(val.BIFFVer === 0x0007) opts.biff = 2;
+					if(file_depth++) break;
+					cell_valid = true;
+					out = {};
+					if(opts.biff === 2) {
+						if(cur_sheet === "") cur_sheet = "Sheet1";
+						range = {s:{r:0,c:0},e:{r:0,c:0}};
+					}
+					else cur_sheet = (Directory[s] || {name:""}).name;
+					mergecells = [];
+					objects = [];
+				} break;
+				case 'Number': case 'BIFF2NUM': {
+					temp_val = {ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.val, t:'n'};
+					if(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904);
+					addcell({c:val.c, r:val.r}, temp_val, options);
+				} break;
+				case 'BoolErr': {
+					temp_val = {ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.val, t:val.t};
+					if(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904);
+					addcell({c:val.c, r:val.r}, temp_val, options);
+				} break;
+				case 'RK': {
+					temp_val = {ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.rknum, t:'n'};
+					if(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904);
+					addcell({c:val.c, r:val.r}, temp_val, options);
+				} break;
+				case 'MulRk': {
+					for(var j = val.c; j <= val.C; ++j) {
+						var ixfe = val.rkrec[j-val.c][0];
+						temp_val= {ixfe:ixfe, XF:XFs[ixfe], v:val.rkrec[j-val.c][1], t:'n'};
+						if(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904);
+						addcell({c:j, r:val.r}, temp_val, options);
+					}
+				} break;
+				case 'Formula': {
+					switch(val.val) {
+						case 'String': last_formula = val; break;
+						case 'Array Formula': throw "Array Formula unsupported";
+						default:
+							temp_val = {v:val.val, ixfe:val.cell.ixfe, t:val.tt};
+							temp_val.XF = XFs[temp_val.ixfe];
+							if(options.cellFormula) temp_val.f = "="+stringify_formula(val.formula,range,val.cell,supbooks, opts);
+							if(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904);
+							addcell(val.cell, temp_val, options);
+							last_formula = val;
+					}
+				} break;
+				case 'String': {
+					if(last_formula) {
+						last_formula.val = val;
+						temp_val = {v:last_formula.val, ixfe:last_formula.cell.ixfe, t:'s'};
+						temp_val.XF = XFs[temp_val.ixfe];
+						if(options.cellFormula) temp_val.f = "="+stringify_formula(last_formula.formula, range, last_formula.cell, supbooks, opts);
+						if(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904);
+						addcell(last_formula.cell, temp_val, options);
+						last_formula = null;
+					}
+				} break;
+				case 'Array': {
+					array_formulae.push(val);
+				} break;
+				case 'ShrFmla': {
+					if(!cell_valid) break;
+					//if(options.cellFormula) out[last_cell].f = stringify_formula(val[0], range, lastcell, supbooks, opts);
+					/* TODO: capture range */
+					shared_formulae[encode_cell(last_formula.cell)]= val[0];
+				} break;
+				case 'LabelSst':
+					//temp_val={v:sst[val.isst].t, ixfe:val.ixfe, t:'s'};
+					temp_val=make_cell(sst[val.isst].t, val.ixfe, 's');
+					temp_val.XF = XFs[temp_val.ixfe];
+					if(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904);
+					addcell({c:val.c, r:val.r}, temp_val, options);
+					break;
+				case 'Label': case 'BIFF2STR':
+					/* Some writers erroneously write Label */
+					temp_val=make_cell(val.val, val.ixfe, 's');
+					temp_val.XF = XFs[temp_val.ixfe];
+					if(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904);
+					addcell({c:val.c, r:val.r}, temp_val, options);
+					break;
+				case 'Dimensions': {
+					if(file_depth === 1) range = val; /* TODO: stack */
+				} break;
+				case 'SST': {
+					sst = val;
+				} break;
+				case 'Format': { /* val = [id, fmt] */
+					SSF.load(val[1], val[0]);
+				} break;
+
+				case 'MergeCells': mergecells = mergecells.concat(val); break;
+
+				case 'Obj': objects[val.cmo[0]] = opts.lastobj = val; break;
+				case 'TxO': opts.lastobj.TxO = val; break;
+
+				case 'HLink': {
+					for(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)
+						for(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC)
+							if(out[encode_cell({c:rngC,r:rngR})])
+								out[encode_cell({c:rngC,r:rngR})].l = val[1];
+				} break;
+				case 'HLinkTooltip': {
+					for(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)
+						for(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC)
+							if(out[encode_cell({c:rngC,r:rngR})])
+								out[encode_cell({c:rngC,r:rngR})].l.tooltip = val[1];
+				} break;
+
+				/* Comments */
+				case 'Note': {
+					if(opts.biff <= 5 && opts.biff >= 2) break; /* TODO: BIFF5 */
+					cc = out[encode_cell(val[0])];
+					var noteobj = objects[val[2]];
+					if(!cc) break;
+					if(!cc.c) cc.c = [];
+					cmnt = {a:val[1],t:noteobj.TxO.t};
+					cc.c.push(cmnt);
+				} break;
+
+				default: switch(R.n) { /* nested */
+				case 'ClrtClient': break;
+				case 'XFExt': update_xfext(XFs[val.ixfe], val.ext); break;
+
+				case 'NameCmt': break;
+				case 'Header': break; // TODO
+				case 'Footer': break; // TODO
+				case 'HCenter': break; // TODO
+				case 'VCenter': break; // TODO
+				case 'Pls': break; // TODO
+				case 'Setup': break; // TODO
+				case 'DefColWidth': break; // TODO
+				case 'GCW': break;
+				case 'LHRecord': break;
+				case 'ColInfo': break; // TODO
+				case 'Row': break; // TODO
+				case 'DBCell': break; // TODO
+				case 'MulBlank': break; // TODO
+				case 'EntExU2': break; // TODO
+				case 'SxView': break; // TODO
+				case 'Sxvd': break; // TODO
+				case 'SXVI': break; // TODO
+				case 'SXVDEx': break; // TODO
+				case 'SxIvd': break; // TODO
+				case 'SXDI': break; // TODO
+				case 'SXLI': break; // TODO
+				case 'SXEx': break; // TODO
+				case 'QsiSXTag': break; // TODO
+				case 'Selection': break;
+				case 'Feat': break;
+				case 'FeatHdr': case 'FeatHdr11': break;
+				case 'Feature11': case 'Feature12': case 'List12': break;
+				case 'Blank': break;
+				case 'Country': country = val; break;
+				case 'RecalcId': break;
+				case 'DefaultRowHeight': case 'DxGCol': break; // TODO: htmlify
+				case 'Fbi': case 'Fbi2': case 'GelFrame': break;
+				case 'Font': break; // TODO
+				case 'XFCRC': break; // TODO
+				case 'Style': break; // TODO
+				case 'StyleExt': break; // TODO
+				case 'Palette': palette = val; break; // TODO
+				case 'Theme': break; // TODO
+				/* Protection */
+				case 'ScenarioProtect': break;
+				case 'ObjProtect': break;
+
+				/* Conditional Formatting */
+				case 'CondFmt12': break;
+
+				/* Table */
+				case 'Table': break; // TODO
+				case 'TableStyles': break; // TODO
+				case 'TableStyle': break; // TODO
+				case 'TableStyleElement': break; // TODO
+
+				/* PivotTable */
+				case 'SXStreamID': break; // TODO
+				case 'SXVS': break; // TODO
+				case 'DConRef': break; // TODO
+				case 'SXAddl': break; // TODO
+				case 'DConBin': break; // TODO
+				case 'DConName': break; // TODO
+				case 'SXPI': break; // TODO
+				case 'SxFormat': break; // TODO
+				case 'SxSelect': break; // TODO
+				case 'SxRule': break; // TODO
+				case 'SxFilt': break; // TODO
+				case 'SxItm': break; // TODO
+				case 'SxDXF': break; // TODO
+
+				/* Scenario Manager */
+				case 'ScenMan': break;
+
+				/* Data Consolidation */
+				case 'DCon': break;
+
+				/* Watched Cell */
+				case 'CellWatch': break;
+
+				/* Print Settings */
+				case 'PrintRowCol': break;
+				case 'PrintGrid': break;
+				case 'PrintSize': break;
+
+				case 'XCT': break;
+				case 'CRN': break;
+
+				case 'Scl': {
+					//console.log("Zoom Level:", val[0]/val[1],val);
+				} break;
+				case 'SheetExt': {
+
+				} break;
+				case 'SheetExtOptional': {
+
+				} break;
+
+				/* VBA */
+				case 'ObNoMacros': {
+
+				} break;
+				case 'ObProj': {
+
+				} break;
+				case 'CodeName': {
+
+				} break;
+				case 'GUIDTypeLib': {
+
+				} break;
+
+				case 'WOpt': break; // TODO: WTF?
+				case 'PhoneticInfo': break;
+
+				case 'OleObjectSize': break;
+
+				/* Differential Formatting */
+				case 'DXF': case 'DXFN': case 'DXFN12': case 'DXFN12List': case 'DXFN12NoCB': break;
+
+				/* Data Validation */
+				case 'Dv': case 'DVal': break;
+
+				/* Data Series */
+				case 'BRAI': case 'Series': case 'SeriesText': break;
+
+				/* Data Connection */
+				case 'DConn': break;
+				case 'DbOrParamQry': break;
+				case 'DBQueryExt': break;
+
+				/* Formatting */
+				case 'IFmtRecord': break;
+				case 'CondFmt': case 'CF': case 'CF12': case 'CFEx': break;
+
+				/* Explicitly Ignored */
+				case 'Excel9File': break;
+				case 'Units': break;
+				case 'InterfaceHdr': case 'Mms': case 'InterfaceEnd': case 'DSF': case 'BuiltInFnGroupCount':
+				/* View Stuff */
+				case 'Window1': case 'Window2': case 'HideObj': case 'GridSet': case 'Guts':
+				case 'UserBView': case 'UserSViewBegin': case 'UserSViewEnd':
+				case 'Pane': break;
+				default: switch(R.n) { /* nested */
+				/* Chart */
+				case 'Dat':
+				case 'Begin': case 'End':
+				case 'StartBlock': case 'EndBlock':
+				case 'Frame': case 'Area':
+				case 'Axis': case 'AxisLine': case 'Tick': break;
+				case 'AxesUsed':
+				case 'CrtLayout12': case 'CrtLayout12A': case 'CrtLink': case 'CrtLine': case 'CrtMlFrt': case 'CrtMlFrtContinue': break;
+				case 'LineFormat': case 'AreaFormat':
+				case 'Chart': case 'Chart3d': case 'Chart3DBarShape': case 'ChartFormat': case 'ChartFrtInfo': break;
+				case 'PlotArea': case 'PlotGrowth': break;
+				case 'SeriesList': case 'SerParent': case 'SerAuxTrend': break;
+				case 'DataFormat': case 'SerToCrt': case 'FontX': break;
+				case 'CatSerRange': case 'AxcExt': case 'SerFmt': break;
+				case 'ShtProps': break;
+				case 'DefaultText': case 'Text': case 'CatLab': break;
+				case 'DataLabExtContents': break;
+				case 'Legend': case 'LegendException': break;
+				case 'Pie': case 'Scatter': break;
+				case 'PieFormat': case 'MarkerFormat': break;
+				case 'StartObject': case 'EndObject': break;
+				case 'AlRuns': case 'ObjectLink': break;
+				case 'SIIndex': break;
+				case 'AttachedLabel': case 'YMult': break;
+
+				/* Chart Group */
+				case 'Line': case 'Bar': break;
+				case 'Surf': break;
+
+				/* Axis Group */
+				case 'AxisParent': break;
+				case 'Pos': break;
+				case 'ValueRange': break;
+
+				/* Pivot Chart */
+				case 'SXViewEx9': break; // TODO
+				case 'SXViewLink': break;
+				case 'PivotChartBits': break;
+				case 'SBaseRef': break;
+				case 'TextPropsStream': break;
+
+				/* Chart Misc */
+				case 'LnExt': break;
+				case 'MkrExt': break;
+				case 'CrtCoopt': break;
+
+				/* Query Table */
+				case 'Qsi': case 'Qsif': case 'Qsir': case 'QsiSXTag': break;
+				case 'TxtQry': break;
+
+				/* Filter */
+				case 'FilterMode': break;
+				case 'AutoFilter': case 'AutoFilterInfo': break;
+				case 'AutoFilter12': break;
+				case 'DropDownObjIds': break;
+				case 'Sort': break;
+				case 'SortData': break;
+
+				/* Drawing */
+				case 'ShapePropsStream': break;
+				case 'MsoDrawing': case 'MsoDrawingGroup': case 'MsoDrawingSelection': break;
+				case 'ImData': break;
+				/* Pub Stuff */
+				case 'WebPub': case 'AutoWebPub':
+
+				/* Print Stuff */
+				case 'RightMargin': case 'LeftMargin': case 'TopMargin': case 'BottomMargin':
+				case 'HeaderFooter': case 'HFPicture': case 'PLV':
+				case 'HorizontalPageBreaks': case 'VerticalPageBreaks':
+				/* Behavioral */
+				case 'Backup': case 'CompressPictures': case 'Compat12': break;
+
+				/* Should not Happen */
+				case 'Continue': case 'ContinueFrt12': break;
+
+				/* Future Records */
+				case 'FrtFontList': case 'FrtWrapper': break;
+
+				/* BIFF5 records */
+				case 'ExternCount': break;
+				case 'RString': break;
+				case 'TabIdConf': case 'Radar': case 'RadarArea': case 'DropBar': case 'Intl': case 'CoordList': case 'SerAuxErrBar': break;
+
+				default: switch(R.n) { /* nested */
+				/* Miscellaneous */
+				case 'SCENARIO': case 'DConBin': case 'PicF': case 'DataLabExt':
+				case 'Lel': case 'BopPop': case 'BopPopCustom': case 'RealTimeData':
+				case 'Name': break;
+				default: if(options.WTF) throw 'Unrecognized Record ' + R.n;
+			}}}}
+		} else blob.l += length;
+	}
+	var sheetnamesraw = opts.biff === 2 ? ['Sheet1'] : Object.keys(Directory).sort(function(a,b) { return Number(a) - Number(b); }).map(function(x){return Directory[x].name;});
+	var sheetnames = sheetnamesraw.slice();
+	wb.Directory=sheetnamesraw;
+	wb.SheetNames=sheetnamesraw;
+	if(!options.bookSheets) wb.Sheets=Sheets;
+	wb.Preamble=Preamble;
+	wb.Strings = sst;
+	wb.SSF = SSF.get_table();
+	if(opts.enc) wb.Encryption = opts.enc;
+	wb.Metadata = {};
+	if(country !== undefined) wb.Metadata.Country = country;
+	return wb;
+}
+
+function parse_xlscfb(cfb, options) {
+if(!options) options = {};
+fix_read_opts(options);
+reset_cp();
+var CompObj, Summary, Workbook;
+if(cfb.find) {
+	CompObj = cfb.find('!CompObj');
+	Summary = cfb.find('!SummaryInformation');
+	Workbook = cfb.find('/Workbook');
+} else {
+	prep_blob(cfb, 0);
+	Workbook = {content: cfb};
+}
+
+if(!Workbook) Workbook = cfb.find('/Book');
+var CompObjP, SummaryP, WorkbookP;
+
+if(CompObj) CompObjP = parse_compobj(CompObj);
+if(options.bookProps && !options.bookSheets) WorkbookP = {};
+else {
+	if(Workbook) WorkbookP = parse_workbook(Workbook.content, options, !!Workbook.find);
+	else throw new Error("Cannot find Workbook stream");
+}
+
+if(cfb.find) parse_props(cfb);
+
+var props = {};
+for(var y in cfb.Summary) props[y] = cfb.Summary[y];
+for(y in cfb.DocSummary) props[y] = cfb.DocSummary[y];
+WorkbookP.Props = WorkbookP.Custprops = props; /* TODO: split up properties */
+if(options.bookFiles) WorkbookP.cfb = cfb;
+WorkbookP.CompObjP = CompObjP;
+return WorkbookP;
+}
+
+/* TODO: WTF */
+function parse_props(cfb) {
+	/* [MS-OSHARED] 2.3.3.2.2 Document Summary Information Property Set */
+	var DSI = cfb.find('!DocumentSummaryInformation');
+	if(DSI) try { cfb.DocSummary = parse_PropertySetStream(DSI, DocSummaryPIDDSI); } catch(e) {}
+
+	/* [MS-OSHARED] 2.3.3.2.1 Summary Information Property Set*/
+	var SI = cfb.find('!SummaryInformation');
+	if(SI) try { cfb.Summary = parse_PropertySetStream(SI, SummaryPIDSI); } catch(e) {}
+}
+
+/* [MS-XLSB] 2.3 Record Enumeration */
+var XLSBRecordEnum = {
+	0x0000: { n:"BrtRowHdr", f:parse_BrtRowHdr },
+	0x0001: { n:"BrtCellBlank", f:parse_BrtCellBlank },
+	0x0002: { n:"BrtCellRk", f:parse_BrtCellRk },
+	0x0003: { n:"BrtCellError", f:parse_BrtCellError },
+	0x0004: { n:"BrtCellBool", f:parse_BrtCellBool },
+	0x0005: { n:"BrtCellReal", f:parse_BrtCellReal },
+	0x0006: { n:"BrtCellSt", f:parse_BrtCellSt },
+	0x0007: { n:"BrtCellIsst", f:parse_BrtCellIsst },
+	0x0008: { n:"BrtFmlaString", f:parse_BrtFmlaString },
+	0x0009: { n:"BrtFmlaNum", f:parse_BrtFmlaNum },
+	0x000A: { n:"BrtFmlaBool", f:parse_BrtFmlaBool },
+	0x000B: { n:"BrtFmlaError", f:parse_BrtFmlaError },
+	0x0010: { n:"BrtFRTArchID$", f:parse_BrtFRTArchID$ },
+	0x0013: { n:"BrtSSTItem", f:parse_RichStr },
+	0x0014: { n:"BrtPCDIMissing", f:parsenoop },
+	0x0015: { n:"BrtPCDINumber", f:parsenoop },
+	0x0016: { n:"BrtPCDIBoolean", f:parsenoop },
+	0x0017: { n:"BrtPCDIError", f:parsenoop },
+	0x0018: { n:"BrtPCDIString", f:parsenoop },
+	0x0019: { n:"BrtPCDIDatetime", f:parsenoop },
+	0x001A: { n:"BrtPCDIIndex", f:parsenoop },
+	0x001B: { n:"BrtPCDIAMissing", f:parsenoop },
+	0x001C: { n:"BrtPCDIANumber", f:parsenoop },
+	0x001D: { n:"BrtPCDIABoolean", f:parsenoop },
+	0x001E: { n:"BrtPCDIAError", f:parsenoop },
+	0x001F: { n:"BrtPCDIAString", f:parsenoop },
+	0x0020: { n:"BrtPCDIADatetime", f:parsenoop },
+	0x0021: { n:"BrtPCRRecord", f:parsenoop },
+	0x0022: { n:"BrtPCRRecordDt", f:parsenoop },
+	0x0023: { n:"BrtFRTBegin", f:parsenoop },
+	0x0024: { n:"BrtFRTEnd", f:parsenoop },
+	0x0025: { n:"BrtACBegin", f:parsenoop },
+	0x0026: { n:"BrtACEnd", f:parsenoop },
+	0x0027: { n:"BrtName", f:parsenoop },
+	0x0028: { n:"BrtIndexRowBlock", f:parsenoop },
+	0x002A: { n:"BrtIndexBlock", f:parsenoop },
+	0x002B: { n:"BrtFont", f:parse_BrtFont },
+	0x002C: { n:"BrtFmt", f:parse_BrtFmt },
+	0x002D: { n:"BrtFill", f:parsenoop },
+	0x002E: { n:"BrtBorder", f:parsenoop },
+	0x002F: { n:"BrtXF", f:parse_BrtXF },
+	0x0030: { n:"BrtStyle", f:parsenoop },
+	0x0031: { n:"BrtCellMeta", f:parsenoop },
+	0x0032: { n:"BrtValueMeta", f:parsenoop },
+	0x0033: { n:"BrtMdb", f:parsenoop },
+	0x0034: { n:"BrtBeginFmd", f:parsenoop },
+	0x0035: { n:"BrtEndFmd", f:parsenoop },
+	0x0036: { n:"BrtBeginMdx", f:parsenoop },
+	0x0037: { n:"BrtEndMdx", f:parsenoop },
+	0x0038: { n:"BrtBeginMdxTuple", f:parsenoop },
+	0x0039: { n:"BrtEndMdxTuple", f:parsenoop },
+	0x003A: { n:"BrtMdxMbrIstr", f:parsenoop },
+	0x003B: { n:"BrtStr", f:parsenoop },
+	0x003C: { n:"BrtColInfo", f:parsenoop },
+	0x003E: { n:"BrtCellRString", f:parsenoop },
+	0x003F: { n:"BrtCalcChainItem$", f:parse_BrtCalcChainItem$ },
+	0x0040: { n:"BrtDVal", f:parsenoop },
+	0x0041: { n:"BrtSxvcellNum", f:parsenoop },
+	0x0042: { n:"BrtSxvcellStr", f:parsenoop },
+	0x0043: { n:"BrtSxvcellBool", f:parsenoop },
+	0x0044: { n:"BrtSxvcellErr", f:parsenoop },
+	0x0045: { n:"BrtSxvcellDate", f:parsenoop },
+	0x0046: { n:"BrtSxvcellNil", f:parsenoop },
+	0x0080: { n:"BrtFileVersion", f:parsenoop },
+	0x0081: { n:"BrtBeginSheet", f:parsenoop },
+	0x0082: { n:"BrtEndSheet", f:parsenoop },
+	0x0083: { n:"BrtBeginBook", f:parsenoop, p:0 },
+	0x0084: { n:"BrtEndBook", f:parsenoop },
+	0x0085: { n:"BrtBeginWsViews", f:parsenoop },
+	0x0086: { n:"BrtEndWsViews", f:parsenoop },
+	0x0087: { n:"BrtBeginBookViews", f:parsenoop },
+	0x0088: { n:"BrtEndBookViews", f:parsenoop },
+	0x0089: { n:"BrtBeginWsView", f:parsenoop },
+	0x008A: { n:"BrtEndWsView", f:parsenoop },
+	0x008B: { n:"BrtBeginCsViews", f:parsenoop },
+	0x008C: { n:"BrtEndCsViews", f:parsenoop },
+	0x008D: { n:"BrtBeginCsView", f:parsenoop },
+	0x008E: { n:"BrtEndCsView", f:parsenoop },
+	0x008F: { n:"BrtBeginBundleShs", f:parsenoop },
+	0x0090: { n:"BrtEndBundleShs", f:parsenoop },
+	0x0091: { n:"BrtBeginSheetData", f:parsenoop },
+	0x0092: { n:"BrtEndSheetData", f:parsenoop },
+	0x0093: { n:"BrtWsProp", f:parse_BrtWsProp },
+	0x0094: { n:"BrtWsDim", f:parse_BrtWsDim, p:16 },
+	0x0097: { n:"BrtPane", f:parsenoop },
+	0x0098: { n:"BrtSel", f:parsenoop },
+	0x0099: { n:"BrtWbProp", f:parse_BrtWbProp },
+	0x009A: { n:"BrtWbFactoid", f:parsenoop },
+	0x009B: { n:"BrtFileRecover", f:parsenoop },
+	0x009C: { n:"BrtBundleSh", f:parse_BrtBundleSh },
+	0x009D: { n:"BrtCalcProp", f:parsenoop },
+	0x009E: { n:"BrtBookView", f:parsenoop },
+	0x009F: { n:"BrtBeginSst", f:parse_BrtBeginSst },
+	0x00A0: { n:"BrtEndSst", f:parsenoop },
+	0x00A1: { n:"BrtBeginAFilter", f:parsenoop },
+	0x00A2: { n:"BrtEndAFilter", f:parsenoop },
+	0x00A3: { n:"BrtBeginFilterColumn", f:parsenoop },
+	0x00A4: { n:"BrtEndFilterColumn", f:parsenoop },
+	0x00A5: { n:"BrtBeginFilters", f:parsenoop },
+	0x00A6: { n:"BrtEndFilters", f:parsenoop },
+	0x00A7: { n:"BrtFilter", f:parsenoop },
+	0x00A8: { n:"BrtColorFilter", f:parsenoop },
+	0x00A9: { n:"BrtIconFilter", f:parsenoop },
+	0x00AA: { n:"BrtTop10Filter", f:parsenoop },
+	0x00AB: { n:"BrtDynamicFilter", f:parsenoop },
+	0x00AC: { n:"BrtBeginCustomFilters", f:parsenoop },
+	0x00AD: { n:"BrtEndCustomFilters", f:parsenoop },
+	0x00AE: { n:"BrtCustomFilter", f:parsenoop },
+	0x00AF: { n:"BrtAFilterDateGroupItem", f:parsenoop },
+	0x00B0: { n:"BrtMergeCell", f:parse_BrtMergeCell },
+	0x00B1: { n:"BrtBeginMergeCells", f:parsenoop },
+	0x00B2: { n:"BrtEndMergeCells", f:parsenoop },
+	0x00B3: { n:"BrtBeginPivotCacheDef", f:parsenoop },
+	0x00B4: { n:"BrtEndPivotCacheDef", f:parsenoop },
+	0x00B5: { n:"BrtBeginPCDFields", f:parsenoop },
+	0x00B6: { n:"BrtEndPCDFields", f:parsenoop },
+	0x00B7: { n:"BrtBeginPCDField", f:parsenoop },
+	0x00B8: { n:"BrtEndPCDField", f:parsenoop },
+	0x00B9: { n:"BrtBeginPCDSource", f:parsenoop },
+	0x00BA: { n:"BrtEndPCDSource", f:parsenoop },
+	0x00BB: { n:"BrtBeginPCDSRange", f:parsenoop },
+	0x00BC: { n:"BrtEndPCDSRange", f:parsenoop },
+	0x00BD: { n:"BrtBeginPCDFAtbl", f:parsenoop },
+	0x00BE: { n:"BrtEndPCDFAtbl", f:parsenoop },
+	0x00BF: { n:"BrtBeginPCDIRun", f:parsenoop },
+	0x00C0: { n:"BrtEndPCDIRun", f:parsenoop },
+	0x00C1: { n:"BrtBeginPivotCacheRecords", f:parsenoop },
+	0x00C2: { n:"BrtEndPivotCacheRecords", f:parsenoop },
+	0x00C3: { n:"BrtBeginPCDHierarchies", f:parsenoop },
+	0x00C4: { n:"BrtEndPCDHierarchies", f:parsenoop },
+	0x00C5: { n:"BrtBeginPCDHierarchy", f:parsenoop },
+	0x00C6: { n:"BrtEndPCDHierarchy", f:parsenoop },
+	0x00C7: { n:"BrtBeginPCDHFieldsUsage", f:parsenoop },
+	0x00C8: { n:"BrtEndPCDHFieldsUsage", f:parsenoop },
+	0x00C9: { n:"BrtBeginExtConnection", f:parsenoop },
+	0x00CA: { n:"BrtEndExtConnection", f:parsenoop },
+	0x00CB: { n:"BrtBeginECDbProps", f:parsenoop },
+	0x00CC: { n:"BrtEndECDbProps", f:parsenoop },
+	0x00CD: { n:"BrtBeginECOlapProps", f:parsenoop },
+	0x00CE: { n:"BrtEndECOlapProps", f:parsenoop },
+	0x00CF: { n:"BrtBeginPCDSConsol", f:parsenoop },
+	0x00D0: { n:"BrtEndPCDSConsol", f:parsenoop },
+	0x00D1: { n:"BrtBeginPCDSCPages", f:parsenoop },
+	0x00D2: { n:"BrtEndPCDSCPages", f:parsenoop },
+	0x00D3: { n:"BrtBeginPCDSCPage", f:parsenoop },
+	0x00D4: { n:"BrtEndPCDSCPage", f:parsenoop },
+	0x00D5: { n:"BrtBeginPCDSCPItem", f:parsenoop },
+	0x00D6: { n:"BrtEndPCDSCPItem", f:parsenoop },
+	0x00D7: { n:"BrtBeginPCDSCSets", f:parsenoop },
+	0x00D8: { n:"BrtEndPCDSCSets", f:parsenoop },
+	0x00D9: { n:"BrtBeginPCDSCSet", f:parsenoop },
+	0x00DA: { n:"BrtEndPCDSCSet", f:parsenoop },
+	0x00DB: { n:"BrtBeginPCDFGroup", f:parsenoop },
+	0x00DC: { n:"BrtEndPCDFGroup", f:parsenoop },
+	0x00DD: { n:"BrtBeginPCDFGItems", f:parsenoop },
+	0x00DE: { n:"BrtEndPCDFGItems", f:parsenoop },
+	0x00DF: { n:"BrtBeginPCDFGRange", f:parsenoop },
+	0x00E0: { n:"BrtEndPCDFGRange", f:parsenoop },
+	0x00E1: { n:"BrtBeginPCDFGDiscrete", f:parsenoop },
+	0x00E2: { n:"BrtEndPCDFGDiscrete", f:parsenoop },
+	0x00E3: { n:"BrtBeginPCDSDTupleCache", f:parsenoop },
+	0x00E4: { n:"BrtEndPCDSDTupleCache", f:parsenoop },
+	0x00E5: { n:"BrtBeginPCDSDTCEntries", f:parsenoop },
+	0x00E6: { n:"BrtEndPCDSDTCEntries", f:parsenoop },
+	0x00E7: { n:"BrtBeginPCDSDTCEMembers", f:parsenoop },
+	0x00E8: { n:"BrtEndPCDSDTCEMembers", f:parsenoop },
+	0x00E9: { n:"BrtBeginPCDSDTCEMember", f:parsenoop },
+	0x00EA: { n:"BrtEndPCDSDTCEMember", f:parsenoop },
+	0x00EB: { n:"BrtBeginPCDSDTCQueries", f:parsenoop },
+	0x00EC: { n:"BrtEndPCDSDTCQueries", f:parsenoop },
+	0x00ED: { n:"BrtBeginPCDSDTCQuery", f:parsenoop },
+	0x00EE: { n:"BrtEndPCDSDTCQuery", f:parsenoop },
+	0x00EF: { n:"BrtBeginPCDSDTCSets", f:parsenoop },
+	0x00F0: { n:"BrtEndPCDSDTCSets", f:parsenoop },
+	0x00F1: { n:"BrtBeginPCDSDTCSet", f:parsenoop },
+	0x00F2: { n:"BrtEndPCDSDTCSet", f:parsenoop },
+	0x00F3: { n:"BrtBeginPCDCalcItems", f:parsenoop },
+	0x00F4: { n:"BrtEndPCDCalcItems", f:parsenoop },
+	0x00F5: { n:"BrtBeginPCDCalcItem", f:parsenoop },
+	0x00F6: { n:"BrtEndPCDCalcItem", f:parsenoop },
+	0x00F7: { n:"BrtBeginPRule", f:parsenoop },
+	0x00F8: { n:"BrtEndPRule", f:parsenoop },
+	0x00F9: { n:"BrtBeginPRFilters", f:parsenoop },
+	0x00FA: { n:"BrtEndPRFilters", f:parsenoop },
+	0x00FB: { n:"BrtBeginPRFilter", f:parsenoop },
+	0x00FC: { n:"BrtEndPRFilter", f:parsenoop },
+	0x00FD: { n:"BrtBeginPNames", f:parsenoop },
+	0x00FE: { n:"BrtEndPNames", f:parsenoop },
+	0x00FF: { n:"BrtBeginPName", f:parsenoop },
+	0x0100: { n:"BrtEndPName", f:parsenoop },
+	0x0101: { n:"BrtBeginPNPairs", f:parsenoop },
+	0x0102: { n:"BrtEndPNPairs", f:parsenoop },
+	0x0103: { n:"BrtBeginPNPair", f:parsenoop },
+	0x0104: { n:"BrtEndPNPair", f:parsenoop },
+	0x0105: { n:"BrtBeginECWebProps", f:parsenoop },
+	0x0106: { n:"BrtEndECWebProps", f:parsenoop },
+	0x0107: { n:"BrtBeginEcWpTables", f:parsenoop },
+	0x0108: { n:"BrtEndECWPTables", f:parsenoop },
+	0x0109: { n:"BrtBeginECParams", f:parsenoop },
+	0x010A: { n:"BrtEndECParams", f:parsenoop },
+	0x010B: { n:"BrtBeginECParam", f:parsenoop },
+	0x010C: { n:"BrtEndECParam", f:parsenoop },
+	0x010D: { n:"BrtBeginPCDKPIs", f:parsenoop },
+	0x010E: { n:"BrtEndPCDKPIs", f:parsenoop },
+	0x010F: { n:"BrtBeginPCDKPI", f:parsenoop },
+	0x0110: { n:"BrtEndPCDKPI", f:parsenoop },
+	0x0111: { n:"BrtBeginDims", f:parsenoop },
+	0x0112: { n:"BrtEndDims", f:parsenoop },
+	0x0113: { n:"BrtBeginDim", f:parsenoop },
+	0x0114: { n:"BrtEndDim", f:parsenoop },
+	0x0115: { n:"BrtIndexPartEnd", f:parsenoop },
+	0x0116: { n:"BrtBeginStyleSheet", f:parsenoop },
+	0x0117: { n:"BrtEndStyleSheet", f:parsenoop },
+	0x0118: { n:"BrtBeginSXView", f:parsenoop },
+	0x0119: { n:"BrtEndSXVI", f:parsenoop },
+	0x011A: { n:"BrtBeginSXVI", f:parsenoop },
+	0x011B: { n:"BrtBeginSXVIs", f:parsenoop },
+	0x011C: { n:"BrtEndSXVIs", f:parsenoop },
+	0x011D: { n:"BrtBeginSXVD", f:parsenoop },
+	0x011E: { n:"BrtEndSXVD", f:parsenoop },
+	0x011F: { n:"BrtBeginSXVDs", f:parsenoop },
+	0x0120: { n:"BrtEndSXVDs", f:parsenoop },
+	0x0121: { n:"BrtBeginSXPI", f:parsenoop },
+	0x0122: { n:"BrtEndSXPI", f:parsenoop },
+	0x0123: { n:"BrtBeginSXPIs", f:parsenoop },
+	0x0124: { n:"BrtEndSXPIs", f:parsenoop },
+	0x0125: { n:"BrtBeginSXDI", f:parsenoop },
+	0x0126: { n:"BrtEndSXDI", f:parsenoop },
+	0x0127: { n:"BrtBeginSXDIs", f:parsenoop },
+	0x0128: { n:"BrtEndSXDIs", f:parsenoop },
+	0x0129: { n:"BrtBeginSXLI", f:parsenoop },
+	0x012A: { n:"BrtEndSXLI", f:parsenoop },
+	0x012B: { n:"BrtBeginSXLIRws", f:parsenoop },
+	0x012C: { n:"BrtEndSXLIRws", f:parsenoop },
+	0x012D: { n:"BrtBeginSXLICols", f:parsenoop },
+	0x012E: { n:"BrtEndSXLICols", f:parsenoop },
+	0x012F: { n:"BrtBeginSXFormat", f:parsenoop },
+	0x0130: { n:"BrtEndSXFormat", f:parsenoop },
+	0x0131: { n:"BrtBeginSXFormats", f:parsenoop },
+	0x0132: { n:"BrtEndSxFormats", f:parsenoop },
+	0x0133: { n:"BrtBeginSxSelect", f:parsenoop },
+	0x0134: { n:"BrtEndSxSelect", f:parsenoop },
+	0x0135: { n:"BrtBeginISXVDRws", f:parsenoop },
+	0x0136: { n:"BrtEndISXVDRws", f:parsenoop },
+	0x0137: { n:"BrtBeginISXVDCols", f:parsenoop },
+	0x0138: { n:"BrtEndISXVDCols", f:parsenoop },
+	0x0139: { n:"BrtEndSXLocation", f:parsenoop },
+	0x013A: { n:"BrtBeginSXLocation", f:parsenoop },
+	0x013B: { n:"BrtEndSXView", f:parsenoop },
+	0x013C: { n:"BrtBeginSXTHs", f:parsenoop },
+	0x013D: { n:"BrtEndSXTHs", f:parsenoop },
+	0x013E: { n:"BrtBeginSXTH", f:parsenoop },
+	0x013F: { n:"BrtEndSXTH", f:parsenoop },
+	0x0140: { n:"BrtBeginISXTHRws", f:parsenoop },
+	0x0141: { n:"BrtEndISXTHRws", f:parsenoop },
+	0x0142: { n:"BrtBeginISXTHCols", f:parsenoop },
+	0x0143: { n:"BrtEndISXTHCols", f:parsenoop },
+	0x0144: { n:"BrtBeginSXTDMPS", f:parsenoop },
+	0x0145: { n:"BrtEndSXTDMPs", f:parsenoop },
+	0x0146: { n:"BrtBeginSXTDMP", f:parsenoop },
+	0x0147: { n:"BrtEndSXTDMP", f:parsenoop },
+	0x0148: { n:"BrtBeginSXTHItems", f:parsenoop },
+	0x0149: { n:"BrtEndSXTHItems", f:parsenoop },
+	0x014A: { n:"BrtBeginSXTHItem", f:parsenoop },
+	0x014B: { n:"BrtEndSXTHItem", f:parsenoop },
+	0x014C: { n:"BrtBeginMetadata", f:parsenoop },
+	0x014D: { n:"BrtEndMetadata", f:parsenoop },
+	0x014E: { n:"BrtBeginEsmdtinfo", f:parsenoop },
+	0x014F: { n:"BrtMdtinfo", f:parsenoop },
+	0x0150: { n:"BrtEndEsmdtinfo", f:parsenoop },
+	0x0151: { n:"BrtBeginEsmdb", f:parsenoop },
+	0x0152: { n:"BrtEndEsmdb", f:parsenoop },
+	0x0153: { n:"BrtBeginEsfmd", f:parsenoop },
+	0x0154: { n:"BrtEndEsfmd", f:parsenoop },
+	0x0155: { n:"BrtBeginSingleCells", f:parsenoop },
+	0x0156: { n:"BrtEndSingleCells", f:parsenoop },
+	0x0157: { n:"BrtBeginList", f:parsenoop },
+	0x0158: { n:"BrtEndList", f:parsenoop },
+	0x0159: { n:"BrtBeginListCols", f:parsenoop },
+	0x015A: { n:"BrtEndListCols", f:parsenoop },
+	0x015B: { n:"BrtBeginListCol", f:parsenoop },
+	0x015C: { n:"BrtEndListCol", f:parsenoop },
+	0x015D: { n:"BrtBeginListXmlCPr", f:parsenoop },
+	0x015E: { n:"BrtEndListXmlCPr", f:parsenoop },
+	0x015F: { n:"BrtListCCFmla", f:parsenoop },
+	0x0160: { n:"BrtListTrFmla", f:parsenoop },
+	0x0161: { n:"BrtBeginExternals", f:parsenoop },
+	0x0162: { n:"BrtEndExternals", f:parsenoop },
+	0x0163: { n:"BrtSupBookSrc", f:parsenoop },
+	0x0165: { n:"BrtSupSelf", f:parsenoop },
+	0x0166: { n:"BrtSupSame", f:parsenoop },
+	0x0167: { n:"BrtSupTabs", f:parsenoop },
+	0x0168: { n:"BrtBeginSupBook", f:parsenoop },
+	0x0169: { n:"BrtPlaceholderName", f:parsenoop },
+	0x016A: { n:"BrtExternSheet", f:parsenoop },
+	0x016B: { n:"BrtExternTableStart", f:parsenoop },
+	0x016C: { n:"BrtExternTableEnd", f:parsenoop },
+	0x016E: { n:"BrtExternRowHdr", f:parsenoop },
+	0x016F: { n:"BrtExternCellBlank", f:parsenoop },
+	0x0170: { n:"BrtExternCellReal", f:parsenoop },
+	0x0171: { n:"BrtExternCellBool", f:parsenoop },
+	0x0172: { n:"BrtExternCellError", f:parsenoop },
+	0x0173: { n:"BrtExternCellString", f:parsenoop },
+	0x0174: { n:"BrtBeginEsmdx", f:parsenoop },
+	0x0175: { n:"BrtEndEsmdx", f:parsenoop },
+	0x0176: { n:"BrtBeginMdxSet", f:parsenoop },
+	0x0177: { n:"BrtEndMdxSet", f:parsenoop },
+	0x0178: { n:"BrtBeginMdxMbrProp", f:parsenoop },
+	0x0179: { n:"BrtEndMdxMbrProp", f:parsenoop },
+	0x017A: { n:"BrtBeginMdxKPI", f:parsenoop },
+	0x017B: { n:"BrtEndMdxKPI", f:parsenoop },
+	0x017C: { n:"BrtBeginEsstr", f:parsenoop },
+	0x017D: { n:"BrtEndEsstr", f:parsenoop },
+	0x017E: { n:"BrtBeginPRFItem", f:parsenoop },
+	0x017F: { n:"BrtEndPRFItem", f:parsenoop },
+	0x0180: { n:"BrtBeginPivotCacheIDs", f:parsenoop },
+	0x0181: { n:"BrtEndPivotCacheIDs", f:parsenoop },
+	0x0182: { n:"BrtBeginPivotCacheID", f:parsenoop },
+	0x0183: { n:"BrtEndPivotCacheID", f:parsenoop },
+	0x0184: { n:"BrtBeginISXVIs", f:parsenoop },
+	0x0185: { n:"BrtEndISXVIs", f:parsenoop },
+	0x0186: { n:"BrtBeginColInfos", f:parsenoop },
+	0x0187: { n:"BrtEndColInfos", f:parsenoop },
+	0x0188: { n:"BrtBeginRwBrk", f:parsenoop },
+	0x0189: { n:"BrtEndRwBrk", f:parsenoop },
+	0x018A: { n:"BrtBeginColBrk", f:parsenoop },
+	0x018B: { n:"BrtEndColBrk", f:parsenoop },
+	0x018C: { n:"BrtBrk", f:parsenoop },
+	0x018D: { n:"BrtUserBookView", f:parsenoop },
+	0x018E: { n:"BrtInfo", f:parsenoop },
+	0x018F: { n:"BrtCUsr", f:parsenoop },
+	0x0190: { n:"BrtUsr", f:parsenoop },
+	0x0191: { n:"BrtBeginUsers", f:parsenoop },
+	0x0193: { n:"BrtEOF", f:parsenoop },
+	0x0194: { n:"BrtUCR", f:parsenoop },
+	0x0195: { n:"BrtRRInsDel", f:parsenoop },
+	0x0196: { n:"BrtRREndInsDel", f:parsenoop },
+	0x0197: { n:"BrtRRMove", f:parsenoop },
+	0x0198: { n:"BrtRREndMove", f:parsenoop },
+	0x0199: { n:"BrtRRChgCell", f:parsenoop },
+	0x019A: { n:"BrtRREndChgCell", f:parsenoop },
+	0x019B: { n:"BrtRRHeader", f:parsenoop },
+	0x019C: { n:"BrtRRUserView", f:parsenoop },
+	0x019D: { n:"BrtRRRenSheet", f:parsenoop },
+	0x019E: { n:"BrtRRInsertSh", f:parsenoop },
+	0x019F: { n:"BrtRRDefName", f:parsenoop },
+	0x01A0: { n:"BrtRRNote", f:parsenoop },
+	0x01A1: { n:"BrtRRConflict", f:parsenoop },
+	0x01A2: { n:"BrtRRTQSIF", f:parsenoop },
+	0x01A3: { n:"BrtRRFormat", f:parsenoop },
+	0x01A4: { n:"BrtRREndFormat", f:parsenoop },
+	0x01A5: { n:"BrtRRAutoFmt", f:parsenoop },
+	0x01A6: { n:"BrtBeginUserShViews", f:parsenoop },
+	0x01A7: { n:"BrtBeginUserShView", f:parsenoop },
+	0x01A8: { n:"BrtEndUserShView", f:parsenoop },
+	0x01A9: { n:"BrtEndUserShViews", f:parsenoop },
+	0x01AA: { n:"BrtArrFmla", f:parsenoop },
+	0x01AB: { n:"BrtShrFmla", f:parsenoop },
+	0x01AC: { n:"BrtTable", f:parsenoop },
+	0x01AD: { n:"BrtBeginExtConnections", f:parsenoop },
+	0x01AE: { n:"BrtEndExtConnections", f:parsenoop },
+	0x01AF: { n:"BrtBeginPCDCalcMems", f:parsenoop },
+	0x01B0: { n:"BrtEndPCDCalcMems", f:parsenoop },
+	0x01B1: { n:"BrtBeginPCDCalcMem", f:parsenoop },
+	0x01B2: { n:"BrtEndPCDCalcMem", f:parsenoop },
+	0x01B3: { n:"BrtBeginPCDHGLevels", f:parsenoop },
+	0x01B4: { n:"BrtEndPCDHGLevels", f:parsenoop },
+	0x01B5: { n:"BrtBeginPCDHGLevel", f:parsenoop },
+	0x01B6: { n:"BrtEndPCDHGLevel", f:parsenoop },
+	0x01B7: { n:"BrtBeginPCDHGLGroups", f:parsenoop },
+	0x01B8: { n:"BrtEndPCDHGLGroups", f:parsenoop },
+	0x01B9: { n:"BrtBeginPCDHGLGroup", f:parsenoop },
+	0x01BA: { n:"BrtEndPCDHGLGroup", f:parsenoop },
+	0x01BB: { n:"BrtBeginPCDHGLGMembers", f:parsenoop },
+	0x01BC: { n:"BrtEndPCDHGLGMembers", f:parsenoop },
+	0x01BD: { n:"BrtBeginPCDHGLGMember", f:parsenoop },
+	0x01BE: { n:"BrtEndPCDHGLGMember", f:parsenoop },
+	0x01BF: { n:"BrtBeginQSI", f:parsenoop },
+	0x01C0: { n:"BrtEndQSI", f:parsenoop },
+	0x01C1: { n:"BrtBeginQSIR", f:parsenoop },
+	0x01C2: { n:"BrtEndQSIR", f:parsenoop },
+	0x01C3: { n:"BrtBeginDeletedNames", f:parsenoop },
+	0x01C4: { n:"BrtEndDeletedNames", f:parsenoop },
+	0x01C5: { n:"BrtBeginDeletedName", f:parsenoop },
+	0x01C6: { n:"BrtEndDeletedName", f:parsenoop },
+	0x01C7: { n:"BrtBeginQSIFs", f:parsenoop },
+	0x01C8: { n:"BrtEndQSIFs", f:parsenoop },
+	0x01C9: { n:"BrtBeginQSIF", f:parsenoop },
+	0x01CA: { n:"BrtEndQSIF", f:parsenoop },
+	0x01CB: { n:"BrtBeginAutoSortScope", f:parsenoop },
+	0x01CC: { n:"BrtEndAutoSortScope", f:parsenoop },
+	0x01CD: { n:"BrtBeginConditionalFormatting", f:parsenoop },
+	0x01CE: { n:"BrtEndConditionalFormatting", f:parsenoop },
+	0x01CF: { n:"BrtBeginCFRule", f:parsenoop },
+	0x01D0: { n:"BrtEndCFRule", f:parsenoop },
+	0x01D1: { n:"BrtBeginIconSet", f:parsenoop },
+	0x01D2: { n:"BrtEndIconSet", f:parsenoop },
+	0x01D3: { n:"BrtBeginDatabar", f:parsenoop },
+	0x01D4: { n:"BrtEndDatabar", f:parsenoop },
+	0x01D5: { n:"BrtBeginColorScale", f:parsenoop },
+	0x01D6: { n:"BrtEndColorScale", f:parsenoop },
+	0x01D7: { n:"BrtCFVO", f:parsenoop },
+	0x01D8: { n:"BrtExternValueMeta", f:parsenoop },
+	0x01D9: { n:"BrtBeginColorPalette", f:parsenoop },
+	0x01DA: { n:"BrtEndColorPalette", f:parsenoop },
+	0x01DB: { n:"BrtIndexedColor", f:parsenoop },
+	0x01DC: { n:"BrtMargins", f:parsenoop },
+	0x01DD: { n:"BrtPrintOptions", f:parsenoop },
+	0x01DE: { n:"BrtPageSetup", f:parsenoop },
+	0x01DF: { n:"BrtBeginHeaderFooter", f:parsenoop },
+	0x01E0: { n:"BrtEndHeaderFooter", f:parsenoop },
+	0x01E1: { n:"BrtBeginSXCrtFormat", f:parsenoop },
+	0x01E2: { n:"BrtEndSXCrtFormat", f:parsenoop },
+	0x01E3: { n:"BrtBeginSXCrtFormats", f:parsenoop },
+	0x01E4: { n:"BrtEndSXCrtFormats", f:parsenoop },
+	0x01E5: { n:"BrtWsFmtInfo", f:parsenoop },
+	0x01E6: { n:"BrtBeginMgs", f:parsenoop },
+	0x01E7: { n:"BrtEndMGs", f:parsenoop },
+	0x01E8: { n:"BrtBeginMGMaps", f:parsenoop },
+	0x01E9: { n:"BrtEndMGMaps", f:parsenoop },
+	0x01EA: { n:"BrtBeginMG", f:parsenoop },
+	0x01EB: { n:"BrtEndMG", f:parsenoop },
+	0x01EC: { n:"BrtBeginMap", f:parsenoop },
+	0x01ED: { n:"BrtEndMap", f:parsenoop },
+	0x01EE: { n:"BrtHLink", f:parse_BrtHLink },
+	0x01EF: { n:"BrtBeginDCon", f:parsenoop },
+	0x01F0: { n:"BrtEndDCon", f:parsenoop },
+	0x01F1: { n:"BrtBeginDRefs", f:parsenoop },
+	0x01F2: { n:"BrtEndDRefs", f:parsenoop },
+	0x01F3: { n:"BrtDRef", f:parsenoop },
+	0x01F4: { n:"BrtBeginScenMan", f:parsenoop },
+	0x01F5: { n:"BrtEndScenMan", f:parsenoop },
+	0x01F6: { n:"BrtBeginSct", f:parsenoop },
+	0x01F7: { n:"BrtEndSct", f:parsenoop },
+	0x01F8: { n:"BrtSlc", f:parsenoop },
+	0x01F9: { n:"BrtBeginDXFs", f:parsenoop },
+	0x01FA: { n:"BrtEndDXFs", f:parsenoop },
+	0x01FB: { n:"BrtDXF", f:parsenoop },
+	0x01FC: { n:"BrtBeginTableStyles", f:parsenoop },
+	0x01FD: { n:"BrtEndTableStyles", f:parsenoop },
+	0x01FE: { n:"BrtBeginTableStyle", f:parsenoop },
+	0x01FF: { n:"BrtEndTableStyle", f:parsenoop },
+	0x0200: { n:"BrtTableStyleElement", f:parsenoop },
+	0x0201: { n:"BrtTableStyleClient", f:parsenoop },
+	0x0202: { n:"BrtBeginVolDeps", f:parsenoop },
+	0x0203: { n:"BrtEndVolDeps", f:parsenoop },
+	0x0204: { n:"BrtBeginVolType", f:parsenoop },
+	0x0205: { n:"BrtEndVolType", f:parsenoop },
+	0x0206: { n:"BrtBeginVolMain", f:parsenoop },
+	0x0207: { n:"BrtEndVolMain", f:parsenoop },
+	0x0208: { n:"BrtBeginVolTopic", f:parsenoop },
+	0x0209: { n:"BrtEndVolTopic", f:parsenoop },
+	0x020A: { n:"BrtVolSubtopic", f:parsenoop },
+	0x020B: { n:"BrtVolRef", f:parsenoop },
+	0x020C: { n:"BrtVolNum", f:parsenoop },
+	0x020D: { n:"BrtVolErr", f:parsenoop },
+	0x020E: { n:"BrtVolStr", f:parsenoop },
+	0x020F: { n:"BrtVolBool", f:parsenoop },
+	0x0210: { n:"BrtBeginCalcChain$", f:parsenoop },
+	0x0211: { n:"BrtEndCalcChain$", f:parsenoop },
+	0x0212: { n:"BrtBeginSortState", f:parsenoop },
+	0x0213: { n:"BrtEndSortState", f:parsenoop },
+	0x0214: { n:"BrtBeginSortCond", f:parsenoop },
+	0x0215: { n:"BrtEndSortCond", f:parsenoop },
+	0x0216: { n:"BrtBookProtection", f:parsenoop },
+	0x0217: { n:"BrtSheetProtection", f:parsenoop },
+	0x0218: { n:"BrtRangeProtection", f:parsenoop },
+	0x0219: { n:"BrtPhoneticInfo", f:parsenoop },
+	0x021A: { n:"BrtBeginECTxtWiz", f:parsenoop },
+	0x021B: { n:"BrtEndECTxtWiz", f:parsenoop },
+	0x021C: { n:"BrtBeginECTWFldInfoLst", f:parsenoop },
+	0x021D: { n:"BrtEndECTWFldInfoLst", f:parsenoop },
+	0x021E: { n:"BrtBeginECTwFldInfo", f:parsenoop },
+	0x0224: { n:"BrtFileSharing", f:parsenoop },
+	0x0225: { n:"BrtOleSize", f:parsenoop },
+	0x0226: { n:"BrtDrawing", f:parsenoop },
+	0x0227: { n:"BrtLegacyDrawing", f:parsenoop },
+	0x0228: { n:"BrtLegacyDrawingHF", f:parsenoop },
+	0x0229: { n:"BrtWebOpt", f:parsenoop },
+	0x022A: { n:"BrtBeginWebPubItems", f:parsenoop },
+	0x022B: { n:"BrtEndWebPubItems", f:parsenoop },
+	0x022C: { n:"BrtBeginWebPubItem", f:parsenoop },
+	0x022D: { n:"BrtEndWebPubItem", f:parsenoop },
+	0x022E: { n:"BrtBeginSXCondFmt", f:parsenoop },
+	0x022F: { n:"BrtEndSXCondFmt", f:parsenoop },
+	0x0230: { n:"BrtBeginSXCondFmts", f:parsenoop },
+	0x0231: { n:"BrtEndSXCondFmts", f:parsenoop },
+	0x0232: { n:"BrtBkHim", f:parsenoop },
+	0x0234: { n:"BrtColor", f:parsenoop },
+	0x0235: { n:"BrtBeginIndexedColors", f:parsenoop },
+	0x0236: { n:"BrtEndIndexedColors", f:parsenoop },
+	0x0239: { n:"BrtBeginMRUColors", f:parsenoop },
+	0x023A: { n:"BrtEndMRUColors", f:parsenoop },
+	0x023C: { n:"BrtMRUColor", f:parsenoop },
+	0x023D: { n:"BrtBeginDVals", f:parsenoop },
+	0x023E: { n:"BrtEndDVals", f:parsenoop },
+	0x0241: { n:"BrtSupNameStart", f:parsenoop },
+	0x0242: { n:"BrtSupNameValueStart", f:parsenoop },
+	0x0243: { n:"BrtSupNameValueEnd", f:parsenoop },
+	0x0244: { n:"BrtSupNameNum", f:parsenoop },
+	0x0245: { n:"BrtSupNameErr", f:parsenoop },
+	0x0246: { n:"BrtSupNameSt", f:parsenoop },
+	0x0247: { n:"BrtSupNameNil", f:parsenoop },
+	0x0248: { n:"BrtSupNameBool", f:parsenoop },
+	0x0249: { n:"BrtSupNameFmla", f:parsenoop },
+	0x024A: { n:"BrtSupNameBits", f:parsenoop },
+	0x024B: { n:"BrtSupNameEnd", f:parsenoop },
+	0x024C: { n:"BrtEndSupBook", f:parsenoop },
+	0x024D: { n:"BrtCellSmartTagProperty", f:parsenoop },
+	0x024E: { n:"BrtBeginCellSmartTag", f:parsenoop },
+	0x024F: { n:"BrtEndCellSmartTag", f:parsenoop },
+	0x0250: { n:"BrtBeginCellSmartTags", f:parsenoop },
+	0x0251: { n:"BrtEndCellSmartTags", f:parsenoop },
+	0x0252: { n:"BrtBeginSmartTags", f:parsenoop },
+	0x0253: { n:"BrtEndSmartTags", f:parsenoop },
+	0x0254: { n:"BrtSmartTagType", f:parsenoop },
+	0x0255: { n:"BrtBeginSmartTagTypes", f:parsenoop },
+	0x0256: { n:"BrtEndSmartTagTypes", f:parsenoop },
+	0x0257: { n:"BrtBeginSXFilters", f:parsenoop },
+	0x0258: { n:"BrtEndSXFilters", f:parsenoop },
+	0x0259: { n:"BrtBeginSXFILTER", f:parsenoop },
+	0x025A: { n:"BrtEndSXFilter", f:parsenoop },
+	0x025B: { n:"BrtBeginFills", f:parsenoop },
+	0x025C: { n:"BrtEndFills", f:parsenoop },
+	0x025D: { n:"BrtBeginCellWatches", f:parsenoop },
+	0x025E: { n:"BrtEndCellWatches", f:parsenoop },
+	0x025F: { n:"BrtCellWatch", f:parsenoop },
+	0x0260: { n:"BrtBeginCRErrs", f:parsenoop },
+	0x0261: { n:"BrtEndCRErrs", f:parsenoop },
+	0x0262: { n:"BrtCrashRecErr", f:parsenoop },
+	0x0263: { n:"BrtBeginFonts", f:parsenoop },
+	0x0264: { n:"BrtEndFonts", f:parsenoop },
+	0x0265: { n:"BrtBeginBorders", f:parsenoop },
+	0x0266: { n:"BrtEndBorders", f:parsenoop },
+	0x0267: { n:"BrtBeginFmts", f:parsenoop },
+	0x0268: { n:"BrtEndFmts", f:parsenoop },
+	0x0269: { n:"BrtBeginCellXFs", f:parsenoop },
+	0x026A: { n:"BrtEndCellXFs", f:parsenoop },
+	0x026B: { n:"BrtBeginStyles", f:parsenoop },
+	0x026C: { n:"BrtEndStyles", f:parsenoop },
+	0x0271: { n:"BrtBigName", f:parsenoop },
+	0x0272: { n:"BrtBeginCellStyleXFs", f:parsenoop },
+	0x0273: { n:"BrtEndCellStyleXFs", f:parsenoop },
+	0x0274: { n:"BrtBeginComments", f:parsenoop },
+	0x0275: { n:"BrtEndComments", f:parsenoop },
+	0x0276: { n:"BrtBeginCommentAuthors", f:parsenoop },
+	0x0277: { n:"BrtEndCommentAuthors", f:parsenoop },
+	0x0278: { n:"BrtCommentAuthor", f:parse_BrtCommentAuthor },
+	0x0279: { n:"BrtBeginCommentList", f:parsenoop },
+	0x027A: { n:"BrtEndCommentList", f:parsenoop },
+	0x027B: { n:"BrtBeginComment", f:parse_BrtBeginComment},
+	0x027C: { n:"BrtEndComment", f:parsenoop },
+	0x027D: { n:"BrtCommentText", f:parse_BrtCommentText },
+	0x027E: { n:"BrtBeginOleObjects", f:parsenoop },
+	0x027F: { n:"BrtOleObject", f:parsenoop },
+	0x0280: { n:"BrtEndOleObjects", f:parsenoop },
+	0x0281: { n:"BrtBeginSxrules", f:parsenoop },
+	0x0282: { n:"BrtEndSxRules", f:parsenoop },
+	0x0283: { n:"BrtBeginActiveXControls", f:parsenoop },
+	0x0284: { n:"BrtActiveX", f:parsenoop },
+	0x0285: { n:"BrtEndActiveXControls", f:parsenoop },
+	0x0286: { n:"BrtBeginPCDSDTCEMembersSortBy", f:parsenoop },
+	0x0288: { n:"BrtBeginCellIgnoreECs", f:parsenoop },
+	0x0289: { n:"BrtCellIgnoreEC", f:parsenoop },
+	0x028A: { n:"BrtEndCellIgnoreECs", f:parsenoop },
+	0x028B: { n:"BrtCsProp", f:parsenoop },
+	0x028C: { n:"BrtCsPageSetup", f:parsenoop },
+	0x028D: { n:"BrtBeginUserCsViews", f:parsenoop },
+	0x028E: { n:"BrtEndUserCsViews", f:parsenoop },
+	0x028F: { n:"BrtBeginUserCsView", f:parsenoop },
+	0x0290: { n:"BrtEndUserCsView", f:parsenoop },
+	0x0291: { n:"BrtBeginPcdSFCIEntries", f:parsenoop },
+	0x0292: { n:"BrtEndPCDSFCIEntries", f:parsenoop },
+	0x0293: { n:"BrtPCDSFCIEntry", f:parsenoop },
+	0x0294: { n:"BrtBeginListParts", f:parsenoop },
+	0x0295: { n:"BrtListPart", f:parsenoop },
+	0x0296: { n:"BrtEndListParts", f:parsenoop },
+	0x0297: { n:"BrtSheetCalcProp", f:parsenoop },
+	0x0298: { n:"BrtBeginFnGroup", f:parsenoop },
+	0x0299: { n:"BrtFnGroup", f:parsenoop },
+	0x029A: { n:"BrtEndFnGroup", f:parsenoop },
+	0x029B: { n:"BrtSupAddin", f:parsenoop },
+	0x029C: { n:"BrtSXTDMPOrder", f:parsenoop },
+	0x029D: { n:"BrtCsProtection", f:parsenoop },
+	0x029F: { n:"BrtBeginWsSortMap", f:parsenoop },
+	0x02A0: { n:"BrtEndWsSortMap", f:parsenoop },
+	0x02A1: { n:"BrtBeginRRSort", f:parsenoop },
+	0x02A2: { n:"BrtEndRRSort", f:parsenoop },
+	0x02A3: { n:"BrtRRSortItem", f:parsenoop },
+	0x02A4: { n:"BrtFileSharingIso", f:parsenoop },
+	0x02A5: { n:"BrtBookProtectionIso", f:parsenoop },
+	0x02A6: { n:"BrtSheetProtectionIso", f:parsenoop },
+	0x02A7: { n:"BrtCsProtectionIso", f:parsenoop },
+	0x02A8: { n:"BrtRangeProtectionIso", f:parsenoop },
+	0x0400: { n:"BrtRwDescent", f:parsenoop },
+	0x0401: { n:"BrtKnownFonts", f:parsenoop },
+	0x0402: { n:"BrtBeginSXTupleSet", f:parsenoop },
+	0x0403: { n:"BrtEndSXTupleSet", f:parsenoop },
+	0x0404: { n:"BrtBeginSXTupleSetHeader", f:parsenoop },
+	0x0405: { n:"BrtEndSXTupleSetHeader", f:parsenoop },
+	0x0406: { n:"BrtSXTupleSetHeaderItem", f:parsenoop },
+	0x0407: { n:"BrtBeginSXTupleSetData", f:parsenoop },
+	0x0408: { n:"BrtEndSXTupleSetData", f:parsenoop },
+	0x0409: { n:"BrtBeginSXTupleSetRow", f:parsenoop },
+	0x040A: { n:"BrtEndSXTupleSetRow", f:parsenoop },
+	0x040B: { n:"BrtSXTupleSetRowItem", f:parsenoop },
+	0x040C: { n:"BrtNameExt", f:parsenoop },
+	0x040D: { n:"BrtPCDH14", f:parsenoop },
+	0x040E: { n:"BrtBeginPCDCalcMem14", f:parsenoop },
+	0x040F: { n:"BrtEndPCDCalcMem14", f:parsenoop },
+	0x0410: { n:"BrtSXTH14", f:parsenoop },
+	0x0411: { n:"BrtBeginSparklineGroup", f:parsenoop },
+	0x0412: { n:"BrtEndSparklineGroup", f:parsenoop },
+	0x0413: { n:"BrtSparkline", f:parsenoop },
+	0x0414: { n:"BrtSXDI14", f:parsenoop },
+	0x0415: { n:"BrtWsFmtInfoEx14", f:parsenoop },
+	0x0416: { n:"BrtBeginConditionalFormatting14", f:parsenoop },
+	0x0417: { n:"BrtEndConditionalFormatting14", f:parsenoop },
+	0x0418: { n:"BrtBeginCFRule14", f:parsenoop },
+	0x0419: { n:"BrtEndCFRule14", f:parsenoop },
+	0x041A: { n:"BrtCFVO14", f:parsenoop },
+	0x041B: { n:"BrtBeginDatabar14", f:parsenoop },
+	0x041C: { n:"BrtBeginIconSet14", f:parsenoop },
+	0x041D: { n:"BrtDVal14", f:parsenoop },
+	0x041E: { n:"BrtBeginDVals14", f:parsenoop },
+	0x041F: { n:"BrtColor14", f:parsenoop },
+	0x0420: { n:"BrtBeginSparklines", f:parsenoop },
+	0x0421: { n:"BrtEndSparklines", f:parsenoop },
+	0x0422: { n:"BrtBeginSparklineGroups", f:parsenoop },
+	0x0423: { n:"BrtEndSparklineGroups", f:parsenoop },
+	0x0425: { n:"BrtSXVD14", f:parsenoop },
+	0x0426: { n:"BrtBeginSxview14", f:parsenoop },
+	0x0427: { n:"BrtEndSxview14", f:parsenoop },
+	0x042A: { n:"BrtBeginPCD14", f:parsenoop },
+	0x042B: { n:"BrtEndPCD14", f:parsenoop },
+	0x042C: { n:"BrtBeginExtConn14", f:parsenoop },
+	0x042D: { n:"BrtEndExtConn14", f:parsenoop },
+	0x042E: { n:"BrtBeginSlicerCacheIDs", f:parsenoop },
+	0x042F: { n:"BrtEndSlicerCacheIDs", f:parsenoop },
+	0x0430: { n:"BrtBeginSlicerCacheID", f:parsenoop },
+	0x0431: { n:"BrtEndSlicerCacheID", f:parsenoop },
+	0x0433: { n:"BrtBeginSlicerCache", f:parsenoop },
+	0x0434: { n:"BrtEndSlicerCache", f:parsenoop },
+	0x0435: { n:"BrtBeginSlicerCacheDef", f:parsenoop },
+	0x0436: { n:"BrtEndSlicerCacheDef", f:parsenoop },
+	0x0437: { n:"BrtBeginSlicersEx", f:parsenoop },
+	0x0438: { n:"BrtEndSlicersEx", f:parsenoop },
+	0x0439: { n:"BrtBeginSlicerEx", f:parsenoop },
+	0x043A: { n:"BrtEndSlicerEx", f:parsenoop },
+	0x043B: { n:"BrtBeginSlicer", f:parsenoop },
+	0x043C: { n:"BrtEndSlicer", f:parsenoop },
+	0x043D: { n:"BrtSlicerCachePivotTables", f:parsenoop },
+	0x043E: { n:"BrtBeginSlicerCacheOlapImpl", f:parsenoop },
+	0x043F: { n:"BrtEndSlicerCacheOlapImpl", f:parsenoop },
+	0x0440: { n:"BrtBeginSlicerCacheLevelsData", f:parsenoop },
+	0x0441: { n:"BrtEndSlicerCacheLevelsData", f:parsenoop },
+	0x0442: { n:"BrtBeginSlicerCacheLevelData", f:parsenoop },
+	0x0443: { n:"BrtEndSlicerCacheLevelData", f:parsenoop },
+	0x0444: { n:"BrtBeginSlicerCacheSiRanges", f:parsenoop },
+	0x0445: { n:"BrtEndSlicerCacheSiRanges", f:parsenoop },
+	0x0446: { n:"BrtBeginSlicerCacheSiRange", f:parsenoop },
+	0x0447: { n:"BrtEndSlicerCacheSiRange", f:parsenoop },
+	0x0448: { n:"BrtSlicerCacheOlapItem", f:parsenoop },
+	0x0449: { n:"BrtBeginSlicerCacheSelections", f:parsenoop },
+	0x044A: { n:"BrtSlicerCacheSelection", f:parsenoop },
+	0x044B: { n:"BrtEndSlicerCacheSelections", f:parsenoop },
+	0x044C: { n:"BrtBeginSlicerCacheNative", f:parsenoop },
+	0x044D: { n:"BrtEndSlicerCacheNative", f:parsenoop },
+	0x044E: { n:"BrtSlicerCacheNativeItem", f:parsenoop },
+	0x044F: { n:"BrtRangeProtection14", f:parsenoop },
+	0x0450: { n:"BrtRangeProtectionIso14", f:parsenoop },
+	0x0451: { n:"BrtCellIgnoreEC14", f:parsenoop },
+	0x0457: { n:"BrtList14", f:parsenoop },
+	0x0458: { n:"BrtCFIcon", f:parsenoop },
+	0x0459: { n:"BrtBeginSlicerCachesPivotCacheIDs", f:parsenoop },
+	0x045A: { n:"BrtEndSlicerCachesPivotCacheIDs", f:parsenoop },
+	0x045B: { n:"BrtBeginSlicers", f:parsenoop },
+	0x045C: { n:"BrtEndSlicers", f:parsenoop },
+	0x045D: { n:"BrtWbProp14", f:parsenoop },
+	0x045E: { n:"BrtBeginSXEdit", f:parsenoop },
+	0x045F: { n:"BrtEndSXEdit", f:parsenoop },
+	0x0460: { n:"BrtBeginSXEdits", f:parsenoop },
+	0x0461: { n:"BrtEndSXEdits", f:parsenoop },
+	0x0462: { n:"BrtBeginSXChange", f:parsenoop },
+	0x0463: { n:"BrtEndSXChange", f:parsenoop },
+	0x0464: { n:"BrtBeginSXChanges", f:parsenoop },
+	0x0465: { n:"BrtEndSXChanges", f:parsenoop },
+	0x0466: { n:"BrtSXTupleItems", f:parsenoop },
+	0x0468: { n:"BrtBeginSlicerStyle", f:parsenoop },
+	0x0469: { n:"BrtEndSlicerStyle", f:parsenoop },
+	0x046A: { n:"BrtSlicerStyleElement", f:parsenoop },
+	0x046B: { n:"BrtBeginStyleSheetExt14", f:parsenoop },
+	0x046C: { n:"BrtEndStyleSheetExt14", f:parsenoop },
+	0x046D: { n:"BrtBeginSlicerCachesPivotCacheID", f:parsenoop },
+	0x046E: { n:"BrtEndSlicerCachesPivotCacheID", f:parsenoop },
+	0x046F: { n:"BrtBeginConditionalFormattings", f:parsenoop },
+	0x0470: { n:"BrtEndConditionalFormattings", f:parsenoop },
+	0x0471: { n:"BrtBeginPCDCalcMemExt", f:parsenoop },
+	0x0472: { n:"BrtEndPCDCalcMemExt", f:parsenoop },
+	0x0473: { n:"BrtBeginPCDCalcMemsExt", f:parsenoop },
+	0x0474: { n:"BrtEndPCDCalcMemsExt", f:parsenoop },
+	0x0475: { n:"BrtPCDField14", f:parsenoop },
+	0x0476: { n:"BrtBeginSlicerStyles", f:parsenoop },
+	0x0477: { n:"BrtEndSlicerStyles", f:parsenoop },
+	0x0478: { n:"BrtBeginSlicerStyleElements", f:parsenoop },
+	0x0479: { n:"BrtEndSlicerStyleElements", f:parsenoop },
+	0x047A: { n:"BrtCFRuleExt", f:parsenoop },
+	0x047B: { n:"BrtBeginSXCondFmt14", f:parsenoop },
+	0x047C: { n:"BrtEndSXCondFmt14", f:parsenoop },
+	0x047D: { n:"BrtBeginSXCondFmts14", f:parsenoop },
+	0x047E: { n:"BrtEndSXCondFmts14", f:parsenoop },
+	0x0480: { n:"BrtBeginSortCond14", f:parsenoop },
+	0x0481: { n:"BrtEndSortCond14", f:parsenoop },
+	0x0482: { n:"BrtEndDVals14", f:parsenoop },
+	0x0483: { n:"BrtEndIconSet14", f:parsenoop },
+	0x0484: { n:"BrtEndDatabar14", f:parsenoop },
+	0x0485: { n:"BrtBeginColorScale14", f:parsenoop },
+	0x0486: { n:"BrtEndColorScale14", f:parsenoop },
+	0x0487: { n:"BrtBeginSxrules14", f:parsenoop },
+	0x0488: { n:"BrtEndSxrules14", f:parsenoop },
+	0x0489: { n:"BrtBeginPRule14", f:parsenoop },
+	0x048A: { n:"BrtEndPRule14", f:parsenoop },
+	0x048B: { n:"BrtBeginPRFilters14", f:parsenoop },
+	0x048C: { n:"BrtEndPRFilters14", f:parsenoop },
+	0x048D: { n:"BrtBeginPRFilter14", f:parsenoop },
+	0x048E: { n:"BrtEndPRFilter14", f:parsenoop },
+	0x048F: { n:"BrtBeginPRFItem14", f:parsenoop },
+	0x0490: { n:"BrtEndPRFItem14", f:parsenoop },
+	0x0491: { n:"BrtBeginCellIgnoreECs14", f:parsenoop },
+	0x0492: { n:"BrtEndCellIgnoreECs14", f:parsenoop },
+	0x0493: { n:"BrtDxf14", f:parsenoop },
+	0x0494: { n:"BrtBeginDxF14s", f:parsenoop },
+	0x0495: { n:"BrtEndDxf14s", f:parsenoop },
+	0x0499: { n:"BrtFilter14", f:parsenoop },
+	0x049A: { n:"BrtBeginCustomFilters14", f:parsenoop },
+	0x049C: { n:"BrtCustomFilter14", f:parsenoop },
+	0x049D: { n:"BrtIconFilter14", f:parsenoop },
+	0x049E: { n:"BrtPivotCacheConnectionName", f:parsenoop },
+	0x0800: { n:"BrtBeginDecoupledPivotCacheIDs", f:parsenoop },
+	0x0801: { n:"BrtEndDecoupledPivotCacheIDs", f:parsenoop },
+	0x0802: { n:"BrtDecoupledPivotCacheID", f:parsenoop },
+	0x0803: { n:"BrtBeginPivotTableRefs", f:parsenoop },
+	0x0804: { n:"BrtEndPivotTableRefs", f:parsenoop },
+	0x0805: { n:"BrtPivotTableRef", f:parsenoop },
+	0x0806: { n:"BrtSlicerCacheBookPivotTables", f:parsenoop },
+	0x0807: { n:"BrtBeginSxvcells", f:parsenoop },
+	0x0808: { n:"BrtEndSxvcells", f:parsenoop },
+	0x0809: { n:"BrtBeginSxRow", f:parsenoop },
+	0x080A: { n:"BrtEndSxRow", f:parsenoop },
+	0x080C: { n:"BrtPcdCalcMem15", f:parsenoop },
+	0x0813: { n:"BrtQsi15", f:parsenoop },
+	0x0814: { n:"BrtBeginWebExtensions", f:parsenoop },
+	0x0815: { n:"BrtEndWebExtensions", f:parsenoop },
+	0x0816: { n:"BrtWebExtension", f:parsenoop },
+	0x0817: { n:"BrtAbsPath15", f:parsenoop },
+	0x0818: { n:"BrtBeginPivotTableUISettings", f:parsenoop },
+	0x0819: { n:"BrtEndPivotTableUISettings", f:parsenoop },
+	0x081B: { n:"BrtTableSlicerCacheIDs", f:parsenoop },
+	0x081C: { n:"BrtTableSlicerCacheID", f:parsenoop },
+	0x081D: { n:"BrtBeginTableSlicerCache", f:parsenoop },
+	0x081E: { n:"BrtEndTableSlicerCache", f:parsenoop },
+	0x081F: { n:"BrtSxFilter15", f:parsenoop },
+	0x0820: { n:"BrtBeginTimelineCachePivotCacheIDs", f:parsenoop },
+	0x0821: { n:"BrtEndTimelineCachePivotCacheIDs", f:parsenoop },
+	0x0822: { n:"BrtTimelineCachePivotCacheID", f:parsenoop },
+	0x0823: { n:"BrtBeginTimelineCacheIDs", f:parsenoop },
+	0x0824: { n:"BrtEndTimelineCacheIDs", f:parsenoop },
+	0x0825: { n:"BrtBeginTimelineCacheID", f:parsenoop },
+	0x0826: { n:"BrtEndTimelineCacheID", f:parsenoop },
+	0x0827: { n:"BrtBeginTimelinesEx", f:parsenoop },
+	0x0828: { n:"BrtEndTimelinesEx", f:parsenoop },
+	0x0829: { n:"BrtBeginTimelineEx", f:parsenoop },
+	0x082A: { n:"BrtEndTimelineEx", f:parsenoop },
+	0x082B: { n:"BrtWorkBookPr15", f:parsenoop },
+	0x082C: { n:"BrtPCDH15", f:parsenoop },
+	0x082D: { n:"BrtBeginTimelineStyle", f:parsenoop },
+	0x082E: { n:"BrtEndTimelineStyle", f:parsenoop },
+	0x082F: { n:"BrtTimelineStyleElement", f:parsenoop },
+	0x0830: { n:"BrtBeginTimelineStylesheetExt15", f:parsenoop },
+	0x0831: { n:"BrtEndTimelineStylesheetExt15", f:parsenoop },
+	0x0832: { n:"BrtBeginTimelineStyles", f:parsenoop },
+	0x0833: { n:"BrtEndTimelineStyles", f:parsenoop },
+	0x0834: { n:"BrtBeginTimelineStyleElements", f:parsenoop },
+	0x0835: { n:"BrtEndTimelineStyleElements", f:parsenoop },
+	0x0836: { n:"BrtDxf15", f:parsenoop },
+	0x0837: { n:"BrtBeginDxfs15", f:parsenoop },
+	0x0838: { n:"brtEndDxfs15", f:parsenoop },
+	0x0839: { n:"BrtSlicerCacheHideItemsWithNoData", f:parsenoop },
+	0x083A: { n:"BrtBeginItemUniqueNames", f:parsenoop },
+	0x083B: { n:"BrtEndItemUniqueNames", f:parsenoop },
+	0x083C: { n:"BrtItemUniqueName", f:parsenoop },
+	0x083D: { n:"BrtBeginExtConn15", f:parsenoop },
+	0x083E: { n:"BrtEndExtConn15", f:parsenoop },
+	0x083F: { n:"BrtBeginOledbPr15", f:parsenoop },
+	0x0840: { n:"BrtEndOledbPr15", f:parsenoop },
+	0x0841: { n:"BrtBeginDataFeedPr15", f:parsenoop },
+	0x0842: { n:"BrtEndDataFeedPr15", f:parsenoop },
+	0x0843: { n:"BrtTextPr15", f:parsenoop },
+	0x0844: { n:"BrtRangePr15", f:parsenoop },
+	0x0845: { n:"BrtDbCommand15", f:parsenoop },
+	0x0846: { n:"BrtBeginDbTables15", f:parsenoop },
+	0x0847: { n:"BrtEndDbTables15", f:parsenoop },
+	0x0848: { n:"BrtDbTable15", f:parsenoop },
+	0x0849: { n:"BrtBeginDataModel", f:parsenoop },
+	0x084A: { n:"BrtEndDataModel", f:parsenoop },
+	0x084B: { n:"BrtBeginModelTables", f:parsenoop },
+	0x084C: { n:"BrtEndModelTables", f:parsenoop },
+	0x084D: { n:"BrtModelTable", f:parsenoop },
+	0x084E: { n:"BrtBeginModelRelationships", f:parsenoop },
+	0x084F: { n:"BrtEndModelRelationships", f:parsenoop },
+	0x0850: { n:"BrtModelRelationship", f:parsenoop },
+	0x0851: { n:"BrtBeginECTxtWiz15", f:parsenoop },
+	0x0852: { n:"BrtEndECTxtWiz15", f:parsenoop },
+	0x0853: { n:"BrtBeginECTWFldInfoLst15", f:parsenoop },
+	0x0854: { n:"BrtEndECTWFldInfoLst15", f:parsenoop },
+	0x0855: { n:"BrtBeginECTWFldInfo15", f:parsenoop },
+	0x0856: { n:"BrtFieldListActiveItem", f:parsenoop },
+	0x0857: { n:"BrtPivotCacheIdVersion", f:parsenoop },
+	0x0858: { n:"BrtSXDI15", f:parsenoop },
+	0xFFFF: { n:"", f:parsenoop }
+};
+
+var evert_RE = evert_key(XLSBRecordEnum, 'n');
+
+/* [MS-XLS] 2.3 Record Enumeration */
+var XLSRecordEnum = {
+	0x0003: { n:"BIFF2NUM", f:parse_BIFF2NUM },
+	0x0004: { n:"BIFF2STR", f:parse_BIFF2STR },
+	0x0006: { n:"Formula", f:parse_Formula },
+	0x0009: { n:'BOF', f:parse_BOF },
+	0x000a: { n:'EOF', f:parse_EOF },
+	0x000c: { n:"CalcCount", f:parse_CalcCount },
+	0x000d: { n:"CalcMode", f:parse_CalcMode },
+	0x000e: { n:"CalcPrecision", f:parse_CalcPrecision },
+	0x000f: { n:"CalcRefMode", f:parse_CalcRefMode },
+	0x0010: { n:"CalcDelta", f:parse_CalcDelta },
+	0x0011: { n:"CalcIter", f:parse_CalcIter },
+	0x0012: { n:"Protect", f:parse_Protect },
+	0x0013: { n:"Password", f:parse_Password },
+	0x0014: { n:"Header", f:parse_Header },
+	0x0015: { n:"Footer", f:parse_Footer },
+	0x0017: { n:"ExternSheet", f:parse_ExternSheet },
+	0x0018: { n:"Lbl", f:parse_Lbl },
+	0x0019: { n:"WinProtect", f:parse_WinProtect },
+	0x001a: { n:"VerticalPageBreaks", f:parse_VerticalPageBreaks },
+	0x001b: { n:"HorizontalPageBreaks", f:parse_HorizontalPageBreaks },
+	0x001c: { n:"Note", f:parse_Note },
+	0x001d: { n:"Selection", f:parse_Selection },
+	0x0022: { n:"Date1904", f:parse_Date1904 },
+	0x0023: { n:"ExternName", f:parse_ExternName },
+	0x0026: { n:"LeftMargin", f:parse_LeftMargin },
+	0x0027: { n:"RightMargin", f:parse_RightMargin },
+	0x0028: { n:"TopMargin", f:parse_TopMargin },
+	0x0029: { n:"BottomMargin", f:parse_BottomMargin },
+	0x002a: { n:"PrintRowCol", f:parse_PrintRowCol },
+	0x002b: { n:"PrintGrid", f:parse_PrintGrid },
+	0x002f: { n:"FilePass", f:parse_FilePass },
+	0x0031: { n:"Font", f:parse_Font },
+	0x0033: { n:"PrintSize", f:parse_PrintSize },
+	0x003c: { n:"Continue", f:parse_Continue },
+	0x003d: { n:"Window1", f:parse_Window1 },
+	0x0040: { n:"Backup", f:parse_Backup },
+	0x0041: { n:"Pane", f:parse_Pane },
+	0x0042: { n:'CodePage', f:parse_CodePage },
+	0x004d: { n:"Pls", f:parse_Pls },
+	0x0050: { n:"DCon", f:parse_DCon },
+	0x0051: { n:"DConRef", f:parse_DConRef },
+	0x0052: { n:"DConName", f:parse_DConName },
+	0x0055: { n:"DefColWidth", f:parse_DefColWidth },
+	0x0059: { n:"XCT", f:parse_XCT },
+	0x005a: { n:"CRN", f:parse_CRN },
+	0x005b: { n:"FileSharing", f:parse_FileSharing },
+	0x005c: { n:'WriteAccess', f:parse_WriteAccess },
+	0x005d: { n:"Obj", f:parse_Obj },
+	0x005e: { n:"Uncalced", f:parse_Uncalced },
+	0x005f: { n:"CalcSaveRecalc", f:parse_CalcSaveRecalc },
+	0x0060: { n:"Template", f:parse_Template },
+	0x0061: { n:"Intl", f:parse_Intl },
+	0x0063: { n:"ObjProtect", f:parse_ObjProtect },
+	0x007d: { n:"ColInfo", f:parse_ColInfo },
+	0x0080: { n:"Guts", f:parse_Guts },
+	0x0081: { n:"WsBool", f:parse_WsBool },
+	0x0082: { n:"GridSet", f:parse_GridSet },
+	0x0083: { n:"HCenter", f:parse_HCenter },
+	0x0084: { n:"VCenter", f:parse_VCenter },
+	0x0085: { n:'BoundSheet8', f:parse_BoundSheet8 },
+	0x0086: { n:"WriteProtect", f:parse_WriteProtect },
+	0x008c: { n:"Country", f:parse_Country },
+	0x008d: { n:"HideObj", f:parse_HideObj },
+	0x0090: { n:"Sort", f:parse_Sort },
+	0x0092: { n:"Palette", f:parse_Palette },
+	0x0097: { n:"Sync", f:parse_Sync },
+	0x0098: { n:"LPr", f:parse_LPr },
+	0x0099: { n:"DxGCol", f:parse_DxGCol },
+	0x009a: { n:"FnGroupName", f:parse_FnGroupName },
+	0x009b: { n:"FilterMode", f:parse_FilterMode },
+	0x009c: { n:"BuiltInFnGroupCount", f:parse_BuiltInFnGroupCount },
+	0x009d: { n:"AutoFilterInfo", f:parse_AutoFilterInfo },
+	0x009e: { n:"AutoFilter", f:parse_AutoFilter },
+	0x00a0: { n:"Scl", f:parse_Scl },
+	0x00a1: { n:"Setup", f:parse_Setup },
+	0x00ae: { n:"ScenMan", f:parse_ScenMan },
+	0x00af: { n:"SCENARIO", f:parse_SCENARIO },
+	0x00b0: { n:"SxView", f:parse_SxView },
+	0x00b1: { n:"Sxvd", f:parse_Sxvd },
+	0x00b2: { n:"SXVI", f:parse_SXVI },
+	0x00b4: { n:"SxIvd", f:parse_SxIvd },
+	0x00b5: { n:"SXLI", f:parse_SXLI },
+	0x00b6: { n:"SXPI", f:parse_SXPI },
+	0x00b8: { n:"DocRoute", f:parse_DocRoute },
+	0x00b9: { n:"RecipName", f:parse_RecipName },
+	0x00bd: { n:"MulRk", f:parse_MulRk },
+	0x00be: { n:"MulBlank", f:parse_MulBlank },
+	0x00c1: { n:'Mms', f:parse_Mms },
+	0x00c5: { n:"SXDI", f:parse_SXDI },
+	0x00c6: { n:"SXDB", f:parse_SXDB },
+	0x00c7: { n:"SXFDB", f:parse_SXFDB },
+	0x00c8: { n:"SXDBB", f:parse_SXDBB },
+	0x00c9: { n:"SXNum", f:parse_SXNum },
+	0x00ca: { n:"SxBool", f:parse_SxBool },
+	0x00cb: { n:"SxErr", f:parse_SxErr },
+	0x00cc: { n:"SXInt", f:parse_SXInt },
+	0x00cd: { n:"SXString", f:parse_SXString },
+	0x00ce: { n:"SXDtr", f:parse_SXDtr },
+	0x00cf: { n:"SxNil", f:parse_SxNil },
+	0x00d0: { n:"SXTbl", f:parse_SXTbl },
+	0x00d1: { n:"SXTBRGIITM", f:parse_SXTBRGIITM },
+	0x00d2: { n:"SxTbpg", f:parse_SxTbpg },
+	0x00d3: { n:"ObProj", f:parse_ObProj },
+	0x00d5: { n:"SXStreamID", f:parse_SXStreamID },
+	0x00d7: { n:"DBCell", f:parse_DBCell },
+	0x00d8: { n:"SXRng", f:parse_SXRng },
+	0x00d9: { n:"SxIsxoper", f:parse_SxIsxoper },
+	0x00da: { n:"BookBool", f:parse_BookBool },
+	0x00dc: { n:"DbOrParamQry", f:parse_DbOrParamQry },
+	0x00dd: { n:"ScenarioProtect", f:parse_ScenarioProtect },
+	0x00de: { n:"OleObjectSize", f:parse_OleObjectSize },
+	0x00e0: { n:"XF", f:parse_XF },
+	0x00e1: { n:'InterfaceHdr', f:parse_InterfaceHdr },
+	0x00e2: { n:'InterfaceEnd', f:parse_InterfaceEnd },
+	0x00e3: { n:"SXVS", f:parse_SXVS },
+	0x00e5: { n:"MergeCells", f:parse_MergeCells },
+	0x00e9: { n:"BkHim", f:parse_BkHim },
+	0x00eb: { n:"MsoDrawingGroup", f:parse_MsoDrawingGroup },
+	0x00ec: { n:"MsoDrawing", f:parse_MsoDrawing },
+	0x00ed: { n:"MsoDrawingSelection", f:parse_MsoDrawingSelection },
+	0x00ef: { n:"PhoneticInfo", f:parse_PhoneticInfo },
+	0x00f0: { n:"SxRule", f:parse_SxRule },
+	0x00f1: { n:"SXEx", f:parse_SXEx },
+	0x00f2: { n:"SxFilt", f:parse_SxFilt },
+	0x00f4: { n:"SxDXF", f:parse_SxDXF },
+	0x00f5: { n:"SxItm", f:parse_SxItm },
+	0x00f6: { n:"SxName", f:parse_SxName },
+	0x00f7: { n:"SxSelect", f:parse_SxSelect },
+	0x00f8: { n:"SXPair", f:parse_SXPair },
+	0x00f9: { n:"SxFmla", f:parse_SxFmla },
+	0x00fb: { n:"SxFormat", f:parse_SxFormat },
+	0x00fc: { n:"SST", f:parse_SST },
+	0x00fd: { n:"LabelSst", f:parse_LabelSst },
+	0x00ff: { n:"ExtSST", f:parse_ExtSST },
+	0x0100: { n:"SXVDEx", f:parse_SXVDEx },
+	0x0103: { n:"SXFormula", f:parse_SXFormula },
+	0x0122: { n:"SXDBEx", f:parse_SXDBEx },
+	0x0137: { n:"RRDInsDel", f:parse_RRDInsDel },
+	0x0138: { n:"RRDHead", f:parse_RRDHead },
+	0x013b: { n:"RRDChgCell", f:parse_RRDChgCell },
+	0x013d: { n:"RRTabId", f:parse_RRTabId },
+	0x013e: { n:"RRDRenSheet", f:parse_RRDRenSheet },
+	0x013f: { n:"RRSort", f:parse_RRSort },
+	0x0140: { n:"RRDMove", f:parse_RRDMove },
+	0x014a: { n:"RRFormat", f:parse_RRFormat },
+	0x014b: { n:"RRAutoFmt", f:parse_RRAutoFmt },
+	0x014d: { n:"RRInsertSh", f:parse_RRInsertSh },
+	0x014e: { n:"RRDMoveBegin", f:parse_RRDMoveBegin },
+	0x014f: { n:"RRDMoveEnd", f:parse_RRDMoveEnd },
+	0x0150: { n:"RRDInsDelBegin", f:parse_RRDInsDelBegin },
+	0x0151: { n:"RRDInsDelEnd", f:parse_RRDInsDelEnd },
+	0x0152: { n:"RRDConflict", f:parse_RRDConflict },
+	0x0153: { n:"RRDDefName", f:parse_RRDDefName },
+	0x0154: { n:"RRDRstEtxp", f:parse_RRDRstEtxp },
+	0x015f: { n:"LRng", f:parse_LRng },
+	0x0160: { n:"UsesELFs", f:parse_UsesELFs },
+	0x0161: { n:"DSF", f:parse_DSF },
+	0x0191: { n:"CUsr", f:parse_CUsr },
+	0x0192: { n:"CbUsr", f:parse_CbUsr },
+	0x0193: { n:"UsrInfo", f:parse_UsrInfo },
+	0x0194: { n:"UsrExcl", f:parse_UsrExcl },
+	0x0195: { n:"FileLock", f:parse_FileLock },
+	0x0196: { n:"RRDInfo", f:parse_RRDInfo },
+	0x0197: { n:"BCUsrs", f:parse_BCUsrs },
+	0x0198: { n:"UsrChk", f:parse_UsrChk },
+	0x01a9: { n:"UserBView", f:parse_UserBView },
+	0x01aa: { n:"UserSViewBegin", f:parse_UserSViewBegin },
+	0x01ab: { n:"UserSViewEnd", f:parse_UserSViewEnd },
+	0x01ac: { n:"RRDUserView", f:parse_RRDUserView },
+	0x01ad: { n:"Qsi", f:parse_Qsi },
+	0x01ae: { n:"SupBook", f:parse_SupBook },
+	0x01af: { n:"Prot4Rev", f:parse_Prot4Rev },
+	0x01b0: { n:"CondFmt", f:parse_CondFmt },
+	0x01b1: { n:"CF", f:parse_CF },
+	0x01b2: { n:"DVal", f:parse_DVal },
+	0x01b5: { n:"DConBin", f:parse_DConBin },
+	0x01b6: { n:"TxO", f:parse_TxO },
+	0x01b7: { n:"RefreshAll", f:parse_RefreshAll },
+	0x01b8: { n:"HLink", f:parse_HLink },
+	0x01b9: { n:"Lel", f:parse_Lel },
+	0x01ba: { n:"CodeName", f:parse_XLSCodeName },
+	0x01bb: { n:"SXFDBType", f:parse_SXFDBType },
+	0x01bc: { n:"Prot4RevPass", f:parse_Prot4RevPass },
+	0x01bd: { n:"ObNoMacros", f:parse_ObNoMacros },
+	0x01be: { n:"Dv", f:parse_Dv },
+	0x01c0: { n:"Excel9File", f:parse_Excel9File },
+	0x01c1: { n:"RecalcId", f:parse_RecalcId, r:2},
+	0x01c2: { n:"EntExU2", f:parse_EntExU2 },
+	0x0200: { n:"Dimensions", f:parse_Dimensions },
+	0x0201: { n:"Blank", f:parse_Blank },
+	0x0203: { n:"Number", f:parse_Number },
+	0x0204: { n:"Label", f:parse_Label },
+	0x0205: { n:"BoolErr", f:parse_BoolErr },
+	0x0207: { n:"String", f:parse_String },
+	0x0208: { n:'Row', f:parse_Row },
+	0x020b: { n:"Index", f:parse_Index },
+	0x0221: { n:"Array", f:parse_Array },
+	0x0225: { n:"DefaultRowHeight", f:parse_DefaultRowHeight },
+	0x0236: { n:"Table", f:parse_Table },
+	0x023e: { n:"Window2", f:parse_Window2 },
+	0x027e: { n:"RK", f:parse_RK },
+	0x0293: { n:"Style", f:parse_Style },
+	0x0418: { n:"BigName", f:parse_BigName },
+	0x041e: { n:"Format", f:parse_Format },
+	0x043c: { n:"ContinueBigName", f:parse_ContinueBigName },
+	0x04bc: { n:"ShrFmla", f:parse_ShrFmla },
+	0x0800: { n:"HLinkTooltip", f:parse_HLinkTooltip },
+	0x0801: { n:"WebPub", f:parse_WebPub },
+	0x0802: { n:"QsiSXTag", f:parse_QsiSXTag },
+	0x0803: { n:"DBQueryExt", f:parse_DBQueryExt },
+	0x0804: { n:"ExtString", f:parse_ExtString },
+	0x0805: { n:"TxtQry", f:parse_TxtQry },
+	0x0806: { n:"Qsir", f:parse_Qsir },
+	0x0807: { n:"Qsif", f:parse_Qsif },
+	0x0808: { n:"RRDTQSIF", f:parse_RRDTQSIF },
+	0x0809: { n:'BOF', f:parse_BOF },
+	0x080a: { n:"OleDbConn", f:parse_OleDbConn },
+	0x080b: { n:"WOpt", f:parse_WOpt },
+	0x080c: { n:"SXViewEx", f:parse_SXViewEx },
+	0x080d: { n:"SXTH", f:parse_SXTH },
+	0x080e: { n:"SXPIEx", f:parse_SXPIEx },
+	0x080f: { n:"SXVDTEx", f:parse_SXVDTEx },
+	0x0810: { n:"SXViewEx9", f:parse_SXViewEx9 },
+	0x0812: { n:"ContinueFrt", f:parse_ContinueFrt },
+	0x0813: { n:"RealTimeData", f:parse_RealTimeData },
+	0x0850: { n:"ChartFrtInfo", f:parse_ChartFrtInfo },
+	0x0851: { n:"FrtWrapper", f:parse_FrtWrapper },
+	0x0852: { n:"StartBlock", f:parse_StartBlock },
+	0x0853: { n:"EndBlock", f:parse_EndBlock },
+	0x0854: { n:"StartObject", f:parse_StartObject },
+	0x0855: { n:"EndObject", f:parse_EndObject },
+	0x0856: { n:"CatLab", f:parse_CatLab },
+	0x0857: { n:"YMult", f:parse_YMult },
+	0x0858: { n:"SXViewLink", f:parse_SXViewLink },
+	0x0859: { n:"PivotChartBits", f:parse_PivotChartBits },
+	0x085a: { n:"FrtFontList", f:parse_FrtFontList },
+	0x0862: { n:"SheetExt", f:parse_SheetExt },
+	0x0863: { n:"BookExt", f:parse_BookExt, r:12},
+	0x0864: { n:"SXAddl", f:parse_SXAddl },
+	0x0865: { n:"CrErr", f:parse_CrErr },
+	0x0866: { n:"HFPicture", f:parse_HFPicture },
+	0x0867: { n:'FeatHdr', f:parse_FeatHdr },
+	0x0868: { n:"Feat", f:parse_Feat },
+	0x086a: { n:"DataLabExt", f:parse_DataLabExt },
+	0x086b: { n:"DataLabExtContents", f:parse_DataLabExtContents },
+	0x086c: { n:"CellWatch", f:parse_CellWatch },
+	0x0871: { n:"FeatHdr11", f:parse_FeatHdr11 },
+	0x0872: { n:"Feature11", f:parse_Feature11 },
+	0x0874: { n:"DropDownObjIds", f:parse_DropDownObjIds },
+	0x0875: { n:"ContinueFrt11", f:parse_ContinueFrt11 },
+	0x0876: { n:"DConn", f:parse_DConn },
+	0x0877: { n:"List12", f:parse_List12 },
+	0x0878: { n:"Feature12", f:parse_Feature12 },
+	0x0879: { n:"CondFmt12", f:parse_CondFmt12 },
+	0x087a: { n:"CF12", f:parse_CF12 },
+	0x087b: { n:"CFEx", f:parse_CFEx },
+	0x087c: { n:"XFCRC", f:parse_XFCRC, r:12 },
+	0x087d: { n:"XFExt", f:parse_XFExt, r:12 },
+	0x087e: { n:"AutoFilter12", f:parse_AutoFilter12 },
+	0x087f: { n:"ContinueFrt12", f:parse_ContinueFrt12 },
+	0x0884: { n:"MDTInfo", f:parse_MDTInfo },
+	0x0885: { n:"MDXStr", f:parse_MDXStr },
+	0x0886: { n:"MDXTuple", f:parse_MDXTuple },
+	0x0887: { n:"MDXSet", f:parse_MDXSet },
+	0x0888: { n:"MDXProp", f:parse_MDXProp },
+	0x0889: { n:"MDXKPI", f:parse_MDXKPI },
+	0x088a: { n:"MDB", f:parse_MDB },
+	0x088b: { n:"PLV", f:parse_PLV },
+	0x088c: { n:"Compat12", f:parse_Compat12, r:12 },
+	0x088d: { n:"DXF", f:parse_DXF },
+	0x088e: { n:"TableStyles", f:parse_TableStyles, r:12 },
+	0x088f: { n:"TableStyle", f:parse_TableStyle },
+	0x0890: { n:"TableStyleElement", f:parse_TableStyleElement },
+	0x0892: { n:"StyleExt", f:parse_StyleExt },
+	0x0893: { n:"NamePublish", f:parse_NamePublish },
+	0x0894: { n:"NameCmt", f:parse_NameCmt },
+	0x0895: { n:"SortData", f:parse_SortData },
+	0x0896: { n:"Theme", f:parse_Theme, r:12 },
+	0x0897: { n:"GUIDTypeLib", f:parse_GUIDTypeLib },
+	0x0898: { n:"FnGrp12", f:parse_FnGrp12 },
+	0x0899: { n:"NameFnGrp12", f:parse_NameFnGrp12 },
+	0x089a: { n:"MTRSettings", f:parse_MTRSettings, r:12 },
+	0x089b: { n:"CompressPictures", f:parse_CompressPictures },
+	0x089c: { n:"HeaderFooter", f:parse_HeaderFooter },
+	0x089d: { n:"CrtLayout12", f:parse_CrtLayout12 },
+	0x089e: { n:"CrtMlFrt", f:parse_CrtMlFrt },
+	0x089f: { n:"CrtMlFrtContinue", f:parse_CrtMlFrtContinue },
+	0x08a3: { n:"ForceFullCalculation", f:parse_ForceFullCalculation },
+	0x08a4: { n:"ShapePropsStream", f:parse_ShapePropsStream },
+	0x08a5: { n:"TextPropsStream", f:parse_TextPropsStream },
+	0x08a6: { n:"RichTextStream", f:parse_RichTextStream },
+	0x08a7: { n:"CrtLayout12A", f:parse_CrtLayout12A },
+	0x1001: { n:"Units", f:parse_Units },
+	0x1002: { n:"Chart", f:parse_Chart },
+	0x1003: { n:"Series", f:parse_Series },
+	0x1006: { n:"DataFormat", f:parse_DataFormat },
+	0x1007: { n:"LineFormat", f:parse_LineFormat },
+	0x1009: { n:"MarkerFormat", f:parse_MarkerFormat },
+	0x100a: { n:"AreaFormat", f:parse_AreaFormat },
+	0x100b: { n:"PieFormat", f:parse_PieFormat },
+	0x100c: { n:"AttachedLabel", f:parse_AttachedLabel },
+	0x100d: { n:"SeriesText", f:parse_SeriesText },
+	0x1014: { n:"ChartFormat", f:parse_ChartFormat },
+	0x1015: { n:"Legend", f:parse_Legend },
+	0x1016: { n:"SeriesList", f:parse_SeriesList },
+	0x1017: { n:"Bar", f:parse_Bar },
+	0x1018: { n:"Line", f:parse_Line },
+	0x1019: { n:"Pie", f:parse_Pie },
+	0x101a: { n:"Area", f:parse_Area },
+	0x101b: { n:"Scatter", f:parse_Scatter },
+	0x101c: { n:"CrtLine", f:parse_CrtLine },
+	0x101d: { n:"Axis", f:parse_Axis },
+	0x101e: { n:"Tick", f:parse_Tick },
+	0x101f: { n:"ValueRange", f:parse_ValueRange },
+	0x1020: { n:"CatSerRange", f:parse_CatSerRange },
+	0x1021: { n:"AxisLine", f:parse_AxisLine },
+	0x1022: { n:"CrtLink", f:parse_CrtLink },
+	0x1024: { n:"DefaultText", f:parse_DefaultText },
+	0x1025: { n:"Text", f:parse_Text },
+	0x1026: { n:"FontX", f:parse_FontX },
+	0x1027: { n:"ObjectLink", f:parse_ObjectLink },
+	0x1032: { n:"Frame", f:parse_Frame },
+	0x1033: { n:"Begin", f:parse_Begin },
+	0x1034: { n:"End", f:parse_End },
+	0x1035: { n:"PlotArea", f:parse_PlotArea },
+	0x103a: { n:"Chart3d", f:parse_Chart3d },
+	0x103c: { n:"PicF", f:parse_PicF },
+	0x103d: { n:"DropBar", f:parse_DropBar },
+	0x103e: { n:"Radar", f:parse_Radar },
+	0x103f: { n:"Surf", f:parse_Surf },
+	0x1040: { n:"RadarArea", f:parse_RadarArea },
+	0x1041: { n:"AxisParent", f:parse_AxisParent },
+	0x1043: { n:"LegendException", f:parse_LegendException },
+	0x1044: { n:"ShtProps", f:parse_ShtProps },
+	0x1045: { n:"SerToCrt", f:parse_SerToCrt },
+	0x1046: { n:"AxesUsed", f:parse_AxesUsed },
+	0x1048: { n:"SBaseRef", f:parse_SBaseRef },
+	0x104a: { n:"SerParent", f:parse_SerParent },
+	0x104b: { n:"SerAuxTrend", f:parse_SerAuxTrend },
+	0x104e: { n:"IFmtRecord", f:parse_IFmtRecord },
+	0x104f: { n:"Pos", f:parse_Pos },
+	0x1050: { n:"AlRuns", f:parse_AlRuns },
+	0x1051: { n:"BRAI", f:parse_BRAI },
+	0x105b: { n:"SerAuxErrBar", f:parse_SerAuxErrBar },
+	0x105c: { n:"ClrtClient", f:parse_ClrtClient },
+	0x105d: { n:"SerFmt", f:parse_SerFmt },
+	0x105f: { n:"Chart3DBarShape", f:parse_Chart3DBarShape },
+	0x1060: { n:"Fbi", f:parse_Fbi },
+	0x1061: { n:"BopPop", f:parse_BopPop },
+	0x1062: { n:"AxcExt", f:parse_AxcExt },
+	0x1063: { n:"Dat", f:parse_Dat },
+	0x1064: { n:"PlotGrowth", f:parse_PlotGrowth },
+	0x1065: { n:"SIIndex", f:parse_SIIndex },
+	0x1066: { n:"GelFrame", f:parse_GelFrame },
+	0x1067: { n:"BopPopCustom", f:parse_BopPopCustom },
+	0x1068: { n:"Fbi2", f:parse_Fbi2 },
+
+	/* These are specified in an older version of the spec */
+	0x0016: { n:"ExternCount", f:parsenoop },
+	0x007e: { n:"RK", f:parsenoop }, /* Not necessarily same as 0x027e */
+	0x007f: { n:"ImData", f:parsenoop },
+	0x0087: { n:"Addin", f:parsenoop },
+	0x0088: { n:"Edg", f:parsenoop },
+	0x0089: { n:"Pub", f:parsenoop },
+	0x0091: { n:"Sub", f:parsenoop },
+	0x0094: { n:"LHRecord", f:parsenoop },
+	0x0095: { n:"LHNGraph", f:parsenoop },
+	0x0096: { n:"Sound", f:parsenoop },
+	0x00a9: { n:"CoordList", f:parsenoop },
+	0x00ab: { n:"GCW", f:parsenoop },
+	0x00bc: { n:"ShrFmla", f:parsenoop }, /* Not necessarily same as 0x04bc */
+	0x00c2: { n:"AddMenu", f:parsenoop },
+	0x00c3: { n:"DelMenu", f:parsenoop },
+	0x00d6: { n:"RString", f:parsenoop },
+	0x00df: { n:"UDDesc", f:parsenoop },
+	0x00ea: { n:"TabIdConf", f:parsenoop },
+	0x0162: { n:"XL5Modify", f:parsenoop },
+	0x01a5: { n:"FileSharing2", f:parsenoop },
+	0x0218: { n:"Name", f:parsenoop },
+	0x0223: { n:"ExternName", f:parse_ExternName },
+	0x0231: { n:"Font", f:parsenoop },
+	0x0406: { n:"Formula", f:parse_Formula },
+	0x086d: { n:"FeatInfo", f:parsenoop },
+	0x0873: { n:"FeatInfo11", f:parsenoop },
+	0x0881: { n:"SXAddl12", f:parsenoop },
+	0x08c0: { n:"AutoWebPub", f:parsenoop },
+	0x08c1: { n:"ListObj", f:parsenoop },
+	0x08c2: { n:"ListField", f:parsenoop },
+	0x08c3: { n:"ListDV", f:parsenoop },
+	0x08c4: { n:"ListCondFmt", f:parsenoop },
+	0x08c5: { n:"ListCF", f:parsenoop },
+	0x08c6: { n:"FMQry", f:parsenoop },
+	0x08c7: { n:"FMSQry", f:parsenoop },
+	0x08c8: { n:"PLV", f:parsenoop }, /* supposedly PLV for Excel 11 */
+	0x08c9: { n:"LnExt", f:parsenoop },
+	0x08ca: { n:"MkrExt", f:parsenoop },
+	0x08cb: { n:"CrtCoopt", f:parsenoop },
+
+	0x0000: {}
+};
+
+
+/* Helper function to call out to ODS parser */
+function parse_ods(zip, opts) {
+	if(typeof module !== "undefined" && typeof require !== 'undefined' && typeof ODS === 'undefined') ODS = require('./od' + 's');
+	if(typeof ODS === 'undefined' || !ODS.parse_ods) throw new Error("Unsupported ODS");
+	return ODS.parse_ods(zip, opts);
+}
+function fix_opts_func(defaults) {
+	return function fix_opts(opts) {
+		for(var i = 0; i != defaults.length; ++i) {
+			var d = defaults[i];
+			if(opts[d[0]] === undefined) opts[d[0]] = d[1];
+			if(d[2] === 'n') opts[d[0]] = Number(opts[d[0]]);
+		}
+	};
+}
+
+var fix_read_opts = fix_opts_func([
+	['cellNF', false], /* emit cell number format string as .z */
+	['cellHTML', true], /* emit html string as .h */
+	['cellFormula', true], /* emit formulae as .f */
+	['cellStyles', false], /* emits style/theme as .s */
+	['cellDates', false], /* emit date cells with type `d` */
+
+	['sheetStubs', false], /* emit empty cells */
+	['sheetRows', 0, 'n'], /* read n rows (0 = read all rows) */
+
+	['bookDeps', false], /* parse calculation chains */
+	['bookSheets', false], /* only try to get sheet names (no Sheets) */
+	['bookProps', false], /* only try to get properties (no Sheets) */
+	['bookFiles', false], /* include raw file structure (keys, files, cfb) */
+	['bookVBA', false], /* include vba raw data (vbaraw) */
+
+	['password',''], /* password */
+	['WTF', false] /* WTF mode (throws errors) */
+]);
+
+
+var fix_write_opts = fix_opts_func([
+	['cellDates', false], /* write date cells with type `d` */
+
+	['bookSST', false], /* Generate Shared String Table */
+
+	['bookType', 'xlsx'], /* Type of workbook (xlsx/m/b) */
+
+	['WTF', false] /* WTF mode (throws errors) */
+]);
+function safe_parse_wbrels(wbrels, sheets) {
+	if(!wbrels) return 0;
+	try {
+		wbrels = sheets.map(function pwbr(w) { return [w.name, wbrels['!id'][w.id].Target]; });
+	} catch(e) { return null; }
+	return !wbrels || wbrels.length === 0 ? null : wbrels;
+}
+
+function safe_parse_ws(zip, path, relsPath, sheet, sheetRels, sheets, opts) {
+	try {
+		sheetRels[sheet]=parse_rels(getzipdata(zip, relsPath, true), path);
+		sheets[sheet]=parse_ws(getzipdata(zip, path),path,opts,sheetRels[sheet]);
+	} catch(e) { if(opts.WTF) throw e; }
+}
+
+var nodirs = function nodirs(x){return x.substr(-1) != '/';};
+function parse_zip(zip, opts) {
+	make_ssf(SSF);
+	opts = opts || {};
+	fix_read_opts(opts);
+	reset_cp();
+
+	/* OpenDocument Part 3 Section 2.2.1 OpenDocument Package */
+	if(safegetzipfile(zip, 'META-INF/manifest.xml')) return parse_ods(zip, opts);
+
+	var entries = keys(zip.files).filter(nodirs).sort();
+	var dir = parse_ct(getzipdata(zip, '[Content_Types].xml'), opts);
+	var xlsb = false;
+	var sheets, binname;
+	if(dir.workbooks.length === 0) {
+		binname = "xl/workbook.xml";
+		if(getzipdata(zip,binname, true)) dir.workbooks.push(binname);
+	}
+	if(dir.workbooks.length === 0) {
+		binname = "xl/workbook.bin";
+		if(!getzipfile(zip,binname,true)) throw new Error("Could not find workbook");
+		dir.workbooks.push(binname);
+		xlsb = true;
+	}
+	if(dir.workbooks[0].substr(-3) == "bin") xlsb = true;
+	if(xlsb) set_cp(1200);
+
+	if(!opts.bookSheets && !opts.bookProps) {
+		strs = [];
+		if(dir.sst) strs=parse_sst(getzipdata(zip, dir.sst.replace(/^\//,'')), dir.sst, opts);
+
+    // parse themes before styles so that we can reliably decode theme/tint into rgb when parsing styles
+    themes = {};
+    if(opts.cellStyles && dir.themes.length) themes = parse_theme(getzipdata(zip, dir.themes[0].replace(/^\//,''), true),dir.themes[0], opts);
+
+    styles = {};
+		if(dir.style) styles = parse_sty(getzipdata(zip, dir.style.replace(/^\//,'')),dir.style, opts);
+
+	}
+
+	var wb = parse_wb(getzipdata(zip, dir.workbooks[0].replace(/^\//,'')), dir.workbooks[0], opts);
+
+	var props = {}, propdata = "";
+
+	if(dir.coreprops.length !== 0) {
+		propdata = getzipdata(zip, dir.coreprops[0].replace(/^\//,''), true);
+		if(propdata) props = parse_core_props(propdata);
+		if(dir.extprops.length !== 0) {
+			propdata = getzipdata(zip, dir.extprops[0].replace(/^\//,''), true);
+			if(propdata) parse_ext_props(propdata, props);
+		}
+	}
+
+	var custprops = {};
+	if(!opts.bookSheets || opts.bookProps) {
+		if (dir.custprops.length !== 0) {
+			propdata = getzipdata(zip, dir.custprops[0].replace(/^\//,''), true);
+			if(propdata) custprops = parse_cust_props(propdata, opts);
+		}
+	}
+
+	var out = {};
+	if(opts.bookSheets || opts.bookProps) {
+		if(props.Worksheets && props.SheetNames.length > 0) sheets=props.SheetNames;
+		else if(wb.Sheets) sheets = wb.Sheets.map(function pluck(x){ return x.name; });
+		if(opts.bookProps) { out.Props = props; out.Custprops = custprops; }
+		if(typeof sheets !== 'undefined') out.SheetNames = sheets;
+		if(opts.bookSheets ? out.SheetNames : opts.bookProps) return out;
+	}
+	sheets = {};
+
+	var deps = {};
+	if(opts.bookDeps && dir.calcchain) deps=parse_cc(getzipdata(zip, dir.calcchain.replace(/^\//,'')),dir.calcchain,opts);
+
+	var i=0;
+	var sheetRels = {};
+	var path, relsPath;
+	if(!props.Worksheets) {
+		var wbsheets = wb.Sheets;
+		props.Worksheets = wbsheets.length;
+		props.SheetNames = [];
+		for(var j = 0; j != wbsheets.length; ++j) {
+			props.SheetNames[j] = wbsheets[j].name;
+		}
+	}
+
+	var wbext = xlsb ? "bin" : "xml";
+	var wbrelsfile = 'xl/_rels/workbook.' + wbext + '.rels';
+	var wbrels = parse_rels(getzipdata(zip, wbrelsfile, true), wbrelsfile);
+	if(wbrels) wbrels = safe_parse_wbrels(wbrels, wb.Sheets);
+	/* Numbers iOS hack */
+	var nmode = (getzipdata(zip,"xl/worksheets/sheet.xml",true))?1:0;
+	for(i = 0; i != props.Worksheets; ++i) {
+		if(wbrels) path = 'xl/' + (wbrels[i][1]).replace(/[\/]?xl\//, "");
+		else {
+			path = 'xl/worksheets/sheet'+(i+1-nmode)+"." + wbext;
+			path = path.replace(/sheet0\./,"sheet.");
+		}
+		relsPath = path.replace(/^(.*)(\/)([^\/]*)$/, "$1/_rels/$3.rels");
+		safe_parse_ws(zip, path, relsPath, props.SheetNames[i], sheetRels, sheets, opts);
+	}
+
+	if(dir.comments) parse_comments(zip, dir.comments, sheets, sheetRels, opts);
+
+	out = {
+		Directory: dir,
+		Workbook: wb,
+		Props: props,
+		Custprops: custprops,
+		Deps: deps,
+		Sheets: sheets,
+		SheetNames: props.SheetNames,
+		Strings: strs,
+		Styles: styles,
+		Themes: themes,
+		SSF: SSF.get_table()
+	};
+	if(opts.bookFiles) {
+		out.keys = entries;
+		out.files = zip.files;
+	}
+	if(opts.bookVBA) {
+		if(dir.vba.length > 0) out.vbaraw = getzipdata(zip,dir.vba[0],true);
+		else if(dir.defaults.bin === 'application/vnd.ms-office.vbaProject') out.vbaraw = getzipdata(zip,'xl/vbaProject.bin',true);
+	}
+	return out;
+}
+function add_rels(rels, rId, f, type, relobj) {
+	if(!relobj) relobj = {};
+	if(!rels['!id']) rels['!id'] = {};
+	relobj.Id = 'rId' + rId;
+	relobj.Type = type;
+	relobj.Target = f;
+	if(rels['!id'][relobj.Id]) throw new Error("Cannot rewrite rId " + rId);
+	rels['!id'][relobj.Id] = relobj;
+	rels[('/' + relobj.Target).replace("//","/")] = relobj;
+}
+
+function write_zip(wb, opts) {
+	if(wb && !wb.SSF) {
+		wb.SSF = SSF.get_table();
+	}
+	if(wb && wb.SSF) {
+		make_ssf(SSF); SSF.load_table(wb.SSF);
+		opts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;
+	}
+	opts.rels = {}; opts.wbrels = {};
+	opts.Strings = []; opts.Strings.Count = 0; opts.Strings.Unique = 0;
+	var wbext = opts.bookType == "xlsb" ? "bin" : "xml";
+	var ct = { workbooks: [], sheets: [], calcchains: [], themes: [], styles: [],
+		coreprops: [], extprops: [], custprops: [], strs:[], comments: [], vba: [],
+		TODO:[], rels:[], xmlns: "" };
+	fix_write_opts(opts = opts || {});
+	var zip = new jszip();
+	var f = "", rId = 0;
+
+	opts.cellXfs = [];
+	get_cell_style(opts.cellXfs, {}, {revssf:{"General":0}});
+
+	f = "docProps/core.xml";
+	zip.file(f, write_core_props(wb.Props, opts));
+	ct.coreprops.push(f);
+	add_rels(opts.rels, 2, f, RELS.CORE_PROPS);
+
+	f = "docProps/app.xml";
+	if(!wb.Props) wb.Props = {};
+	wb.Props.SheetNames = wb.SheetNames;
+	wb.Props.Worksheets = wb.SheetNames.length;
+	zip.file(f, write_ext_props(wb.Props, opts));
+	ct.extprops.push(f);
+	add_rels(opts.rels, 3, f, RELS.EXT_PROPS);
+
+	if(wb.Custprops !== wb.Props && keys(wb.Custprops||{}).length > 0) {
+		f = "docProps/custom.xml";
+		zip.file(f, write_cust_props(wb.Custprops, opts));
+		ct.custprops.push(f);
+		add_rels(opts.rels, 4, f, RELS.CUST_PROPS);
+	}
+
+	f = "xl/workbook." + wbext;
+	zip.file(f, write_wb(wb, f, opts));
+	ct.workbooks.push(f);
+	add_rels(opts.rels, 1, f, RELS.WB);
+
+	for(rId=1;rId <= wb.SheetNames.length; ++rId) {
+		f = "xl/worksheets/sheet" + rId + "." + wbext;
+		zip.file(f, write_ws(rId-1, f, opts, wb));
+		ct.sheets.push(f);
+		add_rels(opts.wbrels, rId, "worksheets/sheet" + rId + "." + wbext, RELS.WS);
+	}
+
+	if(opts.Strings != null && opts.Strings.length > 0) {
+		f = "xl/sharedStrings." + wbext;
+		zip.file(f, write_sst(opts.Strings, f, opts));
+		ct.strs.push(f);
+		add_rels(opts.wbrels, ++rId, "sharedStrings." + wbext, RELS.SST);
+	}
+
+	/* TODO: something more intelligent with themes */
+
+	f = "xl/theme/theme1.xml";
+  zip.file(f, write_theme(opts));
+	ct.themes.push(f);
+	add_rels(opts.wbrels, ++rId, "theme/theme1.xml", RELS.THEME);
+
+	/* TODO: something more intelligent with styles */
+
+	f = "xl/styles." + wbext;
+	zip.file(f, write_sty(wb, f, opts));
+	ct.styles.push(f);
+	add_rels(opts.wbrels, ++rId, "styles." + wbext, RELS.STY);
+
+	zip.file("[Content_Types].xml", write_ct(ct, opts));
+	zip.file('_rels/.rels', write_rels(opts.rels));
+	zip.file('xl/_rels/workbook.' + wbext + '.rels', write_rels(opts.wbrels));
+	return zip;
+}
+function firstbyte(f,o) {
+	switch((o||{}).type || "base64") {
+		case 'buffer': return f[0];
+		case 'base64': return Base64.decode(f.substr(0,12)).charCodeAt(0);
+		case 'binary': return f.charCodeAt(0);
+		case 'array': return f[0];
+		default: throw new Error("Unrecognized type " + o.type);
+	}
+}
+
+function read_zip(data, opts) {
+	var zip, d = data;
+	var o = opts||{};
+	if(!o.type) o.type = (has_buf && Buffer.isBuffer(data)) ? "buffer" : "base64";
+	switch(o.type) {
+		case "base64": zip = new jszip(d, { base64:true }); break;
+		case "binary": case "array": zip = new jszip(d, { base64:false }); break;
+		case "buffer": zip = new jszip(d); break;
+		case "file": zip=new jszip(d=_fs.readFileSync(data)); break;
+		default: throw new Error("Unrecognized type " + o.type);
+	}
+	return parse_zip(zip, o);
+}
+
+function readSync(data, opts) {
+	var zip, d = data, isfile = false, n;
+	var o = opts||{};
+	if(!o.type) o.type = (has_buf && Buffer.isBuffer(data)) ? "buffer" : "base64";
+	if(o.type == "file") { isfile = true; o.type = "buffer"; d = _fs.readFileSync(data); }
+	switch((n = firstbyte(d, o))) {
+		case 0xD0:
+			if(isfile) o.type = "file";
+			return parse_xlscfb(CFB.read(data, o), o);
+		case 0x09: return parse_xlscfb(s2a(o.type === 'base64' ? Base64.decode(data) : data), o);
+		case 0x3C: return parse_xlml(d, o);
+		case 0x50:
+			if(isfile) o.type = "file";
+			return read_zip(data, opts);
+		default: throw new Error("Unsupported file " + n);
+	}
+}
+
+function readFileSync(data, opts) {
+	var o = opts||{}; o.type = 'file'
+  var wb = readSync(data, o);
+  wb.FILENAME = data;
+	return wb;
+}
+function write_zip_type(wb, opts) {
+	var o = opts||{};
+  style_builder  = new StyleBuilder(opts);
+
+  var z = write_zip(wb, o);
+	switch(o.type) {
+		case "base64": return z.generate({type:"base64"});
+		case "binary": return z.generate({type:"string"});
+		case "buffer": return z.generate({type:"nodebuffer"});
+		case "file": return _fs.writeFileSync(o.file, z.generate({type:"nodebuffer"}));
+		default: throw new Error("Unrecognized type " + o.type);
+	}
+}
+
+function writeSync(wb, opts) {
+	var o = opts||{};
+	switch(o.bookType) {
+		case 'xml': return write_xlml(wb, o);
+		default: return write_zip_type(wb, o);
+	}
+}
+
+function writeFileSync(wb, filename, opts) {
+	var o = opts||{}; o.type = 'file';
+
+	o.file = filename;
+	switch(o.file.substr(-5).toLowerCase()) {
+		case '.xlsx': o.bookType = 'xlsx'; break;
+		case '.xlsm': o.bookType = 'xlsm'; break;
+		case '.xlsb': o.bookType = 'xlsb'; break;
+	default: switch(o.file.substr(-4).toLowerCase()) {
+		case '.xls': o.bookType = 'xls'; break;
+		case '.xml': o.bookType = 'xml'; break;
+	}}
+	return writeSync(wb, o);
+}
+
+function decode_row(rowstr) { return parseInt(unfix_row(rowstr),10) - 1; }
+function encode_row(row) { return "" + (row + 1); }
+function fix_row(cstr) { return cstr.replace(/([A-Z]|^)(\d+)$/,"$1$$$2"); }
+function unfix_row(cstr) { return cstr.replace(/\$(\d+)$/,"$1"); }
+
+function decode_col(colstr) { var c = unfix_col(colstr), d = 0, i = 0; for(; i !== c.length; ++i) d = 26*d + c.charCodeAt(i) - 64; return d - 1; }
+function encode_col(col) { var s=""; for(++col; col; col=Math.floor((col-1)/26)) s = String.fromCharCode(((col-1)%26) + 65) + s; return s; }
+function fix_col(cstr) { return cstr.replace(/^([A-Z])/,"$$$1"); }
+function unfix_col(cstr) { return cstr.replace(/^\$([A-Z])/,"$1"); }
+
+function split_cell(cstr) { return cstr.replace(/(\$?[A-Z]*)(\$?\d*)/,"$1,$2").split(","); }
+function decode_cell(cstr) { var splt = split_cell(cstr); return { c:decode_col(splt[0]), r:decode_row(splt[1]) }; }
+function encode_cell(cell) { return encode_col(cell.c) + encode_row(cell.r); }
+function fix_cell(cstr) { return fix_col(fix_row(cstr)); }
+function unfix_cell(cstr) { return unfix_col(unfix_row(cstr)); }
+function decode_range(range) { var x =range.split(":").map(decode_cell); return {s:x[0],e:x[x.length-1]}; }
+function encode_range(cs,ce) {
+	if(ce === undefined || typeof ce === 'number') return encode_range(cs.s, cs.e);
+	if(typeof cs !== 'string') cs = encode_cell(cs); if(typeof ce !== 'string') ce = encode_cell(ce);
+	return cs == ce ? cs : cs + ":" + ce;
+}
+
+function safe_decode_range(range) {
+	var o = {s:{c:0,r:0},e:{c:0,r:0}};
+	var idx = 0, i = 0, cc = 0;
+	var len = range.length;
+	for(idx = 0; i < len; ++i) {
+		if((cc=range.charCodeAt(i)-64) < 1 || cc > 26) break;
+		idx = 26*idx + cc;
+	}
+	o.s.c = --idx;
+
+	for(idx = 0; i < len; ++i) {
+		if((cc=range.charCodeAt(i)-48) < 0 || cc > 9) break;
+		idx = 10*idx + cc;
+	}
+	o.s.r = --idx;
+
+	if(i === len || range.charCodeAt(++i) === 58) { o.e.c=o.s.c; o.e.r=o.s.r; return o; }
+
+	for(idx = 0; i != len; ++i) {
+		if((cc=range.charCodeAt(i)-64) < 1 || cc > 26) break;
+		idx = 26*idx + cc;
+	}
+	o.e.c = --idx;
+
+	for(idx = 0; i != len; ++i) {
+		if((cc=range.charCodeAt(i)-48) < 0 || cc > 9) break;
+		idx = 10*idx + cc;
+	}
+	o.e.r = --idx;
+	return o;
+}
+
+function safe_format_cell(cell, v) {
+	if(cell.z !== undefined) try { return (cell.w = SSF.format(cell.z, v)); } catch(e) { }
+	if(!cell.XF) return v;
+	try { return (cell.w = SSF.format(cell.XF.ifmt||0, v)); } catch(e) { return ''+v; }
+}
+
+function format_cell(cell, v) {
+	if(cell == null || cell.t == null) return "";
+	if(cell.w !== undefined) return cell.w;
+	if(v === undefined) return safe_format_cell(cell, cell.v);
+	return safe_format_cell(cell, v);
+}
+
+function sheet_to_json(sheet, opts){
+	var val, row, range, header = 0, offset = 1, r, hdr = [], isempty, R, C, v;
+	var o = opts != null ? opts : {};
+	var raw = o.raw;
+	if(sheet == null || sheet["!ref"] == null) return [];
+	range = o.range !== undefined ? o.range : sheet["!ref"];
+	if(o.header === 1) header = 1;
+	else if(o.header === "A") header = 2;
+	else if(Array.isArray(o.header)) header = 3;
+	switch(typeof range) {
+		case 'string': r = safe_decode_range(range); break;
+		case 'number': r = safe_decode_range(sheet["!ref"]); r.s.r = range; break;
+		default: r = range;
+	}
+	if(header > 0) offset = 0;
+	var rr = encode_row(r.s.r);
+	var cols = new Array(r.e.c-r.s.c+1);
+	var out = new Array(r.e.r-r.s.r-offset+1);
+	var outi = 0;
+	for(C = r.s.c; C <= r.e.c; ++C) {
+		cols[C] = encode_col(C);
+		val = sheet[cols[C] + rr];
+		switch(header) {
+			case 1: hdr[C] = C; break;
+			case 2: hdr[C] = cols[C]; break;
+			case 3: hdr[C] = o.header[C - r.s.c]; break;
+			default:
+				if(val === undefined) continue;
+				hdr[C] = format_cell(val);
+		}
+	}
+
+	for (R = r.s.r + offset; R <= r.e.r; ++R) {
+		rr = encode_row(R);
+		isempty = true;
+		if(header === 1) row = [];
+		else {
+			row = {};
+			if(Object.defineProperty) Object.defineProperty(row, '__rowNum__', {value:R, enumerable:false});
+			else row.__rowNum__ = R;
+		}
+		for (C = r.s.c; C <= r.e.c; ++C) {
+			val = sheet[cols[C] + rr];
+			if(val === undefined || val.t === undefined) continue;
+			v = val.v;
+			switch(val.t){
+				case 'e': continue;
+				case 's': break;
+				case 'b': case 'n': break;
+				default: throw 'unrecognized type ' + val.t;
+			}
+			if(v !== undefined) {
+				row[hdr[C]] = raw ? v : format_cell(val,v);
+				isempty = false;
+			}
+		}
+		if(isempty === false || header === 1) out[outi++] = row;
+	}
+	out.length = outi;
+	return out;
+}
+
+function sheet_to_row_object_array(sheet, opts) { return sheet_to_json(sheet, opts != null ? opts : {}); }
+
+function sheet_to_csv(sheet, opts) {
+	var out = "", txt = "", qreg = /"/g;
+	var o = opts == null ? {} : opts;
+	if(sheet == null || sheet["!ref"] == null) return "";
+	var r = safe_decode_range(sheet["!ref"]);
+	var FS = o.FS !== undefined ? o.FS : ",", fs = FS.charCodeAt(0);
+	var RS = o.RS !== undefined ? o.RS : "\n", rs = RS.charCodeAt(0);
+	var row = "", rr = "", cols = [];
+	var i = 0, cc = 0, val;
+	var R = 0, C = 0;
+	for(C = r.s.c; C <= r.e.c; ++C) cols[C] = encode_col(C);
+	for(R = r.s.r; R <= r.e.r; ++R) {
+		row = "";
+		rr = encode_row(R);
+		for(C = r.s.c; C <= r.e.c; ++C) {
+			val = sheet[cols[C] + rr];
+			txt = val !== undefined ? ''+format_cell(val) : "";
+			for(i = 0, cc = 0; i !== txt.length; ++i) if((cc = txt.charCodeAt(i)) === fs || cc === rs || cc === 34) {
+				txt = "\"" + txt.replace(qreg, '""') + "\""; break; }
+			row += (C === r.s.c ? "" : FS) + txt;
+		}
+		out += row + RS;
+	}
+	return out;
+}
+var make_csv = sheet_to_csv;
+
+function sheet_to_formulae(sheet) {
+	var cmds, y = "", x, val="";
+	if(sheet == null || sheet["!ref"] == null) return "";
+	var r = safe_decode_range(sheet['!ref']), rr = "", cols = [], C;
+	cmds = new Array((r.e.r-r.s.r+1)*(r.e.c-r.s.c+1));
+	var i = 0;
+	for(C = r.s.c; C <= r.e.c; ++C) cols[C] = encode_col(C);
+	for(var R = r.s.r; R <= r.e.r; ++R) {
+		rr = encode_row(R);
+		for(C = r.s.c; C <= r.e.c; ++C) {
+			y = cols[C] + rr;
+			x = sheet[y];
+			val = "";
+			if(x === undefined) continue;
+			if(x.f != null) val = x.f;
+			else if(x.w !== undefined) val = "'" + x.w;
+			else if(x.v === undefined) continue;
+			else val = ""+x.v;
+			cmds[i++] = y + "=" + val;
+		}
+	}
+	cmds.length = i;
+	return cmds;
+}
+
+var utils = {
+	encode_col: encode_col,
+	encode_row: encode_row,
+	encode_cell: encode_cell,
+	encode_range: encode_range,
+	decode_col: decode_col,
+	decode_row: decode_row,
+	split_cell: split_cell,
+	decode_cell: decode_cell,
+	decode_range: decode_range,
+	format_cell: format_cell,
+	get_formulae: sheet_to_formulae,
+	make_csv: sheet_to_csv,
+	make_json: sheet_to_json,
+	make_formulae: sheet_to_formulae,
+	sheet_to_csv: sheet_to_csv,
+	sheet_to_json: sheet_to_json,
+	sheet_to_formulae: sheet_to_formulae,
+	sheet_to_row_object_array: sheet_to_row_object_array
+};
+
+
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////
+var XmlNode = (function () {
+  function XmlNode(tagName, attributes, children) {
+
+    if (!(this instanceof XmlNode)) {
+      return new XmlNode(tagName, attributes, children);
+    }
+    this.tagName = tagName;
+    this._attributes = attributes || {};
+    this._children = children || [];
+    this._prefix = '';
+    return this;
+  }
+
+  XmlNode.prototype.createElement = function () {
+    return new XmlNode(arguments)
+  }
+
+  XmlNode.prototype.children = function() {
+    return this._children;
+  }
+
+  XmlNode.prototype.append = function (node) {
+    this._children.push(node);
+    return this;
+  }
+
+  XmlNode.prototype.prefix = function (prefix) {
+    if (arguments.length==0) { return this._prefix;}
+    this._prefix = prefix;
+    return this;
+  }
+
+  XmlNode.prototype.attr = function (attr, value) {
+    if (value == undefined) {
+      delete this._attributes[attr];
+      return this;
+    }
+    if (arguments.length == 0) {
+      return this._attributes;
+    }
+    else if (typeof attr == 'string' && arguments.length == 1) {
+      return this._attributes.attr[attr];
+    }
+    if (typeof attr == 'object' && arguments.length == 1) {
+      for (var key in attr) {
+        this._attributes[key] = attr[key];
+      }
+    }
+    else if (arguments.length == 2 && typeof attr == 'string') {
+      this._attributes[attr] = value;
+    }
+    return this;
+  }
+
+  var APOS = "'"; QUOTE = '"'
+  var ESCAPED_QUOTE = {  }
+  ESCAPED_QUOTE[QUOTE] = '&quot;'
+  ESCAPED_QUOTE[APOS] = '&apos;'
+
+  XmlNode.prototype.escapeAttributeValue = function(att_value) {
+    return '"' + att_value.replace(/\"/g,'&quot;') + '"';// TODO Extend with four other codes
+
+  }
+
+  XmlNode.prototype.toXml = function (node) {
+    if (!node) node = this;
+    var xml = node._prefix;
+    xml += '<' + node.tagName;
+    if (node._attributes) {
+      for (var key in node._attributes) {
+        xml += ' ' + key + '=' + this.escapeAttributeValue(''+node._attributes[key]) + ''
+      }
+    }
+    if (node._children && node._children.length > 0) {
+      xml += ">";
+      for (var i = 0; i < node._children.length; i++) {
+        xml += this.toXml(node._children[i]);
+      }
+      xml += '</' + node.tagName + '>';
+    }
+    else {
+      xml += '/>';
+    }
+    return xml;
+  }
+  return XmlNode;
+})();
+/////////////////////////////////////////////////////////////////////////////////////////////////////
+
+  var StyleBuilder = function (options) {
+
+    var customNumFmtId = 164;
+
+
+
+    var table_fmt = {
+      0:  'General',
+      1:  '0',
+      2:  '0.00',
+      3:  '#,##0',
+      4:  '#,##0.00',
+      9:  '0%',
+      10: '0.00%',
+      11: '0.00E+00',
+      12: '# ?/?',
+      13: '# ??/??',
+      14: 'm/d/yy',
+      15: 'd-mmm-yy',
+      16: 'd-mmm',
+      17: 'mmm-yy',
+      18: 'h:mm AM/PM',
+      19: 'h:mm:ss AM/PM',
+      20: 'h:mm',
+      21: 'h:mm:ss',
+      22: 'm/d/yy h:mm',
+      37: '#,##0 ;(#,##0)',
+      38: '#,##0 ;[Red](#,##0)',
+      39: '#,##0.00;(#,##0.00)',
+      40: '#,##0.00;[Red](#,##0.00)',
+      45: 'mm:ss',
+      46: '[h]:mm:ss',
+      47: 'mmss.0',
+      48: '##0.0E+0',
+      49: '@',
+      56: '"涓婂崍/涓嬪崍 "hh"鏅�"mm"鍒�"ss"绉� "'    };
+    var fmt_table = {};
+
+    for (var idx in table_fmt) {
+      fmt_table[table_fmt[idx]] = idx;
+    }
+
+
+    // cache style specs to avoid excessive duplication
+    _hashIndex = {};
+    _listIndex = [];
+
+    return {
+
+      initialize: function (options) {
+
+        this.$fonts = XmlNode('fonts').attr('count',0).attr("x14ac:knownFonts","1");
+        this.$fills = XmlNode('fills').attr('count',0);
+        this.$borders = XmlNode('borders').attr('count',0);
+        this.$numFmts = XmlNode('numFmts').attr('count',0);
+        this.$cellStyleXfs = XmlNode('cellStyleXfs');
+        this.$xf = XmlNode('xf')
+            .attr('numFmtId', 0)
+            .attr('fontId', 0)
+            .attr('fillId', 0)
+            .attr('borderId', 0);
+
+        this.$cellXfs = XmlNode('cellXfs').attr('count',0);
+        this.$cellStyles = XmlNode('cellStyles')
+            .append(XmlNode('cellStyle')
+                .attr('name', 'Normal')
+                .attr('xfId',0)
+                .attr('builtinId',0)
+            );
+        this.$dxfs = XmlNode('dxfs').attr('count', "0");
+        this.$tableStyles = XmlNode('tableStyles')
+            .attr('count','0')
+            .attr('defaultTableStyle','TableStyleMedium9')
+            .attr('defaultPivotStyle','PivotStyleMedium4')
+
+
+        this.$styles = XmlNode('styleSheet')
+            .attr('xmlns:mc','http://schemas.openxmlformats.org/markup-compatibility/2006')
+            .attr('xmlns:x14ac','http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac')
+            .attr('xmlns','http://schemas.openxmlformats.org/spreadsheetml/2006/main')
+            .attr('mc:Ignorable','x14ac')
+            .prefix('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>')
+            .append(this.$numFmts)
+            .append(this.$fonts)
+            .append(this.$fills)
+            .append(this.$borders)
+            .append(this.$cellStyleXfs.append(this.$xf))
+            .append(this.$cellXfs)
+            .append(this.$cellStyles)
+            .append(this.$dxfs)
+            .append(this.$tableStyles);
+
+
+        // need to specify styles at index 0 and 1.
+        // the second style MUST be gray125 for some reason
+
+        var defaultStyle = options.defaultCellStyle || {};
+        if (!defaultStyle.font) defaultStyle.font = {name: 'Calibri', sz: '12'};
+        if (!defaultStyle.font.name) defaultStyle.font.name = 'Calibri';
+        if (!defaultStyle.font.sz) defaultStyle.font.sz = 11;
+        if (!defaultStyle.fill) defaultStyle.fill = {  patternType: "none", fgColor: {}};
+        if (!defaultStyle.border) defaultStyle.border = {};
+        if (!defaultStyle.numFmt) defaultStyle.numFmt = 0;
+
+        this.defaultStyle = defaultStyle;
+
+        var gray125Style = JSON.parse(JSON.stringify(defaultStyle));
+        gray125Style.fill = {patternType: "gray125", fgColor: { }}
+
+        this.addStyles([defaultStyle, gray125Style]);
+        return this;
+      },
+
+      // create a style entry and returns an integer index that can be used in the cell .s property
+      // these format of this object follows the emerging Common Spreadsheet Format
+      addStyle: function (attributes) {
+
+        var hashKey = JSON.stringify(attributes);
+        var index = _hashIndex[hashKey];
+        if (index == undefined) {
+
+          index = this._addXf(attributes); //_listIndex.push(attributes) -1;
+          _hashIndex[hashKey] = index;
+        }
+        else {
+          index = _hashIndex[hashKey];
+        }
+        return index;
+      },
+
+      // create style entries and returns array of integer indexes that can be used in cell .s property
+      addStyles: function (styles) {
+        var self = this;
+        return styles.map(function (style) {
+          return self.addStyle(style);
+        })
+      },
+
+      _duckTypeStyle: function(attributes) {
+
+        if (typeof attributes == 'object' && (attributes.patternFill || attributes.fgColor)) {
+          return {fill: attributes }; // this must be read via XLSX.parseFile(...)
+        }
+        else if (attributes.font || attributes.numFmt || attributes.border || attributes.fill) {
+          return attributes;
+        }
+        else {
+          return this._getStyleCSS(attributes)
+        }
+      },
+
+      _getStyleCSS: function(css) {
+        return css; //TODO
+      },
+
+      // Create an <xf> record for the style as well as corresponding <font>, <fill>, <border>, <numfmts>
+      // Right now this is simple and creates a <font>, <fill>, <border>, <numfmts> for every <xf>
+      // We could perhaps get fancier and avoid duplicating  auxiliary entries as Excel presumably intended, but bother.
+      _addXf: function (attributes) {
+
+
+        var fontId = this._addFont(attributes.font);
+        var fillId = this._addFill(attributes.fill);
+        var borderId = this._addBorder(attributes.border);
+        var numFmtId = this._addNumFmt(attributes.numFmt);
+
+        var $xf = XmlNode('xf')
+            .attr("numFmtId", numFmtId)
+            .attr("fontId", fontId)
+            .attr("fillId", fillId)
+            .attr("borderId", borderId)
+            .attr("xfId", "0");
+
+        if (fontId > 0) {
+          $xf.attr('applyFont', "1");
+        }
+        if (fillId > 0) {
+          $xf.attr('applyFill', "1");
+        }
+        if (borderId > 0) {
+          $xf.attr('applyBorder', "1");
+        }
+        if (numFmtId > 0) {
+          $xf.attr('applyNumberFormat', "1");
+        }
+
+        if (attributes.alignment) {
+          var $alignment = XmlNode('alignment');
+          if (attributes.alignment.horizontal) { $alignment.attr('horizontal', attributes.alignment.horizontal);}
+          if (attributes.alignment.vertical)  { $alignment.attr('vertical', attributes.alignment.vertical);}
+          if (attributes.alignment.indent)  { $alignment.attr('indent', attributes.alignment.indent);}
+          if (attributes.alignment.readingOrder)  { $alignment.attr('readingOrder', attributes.alignment.readingOrder);}
+          if (attributes.alignment.wrapText)  { $alignment.attr('wrapText', attributes.alignment.wrapText);}
+          if (attributes.alignment.textRotation!=undefined)  { $alignment.attr('textRotation', attributes.alignment.textRotation);}
+
+          $xf.append($alignment).attr('applyAlignment',1)
+
+        }
+        this.$cellXfs.append($xf);
+        var count = +this.$cellXfs.children().length;
+
+        this.$cellXfs.attr('count', count);
+        return count - 1;
+      },
+
+      _addFont: function (attributes) {
+
+        if (!attributes) {  return 0; }
+
+        var $font = XmlNode('font')
+            .append(XmlNode('sz').attr('val', attributes.sz || this.defaultStyle.font.sz))
+            .append(XmlNode('name').attr('val', attributes.name || this.defaultStyle.font.name))
+
+        if (attributes.bold) $font.append(XmlNode('b'));
+        if (attributes.underline)  $font.append(XmlNode('u'));
+        if (attributes.italic)  $font.append(XmlNode('i'));
+        if (attributes.strike)  $font.append(XmlNode('strike'));
+        if (attributes.outline)  $font.append(XmlNode('outline'));
+        if (attributes.shadow)  $font.append(XmlNode('shadow'));
+
+        if (attributes.vertAlign) {
+          $font.append(XmlNode('vertAlign').attr('val', attributes.vertAlign))
+        }
+
+
+        if (attributes.color) {
+          if (attributes.color.theme) {
+            $font.append(XmlNode('color').attr('theme', attributes.color.theme))
+
+            if (attributes.color.tint) { //tint only if theme
+              $font.append(XmlNode('tint').attr('theme', attributes.color.tint))
+            }
+
+          } else if (attributes.color.rgb) { // not both rgb and theme
+            $font.append(XmlNode('color').attr('rgb', attributes.color.rgb))
+          }
+        }
+
+        this.$fonts.append($font);
+
+        var count = this.$fonts.children().length;
+        this.$fonts.attr('count', count);
+        return count - 1;
+      },
+
+        _addNumFmt: function (numFmt) {
+        if (!numFmt) { return 0; }
+
+        if (typeof numFmt == 'string') {
+          var numFmtIdx = fmt_table[numFmt];
+          if (numFmtIdx >= 0) {
+            return numFmtIdx; // we found a match against built in formats
+          }
+        }
+
+        if (/^[0-9]+$/.exec(numFmt)) {
+          return numFmt; // we're matching an integer against some known code
+        }
+        numFmt = numFmt
+            .replace(/&/g, '&amp;')
+            .replace(/</g, '&lt;')
+            .replace(/>/g, '&gt;')
+            .replace(/"/g, '&quot;')
+            .replace(/'/g, '&apos;');
+
+        var $numFmt = XmlNode('numFmt')
+            .attr('numFmtId', (++customNumFmtId))
+            .attr('formatCode', numFmt);
+
+        this.$numFmts.append($numFmt);
+
+        var count = this.$numFmts.children().length;
+        this.$numFmts.attr('count', count);
+        return customNumFmtId ;
+      },
+
+      _addFill: function (attributes) {
+
+        if (!attributes) { return 0; }
+
+        var $patternFill = XmlNode('patternFill')
+            .attr('patternType', attributes.patternType || 'solid');
+
+        if (attributes.fgColor) {
+          var $fgColor = XmlNode('fgColor');
+
+          //Excel doesn't like it when we set both rgb and theme+tint, but xlsx.parseFile() sets both
+          //var $fgColor = createElement('<fgColor/>', null, null, {xmlMode: true}).attr(attributes.fgColor)
+          if (attributes.fgColor.rgb) {
+
+            if (attributes.fgColor.rgb.length == 6) {
+              attributes.fgColor.rgb = "FF" + attributes.fgColor.rgb /// add alpha to an RGB as Excel expects aRGB
+            }
+
+            $fgColor.attr('rgb', attributes.fgColor.rgb);
+            $patternFill.append($fgColor);
+          }
+          else if (attributes.fgColor.theme) {
+            $fgColor.attr('theme', attributes.fgColor.theme);
+            if (attributes.fgColor.tint) {
+              $fgColor.attr('tint', attributes.fgColor.tint);
+            }
+            $patternFill.append($fgColor);
+          }
+
+          if (!attributes.bgColor) {
+            attributes.bgColor = { "indexed": "64"}
+          }
+        }
+
+        if (attributes.bgColor) {
+          var $bgColor = XmlNode('bgColor').attr(attributes.bgColor);
+          $patternFill.append($bgColor);
+        }
+
+        var $fill = XmlNode('fill')
+            .append($patternFill);
+
+        this.$fills.append($fill);
+
+        var count = this.$fills.children().length;
+        this.$fills.attr('count', count);
+        return count - 1;
+      },
+
+      _getSubBorder: function(direction, spec) {
+
+        var $direction = XmlNode(direction);
+        if (spec){
+          if (spec.style) $direction.attr('style', spec.style);
+          if (spec.color) {
+            var $color = XmlNode('color');
+            if (spec.color.auto) {
+              $color.attr('auto', spec.color.auto);
+            }
+            else if (spec.color.rgb) {
+              $color.attr('rgb', spec.color.rgb);
+            }
+            else if (spec.color.theme || spec.color.tint) {
+              $color.attr('theme', spec.color.theme || "1");
+              $color.attr('tint', spec.color.tint || "0");
+            }
+            $direction.append($color)
+          }
+        }
+        return $direction;
+      },
+
+      _addBorder: function (attributes) {
+        if (!attributes) { return 0; }
+
+        var self = this;
+
+        var $border = XmlNode('border')
+            .attr("diagonalUp",attributes.diagonalUp)
+            .attr("diagonalDown",attributes.diagonalDown);
+
+        var directions = ["left","right","top","bottom","diagonal"];
+
+        directions.forEach(function(direction) {
+          $border.append(self._getSubBorder(direction, attributes[direction]))
+        });
+        this.$borders.append($border);
+
+        var count = this.$borders.children().length;
+        this.$borders.attr('count', count);
+        return count -1;
+      },
+
+      toXml: function () {
+        return this.$styles.toXml();
+      }
+    }.initialize(options||{});
+  }
+
+
+XLSX.parse_xlscfb = parse_xlscfb;
+XLSX.parse_zip = parse_zip;
+XLSX.read = readSync; //xlsread
+XLSX.readFile = readFileSync; //readFile
+XLSX.readFileSync = readFileSync;
+XLSX.write = writeSync;
+XLSX.writeFile = writeFileSync;
+XLSX.writeFileSync = writeFileSync;
+XLSX.utils = utils;
+XLSX.CFB = CFB;
+XLSX.SSF = SSF;
+})(typeof exports !== 'undefined' ? exports : XLSX);
+var XLS = XLSX;
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/dist/xlsx.min.js b/Source/UBCS-WEB/src/config/js-xlsx-master/dist/xlsx.min.js
new file mode 100644
index 0000000..41a3ea7
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/dist/xlsx.min.js
@@ -0,0 +1,11 @@
+/* xlsx.js (C) 2013-2015 SheetJS -- http://sheetjs.com */
+var XLSX={};(function make_xlsx(XLSX){XLSX.version="0.8.20";var current_codepage=1200,current_cptable;if(typeof module!=="undefined"&&typeof require!=="undefined"){if(typeof cptable==="undefined")cptable=require("./dist/cpexcel");current_cptable=cptable[current_codepage]}function reset_cp(){set_cp(1200)}var set_cp=function(cp){current_codepage=cp};function char_codes(data){var o=[];for(var i=0,len=data.length;i<len;++i)o[i]=data.charCodeAt(i);return o}var debom_xml=function(data){return data};var _getchar=function _gc1(x){return String.fromCharCode(x)};if(typeof cptable!=="undefined"){set_cp=function(cp){current_codepage=cp;current_cptable=cptable[cp]};debom_xml=function(data){if(data.charCodeAt(0)===255&&data.charCodeAt(1)===254){return cptable.utils.decode(1200,char_codes(data.substr(2)))}return data};_getchar=function _gc2(x){if(current_codepage===1200)return String.fromCharCode(x);return cptable.utils.decode(current_codepage,[x&255,x>>8])[0]}}var Base64=function make_b64(){var map="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";return{encode:function(input,utf8){var o="";var c1,c2,c3,e1,e2,e3,e4;for(var i=0;i<input.length;){c1=input.charCodeAt(i++);c2=input.charCodeAt(i++);c3=input.charCodeAt(i++);e1=c1>>2;e2=(c1&3)<<4|c2>>4;e3=(c2&15)<<2|c3>>6;e4=c3&63;if(isNaN(c2)){e3=e4=64}else if(isNaN(c3)){e4=64}o+=map.charAt(e1)+map.charAt(e2)+map.charAt(e3)+map.charAt(e4)}return o},decode:function b64_decode(input,utf8){var o="";var c1,c2,c3;var e1,e2,e3,e4;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");for(var i=0;i<input.length;){e1=map.indexOf(input.charAt(i++));e2=map.indexOf(input.charAt(i++));e3=map.indexOf(input.charAt(i++));e4=map.indexOf(input.charAt(i++));c1=e1<<2|e2>>4;c2=(e2&15)<<4|e3>>2;c3=(e3&3)<<6|e4;o+=String.fromCharCode(c1);if(e3!=64){o+=String.fromCharCode(c2)}if(e4!=64){o+=String.fromCharCode(c3)}}return o}}}();var has_buf=typeof Buffer!=="undefined";function new_raw_buf(len){return new(has_buf?Buffer:Array)(len)}function s2a(s){if(has_buf)return new Buffer(s,"binary");return s.split("").map(function(x){return x.charCodeAt(0)&255})}var bconcat=function(bufs){return[].concat.apply([],bufs)};var chr0=/\u0000/g,chr1=/[\u0001-\u0006]/;var SSF={};var make_ssf=function make_ssf(SSF){SSF.version="0.8.1";function _strrev(x){var o="",i=x.length-1;while(i>=0)o+=x.charAt(i--);return o}function fill(c,l){var o="";while(o.length<l)o+=c;return o}function pad0(v,d){var t=""+v;return t.length>=d?t:fill("0",d-t.length)+t}function pad_(v,d){var t=""+v;return t.length>=d?t:fill(" ",d-t.length)+t}function rpad_(v,d){var t=""+v;return t.length>=d?t:t+fill(" ",d-t.length)}function pad0r1(v,d){var t=""+Math.round(v);return t.length>=d?t:fill("0",d-t.length)+t}function pad0r2(v,d){var t=""+v;return t.length>=d?t:fill("0",d-t.length)+t}var p2_32=Math.pow(2,32);function pad0r(v,d){if(v>p2_32||v<-p2_32)return pad0r1(v,d);var i=Math.round(v);return pad0r2(i,d)}function isgeneral(s,i){return s.length>=7+i&&(s.charCodeAt(i)|32)===103&&(s.charCodeAt(i+1)|32)===101&&(s.charCodeAt(i+2)|32)===110&&(s.charCodeAt(i+3)|32)===101&&(s.charCodeAt(i+4)|32)===114&&(s.charCodeAt(i+5)|32)===97&&(s.charCodeAt(i+6)|32)===108}var opts_fmt=[["date1904",0],["output",""],["WTF",false]];function fixopts(o){for(var y=0;y!=opts_fmt.length;++y)if(o[opts_fmt[y][0]]===undefined)o[opts_fmt[y][0]]=opts_fmt[y][1]}SSF.opts=opts_fmt;var table_fmt={0:"General",1:"0",2:"0.00",3:"#,##0",4:"#,##0.00",9:"0%",10:"0.00%",11:"0.00E+00",12:"# ?/?",13:"# ??/??",14:"m/d/yy",15:"d-mmm-yy",16:"d-mmm",17:"mmm-yy",18:"h:mm AM/PM",19:"h:mm:ss AM/PM",20:"h:mm",21:"h:mm:ss",22:"m/d/yy h:mm",37:"#,##0 ;(#,##0)",38:"#,##0 ;[Red](#,##0)",39:"#,##0.00;(#,##0.00)",40:"#,##0.00;[Red](#,##0.00)",45:"mm:ss",46:"[h]:mm:ss",47:"mmss.0",48:"##0.0E+0",49:"@",56:'"涓婂崍/涓嬪崍 "hh"鏅�"mm"鍒�"ss"绉� "',65535:"General"};var days=[["Sun","Sunday"],["Mon","Monday"],["Tue","Tuesday"],["Wed","Wednesday"],["Thu","Thursday"],["Fri","Friday"],["Sat","Saturday"]];var months=[["J","Jan","January"],["F","Feb","February"],["M","Mar","March"],["A","Apr","April"],["M","May","May"],["J","Jun","June"],["J","Jul","July"],["A","Aug","August"],["S","Sep","September"],["O","Oct","October"],["N","Nov","November"],["D","Dec","December"]];function frac(x,D,mixed){var sgn=x<0?-1:1;var B=x*sgn;var P_2=0,P_1=1,P=0;var Q_2=1,Q_1=0,Q=0;var A=Math.floor(B);while(Q_1<D){A=Math.floor(B);P=A*P_1+P_2;Q=A*Q_1+Q_2;if(B-A<5e-10)break;B=1/(B-A);P_2=P_1;P_1=P;Q_2=Q_1;Q_1=Q}if(Q>D){Q=Q_1;P=P_1}if(Q>D){Q=Q_2;P=P_2}if(!mixed)return[0,sgn*P,Q];if(Q===0)throw"Unexpected state: "+P+" "+P_1+" "+P_2+" "+Q+" "+Q_1+" "+Q_2;var q=Math.floor(sgn*P/Q);return[q,sgn*P-q*Q,Q]}function general_fmt_int(v,opts){return""+v}SSF._general_int=general_fmt_int;var general_fmt_num=function make_general_fmt_num(){var gnr1=/\.(\d*[1-9])0+$/,gnr2=/\.0*$/,gnr4=/\.(\d*[1-9])0+/,gnr5=/\.0*[Ee]/,gnr6=/(E[+-])(\d)$/;function gfn2(v){var w=v<0?12:11;var o=gfn5(v.toFixed(12));if(o.length<=w)return o;o=v.toPrecision(10);if(o.length<=w)return o;return v.toExponential(5)}function gfn3(v){var o=v.toFixed(11).replace(gnr1,".$1");if(o.length>(v<0?12:11))o=v.toPrecision(6);return o}function gfn4(o){for(var i=0;i!=o.length;++i)if((o.charCodeAt(i)|32)===101)return o.replace(gnr4,".$1").replace(gnr5,"E").replace("e","E").replace(gnr6,"$10$2");return o}function gfn5(o){return o.indexOf(".")>-1?o.replace(gnr2,"").replace(gnr1,".$1"):o}return function general_fmt_num(v,opts){var V=Math.floor(Math.log(Math.abs(v))*Math.LOG10E),o;if(V>=-4&&V<=-1)o=v.toPrecision(10+V);else if(Math.abs(V)<=9)o=gfn2(v);else if(V===10)o=v.toFixed(10).substr(0,12);else o=gfn3(v);return gfn5(gfn4(o))}}();SSF._general_num=general_fmt_num;function general_fmt(v,opts){switch(typeof v){case"string":return v;case"boolean":return v?"TRUE":"FALSE";case"number":return(v|0)===v?general_fmt_int(v,opts):general_fmt_num(v,opts)}throw new Error("unsupported value in General format: "+v)}SSF._general=general_fmt;function fix_hijri(date,o){return 0}function parse_date_code(v,opts,b2){if(v>2958465||v<0)return null;var date=v|0,time=Math.floor(86400*(v-date)),dow=0;var dout=[];var out={D:date,T:time,u:86400*(v-date)-time,y:0,m:0,d:0,H:0,M:0,S:0,q:0};if(Math.abs(out.u)<1e-6)out.u=0;fixopts(opts!=null?opts:opts=[]);if(opts.date1904)date+=1462;if(out.u>.999){out.u=0;if(++time==86400){time=0;++date}}if(date===60){dout=b2?[1317,10,29]:[1900,2,29];dow=3}else if(date===0){dout=b2?[1317,8,29]:[1900,1,0];dow=6}else{if(date>60)--date;var d=new Date(1900,0,1);d.setDate(d.getDate()+date-1);dout=[d.getFullYear(),d.getMonth()+1,d.getDate()];dow=d.getDay();if(date<60)dow=(dow+6)%7;if(b2)dow=fix_hijri(d,dout)}out.y=dout[0];out.m=dout[1];out.d=dout[2];out.S=time%60;time=Math.floor(time/60);out.M=time%60;time=Math.floor(time/60);out.H=time;out.q=dow;return out}SSF.parse_date_code=parse_date_code;function write_date(type,fmt,val,ss0){var o="",ss=0,tt=0,y=val.y,out,outl=0;switch(type){case 98:y=val.y+543;case 121:switch(fmt.length){case 1:case 2:out=y%100;outl=2;break;default:out=y%1e4;outl=4;break}break;case 109:switch(fmt.length){case 1:case 2:out=val.m;outl=fmt.length;break;case 3:return months[val.m-1][1];case 5:return months[val.m-1][0];default:return months[val.m-1][2]}break;case 100:switch(fmt.length){case 1:case 2:out=val.d;outl=fmt.length;break;case 3:return days[val.q][0];default:return days[val.q][1]}break;case 104:switch(fmt.length){case 1:case 2:out=1+(val.H+11)%12;outl=fmt.length;break;default:throw"bad hour format: "+fmt}break;case 72:switch(fmt.length){case 1:case 2:out=val.H;outl=fmt.length;break;default:throw"bad hour format: "+fmt}break;case 77:switch(fmt.length){case 1:case 2:out=val.M;outl=fmt.length;break;default:throw"bad minute format: "+fmt}break;case 115:if(val.u===0)switch(fmt){case"s":case"ss":return pad0(val.S,fmt.length);case".0":case".00":case".000":}switch(fmt){case"s":case"ss":case".0":case".00":case".000":if(ss0>=2)tt=ss0===3?1e3:100;else tt=ss0===1?10:1;ss=Math.round(tt*(val.S+val.u));if(ss>=60*tt)ss=0;if(fmt==="s")return ss===0?"0":""+ss/tt;o=pad0(ss,2+ss0);if(fmt==="ss")return o.substr(0,2);return"."+o.substr(2,fmt.length-1);default:throw"bad second format: "+fmt}case 90:switch(fmt){case"[h]":case"[hh]":out=val.D*24+val.H;break;case"[m]":case"[mm]":out=(val.D*24+val.H)*60+val.M;break;case"[s]":case"[ss]":out=((val.D*24+val.H)*60+val.M)*60+Math.round(val.S+val.u);break;default:throw"bad abstime format: "+fmt}outl=fmt.length===3?1:2;break;case 101:out=y;outl=1}if(outl>0)return pad0(out,outl);else return""}function commaify(s){if(s.length<=3)return s;var j=s.length%3,o=s.substr(0,j);for(;j!=s.length;j+=3)o+=(o.length>0?",":"")+s.substr(j,3);return o}var write_num=function make_write_num(){var pct1=/%/g;function write_num_pct(type,fmt,val){var sfmt=fmt.replace(pct1,""),mul=fmt.length-sfmt.length;return write_num(type,sfmt,val*Math.pow(10,2*mul))+fill("%",mul)}function write_num_cm(type,fmt,val){var idx=fmt.length-1;while(fmt.charCodeAt(idx-1)===44)--idx;return write_num(type,fmt.substr(0,idx),val/Math.pow(10,3*(fmt.length-idx)))}function write_num_exp(fmt,val){var o;var idx=fmt.indexOf("E")-fmt.indexOf(".")-1;if(fmt.match(/^#+0.0E\+0$/)){var period=fmt.indexOf(".");if(period===-1)period=fmt.indexOf("E");var ee=Math.floor(Math.log(Math.abs(val))*Math.LOG10E)%period;if(ee<0)ee+=period;o=(val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);if(o.indexOf("e")===-1){var fakee=Math.floor(Math.log(Math.abs(val))*Math.LOG10E);if(o.indexOf(".")===-1)o=o[0]+"."+o.substr(1)+"E+"+(fakee-o.length+ee);else o+="E+"+(fakee-ee);while(o.substr(0,2)==="0."){o=o[0]+o.substr(2,period)+"."+o.substr(2+period);o=o.replace(/^0+([1-9])/,"$1").replace(/^0+\./,"0.")}o=o.replace(/\+-/,"-")}o=o.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/,function($$,$1,$2,$3){return $1+$2+$3.substr(0,(period+ee)%period)+"."+$3.substr(ee)+"E"})}else o=val.toExponential(idx);if(fmt.match(/E\+00$/)&&o.match(/e[+-]\d$/))o=o.substr(0,o.length-1)+"0"+o[o.length-1];if(fmt.match(/E\-/)&&o.match(/e\+/))o=o.replace(/e\+/,"e");return o.replace("e","E")}var frac1=/# (\?+)( ?)\/( ?)(\d+)/;function write_num_f1(r,aval,sign){var den=parseInt(r[4]),rr=Math.round(aval*den),base=Math.floor(rr/den);var myn=rr-base*den,myd=den;return sign+(base===0?"":""+base)+" "+(myn===0?fill(" ",r[1].length+1+r[4].length):pad_(myn,r[1].length)+r[2]+"/"+r[3]+pad0(myd,r[4].length))}function write_num_f2(r,aval,sign){return sign+(aval===0?"":""+aval)+fill(" ",r[1].length+2+r[4].length)}var dec1=/^#*0*\.(0+)/;var closeparen=/\).*[0#]/;var phone=/\(###\) ###\\?-####/;function hashq(str){var o="",cc;for(var i=0;i!=str.length;++i)switch(cc=str.charCodeAt(i)){case 35:break;case 63:o+=" ";break;case 48:o+="0";break;default:o+=String.fromCharCode(cc)}return o}function rnd(val,d){var dd=Math.pow(10,d);return""+Math.round(val*dd)/dd}function dec(val,d){return Math.round((val-Math.floor(val))*Math.pow(10,d))}function flr(val){if(val<2147483647&&val>-2147483648)return""+(val>=0?val|0:val-1|0);return""+Math.floor(val)}function write_num_flt(type,fmt,val){if(type.charCodeAt(0)===40&&!fmt.match(closeparen)){var ffmt=fmt.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,"");if(val>=0)return write_num_flt("n",ffmt,val);return"("+write_num_flt("n",ffmt,-val)+")"}if(fmt.charCodeAt(fmt.length-1)===44)return write_num_cm(type,fmt,val);if(fmt.indexOf("%")!==-1)return write_num_pct(type,fmt,val);if(fmt.indexOf("E")!==-1)return write_num_exp(fmt,val);if(fmt.charCodeAt(0)===36)return"$"+write_num_flt(type,fmt.substr(fmt[1]==" "?2:1),val);var o,oo;var r,ri,ff,aval=Math.abs(val),sign=val<0?"-":"";if(fmt.match(/^00+$/))return sign+pad0r(aval,fmt.length);if(fmt.match(/^[#?]+$/)){o=pad0r(val,0);if(o==="0")o="";return o.length>fmt.length?o:hashq(fmt.substr(0,fmt.length-o.length))+o}if((r=fmt.match(frac1))!==null)return write_num_f1(r,aval,sign);if(fmt.match(/^#+0+$/)!==null)return sign+pad0r(aval,fmt.length-fmt.indexOf("0"));if((r=fmt.match(dec1))!==null){o=rnd(val,r[1].length).replace(/^([^\.]+)$/,"$1."+r[1]).replace(/\.$/,"."+r[1]).replace(/\.(\d*)$/,function($$,$1){return"."+$1+fill("0",r[1].length-$1.length)});return fmt.indexOf("0.")!==-1?o:o.replace(/^0\./,".")}fmt=fmt.replace(/^#+([0.])/,"$1");if((r=fmt.match(/^(0*)\.(#*)$/))!==null){return sign+rnd(aval,r[2].length).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,r[1].length?"0.":".")}if((r=fmt.match(/^#,##0(\.?)$/))!==null)return sign+commaify(pad0r(aval,0));if((r=fmt.match(/^#,##0\.([#0]*0)$/))!==null){return val<0?"-"+write_num_flt(type,fmt,-val):commaify(""+Math.floor(val))+"."+pad0(dec(val,r[1].length),r[1].length)}if((r=fmt.match(/^#,#*,#0/))!==null)return write_num_flt(type,fmt.replace(/^#,#*,/,""),val);if((r=fmt.match(/^([0#]+)(\\?-([0#]+))+$/))!==null){o=_strrev(write_num_flt(type,fmt.replace(/[\\-]/g,""),val));ri=0;return _strrev(_strrev(fmt.replace(/\\/g,"")).replace(/[0#]/g,function(x){return ri<o.length?o[ri++]:x==="0"?"0":""}))}if(fmt.match(phone)!==null){o=write_num_flt(type,"##########",val);return"("+o.substr(0,3)+") "+o.substr(3,3)+"-"+o.substr(6)}var oa="";if((r=fmt.match(/^([#0?]+)( ?)\/( ?)([#0?]+)/))!==null){ri=Math.min(r[4].length,7);ff=frac(aval,Math.pow(10,ri)-1,false);o=""+sign;oa=write_num("n",r[1],ff[1]);if(oa[oa.length-1]==" ")oa=oa.substr(0,oa.length-1)+"0";o+=oa+r[2]+"/"+r[3];oa=rpad_(ff[2],ri);if(oa.length<r[4].length)oa=hashq(r[4].substr(r[4].length-oa.length))+oa;o+=oa;return o}if((r=fmt.match(/^# ([#0?]+)( ?)\/( ?)([#0?]+)/))!==null){ri=Math.min(Math.max(r[1].length,r[4].length),7);ff=frac(aval,Math.pow(10,ri)-1,true);return sign+(ff[0]||(ff[1]?"":"0"))+" "+(ff[1]?pad_(ff[1],ri)+r[2]+"/"+r[3]+rpad_(ff[2],ri):fill(" ",2*ri+1+r[2].length+r[3].length))}if((r=fmt.match(/^[#0?]+$/))!==null){o=pad0r(val,0);if(fmt.length<=o.length)return o;return hashq(fmt.substr(0,fmt.length-o.length))+o}if((r=fmt.match(/^([#0?]+)\.([#0]+)$/))!==null){o=""+val.toFixed(Math.min(r[2].length,10)).replace(/([^0])0+$/,"$1");ri=o.indexOf(".");var lres=fmt.indexOf(".")-ri,rres=fmt.length-o.length-lres;return hashq(fmt.substr(0,lres)+o+fmt.substr(fmt.length-rres))}if((r=fmt.match(/^00,000\.([#0]*0)$/))!==null){ri=dec(val,r[1].length);return val<0?"-"+write_num_flt(type,fmt,-val):commaify(flr(val)).replace(/^\d,\d{3}$/,"0$&").replace(/^\d*$/,function($$){return"00,"+($$.length<3?pad0(0,3-$$.length):"")+$$})+"."+pad0(ri,r[1].length)}switch(fmt){case"#,###":var x=commaify(pad0r(aval,0));return x!=="0"?sign+x:"";default:}throw new Error("unsupported format |"+fmt+"|")}function write_num_cm2(type,fmt,val){var idx=fmt.length-1;while(fmt.charCodeAt(idx-1)===44)--idx;return write_num(type,fmt.substr(0,idx),val/Math.pow(10,3*(fmt.length-idx)))}function write_num_pct2(type,fmt,val){var sfmt=fmt.replace(pct1,""),mul=fmt.length-sfmt.length;return write_num(type,sfmt,val*Math.pow(10,2*mul))+fill("%",mul)}function write_num_exp2(fmt,val){var o;var idx=fmt.indexOf("E")-fmt.indexOf(".")-1;if(fmt.match(/^#+0.0E\+0$/)){var period=fmt.indexOf(".");if(period===-1)period=fmt.indexOf("E");var ee=Math.floor(Math.log(Math.abs(val))*Math.LOG10E)%period;if(ee<0)ee+=period;o=(val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);if(!o.match(/[Ee]/)){var fakee=Math.floor(Math.log(Math.abs(val))*Math.LOG10E);if(o.indexOf(".")===-1)o=o[0]+"."+o.substr(1)+"E+"+(fakee-o.length+ee);else o+="E+"+(fakee-ee);o=o.replace(/\+-/,"-")}o=o.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/,function($$,$1,$2,$3){return $1+$2+$3.substr(0,(period+ee)%period)+"."+$3.substr(ee)+"E"})}else o=val.toExponential(idx);if(fmt.match(/E\+00$/)&&o.match(/e[+-]\d$/))o=o.substr(0,o.length-1)+"0"+o[o.length-1];if(fmt.match(/E\-/)&&o.match(/e\+/))o=o.replace(/e\+/,"e");return o.replace("e","E")}function write_num_int(type,fmt,val){if(type.charCodeAt(0)===40&&!fmt.match(closeparen)){var ffmt=fmt.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,"");if(val>=0)return write_num_int("n",ffmt,val);return"("+write_num_int("n",ffmt,-val)+")"}if(fmt.charCodeAt(fmt.length-1)===44)return write_num_cm2(type,fmt,val);if(fmt.indexOf("%")!==-1)return write_num_pct2(type,fmt,val);if(fmt.indexOf("E")!==-1)return write_num_exp2(fmt,val);if(fmt.charCodeAt(0)===36)return"$"+write_num_int(type,fmt.substr(fmt[1]==" "?2:1),val);var o;var r,ri,ff,aval=Math.abs(val),sign=val<0?"-":"";if(fmt.match(/^00+$/))return sign+pad0(aval,fmt.length);if(fmt.match(/^[#?]+$/)){o=""+val;if(val===0)o="";return o.length>fmt.length?o:hashq(fmt.substr(0,fmt.length-o.length))+o}if((r=fmt.match(frac1))!==null)return write_num_f2(r,aval,sign);if(fmt.match(/^#+0+$/)!==null)return sign+pad0(aval,fmt.length-fmt.indexOf("0"));if((r=fmt.match(dec1))!==null){o=(""+val).replace(/^([^\.]+)$/,"$1."+r[1]).replace(/\.$/,"."+r[1]).replace(/\.(\d*)$/,function($$,$1){return"."+$1+fill("0",r[1].length-$1.length)});return fmt.indexOf("0.")!==-1?o:o.replace(/^0\./,".")}fmt=fmt.replace(/^#+([0.])/,"$1");if((r=fmt.match(/^(0*)\.(#*)$/))!==null){return sign+(""+aval).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,r[1].length?"0.":".")}if((r=fmt.match(/^#,##0(\.?)$/))!==null)return sign+commaify(""+aval);if((r=fmt.match(/^#,##0\.([#0]*0)$/))!==null){return val<0?"-"+write_num_int(type,fmt,-val):commaify(""+val)+"."+fill("0",r[1].length)}if((r=fmt.match(/^#,#*,#0/))!==null)return write_num_int(type,fmt.replace(/^#,#*,/,""),val);if((r=fmt.match(/^([0#]+)(\\?-([0#]+))+$/))!==null){o=_strrev(write_num_int(type,fmt.replace(/[\\-]/g,""),val));ri=0;return _strrev(_strrev(fmt.replace(/\\/g,"")).replace(/[0#]/g,function(x){return ri<o.length?o[ri++]:x==="0"?"0":""}))}if(fmt.match(phone)!==null){o=write_num_int(type,"##########",val);return"("+o.substr(0,3)+") "+o.substr(3,3)+"-"+o.substr(6)}var oa="";if((r=fmt.match(/^([#0?]+)( ?)\/( ?)([#0?]+)/))!==null){ri=Math.min(r[4].length,7);ff=frac(aval,Math.pow(10,ri)-1,false);o=""+sign;oa=write_num("n",r[1],ff[1]);if(oa[oa.length-1]==" ")oa=oa.substr(0,oa.length-1)+"0";o+=oa+r[2]+"/"+r[3];oa=rpad_(ff[2],ri);if(oa.length<r[4].length)oa=hashq(r[4].substr(r[4].length-oa.length))+oa;o+=oa;return o}if((r=fmt.match(/^# ([#0?]+)( ?)\/( ?)([#0?]+)/))!==null){ri=Math.min(Math.max(r[1].length,r[4].length),7);ff=frac(aval,Math.pow(10,ri)-1,true);return sign+(ff[0]||(ff[1]?"":"0"))+" "+(ff[1]?pad_(ff[1],ri)+r[2]+"/"+r[3]+rpad_(ff[2],ri):fill(" ",2*ri+1+r[2].length+r[3].length))}if((r=fmt.match(/^[#0?]+$/))!==null){o=""+val;if(fmt.length<=o.length)return o;return hashq(fmt.substr(0,fmt.length-o.length))+o}if((r=fmt.match(/^([#0]+)\.([#0]+)$/))!==null){o=""+val.toFixed(Math.min(r[2].length,10)).replace(/([^0])0+$/,"$1");ri=o.indexOf(".");var lres=fmt.indexOf(".")-ri,rres=fmt.length-o.length-lres;return hashq(fmt.substr(0,lres)+o+fmt.substr(fmt.length-rres))}if((r=fmt.match(/^00,000\.([#0]*0)$/))!==null){return val<0?"-"+write_num_int(type,fmt,-val):commaify(""+val).replace(/^\d,\d{3}$/,"0$&").replace(/^\d*$/,function($$){return"00,"+($$.length<3?pad0(0,3-$$.length):"")+$$})+"."+pad0(0,r[1].length)}switch(fmt){case"#,###":var x=commaify(""+aval);return x!=="0"?sign+x:"";default:}throw new Error("unsupported format |"+fmt+"|")}return function write_num(type,fmt,val){return(val|0)===val?write_num_int(type,fmt,val):write_num_flt(type,fmt,val)}}();function split_fmt(fmt){var out=[];var in_str=false,cc;for(var i=0,j=0;i<fmt.length;++i)switch(cc=fmt.charCodeAt(i)){case 34:in_str=!in_str;break;case 95:case 42:case 92:++i;break;case 59:out[out.length]=fmt.substr(j,i-j);j=i+1}out[out.length]=fmt.substr(j);if(in_str===true)throw new Error("Format |"+fmt+"| unterminated string ");return out}SSF._split=split_fmt;var abstime=/\[[HhMmSs]*\]/;function eval_fmt(fmt,v,opts,flen){var out=[],o="",i=0,c="",lst="t",q,dt,j,cc;var hr="H";while(i<fmt.length){switch(c=fmt[i]){case"G":if(!isgeneral(fmt,i))throw new Error("unrecognized character "+c+" in "+fmt);out[out.length]={t:"G",v:"General"};i+=7;break;case'"':for(o="";(cc=fmt.charCodeAt(++i))!==34&&i<fmt.length;)o+=String.fromCharCode(cc);out[out.length]={t:"t",v:o};++i;break;case"\\":var w=fmt[++i],t=w==="("||w===")"?w:"t";out[out.length]={t:t,v:w};++i;break;case"_":out[out.length]={t:"t",v:" "};i+=2;break;case"@":out[out.length]={t:"T",v:v};++i;break;case"B":case"b":if(fmt[i+1]==="1"||fmt[i+1]==="2"){if(dt==null){dt=parse_date_code(v,opts,fmt[i+1]==="2");if(dt==null)return""}out[out.length]={t:"X",v:fmt.substr(i,2)};lst=c;i+=2;break}case"M":case"D":case"Y":case"H":case"S":case"E":c=c.toLowerCase();case"m":case"d":case"y":case"h":case"s":case"e":case"g":if(v<0)return"";if(dt==null){dt=parse_date_code(v,opts);if(dt==null)return""}o=c;while(++i<fmt.length&&fmt[i].toLowerCase()===c)o+=c;if(c==="m"&&lst.toLowerCase()==="h")c="M";if(c==="h")c=hr;out[out.length]={t:c,v:o};lst=c;break;case"A":q={t:c,v:"A"};if(dt==null)dt=parse_date_code(v,opts);if(fmt.substr(i,3)==="A/P"){if(dt!=null)q.v=dt.H>=12?"P":"A";q.t="T";hr="h";i+=3}else if(fmt.substr(i,5)==="AM/PM"){if(dt!=null)q.v=dt.H>=12?"PM":"AM";q.t="T";i+=5;hr="h"}else{q.t="t";++i}if(dt==null&&q.t==="T")return"";out[out.length]=q;lst=c;break;case"[":o=c;while(fmt[i++]!=="]"&&i<fmt.length)o+=fmt[i];if(o.substr(-1)!=="]")throw'unterminated "[" block: |'+o+"|";if(o.match(abstime)){if(dt==null){dt=parse_date_code(v,opts);if(dt==null)return""}out[out.length]={t:"Z",v:o.toLowerCase()}}else{o=""}break;case".":if(dt!=null){o=c;while((c=fmt[++i])==="0")o+=c;out[out.length]={t:"s",v:o};break}case"0":case"#":o=c;while("0#?.,E+-%".indexOf(c=fmt[++i])>-1||c=="\\"&&fmt[i+1]=="-"&&"0#".indexOf(fmt[i+2])>-1)o+=c;out[out.length]={t:"n",v:o};break;case"?":o=c;while(fmt[++i]===c)o+=c;q={t:c,v:o};out[out.length]=q;lst=c;break;case"*":++i;if(fmt[i]==" "||fmt[i]=="*")++i;break;case"(":case")":out[out.length]={t:flen===1?"t":c,v:c};++i;break;case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":o=c;while("0123456789".indexOf(fmt[++i])>-1)o+=fmt[i];out[out.length]={t:"D",v:o};break;case" ":out[out.length]={t:c,v:c};++i;break;default:if(",$-+/():!^&'~{}<>=鈧琣cfijklopqrtuvwxz".indexOf(c)===-1)throw new Error("unrecognized character "+c+" in "+fmt);out[out.length]={t:"t",v:c};++i;break}}var bt=0,ss0=0,ssm;for(i=out.length-1,lst="t";i>=0;--i){switch(out[i].t){case"h":case"H":out[i].t=hr;lst="h";if(bt<1)bt=1;break;case"s":if(ssm=out[i].v.match(/\.0+$/))ss0=Math.max(ss0,ssm[0].length-1);if(bt<3)bt=3;case"d":case"y":case"M":case"e":lst=out[i].t;break;case"m":if(lst==="s"){out[i].t="M";if(bt<2)bt=2}break;case"X":if(out[i].v==="B2");break;case"Z":if(bt<1&&out[i].v.match(/[Hh]/))bt=1;if(bt<2&&out[i].v.match(/[Mm]/))bt=2;if(bt<3&&out[i].v.match(/[Ss]/))bt=3}}switch(bt){case 0:break;case 1:if(dt.u>=.5){dt.u=0;++dt.S}if(dt.S>=60){dt.S=0;++dt.M}if(dt.M>=60){dt.M=0;++dt.H}break;case 2:if(dt.u>=.5){dt.u=0;++dt.S}if(dt.S>=60){dt.S=0;++dt.M}break}var nstr="",jj;for(i=0;i<out.length;++i){switch(out[i].t){case"t":case"T":case" ":case"D":break;case"X":out[i]=undefined;break;case"d":case"m":case"y":case"h":case"H":case"M":case"s":case"e":case"b":case"Z":out[i].v=write_date(out[i].t.charCodeAt(0),out[i].v,dt,ss0);out[i].t="t";break;case"n":case"(":case"?":jj=i+1;while(out[jj]!=null&&((c=out[jj].t)==="?"||c==="D"||(c===" "||c==="t")&&out[jj+1]!=null&&(out[jj+1].t==="?"||out[jj+1].t==="t"&&out[jj+1].v==="/")||out[i].t==="("&&(c===" "||c==="n"||c===")")||c==="t"&&(out[jj].v==="/"||"$鈧�".indexOf(out[jj].v)>-1||out[jj].v===" "&&out[jj+1]!=null&&out[jj+1].t=="?"))){out[i].v+=out[jj].v;out[jj]=undefined;++jj}nstr+=out[i].v;i=jj-1;break;case"G":out[i].t="t";out[i].v=general_fmt(v,opts);break}}var vv="",myv,ostr;if(nstr.length>0){myv=v<0&&nstr.charCodeAt(0)===45?-v:v;ostr=write_num(nstr.charCodeAt(0)===40?"(":"n",nstr,myv);jj=ostr.length-1;var decpt=out.length;for(i=0;i<out.length;++i)if(out[i]!=null&&out[i].v.indexOf(".")>-1){decpt=i;break}var lasti=out.length;if(decpt===out.length&&ostr.indexOf("E")===-1){for(i=out.length-1;i>=0;--i){if(out[i]==null||"n?(".indexOf(out[i].t)===-1)continue;if(jj>=out[i].v.length-1){jj-=out[i].v.length;out[i].v=ostr.substr(jj+1,out[i].v.length)}else if(jj<0)out[i].v="";else{out[i].v=ostr.substr(0,jj+1);jj=-1}out[i].t="t";lasti=i}if(jj>=0&&lasti<out.length)out[lasti].v=ostr.substr(0,jj+1)+out[lasti].v}else if(decpt!==out.length&&ostr.indexOf("E")===-1){jj=ostr.indexOf(".")-1;for(i=decpt;i>=0;--i){if(out[i]==null||"n?(".indexOf(out[i].t)===-1)continue;j=out[i].v.indexOf(".")>-1&&i===decpt?out[i].v.indexOf(".")-1:out[i].v.length-1;vv=out[i].v.substr(j+1);for(;j>=0;--j){if(jj>=0&&(out[i].v[j]==="0"||out[i].v[j]==="#"))vv=ostr[jj--]+vv}out[i].v=vv;out[i].t="t";lasti=i}if(jj>=0&&lasti<out.length)out[lasti].v=ostr.substr(0,jj+1)+out[lasti].v;jj=ostr.indexOf(".")+1;for(i=decpt;i<out.length;++i){if(out[i]==null||"n?(".indexOf(out[i].t)===-1&&i!==decpt)continue;j=out[i].v.indexOf(".")>-1&&i===decpt?out[i].v.indexOf(".")+1:0;vv=out[i].v.substr(0,j);for(;j<out[i].v.length;++j){if(jj<ostr.length)vv+=ostr[jj++]}out[i].v=vv;out[i].t="t";lasti=i}}}for(i=0;i<out.length;++i)if(out[i]!=null&&"n(?".indexOf(out[i].t)>-1){myv=flen>1&&v<0&&i>0&&out[i-1].v==="-"?-v:v;out[i].v=write_num(out[i].t,out[i].v,myv);out[i].t="t"}var retval="";for(i=0;i!==out.length;++i)if(out[i]!=null)retval+=out[i].v;return retval}SSF._eval=eval_fmt;var cfregex=/\[[=<>]/;var cfregex2=/\[([=<>]*)(-?\d+\.?\d*)\]/;function chkcond(v,rr){if(rr==null)return false;var thresh=parseFloat(rr[2]);switch(rr[1]){case"=":if(v==thresh)return true;break;case">":if(v>thresh)return true;break;case"<":if(v<thresh)return true;break;case"<>":if(v!=thresh)return true;break;case">=":if(v>=thresh)return true;break;case"<=":if(v<=thresh)return true;break}return false}function choose_fmt(f,v){var fmt=split_fmt(f);var l=fmt.length,lat=fmt[l-1].indexOf("@");if(l<4&&lat>-1)--l;if(fmt.length>4)throw"cannot find right format for |"+fmt+"|";if(typeof v!=="number")return[4,fmt.length===4||lat>-1?fmt[fmt.length-1]:"@"];switch(fmt.length){case 1:fmt=lat>-1?["General","General","General",fmt[0]]:[fmt[0],fmt[0],fmt[0],"@"];break;case 2:fmt=lat>-1?[fmt[0],fmt[0],fmt[0],fmt[1]]:[fmt[0],fmt[1],fmt[0],"@"];break;case 3:fmt=lat>-1?[fmt[0],fmt[1],fmt[0],fmt[2]]:[fmt[0],fmt[1],fmt[2],"@"];break;case 4:break}var ff=v>0?fmt[0]:v<0?fmt[1]:fmt[2];if(fmt[0].indexOf("[")===-1&&fmt[1].indexOf("[")===-1)return[l,ff];if(fmt[0].match(cfregex)!=null||fmt[1].match(cfregex)!=null){var m1=fmt[0].match(cfregex2);var m2=fmt[1].match(cfregex2);return chkcond(v,m1)?[l,fmt[0]]:chkcond(v,m2)?[l,fmt[1]]:[l,fmt[m1!=null&&m2!=null?2:1]]}return[l,ff]}function format(fmt,v,o){fixopts(o!=null?o:o=[]);var sfmt="";switch(typeof fmt){case"string":sfmt=fmt;break;case"number":sfmt=(o.table!=null?o.table:table_fmt)[fmt];break}if(isgeneral(sfmt,0))return general_fmt(v,o);var f=choose_fmt(sfmt,v);if(isgeneral(f[1]))return general_fmt(v,o);if(v===true)v="TRUE";else if(v===false)v="FALSE";else if(v===""||v==null)return"";return eval_fmt(f[1],v,o,f[0])}SSF._table=table_fmt;SSF.load=function load_entry(fmt,idx){table_fmt[idx]=fmt};SSF.format=format;SSF.get_table=function get_table(){return table_fmt};SSF.load_table=function load_table(tbl){for(var i=0;i!=392;++i)if(tbl[i]!==undefined)SSF.load(tbl[i],i)}};make_ssf(SSF);var XLMLFormatMap={"General Number":"General","General Date":SSF._table[22],"Long Date":"dddd, mmmm dd, yyyy","Medium Date":SSF._table[15],"Short Date":SSF._table[14],"Long Time":SSF._table[19],"Medium Time":SSF._table[18],"Short Time":SSF._table[20],Currency:'"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',Fixed:SSF._table[2],Standard:SSF._table[4],Percent:SSF._table[10],Scientific:SSF._table[11],"Yes/No":'"Yes";"Yes";"No";@',"True/False":'"True";"True";"False";@',"On/Off":'"Yes";"Yes";"No";@'};var DO_NOT_EXPORT_CFB=true;var CFB=function _CFB(){var exports={};exports.version="0.10.2";function parse(file){var mver=3;var ssz=512;var nmfs=0;var ndfs=0;var dir_start=0;var minifat_start=0;var difat_start=0;var fat_addrs=[];var blob=file.slice(0,512);prep_blob(blob,0);var mv=check_get_mver(blob);mver=mv[0];switch(mver){case 3:ssz=512;break;case 4:ssz=4096;break;default:throw"Major Version: Expected 3 or 4 saw "+mver}if(ssz!==512){blob=file.slice(0,ssz);prep_blob(blob,28)}var header=file.slice(0,ssz);check_shifts(blob,mver);var nds=blob.read_shift(4,"i");if(mver===3&&nds!==0)throw"# Directory Sectors: Expected 0 saw "+nds;blob.l+=4;dir_start=blob.read_shift(4,"i");blob.l+=4;blob.chk("00100000","Mini Stream Cutoff Size: ");minifat_start=blob.read_shift(4,"i");nmfs=blob.read_shift(4,"i");difat_start=blob.read_shift(4,"i");ndfs=blob.read_shift(4,"i");for(var q,j=0;j<109;++j){q=blob.read_shift(4,"i");if(q<0)break;fat_addrs[j]=q}var sectors=sectorify(file,ssz);sleuth_fat(difat_start,ndfs,sectors,ssz,fat_addrs);var sector_list=make_sector_list(sectors,dir_start,fat_addrs,ssz);sector_list[dir_start].name="!Directory";if(nmfs>0&&minifat_start!==ENDOFCHAIN)sector_list[minifat_start].name="!MiniFAT";sector_list[fat_addrs[0]].name="!FAT";sector_list.fat_addrs=fat_addrs;sector_list.ssz=ssz;var files={},Paths=[],FileIndex=[],FullPaths=[],FullPathDir={};read_directory(dir_start,sector_list,sectors,Paths,nmfs,files,FileIndex);build_full_paths(FileIndex,FullPathDir,FullPaths,Paths);var root_name=Paths.shift();Paths.root=root_name;var find_path=make_find_path(FullPaths,Paths,FileIndex,files,root_name);return{raw:{header:header,sectors:sectors},FileIndex:FileIndex,FullPaths:FullPaths,FullPathDir:FullPathDir,find:find_path}}function check_get_mver(blob){blob.chk(HEADER_SIGNATURE,"Header Signature: ");blob.chk(HEADER_CLSID,"CLSID: ");var mver=blob.read_shift(2,"u");return[blob.read_shift(2,"u"),mver]}function check_shifts(blob,mver){var shift=9;blob.chk("feff","Byte Order: ");switch(shift=blob.read_shift(2)){case 9:if(mver!==3)throw"MajorVersion/SectorShift Mismatch";break;case 12:if(mver!==4)throw"MajorVersion/SectorShift Mismatch";break;default:throw"Sector Shift: Expected 9 or 12 saw "+shift}blob.chk("0600","Mini Sector Shift: ");blob.chk("000000000000","Reserved: ")}function sectorify(file,ssz){var nsectors=Math.ceil(file.length/ssz)-1;var sectors=new Array(nsectors);for(var i=1;i<nsectors;++i)sectors[i-1]=file.slice(i*ssz,(i+1)*ssz);sectors[nsectors-1]=file.slice(nsectors*ssz);return sectors}function build_full_paths(FI,FPD,FP,Paths){var i=0,L=0,R=0,C=0,j=0,pl=Paths.length;var dad=new Array(pl),q=new Array(pl);for(;i<pl;++i){dad[i]=q[i]=i;FP[i]=Paths[i]}for(;j<q.length;++j){i=q[j];L=FI[i].L;R=FI[i].R;C=FI[i].C;if(dad[i]===i){if(L!==-1&&dad[L]!==L)dad[i]=dad[L];if(R!==-1&&dad[R]!==R)dad[i]=dad[R]}if(C!==-1)dad[C]=i;if(L!==-1){dad[L]=dad[i];q.push(L)}if(R!==-1){dad[R]=dad[i];q.push(R)}}for(i=1;i!==pl;++i)if(dad[i]===i){if(R!==-1&&dad[R]!==R)dad[i]=dad[R];else if(L!==-1&&dad[L]!==L)dad[i]=dad[L]}for(i=1;i<pl;++i){if(FI[i].type===0)continue;j=dad[i];if(j===0)FP[i]=FP[0]+"/"+FP[i];else while(j!==0){FP[i]=FP[j]+"/"+FP[i];j=dad[j]}dad[i]=0}FP[0]+="/";for(i=1;i<pl;++i){if(FI[i].type!==2)FP[i]+="/";FPD[FP[i]]=FI[i]}}function make_find_path(FullPaths,Paths,FileIndex,files,root_name){var UCFullPaths=new Array(FullPaths.length);var UCPaths=new Array(Paths.length),i;for(i=0;i<FullPaths.length;++i)UCFullPaths[i]=FullPaths[i].toUpperCase().replace(chr0,"").replace(chr1,"!");for(i=0;i<Paths.length;++i)UCPaths[i]=Paths[i].toUpperCase().replace(chr0,"").replace(chr1,"!");return function find_path(path){var k;if(path.charCodeAt(0)===47){k=true;path=root_name+path}else k=path.indexOf("/")!==-1;var UCPath=path.toUpperCase().replace(chr0,"").replace(chr1,"!");var w=k===true?UCFullPaths.indexOf(UCPath):UCPaths.indexOf(UCPath);if(w===-1)return null;return k===true?FileIndex[w]:files[Paths[w]]}}function sleuth_fat(idx,cnt,sectors,ssz,fat_addrs){var q;if(idx===ENDOFCHAIN){if(cnt!==0)throw"DIFAT chain shorter than expected"}else if(idx!==-1){var sector=sectors[idx],m=(ssz>>>2)-1;for(var i=0;i<m;++i){if((q=__readInt32LE(sector,i*4))===ENDOFCHAIN)break;fat_addrs.push(q)}sleuth_fat(__readInt32LE(sector,ssz-4),cnt-1,sectors,ssz,fat_addrs)}}function get_sector_list(sectors,start,fat_addrs,ssz,chkd){var sl=sectors.length;var buf,buf_chain;if(!chkd)chkd=new Array(sl);var modulus=ssz-1,j,jj;buf=[];buf_chain=[];for(j=start;j>=0;){chkd[j]=true;buf[buf.length]=j;buf_chain.push(sectors[j]);var addr=fat_addrs[Math.floor(j*4/ssz)];
+jj=j*4&modulus;if(ssz<4+jj)throw"FAT boundary crossed: "+j+" 4 "+ssz;j=__readInt32LE(sectors[addr],jj)}return{nodes:buf,data:__toBuffer([buf_chain])}}function make_sector_list(sectors,dir_start,fat_addrs,ssz){var sl=sectors.length,sector_list=new Array(sl);var chkd=new Array(sl),buf,buf_chain;var modulus=ssz-1,i,j,k,jj;for(i=0;i<sl;++i){buf=[];k=i+dir_start;if(k>=sl)k-=sl;if(chkd[k]===true)continue;buf_chain=[];for(j=k;j>=0;){chkd[j]=true;buf[buf.length]=j;buf_chain.push(sectors[j]);var addr=fat_addrs[Math.floor(j*4/ssz)];jj=j*4&modulus;if(ssz<4+jj)throw"FAT boundary crossed: "+j+" 4 "+ssz;j=__readInt32LE(sectors[addr],jj)}sector_list[k]={nodes:buf,data:__toBuffer([buf_chain])}}return sector_list}function read_directory(dir_start,sector_list,sectors,Paths,nmfs,files,FileIndex){var blob;var minifat_store=0,pl=Paths.length?2:0;var sector=sector_list[dir_start].data;var i=0,namelen=0,name,o,ctime,mtime;for(;i<sector.length;i+=128){blob=sector.slice(i,i+128);prep_blob(blob,64);namelen=blob.read_shift(2);if(namelen===0)continue;name=__utf16le(blob,0,namelen-pl);Paths.push(name);o={name:name,type:blob.read_shift(1),color:blob.read_shift(1),L:blob.read_shift(4,"i"),R:blob.read_shift(4,"i"),C:blob.read_shift(4,"i"),clsid:blob.read_shift(16),state:blob.read_shift(4,"i")};ctime=blob.read_shift(2)+blob.read_shift(2)+blob.read_shift(2)+blob.read_shift(2);if(ctime!==0){o.ctime=ctime;o.ct=read_date(blob,blob.l-8)}mtime=blob.read_shift(2)+blob.read_shift(2)+blob.read_shift(2)+blob.read_shift(2);if(mtime!==0){o.mtime=mtime;o.mt=read_date(blob,blob.l-8)}o.start=blob.read_shift(4,"i");o.size=blob.read_shift(4,"i");if(o.type===5){minifat_store=o.start;if(nmfs>0&&minifat_store!==ENDOFCHAIN)sector_list[minifat_store].name="!StreamData"}else if(o.size>=4096){o.storage="fat";if(sector_list[o.start]===undefined)sector_list[o.start]=get_sector_list(sectors,o.start,sector_list.fat_addrs,sector_list.ssz);sector_list[o.start].name=o.name;o.content=sector_list[o.start].data.slice(0,o.size);prep_blob(o.content,0)}else{o.storage="minifat";if(minifat_store!==ENDOFCHAIN&&o.start!==ENDOFCHAIN){o.content=sector_list[minifat_store].data.slice(o.start*MSSZ,o.start*MSSZ+o.size);prep_blob(o.content,0)}}files[name]=o;FileIndex.push(o)}}function read_date(blob,offset){return new Date((__readUInt32LE(blob,offset+4)/1e7*Math.pow(2,32)+__readUInt32LE(blob,offset)/1e7-11644473600)*1e3)}var fs;function readFileSync(filename,options){if(fs===undefined)fs=require("fs");return parse(fs.readFileSync(filename),options)}function readSync(blob,options){switch(options!==undefined&&options.type!==undefined?options.type:"base64"){case"file":return readFileSync(blob,options);case"base64":return parse(s2a(Base64.decode(blob)),options);case"binary":return parse(s2a(blob),options)}return parse(blob)}var MSSZ=64;var ENDOFCHAIN=-2;var HEADER_SIGNATURE="d0cf11e0a1b11ae1";var HEADER_CLSID="00000000000000000000000000000000";var consts={MAXREGSECT:-6,DIFSECT:-4,FATSECT:-3,ENDOFCHAIN:ENDOFCHAIN,FREESECT:-1,HEADER_SIGNATURE:HEADER_SIGNATURE,HEADER_MINOR_VERSION:"3e00",MAXREGSID:-6,NOSTREAM:-1,HEADER_CLSID:HEADER_CLSID,EntryTypes:["unknown","storage","stream","lockbytes","property","root"]};exports.read=readSync;exports.parse=parse;exports.utils={ReadShift:ReadShift,CheckField:CheckField,prep_blob:prep_blob,bconcat:bconcat,consts:consts};return exports}();if(typeof require!=="undefined"&&typeof module!=="undefined"&&typeof DO_NOT_EXPORT_CFB==="undefined"){module.exports=CFB}function isval(x){return x!==undefined&&x!==null}function keys(o){return Object.keys(o)}function evert_key(obj,key){var o=[],K=keys(obj);for(var i=0;i!==K.length;++i)o[obj[K[i]][key]]=K[i];return o}function evert(obj){var o=[],K=keys(obj);for(var i=0;i!==K.length;++i)o[obj[K[i]]]=K[i];return o}function evert_num(obj){var o=[],K=keys(obj);for(var i=0;i!==K.length;++i)o[obj[K[i]]]=parseInt(K[i],10);return o}function evert_arr(obj){var o=[],K=keys(obj);for(var i=0;i!==K.length;++i){if(o[obj[K[i]]]==null)o[obj[K[i]]]=[];o[obj[K[i]]].push(K[i])}return o}function datenum(v,date1904){if(date1904)v+=1462;var epoch=Date.parse(v);return(epoch+22091616e5)/(24*60*60*1e3)}function cc2str(arr){var o="";for(var i=0;i!=arr.length;++i)o+=String.fromCharCode(arr[i]);return o}function getdata(data){if(!data)return null;if(data.name.substr(-4)===".bin"){if(data.data)return char_codes(data.data);if(data.asNodeBuffer&&has_buf)return data.asNodeBuffer();if(data._data&&data._data.getContent)return Array.prototype.slice.call(data._data.getContent())}else{if(data.data)return data.name.substr(-4)!==".bin"?debom_xml(data.data):char_codes(data.data);if(data.asNodeBuffer&&has_buf)return debom_xml(data.asNodeBuffer().toString("binary"));if(data.asBinary)return debom_xml(data.asBinary());if(data._data&&data._data.getContent)return debom_xml(cc2str(Array.prototype.slice.call(data._data.getContent(),0)))}return null}function safegetzipfile(zip,file){var f=file;if(zip.files[f])return zip.files[f];var lowerCaseFiles={};for(var key in zip.files){lowerCaseFiles[key.toLowerCase()]=zip.files[key]}f=file.toLowerCase();if(lowerCaseFiles[f])return lowerCaseFiles[f];f=f.replace(/\//g,"\\");if(lowerCaseFiles[f])return lowerCaseFiles[f];return null}function getzipfile(zip,file){var o=safegetzipfile(zip,file);if(o==null)throw new Error("Cannot find file "+file+" in zip");return o}function getzipdata(zip,file,safe){if(!safe)return getdata(getzipfile(zip,file));if(!file)return null;try{return getzipdata(zip,file)}catch(e){return null}}var _fs,jszip;if(typeof JSZip!=="undefined")jszip=JSZip;if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports){if(has_buf&&typeof jszip==="undefined")jszip=require("js"+"zip");if(typeof jszip==="undefined")jszip=require("./js"+"zip").JSZip;_fs=require("f"+"s")}}var attregexg=/([\w:]+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:'))/g;var tagregex=/<[^>]*>/g;var nsregex=/<\w*:/,nsregex2=/<(\/?)\w+:/;function parsexmltag(tag,skip_root){var z=[];var eq=0,c=0;for(;eq!==tag.length;++eq)if((c=tag.charCodeAt(eq))===32||c===10||c===13)break;if(!skip_root)z[0]=tag.substr(0,eq);if(eq===tag.length)return z;var m=tag.match(attregexg),j=0,w="",v="",i=0,q="",cc="";if(m)for(i=0;i!=m.length;++i){cc=m[i];for(c=0;c!=cc.length;++c)if(cc.charCodeAt(c)===61)break;q=cc.substr(0,c);v=cc.substring(c+2,cc.length-1);for(j=0;j!=q.length;++j)if(q.charCodeAt(j)===58)break;if(j===q.length)z[q]=v;else z[(j===5&&q.substr(0,5)==="xmlns"?"xmlns":"")+q.substr(j+1)]=v}return z}function strip_ns(x){return x.replace(nsregex2,"<$1")}var encodings={"&quot;":'"',"&apos;":"'","&gt;":">","&lt;":"<","&amp;":"&"};var rencoding=evert(encodings);var rencstr="&<>'\"".split("");var unescapexml=function(){var encregex=/&[a-z]*;/g,coderegex=/_x([\da-fA-F]+)_/g;return function unescapexml(text){var s=text+"";return s.replace(encregex,function($$){return encodings[$$]}).replace(coderegex,function(m,c){return String.fromCharCode(parseInt(c,16))})}}();var decregex=/[&<>'"]/g,charegex=/[\u0000-\u0008\u000b-\u001f]/g;function escapexml(text){var s=text+"";return s.replace(decregex,function(y){return rencoding[y]}).replace(charegex,function(s){return"_x"+("000"+s.charCodeAt(0).toString(16)).substr(-4)+"_"})}var xlml_fixstr=function(){var entregex=/&#(\d+);/g;function entrepl($$,$1){return String.fromCharCode(parseInt($1,10))}return function xlml_fixstr(str){return str.replace(entregex,entrepl)}}();function parsexmlbool(value,tag){switch(value){case"1":case"true":case"TRUE":return true;default:return false}}var utf8read=function utf8reada(orig){var out="",i=0,c=0,d=0,e=0,f=0,w=0;while(i<orig.length){c=orig.charCodeAt(i++);if(c<128){out+=String.fromCharCode(c);continue}d=orig.charCodeAt(i++);if(c>191&&c<224){out+=String.fromCharCode((c&31)<<6|d&63);continue}e=orig.charCodeAt(i++);if(c<240){out+=String.fromCharCode((c&15)<<12|(d&63)<<6|e&63);continue}f=orig.charCodeAt(i++);w=((c&7)<<18|(d&63)<<12|(e&63)<<6|f&63)-65536;out+=String.fromCharCode(55296+(w>>>10&1023));out+=String.fromCharCode(56320+(w&1023))}return out};if(has_buf){var utf8readb=function utf8readb(data){var out=new Buffer(2*data.length),w,i,j=1,k=0,ww=0,c;for(i=0;i<data.length;i+=j){j=1;if((c=data.charCodeAt(i))<128)w=c;else if(c<224){w=(c&31)*64+(data.charCodeAt(i+1)&63);j=2}else if(c<240){w=(c&15)*4096+(data.charCodeAt(i+1)&63)*64+(data.charCodeAt(i+2)&63);j=3}else{j=4;w=(c&7)*262144+(data.charCodeAt(i+1)&63)*4096+(data.charCodeAt(i+2)&63)*64+(data.charCodeAt(i+3)&63);w-=65536;ww=55296+(w>>>10&1023);w=56320+(w&1023)}if(ww!==0){out[k++]=ww&255;out[k++]=ww>>>8;ww=0}out[k++]=w%256;out[k++]=w>>>8}out.length=k;return out.toString("ucs2")};var corpus="foo bar baz芒聵聝冒聼聧拢";if(utf8read(corpus)==utf8readb(corpus))utf8read=utf8readb;var utf8readc=function utf8readc(data){return Buffer(data,"binary").toString("utf8")};if(utf8read(corpus)==utf8readc(corpus))utf8read=utf8readc}var matchtag=function(){var mtcache={};return function matchtag(f,g){var t=f+"|"+g;if(mtcache[t]!==undefined)return mtcache[t];return mtcache[t]=new RegExp("<(?:\\w+:)?"+f+'(?: xml:space="preserve")?(?:[^>]*)>([^鈽僝*)</(?:\\w+:)?'+f+">",g||"")}}();var vtregex=function(){var vt_cache={};return function vt_regex(bt){if(vt_cache[bt]!==undefined)return vt_cache[bt];return vt_cache[bt]=new RegExp("<vt:"+bt+">(.*?)</vt:"+bt+">","g")}}();var vtvregex=/<\/?vt:variant>/g,vtmregex=/<vt:([^>]*)>(.*)</;function parseVector(data){var h=parsexmltag(data);var matches=data.match(vtregex(h.baseType))||[];if(matches.length!=h.size)throw"unexpected vector length "+matches.length+" != "+h.size;var res=[];matches.forEach(function(x){var v=x.replace(vtvregex,"").match(vtmregex);res.push({v:v[2],t:v[1]})});return res}var wtregex=/(^\s|\s$|\n)/;function writetag(f,g){return"<"+f+(g.match(wtregex)?' xml:space="preserve"':"")+">"+g+"</"+f+">"}function wxt_helper(h){return keys(h).map(function(k){return" "+k+'="'+h[k]+'"'}).join("")}function writextag(f,g,h){return"<"+f+(isval(h)?wxt_helper(h):"")+(isval(g)?(g.match(wtregex)?' xml:space="preserve"':"")+">"+g+"</"+f:"/")+">"}function write_w3cdtf(d,t){try{return d.toISOString().replace(/\.\d*/,"")}catch(e){if(t)throw e}}function write_vt(s){switch(typeof s){case"string":return writextag("vt:lpwstr",s);case"number":return writextag((s|0)==s?"vt:i4":"vt:r8",String(s));case"boolean":return writextag("vt:bool",s?"true":"false")}if(s instanceof Date)return writextag("vt:filetime",write_w3cdtf(s));throw new Error("Unable to serialize "+s)}var XML_HEADER='<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\r\n';var XMLNS={dc:"http://purl.org/dc/elements/1.1/",dcterms:"http://purl.org/dc/terms/",dcmitype:"http://purl.org/dc/dcmitype/",mx:"http://schemas.microsoft.com/office/mac/excel/2008/main",r:"http://schemas.openxmlformats.org/officeDocument/2006/relationships",sjs:"http://schemas.openxmlformats.org/package/2006/sheetjs/core-properties",vt:"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes",xsi:"http://www.w3.org/2001/XMLSchema-instance",xsd:"http://www.w3.org/2001/XMLSchema"};XMLNS.main=["http://schemas.openxmlformats.org/spreadsheetml/2006/main","http://purl.oclc.org/ooxml/spreadsheetml/main","http://schemas.microsoft.com/office/excel/2006/main","http://schemas.microsoft.com/office/excel/2006/2"];function readIEEE754(buf,idx,isLE,nl,ml){if(isLE===undefined)isLE=true;if(!nl)nl=8;if(!ml&&nl===8)ml=52;var e,m,el=nl*8-ml-1,eMax=(1<<el)-1,eBias=eMax>>1;var bits=-7,d=isLE?-1:1,i=isLE?nl-1:0,s=buf[idx+i];i+=d;e=s&(1<<-bits)-1;s>>>=-bits;bits+=el;for(;bits>0;e=e*256+buf[idx+i],i+=d,bits-=8);m=e&(1<<-bits)-1;e>>>=-bits;bits+=ml;for(;bits>0;m=m*256+buf[idx+i],i+=d,bits-=8);if(e===eMax)return m?NaN:(s?-1:1)*Infinity;else if(e===0)e=1-eBias;else{m=m+Math.pow(2,ml);e=e-eBias}return(s?-1:1)*m*Math.pow(2,e-ml)}var __toBuffer,___toBuffer;__toBuffer=___toBuffer=function toBuffer_(bufs){var x=[];for(var i=0;i<bufs[0].length;++i){x.push.apply(x,bufs[0][i])}return x};var __utf16le,___utf16le;__utf16le=___utf16le=function utf16le_(b,s,e){var ss=[];for(var i=s;i<e;i+=2)ss.push(String.fromCharCode(__readUInt16LE(b,i)));return ss.join("")};var __hexlify,___hexlify;__hexlify=___hexlify=function hexlify_(b,s,l){return b.slice(s,s+l).map(function(x){return(x<16?"0":"")+x.toString(16)}).join("")};var __utf8,___utf8;__utf8=___utf8=function(b,s,e){var ss=[];for(var i=s;i<e;i++)ss.push(String.fromCharCode(__readUInt8(b,i)));return ss.join("")};var __lpstr,___lpstr;__lpstr=___lpstr=function lpstr_(b,i){var len=__readUInt32LE(b,i);return len>0?__utf8(b,i+4,i+4+len-1):""};var __lpwstr,___lpwstr;__lpwstr=___lpwstr=function lpwstr_(b,i){var len=2*__readUInt32LE(b,i);return len>0?__utf8(b,i+4,i+4+len-1):""};var __double,___double;__double=___double=function(b,idx){return readIEEE754(b,idx)};var is_buf=function is_buf_a(a){return Array.isArray(a)};if(has_buf){__utf16le=function utf16le_b(b,s,e){if(!Buffer.isBuffer(b))return ___utf16le(b,s,e);return b.toString("utf16le",s,e)};__hexlify=function(b,s,l){return Buffer.isBuffer(b)?b.toString("hex",s,s+l):___hexlify(b,s,l)};__lpstr=function lpstr_b(b,i){if(!Buffer.isBuffer(b))return ___lpstr(b,i);var len=b.readUInt32LE(i);return len>0?b.toString("utf8",i+4,i+4+len-1):""};__lpwstr=function lpwstr_b(b,i){if(!Buffer.isBuffer(b))return ___lpwstr(b,i);var len=2*b.readUInt32LE(i);return b.toString("utf16le",i+4,i+4+len-1)};__utf8=function utf8_b(s,e){return this.toString("utf8",s,e)};__toBuffer=function(bufs){return bufs[0].length>0&&Buffer.isBuffer(bufs[0][0])?Buffer.concat(bufs[0]):___toBuffer(bufs)};bconcat=function(bufs){return Buffer.isBuffer(bufs[0])?Buffer.concat(bufs):[].concat.apply([],bufs)};__double=function double_(b,i){if(Buffer.isBuffer(b))return b.readDoubleLE(i);return ___double(b,i)};is_buf=function is_buf_b(a){return Buffer.isBuffer(a)||Array.isArray(a)}}if(typeof cptable!=="undefined"){__utf16le=function(b,s,e){return cptable.utils.decode(1200,b.slice(s,e))};__utf8=function(b,s,e){return cptable.utils.decode(65001,b.slice(s,e))};__lpstr=function(b,i){var len=__readUInt32LE(b,i);return len>0?cptable.utils.decode(current_codepage,b.slice(i+4,i+4+len-1)):""};__lpwstr=function(b,i){var len=2*__readUInt32LE(b,i);return len>0?cptable.utils.decode(1200,b.slice(i+4,i+4+len-1)):""}}var __readUInt8=function(b,idx){return b[idx]};var __readUInt16LE=function(b,idx){return b[idx+1]*(1<<8)+b[idx]};var __readInt16LE=function(b,idx){var u=b[idx+1]*(1<<8)+b[idx];return u<32768?u:(65535-u+1)*-1};var __readUInt32LE=function(b,idx){return b[idx+3]*(1<<24)+(b[idx+2]<<16)+(b[idx+1]<<8)+b[idx]};var __readInt32LE=function(b,idx){return b[idx+3]<<24|b[idx+2]<<16|b[idx+1]<<8|b[idx]};var ___unhexlify=function(s){return s.match(/../g).map(function(x){return parseInt(x,16)})};var __unhexlify=typeof Buffer!=="undefined"?function(s){return Buffer.isBuffer(s)?new Buffer(s,"hex"):___unhexlify(s)}:___unhexlify;function ReadShift(size,t){var o="",oI,oR,oo=[],w,vv,i,loc;switch(t){case"dbcs":loc=this.l;if(has_buf&&Buffer.isBuffer(this))o=this.slice(this.l,this.l+2*size).toString("utf16le");else for(i=0;i!=size;++i){o+=String.fromCharCode(__readUInt16LE(this,loc));loc+=2}size*=2;break;case"utf8":o=__utf8(this,this.l,this.l+size);break;case"utf16le":size*=2;o=__utf16le(this,this.l,this.l+size);break;case"lpstr":o=__lpstr(this,this.l);size=5+o.length;break;case"lpwstr":o=__lpwstr(this,this.l);size=5+o.length;if(o[o.length-1]=="\0")size+=2;break;case"cstr":size=0;o="";while((w=__readUInt8(this,this.l+size++))!==0)oo.push(_getchar(w));o=oo.join("");break;case"wstr":size=0;o="";while((w=__readUInt16LE(this,this.l+size))!==0){oo.push(_getchar(w));size+=2}size+=2;o=oo.join("");break;case"dbcs-cont":o="";loc=this.l;for(i=0;i!=size;++i){if(this.lens&&this.lens.indexOf(loc)!==-1){w=__readUInt8(this,loc);this.l=loc+1;vv=ReadShift.call(this,size-i,w?"dbcs-cont":"sbcs-cont");return oo.join("")+vv}oo.push(_getchar(__readUInt16LE(this,loc)));loc+=2}o=oo.join("");size*=2;break;case"sbcs-cont":o="";loc=this.l;for(i=0;i!=size;++i){if(this.lens&&this.lens.indexOf(loc)!==-1){w=__readUInt8(this,loc);this.l=loc+1;vv=ReadShift.call(this,size-i,w?"dbcs-cont":"sbcs-cont");return oo.join("")+vv}oo.push(_getchar(__readUInt8(this,loc)));loc+=1}o=oo.join("");break;default:switch(size){case 1:oI=__readUInt8(this,this.l);this.l++;return oI;case 2:oI=(t==="i"?__readInt16LE:__readUInt16LE)(this,this.l);this.l+=2;return oI;case 4:if(t==="i"||(this[this.l+3]&128)===0){oI=__readInt32LE(this,this.l);this.l+=4;return oI}else{oR=__readUInt32LE(this,this.l);this.l+=4;return oR}break;case 8:if(t==="f"){oR=__double(this,this.l);this.l+=8;return oR}case 16:o=__hexlify(this,this.l,size);break}}this.l+=size;return o}function WriteShift(t,val,f){var size,i;if(f==="dbcs"){for(i=0;i!=val.length;++i)this.writeUInt16LE(val.charCodeAt(i),this.l+2*i);size=2*val.length}else switch(t){case 1:size=1;this[this.l]=val&255;break;case 3:size=3;this[this.l+2]=val&255;val>>>=8;this[this.l+1]=val&255;val>>>=8;this[this.l]=val&255;break;case 4:size=4;this.writeUInt32LE(val,this.l);break;case 8:size=8;if(f==="f"){this.writeDoubleLE(val,this.l);break}case 16:break;case-4:size=4;this.writeInt32LE(val,this.l);break}this.l+=size;return this}function CheckField(hexstr,fld){var m=__hexlify(this,this.l,hexstr.length>>1);if(m!==hexstr)throw fld+"Expected "+hexstr+" saw "+m;this.l+=hexstr.length>>1}function prep_blob(blob,pos){blob.l=pos;blob.read_shift=ReadShift;blob.chk=CheckField;blob.write_shift=WriteShift}function parsenoop(blob,length){blob.l+=length}function writenoop(blob,length){blob.l+=length}function new_buf(sz){var o=new_raw_buf(sz);prep_blob(o,0);return o}function recordhopper(data,cb,opts){var tmpbyte,cntbyte,length;prep_blob(data,data.l||0);while(data.l<data.length){var RT=data.read_shift(1);if(RT&128)RT=(RT&127)+((data.read_shift(1)&127)<<7);var R=XLSBRecordEnum[RT]||XLSBRecordEnum[65535];tmpbyte=data.read_shift(1);length=tmpbyte&127;for(cntbyte=1;cntbyte<4&&tmpbyte&128;++cntbyte)length+=((tmpbyte=data.read_shift(1))&127)<<7*cntbyte;var d=R.f(data,length,opts);if(cb(d,R,RT))return}}function buf_array(){var bufs=[],blksz=2048;var newblk=function ba_newblk(sz){var o=new_buf(sz);prep_blob(o,0);return o};var curbuf=newblk(blksz);var endbuf=function ba_endbuf(){curbuf.length=curbuf.l;if(curbuf.length>0)bufs.push(curbuf);curbuf=null};var next=function ba_next(sz){if(sz<curbuf.length-curbuf.l)return curbuf;endbuf();return curbuf=newblk(Math.max(sz+1,blksz))};var end=function ba_end(){endbuf();return __toBuffer([bufs])};var push=function ba_push(buf){endbuf();curbuf=buf;next(blksz)};return{next:next,push:push,end:end,_bufs:bufs}}function write_record(ba,type,payload,length){var t=evert_RE[type],l;if(!length)length=XLSBRecordEnum[t].p||(payload||[]).length||0;l=1+(t>=128?1:0)+1+length;if(length>=128)++l;if(length>=16384)++l;if(length>=2097152)++l;var o=ba.next(l);if(t<=127)o.write_shift(1,t);else{o.write_shift(1,(t&127)+128);o.write_shift(1,t>>7)}for(var i=0;i!=4;++i){if(length>=128){o.write_shift(1,(length&127)+128);length>>=7}else{o.write_shift(1,length);break}}if(length>0&&is_buf(payload))ba.push(payload)}function shift_cell_xls(cell,tgt){if(tgt.s){if(cell.cRel)cell.c+=tgt.s.c;if(cell.rRel)cell.r+=tgt.s.r}else{cell.c+=tgt.c;cell.r+=tgt.r}cell.cRel=cell.rRel=0;while(cell.c>=256)cell.c-=256;while(cell.r>=65536)cell.r-=65536;return cell}function shift_range_xls(cell,range){cell.s=shift_cell_xls(cell.s,range.s);cell.e=shift_cell_xls(cell.e,range.s);return cell}var OFFCRYPTO={};var make_offcrypto=function(O,_crypto){var crypto;if(typeof _crypto!=="undefined")crypto=_crypto;else if(typeof require!=="undefined"){try{crypto=require("cry"+"pto")}catch(e){crypto=null}}O.rc4=function(key,data){var S=new Array(256);var c=0,i=0,j=0,t=0;for(i=0;i!=256;++i)S[i]=i;for(i=0;i!=256;++i){j=j+S[i]+key[i%key.length].charCodeAt(0)&255;t=S[i];S[i]=S[j];S[j]=t}i=j=0;out=Buffer(data.length);for(c=0;c!=data.length;++c){i=i+1&255;j=(j+S[i])%256;t=S[i];S[i]=S[j];S[j]=t;out[c]=data[c]^S[S[i]+S[j]&255]}return out};if(crypto){O.md5=function(hex){return crypto.createHash("md5").update(hex).digest("hex")}}else{O.md5=function(hex){throw"unimplemented"}}};make_offcrypto(OFFCRYPTO,typeof crypto!=="undefined"?crypto:undefined);function parse_StrRun(data,length){return{ich:data.read_shift(2),ifnt:data.read_shift(2)}}function parse_RichStr(data,length){var start=data.l;var flags=data.read_shift(1);var str=parse_XLWideString(data);var rgsStrRun=[];var z={t:str,h:str};if((flags&1)!==0){var dwSizeStrRun=data.read_shift(4);for(var i=0;i!=dwSizeStrRun;++i)rgsStrRun.push(parse_StrRun(data));z.r=rgsStrRun}else z.r="<t>"+escapexml(str)+"</t>";if((flags&2)!==0){}data.l=start+length;return z}function write_RichStr(str,o){if(o==null)o=new_buf(5+2*str.t.length);o.write_shift(1,0);write_XLWideString(str.t,o);return o}function parse_XLSBCell(data){var col=data.read_shift(4);var iStyleRef=data.read_shift(2);iStyleRef+=data.read_shift(1)<<16;var fPhShow=data.read_shift(1);return{c:col,iStyleRef:iStyleRef}}function write_XLSBCell(cell,o){if(o==null)o=new_buf(8);o.write_shift(-4,cell.c);o.write_shift(3,cell.iStyleRef===undefined?cell.iStyleRef:cell.s);o.write_shift(1,0);return o}function parse_XLSBCodeName(data,length){return parse_XLWideString(data,length)}function parse_XLNullableWideString(data){var cchCharacters=data.read_shift(4);return cchCharacters===0||cchCharacters===4294967295?"":data.read_shift(cchCharacters,"dbcs")}function write_XLNullableWideString(data,o){if(!o)o=new_buf(127);o.write_shift(4,data.length>0?data.length:4294967295);if(data.length>0)o.write_shift(0,data,"dbcs");return o}function parse_XLWideString(data){var cchCharacters=data.read_shift(4);return cchCharacters===0?"":data.read_shift(cchCharacters,"dbcs")}function write_XLWideString(data,o){if(o==null)o=new_buf(4+2*data.length);o.write_shift(4,data.length);if(data.length>0)o.write_shift(0,data,"dbcs");return o}var parse_RelID=parse_XLNullableWideString;var write_RelID=write_XLNullableWideString;function parse_RkNumber(data){var b=data.slice(data.l,data.l+4);var fX100=b[0]&1,fInt=b[0]&2;data.l+=4;b[0]&=252;var RK=fInt===0?__double([0,0,0,0,b[0],b[1],b[2],b[3]],0):__readInt32LE(b,0)>>2;return fX100?RK/100:RK}function parse_UncheckedRfX(data){var cell={s:{},e:{}};cell.s.r=data.read_shift(4);cell.e.r=data.read_shift(4);cell.s.c=data.read_shift(4);cell.e.c=data.read_shift(4);return cell}function write_UncheckedRfX(r,o){if(!o)o=new_buf(16);o.write_shift(4,r.s.r);o.write_shift(4,r.e.r);o.write_shift(4,r.s.c);o.write_shift(4,r.e.c);return o}function parse_Xnum(data,length){return data.read_shift(8,"f")}function write_Xnum(data,o){return(o||new_buf(8)).write_shift(8,"f",data)}var BErr={0:"#NULL!",7:"#DIV/0!",15:"#VALUE!",23:"#REF!",29:"#NAME?",36:"#NUM!",42:"#N/A",43:"#GETTING_DATA",255:"#WTF?"};var RBErr=evert_num(BErr);function parse_BrtColor(data,length){var out={};var d=data.read_shift(1);out.fValidRGB=d&1;out.xColorType=d>>>1;out.index=data.read_shift(1);out.nTintAndShade=data.read_shift(2,"i");out.bRed=data.read_shift(1);out.bGreen=data.read_shift(1);out.bBlue=data.read_shift(1);out.bAlpha=data.read_shift(1)}function parse_FontFlags(data,length){var d=data.read_shift(1);data.l++;var out={fItalic:d&2,fStrikeout:d&8,fOutline:d&16,fShadow:d&32,fCondense:d&64,fExtend:d&128};return out}{var VT_EMPTY=0;var VT_NULL=1;var VT_I2=2;var VT_I4=3;var VT_R4=4;var VT_R8=5;var VT_CY=6;var VT_DATE=7;var VT_BSTR=8;var VT_ERROR=10;var VT_BOOL=11;var VT_VARIANT=12;var VT_DECIMAL=14;var VT_I1=16;var VT_UI1=17;var VT_UI2=18;var VT_UI4=19;var VT_I8=20;var VT_UI8=21;var VT_INT=22;var VT_UINT=23;var VT_LPSTR=30;var VT_LPWSTR=31;var VT_FILETIME=64;var VT_BLOB=65;var VT_STREAM=66;var VT_STORAGE=67;var VT_STREAMED_Object=68;var VT_STORED_Object=69;var VT_BLOB_Object=70;var VT_CF=71;var VT_CLSID=72;var VT_VERSIONED_STREAM=73;var VT_VECTOR=4096;var VT_ARRAY=8192;var VT_STRING=80;var VT_USTR=81;var VT_CUSTOM=[VT_STRING,VT_USTR]}var DocSummaryPIDDSI={1:{n:"CodePage",t:VT_I2},2:{n:"Category",t:VT_STRING},3:{n:"PresentationFormat",t:VT_STRING},4:{n:"ByteCount",t:VT_I4},5:{n:"LineCount",t:VT_I4},6:{n:"ParagraphCount",t:VT_I4},7:{n:"SlideCount",t:VT_I4},8:{n:"NoteCount",t:VT_I4},9:{n:"HiddenCount",t:VT_I4},10:{n:"MultimediaClipCount",t:VT_I4},11:{n:"Scale",t:VT_BOOL},12:{n:"HeadingPair",t:VT_VECTOR|VT_VARIANT},13:{n:"DocParts",t:VT_VECTOR|VT_LPSTR},14:{n:"Manager",t:VT_STRING},15:{n:"Company",t:VT_STRING},16:{n:"LinksDirty",t:VT_BOOL},17:{n:"CharacterCount",t:VT_I4},19:{n:"SharedDoc",t:VT_BOOL},22:{n:"HLinksChanged",t:VT_BOOL},23:{n:"AppVersion",t:VT_I4,p:"version"},26:{n:"ContentType",t:VT_STRING},27:{n:"ContentStatus",t:VT_STRING},28:{n:"Language",t:VT_STRING},29:{n:"Version",t:VT_STRING},255:{}};var SummaryPIDSI={1:{n:"CodePage",t:VT_I2},2:{n:"Title",t:VT_STRING},3:{n:"Subject",t:VT_STRING},4:{n:"Author",t:VT_STRING},5:{n:"Keywords",t:VT_STRING},6:{n:"Comments",t:VT_STRING},7:{n:"Template",t:VT_STRING},8:{n:"LastAuthor",t:VT_STRING},9:{n:"RevNumber",t:VT_STRING},10:{n:"EditTime",t:VT_FILETIME},11:{n:"LastPrinted",t:VT_FILETIME},12:{n:"CreatedDate",t:VT_FILETIME},13:{n:"ModifiedDate",t:VT_FILETIME},14:{n:"PageCount",t:VT_I4},15:{n:"WordCount",t:VT_I4},16:{n:"CharCount",t:VT_I4},17:{n:"Thumbnail",t:VT_CF},18:{n:"ApplicationName",t:VT_LPSTR},19:{n:"DocumentSecurity",t:VT_I4},255:{}};var SpecialProperties={2147483648:{n:"Locale",t:VT_UI4},2147483651:{n:"Behavior",t:VT_UI4},1919054434:{}};(function(){for(var y in SpecialProperties)if(SpecialProperties.hasOwnProperty(y))DocSummaryPIDDSI[y]=SummaryPIDSI[y]=SpecialProperties[y]})();var CountryEnum={1:"US",2:"CA",3:"",7:"RU",20:"EG",30:"GR",31:"NL",32:"BE",33:"FR",34:"ES",36:"HU",39:"IT",41:"CH",43:"AT",44:"GB",45:"DK",46:"SE",47:"NO",48:"PL",49:"DE",52:"MX",55:"BR",61:"AU",64:"NZ",66:"TH",81:"JP",82:"KR",84:"VN",86:"CN",90:"TR",105:"JS",213:"DZ",216:"MA",218:"LY",351:"PT",354:"IS",358:"FI",420:"CZ",886:"TW",961:"LB",962:"JO",963:"SY",964:"IQ",965:"KW",966:"SA",971:"AE",972:"IL",974:"QA",981:"IR",65535:"US"};var XLSFillPattern=[null,"solid","mediumGray","darkGray","lightGray","darkHorizontal","darkVertical","darkDown","darkUp","darkGrid","darkTrellis","lightHorizontal","lightVertical","lightDown","lightUp","lightGrid","lightTrellis","gray125","gray0625"];function rgbify(arr){return arr.map(function(x){return[x>>16&255,x>>8&255,x&255]})}var XLSIcv=rgbify([0,16777215,16711680,65280,255,16776960,16711935,65535,0,16777215,16711680,65280,255,16776960,16711935,65535,8388608,32768,128,8421376,8388736,32896,12632256,8421504,10066431,10040166,16777164,13434879,6684774,16744576,26316,13421823,128,16711935,16776960,65535,8388736,8388608,32896,255,52479,13434879,13434828,16777113,10079487,16751052,13408767,16764057,3368703,3394764,10079232,16763904,16750848,16737792,6710937,9868950,13158,3381606,13056,3355392,10040064,10040166,3355545,3355443,16777215,0]);var ct2type={"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":"workbooks","application/vnd.ms-excel.binIndexWs":"TODO","application/vnd.ms-excel.chartsheet":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":"TODO","application/vnd.ms-excel.dialogsheet":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":"TODO","application/vnd.ms-excel.macrosheet":"TODO","application/vnd.ms-excel.macrosheet+xml":"TODO","application/vnd.ms-excel.intlmacrosheet":"TODO","application/vnd.ms-excel.binIndexMs":"TODO","application/vnd.openxmlformats-package.core-properties+xml":"coreprops","application/vnd.openxmlformats-officedocument.custom-properties+xml":"custprops","application/vnd.openxmlformats-officedocument.extended-properties+xml":"extprops","application/vnd.openxmlformats-officedocument.customXmlProperties+xml":"TODO","application/vnd.ms-excel.comments":"comments","application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":"comments","application/vnd.ms-excel.pivotTable":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml":"TODO","application/vnd.ms-excel.calcChain":"calcchains","application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml":"calcchains","application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings":"TODO","application/vnd.ms-office.activeX":"TODO","application/vnd.ms-office.activeX+xml":"TODO","application/vnd.ms-excel.attachedToolbars":"TODO","application/vnd.ms-excel.connections":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":"TODO","application/vnd.ms-excel.externalLink":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml":"TODO","application/vnd.ms-excel.sheetMetadata":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml":"TODO","application/vnd.ms-excel.pivotCacheDefinition":"TODO","application/vnd.ms-excel.pivotCacheRecords":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml":"TODO","application/vnd.ms-excel.queryTable":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml":"TODO","application/vnd.ms-excel.userNames":"TODO","application/vnd.ms-excel.revisionHeaders":"TODO","application/vnd.ms-excel.revisionLog":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml":"TODO","application/vnd.ms-excel.tableSingleCells":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml":"TODO","application/vnd.ms-excel.slicer":"TODO","application/vnd.ms-excel.slicerCache":"TODO","application/vnd.ms-excel.slicer+xml":"TODO","application/vnd.ms-excel.slicerCache+xml":"TODO","application/vnd.ms-excel.wsSortMap":"TODO","application/vnd.ms-excel.table":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":"TODO","application/vnd.openxmlformats-officedocument.theme+xml":"themes","application/vnd.ms-excel.Timeline+xml":"TODO","application/vnd.ms-excel.TimelineCache+xml":"TODO","application/vnd.ms-office.vbaProject":"vba","application/vnd.ms-office.vbaProjectSignature":"vba","application/vnd.ms-office.volatileDependencies":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml":"TODO","application/vnd.ms-excel.controlproperties+xml":"TODO","application/vnd.openxmlformats-officedocument.model+data":"TODO","application/vnd.ms-excel.Survey+xml":"TODO","application/vnd.openxmlformats-officedocument.drawing+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.chart+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml":"TODO","application/vnd.openxmlformats-officedocument.vmlDrawing":"TODO","application/vnd.openxmlformats-package.relationships+xml":"rels","application/vnd.openxmlformats-officedocument.oleObject":"TODO",sheet:"js"};var CT_LIST=function(){var o={workbooks:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml",xlsm:"application/vnd.ms-excel.sheet.macroEnabled.main+xml",xlsb:"application/vnd.ms-excel.sheet.binary.macroEnabled.main",xltx:"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml"},strs:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml",xlsb:"application/vnd.ms-excel.sharedStrings"},sheets:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml",xlsb:"application/vnd.ms-excel.worksheet"},styles:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml",xlsb:"application/vnd.ms-excel.styles"
+}};keys(o).forEach(function(k){if(!o[k].xlsm)o[k].xlsm=o[k].xlsx});keys(o).forEach(function(k){keys(o[k]).forEach(function(v){ct2type[o[k][v]]=k})});return o}();var type2ct=evert_arr(ct2type);XMLNS.CT="http://schemas.openxmlformats.org/package/2006/content-types";function parse_ct(data,opts){var ctext={};if(!data||!data.match)return data;var ct={workbooks:[],sheets:[],calcchains:[],themes:[],styles:[],coreprops:[],extprops:[],custprops:[],strs:[],comments:[],vba:[],TODO:[],rels:[],xmlns:""};(data.match(tagregex)||[]).forEach(function(x){var y=parsexmltag(x);switch(y[0].replace(nsregex,"<")){case"<?xml":break;case"<Types":ct.xmlns=y["xmlns"+(y[0].match(/<(\w+):/)||["",""])[1]];break;case"<Default":ctext[y.Extension]=y.ContentType;break;case"<Override":if(ct[ct2type[y.ContentType]]!==undefined)ct[ct2type[y.ContentType]].push(y.PartName);else if(opts.WTF)console.error(y);break}});if(ct.xmlns!==XMLNS.CT)throw new Error("Unknown Namespace: "+ct.xmlns);ct.calcchain=ct.calcchains.length>0?ct.calcchains[0]:"";ct.sst=ct.strs.length>0?ct.strs[0]:"";ct.style=ct.styles.length>0?ct.styles[0]:"";ct.defaults=ctext;delete ct.calcchains;return ct}var CTYPE_XML_ROOT=writextag("Types",null,{xmlns:XMLNS.CT,"xmlns:xsd":XMLNS.xsd,"xmlns:xsi":XMLNS.xsi});var CTYPE_DEFAULTS=[["xml","application/xml"],["bin","application/vnd.ms-excel.sheet.binary.macroEnabled.main"],["rels",type2ct.rels[0]]].map(function(x){return writextag("Default",null,{Extension:x[0],ContentType:x[1]})});function write_ct(ct,opts){var o=[],v;o[o.length]=XML_HEADER;o[o.length]=CTYPE_XML_ROOT;o=o.concat(CTYPE_DEFAULTS);var f1=function(w){if(ct[w]&&ct[w].length>0){v=ct[w][0];o[o.length]=writextag("Override",null,{PartName:(v[0]=="/"?"":"/")+v,ContentType:CT_LIST[w][opts.bookType||"xlsx"]})}};var f2=function(w){ct[w].forEach(function(v){o[o.length]=writextag("Override",null,{PartName:(v[0]=="/"?"":"/")+v,ContentType:CT_LIST[w][opts.bookType||"xlsx"]})})};var f3=function(t){(ct[t]||[]).forEach(function(v){o[o.length]=writextag("Override",null,{PartName:(v[0]=="/"?"":"/")+v,ContentType:type2ct[t][0]})})};f1("workbooks");f2("sheets");f3("themes");["strs","styles"].forEach(f1);["coreprops","extprops","custprops"].forEach(f3);if(o.length>2){o[o.length]="</Types>";o[1]=o[1].replace("/>",">")}return o.join("")}var RELS={WB:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",SHEET:"http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument"};function parse_rels(data,currentFilePath){if(!data)return data;if(currentFilePath.charAt(0)!=="/"){currentFilePath="/"+currentFilePath}var rels={};var hash={};var resolveRelativePathIntoAbsolute=function(to){var toksFrom=currentFilePath.split("/");toksFrom.pop();var toksTo=to.split("/");var reversed=[];while(toksTo.length!==0){var tokTo=toksTo.shift();if(tokTo===".."){toksFrom.pop()}else if(tokTo!=="."){toksFrom.push(tokTo)}}return toksFrom.join("/")};data.match(tagregex).forEach(function(x){var y=parsexmltag(x);if(y[0]==="<Relationship"){var rel={};rel.Type=y.Type;rel.Target=y.Target;rel.Id=y.Id;rel.TargetMode=y.TargetMode;var canonictarget=y.TargetMode==="External"?y.Target:resolveRelativePathIntoAbsolute(y.Target);rels[canonictarget]=rel;hash[y.Id]=rel}});rels["!id"]=hash;return rels}XMLNS.RELS="http://schemas.openxmlformats.org/package/2006/relationships";var RELS_ROOT=writextag("Relationships",null,{xmlns:XMLNS.RELS});function write_rels(rels){var o=[];o[o.length]=XML_HEADER;o[o.length]=RELS_ROOT;keys(rels["!id"]).forEach(function(rid){var rel=rels["!id"][rid];o[o.length]=writextag("Relationship",null,rel)});if(o.length>2){o[o.length]="</Relationships>";o[1]=o[1].replace("/>",">")}return o.join("")}var CORE_PROPS=[["cp:category","Category"],["cp:contentStatus","ContentStatus"],["cp:keywords","Keywords"],["cp:lastModifiedBy","LastAuthor"],["cp:lastPrinted","LastPrinted"],["cp:revision","RevNumber"],["cp:version","Version"],["dc:creator","Author"],["dc:description","Comments"],["dc:identifier","Identifier"],["dc:language","Language"],["dc:subject","Subject"],["dc:title","Title"],["dcterms:created","CreatedDate","date"],["dcterms:modified","ModifiedDate","date"]];XMLNS.CORE_PROPS="http://schemas.openxmlformats.org/package/2006/metadata/core-properties";RELS.CORE_PROPS="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties";var CORE_PROPS_REGEX=function(){var r=new Array(CORE_PROPS.length);for(var i=0;i<CORE_PROPS.length;++i){var f=CORE_PROPS[i];var g="(?:"+f[0].substr(0,f[0].indexOf(":"))+":)"+f[0].substr(f[0].indexOf(":")+1);r[i]=new RegExp("<"+g+"[^>]*>(.*)</"+g+">")}return r}();function parse_core_props(data){var p={};for(var i=0;i<CORE_PROPS.length;++i){var f=CORE_PROPS[i],cur=data.match(CORE_PROPS_REGEX[i]);if(cur!=null&&cur.length>0)p[f[1]]=cur[1];if(f[2]==="date"&&p[f[1]])p[f[1]]=new Date(p[f[1]])}return p}var CORE_PROPS_XML_ROOT=writextag("cp:coreProperties",null,{"xmlns:cp":XMLNS.CORE_PROPS,"xmlns:dc":XMLNS.dc,"xmlns:dcterms":XMLNS.dcterms,"xmlns:dcmitype":XMLNS.dcmitype,"xmlns:xsi":XMLNS.xsi});function cp_doit(f,g,h,o,p){if(p[f]!=null||g==null||g==="")return;p[f]=g;o[o.length]=h?writextag(f,g,h):writetag(f,g)}function write_core_props(cp,opts){var o=[XML_HEADER,CORE_PROPS_XML_ROOT],p={};if(opts&&opts.Props){if(opts.Props.title)o[o.length]="<dc:title>"+opts.Props.title+"</dc:title>";if(opts.Props.subject)o[o.length]="<dc:subject>"+opts.Props.subject+"</dc:subject>";if(opts.Props.creator)o[o.length]="<dc:creator>"+opts.Props.creator+"</dc:creator>";if(opts.Props.keywords)o[o.length]="<cp:keywords>"+opts.Props.keywords+"</cp:keywords>";if(opts.Props.description)o[o.length]="<dc:description>"+opts.Props.description+"</dc:description>"}if(cp){if(cp.CreatedDate!=null)cp_doit("dcterms:created",typeof cp.CreatedDate==="string"?cp.CreatedDate:write_w3cdtf(cp.CreatedDate,opts.WTF),{"xsi:type":"dcterms:W3CDTF"},o,p);if(cp.ModifiedDate!=null)cp_doit("dcterms:modified",typeof cp.ModifiedDate==="string"?cp.ModifiedDate:write_w3cdtf(cp.ModifiedDate,opts.WTF),{"xsi:type":"dcterms:W3CDTF"},o,p);for(var i=0;i!=CORE_PROPS.length;++i){var f=CORE_PROPS[i];cp_doit(f[0],cp[f[1]],null,o,p)}}if(o.length>2){o[o.length]="</cp:coreProperties>";o[1]=o[1].replace("/>",">")}return o.join("")}var EXT_PROPS=[["Application","Application","string"],["AppVersion","AppVersion","string"],["Company","Company","string"],["DocSecurity","DocSecurity","string"],["Manager","Manager","string"],["HyperlinksChanged","HyperlinksChanged","bool"],["SharedDoc","SharedDoc","bool"],["LinksUpToDate","LinksUpToDate","bool"],["ScaleCrop","ScaleCrop","bool"],["HeadingPairs","HeadingPairs","raw"],["TitlesOfParts","TitlesOfParts","raw"]];XMLNS.EXT_PROPS="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties";RELS.EXT_PROPS="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties";function parse_ext_props(data,p){var q={};if(!p)p={};EXT_PROPS.forEach(function(f){switch(f[2]){case"string":p[f[1]]=(data.match(matchtag(f[0]))||[])[1];break;case"bool":p[f[1]]=(data.match(matchtag(f[0]))||[])[1]==="true";break;case"raw":var cur=data.match(new RegExp("<"+f[0]+"[^>]*>(.*)</"+f[0]+">"));if(cur&&cur.length>0)q[f[1]]=cur[1];break}});if(q.HeadingPairs&&q.TitlesOfParts){var v=parseVector(q.HeadingPairs);var j=0,widx=0;for(var i=0;i!==v.length;++i){switch(v[i].v){case"Worksheets":widx=j;p.Worksheets=+v[++i].v;break;case"Named Ranges":++i;break}}var parts=parseVector(q.TitlesOfParts).map(function(x){return utf8read(x.v)});p.SheetNames=parts.slice(widx,widx+p.Worksheets)}return p}var EXT_PROPS_XML_ROOT=writextag("Properties",null,{xmlns:XMLNS.EXT_PROPS,"xmlns:vt":XMLNS.vt});function write_ext_props(cp,opts){var o=[],p={},W=writextag;if(!cp)cp={};cp.Application="SheetJS";o[o.length]=XML_HEADER;o[o.length]=EXT_PROPS_XML_ROOT;EXT_PROPS.forEach(function(f){if(cp[f[1]]===undefined)return;var v;switch(f[2]){case"string":v=cp[f[1]];break;case"bool":v=cp[f[1]]?"true":"false";break}if(v!==undefined)o[o.length]=W(f[0],v)});o[o.length]=W("HeadingPairs",W("vt:vector",W("vt:variant","<vt:lpstr>Worksheets</vt:lpstr>")+W("vt:variant",W("vt:i4",String(cp.Worksheets))),{size:2,baseType:"variant"}));o[o.length]=W("TitlesOfParts",W("vt:vector",cp.SheetNames.map(function(s){return"<vt:lpstr>"+s+"</vt:lpstr>"}).join(""),{size:cp.Worksheets,baseType:"lpstr"}));if(o.length>2){o[o.length]="</Properties>";o[1]=o[1].replace("/>",">")}return o.join("")}XMLNS.CUST_PROPS="http://schemas.openxmlformats.org/officeDocument/2006/custom-properties";RELS.CUST_PROPS="http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties";var custregex=/<[^>]+>[^<]*/g;function parse_cust_props(data,opts){var p={},name;var m=data.match(custregex);if(m)for(var i=0;i!=m.length;++i){var x=m[i],y=parsexmltag(x);switch(y[0]){case"<?xml":break;case"<Properties":if(y.xmlns!==XMLNS.CUST_PROPS)throw"unrecognized xmlns "+y.xmlns;if(y.xmlnsvt&&y.xmlnsvt!==XMLNS.vt)throw"unrecognized vt "+y.xmlnsvt;break;case"<property":name=y.name;break;case"</property>":name=null;break;default:if(x.indexOf("<vt:")===0){var toks=x.split(">");var type=toks[0].substring(4),text=toks[1];switch(type){case"lpstr":case"lpwstr":case"bstr":case"lpwstr":p[name]=unescapexml(text);break;case"bool":p[name]=parsexmlbool(text,"<vt:bool>");break;case"i1":case"i2":case"i4":case"i8":case"int":case"uint":p[name]=parseInt(text,10);break;case"r4":case"r8":case"decimal":p[name]=parseFloat(text);break;case"filetime":case"date":p[name]=new Date(text);break;case"cy":case"error":p[name]=unescapexml(text);break;default:if(typeof console!=="undefined")console.warn("Unexpected",x,type,toks)}}else if(x.substr(0,2)==="</"){}else if(opts.WTF)throw new Error(x)}}return p}var CUST_PROPS_XML_ROOT=writextag("Properties",null,{xmlns:XMLNS.CUST_PROPS,"xmlns:vt":XMLNS.vt});function write_cust_props(cp,opts){var o=[XML_HEADER,CUST_PROPS_XML_ROOT];if(!cp)return o.join("");var pid=1;keys(cp).forEach(function custprop(k){++pid;o[o.length]=writextag("property",write_vt(cp[k]),{fmtid:"{D5CDD505-2E9C-101B-9397-08002B2CF9AE}",pid:pid,name:k})});if(o.length>2){o[o.length]="</Properties>";o[1]=o[1].replace("/>",">")}return o.join("")}function xlml_set_prop(Props,tag,val){switch(tag){case"Description":tag="Comments";break}Props[tag]=val}function parse_FILETIME(blob){var dwLowDateTime=blob.read_shift(4),dwHighDateTime=blob.read_shift(4);return new Date((dwHighDateTime/1e7*Math.pow(2,32)+dwLowDateTime/1e7-11644473600)*1e3).toISOString().replace(/\.000/,"")}function parse_lpstr(blob,type,pad){var str=blob.read_shift(0,"lpstr");if(pad)blob.l+=4-(str.length+1&3)&3;return str}function parse_lpwstr(blob,type,pad){var str=blob.read_shift(0,"lpwstr");if(pad)blob.l+=4-(str.length+1&3)&3;return str}function parse_VtStringBase(blob,stringType,pad){if(stringType===31)return parse_lpwstr(blob);return parse_lpstr(blob,stringType,pad)}function parse_VtString(blob,t,pad){return parse_VtStringBase(blob,t,pad===false?0:4)}function parse_VtUnalignedString(blob,t){if(!t)throw new Error("dafuq?");return parse_VtStringBase(blob,t,0)}function parse_VtVecUnalignedLpstrValue(blob){var length=blob.read_shift(4);var ret=[];for(var i=0;i!=length;++i)ret[i]=blob.read_shift(0,"lpstr");return ret}function parse_VtVecUnalignedLpstr(blob){return parse_VtVecUnalignedLpstrValue(blob)}function parse_VtHeadingPair(blob){var headingString=parse_TypedPropertyValue(blob,VT_USTR);var headerParts=parse_TypedPropertyValue(blob,VT_I4);return[headingString,headerParts]}function parse_VtVecHeadingPairValue(blob){var cElements=blob.read_shift(4);var out=[];for(var i=0;i!=cElements/2;++i)out.push(parse_VtHeadingPair(blob));return out}function parse_VtVecHeadingPair(blob){return parse_VtVecHeadingPairValue(blob)}function parse_dictionary(blob,CodePage){var cnt=blob.read_shift(4);var dict={};for(var j=0;j!=cnt;++j){var pid=blob.read_shift(4);var len=blob.read_shift(4);dict[pid]=blob.read_shift(len,CodePage===1200?"utf16le":"utf8").replace(chr0,"").replace(chr1,"!")}if(blob.l&3)blob.l=blob.l>>2+1<<2;return dict}function parse_BLOB(blob){var size=blob.read_shift(4);var bytes=blob.slice(blob.l,blob.l+size);if(size&3>0)blob.l+=4-(size&3)&3;return bytes}function parse_ClipboardData(blob){var o={};o.Size=blob.read_shift(4);blob.l+=o.Size;return o}function parse_VtVector(blob,cb){}function parse_TypedPropertyValue(blob,type,_opts){var t=blob.read_shift(2),ret,opts=_opts||{};blob.l+=2;if(type!==VT_VARIANT)if(t!==type&&VT_CUSTOM.indexOf(type)===-1)throw new Error("Expected type "+type+" saw "+t);switch(type===VT_VARIANT?t:type){case 2:ret=blob.read_shift(2,"i");if(!opts.raw)blob.l+=2;return ret;case 3:ret=blob.read_shift(4,"i");return ret;case 11:return blob.read_shift(4)!==0;case 19:ret=blob.read_shift(4);return ret;case 30:return parse_lpstr(blob,t,4).replace(chr0,"");case 31:return parse_lpwstr(blob);case 64:return parse_FILETIME(blob);case 65:return parse_BLOB(blob);case 71:return parse_ClipboardData(blob);case 80:return parse_VtString(blob,t,!opts.raw&&4).replace(chr0,"");case 81:return parse_VtUnalignedString(blob,t,4).replace(chr0,"");case 4108:return parse_VtVecHeadingPair(blob);case 4126:return parse_VtVecUnalignedLpstr(blob);default:throw new Error("TypedPropertyValue unrecognized type "+type+" "+t)}}function parse_PropertySet(blob,PIDSI){var start_addr=blob.l;var size=blob.read_shift(4);var NumProps=blob.read_shift(4);var Props=[],i=0;var CodePage=0;var Dictionary=-1,DictObj;for(i=0;i!=NumProps;++i){var PropID=blob.read_shift(4);var Offset=blob.read_shift(4);Props[i]=[PropID,Offset+start_addr]}var PropH={};for(i=0;i!=NumProps;++i){if(blob.l!==Props[i][1]){var fail=true;if(i>0&&PIDSI)switch(PIDSI[Props[i-1][0]].t){case 2:if(blob.l+2===Props[i][1]){blob.l+=2;fail=false}break;case 80:if(blob.l<=Props[i][1]){blob.l=Props[i][1];fail=false}break;case 4108:if(blob.l<=Props[i][1]){blob.l=Props[i][1];fail=false}break}if(!PIDSI&&blob.l<=Props[i][1]){fail=false;blob.l=Props[i][1]}if(fail)throw new Error("Read Error: Expected address "+Props[i][1]+" at "+blob.l+" :"+i)}if(PIDSI){var piddsi=PIDSI[Props[i][0]];PropH[piddsi.n]=parse_TypedPropertyValue(blob,piddsi.t,{raw:true});if(piddsi.p==="version")PropH[piddsi.n]=String(PropH[piddsi.n]>>16)+"."+String(PropH[piddsi.n]&65535);if(piddsi.n=="CodePage")switch(PropH[piddsi.n]){case 0:PropH[piddsi.n]=1252;case 1e4:case 1252:case 874:case 1250:case 1251:case 1253:case 1254:case 1255:case 1256:case 1257:case 1258:case 932:case 936:case 949:case 950:case 1200:case 1201:case 65e3:case-536:case 65001:case-535:set_cp(CodePage=PropH[piddsi.n]);break;default:throw new Error("Unsupported CodePage: "+PropH[piddsi.n])}}else{if(Props[i][0]===1){CodePage=PropH.CodePage=parse_TypedPropertyValue(blob,VT_I2);set_cp(CodePage);if(Dictionary!==-1){var oldpos=blob.l;blob.l=Props[Dictionary][1];DictObj=parse_dictionary(blob,CodePage);blob.l=oldpos}}else if(Props[i][0]===0){if(CodePage===0){Dictionary=i;blob.l=Props[i+1][1];continue}DictObj=parse_dictionary(blob,CodePage)}else{var name=DictObj[Props[i][0]];var val;switch(blob[blob.l]){case 65:blob.l+=4;val=parse_BLOB(blob);break;case 30:blob.l+=4;val=parse_VtString(blob,blob[blob.l-4]);break;case 31:blob.l+=4;val=parse_VtString(blob,blob[blob.l-4]);break;case 3:blob.l+=4;val=blob.read_shift(4,"i");break;case 19:blob.l+=4;val=blob.read_shift(4);break;case 5:blob.l+=4;val=blob.read_shift(8,"f");break;case 11:blob.l+=4;val=parsebool(blob,4);break;case 64:blob.l+=4;val=new Date(parse_FILETIME(blob));break;default:throw new Error("unparsed value: "+blob[blob.l])}PropH[name]=val}}}blob.l=start_addr+size;return PropH}function parse_PropertySetStream(file,PIDSI){var blob=file.content;prep_blob(blob,0);var NumSets,FMTID0,FMTID1,Offset0,Offset1;blob.chk("feff","Byte Order: ");var vers=blob.read_shift(2);var SystemIdentifier=blob.read_shift(4);blob.chk(CFB.utils.consts.HEADER_CLSID,"CLSID: ");NumSets=blob.read_shift(4);if(NumSets!==1&&NumSets!==2)throw"Unrecognized #Sets: "+NumSets;FMTID0=blob.read_shift(16);Offset0=blob.read_shift(4);if(NumSets===1&&Offset0!==blob.l)throw"Length mismatch";else if(NumSets===2){FMTID1=blob.read_shift(16);Offset1=blob.read_shift(4)}var PSet0=parse_PropertySet(blob,PIDSI);var rval={SystemIdentifier:SystemIdentifier};for(var y in PSet0)rval[y]=PSet0[y];rval.FMTID=FMTID0;if(NumSets===1)return rval;if(blob.l!==Offset1)throw"Length mismatch 2: "+blob.l+" !== "+Offset1;var PSet1;try{PSet1=parse_PropertySet(blob,null)}catch(e){}for(y in PSet1)rval[y]=PSet1[y];rval.FMTID=[FMTID0,FMTID1];return rval}function parsenoop2(blob,length){blob.read_shift(length);return null}function parslurp(blob,length,cb){var arr=[],target=blob.l+length;while(blob.l<target)arr.push(cb(blob,target-blob.l));if(target!==blob.l)throw new Error("Slurp error");return arr}function parslurp2(blob,length,cb){var arr=[],target=blob.l+length,len=blob.read_shift(2);while(len--!==0)arr.push(cb(blob,target-blob.l));if(target!==blob.l)throw new Error("Slurp error");return arr}function parsebool(blob,length){return blob.read_shift(length)===1}function parseuint16(blob){return blob.read_shift(2,"u")}function parseuint16a(blob,length){return parslurp(blob,length,parseuint16)}var parse_Boolean=parsebool;function parse_Bes(blob){var v=blob.read_shift(1),t=blob.read_shift(1);return t===1?v:v===1}function parse_ShortXLUnicodeString(blob,length,opts){var cch=blob.read_shift(1);var width=1,encoding="sbcs-cont";var cp=current_codepage;if(opts&&opts.biff>=8)current_codepage=1200;if(opts===undefined||opts.biff!==5){var fHighByte=blob.read_shift(1);if(fHighByte){width=2;encoding="dbcs-cont"}}var o=cch?blob.read_shift(cch,encoding):"";current_codepage=cp;return o}function parse_XLUnicodeRichExtendedString(blob){var cp=current_codepage;current_codepage=1200;var cch=blob.read_shift(2),flags=blob.read_shift(1);var fHighByte=flags&1,fExtSt=flags&4,fRichSt=flags&8;var width=1+(flags&1);var cRun,cbExtRst;var z={};if(fRichSt)cRun=blob.read_shift(2);if(fExtSt)cbExtRst=blob.read_shift(4);var encoding=flags&1?"dbcs-cont":"sbcs-cont";var msg=cch===0?"":blob.read_shift(cch,encoding);if(fRichSt)blob.l+=4*cRun;if(fExtSt)blob.l+=cbExtRst;z.t=msg;if(!fRichSt){z.raw="<t>"+z.t+"</t>";z.r=z.t}current_codepage=cp;return z}function parse_XLUnicodeStringNoCch(blob,cch,opts){var retval;var fHighByte=blob.read_shift(1);if(fHighByte===0){retval=blob.read_shift(cch,"sbcs-cont")}else{retval=blob.read_shift(cch,"dbcs-cont")}return retval}function parse_XLUnicodeString(blob,length,opts){var cch=blob.read_shift(opts!==undefined&&opts.biff>0&&opts.biff<8?1:2);if(cch===0){blob.l++;return""}return parse_XLUnicodeStringNoCch(blob,cch,opts)}function parse_XLUnicodeString2(blob,length,opts){if(opts.biff!==5&&opts.biff!==2)return parse_XLUnicodeString(blob,length,opts);var cch=blob.read_shift(1);if(cch===0){blob.l++;return""}return blob.read_shift(cch,"sbcs-cont")}var parse_ControlInfo=parsenoop;var parse_URLMoniker=function(blob,length){var len=blob.read_shift(4),start=blob.l;var extra=false;if(len>24){blob.l+=len-24;if(blob.read_shift(16)==="795881f43b1d7f48af2c825dc4852763")extra=true;blob.l=start}var url=blob.read_shift((extra?len-24:len)>>1,"utf16le").replace(chr0,"");if(extra)blob.l+=24;return url};var parse_FileMoniker=function(blob,length){var cAnti=blob.read_shift(2);var ansiLength=blob.read_shift(4);var ansiPath=blob.read_shift(ansiLength,"cstr");var endServer=blob.read_shift(2);var versionNumber=blob.read_shift(2);var cbUnicodePathSize=blob.read_shift(4);if(cbUnicodePathSize===0)return ansiPath.replace(/\\/g,"/");var cbUnicodePathBytes=blob.read_shift(4);var usKeyValue=blob.read_shift(2);var unicodePath=blob.read_shift(cbUnicodePathBytes>>1,"utf16le").replace(chr0,"");return unicodePath};var parse_HyperlinkMoniker=function(blob,length){var clsid=blob.read_shift(16);length-=16;switch(clsid){case"e0c9ea79f9bace118c8200aa004ba90b":return parse_URLMoniker(blob,length);case"0303000000000000c000000000000046":return parse_FileMoniker(blob,length);default:throw"unsupported moniker "+clsid}};var parse_HyperlinkString=function(blob,length){var len=blob.read_shift(4);var o=blob.read_shift(len,"utf16le").replace(chr0,"");return o};var parse_Hyperlink=function(blob,length){var end=blob.l+length;var sVer=blob.read_shift(4);if(sVer!==2)throw new Error("Unrecognized streamVersion: "+sVer);var flags=blob.read_shift(2);blob.l+=2;var displayName,targetFrameName,moniker,oleMoniker,location,guid,fileTime;if(flags&16)displayName=parse_HyperlinkString(blob,end-blob.l);if(flags&128)targetFrameName=parse_HyperlinkString(blob,end-blob.l);if((flags&257)===257)moniker=parse_HyperlinkString(blob,end-blob.l);if((flags&257)===1)oleMoniker=parse_HyperlinkMoniker(blob,end-blob.l);if(flags&8)location=parse_HyperlinkString(blob,end-blob.l);if(flags&32)guid=blob.read_shift(16);if(flags&64)fileTime=parse_FILETIME(blob,8);blob.l=end;var target=targetFrameName||moniker||oleMoniker;if(location)target+="#"+location;return{Target:target}};function parse_LongRGBA(blob,length){var r=blob.read_shift(1),g=blob.read_shift(1),b=blob.read_shift(1),a=blob.read_shift(1);return[r,g,b,a]}function parse_LongRGB(blob,length){var x=parse_LongRGBA(blob,length);x[3]=0;return x}function parse_XLSCell(blob,length){var rw=blob.read_shift(2);var col=blob.read_shift(2);var ixfe=blob.read_shift(2);return{r:rw,c:col,ixfe:ixfe}}function parse_frtHeader(blob){var rt=blob.read_shift(2);var flags=blob.read_shift(2);blob.l+=8;return{type:rt,flags:flags}}function parse_OptXLUnicodeString(blob,length,opts){return length===0?"":parse_XLUnicodeString2(blob,length,opts)}var HIDEOBJENUM=["SHOWALL","SHOWPLACEHOLDER","HIDEALL"];var parse_HideObjEnum=parseuint16;function parse_XTI(blob,length){var iSupBook=blob.read_shift(2),itabFirst=blob.read_shift(2,"i"),itabLast=blob.read_shift(2,"i");return[iSupBook,itabFirst,itabLast]}function parse_RkRec(blob,length){var ixfe=blob.read_shift(2);var RK=parse_RkNumber(blob);return[ixfe,RK]}function parse_AddinUdf(blob,length){blob.l+=4;length-=4;var l=blob.l+length;var udfName=parse_ShortXLUnicodeString(blob,length);var cb=blob.read_shift(2);l-=blob.l;if(cb!==l)throw"Malformed AddinUdf: padding = "+l+" != "+cb;blob.l+=cb;return udfName}function parse_Ref8U(blob,length){var rwFirst=blob.read_shift(2);var rwLast=blob.read_shift(2);var colFirst=blob.read_shift(2);var colLast=blob.read_shift(2);return{s:{c:colFirst,r:rwFirst},e:{c:colLast,r:rwLast}}}function parse_RefU(blob,length){var rwFirst=blob.read_shift(2);var rwLast=blob.read_shift(2);var colFirst=blob.read_shift(1);var colLast=blob.read_shift(1);return{s:{c:colFirst,r:rwFirst},e:{c:colLast,r:rwLast}}}var parse_Ref=parse_RefU;function parse_FtCmo(blob,length){blob.l+=4;var ot=blob.read_shift(2);var id=blob.read_shift(2);var flags=blob.read_shift(2);blob.l+=12;return[id,ot,flags]}function parse_FtNts(blob,length){var out={};blob.l+=4;blob.l+=16;out.fSharedNote=blob.read_shift(2);blob.l+=4;return out}function parse_FtCf(blob,length){var out={};blob.l+=4;blob.cf=blob.read_shift(2);return out}var FtTab={21:parse_FtCmo,19:parsenoop,18:function(blob,length){blob.l+=12},17:function(blob,length){blob.l+=8},16:parsenoop,15:parsenoop,13:parse_FtNts,12:function(blob,length){blob.l+=24},11:function(blob,length){blob.l+=10},10:function(blob,length){blob.l+=16},9:parsenoop,8:function(blob,length){blob.l+=6},7:parse_FtCf,6:function(blob,length){blob.l+=6},4:parsenoop,0:function(blob,length){blob.l+=4}};function parse_FtArray(blob,length,ot){var s=blob.l;var fts=[];while(blob.l<s+length){var ft=blob.read_shift(2);blob.l-=2;try{fts.push(FtTab[ft](blob,s+length-blob.l))}catch(e){blob.l=s+length;return fts}}if(blob.l!=s+length)blob.l=s+length;return fts}var parse_FontIndex=parseuint16;function parse_BOF(blob,length){var o={};o.BIFFVer=blob.read_shift(2);length-=2;switch(o.BIFFVer){case 1536:case 1280:case 2:case 7:break;default:throw"Unexpected BIFF Ver "+o.BIFFVer}blob.read_shift(length);return o}function parse_InterfaceHdr(blob,length){if(length===0)return 1200;var q;if((q=blob.read_shift(2))!==1200)throw"InterfaceHdr codePage "+q;return 1200}function parse_WriteAccess(blob,length,opts){if(opts.enc){blob.l+=length;return""}var l=blob.l;var UserName=parse_XLUnicodeString(blob,0,opts);blob.read_shift(length+l-blob.l);return UserName}function parse_BoundSheet8(blob,length,opts){var pos=blob.read_shift(4);var hidden=blob.read_shift(1)>>6;var dt=blob.read_shift(1);switch(dt){case 0:dt="Worksheet";break;case 1:dt="Macrosheet";break;case 2:dt="Chartsheet";break;case 6:dt="VBAModule";break}var name=parse_ShortXLUnicodeString(blob,0,opts);if(name.length===0)name="Sheet1";return{pos:pos,hs:hidden,dt:dt,name:name}}function parse_SST(blob,length){var cnt=blob.read_shift(4);var ucnt=blob.read_shift(4);var strs=[];for(var i=0;i!=ucnt;++i){strs.push(parse_XLUnicodeRichExtendedString(blob))}strs.Count=cnt;strs.Unique=ucnt;return strs}function parse_ExtSST(blob,length){var extsst={};extsst.dsst=blob.read_shift(2);blob.l+=length-2;return extsst}function parse_Row(blob,length){var rw=blob.read_shift(2),col=blob.read_shift(2),Col=blob.read_shift(2),rht=blob.read_shift(2);blob.read_shift(4);var flags=blob.read_shift(1);blob.read_shift(1);blob.read_shift(2);return{r:rw,c:col,cnt:Col-col}}function parse_ForceFullCalculation(blob,length){var header=parse_frtHeader(blob);if(header.type!=2211)throw"Invalid Future Record "+header.type;var fullcalc=blob.read_shift(4);return fullcalc!==0}var parse_CompressPictures=parsenoop2;function parse_RecalcId(blob,length){blob.read_shift(2);return blob.read_shift(4)}function parse_DefaultRowHeight(blob,length){var f=blob.read_shift(2),miyRw;miyRw=blob.read_shift(2);var fl={Unsynced:f&1,DyZero:(f&2)>>1,ExAsc:(f&4)>>2,ExDsc:(f&8)>>3};return[fl,miyRw]}function parse_Window1(blob,length){var xWn=blob.read_shift(2),yWn=blob.read_shift(2),dxWn=blob.read_shift(2),dyWn=blob.read_shift(2);var flags=blob.read_shift(2),iTabCur=blob.read_shift(2),iTabFirst=blob.read_shift(2);var ctabSel=blob.read_shift(2),wTabRatio=blob.read_shift(2);return{Pos:[xWn,yWn],Dim:[dxWn,dyWn],Flags:flags,CurTab:iTabCur,FirstTab:iTabFirst,Selected:ctabSel,TabRatio:wTabRatio}}function parse_Font(blob,length,opts){blob.l+=14;var name=parse_ShortXLUnicodeString(blob,0,opts);return name}function parse_LabelSst(blob,length){var cell=parse_XLSCell(blob);cell.isst=blob.read_shift(4);return cell}function parse_Label(blob,length,opts){var cell=parse_XLSCell(blob,6);var str=parse_XLUnicodeString(blob,length-6,opts);cell.val=str;return cell}function parse_Format(blob,length,opts){var ifmt=blob.read_shift(2);var fmtstr=parse_XLUnicodeString2(blob,0,opts);return[ifmt,fmtstr]}function parse_Dimensions(blob,length){var w=length===10?2:4;var r=blob.read_shift(w),R=blob.read_shift(w),c=blob.read_shift(2),C=blob.read_shift(2);blob.l+=2;return{s:{r:r,c:c},e:{r:R,c:C}}}function parse_RK(blob,length){var rw=blob.read_shift(2),col=blob.read_shift(2);var rkrec=parse_RkRec(blob);return{r:rw,c:col,ixfe:rkrec[0],rknum:rkrec[1]}}function parse_MulRk(blob,length){var target=blob.l+length-2;var rw=blob.read_shift(2),col=blob.read_shift(2);var rkrecs=[];while(blob.l<target)rkrecs.push(parse_RkRec(blob));if(blob.l!==target)throw"MulRK read error";var lastcol=blob.read_shift(2);if(rkrecs.length!=lastcol-col+1)throw"MulRK length mismatch";return{r:rw,c:col,C:lastcol,rkrec:rkrecs}}function parse_CellStyleXF(blob,length,style){var o={};var a=blob.read_shift(4),b=blob.read_shift(4);var c=blob.read_shift(4),d=blob.read_shift(2);o.patternType=XLSFillPattern[c>>26];o.icvFore=d&127;o.icvBack=d>>7&127;return o}function parse_CellXF(blob,length){return parse_CellStyleXF(blob,length,0)}function parse_StyleXF(blob,length){return parse_CellStyleXF(blob,length,1)}function parse_XF(blob,length){var o={};o.ifnt=blob.read_shift(2);o.ifmt=blob.read_shift(2);o.flags=blob.read_shift(2);o.fStyle=o.flags>>2&1;length-=6;o.data=parse_CellStyleXF(blob,length,o.fStyle);return o}function parse_Guts(blob,length){blob.l+=4;var out=[blob.read_shift(2),blob.read_shift(2)];if(out[0]!==0)out[0]--;if(out[1]!==0)out[1]--;if(out[0]>7||out[1]>7)throw"Bad Gutters: "+out;return out}function parse_BoolErr(blob,length){var cell=parse_XLSCell(blob,6);var val=parse_Bes(blob,2);cell.val=val;cell.t=val===true||val===false?"b":"e";return cell}function parse_Number(blob,length){var cell=parse_XLSCell(blob,6);var xnum=parse_Xnum(blob,8);cell.val=xnum;return cell}var parse_XLHeaderFooter=parse_OptXLUnicodeString;function parse_SupBook(blob,length,opts){var end=blob.l+length;var ctab=blob.read_shift(2);var cch=blob.read_shift(2);var virtPath;if(cch>=1&&cch<=255)virtPath=parse_XLUnicodeStringNoCch(blob,cch);var rgst=blob.read_shift(end-blob.l);opts.sbcch=cch;return[cch,ctab,virtPath,rgst]}function parse_ExternName(blob,length,opts){var flags=blob.read_shift(2);var body;var o={fBuiltIn:flags&1,fWantAdvise:flags>>>1&1,fWantPict:flags>>>2&1,fOle:flags>>>3&1,fOleLink:flags>>>4&1,cf:flags>>>5&1023,fIcon:flags>>>15&1};if(opts.sbcch===14849)body=parse_AddinUdf(blob,length-2);o.body=body||blob.read_shift(length-2);return o}function parse_Lbl(blob,length,opts){if(opts.biff<8)return parse_Label(blob,length,opts);var target=blob.l+length;var flags=blob.read_shift(2);var chKey=blob.read_shift(1);var cch=blob.read_shift(1);var cce=blob.read_shift(2);blob.l+=2;var itab=blob.read_shift(2);blob.l+=4;var name=parse_XLUnicodeStringNoCch(blob,cch,opts);var rgce=parse_NameParsedFormula(blob,target-blob.l,opts,cce);return{chKey:chKey,Name:name,rgce:rgce}}function parse_ExternSheet(blob,length,opts){if(opts.biff<8)return parse_ShortXLUnicodeString(blob,length,opts);var o=parslurp2(blob,length,parse_XTI);var oo=[];if(opts.sbcch===1025){for(var i=0;i!=o.length;++i)oo.push(opts.snames[o[i][1]]);return oo}else return o}function parse_ShrFmla(blob,length,opts){var ref=parse_RefU(blob,6);blob.l++;var cUse=blob.read_shift(1);length-=8;return[parse_SharedParsedFormula(blob,length,opts),cUse]}function parse_Array(blob,length,opts){var ref=parse_Ref(blob,6);blob.l+=6;length-=12;return[ref,parse_ArrayParsedFormula(blob,length,opts,ref)]}function parse_MTRSettings(blob,length){var fMTREnabled=blob.read_shift(4)!==0;var fUserSetThreadCount=blob.read_shift(4)!==0;var cUserThreadCount=blob.read_shift(4);return[fMTREnabled,fUserSetThreadCount,cUserThreadCount]}function parse_NoteSh(blob,length,opts){if(opts.biff<8)return;var row=blob.read_shift(2),col=blob.read_shift(2);var flags=blob.read_shift(2),idObj=blob.read_shift(2);var stAuthor=parse_XLUnicodeString2(blob,0,opts);if(opts.biff<8)blob.read_shift(1);return[{r:row,c:col},stAuthor,idObj,flags]}function parse_Note(blob,length,opts){return parse_NoteSh(blob,length,opts)}function parse_MergeCells(blob,length){var merges=[];var cmcs=blob.read_shift(2);while(cmcs--)merges.push(parse_Ref8U(blob,length));return merges}function parse_Obj(blob,length){var cmo=parse_FtCmo(blob,22);var fts=parse_FtArray(blob,length-22,cmo[1]);return{cmo:cmo,ft:fts}}function parse_TxO(blob,length,opts){var s=blob.l;try{blob.l+=4;var ot=(opts.lastobj||{cmo:[0,0]}).cmo[1];var controlInfo;if([0,5,7,11,12,14].indexOf(ot)==-1)blob.l+=6;else controlInfo=parse_ControlInfo(blob,6,opts);var cchText=blob.read_shift(2);var cbRuns=blob.read_shift(2);var ifntEmpty=parse_FontIndex(blob,2);var len=blob.read_shift(2);blob.l+=len;var texts="";for(var i=1;i<blob.lens.length-1;++i){if(blob.l-s!=blob.lens[i])throw"TxO: bad continue record";var hdr=blob[blob.l];var t=parse_XLUnicodeStringNoCch(blob,blob.lens[i+1]-blob.lens[i]-1);texts+=t;if(texts.length>=(hdr?cchText:2*cchText))break}if(texts.length!==cchText&&texts.length!==cchText*2){throw"cchText: "+cchText+" != "+texts.length}blob.l=s+length;return{t:texts}}catch(e){blob.l=s+length;return{t:texts||""}}}var parse_HLink=function(blob,length){var ref=parse_Ref8U(blob,8);blob.l+=16;var hlink=parse_Hyperlink(blob,length-24);return[ref,hlink]};var parse_HLinkTooltip=function(blob,length){var end=blob.l+length;blob.read_shift(2);var ref=parse_Ref8U(blob,8);var wzTooltip=blob.read_shift((length-10)/2,"dbcs-cont");wzTooltip=wzTooltip.replace(chr0,"");return[ref,wzTooltip]};function parse_Country(blob,length){
+var o=[],d;d=blob.read_shift(2);o[0]=CountryEnum[d]||d;d=blob.read_shift(2);o[1]=CountryEnum[d]||d;return o}function parse_ClrtClient(blob,length){var ccv=blob.read_shift(2);var o=[];while(ccv-- >0)o.push(parse_LongRGB(blob,8));return o}function parse_Palette(blob,length){var ccv=blob.read_shift(2);var o=[];while(ccv-- >0)o.push(parse_LongRGB(blob,8));return o}function parse_XFCRC(blob,length){blob.l+=2;var o={cxfs:0,crc:0};o.cxfs=blob.read_shift(2);o.crc=blob.read_shift(4);return o}var parse_Style=parsenoop;var parse_StyleExt=parsenoop;var parse_ColInfo=parsenoop;var parse_Window2=parsenoop;var parse_Backup=parsebool;var parse_Blank=parse_XLSCell;var parse_BottomMargin=parse_Xnum;var parse_BuiltInFnGroupCount=parseuint16;var parse_CalcCount=parseuint16;var parse_CalcDelta=parse_Xnum;var parse_CalcIter=parsebool;var parse_CalcMode=parseuint16;var parse_CalcPrecision=parsebool;var parse_CalcRefMode=parsenoop2;var parse_CalcSaveRecalc=parsebool;var parse_CodePage=parseuint16;var parse_Compat12=parsebool;var parse_Date1904=parsebool;var parse_DefColWidth=parseuint16;var parse_DSF=parsenoop2;var parse_EntExU2=parsenoop2;var parse_EOF=parsenoop2;var parse_Excel9File=parsenoop2;var parse_FeatHdr=parsenoop2;var parse_FontX=parseuint16;var parse_Footer=parse_XLHeaderFooter;var parse_GridSet=parseuint16;var parse_HCenter=parsebool;var parse_Header=parse_XLHeaderFooter;var parse_HideObj=parse_HideObjEnum;var parse_InterfaceEnd=parsenoop2;var parse_LeftMargin=parse_Xnum;var parse_Mms=parsenoop2;var parse_ObjProtect=parsebool;var parse_Password=parseuint16;var parse_PrintGrid=parsebool;var parse_PrintRowCol=parsebool;var parse_PrintSize=parseuint16;var parse_Prot4Rev=parsebool;var parse_Prot4RevPass=parseuint16;var parse_Protect=parsebool;var parse_RefreshAll=parsebool;var parse_RightMargin=parse_Xnum;var parse_RRTabId=parseuint16a;var parse_ScenarioProtect=parsebool;var parse_Scl=parseuint16a;var parse_String=parse_XLUnicodeString;var parse_SxBool=parsebool;var parse_TopMargin=parse_Xnum;var parse_UsesELFs=parsebool;var parse_VCenter=parsebool;var parse_WinProtect=parsebool;var parse_WriteProtect=parsenoop;var parse_VerticalPageBreaks=parsenoop;var parse_HorizontalPageBreaks=parsenoop;var parse_Selection=parsenoop;var parse_Continue=parsenoop;var parse_Pane=parsenoop;var parse_Pls=parsenoop;var parse_DCon=parsenoop;var parse_DConRef=parsenoop;var parse_DConName=parsenoop;var parse_XCT=parsenoop;var parse_CRN=parsenoop;var parse_FileSharing=parsenoop;var parse_Uncalced=parsenoop;var parse_Template=parsenoop;var parse_Intl=parsenoop;var parse_WsBool=parsenoop;var parse_Sort=parsenoop;var parse_Sync=parsenoop;var parse_LPr=parsenoop;var parse_DxGCol=parsenoop;var parse_FnGroupName=parsenoop;var parse_FilterMode=parsenoop;var parse_AutoFilterInfo=parsenoop;var parse_AutoFilter=parsenoop;var parse_Setup=parsenoop;var parse_ScenMan=parsenoop;var parse_SCENARIO=parsenoop;var parse_SxView=parsenoop;var parse_Sxvd=parsenoop;var parse_SXVI=parsenoop;var parse_SxIvd=parsenoop;var parse_SXLI=parsenoop;var parse_SXPI=parsenoop;var parse_DocRoute=parsenoop;var parse_RecipName=parsenoop;var parse_MulBlank=parsenoop;var parse_SXDI=parsenoop;var parse_SXDB=parsenoop;var parse_SXFDB=parsenoop;var parse_SXDBB=parsenoop;var parse_SXNum=parsenoop;var parse_SxErr=parsenoop;var parse_SXInt=parsenoop;var parse_SXString=parsenoop;var parse_SXDtr=parsenoop;var parse_SxNil=parsenoop;var parse_SXTbl=parsenoop;var parse_SXTBRGIITM=parsenoop;var parse_SxTbpg=parsenoop;var parse_ObProj=parsenoop;var parse_SXStreamID=parsenoop;var parse_DBCell=parsenoop;var parse_SXRng=parsenoop;var parse_SxIsxoper=parsenoop;var parse_BookBool=parsenoop;var parse_DbOrParamQry=parsenoop;var parse_OleObjectSize=parsenoop;var parse_SXVS=parsenoop;var parse_BkHim=parsenoop;var parse_MsoDrawingGroup=parsenoop;var parse_MsoDrawing=parsenoop;var parse_MsoDrawingSelection=parsenoop;var parse_PhoneticInfo=parsenoop;var parse_SxRule=parsenoop;var parse_SXEx=parsenoop;var parse_SxFilt=parsenoop;var parse_SxDXF=parsenoop;var parse_SxItm=parsenoop;var parse_SxName=parsenoop;var parse_SxSelect=parsenoop;var parse_SXPair=parsenoop;var parse_SxFmla=parsenoop;var parse_SxFormat=parsenoop;var parse_SXVDEx=parsenoop;var parse_SXFormula=parsenoop;var parse_SXDBEx=parsenoop;var parse_RRDInsDel=parsenoop;var parse_RRDHead=parsenoop;var parse_RRDChgCell=parsenoop;var parse_RRDRenSheet=parsenoop;var parse_RRSort=parsenoop;var parse_RRDMove=parsenoop;var parse_RRFormat=parsenoop;var parse_RRAutoFmt=parsenoop;var parse_RRInsertSh=parsenoop;var parse_RRDMoveBegin=parsenoop;var parse_RRDMoveEnd=parsenoop;var parse_RRDInsDelBegin=parsenoop;var parse_RRDInsDelEnd=parsenoop;var parse_RRDConflict=parsenoop;var parse_RRDDefName=parsenoop;var parse_RRDRstEtxp=parsenoop;var parse_LRng=parsenoop;var parse_CUsr=parsenoop;var parse_CbUsr=parsenoop;var parse_UsrInfo=parsenoop;var parse_UsrExcl=parsenoop;var parse_FileLock=parsenoop;var parse_RRDInfo=parsenoop;var parse_BCUsrs=parsenoop;var parse_UsrChk=parsenoop;var parse_UserBView=parsenoop;var parse_UserSViewBegin=parsenoop;var parse_UserSViewEnd=parsenoop;var parse_RRDUserView=parsenoop;var parse_Qsi=parsenoop;var parse_CondFmt=parsenoop;var parse_CF=parsenoop;var parse_DVal=parsenoop;var parse_DConBin=parsenoop;var parse_Lel=parsenoop;var parse_XLSCodeName=parse_XLUnicodeString;var parse_SXFDBType=parsenoop;var parse_ObNoMacros=parsenoop;var parse_Dv=parsenoop;var parse_Index=parsenoop;var parse_Table=parsenoop;var parse_BigName=parsenoop;var parse_ContinueBigName=parsenoop;var parse_WebPub=parsenoop;var parse_QsiSXTag=parsenoop;var parse_DBQueryExt=parsenoop;var parse_ExtString=parsenoop;var parse_TxtQry=parsenoop;var parse_Qsir=parsenoop;var parse_Qsif=parsenoop;var parse_RRDTQSIF=parsenoop;var parse_OleDbConn=parsenoop;var parse_WOpt=parsenoop;var parse_SXViewEx=parsenoop;var parse_SXTH=parsenoop;var parse_SXPIEx=parsenoop;var parse_SXVDTEx=parsenoop;var parse_SXViewEx9=parsenoop;var parse_ContinueFrt=parsenoop;var parse_RealTimeData=parsenoop;var parse_ChartFrtInfo=parsenoop;var parse_FrtWrapper=parsenoop;var parse_StartBlock=parsenoop;var parse_EndBlock=parsenoop;var parse_StartObject=parsenoop;var parse_EndObject=parsenoop;var parse_CatLab=parsenoop;var parse_YMult=parsenoop;var parse_SXViewLink=parsenoop;var parse_PivotChartBits=parsenoop;var parse_FrtFontList=parsenoop;var parse_SheetExt=parsenoop;var parse_BookExt=parsenoop;var parse_SXAddl=parsenoop;var parse_CrErr=parsenoop;var parse_HFPicture=parsenoop;var parse_Feat=parsenoop;var parse_DataLabExt=parsenoop;var parse_DataLabExtContents=parsenoop;var parse_CellWatch=parsenoop;var parse_FeatHdr11=parsenoop;var parse_Feature11=parsenoop;var parse_DropDownObjIds=parsenoop;var parse_ContinueFrt11=parsenoop;var parse_DConn=parsenoop;var parse_List12=parsenoop;var parse_Feature12=parsenoop;var parse_CondFmt12=parsenoop;var parse_CF12=parsenoop;var parse_CFEx=parsenoop;var parse_AutoFilter12=parsenoop;var parse_ContinueFrt12=parsenoop;var parse_MDTInfo=parsenoop;var parse_MDXStr=parsenoop;var parse_MDXTuple=parsenoop;var parse_MDXSet=parsenoop;var parse_MDXProp=parsenoop;var parse_MDXKPI=parsenoop;var parse_MDB=parsenoop;var parse_PLV=parsenoop;var parse_DXF=parsenoop;var parse_TableStyles=parsenoop;var parse_TableStyle=parsenoop;var parse_TableStyleElement=parsenoop;var parse_NamePublish=parsenoop;var parse_NameCmt=parsenoop;var parse_SortData=parsenoop;var parse_GUIDTypeLib=parsenoop;var parse_FnGrp12=parsenoop;var parse_NameFnGrp12=parsenoop;var parse_HeaderFooter=parsenoop;var parse_CrtLayout12=parsenoop;var parse_CrtMlFrt=parsenoop;var parse_CrtMlFrtContinue=parsenoop;var parse_ShapePropsStream=parsenoop;var parse_TextPropsStream=parsenoop;var parse_RichTextStream=parsenoop;var parse_CrtLayout12A=parsenoop;var parse_Units=parsenoop;var parse_Chart=parsenoop;var parse_Series=parsenoop;var parse_DataFormat=parsenoop;var parse_LineFormat=parsenoop;var parse_MarkerFormat=parsenoop;var parse_AreaFormat=parsenoop;var parse_PieFormat=parsenoop;var parse_AttachedLabel=parsenoop;var parse_SeriesText=parsenoop;var parse_ChartFormat=parsenoop;var parse_Legend=parsenoop;var parse_SeriesList=parsenoop;var parse_Bar=parsenoop;var parse_Line=parsenoop;var parse_Pie=parsenoop;var parse_Area=parsenoop;var parse_Scatter=parsenoop;var parse_CrtLine=parsenoop;var parse_Axis=parsenoop;var parse_Tick=parsenoop;var parse_ValueRange=parsenoop;var parse_CatSerRange=parsenoop;var parse_AxisLine=parsenoop;var parse_CrtLink=parsenoop;var parse_DefaultText=parsenoop;var parse_Text=parsenoop;var parse_ObjectLink=parsenoop;var parse_Frame=parsenoop;var parse_Begin=parsenoop;var parse_End=parsenoop;var parse_PlotArea=parsenoop;var parse_Chart3d=parsenoop;var parse_PicF=parsenoop;var parse_DropBar=parsenoop;var parse_Radar=parsenoop;var parse_Surf=parsenoop;var parse_RadarArea=parsenoop;var parse_AxisParent=parsenoop;var parse_LegendException=parsenoop;var parse_ShtProps=parsenoop;var parse_SerToCrt=parsenoop;var parse_AxesUsed=parsenoop;var parse_SBaseRef=parsenoop;var parse_SerParent=parsenoop;var parse_SerAuxTrend=parsenoop;var parse_IFmtRecord=parsenoop;var parse_Pos=parsenoop;var parse_AlRuns=parsenoop;var parse_BRAI=parsenoop;var parse_SerAuxErrBar=parsenoop;var parse_SerFmt=parsenoop;var parse_Chart3DBarShape=parsenoop;var parse_Fbi=parsenoop;var parse_BopPop=parsenoop;var parse_AxcExt=parsenoop;var parse_Dat=parsenoop;var parse_PlotGrowth=parsenoop;var parse_SIIndex=parsenoop;var parse_GelFrame=parsenoop;var parse_BopPopCustom=parsenoop;var parse_Fbi2=parsenoop;function parse_BIFF5String(blob){var len=blob.read_shift(1);return blob.read_shift(len,"sbcs-cont")}function parse_BIFF2STR(blob,length,opts){var cell=parse_XLSCell(blob,6);++blob.l;var str=parse_XLUnicodeString2(blob,length-7,opts);cell.val=str;return cell}function parse_BIFF2NUM(blob,length,opts){var cell=parse_XLSCell(blob,6);++blob.l;var num=parse_Xnum(blob,8);cell.val=num;return cell}var CS2CP={0:1252,1:65001,2:65001,77:1e4,128:932,129:949,130:1361,134:936,136:950,161:1253,162:1254,163:1258,177:1255,178:1256,186:1257,204:1251,222:874,238:1250,255:1252,69:6969};var parse_rs=function parse_rs_factory(){var tregex=matchtag("t"),rpregex=matchtag("rPr"),rregex=/<r>/g,rend=/<\/r>/,nlregex=/\r\n/g;var parse_rpr=function parse_rpr(rpr,intro,outro){var font={},cp=65001;var m=rpr.match(tagregex),i=0;if(m)for(;i!=m.length;++i){var y=parsexmltag(m[i]);switch(y[0]){case"<condense":break;case"<extend":break;case"<shadow":case"<shadow/>":break;case"<charset":if(y.val=="1")break;cp=CS2CP[parseInt(y.val,10)];break;case"<outline":case"<outline/>":break;case"<rFont":font.name=y.val;break;case"<sz":font.sz=y.val;break;case"<strike":if(!y.val)break;case"<strike/>":font.strike=1;break;case"</strike>":break;case"<u":if(!y.val)break;case"<u/>":font.u=1;break;case"</u>":break;case"<b":if(!y.val)break;case"<b/>":font.b=1;break;case"</b>":break;case"<i":if(!y.val)break;case"<i/>":font.i=1;break;case"</i>":break;case"<color":if(y.rgb)font.color=y.rgb.substr(2,6);break;case"<family":font.family=y.val;break;case"<vertAlign":break;case"<scheme":break;default:if(y[0].charCodeAt(1)!==47)throw"Unrecognized rich format "+y[0]}}var style=[];if(font.b)style.push("font-weight: bold;");if(font.i)style.push("font-style: italic;");intro.push('<span style="'+style.join("")+'">');outro.push("</span>");return cp};function parse_r(r){var terms=[[],"",[]];var t=r.match(tregex),cp=65001;if(!isval(t))return"";terms[1]=t[1];var rpr=r.match(rpregex);if(isval(rpr))cp=parse_rpr(rpr[1],terms[0],terms[2]);return terms[0].join("")+terms[1].replace(nlregex,"<br/>")+terms[2].join("")}return function parse_rs(rs){return rs.replace(rregex,"").split(rend).map(parse_r).join("")}}();var sitregex=/<t[^>]*>([^<]*)<\/t>/g,sirregex=/<r>/;function parse_si(x,opts){var html=opts?opts.cellHTML:true;var z={};if(!x)return null;var y;if(x.charCodeAt(1)===116){z.t=utf8read(unescapexml(x.substr(x.indexOf(">")+1).split(/<\/t>/)[0]));z.r=x;if(html)z.h=z.t}else if(y=x.match(sirregex)){z.r=x;z.t=utf8read(unescapexml(x.match(sitregex).join("").replace(tagregex,"")));if(html)z.h=parse_rs(x)}return z}var sstr0=/<sst([^>]*)>([\s\S]*)<\/sst>/;var sstr1=/<(?:si|sstItem)>/g;var sstr2=/<\/(?:si|sstItem)>/;function parse_sst_xml(data,opts){var s=[],ss;var sst=data.match(sstr0);if(isval(sst)){ss=sst[2].replace(sstr1,"").split(sstr2);for(var i=0;i!=ss.length;++i){var o=parse_si(ss[i],opts);if(o!=null)s[s.length]=o}sst=parsexmltag(sst[1]);s.Count=sst.count;s.Unique=sst.uniqueCount}return s}RELS.SST="http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings";var straywsregex=/^\s|\s$|[\t\n\r]/;function write_sst_xml(sst,opts){if(!opts.bookSST)return"";var o=[XML_HEADER];o[o.length]=writextag("sst",null,{xmlns:XMLNS.main[0],count:sst.Count,uniqueCount:sst.Unique});for(var i=0;i!=sst.length;++i){if(sst[i]==null)continue;var s=sst[i];var sitag="<si>";if(s.r)sitag+=s.r;else{sitag+="<t";if(s.t.match(straywsregex))sitag+=' xml:space="preserve"';sitag+=">"+escapexml(s.t)+"</t>"}sitag+="</si>";o[o.length]=sitag}if(o.length>2){o[o.length]="</sst>";o[1]=o[1].replace("/>",">")}return o.join("")}function parse_BrtBeginSst(data,length){return[data.read_shift(4),data.read_shift(4)]}function parse_sst_bin(data,opts){var s=[];var pass=false;recordhopper(data,function hopper_sst(val,R,RT){switch(R.n){case"BrtBeginSst":s.Count=val[0];s.Unique=val[1];break;case"BrtSSTItem":s.push(val);break;case"BrtEndSst":return true;case"BrtFRTBegin":pass=true;break;case"BrtFRTEnd":pass=false;break;default:if(!pass||opts.WTF)throw new Error("Unexpected record "+RT+" "+R.n)}});return s}function write_BrtBeginSst(sst,o){if(!o)o=new_buf(8);o.write_shift(4,sst.Count);o.write_shift(4,sst.Unique);return o}var write_BrtSSTItem=write_RichStr;function write_sst_bin(sst,opts){var ba=buf_array();write_record(ba,"BrtBeginSst",write_BrtBeginSst(sst));for(var i=0;i<sst.length;++i)write_record(ba,"BrtSSTItem",write_BrtSSTItem(sst[i]));write_record(ba,"BrtEndSst");return ba.end()}function _JS2ANSI(str){if(typeof cptable!=="undefined")return cptable.utils.encode(1252,str);return str.split("").map(function(x){return x.charCodeAt(0)})}function parse_Version(blob,length){var o={};o.Major=blob.read_shift(2);o.Minor=blob.read_shift(2);return o}function parse_EncryptionHeader(blob,length){var o={};o.Flags=blob.read_shift(4);var tmp=blob.read_shift(4);if(tmp!==0)throw"Unrecognized SizeExtra: "+tmp;o.AlgID=blob.read_shift(4);switch(o.AlgID){case 0:case 26625:case 26126:case 26127:case 26128:break;default:throw"Unrecognized encryption algorithm: "+o.AlgID}parsenoop(blob,length-12);return o}function parse_EncryptionVerifier(blob,length){return parsenoop(blob,length)}function parse_RC4CryptoHeader(blob,length){var o={};var vers=o.EncryptionVersionInfo=parse_Version(blob,4);length-=4;if(vers.Minor!=2)throw"unrecognized minor version code: "+vers.Minor;if(vers.Major>4||vers.Major<2)throw"unrecognized major version code: "+vers.Major;o.Flags=blob.read_shift(4);length-=4;var sz=blob.read_shift(4);length-=4;o.EncryptionHeader=parse_EncryptionHeader(blob,sz);length-=sz;o.EncryptionVerifier=parse_EncryptionVerifier(blob,length);return o}function parse_RC4Header(blob,length){var o={};var vers=o.EncryptionVersionInfo=parse_Version(blob,4);length-=4;if(vers.Major!=1||vers.Minor!=1)throw"unrecognized version code "+vers.Major+" : "+vers.Minor;o.Salt=blob.read_shift(16);o.EncryptedVerifier=blob.read_shift(16);o.EncryptedVerifierHash=blob.read_shift(16);return o}function crypto_CreatePasswordVerifier_Method1(Password){var Verifier=0,PasswordArray;var PasswordDecoded=_JS2ANSI(Password);var len=PasswordDecoded.length+1,i,PasswordByte;var Intermediate1,Intermediate2,Intermediate3;PasswordArray=new_raw_buf(len);PasswordArray[0]=PasswordDecoded.length;for(i=1;i!=len;++i)PasswordArray[i]=PasswordDecoded[i-1];for(i=len-1;i>=0;--i){PasswordByte=PasswordArray[i];Intermediate1=(Verifier&16384)===0?0:1;Intermediate2=Verifier<<1&32767;Intermediate3=Intermediate1|Intermediate2;Verifier=Intermediate3^PasswordByte}return Verifier^52811}var crypto_CreateXorArray_Method1=function(){var PadArray=[187,255,255,186,255,255,185,128,0,190,15,0,191,15,0];var InitialCode=[57840,7439,52380,33984,4364,3600,61902,12606,6258,57657,54287,34041,10252,43370,20163];var XorMatrix=[44796,19929,39858,10053,20106,40212,10761,31585,63170,64933,60267,50935,40399,11199,17763,35526,1453,2906,5812,11624,23248,885,1770,3540,7080,14160,28320,56640,55369,41139,20807,41614,21821,43642,17621,28485,56970,44341,19019,38038,14605,29210,60195,50791,40175,10751,21502,43004,24537,18387,36774,3949,7898,15796,31592,63184,47201,24803,49606,37805,14203,28406,56812,17824,35648,1697,3394,6788,13576,27152,43601,17539,35078,557,1114,2228,4456,30388,60776,51953,34243,7079,14158,28316,14128,28256,56512,43425,17251,34502,7597,13105,26210,52420,35241,883,1766,3532,4129,8258,16516,33032,4657,9314,18628];var Ror=function(Byte){return(Byte/2|Byte*128)&255};var XorRor=function(byte1,byte2){return Ror(byte1^byte2)};var CreateXorKey_Method1=function(Password){var XorKey=InitialCode[Password.length-1];var CurrentElement=104;for(var i=Password.length-1;i>=0;--i){var Char=Password[i];for(var j=0;j!=7;++j){if(Char&64)XorKey^=XorMatrix[CurrentElement];Char*=2;--CurrentElement}}return XorKey};return function(password){var Password=_JS2ANSI(password);var XorKey=CreateXorKey_Method1(Password);var Index=Password.length;var ObfuscationArray=new_raw_buf(16);for(var i=0;i!=16;++i)ObfuscationArray[i]=0;var Temp,PasswordLastChar,PadIndex;if((Index&1)===1){Temp=XorKey>>8;ObfuscationArray[Index]=XorRor(PadArray[0],Temp);--Index;Temp=XorKey&255;PasswordLastChar=Password[Password.length-1];ObfuscationArray[Index]=XorRor(PasswordLastChar,Temp)}while(Index>0){--Index;Temp=XorKey>>8;ObfuscationArray[Index]=XorRor(Password[Index],Temp);--Index;Temp=XorKey&255;ObfuscationArray[Index]=XorRor(Password[Index],Temp)}Index=15;PadIndex=15-Password.length;while(PadIndex>0){Temp=XorKey>>8;ObfuscationArray[Index]=XorRor(PadArray[PadIndex],Temp);--Index;--PadIndex;Temp=XorKey&255;ObfuscationArray[Index]=XorRor(Password[Index],Temp);--Index;--PadIndex}return ObfuscationArray}}();var crypto_DecryptData_Method1=function(password,Data,XorArrayIndex,XorArray,O){if(!O)O=Data;if(!XorArray)XorArray=crypto_CreateXorArray_Method1(password);var Index,Value;for(Index=0;Index!=Data.length;++Index){Value=Data[Index];Value^=XorArray[XorArrayIndex];Value=(Value>>5|Value<<3)&255;O[Index]=Value;++XorArrayIndex}return[O,XorArrayIndex,XorArray]};var crypto_MakeXorDecryptor=function(password){var XorArrayIndex=0,XorArray=crypto_CreateXorArray_Method1(password);return function(Data){var O=crypto_DecryptData_Method1(null,Data,XorArrayIndex,XorArray);XorArrayIndex=O[1];return O[0]}};function parse_XORObfuscation(blob,length,opts,out){var o={key:parseuint16(blob),verificationBytes:parseuint16(blob)};if(opts.password)o.verifier=crypto_CreatePasswordVerifier_Method1(opts.password);out.valid=o.verificationBytes===o.verifier;if(out.valid)out.insitu_decrypt=crypto_MakeXorDecryptor(opts.password);return o}function parse_FilePassHeader(blob,length,oo){var o=oo||{};o.Info=blob.read_shift(2);blob.l-=2;if(o.Info===1)o.Data=parse_RC4Header(blob,length);else o.Data=parse_RC4CryptoHeader(blob,length);return o}function parse_FilePass(blob,length,opts){var o={Type:blob.read_shift(2)};if(o.Type)parse_FilePassHeader(blob,length-2,o);else parse_XORObfuscation(blob,length-2,opts,o);return o}function hex2RGB(h){var o=h.substr(h[0]==="#"?1:0,6);return[parseInt(o.substr(0,2),16),parseInt(o.substr(2,2),16),parseInt(o.substr(4,2),16)]}function rgb2Hex(rgb){for(var i=0,o=1;i!=3;++i)o=o*256+(rgb[i]>255?255:rgb[i]<0?0:rgb[i]);return o.toString(16).toUpperCase().substr(1)}function rgb2HSL(rgb){var R=rgb[0]/255,G=rgb[1]/255,B=rgb[2]/255;var M=Math.max(R,G,B),m=Math.min(R,G,B),C=M-m;if(C===0)return[0,0,R];var H6=0,S=0,L2=M+m;S=C/(L2>1?2-L2:L2);switch(M){case R:H6=((G-B)/C+6)%6;break;case G:H6=(B-R)/C+2;break;case B:H6=(R-G)/C+4;break}return[H6/6,S,L2/2]}function hsl2RGB(hsl){var H=hsl[0],S=hsl[1],L=hsl[2];var C=S*2*(L<.5?L:1-L),m=L-C/2;var rgb=[m,m,m],h6=6*H;var X;if(S!==0)switch(h6|0){case 0:case 6:X=C*h6;rgb[0]+=C;rgb[1]+=X;break;case 1:X=C*(2-h6);rgb[0]+=X;rgb[1]+=C;break;case 2:X=C*(h6-2);rgb[1]+=C;rgb[2]+=X;break;case 3:X=C*(4-h6);rgb[1]+=X;rgb[2]+=C;break;case 4:X=C*(h6-4);rgb[2]+=C;rgb[0]+=X;break;case 5:X=C*(6-h6);rgb[2]+=X;rgb[0]+=C;break}for(var i=0;i!=3;++i)rgb[i]=Math.round(rgb[i]*255);return rgb}function rgb_tint(hex,tint){if(tint==0)return hex;var hsl=rgb2HSL(hex2RGB(hex));if(tint<0)hsl[2]=hsl[2]*(1+tint);else hsl[2]=1-(1-hsl[2])*(1-tint);var rev=rgb2Hex(hsl2RGB(hsl));return rev}var DEF_MDW=7,MAX_MDW=15,MIN_MDW=1,MDW=DEF_MDW;function width2px(width){return(width+(128/MDW|0)/256)*MDW|0}function px2char(px){return((px-5)/MDW*100+.5|0)/100}function char2width(chr){return((chr*MDW+5)/MDW*256|0)/256}function cycle_width(collw){return char2width(px2char(width2px(collw)))}function find_mdw(collw,coll){if(cycle_width(collw)!=collw){for(MDW=DEF_MDW;MDW>MIN_MDW;--MDW)if(cycle_width(collw)===collw)break;if(MDW===MIN_MDW)for(MDW=DEF_MDW+1;MDW<MAX_MDW;++MDW)if(cycle_width(collw)===collw)break;if(MDW===MAX_MDW)MDW=DEF_MDW}}var XLMLPatternTypeMap={None:"none",Solid:"solid",Gray50:"mediumGray",Gray75:"darkGray",Gray25:"lightGray",HorzStripe:"darkHorizontal",VertStripe:"darkVertical",ReverseDiagStripe:"darkDown",DiagStripe:"darkUp",DiagCross:"darkGrid",ThickDiagCross:"darkTrellis",ThinHorzStripe:"lightHorizontal",ThinVertStripe:"lightVertical",ThinReverseDiagStripe:"lightDown",ThinHorzCross:"lightGrid"};var styles={};var themes={};function parse_fills(t,opts){styles.Fills=[];var fill={};t[0].match(tagregex).forEach(function(x){var y=parsexmltag(x);switch(y[0]){case"<fills":case"<fills>":case"</fills>":break;case"<fill>":break;case"</fill>":styles.Fills.push(fill);fill={};break;case"<patternFill":if(y.patternType)fill.patternType=y.patternType;break;case"<patternFill/>":case"</patternFill>":break;case"<bgColor":if(!fill.bgColor)fill.bgColor={};if(y.indexed)fill.bgColor.indexed=parseInt(y.indexed,10);if(y.theme)fill.bgColor.theme=parseInt(y.theme,10);if(y.tint)fill.bgColor.tint=parseFloat(y.tint);if(y.theme&&themes.themeElements&&themes.themeElements.clrScheme){fill.bgColor.rgb=rgb_tint(themes.themeElements.clrScheme[fill.bgColor.theme].rgb,fill.bgColor.tint||0);if(opts.WTF)fill.bgColor.raw_rgb=rgb_tint(themes.themeElements.clrScheme[fill.bgColor.theme].rgb,0)}if(y.rgb)fill.bgColor.rgb=y.rgb;break;case"<bgColor/>":case"</bgColor>":break;case"<fgColor":if(!fill.fgColor)fill.fgColor={};if(y.theme)fill.fgColor.theme=parseInt(y.theme,10);if(y.tint)fill.fgColor.tint=parseFloat(y.tint);if(y.theme&&themes.themeElements&&themes.themeElements.clrScheme){fill.fgColor.rgb=rgb_tint(themes.themeElements.clrScheme[fill.fgColor.theme].rgb,fill.fgColor.tint||0);if(opts.WTF)fill.fgColor.raw_rgb=rgb_tint(themes.themeElements.clrScheme[fill.fgColor.theme].rgb,0)}if(y.rgb)fill.fgColor.rgb=y.rgb;break;case"<fgColor/>":case"</fgColor>":break;default:if(opts.WTF)throw"unrecognized "+y[0]+" in fills"}})}function parse_fonts(t,opts){styles.Fonts=[];var font={};t[0].match(tagregex).forEach(function(x){var y=parsexmltag(x);switch(y[0]){case"<fonts":case"<fonts>":case"</fonts>":break;case"<font":break;case"</font>":styles.Fonts.push(font);font={};break;case"<name":if(y.val)font.name=y.val;break;case"<name/>":case"</name>":break;case"<b/>":font.bold=true;break;case"<u/>":font.underline=true;break;case"<i/>":font.italic=true;break;case"<strike/>":font.strike=true;break;case"<outline/>":font.outline=true;break;case"<shadow/>":font.shadow=true;break;case"<sz":if(y.val)font.sz=y.val;break;case"<sz/>":case"</sz>":break;case"<vertAlign":if(y.val)font.vertAlign=y.val;break;case"<vertAlign/>":case"</vertAlign>":break;case"<color":if(!font.color)font.color={};if(y.theme)font.color.theme=y.theme;if(y.tint)font.color.tint=y.tint;if(y.theme&&themes.themeElements&&themes.themeElements.clrScheme){font.color.rgb=rgb_tint(themes.themeElements.clrScheme[font.color.theme].rgb,font.color.tint||0)}if(y.rgb)font.color.rgb=y.rgb;break;case"<color/>":case"</color>":break}})}function parse_borders(t,opts){styles.Borders=[];var border={},sub_border={};t[0].match(tagregex).forEach(function(x){var y=parsexmltag(x);switch(y[0]){case"<borders":case"<borders>":case"</borders>":break;case"<border":case"<border>":border={};if(y.diagonalUp){border.diagonalUp=y.diagonalUp}if(y.diagonalDown){border.diagonalDown=y.diagonalDown}styles.Borders.push(border);break;break;case"</border>":break;case"<left":sub_border=border.left={};if(y.style){sub_border.style=y.style}break;case"<right":sub_border=border.right={};if(y.style){sub_border.style=y.style}break;case"<top":sub_border=border.top={};if(y.style){sub_border.style=y.style}break;case"<bottom":sub_border=border.bottom={};if(y.style){sub_border.style=y.style}break;case"<diagonal":sub_border=border.diagonal={};if(y.style){sub_border.style=y.style}break;case"<color":sub_border.color={};if(y.theme)sub_border.color.theme=y.theme;if(y.theme&&themes.themeElements&&themes.themeElements.clrScheme){sub_border.color.rgb=rgb_tint(themes.themeElements.clrScheme[sub_border.color.theme].rgb,sub_border.color.tint||0)}if(y.tint)sub_border.color.tint=y.tint;if(y.rgb)sub_border.color.rgb=y.rgb;if(y.auto)sub_border.color.auto=y.auto;break;case"<name/>":case"</name>":break;default:break}})}function parse_numFmts(t,opts){styles.NumberFmt=[];var k=keys(SSF._table);for(var i=0;i<k.length;++i)styles.NumberFmt[k[i]]=SSF._table[k[i]];var m=t[0].match(tagregex);for(i=0;i<m.length;++i){var y=parsexmltag(m[i]);switch(y[0]){case"<numFmts":case"</numFmts>":case"<numFmts/>":case"<numFmts>":break;case"<numFmt":{var f=unescapexml(utf8read(y.formatCode)),j=parseInt(y.numFmtId,10);styles.NumberFmt[j]=f;if(j>0)SSF.load(f,j)}break;default:if(opts.WTF)throw"unrecognized "+y[0]+" in numFmts"}}}function write_numFmts(NF,opts){var o=["<numFmts>"];[[5,8],[23,26],[41,44],[63,66],[164,392]].forEach(function(r){for(var i=r[0];i<=r[1];++i)if(NF[i]!==undefined)o[o.length]=writextag("numFmt",null,{numFmtId:i,formatCode:escapexml(NF[i])})});if(o.length===1)return"";o[o.length]="</numFmts>";o[0]=writextag("numFmts",null,{count:o.length-2}).replace("/>",">");return o.join("")}function parse_cellXfs(t,opts){styles.CellXf=[];var xf;t[0].match(tagregex).forEach(function(x){var y=parsexmltag(x);switch(y[0]){case"<cellXfs":case"<cellXfs>":case"<cellXfs/>":case"</cellXfs>":break;case"<xf":xf=y;delete xf[0];delete y[0];if(xf.numFmtId)xf.numFmtId=parseInt(xf.numFmtId,10);if(xf.fillId)xf.fillId=parseInt(xf.fillId,10);styles.CellXf.push(xf);break;case"</xf>":break;case"<alignment":case"<alignment/>":var alignment={};if(y.vertical){alignment.vertical=y.vertical}if(y.horizontal){alignment.horizontal=y.horizontal}if(y.textRotation!=undefined){alignment.textRotation=y.textRotation}if(y.indent){alignment.indent=y.indent}if(y.wrapText){alignment.wrapText=y.wrapText}xf.alignment=alignment;break;case"<protection":case"</protection>":case"<protection/>":break;case"<extLst":case"</extLst>":break;case"<ext":break;default:if(opts.WTF)throw"unrecognized "+y[0]+" in cellXfs"}})}function write_cellXfs(cellXfs){var o=[];o[o.length]=writextag("cellXfs",null);cellXfs.forEach(function(c){o[o.length]=writextag("xf",null,c)});o[o.length]="</cellXfs>";if(o.length===2)return"";o[0]=writextag("cellXfs",null,{count:o.length-2}).replace("/>",">");return o.join("")}var parse_sty_xml=function make_pstyx(){var numFmtRegex=/<numFmts([^>]*)>.*<\/numFmts>/;var cellXfRegex=/<cellXfs([^>]*)>.*<\/cellXfs>/;var fillsRegex=/<fills([^>]*)>.*<\/fills>/;var bordersRegex=/<borders([^>]*)>.*<\/borders>/;return function parse_sty_xml(data,opts){var t;if(t=data.match(numFmtRegex))parse_numFmts(t,opts);if(t=data.match(/<fonts([^>]*)>.*<\/fonts>/))parse_fonts(t,opts);if(t=data.match(fillsRegex))parse_fills(t,opts);if(t=data.match(bordersRegex))parse_borders(t,opts);if(t=data.match(cellXfRegex))parse_cellXfs(t,opts);return styles}}();var STYLES_XML_ROOT=writextag("styleSheet",null,{xmlns:XMLNS.main[0],"xmlns:vt":XMLNS.vt});RELS.STY="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles";function write_sty_xml(wb,opts){if(typeof style_builder!="undefined"&&typeof"require"!="undefined"){return style_builder.toXml()}var o=[XML_HEADER,STYLES_XML_ROOT],w;if((w=write_numFmts(wb.SSF))!=null)o[o.length]=w;o[o.length]='<fonts count="1"><font><sz val="12"/><color theme="1"/><name val="Calibri"/><family val="2"/><scheme val="minor"/></font></fonts>';o[o.length]='<fills count="2"><fill><patternFill patternType="none"/></fill><fill><patternFill patternType="gray125"/></fill></fills>';o[o.length]='<borders count="1"><border><left/><right/><top/><bottom/><diagonal/></border></borders>';o[o.length]='<cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0"/></cellStyleXfs>';if(w=write_cellXfs(opts.cellXfs))o[o.length]=w;o[o.length]='<cellStyles count="1"><cellStyle name="Normal" xfId="0" builtinId="0"/></cellStyles>';o[o.length]='<dxfs count="0"/>';o[o.length]='<tableStyles count="0" defaultTableStyle="TableStyleMedium9" defaultPivotStyle="PivotStyleMedium4"/>';if(o.length>2){o[o.length]="</styleSheet>";o[1]=o[1].replace("/>",">")}return o.join("")}function parse_BrtFmt(data,length){var ifmt=data.read_shift(2);var stFmtCode=parse_XLWideString(data,length-2);return[ifmt,stFmtCode]}function parse_BrtFont(data,length){var out={flags:{}};out.dyHeight=data.read_shift(2);out.grbit=parse_FontFlags(data,2);out.bls=data.read_shift(2);out.sss=data.read_shift(2);out.uls=data.read_shift(1);out.bFamily=data.read_shift(1);out.bCharSet=data.read_shift(1);data.l++;out.brtColor=parse_BrtColor(data,8);out.bFontScheme=data.read_shift(1);out.name=parse_XLWideString(data,length-21);out.flags.Bold=out.bls===700;out.flags.Italic=out.grbit.fItalic;out.flags.Strikeout=out.grbit.fStrikeout;out.flags.Outline=out.grbit.fOutline;out.flags.Shadow=out.grbit.fShadow;out.flags.Condense=out.grbit.fCondense;out.flags.Extend=out.grbit.fExtend;out.flags.Sub=out.sss&2;out.flags.Sup=out.sss&1;return out}function parse_BrtXF(data,length){var ixfeParent=data.read_shift(2);var ifmt=data.read_shift(2);parsenoop(data,length-4);return{ixfe:ixfeParent,ifmt:ifmt}}function parse_sty_bin(data,opts){styles.NumberFmt=[];for(var y in SSF._table)styles.NumberFmt[y]=SSF._table[y];styles.CellXf=[];var state="";var pass=false;recordhopper(data,function hopper_sty(val,R,RT){switch(R.n){case"BrtFmt":styles.NumberFmt[val[0]]=val[1];SSF.load(val[1],val[0]);break;case"BrtFont":break;case"BrtKnownFonts":break;case"BrtFill":break;case"BrtBorder":break;case"BrtXF":if(state==="CELLXFS"){styles.CellXf.push(val)}break;case"BrtStyle":break;case"BrtDXF":break;case"BrtMRUColor":break;case"BrtIndexedColor":break;case"BrtBeginStyleSheet":break;case"BrtEndStyleSheet":break;case"BrtBeginTableStyle":break;case"BrtTableStyleElement":break;case"BrtEndTableStyle":break;case"BrtBeginFmts":state="FMTS";break;case"BrtEndFmts":state="";break;case"BrtBeginFonts":state="FONTS";break;case"BrtEndFonts":state="";break;case"BrtACBegin":state="ACFONTS";break;case"BrtACEnd":state="";break;case"BrtBeginFills":state="FILLS";break;case"BrtEndFills":state="";break;case"BrtBeginBorders":state="BORDERS";break;case"BrtEndBorders":state="";break;case"BrtBeginCellStyleXFs":state="CELLSTYLEXFS";break;case"BrtEndCellStyleXFs":state="";break;case"BrtBeginCellXFs":state="CELLXFS";break;case"BrtEndCellXFs":state="";break;case"BrtBeginStyles":state="STYLES";break;case"BrtEndStyles":state="";break;case"BrtBeginDXFs":state="DXFS";break;case"BrtEndDXFs":state="";break;case"BrtBeginTableStyles":state="TABLESTYLES";break;case"BrtEndTableStyles":state="";break;case"BrtBeginColorPalette":state="COLORPALETTE";break;case"BrtEndColorPalette":state="";break;case"BrtBeginIndexedColors":state="INDEXEDCOLORS";break;case"BrtEndIndexedColors":state="";break;case"BrtBeginMRUColors":state="MRUCOLORS";break;case"BrtEndMRUColors":state="";break;case"BrtFRTBegin":
+pass=true;break;case"BrtFRTEnd":pass=false;break;case"BrtBeginStyleSheetExt14":break;case"BrtBeginSlicerStyles":break;case"BrtEndSlicerStyles":break;case"BrtBeginTimelineStylesheetExt15":break;case"BrtEndTimelineStylesheetExt15":break;case"BrtBeginTimelineStyles":break;case"BrtEndTimelineStyles":break;case"BrtEndStyleSheetExt14":break;default:if(!pass||opts.WTF)throw new Error("Unexpected record "+RT+" "+R.n)}});return styles}function write_sty_bin(data,opts){var ba=buf_array();write_record(ba,"BrtBeginStyleSheet");write_record(ba,"BrtEndStyleSheet");return ba.end()}RELS.THEME="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme";function parse_clrScheme(t,opts){themes.themeElements.clrScheme=[];var color={};t[0].match(tagregex).forEach(function(x){var y=parsexmltag(x);switch(y[0]){case"<a:clrScheme":case"</a:clrScheme>":break;case"<a:srgbClr":color.rgb=y.val;break;case"<a:sysClr":color.rgb=y.lastClr;break;case"<a:dk1>":case"</a:dk1>":case"<a:dk2>":case"</a:dk2>":case"<a:lt1>":case"</a:lt1>":case"<a:lt2>":case"</a:lt2>":case"<a:accent1>":case"</a:accent1>":case"<a:accent2>":case"</a:accent2>":case"<a:accent3>":case"</a:accent3>":case"<a:accent4>":case"</a:accent4>":case"<a:accent5>":case"</a:accent5>":case"<a:accent6>":case"</a:accent6>":case"<a:hlink>":case"</a:hlink>":case"<a:folHlink>":case"</a:folHlink>":if(y[0][1]==="/"){themes.themeElements.clrScheme.push(color);color={}}else{color.name=y[0].substring(3,y[0].length-1)}break;default:if(opts.WTF)throw"unrecognized "+y[0]+" in clrScheme"}})}function parse_fontScheme(t,opts){}function parse_fmtScheme(t,opts){}var clrsregex=/<a:clrScheme([^>]*)>[^\u2603]*<\/a:clrScheme>/;var fntsregex=/<a:fontScheme([^>]*)>[^\u2603]*<\/a:fontScheme>/;var fmtsregex=/<a:fmtScheme([^>]*)>[^\u2603]*<\/a:fmtScheme>/;function parse_themeElements(data,opts){themes.themeElements={};var t;[["clrScheme",clrsregex,parse_clrScheme],["fontScheme",fntsregex,parse_fontScheme],["fmtScheme",fmtsregex,parse_fmtScheme]].forEach(function(m){if(!(t=data.match(m[1])))throw m[0]+" not found in themeElements";m[2](t,opts)})}var themeltregex=/<a:themeElements([^>]*)>[^\u2603]*<\/a:themeElements>/;function parse_theme_xml(data,opts){if(!data||data.length===0)return themes;var t;if(!(t=data.match(themeltregex)))throw"themeElements not found in theme";parse_themeElements(t[0],opts);return themes}function write_theme(opts){if(opts.themeXml){return opts.themeXml}return'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n<a:theme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="Office Theme"><a:themeElements><a:clrScheme name="Office"><a:dk1><a:sysClr val="windowText" lastClr="000000"/></a:dk1><a:lt1><a:sysClr val="window" lastClr="FFFFFF"/></a:lt1><a:dk2><a:srgbClr val="1F497D"/></a:dk2><a:lt2><a:srgbClr val="EEECE1"/></a:lt2><a:accent1><a:srgbClr val="4F81BD"/></a:accent1><a:accent2><a:srgbClr val="C0504D"/></a:accent2><a:accent3><a:srgbClr val="9BBB59"/></a:accent3><a:accent4><a:srgbClr val="8064A2"/></a:accent4><a:accent5><a:srgbClr val="4BACC6"/></a:accent5><a:accent6><a:srgbClr val="F79646"/></a:accent6><a:hlink><a:srgbClr val="0000FF"/></a:hlink><a:folHlink><a:srgbClr val="800080"/></a:folHlink></a:clrScheme><a:fontScheme name="Office"><a:majorFont><a:latin typeface="Cambria"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Jpan" typeface="锛汲 锛般偞銈枫儍銈�"/><a:font script="Hang" typeface="毵戩潃 瓿犽敃"/><a:font script="Hans" typeface="瀹嬩綋"/><a:font script="Hant" typeface="鏂扮窗鏄庨珨"/><a:font script="Arab" typeface="Times New Roman"/><a:font script="Hebr" typeface="Times New Roman"/><a:font script="Thai" typeface="Tahoma"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="MoolBoran"/><a:font script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Times New Roman"/><a:font script="Uigh" typeface="Microsoft Uighur"/><a:font script="Geor" typeface="Sylfaen"/></a:majorFont><a:minorFont><a:latin typeface="Calibri"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Jpan" typeface="锛汲 锛般偞銈枫儍銈�"/><a:font script="Hang" typeface="毵戩潃 瓿犽敃"/><a:font script="Hans" typeface="瀹嬩綋"/><a:font script="Hant" typeface="鏂扮窗鏄庨珨"/><a:font script="Arab" typeface="Arial"/><a:font script="Hebr" typeface="Arial"/><a:font script="Thai" typeface="Tahoma"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="DaunPenh"/><a:font script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Arial"/><a:font script="Uigh" typeface="Microsoft Uighur"/><a:font script="Geor" typeface="Sylfaen"/></a:minorFont></a:fontScheme><a:fmtScheme name="Office"><a:fillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="50000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="35000"><a:schemeClr val="phClr"><a:tint val="37000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:tint val="15000"/><a:satMod val="350000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="16200000" scaled="1"/></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="100000"/><a:shade val="100000"/><a:satMod val="130000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:tint val="50000"/><a:shade val="100000"/><a:satMod val="350000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="16200000" scaled="0"/></a:gradFill></a:fillStyleLst><a:lnStyleLst><a:ln w="9525" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"><a:shade val="95000"/><a:satMod val="105000"/></a:schemeClr></a:solidFill><a:prstDash val="solid"/></a:ln><a:ln w="25400" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln><a:ln w="38100" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln></a:lnStyleLst><a:effectStyleLst><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="20000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="38000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw></a:effectLst><a:scene3d><a:camera prst="orthographicFront"><a:rot lat="0" lon="0" rev="0"/></a:camera><a:lightRig rig="threePt" dir="t"><a:rot lat="0" lon="0" rev="1200000"/></a:lightRig></a:scene3d><a:sp3d><a:bevelT w="63500" h="25400"/></a:sp3d></a:effectStyle></a:effectStyleLst><a:bgFillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="40000"/><a:satMod val="350000"/></a:schemeClr></a:gs><a:gs pos="40000"><a:schemeClr val="phClr"><a:tint val="45000"/><a:shade val="99000"/><a:satMod val="350000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="20000"/><a:satMod val="255000"/></a:schemeClr></a:gs></a:gsLst><a:path path="circle"><a:fillToRect l="50000" t="-80000" r="50000" b="180000"/></a:path></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="80000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="30000"/><a:satMod val="200000"/></a:schemeClr></a:gs></a:gsLst><a:path path="circle"><a:fillToRect l="50000" t="50000" r="50000" b="50000"/></a:path></a:gradFill></a:bgFillStyleLst></a:fmtScheme></a:themeElements><a:objectDefaults><a:spDef><a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx="1"><a:schemeClr val="accent1"/></a:lnRef><a:fillRef idx="3"><a:schemeClr val="accent1"/></a:fillRef><a:effectRef idx="2"><a:schemeClr val="accent1"/></a:effectRef><a:fontRef idx="minor"><a:schemeClr val="lt1"/></a:fontRef></a:style></a:spDef><a:lnDef><a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx="2"><a:schemeClr val="accent1"/></a:lnRef><a:fillRef idx="0"><a:schemeClr val="accent1"/></a:fillRef><a:effectRef idx="1"><a:schemeClr val="accent1"/></a:effectRef><a:fontRef idx="minor"><a:schemeClr val="tx1"/></a:fontRef></a:style></a:lnDef></a:objectDefaults><a:extraClrSchemeLst/></a:theme>'}function parse_Theme(blob,length){var dwThemeVersion=blob.read_shift(4);if(dwThemeVersion===124226)return;blob.l+=length-4}function parse_ColorTheme(blob,length){return blob.read_shift(4)}function parse_FullColorExt(blob,length){var o={};o.xclrType=blob.read_shift(2);o.nTintShade=blob.read_shift(2);switch(o.xclrType){case 0:blob.l+=4;break;case 1:o.xclrValue=parse_IcvXF(blob,4);break;case 2:o.xclrValue=parse_LongRGBA(blob,4);break;case 3:o.xclrValue=parse_ColorTheme(blob,4);break;case 4:blob.l+=4;break}blob.l+=8;return o}function parse_IcvXF(blob,length){return parsenoop(blob,length)}function parse_XFExtGradient(blob,length){return parsenoop(blob,length)}function parse_ExtProp(blob,length){var extType=blob.read_shift(2);var cb=blob.read_shift(2);var o=[extType];switch(extType){case 4:case 5:case 7:case 8:case 9:case 10:case 11:case 13:o[1]=parse_FullColorExt(blob,cb);break;case 6:o[1]=parse_XFExtGradient(blob,cb);break;case 14:case 15:o[1]=blob.read_shift(cb===5?1:2);break;default:throw new Error("Unrecognized ExtProp type: "+extType+" "+cb)}return o}function parse_XFExt(blob,length){var end=blob.l+length;blob.l+=2;var ixfe=blob.read_shift(2);blob.l+=2;var cexts=blob.read_shift(2);var ext=[];while(cexts-- >0)ext.push(parse_ExtProp(blob,end-blob.l));return{ixfe:ixfe,ext:ext}}function update_xfext(xf,xfext){xfext.forEach(function(xfe){switch(xfe[0]){case 4:break;case 5:break;case 7:case 8:case 9:case 10:break;case 13:break;case 14:break;default:throw"bafuq"+xfe[0].toString(16)}})}function parse_cc_xml(data,opts){var d=[];var l=0,i=1;(data.match(tagregex)||[]).forEach(function(x){var y=parsexmltag(x);switch(y[0]){case"<?xml":break;case"<calcChain":case"<calcChain>":case"</calcChain>":break;case"<c":delete y[0];if(y.i)i=y.i;else y.i=i;d.push(y);break}});return d}function write_cc_xml(data,opts){}function parse_BrtCalcChainItem$(data,length){var out={};out.i=data.read_shift(4);var cell={};cell.r=data.read_shift(4);cell.c=data.read_shift(4);out.r=encode_cell(cell);var flags=data.read_shift(1);if(flags&2)out.l="1";if(flags&8)out.a="1";return out}function parse_cc_bin(data,opts){var out=[];var pass=false;recordhopper(data,function hopper_cc(val,R,RT){switch(R.n){case"BrtCalcChainItem$":out.push(val);break;case"BrtBeginCalcChain$":break;case"BrtEndCalcChain$":break;default:if(!pass||opts.WTF)throw new Error("Unexpected record "+RT+" "+R.n)}});return out}function write_cc_bin(data,opts){}function parse_comments(zip,dirComments,sheets,sheetRels,opts){for(var i=0;i!=dirComments.length;++i){var canonicalpath=dirComments[i];var comments=parse_cmnt(getzipdata(zip,canonicalpath.replace(/^\//,""),true),canonicalpath,opts);if(!comments||!comments.length)continue;var sheetNames=keys(sheets);for(var j=0;j!=sheetNames.length;++j){var sheetName=sheetNames[j];var rels=sheetRels[sheetName];if(rels){var rel=rels[canonicalpath];if(rel)insertCommentsIntoSheet(sheetName,sheets[sheetName],comments)}}}}function insertCommentsIntoSheet(sheetName,sheet,comments){comments.forEach(function(comment){var cell=sheet[comment.ref];if(!cell){cell={};sheet[comment.ref]=cell;var range=safe_decode_range(sheet["!ref"]||"BDWGO1000001:A1");var thisCell=decode_cell(comment.ref);if(range.s.r>thisCell.r)range.s.r=thisCell.r;if(range.e.r<thisCell.r)range.e.r=thisCell.r;if(range.s.c>thisCell.c)range.s.c=thisCell.c;if(range.e.c<thisCell.c)range.e.c=thisCell.c;var encoded=encode_range(range);if(encoded!==sheet["!ref"])sheet["!ref"]=encoded}if(!cell.c)cell.c=[];var o={a:comment.author,t:comment.t,r:comment.r};if(comment.h)o.h=comment.h;cell.c.push(o)})}function parse_comments_xml(data,opts){if(data.match(/<(?:\w+:)?comments *\/>/))return[];var authors=[];var commentList=[];data.match(/<(?:\w+:)?authors>([^\u2603]*)<\/(?:\w+:)?authors>/)[1].split(/<\/\w*:?author>/).forEach(function(x){if(x===""||x.trim()==="")return;authors.push(x.match(/<(?:\w+:)?author[^>]*>(.*)/)[1])});(data.match(/<(?:\w+:)?commentList>([^\u2603]*)<\/(?:\w+:)?commentList>/)||["",""])[1].split(/<\/\w*:?comment>/).forEach(function(x,index){if(x===""||x.trim()==="")return;var y=parsexmltag(x.match(/<(?:\w+:)?comment[^>]*>/)[0]);var comment={author:y.authorId&&authors[y.authorId]?authors[y.authorId]:undefined,ref:y.ref,guid:y.guid};var cell=decode_cell(y.ref);if(opts.sheetRows&&opts.sheetRows<=cell.r)return;var textMatch=x.match(/<text>([^\u2603]*)<\/text>/);if(!textMatch||!textMatch[1])return;var rt=parse_si(textMatch[1]);comment.r=rt.r;comment.t=rt.t;if(opts.cellHTML)comment.h=rt.h;commentList.push(comment)});return commentList}function write_comments_xml(data,opts){}function parse_BrtBeginComment(data,length){var out={};out.iauthor=data.read_shift(4);var rfx=parse_UncheckedRfX(data,16);out.rfx=rfx.s;out.ref=encode_cell(rfx.s);data.l+=16;return out}var parse_BrtCommentAuthor=parse_XLWideString;var parse_BrtCommentText=parse_RichStr;function parse_comments_bin(data,opts){var out=[];var authors=[];var c={};var pass=false;recordhopper(data,function hopper_cmnt(val,R,RT){switch(R.n){case"BrtCommentAuthor":authors.push(val);break;case"BrtBeginComment":c=val;break;case"BrtCommentText":c.t=val.t;c.h=val.h;c.r=val.r;break;case"BrtEndComment":c.author=authors[c.iauthor];delete c.iauthor;if(opts.sheetRows&&opts.sheetRows<=c.rfx.r)break;delete c.rfx;out.push(c);break;case"BrtBeginComments":break;case"BrtEndComments":break;case"BrtBeginCommentAuthors":break;case"BrtEndCommentAuthors":break;case"BrtBeginCommentList":break;case"BrtEndCommentList":break;default:if(!pass||opts.WTF)throw new Error("Unexpected record "+RT+" "+R.n)}});return out}function write_comments_bin(data,opts){}var rc_to_a1=function(){var rcregex=/(^|[^A-Za-z])R(\[?)(-?\d+|)\]?C(\[?)(-?\d+|)\]?/g;var rcbase;function rcfunc($$,$1,$2,$3,$4,$5){var R=$3.length>0?parseInt($3,10)|0:0,C=$5.length>0?parseInt($5,10)|0:0;if(C<0&&$4.length===0)C=0;if($4.length>0)C+=rcbase.c;if($2.length>0)R+=rcbase.r;return $1+encode_col(C)+encode_row(R)}return function rc_to_a1(fstr,base){rcbase=base;return fstr.replace(rcregex,rcfunc)}}();function parseread(l){return function(blob,length){blob.l+=l;return}}function parseread1(blob,length){blob.l+=1;return}function parse_ColRelU(blob,length){var c=blob.read_shift(2);return[c&16383,c>>14&1,c>>15&1]}function parse_RgceArea(blob,length){var r=blob.read_shift(2),R=blob.read_shift(2);var c=parse_ColRelU(blob,2);var C=parse_ColRelU(blob,2);return{s:{r:r,c:c[0],cRel:c[1],rRel:c[2]},e:{r:R,c:C[0],cRel:C[1],rRel:C[2]}}}function parse_RgceAreaRel(blob,length){var r=blob.read_shift(2),R=blob.read_shift(2);var c=parse_ColRelU(blob,2);var C=parse_ColRelU(blob,2);return{s:{r:r,c:c[0],cRel:c[1],rRel:c[2]},e:{r:R,c:C[0],cRel:C[1],rRel:C[2]}}}function parse_RgceLoc(blob,length){var r=blob.read_shift(2);var c=parse_ColRelU(blob,2);return{r:r,c:c[0],cRel:c[1],rRel:c[2]}}function parse_RgceLocRel(blob,length){var r=blob.read_shift(2);var cl=blob.read_shift(2);var cRel=(cl&32768)>>15,rRel=(cl&16384)>>14;cl&=16383;if(cRel!==0)while(cl>=256)cl-=256;return{r:r,c:cl,cRel:cRel,rRel:rRel}}function parse_PtgArea(blob,length){var type=(blob[blob.l++]&96)>>5;var area=parse_RgceArea(blob,8);return[type,area]}function parse_PtgArea3d(blob,length){var type=(blob[blob.l++]&96)>>5;var ixti=blob.read_shift(2);var area=parse_RgceArea(blob,8);return[type,ixti,area]}function parse_PtgAreaErr(blob,length){var type=(blob[blob.l++]&96)>>5;blob.l+=8;return[type]}function parse_PtgAreaErr3d(blob,length){var type=(blob[blob.l++]&96)>>5;var ixti=blob.read_shift(2);blob.l+=8;return[type,ixti]}function parse_PtgAreaN(blob,length){var type=(blob[blob.l++]&96)>>5;var area=parse_RgceAreaRel(blob,8);return[type,area]}function parse_PtgArray(blob,length){var type=(blob[blob.l++]&96)>>5;blob.l+=7;return[type]}function parse_PtgAttrBaxcel(blob,length){var bitSemi=blob[blob.l+1]&1;var bitBaxcel=1;blob.l+=4;return[bitSemi,bitBaxcel]}function parse_PtgAttrChoose(blob,length){blob.l+=2;var offset=blob.read_shift(2);var o=[];for(var i=0;i<=offset;++i)o.push(blob.read_shift(2));return o}function parse_PtgAttrGoto(blob,length){var bitGoto=blob[blob.l+1]&255?1:0;blob.l+=2;return[bitGoto,blob.read_shift(2)]}function parse_PtgAttrIf(blob,length){var bitIf=blob[blob.l+1]&255?1:0;blob.l+=2;return[bitIf,blob.read_shift(2)]}function parse_PtgAttrSemi(blob,length){var bitSemi=blob[blob.l+1]&255?1:0;blob.l+=4;return[bitSemi]}function parse_PtgAttrSpaceType(blob,length){var type=blob.read_shift(1),cch=blob.read_shift(1);return[type,cch]}function parse_PtgAttrSpace(blob,length){blob.read_shift(2);return parse_PtgAttrSpaceType(blob,2)}function parse_PtgAttrSpaceSemi(blob,length){blob.read_shift(2);return parse_PtgAttrSpaceType(blob,2)}function parse_PtgRef(blob,length){var ptg=blob[blob.l]&31;var type=(blob[blob.l]&96)>>5;blob.l+=1;var loc=parse_RgceLoc(blob,4);return[type,loc]}function parse_PtgRefN(blob,length){var ptg=blob[blob.l]&31;var type=(blob[blob.l]&96)>>5;blob.l+=1;var loc=parse_RgceLocRel(blob,4);return[type,loc]}function parse_PtgRef3d(blob,length){var ptg=blob[blob.l]&31;var type=(blob[blob.l]&96)>>5;blob.l+=1;var ixti=blob.read_shift(2);var loc=parse_RgceLoc(blob,4);return[type,ixti,loc]}function parse_PtgFunc(blob,length){var ptg=blob[blob.l]&31;var type=(blob[blob.l]&96)>>5;blob.l+=1;var iftab=blob.read_shift(2);return[FtabArgc[iftab],Ftab[iftab]]}function parse_PtgFuncVar(blob,length){blob.l++;var cparams=blob.read_shift(1),tab=parsetab(blob);return[cparams,(tab[0]===0?Ftab:Cetab)[tab[1]]]}function parsetab(blob,length){return[blob[blob.l+1]>>7,blob.read_shift(2)&32767]}var parse_PtgAttrSum=parseread(4);var parse_PtgConcat=parseread1;function parse_PtgExp(blob,length){blob.l++;var row=blob.read_shift(2);var col=blob.read_shift(2);return[row,col]}function parse_PtgErr(blob,length){blob.l++;return BErr[blob.read_shift(1)]}function parse_PtgInt(blob,length){blob.l++;return blob.read_shift(2)}function parse_PtgBool(blob,length){blob.l++;return blob.read_shift(1)!==0}function parse_PtgNum(blob,length){blob.l++;return parse_Xnum(blob,8)}function parse_PtgStr(blob,length){blob.l++;return parse_ShortXLUnicodeString(blob)}function parse_SerAr(blob){var val=[];switch(val[0]=blob.read_shift(1)){case 4:val[1]=parsebool(blob,1)?"TRUE":"FALSE";blob.l+=7;break;case 16:val[1]=BErr[blob[blob.l]];blob.l+=8;break;case 0:blob.l+=8;break;case 1:val[1]=parse_Xnum(blob,8);break;case 2:val[1]=parse_XLUnicodeString(blob);break}return val}function parse_PtgExtraMem(blob,cce){var count=blob.read_shift(2);var out=[];for(var i=0;i!=count;++i)out.push(parse_Ref8U(blob,8));return out}function parse_PtgExtraArray(blob){var cols=1+blob.read_shift(1);var rows=1+blob.read_shift(2);for(var i=0,o=[];i!=rows&&(o[i]=[]);++i)for(var j=0;j!=cols;++j)o[i][j]=parse_SerAr(blob);return o}function parse_PtgName(blob,length){var type=blob.read_shift(1)>>>5&3;var nameindex=blob.read_shift(4);return[type,0,nameindex]}function parse_PtgNameX(blob,length){var type=blob.read_shift(1)>>>5&3;var ixti=blob.read_shift(2);var nameindex=blob.read_shift(4);return[type,ixti,nameindex]}function parse_PtgMemArea(blob,length){var type=blob.read_shift(1)>>>5&3;blob.l+=4;var cce=blob.read_shift(2);return[type,cce]}function parse_PtgMemFunc(blob,length){var type=blob.read_shift(1)>>>5&3;var cce=blob.read_shift(2);return[type,cce]}function parse_PtgRefErr(blob,length){var type=blob.read_shift(1)>>>5&3;blob.l+=4;return[type]}var parse_PtgAdd=parseread1;var parse_PtgDiv=parseread1;var parse_PtgEq=parseread1;var parse_PtgGe=parseread1;var parse_PtgGt=parseread1;var parse_PtgIsect=parseread1;var parse_PtgLe=parseread1;var parse_PtgLt=parseread1;var parse_PtgMissArg=parseread1;var parse_PtgMul=parseread1;var parse_PtgNe=parseread1;var parse_PtgParen=parseread1;var parse_PtgPercent=parseread1;var parse_PtgPower=parseread1;var parse_PtgRange=parseread1;var parse_PtgSub=parseread1;var parse_PtgUminus=parseread1;var parse_PtgUnion=parseread1;var parse_PtgUplus=parseread1;var parse_PtgMemErr=parsenoop;var parse_PtgMemNoMem=parsenoop;var parse_PtgRefErr3d=parsenoop;var parse_PtgTbl=parsenoop;var PtgTypes={1:{n:"PtgExp",f:parse_PtgExp},2:{n:"PtgTbl",f:parse_PtgTbl},3:{n:"PtgAdd",f:parse_PtgAdd},4:{n:"PtgSub",f:parse_PtgSub},5:{n:"PtgMul",f:parse_PtgMul},6:{n:"PtgDiv",f:parse_PtgDiv},7:{n:"PtgPower",f:parse_PtgPower},8:{n:"PtgConcat",f:parse_PtgConcat},9:{n:"PtgLt",f:parse_PtgLt},10:{n:"PtgLe",f:parse_PtgLe},11:{n:"PtgEq",f:parse_PtgEq},12:{n:"PtgGe",f:parse_PtgGe},13:{n:"PtgGt",f:parse_PtgGt},14:{n:"PtgNe",f:parse_PtgNe},15:{n:"PtgIsect",f:parse_PtgIsect},16:{n:"PtgUnion",f:parse_PtgUnion},17:{n:"PtgRange",f:parse_PtgRange},18:{n:"PtgUplus",f:parse_PtgUplus},19:{n:"PtgUminus",f:parse_PtgUminus},20:{n:"PtgPercent",f:parse_PtgPercent},21:{n:"PtgParen",f:parse_PtgParen},22:{n:"PtgMissArg",f:parse_PtgMissArg},23:{n:"PtgStr",f:parse_PtgStr},28:{n:"PtgErr",f:parse_PtgErr},29:{n:"PtgBool",f:parse_PtgBool},30:{n:"PtgInt",f:parse_PtgInt},31:{n:"PtgNum",f:parse_PtgNum},32:{n:"PtgArray",f:parse_PtgArray},33:{n:"PtgFunc",f:parse_PtgFunc},34:{n:"PtgFuncVar",f:parse_PtgFuncVar},35:{n:"PtgName",f:parse_PtgName},36:{n:"PtgRef",f:parse_PtgRef},37:{n:"PtgArea",f:parse_PtgArea},38:{n:"PtgMemArea",f:parse_PtgMemArea},39:{n:"PtgMemErr",f:parse_PtgMemErr},40:{n:"PtgMemNoMem",f:parse_PtgMemNoMem},41:{n:"PtgMemFunc",f:parse_PtgMemFunc},42:{n:"PtgRefErr",f:parse_PtgRefErr},43:{n:"PtgAreaErr",f:parse_PtgAreaErr},44:{n:"PtgRefN",f:parse_PtgRefN},45:{n:"PtgAreaN",f:parse_PtgAreaN},57:{n:"PtgNameX",f:parse_PtgNameX},58:{n:"PtgRef3d",f:parse_PtgRef3d},59:{n:"PtgArea3d",f:parse_PtgArea3d},60:{n:"PtgRefErr3d",f:parse_PtgRefErr3d},61:{n:"PtgAreaErr3d",f:parse_PtgAreaErr3d},255:{}};var PtgDupes={64:32,96:32,65:33,97:33,66:34,98:34,67:35,99:35,68:36,100:36,69:37,101:37,70:38,102:38,71:39,103:39,72:40,104:40,73:41,105:41,74:42,106:42,75:43,107:43,76:44,108:44,77:45,109:45,89:57,121:57,90:58,122:58,91:59,123:59,92:60,124:60,93:61,125:61};(function(){for(var y in PtgDupes)PtgTypes[y]=PtgTypes[PtgDupes[y]]})();var Ptg18={};var Ptg19={1:{n:"PtgAttrSemi",f:parse_PtgAttrSemi},2:{n:"PtgAttrIf",f:parse_PtgAttrIf},4:{n:"PtgAttrChoose",f:parse_PtgAttrChoose},8:{n:"PtgAttrGoto",f:parse_PtgAttrGoto},16:{n:"PtgAttrSum",f:parse_PtgAttrSum},32:{n:"PtgAttrBaxcel",f:parse_PtgAttrBaxcel},64:{n:"PtgAttrSpace",f:parse_PtgAttrSpace},65:{n:"PtgAttrSpaceSemi",f:parse_PtgAttrSpaceSemi},255:{}};function parse_Formula(blob,length,opts){var cell=parse_XLSCell(blob,6);var val=parse_FormulaValue(blob,8);var flags=blob.read_shift(1);blob.read_shift(1);var chn=blob.read_shift(4);var cbf="";if(opts.biff===5)blob.l+=length-20;else cbf=parse_XLSCellParsedFormula(blob,length-20,opts);return{cell:cell,val:val[0],formula:cbf,shared:flags>>3&1,tt:val[1]}}function parse_FormulaValue(blob){var b;if(__readUInt16LE(blob,blob.l+6)!==65535)return[parse_Xnum(blob),"n"];switch(blob[blob.l]){case 0:blob.l+=8;return["String","s"];case 1:b=blob[blob.l+2]===1;blob.l+=8;return[b,"b"];case 2:b=blob[blob.l+2];blob.l+=8;return[b,"e"];case 3:blob.l+=8;return["","s"]}}function parse_RgbExtra(blob,length,rgce,opts){if(opts.biff<8)return parsenoop(blob,length);var target=blob.l+length;var o=[];for(var i=0;i!==rgce.length;++i){switch(rgce[i][0]){case"PtgArray":rgce[i][1]=parse_PtgExtraArray(blob);o.push(rgce[i][1]);break;case"PtgMemArea":rgce[i][2]=parse_PtgExtraMem(blob,rgce[i][1]);o.push(rgce[i][2]);break;default:break}}length=target-blob.l;if(length!==0)o.push(parsenoop(blob,length));return o}function parse_NameParsedFormula(blob,length,opts,cce){var target=blob.l+length;var rgce=parse_Rgce(blob,cce);var rgcb;if(target!==blob.l)rgcb=parse_RgbExtra(blob,target-blob.l,rgce,opts);return[rgce,rgcb]}function parse_XLSCellParsedFormula(blob,length,opts){var target=blob.l+length;var rgcb,cce=blob.read_shift(2);if(cce==65535)return[[],parsenoop(blob,length-2)];var rgce=parse_Rgce(blob,cce);if(length!==cce+2)rgcb=parse_RgbExtra(blob,length-cce-2,rgce,opts);return[rgce,rgcb]}function parse_SharedParsedFormula(blob,length,opts){var target=blob.l+length;var rgcb,cce=blob.read_shift(2);var rgce=parse_Rgce(blob,cce);if(cce==65535)return[[],parsenoop(blob,length-2)];if(length!==cce+2)rgcb=parse_RgbExtra(blob,target-cce-2,rgce,opts);return[rgce,rgcb]}function parse_ArrayParsedFormula(blob,length,opts,ref){var target=blob.l+length;var rgcb,cce=blob.read_shift(2);if(cce==65535)return[[],parsenoop(blob,length-2)];var rgce=parse_Rgce(blob,cce);if(length!==cce+2)rgcb=parse_RgbExtra(blob,target-cce-2,rgce,opts);return[rgce,rgcb]}function parse_Rgce(blob,length){var target=blob.l+length;var R,id,ptgs=[];while(target!=blob.l){length=target-blob.l;id=blob[blob.l];R=PtgTypes[id];if(id===24||id===25){id=blob[blob.l+1];R=(id===24?Ptg18:Ptg19)[id]}if(!R||!R.f){ptgs.push(parsenoop(blob,length))}else{ptgs.push([R.n,R.f(blob,length)])}}return ptgs}function mapper(x){return x.map(function f2(y){return y[1]}).join(",")}function stringify_formula(formula,range,cell,supbooks,opts){if(opts!==undefined&&opts.biff===5)return"BIFF5??";var _range=range!==undefined?range:{s:{c:0,r:0}};var stack=[],e1,e2,type,c,ixti,nameidx,r;if(!formula[0]||!formula[0][0])return"";for(var ff=0,fflen=formula[0].length;ff<fflen;++ff){var f=formula[0][ff];switch(f[0]){case"PtgUminus":stack.push("-"+stack.pop());break;case"PtgUplus":stack.push("+"+stack.pop());break;case"PtgPercent":stack.push(stack.pop()+"%");break;case"PtgAdd":e1=stack.pop();e2=stack.pop();stack.push(e2+"+"+e1);break;case"PtgSub":e1=stack.pop();e2=stack.pop();stack.push(e2+"-"+e1);break;case"PtgMul":e1=stack.pop();e2=stack.pop();stack.push(e2+"*"+e1);break;case"PtgDiv":e1=stack.pop();e2=stack.pop();stack.push(e2+"/"+e1);break;case"PtgPower":e1=stack.pop();e2=stack.pop();stack.push(e2+"^"+e1);break;case"PtgConcat":e1=stack.pop();e2=stack.pop();stack.push(e2+"&"+e1);break;case"PtgLt":e1=stack.pop();e2=stack.pop();stack.push(e2+"<"+e1);break;case"PtgLe":e1=stack.pop();e2=stack.pop();stack.push(e2+"<="+e1);break;case"PtgEq":e1=stack.pop();e2=stack.pop();stack.push(e2+"="+e1);break;case"PtgGe":e1=stack.pop();e2=stack.pop();stack.push(e2+">="+e1);break;case"PtgGt":e1=stack.pop();e2=stack.pop();stack.push(e2+">"+e1);break;case"PtgNe":e1=stack.pop();e2=stack.pop();stack.push(e2+"<>"+e1);break;case"PtgIsect":e1=stack.pop();e2=stack.pop();stack.push(e2+" "+e1);break;case"PtgUnion":e1=stack.pop();e2=stack.pop();stack.push(e2+","+e1);break;case"PtgRange":break;case"PtgAttrChoose":break;case"PtgAttrGoto":break;case"PtgAttrIf":break;case"PtgRef":type=f[1][0];c=shift_cell_xls(decode_cell(encode_cell(f[1][1])),_range);stack.push(encode_cell(c));break;case"PtgRefN":type=f[1][0];c=shift_cell_xls(decode_cell(encode_cell(f[1][1])),cell);stack.push(encode_cell(c));break;case"PtgRef3d":type=f[1][0];ixti=f[1][1];c=shift_cell_xls(f[1][2],_range);stack.push(supbooks[1][ixti+1]+"!"+encode_cell(c));break;case"PtgFunc":case"PtgFuncVar":var argc=f[1][0],func=f[1][1];if(!argc)argc=0;var args=stack.slice(-argc);stack.length-=argc;if(func==="User")func=args.shift();stack.push(func+"("+args.join(",")+")");break;case"PtgBool":stack.push(f[1]?"TRUE":"FALSE");break;case"PtgInt":stack.push(f[1]);break;case"PtgNum":stack.push(String(f[1]));break;case"PtgStr":stack.push('"'+f[1]+'"');break;case"PtgErr":stack.push(f[1]);break;case"PtgArea":type=f[1][0];r=shift_range_xls(f[1][1],_range);stack.push(encode_range(r));break;case"PtgArea3d":type=f[1][0];ixti=f[1][1];r=f[1][2];stack.push(supbooks[1][ixti+1]+"!"+encode_range(r));break;case"PtgAttrSum":stack.push("SUM("+stack.pop()+")");break;case"PtgAttrSemi":break;case"PtgName":nameidx=f[1][2];var lbl=supbooks[0][nameidx];var name=lbl.Name;if(name in XLSXFutureFunctions)name=XLSXFutureFunctions[name];stack.push(name);break;case"PtgNameX":var bookidx=f[1][1];nameidx=f[1][2];var externbook;if(supbooks[bookidx+1])externbook=supbooks[bookidx+1][nameidx];else if(supbooks[bookidx-1])externbook=supbooks[bookidx-1][nameidx];if(!externbook)externbook={body:"??NAMEX??"};stack.push(externbook.body);break;case"PtgParen":stack.push("("+stack.pop()+")");break;case"PtgRefErr":stack.push("#REF!");break;case"PtgExp":c={c:f[1][1],r:f[1][0]};var q={c:cell.c,r:cell.r};if(supbooks.sharedf[encode_cell(c)]){var parsedf=supbooks.sharedf[encode_cell(c)];stack.push(stringify_formula(parsedf,_range,q,supbooks,opts))}else{var fnd=false;for(e1=0;e1!=supbooks.arrayf.length;++e1){e2=supbooks.arrayf[e1];if(c.c<e2[0].s.c||c.c>e2[0].e.c)continue;if(c.r<e2[0].s.r||c.r>e2[0].e.r)continue;stack.push(stringify_formula(e2[1],_range,q,supbooks,opts))}if(!fnd)stack.push(f[1])}break;case"PtgArray":stack.push("{"+f[1].map(mapper).join(";")+"}");break;case"PtgMemArea":break;case"PtgAttrSpace":break;case"PtgTbl":break;case"PtgMemErr":break;case"PtgMissArg":stack.push("");break;case"PtgAreaErr":break;case"PtgAreaN":stack.push("");break;case"PtgRefErr3d":break;case"PtgMemFunc":break;default:throw"Unrecognized Formula Token: "+f}}return stack[0]}function parse_XLSBCellParsedFormula(data,length){var cce=data.read_shift(4);return parsenoop(data,length-4)}var PtgDataType={1:"REFERENCE",2:"VALUE",3:"ARRAY"};var Cetab={0:"BEEP",1:"OPEN",2:"OPEN.LINKS",3:"CLOSE.ALL",4:"SAVE",5:"SAVE.AS",6:"FILE.DELETE",7:"PAGE.SETUP",8:"PRINT",9:"PRINTER.SETUP",10:"QUIT",11:"NEW.WINDOW",12:"ARRANGE.ALL",13:"WINDOW.SIZE",14:"WINDOW.MOVE",15:"FULL",16:"CLOSE",17:"RUN",22:"SET.PRINT.AREA",23:"SET.PRINT.TITLES",24:"SET.PAGE.BREAK",25:"REMOVE.PAGE.BREAK",26:"FONT",27:"DISPLAY",28:"PROTECT.DOCUMENT",29:"PRECISION",30:"A1.R1C1",31:"CALCULATE.NOW",32:"CALCULATION",34:"DATA.FIND",35:"EXTRACT",36:"DATA.DELETE",37:"SET.DATABASE",38:"SET.CRITERIA",39:"SORT",40:"DATA.SERIES",41:"TABLE",42:"FORMAT.NUMBER",43:"ALIGNMENT",44:"STYLE",45:"BORDER",46:"CELL.PROTECTION",47:"COLUMN.WIDTH",48:"UNDO",49:"CUT",50:"COPY",51:"PASTE",52:"CLEAR",53:"PASTE.SPECIAL",54:"EDIT.DELETE",55:"INSERT",56:"FILL.RIGHT",57:"FILL.DOWN",61:"DEFINE.NAME",62:"CREATE.NAMES",63:"FORMULA.GOTO",64:"FORMULA.FIND",65:"SELECT.LAST.CELL",66:"SHOW.ACTIVE.CELL",67:"GALLERY.AREA",68:"GALLERY.BAR",69:"GALLERY.COLUMN",70:"GALLERY.LINE",71:"GALLERY.PIE",72:"GALLERY.SCATTER",73:"COMBINATION",74:"PREFERRED",
+75:"ADD.OVERLAY",76:"GRIDLINES",77:"SET.PREFERRED",78:"AXES",79:"LEGEND",80:"ATTACH.TEXT",81:"ADD.ARROW",82:"SELECT.CHART",83:"SELECT.PLOT.AREA",84:"PATTERNS",85:"MAIN.CHART",86:"OVERLAY",87:"SCALE",88:"FORMAT.LEGEND",89:"FORMAT.TEXT",90:"EDIT.REPEAT",91:"PARSE",92:"JUSTIFY",93:"HIDE",94:"UNHIDE",95:"WORKSPACE",96:"FORMULA",97:"FORMULA.FILL",98:"FORMULA.ARRAY",99:"DATA.FIND.NEXT",100:"DATA.FIND.PREV",101:"FORMULA.FIND.NEXT",102:"FORMULA.FIND.PREV",103:"ACTIVATE",104:"ACTIVATE.NEXT",105:"ACTIVATE.PREV",106:"UNLOCKED.NEXT",107:"UNLOCKED.PREV",108:"COPY.PICTURE",109:"SELECT",110:"DELETE.NAME",111:"DELETE.FORMAT",112:"VLINE",113:"HLINE",114:"VPAGE",115:"HPAGE",116:"VSCROLL",117:"HSCROLL",118:"ALERT",119:"NEW",120:"CANCEL.COPY",121:"SHOW.CLIPBOARD",122:"MESSAGE",124:"PASTE.LINK",125:"APP.ACTIVATE",126:"DELETE.ARROW",127:"ROW.HEIGHT",128:"FORMAT.MOVE",129:"FORMAT.SIZE",130:"FORMULA.REPLACE",131:"SEND.KEYS",132:"SELECT.SPECIAL",133:"APPLY.NAMES",134:"REPLACE.FONT",135:"FREEZE.PANES",136:"SHOW.INFO",137:"SPLIT",138:"ON.WINDOW",139:"ON.DATA",140:"DISABLE.INPUT",142:"OUTLINE",143:"LIST.NAMES",144:"FILE.CLOSE",145:"SAVE.WORKBOOK",146:"DATA.FORM",147:"COPY.CHART",148:"ON.TIME",149:"WAIT",150:"FORMAT.FONT",151:"FILL.UP",152:"FILL.LEFT",153:"DELETE.OVERLAY",155:"SHORT.MENUS",159:"SET.UPDATE.STATUS",161:"COLOR.PALETTE",162:"DELETE.STYLE",163:"WINDOW.RESTORE",164:"WINDOW.MAXIMIZE",166:"CHANGE.LINK",167:"CALCULATE.DOCUMENT",168:"ON.KEY",169:"APP.RESTORE",170:"APP.MOVE",171:"APP.SIZE",172:"APP.MINIMIZE",173:"APP.MAXIMIZE",174:"BRING.TO.FRONT",175:"SEND.TO.BACK",185:"MAIN.CHART.TYPE",186:"OVERLAY.CHART.TYPE",187:"SELECT.END",188:"OPEN.MAIL",189:"SEND.MAIL",190:"STANDARD.FONT",191:"CONSOLIDATE",192:"SORT.SPECIAL",193:"GALLERY.3D.AREA",194:"GALLERY.3D.COLUMN",195:"GALLERY.3D.LINE",196:"GALLERY.3D.PIE",197:"VIEW.3D",198:"GOAL.SEEK",199:"WORKGROUP",200:"FILL.GROUP",201:"UPDATE.LINK",202:"PROMOTE",203:"DEMOTE",204:"SHOW.DETAIL",206:"UNGROUP",207:"OBJECT.PROPERTIES",208:"SAVE.NEW.OBJECT",209:"SHARE",210:"SHARE.NAME",211:"DUPLICATE",212:"APPLY.STYLE",213:"ASSIGN.TO.OBJECT",214:"OBJECT.PROTECTION",215:"HIDE.OBJECT",216:"SET.EXTRACT",217:"CREATE.PUBLISHER",218:"SUBSCRIBE.TO",219:"ATTRIBUTES",220:"SHOW.TOOLBAR",222:"PRINT.PREVIEW",223:"EDIT.COLOR",224:"SHOW.LEVELS",225:"FORMAT.MAIN",226:"FORMAT.OVERLAY",227:"ON.RECALC",228:"EDIT.SERIES",229:"DEFINE.STYLE",240:"LINE.PRINT",243:"ENTER.DATA",249:"GALLERY.RADAR",250:"MERGE.STYLES",251:"EDITION.OPTIONS",252:"PASTE.PICTURE",253:"PASTE.PICTURE.LINK",254:"SPELLING",256:"ZOOM",259:"INSERT.OBJECT",260:"WINDOW.MINIMIZE",265:"SOUND.NOTE",266:"SOUND.PLAY",267:"FORMAT.SHAPE",268:"EXTEND.POLYGON",269:"FORMAT.AUTO",272:"GALLERY.3D.BAR",273:"GALLERY.3D.SURFACE",274:"FILL.AUTO",276:"CUSTOMIZE.TOOLBAR",277:"ADD.TOOL",278:"EDIT.OBJECT",279:"ON.DOUBLECLICK",280:"ON.ENTRY",281:"WORKBOOK.ADD",282:"WORKBOOK.MOVE",283:"WORKBOOK.COPY",284:"WORKBOOK.OPTIONS",285:"SAVE.WORKSPACE",288:"CHART.WIZARD",289:"DELETE.TOOL",290:"MOVE.TOOL",291:"WORKBOOK.SELECT",292:"WORKBOOK.ACTIVATE",293:"ASSIGN.TO.TOOL",295:"COPY.TOOL",296:"RESET.TOOL",297:"CONSTRAIN.NUMERIC",298:"PASTE.TOOL",302:"WORKBOOK.NEW",305:"SCENARIO.CELLS",306:"SCENARIO.DELETE",307:"SCENARIO.ADD",308:"SCENARIO.EDIT",309:"SCENARIO.SHOW",310:"SCENARIO.SHOW.NEXT",311:"SCENARIO.SUMMARY",312:"PIVOT.TABLE.WIZARD",313:"PIVOT.FIELD.PROPERTIES",314:"PIVOT.FIELD",315:"PIVOT.ITEM",316:"PIVOT.ADD.FIELDS",318:"OPTIONS.CALCULATION",319:"OPTIONS.EDIT",320:"OPTIONS.VIEW",321:"ADDIN.MANAGER",322:"MENU.EDITOR",323:"ATTACH.TOOLBARS",324:"VBAActivate",325:"OPTIONS.CHART",328:"VBA.INSERT.FILE",330:"VBA.PROCEDURE.DEFINITION",336:"ROUTING.SLIP",338:"ROUTE.DOCUMENT",339:"MAIL.LOGON",342:"INSERT.PICTURE",343:"EDIT.TOOL",344:"GALLERY.DOUGHNUT",350:"CHART.TREND",352:"PIVOT.ITEM.PROPERTIES",354:"WORKBOOK.INSERT",355:"OPTIONS.TRANSITION",356:"OPTIONS.GENERAL",370:"FILTER.ADVANCED",373:"MAIL.ADD.MAILER",374:"MAIL.DELETE.MAILER",375:"MAIL.REPLY",376:"MAIL.REPLY.ALL",377:"MAIL.FORWARD",378:"MAIL.NEXT.LETTER",379:"DATA.LABEL",380:"INSERT.TITLE",381:"FONT.PROPERTIES",382:"MACRO.OPTIONS",383:"WORKBOOK.HIDE",384:"WORKBOOK.UNHIDE",385:"WORKBOOK.DELETE",386:"WORKBOOK.NAME",388:"GALLERY.CUSTOM",390:"ADD.CHART.AUTOFORMAT",391:"DELETE.CHART.AUTOFORMAT",392:"CHART.ADD.DATA",393:"AUTO.OUTLINE",394:"TAB.ORDER",395:"SHOW.DIALOG",396:"SELECT.ALL",397:"UNGROUP.SHEETS",398:"SUBTOTAL.CREATE",399:"SUBTOTAL.REMOVE",400:"RENAME.OBJECT",412:"WORKBOOK.SCROLL",413:"WORKBOOK.NEXT",414:"WORKBOOK.PREV",415:"WORKBOOK.TAB.SPLIT",416:"FULL.SCREEN",417:"WORKBOOK.PROTECT",420:"SCROLLBAR.PROPERTIES",421:"PIVOT.SHOW.PAGES",422:"TEXT.TO.COLUMNS",423:"FORMAT.CHARTTYPE",424:"LINK.FORMAT",425:"TRACER.DISPLAY",430:"TRACER.NAVIGATE",431:"TRACER.CLEAR",432:"TRACER.ERROR",433:"PIVOT.FIELD.GROUP",434:"PIVOT.FIELD.UNGROUP",435:"CHECKBOX.PROPERTIES",436:"LABEL.PROPERTIES",437:"LISTBOX.PROPERTIES",438:"EDITBOX.PROPERTIES",439:"PIVOT.REFRESH",440:"LINK.COMBO",441:"OPEN.TEXT",442:"HIDE.DIALOG",443:"SET.DIALOG.FOCUS",444:"ENABLE.OBJECT",445:"PUSHBUTTON.PROPERTIES",446:"SET.DIALOG.DEFAULT",447:"FILTER",448:"FILTER.SHOW.ALL",449:"CLEAR.OUTLINE",450:"FUNCTION.WIZARD",451:"ADD.LIST.ITEM",452:"SET.LIST.ITEM",453:"REMOVE.LIST.ITEM",454:"SELECT.LIST.ITEM",455:"SET.CONTROL.VALUE",456:"SAVE.COPY.AS",458:"OPTIONS.LISTS.ADD",459:"OPTIONS.LISTS.DELETE",460:"SERIES.AXES",461:"SERIES.X",462:"SERIES.Y",463:"ERRORBAR.X",464:"ERRORBAR.Y",465:"FORMAT.CHART",466:"SERIES.ORDER",467:"MAIL.LOGOFF",468:"CLEAR.ROUTING.SLIP",469:"APP.ACTIVATE.MICROSOFT",470:"MAIL.EDIT.MAILER",471:"ON.SHEET",472:"STANDARD.WIDTH",473:"SCENARIO.MERGE",474:"SUMMARY.INFO",475:"FIND.FILE",476:"ACTIVE.CELL.FONT",477:"ENABLE.TIPWIZARD",478:"VBA.MAKE.ADDIN",480:"INSERTDATATABLE",481:"WORKGROUP.OPTIONS",482:"MAIL.SEND.MAILER",485:"AUTOCORRECT",489:"POST.DOCUMENT",491:"PICKLIST",493:"VIEW.SHOW",494:"VIEW.DEFINE",495:"VIEW.DELETE",509:"SHEET.BACKGROUND",510:"INSERT.MAP.OBJECT",511:"OPTIONS.MENONO",517:"MSOCHECKS",518:"NORMAL",519:"LAYOUT",520:"RM.PRINT.AREA",521:"CLEAR.PRINT.AREA",522:"ADD.PRINT.AREA",523:"MOVE.BRK",545:"HIDECURR.NOTE",546:"HIDEALL.NOTES",547:"DELETE.NOTE",548:"TRAVERSE.NOTES",549:"ACTIVATE.NOTES",620:"PROTECT.REVISIONS",621:"UNPROTECT.REVISIONS",647:"OPTIONS.ME",653:"WEB.PUBLISH",667:"NEWWEBQUERY",673:"PIVOT.TABLE.CHART",753:"OPTIONS.SAVE",755:"OPTIONS.SPELL",808:"HIDEALL.INKANNOTS"};var Ftab={0:"COUNT",1:"IF",2:"ISNA",3:"ISERROR",4:"SUM",5:"AVERAGE",6:"MIN",7:"MAX",8:"ROW",9:"COLUMN",10:"NA",11:"NPV",12:"STDEV",13:"DOLLAR",14:"FIXED",15:"SIN",16:"COS",17:"TAN",18:"ATAN",19:"PI",20:"SQRT",21:"EXP",22:"LN",23:"LOG10",24:"ABS",25:"INT",26:"SIGN",27:"ROUND",28:"LOOKUP",29:"INDEX",30:"REPT",31:"MID",32:"LEN",33:"VALUE",34:"TRUE",35:"FALSE",36:"AND",37:"OR",38:"NOT",39:"MOD",40:"DCOUNT",41:"DSUM",42:"DAVERAGE",43:"DMIN",44:"DMAX",45:"DSTDEV",46:"VAR",47:"DVAR",48:"TEXT",49:"LINEST",50:"TREND",51:"LOGEST",52:"GROWTH",53:"GOTO",54:"HALT",55:"RETURN",56:"PV",57:"FV",58:"NPER",59:"PMT",60:"RATE",61:"MIRR",62:"IRR",63:"RAND",64:"MATCH",65:"DATE",66:"TIME",67:"DAY",68:"MONTH",69:"YEAR",70:"WEEKDAY",71:"HOUR",72:"MINUTE",73:"SECOND",74:"NOW",75:"AREAS",76:"ROWS",77:"COLUMNS",78:"OFFSET",79:"ABSREF",80:"RELREF",81:"ARGUMENT",82:"SEARCH",83:"TRANSPOSE",84:"ERROR",85:"STEP",86:"TYPE",87:"ECHO",88:"SET.NAME",89:"CALLER",90:"DEREF",91:"WINDOWS",92:"SERIES",93:"DOCUMENTS",94:"ACTIVE.CELL",95:"SELECTION",96:"RESULT",97:"ATAN2",98:"ASIN",99:"ACOS",100:"CHOOSE",101:"HLOOKUP",102:"VLOOKUP",103:"LINKS",104:"INPUT",105:"ISREF",106:"GET.FORMULA",107:"GET.NAME",108:"SET.VALUE",109:"LOG",110:"EXEC",111:"CHAR",112:"LOWER",113:"UPPER",114:"PROPER",115:"LEFT",116:"RIGHT",117:"EXACT",118:"TRIM",119:"REPLACE",120:"SUBSTITUTE",121:"CODE",122:"NAMES",123:"DIRECTORY",124:"FIND",125:"CELL",126:"ISERR",127:"ISTEXT",128:"ISNUMBER",129:"ISBLANK",130:"T",131:"N",132:"FOPEN",133:"FCLOSE",134:"FSIZE",135:"FREADLN",136:"FREAD",137:"FWRITELN",138:"FWRITE",139:"FPOS",140:"DATEVALUE",141:"TIMEVALUE",142:"SLN",143:"SYD",144:"DDB",145:"GET.DEF",146:"REFTEXT",147:"TEXTREF",148:"INDIRECT",149:"REGISTER",150:"CALL",151:"ADD.BAR",152:"ADD.MENU",153:"ADD.COMMAND",154:"ENABLE.COMMAND",155:"CHECK.COMMAND",156:"RENAME.COMMAND",157:"SHOW.BAR",158:"DELETE.MENU",159:"DELETE.COMMAND",160:"GET.CHART.ITEM",161:"DIALOG.BOX",162:"CLEAN",163:"MDETERM",164:"MINVERSE",165:"MMULT",166:"FILES",167:"IPMT",168:"PPMT",169:"COUNTA",170:"CANCEL.KEY",171:"FOR",172:"WHILE",173:"BREAK",174:"NEXT",175:"INITIATE",176:"REQUEST",177:"POKE",178:"EXECUTE",179:"TERMINATE",180:"RESTART",181:"HELP",182:"GET.BAR",183:"PRODUCT",184:"FACT",185:"GET.CELL",186:"GET.WORKSPACE",187:"GET.WINDOW",188:"GET.DOCUMENT",189:"DPRODUCT",190:"ISNONTEXT",191:"GET.NOTE",192:"NOTE",193:"STDEVP",194:"VARP",195:"DSTDEVP",196:"DVARP",197:"TRUNC",198:"ISLOGICAL",199:"DCOUNTA",200:"DELETE.BAR",201:"UNREGISTER",204:"USDOLLAR",205:"FINDB",206:"SEARCHB",207:"REPLACEB",208:"LEFTB",209:"RIGHTB",210:"MIDB",211:"LENB",212:"ROUNDUP",213:"ROUNDDOWN",214:"ASC",215:"DBCS",216:"RANK",219:"ADDRESS",220:"DAYS360",221:"TODAY",222:"VDB",223:"ELSE",224:"ELSE.IF",225:"END.IF",226:"FOR.CELL",227:"MEDIAN",228:"SUMPRODUCT",229:"SINH",230:"COSH",231:"TANH",232:"ASINH",233:"ACOSH",234:"ATANH",235:"DGET",236:"CREATE.OBJECT",237:"VOLATILE",238:"LAST.ERROR",239:"CUSTOM.UNDO",240:"CUSTOM.REPEAT",241:"FORMULA.CONVERT",242:"GET.LINK.INFO",243:"TEXT.BOX",244:"INFO",245:"GROUP",246:"GET.OBJECT",247:"DB",248:"PAUSE",251:"RESUME",252:"FREQUENCY",253:"ADD.TOOLBAR",254:"DELETE.TOOLBAR",255:"User",256:"RESET.TOOLBAR",257:"EVALUATE",258:"GET.TOOLBAR",259:"GET.TOOL",260:"SPELLING.CHECK",261:"ERROR.TYPE",262:"APP.TITLE",263:"WINDOW.TITLE",264:"SAVE.TOOLBAR",265:"ENABLE.TOOL",266:"PRESS.TOOL",267:"REGISTER.ID",268:"GET.WORKBOOK",269:"AVEDEV",270:"BETADIST",271:"GAMMALN",272:"BETAINV",273:"BINOMDIST",274:"CHIDIST",275:"CHIINV",276:"COMBIN",277:"CONFIDENCE",278:"CRITBINOM",279:"EVEN",280:"EXPONDIST",281:"FDIST",282:"FINV",283:"FISHER",284:"FISHERINV",285:"FLOOR",286:"GAMMADIST",287:"GAMMAINV",288:"CEILING",289:"HYPGEOMDIST",290:"LOGNORMDIST",291:"LOGINV",292:"NEGBINOMDIST",293:"NORMDIST",294:"NORMSDIST",295:"NORMINV",296:"NORMSINV",297:"STANDARDIZE",298:"ODD",299:"PERMUT",300:"POISSON",301:"TDIST",302:"WEIBULL",303:"SUMXMY2",304:"SUMX2MY2",305:"SUMX2PY2",306:"CHITEST",307:"CORREL",308:"COVAR",309:"FORECAST",310:"FTEST",311:"INTERCEPT",312:"PEARSON",313:"RSQ",314:"STEYX",315:"SLOPE",316:"TTEST",317:"PROB",318:"DEVSQ",319:"GEOMEAN",320:"HARMEAN",321:"SUMSQ",322:"KURT",323:"SKEW",324:"ZTEST",325:"LARGE",326:"SMALL",327:"QUARTILE",328:"PERCENTILE",329:"PERCENTRANK",330:"MODE",331:"TRIMMEAN",332:"TINV",334:"MOVIE.COMMAND",335:"GET.MOVIE",336:"CONCATENATE",337:"POWER",338:"PIVOT.ADD.DATA",339:"GET.PIVOT.TABLE",340:"GET.PIVOT.FIELD",341:"GET.PIVOT.ITEM",342:"RADIANS",343:"DEGREES",344:"SUBTOTAL",345:"SUMIF",346:"COUNTIF",347:"COUNTBLANK",348:"SCENARIO.GET",349:"OPTIONS.LISTS.GET",350:"ISPMT",351:"DATEDIF",352:"DATESTRING",353:"NUMBERSTRING",354:"ROMAN",355:"OPEN.DIALOG",356:"SAVE.DIALOG",357:"VIEW.GET",358:"GETPIVOTDATA",359:"HYPERLINK",360:"PHONETIC",361:"AVERAGEA",362:"MAXA",363:"MINA",364:"STDEVPA",365:"VARPA",366:"STDEVA",367:"VARA",368:"BAHTTEXT",369:"THAIDAYOFWEEK",370:"THAIDIGIT",371:"THAIMONTHOFYEAR",372:"THAINUMSOUND",373:"THAINUMSTRING",374:"THAISTRINGLENGTH",375:"ISTHAIDIGIT",376:"ROUNDBAHTDOWN",377:"ROUNDBAHTUP",378:"THAIYEAR",379:"RTD"};var FtabArgc={2:1,3:1,15:1,16:1,17:1,18:1,20:1,21:1,22:1,23:1,24:1,25:1,26:1,27:2,30:2,31:3,32:1,33:1,38:1,39:2,40:3,41:3,42:3,43:3,44:3,45:3,47:3,48:2,53:1,61:3,65:3,66:3,67:1,68:1,69:1,71:1,72:1,73:1,75:1,76:1,77:1,79:2,80:2,83:1,86:1,90:1,97:2,98:1,99:1,105:1,111:1,112:1,113:1,114:1,117:2,118:1,119:4,121:1,126:1,127:1,128:1,129:1,130:1,131:1,133:1,134:1,135:1,136:2,137:2,138:2,140:1,141:1,142:3,143:4,162:1,163:1,164:1,165:2,172:1,175:2,176:2,177:3,178:2,179:1,184:1,189:3,190:1,195:3,196:3,198:1,199:3,201:1,207:4,210:3,211:1,212:2,213:2,214:1,215:1,229:1,230:1,231:1,232:1,233:1,234:1,235:3,244:1,252:2,257:1,261:1,271:1,273:4,274:2,275:2,276:2,277:3,278:3,279:1,280:3,281:3,282:3,283:1,284:1,285:2,286:4,287:3,288:2,289:4,290:3,291:3,292:3,293:4,294:1,295:3,296:1,297:3,298:1,299:2,300:3,301:3,302:4,303:2,304:2,305:2,306:2,307:2,308:2,309:3,310:2,311:2,312:2,313:2,314:2,315:2,316:4,325:2,326:2,327:2,328:2,331:2,332:2,337:2,342:1,343:1,346:2,347:1,350:4,351:3,352:1,353:2,360:1,368:1,369:1,370:1,371:1,372:1,373:1,374:1,375:1,376:1,377:1,378:1,65535:0};var XLSXFutureFunctions={"_xlfn.ACOT":"ACOT","_xlfn.ACOTH":"ACOTH","_xlfn.AGGREGATE":"AGGREGATE","_xlfn.ARABIC":"ARABIC","_xlfn.AVERAGEIF":"AVERAGEIF","_xlfn.AVERAGEIFS":"AVERAGEIFS","_xlfn.BASE":"BASE","_xlfn.BETA.DIST":"BETA.DIST","_xlfn.BETA.INV":"BETA.INV","_xlfn.BINOM.DIST":"BINOM.DIST","_xlfn.BINOM.DIST.RANGE":"BINOM.DIST.RANGE","_xlfn.BINOM.INV":"BINOM.INV","_xlfn.BITAND":"BITAND","_xlfn.BITLSHIFT":"BITLSHIFT","_xlfn.BITOR":"BITOR","_xlfn.BITRSHIFT":"BITRSHIFT","_xlfn.BITXOR":"BITXOR","_xlfn.CEILING.MATH":"CEILING.MATH","_xlfn.CEILING.PRECISE":"CEILING.PRECISE","_xlfn.CHISQ.DIST":"CHISQ.DIST","_xlfn.CHISQ.DIST.RT":"CHISQ.DIST.RT","_xlfn.CHISQ.INV":"CHISQ.INV","_xlfn.CHISQ.INV.RT":"CHISQ.INV.RT","_xlfn.CHISQ.TEST":"CHISQ.TEST","_xlfn.COMBINA":"COMBINA","_xlfn.CONFIDENCE.NORM":"CONFIDENCE.NORM","_xlfn.CONFIDENCE.T":"CONFIDENCE.T","_xlfn.COT":"COT","_xlfn.COTH":"COTH","_xlfn.COUNTIFS":"COUNTIFS","_xlfn.COVARIANCE.P":"COVARIANCE.P","_xlfn.COVARIANCE.S":"COVARIANCE.S","_xlfn.CSC":"CSC","_xlfn.CSCH":"CSCH","_xlfn.DAYS":"DAYS","_xlfn.DECIMAL":"DECIMAL","_xlfn.ECMA.CEILING":"ECMA.CEILING","_xlfn.ERF.PRECISE":"ERF.PRECISE","_xlfn.ERFC.PRECISE":"ERFC.PRECISE","_xlfn.EXPON.DIST":"EXPON.DIST","_xlfn.F.DIST":"F.DIST","_xlfn.F.DIST.RT":"F.DIST.RT","_xlfn.F.INV":"F.INV","_xlfn.F.INV.RT":"F.INV.RT","_xlfn.F.TEST":"F.TEST","_xlfn.FILTERXML":"FILTERXML","_xlfn.FLOOR.MATH":"FLOOR.MATH","_xlfn.FLOOR.PRECISE":"FLOOR.PRECISE","_xlfn.FORMULATEXT":"FORMULATEXT","_xlfn.GAMMA":"GAMMA","_xlfn.GAMMA.DIST":"GAMMA.DIST","_xlfn.GAMMA.INV":"GAMMA.INV","_xlfn.GAMMALN.PRECISE":"GAMMALN.PRECISE","_xlfn.GAUSS":"GAUSS","_xlfn.HYPGEOM.DIST":"HYPGEOM.DIST","_xlfn.IFNA":"IFNA","_xlfn.IFERROR":"IFERROR","_xlfn.IMCOSH":"IMCOSH","_xlfn.IMCOT":"IMCOT","_xlfn.IMCSC":"IMCSC","_xlfn.IMCSCH":"IMCSCH","_xlfn.IMSEC":"IMSEC","_xlfn.IMSECH":"IMSECH","_xlfn.IMSINH":"IMSINH","_xlfn.IMTAN":"IMTAN","_xlfn.ISFORMULA":"ISFORMULA","_xlfn.ISO.CEILING":"ISO.CEILING","_xlfn.ISOWEEKNUM":"ISOWEEKNUM","_xlfn.LOGNORM.DIST":"LOGNORM.DIST","_xlfn.LOGNORM.INV":"LOGNORM.INV","_xlfn.MODE.MULT":"MODE.MULT","_xlfn.MODE.SNGL":"MODE.SNGL","_xlfn.MUNIT":"MUNIT","_xlfn.NEGBINOM.DIST":"NEGBINOM.DIST","_xlfn.NETWORKDAYS.INTL":"NETWORKDAYS.INTL","_xlfn.NIGBINOM":"NIGBINOM","_xlfn.NORM.DIST":"NORM.DIST","_xlfn.NORM.INV":"NORM.INV","_xlfn.NORM.S.DIST":"NORM.S.DIST","_xlfn.NORM.S.INV":"NORM.S.INV","_xlfn.NUMBERVALUE":"NUMBERVALUE","_xlfn.PDURATION":"PDURATION","_xlfn.PERCENTILE.EXC":"PERCENTILE.EXC","_xlfn.PERCENTILE.INC":"PERCENTILE.INC","_xlfn.PERCENTRANK.EXC":"PERCENTRANK.EXC","_xlfn.PERCENTRANK.INC":"PERCENTRANK.INC","_xlfn.PERMUTATIONA":"PERMUTATIONA","_xlfn.PHI":"PHI","_xlfn.POISSON.DIST":"POISSON.DIST","_xlfn.QUARTILE.EXC":"QUARTILE.EXC","_xlfn.QUARTILE.INC":"QUARTILE.INC","_xlfn.QUERYSTRING":"QUERYSTRING","_xlfn.RANK.AVG":"RANK.AVG","_xlfn.RANK.EQ":"RANK.EQ","_xlfn.RRI":"RRI","_xlfn.SEC":"SEC","_xlfn.SECH":"SECH","_xlfn.SHEET":"SHEET","_xlfn.SHEETS":"SHEETS","_xlfn.SKEW.P":"SKEW.P","_xlfn.STDEV.P":"STDEV.P","_xlfn.STDEV.S":"STDEV.S","_xlfn.SUMIFS":"SUMIFS","_xlfn.T.DIST":"T.DIST","_xlfn.T.DIST.2T":"T.DIST.2T","_xlfn.T.DIST.RT":"T.DIST.RT","_xlfn.T.INV":"T.INV","_xlfn.T.INV.2T":"T.INV.2T","_xlfn.T.TEST":"T.TEST","_xlfn.UNICHAR":"UNICHAR","_xlfn.UNICODE":"UNICODE","_xlfn.VAR.P":"VAR.P","_xlfn.VAR.S":"VAR.S","_xlfn.WEBSERVICE":"WEBSERVICE","_xlfn.WEIBULL.DIST":"WEIBULL.DIST","_xlfn.WORKDAY.INTL":"WORKDAY.INTL","_xlfn.XOR":"XOR","_xlfn.Z.TEST":"Z.TEST"};var strs={};var _ssfopts={};RELS.WS="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet";function get_sst_id(sst,str){for(var i=0,len=sst.length;i<len;++i)if(sst[i].t===str){sst.Count++;return i}sst[len]={t:str};sst.Count++;sst.Unique++;return len}function get_cell_style(styles,cell,opts){if(typeof style_builder!="undefined"){if(/^\d+$/.exec(cell.s)){return cell.s}if(cell.s&&cell.s==+cell.s){return cell.s}var s=cell.s||{};if(cell.z)s.numFmt=cell.z;return style_builder.addStyle(s)}else{var z=opts.revssf[cell.z!=null?cell.z:"General"];for(var i=0,len=styles.length;i!=len;++i)if(styles[i].numFmtId===z)return i;styles[len]={numFmtId:z,fontId:0,fillId:0,borderId:0,xfId:0,applyNumberFormat:1};return len}}function get_cell_style_csf(cellXf){if(cellXf){var s={};if(typeof cellXf.numFmtId!=undefined){s.numFmt=SSF._table[cellXf.numFmtId]}if(cellXf.fillId){s.fill=styles.Fills[cellXf.fillId]}if(cellXf.fontId){s.font=styles.Fonts[cellXf.fontId]}if(cellXf.borderId){s.border=styles.Borders[cellXf.borderId]}if(cellXf.applyAlignment==1){s.alignment=cellXf.alignment}return JSON.parse(JSON.stringify(s))}return null}function safe_format(p,fmtid,fillid,opts){try{if(p.t==="e")p.w=p.w||BErr[p.v];else if(fmtid===0){if(p.t==="n"){if((p.v|0)===p.v)p.w=SSF._general_int(p.v,_ssfopts);else p.w=SSF._general_num(p.v,_ssfopts)}else if(p.t==="d"){var dd=datenum(p.v);if((dd|0)===dd)p.w=SSF._general_int(dd,_ssfopts);else p.w=SSF._general_num(dd,_ssfopts)}else if(p.v===undefined)return"";else p.w=SSF._general(p.v,_ssfopts)}else if(p.t==="d")p.w=SSF.format(fmtid,datenum(p.v),_ssfopts);else p.w=SSF.format(fmtid,p.v,_ssfopts);if(opts.cellNF)p.z=SSF._table[fmtid]}catch(e){if(opts.WTF)throw e}}function parse_ws_xml_dim(ws,s){var d=safe_decode_range(s);if(d.s.r<=d.e.r&&d.s.c<=d.e.c&&d.s.r>=0&&d.s.c>=0)ws["!ref"]=encode_range(d)}var mergecregex=/<mergeCell ref="[A-Z0-9:]+"\s*\/>/g;var sheetdataregex=/<(?:\w+:)?sheetData>([^\u2603]*)<\/(?:\w+:)?sheetData>/;var hlinkregex=/<hyperlink[^>]*\/>/g;var dimregex=/"(\w*:\w*)"/;var colregex=/<col[^>]*\/>/g;function parse_ws_xml(data,opts,rels){if(!data)return data;var s={};var ridx=data.indexOf("<dimension");if(ridx>0){var ref=data.substr(ridx,50).match(dimregex);if(ref!=null)parse_ws_xml_dim(s,ref[1])}var mergecells=[];if(data.indexOf("</mergeCells>")!==-1){var merges=data.match(mergecregex);for(ridx=0;ridx!=merges.length;++ridx)mergecells[ridx]=safe_decode_range(merges[ridx].substr(merges[ridx].indexOf('"')+1))}var columns=[];if(opts.cellStyles&&data.indexOf("</cols>")!==-1){var cols=data.match(colregex);parse_ws_xml_cols(columns,cols)}var refguess={s:{r:1e6,c:1e6},e:{r:0,c:0}};var mtch=data.match(sheetdataregex);if(mtch)parse_ws_xml_data(mtch[1],s,opts,refguess);if(data.indexOf("</hyperlinks>")!==-1)parse_ws_xml_hlinks(s,data.match(hlinkregex),rels);if(!s["!ref"]&&refguess.e.c>=refguess.s.c&&refguess.e.r>=refguess.s.r)s["!ref"]=encode_range(refguess);if(opts.sheetRows>0&&s["!ref"]){var tmpref=safe_decode_range(s["!ref"]);if(opts.sheetRows<+tmpref.e.r){tmpref.e.r=opts.sheetRows-1;if(tmpref.e.r>refguess.e.r)tmpref.e.r=refguess.e.r;if(tmpref.e.r<tmpref.s.r)tmpref.s.r=tmpref.e.r;if(tmpref.e.c>refguess.e.c)tmpref.e.c=refguess.e.c;if(tmpref.e.c<tmpref.s.c)tmpref.s.c=tmpref.e.c;s["!fullref"]=s["!ref"];s["!ref"]=encode_range(tmpref)}}if(mergecells.length>0)s["!merges"]=mergecells;if(columns.length>0)s["!cols"]=columns;return s}function write_ws_xml_merges(merges){if(merges.length==0)return"";var o='<mergeCells count="'+merges.length+'">';for(var i=0;i!=merges.length;++i)o+='<mergeCell ref="'+encode_range(merges[i])+'"/>';return o+"</mergeCells>"}function write_ws_xml_pagesetup(setup){var pageSetup=writextag("pageSetup",null,{scale:setup.scale||"100",orientation:setup.orientation||"portrait",horizontalDpi:setup.horizontalDpi||"4294967292",verticalDpi:setup.verticalDpi||"4294967292"});return pageSetup}function parse_ws_xml_hlinks(s,data,rels){for(var i=0;i!=data.length;++i){var val=parsexmltag(data[i],true);if(!val.ref)return;var rel=rels?rels["!id"][val.id]:null;if(rel){val.Target=rel.Target;if(val.location)val.Target+="#"+val.location;val.Rel=rel}else{val.Target=val.location;rel={Target:val.location,TargetMode:"Internal"};val.Rel=rel}var rng=safe_decode_range(val.ref);for(var R=rng.s.r;R<=rng.e.r;++R)for(var C=rng.s.c;C<=rng.e.c;++C){var addr=encode_cell({c:C,r:R});if(!s[addr])s[addr]={t:"stub",v:undefined};s[addr].l=val}}}function parse_ws_xml_cols(columns,cols){var seencol=false;for(var coli=0;coli!=cols.length;++coli){var coll=parsexmltag(cols[coli],true);var colm=parseInt(coll.min,10)-1,colM=parseInt(coll.max,10)-1;delete coll.min;delete coll.max;if(!seencol&&coll.width){seencol=true;find_mdw(+coll.width,coll)}if(coll.width){coll.wpx=width2px(+coll.width);coll.wch=px2char(coll.wpx);coll.MDW=MDW}while(colm<=colM)columns[colm++]=coll}}function write_ws_xml_cols(ws,cols){var o=["<cols>"],col,width;for(var i=0;i!=cols.length;++i){if(!(col=cols[i]))continue;var p={min:i+1,max:i+1};width=-1;if(col.wpx)width=px2char(col.wpx);else if(col.wch)width=col.wch;if(width>-1){p.width=char2width(width);p.customWidth=1}o[o.length]=writextag("col",null,p)}o[o.length]="</cols>";return o.join("")}function write_ws_xml_cell(cell,ref,ws,opts,idx,wb){if(cell.v===undefined&&cell.s===undefined)return"";var vv="";var oldt=cell.t,oldv=cell.v;switch(cell.t){case"b":vv=cell.v?"1":"0";break;case"n":vv=""+cell.v;break;case"e":vv=BErr[cell.v];break;case"d":if(opts.cellDates)vv=new Date(cell.v).toISOString();else{cell.t="n";vv=""+(cell.v=datenum(cell.v));if(typeof cell.z==="undefined")cell.z=SSF._table[14]}break;default:vv=cell.v;break}var v=writetag("v",escapexml(vv)),o={r:ref};var os=get_cell_style(opts.cellXfs,cell,opts);if(os!==0)o.s=os;switch(cell.t){case"n":break;case"d":o.t="d";break;case"b":o.t="b";break;case"e":o.t="e";break;default:if(opts.bookSST){v=writetag("v",""+get_sst_id(opts.Strings,cell.v));o.t="s";break}o.t="str";break}if(cell.t!=oldt){cell.t=oldt;cell.v=oldv}return writextag("c",v,o)}var parse_ws_xml_data=function parse_ws_xml_data_factory(){var cellregex=/<(?:\w+:)?c[ >]/,rowregex=/<\/(?:\w+:)?row>/;var rregex=/r=["']([^"']*)["']/,isregex=/<is>([\S\s]*?)<\/is>/;var match_v=matchtag("v"),match_f=matchtag("f");return function parse_ws_xml_data(sdata,s,opts,guess){var ri=0,x="",cells=[],cref=[],idx=0,i=0,cc=0,d="",p;var tag,tagr=0,tagc=0;var sstr;var fmtid=0,fillid=0,do_format=Array.isArray(styles.CellXf),cf;for(var marr=sdata.split(rowregex),mt=0,marrlen=marr.length;mt!=marrlen;++mt){x=marr[mt].trim();var xlen=x.length;if(xlen===0)continue;for(ri=0;ri<xlen;++ri)if(x.charCodeAt(ri)===62)break;++ri;tag=parsexmltag(x.substr(0,ri),true);tagr=typeof tag.r!=="undefined"?parseInt(tag.r,10):tagr+1;tagc=-1;if(opts.sheetRows&&opts.sheetRows<tagr)continue;if(guess.s.r>tagr-1)guess.s.r=tagr-1;if(guess.e.r<tagr-1)guess.e.r=tagr-1;cells=x.substr(ri).split(cellregex);for(ri=typeof tag.r==="undefined"?0:1;ri!=cells.length;++ri){x=cells[ri].trim();if(x.length===0)continue;cref=x.match(rregex);idx=ri;i=0;cc=0;x="<c "+(x.substr(0,1)=="<"?">":"")+x;if(cref!==null&&cref.length===2){idx=0;d=cref[1];for(i=0;i!=d.length;++i){if((cc=d.charCodeAt(i)-64)<1||cc>26)break;idx=26*idx+cc}--idx;tagc=idx}else++tagc;for(i=0;i!=x.length;++i)if(x.charCodeAt(i)===62)break;++i;tag=parsexmltag(x.substr(0,i),true);if(!tag.r)tag.r=utils.encode_cell({r:tagr-1,c:tagc});d=x.substr(i);p={t:""};if((cref=d.match(match_v))!==null&&cref[1]!=="")p.v=unescapexml(cref[1]);if(opts.cellFormula&&(cref=d.match(match_f))!==null)p.f=unescapexml(cref[1]);if(tag.t===undefined&&tag.s===undefined&&p.v===undefined){if(!opts.sheetStubs)continue;p.t="stub"}else p.t=tag.t||"n";if(guess.s.c>idx)guess.s.c=idx;if(guess.e.c<idx)guess.e.c=idx;switch(p.t){case"n":p.v=parseFloat(p.v);if(isNaN(p.v))p.v="";break;case"s":sstr=strs[parseInt(p.v,10)];p.v=sstr.t;p.r=sstr.r;if(opts.cellHTML)p.h=sstr.h;break;case"str":p.t="s";p.v=p.v!=null?utf8read(p.v):"";if(opts.cellHTML)p.h=p.v;break;case"inlineStr":cref=d.match(isregex);p.t="s";if(cref!==null){sstr=parse_si(cref[1]);p.v=sstr.t}else p.v="";break;case"b":p.v=parsexmlbool(p.v);break;case"d":if(!opts.cellDates){p.v=datenum(p.v);p.t="n"}break;case"e":p.w=p.v;p.v=RBErr[p.v];break}fmtid=fillid=0;if(do_format&&tag.s!==undefined){cf=styles.CellXf[tag.s];if(opts.cellStyles){p.s=get_cell_style_csf(cf)}if(cf!=null){if(cf.numFmtId!=null)fmtid=cf.numFmtId;if(opts.cellStyles&&cf.fillId!=null)fillid=cf.fillId}}safe_format(p,fmtid,fillid,opts);s[tag.r]=p}}}}();function write_ws_xml_data(ws,opts,idx,wb){var o=[],r=[],range=safe_decode_range(ws["!ref"]),cell,ref,rr="",cols=[],R,C;for(C=range.s.c;C<=range.e.c;++C)cols[C]=encode_col(C);for(R=range.s.r;R<=range.e.r;++R){r=[];rr=encode_row(R);for(C=range.s.c;C<=range.e.c;++C){ref=cols[C]+rr;if(ws[ref]===undefined)continue;if((cell=write_ws_xml_cell(ws[ref],ref,ws,opts,idx,wb))!=null)r.push(cell)}if(r.length>0)o[o.length]=writextag("row",r.join(""),{r:rr})}return o.join("")}var WS_XML_ROOT=writextag("worksheet",null,{xmlns:XMLNS.main[0],"xmlns:r":XMLNS.r});function write_ws_xml(idx,opts,wb){var o=[XML_HEADER,WS_XML_ROOT];var s=wb.SheetNames[idx],sidx=0,rdata="";var ws=wb.Sheets[s];if(ws===undefined)ws={};var ref=ws["!ref"];if(ref===undefined)ref="A1";o[o.length]=writextag("dimension",null,{ref:ref});var kids=[];if(ws["!freeze"]){var pane="";pane=writextag("pane",null,ws["!freeze"]);kids.push(pane);var selection=writextag("selection",null,{pane:"topLeft"});kids.push(selection);var selection=writextag("selection",null,{pane:"bottomLeft"});kids.push(selection);var selection=writextag("selection",null,{pane:"bottomRight",activeCell:ws["!freeze"],sqref:ws["!freeze"]});kids.push(selection)}var sheetView=writextag("sheetView",kids.join("")||undefined,{showGridLines:opts.showGridLines==false?"0":"1",tabSelected:opts.tabSelected===undefined?"0":opts.tabSelected,workbookViewId:opts.workbookViewId===undefined?"0":opts.workbookViewId});o[o.length]=writextag("sheetViews",sheetView);if(ws["!cols"]!==undefined&&ws["!cols"].length>0)o[o.length]=write_ws_xml_cols(ws,ws["!cols"]);o[sidx=o.length]="<sheetData/>";if(ws["!ref"]!==undefined){rdata=write_ws_xml_data(ws,opts,idx,wb);if(rdata.length>0)o[o.length]=rdata}if(o.length>sidx+1){o[o.length]="</sheetData>";o[sidx]=o[sidx].replace("/>",">")}if(ws["!merges"]!==undefined&&ws["!merges"].length>0)o[o.length]=write_ws_xml_merges(ws["!merges"]);if(ws["!pageSetup"]!==undefined)o[o.length]=write_ws_xml_pagesetup(ws["!pageSetup"]);if(ws["!rowBreaks"]!==undefined)o[o.length]=write_ws_xml_row_breaks(ws["!rowBreaks"]);if(ws["!colBreaks"]!==undefined)o[o.length]=write_ws_xml_col_breaks(ws["!colBreaks"]);if(o.length>2){o[o.length]="</worksheet>";o[1]=o[1].replace("/>",">")}return o.join("")}function write_ws_xml_row_breaks(breaks){var brk=[];for(var i=0;i<breaks.length;i++){var thisBreak=""+breaks[i];var nextBreak=""+(breaks[i+1]||"16383");brk.push(writextag("brk",null,{id:thisBreak,max:nextBreak,man:"1"}))}return writextag("rowBreaks",brk.join(" "),{count:brk.length,manualBreakCount:brk.length})}function write_ws_xml_col_breaks(breaks){var brk=[];for(var i=0;i<breaks.length;i++){var thisBreak=""+breaks[i];var nextBreak=""+(breaks[i+1]||"1048575");brk.push(writextag("brk",null,{id:thisBreak,max:nextBreak,man:"1"}))}return writextag("colBreaks",brk.join(" "),{count:brk.length,manualBreakCount:brk.length})}function parse_BrtRowHdr(data,length){var z=[];z.r=data.read_shift(4);data.l+=length-4;return z}var parse_BrtWsDim=parse_UncheckedRfX;var write_BrtWsDim=write_UncheckedRfX;function parse_BrtWsProp(data,length){var z={};data.l+=19;z.name=parse_XLSBCodeName(data,length-19);return z}function parse_BrtCellBlank(data,length){var cell=parse_XLSBCell(data);return[cell]}function write_BrtCellBlank(cell,val,o){if(o==null)o=new_buf(8);return write_XLSBCell(val,o)}function parse_BrtCellBool(data,length){var cell=parse_XLSBCell(data);var fBool=data.read_shift(1);return[cell,fBool,"b"]}function parse_BrtCellError(data,length){var cell=parse_XLSBCell(data);var fBool=data.read_shift(1);return[cell,fBool,"e"]}function parse_BrtCellIsst(data,length){var cell=parse_XLSBCell(data);var isst=data.read_shift(4);return[cell,isst,"s"]}function parse_BrtCellReal(data,length){var cell=parse_XLSBCell(data);var value=parse_Xnum(data);return[cell,value,"n"]}function parse_BrtCellRk(data,length){var cell=parse_XLSBCell(data);var value=parse_RkNumber(data);return[cell,value,"n"]}function parse_BrtCellSt(data,length){var cell=parse_XLSBCell(data);var value=parse_XLWideString(data);return[cell,value,"str"]}function parse_BrtFmlaBool(data,length,opts){var cell=parse_XLSBCell(data);var value=data.read_shift(1);var o=[cell,value,"b"];if(opts.cellFormula){var formula=parse_XLSBCellParsedFormula(data,length-9);o[3]=""}else data.l+=length-9;return o}function parse_BrtFmlaError(data,length,opts){var cell=parse_XLSBCell(data);var value=data.read_shift(1);var o=[cell,value,"e"];if(opts.cellFormula){var formula=parse_XLSBCellParsedFormula(data,length-9);o[3]=""}else data.l+=length-9;return o}function parse_BrtFmlaNum(data,length,opts){var cell=parse_XLSBCell(data);var value=parse_Xnum(data);var o=[cell,value,"n"];if(opts.cellFormula){var formula=parse_XLSBCellParsedFormula(data,length-16);o[3]=""}else data.l+=length-16;return o}function parse_BrtFmlaString(data,length,opts){var start=data.l;var cell=parse_XLSBCell(data);var value=parse_XLWideString(data);var o=[cell,value,"str"];if(opts.cellFormula){var formula=parse_XLSBCellParsedFormula(data,start+length-data.l)}else data.l=start+length;return o}var parse_BrtMergeCell=parse_UncheckedRfX;function parse_BrtHLink(data,length,opts){var end=data.l+length;var rfx=parse_UncheckedRfX(data,16);var relId=parse_XLNullableWideString(data);var loc=parse_XLWideString(data);var tooltip=parse_XLWideString(data);var display=parse_XLWideString(data);data.l=end;return{rfx:rfx,relId:relId,loc:loc,tooltip:tooltip,display:display}}function parse_ws_bin(data,opts,rels){if(!data)return data;if(!rels)rels={"!id":{}};var s={};var ref;var refguess={s:{r:1e6,c:1e6},e:{r:0,c:0}};var pass=false,end=false;var row,p,cf,R,C,addr,sstr,rr;var mergecells=[];recordhopper(data,function ws_parse(val,R){if(end)return;switch(R.n){case"BrtWsDim":ref=val;break;case"BrtRowHdr":row=val;if(opts.sheetRows&&opts.sheetRows<=row.r)end=true;rr=encode_row(row.r);break;case"BrtFmlaBool":case"BrtFmlaError":case"BrtFmlaNum":case"BrtFmlaString":case"BrtCellBool":case"BrtCellError":case"BrtCellIsst":case"BrtCellReal":case"BrtCellRk":case"BrtCellSt":p={t:val[2]};switch(val[2]){case"n":p.v=val[1];break;case"s":sstr=strs[val[1]];p.v=sstr.t;p.r=sstr.r;break;case"b":p.v=val[1]?true:false;break;case"e":p.v=val[1];p.w=BErr[p.v];break;case"str":p.t="s";p.v=utf8read(val[1]);break}if(opts.cellFormula&&val.length>3)p.f=val[3];if(cf=styles.CellXf[val[0].iStyleRef])safe_format(p,cf.ifmt,null,opts);s[encode_col(C=val[0].c)+rr]=p;if(refguess.s.r>row.r)refguess.s.r=row.r;if(refguess.s.c>C)refguess.s.c=C;if(refguess.e.r<row.r)refguess.e.r=row.r;if(refguess.e.c<C)refguess.e.c=C;break;case"BrtCellBlank":if(!opts.sheetStubs)break;p={t:"s",v:undefined};s[encode_col(C=val[0].c)+rr]=p;if(refguess.s.r>row.r)refguess.s.r=row.r;if(refguess.s.c>C)refguess.s.c=C;if(refguess.e.r<row.r)refguess.e.r=row.r;if(refguess.e.c<C)refguess.e.c=C;break;case"BrtBeginMergeCells":break;case"BrtEndMergeCells":break;case"BrtMergeCell":mergecells.push(val);break;case"BrtHLink":var rel=rels["!id"][val.relId];if(rel){val.Target=rel.Target;if(val.loc)val.Target+="#"+val.loc;val.Rel=rel}for(R=val.rfx.s.r;R<=val.rfx.e.r;++R)for(C=val.rfx.s.c;C<=val.rfx.e.c;++C){addr=encode_cell({c:C,r:R});if(!s[addr])s[addr]={t:"s",v:undefined};s[addr].l=val}break;case"BrtArrFmla":break;case"BrtShrFmla":break;case"BrtBeginSheet":break;case"BrtWsProp":break;case"BrtSheetCalcProp":break;case"BrtBeginWsViews":break;case"BrtBeginWsView":break;case"BrtPane":break;case"BrtSel":break;case"BrtEndWsView":break;case"BrtEndWsViews":break;case"BrtACBegin":break;case"BrtRwDescent":break;case"BrtACEnd":break;case"BrtWsFmtInfoEx14":break;case"BrtWsFmtInfo":break;case"BrtBeginColInfos":break;case"BrtColInfo":break;case"BrtEndColInfos":break;
+case"BrtBeginSheetData":break;case"BrtEndSheetData":break;case"BrtSheetProtection":break;case"BrtPrintOptions":break;case"BrtMargins":break;case"BrtPageSetup":break;case"BrtFRTBegin":pass=true;break;case"BrtFRTEnd":pass=false;break;case"BrtEndSheet":break;case"BrtDrawing":break;case"BrtLegacyDrawing":break;case"BrtLegacyDrawingHF":break;case"BrtPhoneticInfo":break;case"BrtBeginHeaderFooter":break;case"BrtEndHeaderFooter":break;case"BrtBrk":break;case"BrtBeginRwBrk":break;case"BrtEndRwBrk":break;case"BrtBeginColBrk":break;case"BrtEndColBrk":break;case"BrtBeginUserShViews":break;case"BrtBeginUserShView":break;case"BrtEndUserShView":break;case"BrtEndUserShViews":break;case"BrtBkHim":break;case"BrtBeginOleObjects":break;case"BrtOleObject":break;case"BrtEndOleObjects":break;case"BrtBeginListParts":break;case"BrtListPart":break;case"BrtEndListParts":break;case"BrtBeginSortState":break;case"BrtBeginSortCond":break;case"BrtEndSortCond":break;case"BrtEndSortState":break;case"BrtBeginConditionalFormatting":break;case"BrtEndConditionalFormatting":break;case"BrtBeginCFRule":break;case"BrtEndCFRule":break;case"BrtBeginDVals":break;case"BrtDVal":break;case"BrtEndDVals":break;case"BrtRangeProtection":break;case"BrtBeginDCon":break;case"BrtEndDCon":break;case"BrtBeginDRefs":break;case"BrtDRef":break;case"BrtEndDRefs":break;case"BrtBeginActiveXControls":break;case"BrtActiveX":break;case"BrtEndActiveXControls":break;case"BrtBeginAFilter":break;case"BrtEndAFilter":break;case"BrtBeginFilterColumn":break;case"BrtBeginFilters":break;case"BrtFilter":break;case"BrtEndFilters":break;case"BrtEndFilterColumn":break;case"BrtDynamicFilter":break;case"BrtTop10Filter":break;case"BrtBeginCustomFilters":break;case"BrtCustomFilter":break;case"BrtEndCustomFilters":break;case"BrtBeginSmartTags":break;case"BrtBeginCellSmartTags":break;case"BrtBeginCellSmartTag":break;case"BrtCellSmartTagProperty":break;case"BrtEndCellSmartTag":break;case"BrtEndCellSmartTags":break;case"BrtEndSmartTags":break;case"BrtBeginCellWatches":break;case"BrtCellWatch":break;case"BrtEndCellWatches":break;case"BrtTable":break;case"BrtBeginCellIgnoreECs":break;case"BrtCellIgnoreEC":break;case"BrtEndCellIgnoreECs":break;default:if(!pass||opts.WTF)throw new Error("Unexpected record "+R.n)}},opts);if(!s["!ref"]&&(refguess.s.r<1e6||ref.e.r>0||ref.e.c>0||ref.s.r>0||ref.s.c>0))s["!ref"]=encode_range(ref);if(opts.sheetRows&&s["!ref"]){var tmpref=safe_decode_range(s["!ref"]);if(opts.sheetRows<+tmpref.e.r){tmpref.e.r=opts.sheetRows-1;if(tmpref.e.r>refguess.e.r)tmpref.e.r=refguess.e.r;if(tmpref.e.r<tmpref.s.r)tmpref.s.r=tmpref.e.r;if(tmpref.e.c>refguess.e.c)tmpref.e.c=refguess.e.c;if(tmpref.e.c<tmpref.s.c)tmpref.s.c=tmpref.e.c;s["!fullref"]=s["!ref"];s["!ref"]=encode_range(tmpref)}}if(mergecells.length>0)s["!merges"]=mergecells;return s}function write_ws_bin_cell(ba,cell,R,C,opts){if(cell.v===undefined)return"";var vv="";switch(cell.t){case"b":vv=cell.v?"1":"0";break;case"n":case"e":vv=""+cell.v;break;default:vv=cell.v;break}var o={r:R,c:C};o.s=get_cell_style(opts.cellXfs,cell,opts);switch(cell.t){case"s":case"str":if(opts.bookSST){vv=get_sst_id(opts.Strings,cell.v);o.t="s";break}o.t="str";break;case"n":break;case"b":o.t="b";break;case"e":o.t="e";break}write_record(ba,"BrtCellBlank",write_BrtCellBlank(cell,o))}function write_CELLTABLE(ba,ws,idx,opts,wb){var range=safe_decode_range(ws["!ref"]||"A1"),ref,rr="",cols=[];write_record(ba,"BrtBeginSheetData");for(var R=range.s.r;R<=range.e.r;++R){rr=encode_row(R);for(var C=range.s.c;C<=range.e.c;++C){if(R===range.s.r)cols[C]=encode_col(C);ref=cols[C]+rr;if(!ws[ref])continue;write_ws_bin_cell(ba,ws[ref],R,C,opts)}}write_record(ba,"BrtEndSheetData")}function write_ws_bin(idx,opts,wb){var ba=buf_array();var s=wb.SheetNames[idx],ws=wb.Sheets[s]||{};var r=safe_decode_range(ws["!ref"]||"A1");write_record(ba,"BrtBeginSheet");write_record(ba,"BrtWsDim",write_BrtWsDim(r));write_CELLTABLE(ba,ws,idx,opts,wb);write_record(ba,"BrtEndSheet");return ba.end()}var WBPropsDef=[["allowRefreshQuery","0"],["autoCompressPictures","1"],["backupFile","0"],["checkCompatibility","0"],["codeName",""],["date1904","0"],["dateCompatibility","1"],["filterPrivacy","0"],["hidePivotFieldList","0"],["promptedSolutions","0"],["publishItems","0"],["refreshAllConnections",false],["saveExternalLinkValues","1"],["showBorderUnselectedTables","1"],["showInkAnnotation","1"],["showObjects","all"],["showPivotChartFilter","0"]];var WBViewDef=[["activeTab","0"],["autoFilterDateGrouping","1"],["firstSheet","0"],["minimized","0"],["showHorizontalScroll","1"],["showSheetTabs","1"],["showVerticalScroll","1"],["tabRatio","600"],["visibility","visible"]];var SheetDef=[["state","visible"]];var CalcPrDef=[["calcCompleted","true"],["calcMode","auto"],["calcOnSave","true"],["concurrentCalc","true"],["fullCalcOnLoad","false"],["fullPrecision","true"],["iterate","false"],["iterateCount","100"],["iterateDelta","0.001"],["refMode","A1"]];var CustomWBViewDef=[["autoUpdate","false"],["changesSavedWin","false"],["includeHiddenRowCol","true"],["includePrintSettings","true"],["maximized","false"],["minimized","false"],["onlySync","false"],["personalView","false"],["showComments","commIndicator"],["showFormulaBar","true"],["showHorizontalScroll","true"],["showObjects","all"],["showSheetTabs","true"],["showStatusbar","true"],["showVerticalScroll","true"],["tabRatio","600"],["xWindow","0"],["yWindow","0"]];function push_defaults_array(target,defaults){for(var j=0;j!=target.length;++j){var w=target[j];for(var i=0;i!=defaults.length;++i){var z=defaults[i];if(w[z[0]]==null)w[z[0]]=z[1]}}}function push_defaults(target,defaults){for(var i=0;i!=defaults.length;++i){var z=defaults[i];if(target[z[0]]==null)target[z[0]]=z[1]}}function parse_wb_defaults(wb){push_defaults(wb.WBProps,WBPropsDef);push_defaults(wb.CalcPr,CalcPrDef);push_defaults_array(wb.WBView,WBViewDef);push_defaults_array(wb.Sheets,SheetDef);_ssfopts.date1904=parsexmlbool(wb.WBProps.date1904,"date1904")}var wbnsregex=/<\w+:workbook/;function parse_wb_xml(data,opts){var wb={AppVersion:{},WBProps:{},WBView:[],Sheets:[],CalcPr:{},xmlns:""};var pass=false,xmlns="xmlns";data.match(tagregex).forEach(function xml_wb(x){var y=parsexmltag(x);switch(strip_ns(y[0])){case"<?xml":break;case"<workbook":if(x.match(wbnsregex))xmlns="xmlns"+x.match(/<(\w+):/)[1];wb.xmlns=y[xmlns];break;case"</workbook>":break;case"<fileVersion":delete y[0];wb.AppVersion=y;break;case"<fileVersion/>":break;case"<fileSharing":case"<fileSharing/>":break;case"<workbookPr":delete y[0];wb.WBProps=y;break;case"<workbookPr/>":delete y[0];wb.WBProps=y;break;case"<workbookProtection":break;case"<workbookProtection/>":break;case"<bookViews>":case"</bookViews>":break;case"<workbookView":delete y[0];wb.WBView.push(y);break;case"<sheets>":case"</sheets>":break;case"<sheet":delete y[0];y.name=utf8read(y.name);wb.Sheets.push(y);break;case"<functionGroups":case"<functionGroups/>":break;case"<functionGroup":break;case"<externalReferences":case"</externalReferences>":case"<externalReferences>":break;case"<externalReference":break;case"<definedNames/>":break;case"<definedNames>":case"<definedNames":pass=true;break;case"</definedNames>":pass=false;break;case"<definedName":case"<definedName/>":case"</definedName>":break;case"<calcPr":delete y[0];wb.CalcPr=y;break;case"<calcPr/>":delete y[0];wb.CalcPr=y;break;case"<oleSize":break;case"<customWorkbookViews>":case"</customWorkbookViews>":case"<customWorkbookViews":break;case"<customWorkbookView":case"</customWorkbookView>":break;case"<pivotCaches>":case"</pivotCaches>":case"<pivotCaches":break;case"<pivotCache":break;case"<smartTagPr":case"<smartTagPr/>":break;case"<smartTagTypes":case"<smartTagTypes>":case"</smartTagTypes>":break;case"<smartTagType":break;case"<webPublishing":case"<webPublishing/>":break;case"<fileRecoveryPr":case"<fileRecoveryPr/>":break;case"<webPublishObjects>":case"<webPublishObjects":case"</webPublishObjects>":break;case"<webPublishObject":break;case"<extLst>":case"</extLst>":case"<extLst/>":break;case"<ext":pass=true;break;case"</ext>":pass=false;break;case"<ArchID":break;case"<AlternateContent":pass=true;break;case"</AlternateContent>":pass=false;break;default:if(!pass&&opts.WTF)throw"unrecognized "+y[0]+" in workbook"}});if(XMLNS.main.indexOf(wb.xmlns)===-1)throw new Error("Unknown Namespace: "+wb.xmlns);parse_wb_defaults(wb);return wb}var WB_XML_ROOT=writextag("workbook",null,{xmlns:XMLNS.main[0],"xmlns:r":XMLNS.r});function safe1904(wb){try{return parsexmlbool(wb.Workbook.WBProps.date1904)?"true":"false"}catch(e){return"false"}}function write_wb_xml(wb,opts){var o=[XML_HEADER];o[o.length]=WB_XML_ROOT;o[o.length]=writextag("workbookPr",null,{date1904:safe1904(wb)});o[o.length]="<sheets>";for(var i=0;i!=wb.SheetNames.length;++i)o[o.length]=writextag("sheet",null,{name:wb.SheetNames[i].substr(0,31),sheetId:""+(i+1),"r:id":"rId"+(i+1)});o[o.length]="</sheets>";var hasPrintHeaders=false;for(var i=0;i!=wb.SheetNames.length;++i){var sheetName=wb.SheetNames[i];var sheet=wb.Sheets[sheetName];if(sheet["!printHeader"]){if(sheet["!printHeader"].length!==2){throw"!printHeaders must be an array of length 2: "+sheet["!printHeader"]}hasPrintHeaders=true}}if(hasPrintHeaders){o[o.length]="<definedNames>";for(var i=0;i!=wb.SheetNames.length;++i){var sheetName=wb.SheetNames[i];var sheet=wb.Sheets[sheetName];if(sheet["!printHeader"]||sheet["!printColumns"]){var printHeader=sheet["!printHeader"];var printColumns=sheet["!printColumns"];var range="";if(printColumns)range+="'"+sheetName+"'!"+("$"+printColumns[0]+":$"+printColumns[1]);if(printColumns&&printHeader)range+=",";if(printHeader)range+="'"+sheetName+"'!"+("$"+printHeader[0]+":$"+printHeader[1]);console.log("-----------------------------");console.log(range);o[o.length]=writextag("definedName",range,{name:"_xlnm.Print_Titles",localSheetId:""+i})}}o[o.length]="</definedNames>"}if(o.length>2){o[o.length]="</workbook>";o[1]=o[1].replace("/>",">")}return o.join("")}function parse_BrtBundleSh(data,length){var z={};z.hsState=data.read_shift(4);z.iTabID=data.read_shift(4);z.strRelID=parse_RelID(data,length-8);z.name=parse_XLWideString(data);return z}function write_BrtBundleSh(data,o){if(!o)o=new_buf(127);o.write_shift(4,data.hsState);o.write_shift(4,data.iTabID);write_RelID(data.strRelID,o);write_XLWideString(data.name.substr(0,31),o);return o}function parse_BrtWbProp(data,length){data.read_shift(4);var dwThemeVersion=data.read_shift(4);var strName=length>8?parse_XLWideString(data):"";return[dwThemeVersion,strName]}function write_BrtWbProp(data,o){if(!o)o=new_buf(8);o.write_shift(4,0);o.write_shift(4,0);return o}function parse_BrtFRTArchID$(data,length){var o={};data.read_shift(4);o.ArchID=data.read_shift(4);data.l+=length-8;return o}function parse_wb_bin(data,opts){var wb={AppVersion:{},WBProps:{},WBView:[],Sheets:[],CalcPr:{},xmlns:""};var pass=false,z;recordhopper(data,function hopper_wb(val,R){switch(R.n){case"BrtBundleSh":wb.Sheets.push(val);break;case"BrtBeginBook":break;case"BrtFileVersion":break;case"BrtWbProp":break;case"BrtACBegin":break;case"BrtAbsPath15":break;case"BrtACEnd":break;case"BrtWbFactoid":break;case"BrtBookProtection":break;case"BrtBeginBookViews":break;case"BrtBookView":break;case"BrtEndBookViews":break;case"BrtBeginBundleShs":break;case"BrtEndBundleShs":break;case"BrtBeginFnGroup":break;case"BrtEndFnGroup":break;case"BrtBeginExternals":break;case"BrtSupSelf":break;case"BrtSupBookSrc":break;case"BrtExternSheet":break;case"BrtEndExternals":break;case"BrtName":break;case"BrtCalcProp":break;case"BrtUserBookView":break;case"BrtBeginPivotCacheIDs":break;case"BrtBeginPivotCacheID":break;case"BrtEndPivotCacheID":break;case"BrtEndPivotCacheIDs":break;case"BrtWebOpt":break;case"BrtFileRecover":break;case"BrtFileSharing":break;case"BrtBeginSmartTagTypes":break;case"BrtSmartTagType":break;case"BrtEndSmartTagTypes":break;case"BrtFRTBegin":pass=true;break;case"BrtFRTArchID$":break;case"BrtWorkBookPr15":break;case"BrtFRTEnd":pass=false;break;case"BrtEndBook":break;default:if(!pass||opts.WTF)throw new Error("Unexpected record "+R.n)}});parse_wb_defaults(wb);return wb}function write_BUNDLESHS(ba,wb,opts){write_record(ba,"BrtBeginBundleShs");for(var idx=0;idx!=wb.SheetNames.length;++idx){var d={hsState:0,iTabID:idx+1,strRelID:"rId"+(idx+1),name:wb.SheetNames[idx]};write_record(ba,"BrtBundleSh",write_BrtBundleSh(d))}write_record(ba,"BrtEndBundleShs")}function write_BrtFileVersion(data,o){if(!o)o=new_buf(127);for(var i=0;i!=4;++i)o.write_shift(4,0);write_XLWideString("SheetJS",o);write_XLWideString(XLSX.version,o);write_XLWideString(XLSX.version,o);write_XLWideString("7262",o);o.length=o.l;return o}function write_BOOKVIEWS(ba,wb,opts){write_record(ba,"BrtBeginBookViews");write_record(ba,"BrtEndBookViews")}function write_BrtCalcProp(data,o){if(!o)o=new_buf(26);o.write_shift(4,0);o.write_shift(4,1);o.write_shift(4,0);write_Xnum(0,o);o.write_shift(-4,1023);o.write_shift(1,51);o.write_shift(1,0);return o}function write_BrtFileRecover(data,o){if(!o)o=new_buf(1);o.write_shift(1,0);return o}function write_wb_bin(wb,opts){var ba=buf_array();write_record(ba,"BrtBeginBook");write_record(ba,"BrtFileVersion",write_BrtFileVersion());write_record(ba,"BrtWbProp",write_BrtWbProp());write_BOOKVIEWS(ba,wb,opts);write_BUNDLESHS(ba,wb,opts);write_record(ba,"BrtCalcProp",write_BrtCalcProp());write_record(ba,"BrtFileRecover",write_BrtFileRecover());write_record(ba,"BrtEndBook");return ba.end()}function parse_wb(data,name,opts){return(name.substr(-4)===".bin"?parse_wb_bin:parse_wb_xml)(data,opts)}function parse_ws(data,name,opts,rels){return(name.substr(-4)===".bin"?parse_ws_bin:parse_ws_xml)(data,opts,rels)}function parse_sty(data,name,opts){return(name.substr(-4)===".bin"?parse_sty_bin:parse_sty_xml)(data,opts)}function parse_theme(data,name,opts){return parse_theme_xml(data,opts)}function parse_sst(data,name,opts){return(name.substr(-4)===".bin"?parse_sst_bin:parse_sst_xml)(data,opts)}function parse_cmnt(data,name,opts){return(name.substr(-4)===".bin"?parse_comments_bin:parse_comments_xml)(data,opts)}function parse_cc(data,name,opts){return(name.substr(-4)===".bin"?parse_cc_bin:parse_cc_xml)(data,opts)}function write_wb(wb,name,opts){return(name.substr(-4)===".bin"?write_wb_bin:write_wb_xml)(wb,opts)}function write_ws(data,name,opts,wb){return(name.substr(-4)===".bin"?write_ws_bin:write_ws_xml)(data,opts,wb)}function write_sty(data,name,opts){return(name.substr(-4)===".bin"?write_sty_bin:write_sty_xml)(data,opts)}function write_sst(data,name,opts){return(name.substr(-4)===".bin"?write_sst_bin:write_sst_xml)(data,opts)}var attregexg2=/([\w:]+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:'))/g;var attregex2=/([\w:]+)=((?:")(?:[^"]*)(?:")|(?:')(?:[^']*)(?:'))/;var _chr=function(c){return String.fromCharCode(c)};function xlml_parsexmltag(tag,skip_root){var words=tag.split(/\s+/);var z=[];if(!skip_root)z[0]=words[0];if(words.length===1)return z;var m=tag.match(attregexg2),y,j,w,i;if(m)for(i=0;i!=m.length;++i){y=m[i].match(attregex2);if((j=y[1].indexOf(":"))===-1)z[y[1]]=y[2].substr(1,y[2].length-2);else{if(y[1].substr(0,6)==="xmlns:")w="xmlns"+y[1].substr(6);else w=y[1].substr(j+1);z[w]=y[2].substr(1,y[2].length-2)}}return z}function xlml_parsexmltagobj(tag){var words=tag.split(/\s+/);var z={};if(words.length===1)return z;var m=tag.match(attregexg2),y,j,w,i;if(m)for(i=0;i!=m.length;++i){y=m[i].match(attregex2);if((j=y[1].indexOf(":"))===-1)z[y[1]]=y[2].substr(1,y[2].length-2);else{if(y[1].substr(0,6)==="xmlns:")w="xmlns"+y[1].substr(6);else w=y[1].substr(j+1);z[w]=y[2].substr(1,y[2].length-2)}}return z}function xlml_format(format,value){var fmt=XLMLFormatMap[format]||unescapexml(format);if(fmt==="General")return SSF._general(value);return SSF.format(fmt,value)}function xlml_set_custprop(Custprops,Rn,cp,val){switch((cp[0].match(/dt:dt="([\w.]+)"/)||["",""])[1]){case"boolean":val=parsexmlbool(val);break;case"i2":case"int":val=parseInt(val,10);break;case"r4":case"float":val=parseFloat(val);break;case"date":case"dateTime.tz":val=new Date(val);break;case"i8":case"string":case"fixed":case"uuid":case"bin.base64":break;default:throw"bad custprop:"+cp[0]}Custprops[unescapexml(Rn[3])]=val}function safe_format_xlml(cell,nf,o){try{if(cell.t==="e"){cell.w=cell.w||BErr[cell.v]}else if(nf==="General"){if(cell.t==="n"){if((cell.v|0)===cell.v)cell.w=SSF._general_int(cell.v);else cell.w=SSF._general_num(cell.v)}else cell.w=SSF._general(cell.v)}else cell.w=xlml_format(nf||"General",cell.v);if(o.cellNF)cell.z=XLMLFormatMap[nf]||nf||"General"}catch(e){if(o.WTF)throw e}}function process_style_xlml(styles,stag,opts){if(opts.cellStyles){if(stag.Interior){var I=stag.Interior;if(I.Pattern)I.patternType=XLMLPatternTypeMap[I.Pattern]||I.Pattern}}styles[stag.ID]=stag}function parse_xlml_data(xml,ss,data,cell,base,styles,csty,row,o){var nf="General",sid=cell.StyleID,S={};o=o||{};var interiors=[];if(sid===undefined&&row)sid=row.StyleID;if(sid===undefined&&csty)sid=csty.StyleID;while(styles[sid]!==undefined){if(styles[sid].nf)nf=styles[sid].nf;if(styles[sid].Interior)interiors.push(styles[sid].Interior);if(!styles[sid].Parent)break;sid=styles[sid].Parent}switch(data.Type){case"Boolean":cell.t="b";cell.v=parsexmlbool(xml);break;case"String":cell.t="s";cell.r=xlml_fixstr(unescapexml(xml));cell.v=xml.indexOf("<")>-1?ss:cell.r;break;case"DateTime":cell.v=(Date.parse(xml)-new Date(Date.UTC(1899,11,30)))/(24*60*60*1e3);if(cell.v!==cell.v)cell.v=unescapexml(xml);else if(cell.v>=1&&cell.v<60)cell.v=cell.v-1;if(!nf||nf=="General")nf="yyyy-mm-dd";case"Number":if(cell.v===undefined)cell.v=+xml;if(!cell.t)cell.t="n";break;case"Error":cell.t="e";cell.v=RBErr[xml];cell.w=xml;break;default:cell.t="s";cell.v=xlml_fixstr(ss);break}safe_format_xlml(cell,nf,o);if(o.cellFormula!=null&&cell.Formula){cell.f=rc_to_a1(unescapexml(cell.Formula),base);cell.Formula=undefined}if(o.cellStyles){interiors.forEach(function(x){if(!S.patternType&&x.patternType)S.patternType=x.patternType});cell.s=S}cell.ixfe=cell.StyleID!==undefined?cell.StyleID:"Default"}function xlml_clean_comment(comment){comment.t=comment.v;comment.v=comment.w=comment.ixfe=undefined}function xlml_normalize(d){if(has_buf&&Buffer.isBuffer(d))return d.toString("utf8");if(typeof d==="string")return d;throw"badf"}var xlmlregex=/<(\/?)([a-z0-9]*:|)(\w+)[^>]*>/gm;function parse_xlml_xml(d,opts){var str=xlml_normalize(d);var Rn;var state=[],tmp;var sheets={},sheetnames=[],cursheet={},sheetname="";var table={},cell={},row={},dtag,didx;var c=0,r=0;var refguess={s:{r:1e6,c:1e6},e:{r:0,c:0}};var styles={},stag={};var ss="",fidx=0;var mergecells=[];var Props={},Custprops={},pidx=0,cp={};var comments=[],comment={};var cstys=[],csty;xlmlregex.lastIndex=0;while(Rn=xlmlregex.exec(str))switch(Rn[3]){case"Data":if(state[state.length-1][1])break;if(Rn[1]==="/")parse_xlml_data(str.slice(didx,Rn.index),ss,dtag,state[state.length-1][0]=="Comment"?comment:cell,{c:c,r:r},styles,cstys[c],row,opts);else{ss="";dtag=xlml_parsexmltag(Rn[0]);didx=Rn.index+Rn[0].length}break;case"Cell":if(Rn[1]==="/"){if(comments.length>0)cell.c=comments;if((!opts.sheetRows||opts.sheetRows>r)&&cell.v!==undefined)cursheet[encode_col(c)+encode_row(r)]=cell;if(cell.HRef){cell.l={Target:cell.HRef,tooltip:cell.HRefScreenTip};cell.HRef=cell.HRefScreenTip=undefined}if(cell.MergeAcross||cell.MergeDown){var cc=c+(parseInt(cell.MergeAcross,10)|0);var rr=r+(parseInt(cell.MergeDown,10)|0);mergecells.push({s:{c:c,r:r},e:{c:cc,r:rr}})}++c;if(cell.MergeAcross)c+=+cell.MergeAcross}else{cell=xlml_parsexmltagobj(Rn[0]);if(cell.Index)c=+cell.Index-1;if(c<refguess.s.c)refguess.s.c=c;if(c>refguess.e.c)refguess.e.c=c;if(Rn[0].substr(-2)==="/>")++c;comments=[]}break;case"Row":if(Rn[1]==="/"||Rn[0].substr(-2)==="/>"){if(r<refguess.s.r)refguess.s.r=r;if(r>refguess.e.r)refguess.e.r=r;if(Rn[0].substr(-2)==="/>"){row=xlml_parsexmltag(Rn[0]);if(row.Index)r=+row.Index-1}c=0;++r}else{row=xlml_parsexmltag(Rn[0]);if(row.Index)r=+row.Index-1}break;case"Worksheet":if(Rn[1]==="/"){if((tmp=state.pop())[0]!==Rn[3])throw"Bad state: "+tmp;sheetnames.push(sheetname);if(refguess.s.r<=refguess.e.r&&refguess.s.c<=refguess.e.c)cursheet["!ref"]=encode_range(refguess);if(mergecells.length)cursheet["!merges"]=mergecells;sheets[sheetname]=cursheet}else{refguess={s:{r:1e6,c:1e6},e:{r:0,c:0}};r=c=0;state.push([Rn[3],false]);tmp=xlml_parsexmltag(Rn[0]);sheetname=tmp.Name;cursheet={};mergecells=[]}break;case"Table":if(Rn[1]==="/"){if((tmp=state.pop())[0]!==Rn[3])throw"Bad state: "+tmp}else if(Rn[0].slice(-2)=="/>")break;else{table=xlml_parsexmltag(Rn[0]);state.push([Rn[3],false]);cstys=[]}break;case"Style":if(Rn[1]==="/")process_style_xlml(styles,stag,opts);else stag=xlml_parsexmltag(Rn[0]);break;case"NumberFormat":stag.nf=xlml_parsexmltag(Rn[0]).Format||"General";break;case"Column":if(state[state.length-1][0]!=="Table")break;csty=xlml_parsexmltag(Rn[0]);cstys[csty.Index-1||cstys.length]=csty;for(var i=0;i<+csty.Span;++i)cstys[cstys.length]=csty;break;case"NamedRange":break;case"NamedCell":break;case"B":break;case"I":break;case"U":break;case"S":break;case"Sub":break;case"Sup":break;case"Span":break;case"Border":break;case"Alignment":break;case"Borders":break;case"Font":if(Rn[0].substr(-2)==="/>")break;else if(Rn[1]==="/")ss+=str.slice(fidx,Rn.index);else fidx=Rn.index+Rn[0].length;break;case"Interior":if(!opts.cellStyles)break;stag.Interior=xlml_parsexmltag(Rn[0]);break;case"Protection":break;case"Author":case"Title":case"Description":case"Created":case"Keywords":case"Subject":case"Category":case"Company":case"LastAuthor":case"LastSaved":case"LastPrinted":case"Version":case"Revision":case"TotalTime":case"HyperlinkBase":case"Manager":if(Rn[0].substr(-2)==="/>")break;else if(Rn[1]==="/")xlml_set_prop(Props,Rn[3],str.slice(pidx,Rn.index));else pidx=Rn.index+Rn[0].length;break;case"Paragraphs":break;case"Styles":case"Workbook":if(Rn[1]==="/"){if((tmp=state.pop())[0]!==Rn[3])throw"Bad state: "+tmp}else state.push([Rn[3],false]);break;case"Comment":if(Rn[1]==="/"){if((tmp=state.pop())[0]!==Rn[3])throw"Bad state: "+tmp;xlml_clean_comment(comment);comments.push(comment)}else{state.push([Rn[3],false]);tmp=xlml_parsexmltag(Rn[0]);comment={a:tmp.Author}}break;case"Name":break;case"ComponentOptions":case"DocumentProperties":case"CustomDocumentProperties":case"OfficeDocumentSettings":case"PivotTable":case"PivotCache":case"Names":case"MapInfo":case"PageBreaks":case"QueryTable":case"DataValidation":case"AutoFilter":case"Sorting":case"Schema":case"data":case"ConditionalFormatting":case"SmartTagType":case"SmartTags":case"ExcelWorkbook":case"WorkbookOptions":case"WorksheetOptions":if(Rn[1]==="/"){if((tmp=state.pop())[0]!==Rn[3])throw"Bad state: "+tmp}else if(Rn[0].charAt(Rn[0].length-2)!=="/")state.push([Rn[3],true]);break;default:var seen=true;switch(state[state.length-1][0]){case"OfficeDocumentSettings":switch(Rn[3]){case"AllowPNG":break;case"RemovePersonalInformation":break;case"DownloadComponents":break;case"LocationOfComponents":break;case"Colors":break;case"Color":break;case"Index":break;case"RGB":break;case"PixelsPerInch":break;case"TargetScreenSize":break;case"ReadOnlyRecommended":break;default:seen=false}break;case"ComponentOptions":switch(Rn[3]){case"Toolbar":break;case"HideOfficeLogo":break;case"SpreadsheetAutoFit":break;case"Label":break;case"Caption":break;case"MaxHeight":break;case"MaxWidth":break;case"NextSheetNumber":break;default:seen=false}break;case"ExcelWorkbook":switch(Rn[3]){case"WindowHeight":break;case"WindowWidth":break;case"WindowTopX":break;case"WindowTopY":break;case"TabRatio":break;case"ProtectStructure":break;case"ProtectWindows":break;case"ActiveSheet":break;case"DisplayInkNotes":break;case"FirstVisibleSheet":break;case"SupBook":break;case"SheetName":break;case"SheetIndex":break;case"SheetIndexFirst":break;case"SheetIndexLast":break;case"Dll":break;case"AcceptLabelsInFormulas":break;case"DoNotSaveLinkValues":break;case"Date1904":break;case"Iteration":break;case"MaxIterations":break;case"MaxChange":break;case"Path":break;case"Xct":break;case"Count":break;case"SelectedSheets":break;case"Calculation":break;case"Uncalced":break;case"StartupPrompt":break;case"Crn":break;case"ExternName":break;case"Formula":break;case"ColFirst":break;case"ColLast":break;case"WantAdvise":break;case"Boolean":break;case"Error":break;case"Text":break;case"OLE":break;case"NoAutoRecover":break;case"PublishObjects":break;case"DoNotCalculateBeforeSave":break;case"Number":break;case"RefModeR1C1":break;case"EmbedSaveSmartTags":break;default:seen=false}break;case"WorkbookOptions":switch(Rn[3]){case"OWCVersion":break;case"Height":break;case"Width":break;default:seen=false}break;case"WorksheetOptions":switch(Rn[3]){case"Unsynced":break;case"Visible":break;case"Print":break;case"Panes":break;case"Scale":break;case"Pane":break;case"Number":break;case"Layout":break;case"Header":break;case"Footer":break;case"PageSetup":break;case"PageMargins":break;case"Selected":break;case"ProtectObjects":break;case"EnableSelection":break;case"ProtectScenarios":break;case"ValidPrinterInfo":break;case"HorizontalResolution":break;case"VerticalResolution":break;case"NumberofCopies":break;case"ActiveRow":break;case"ActiveCol":break;case"ActivePane":break;case"TopRowVisible":break;case"TopRowBottomPane":break;case"LeftColumnVisible":break;case"LeftColumnRightPane":break;case"FitToPage":break;case"RangeSelection":break;case"PaperSizeIndex":break;case"PageLayoutZoom":break;case"PageBreakZoom":break;case"FilterOn":break;case"DoNotDisplayGridlines":break;case"SplitHorizontal":break;case"SplitVertical":break;case"FreezePanes":break;case"FrozenNoSplit":break;case"FitWidth":break;case"FitHeight":break;case"CommentsLayout":break;case"Zoom":break;case"LeftToRight":break;case"Gridlines":break;case"AllowSort":break;case"AllowFilter":break;case"AllowInsertRows":break;case"AllowDeleteRows":break;case"AllowInsertCols":break;case"AllowDeleteCols":break;case"AllowInsertHyperlinks":break;case"AllowFormatCells":break;case"AllowSizeCols":break;case"AllowSizeRows":break;case"NoSummaryRowsBelowDetail":break;case"TabColorIndex":break;case"DoNotDisplayHeadings":break;case"ShowPageLayoutZoom":break;case"NoSummaryColumnsRightDetail":break;case"BlackAndWhite":break;case"DoNotDisplayZeros":break;case"DisplayPageBreak":break;case"RowColHeadings":break;case"DoNotDisplayOutline":break;case"NoOrientation":break;case"AllowUsePivotTables":break;case"ZeroHeight":break;case"ViewableRange":break;case"Selection":break;case"ProtectContents":break;default:seen=false}break;case"PivotTable":case"PivotCache":switch(Rn[3]){case"ImmediateItemsOnDrop":break;case"ShowPageMultipleItemLabel":break;case"CompactRowIndent":break;case"Location":break;case"PivotField":break;case"Orientation":break;case"LayoutForm":break;case"LayoutSubtotalLocation":break;case"LayoutCompactRow":break;case"Position":break;case"PivotItem":break;case"DataType":break;case"DataField":break;case"SourceName":break;case"ParentField":break;case"PTLineItems":break;case"PTLineItem":break;case"CountOfSameItems":break;case"Item":break;case"ItemType":break;case"PTSource":break;case"CacheIndex":break;case"ConsolidationReference":break;case"FileName":break;case"Reference":break;case"NoColumnGrand":break;case"NoRowGrand":break;case"BlankLineAfterItems":break;case"Hidden":break;case"Subtotal":break;case"BaseField":break;case"MapChildItems":break;case"Function":break;case"RefreshOnFileOpen":break;case"PrintSetTitles":break;case"MergeLabels":break;case"DefaultVersion":break;case"RefreshName":break;case"RefreshDate":break;case"RefreshDateCopy":break;case"VersionLastRefresh":break;case"VersionLastUpdate":break;case"VersionUpdateableMin":break;case"VersionRefreshableMin":break;case"Calculation":break;default:seen=false}break;case"PageBreaks":switch(Rn[3]){case"ColBreaks":break;case"ColBreak":break;case"RowBreaks":break;case"RowBreak":break;case"ColStart":break;case"ColEnd":break;case"RowEnd":break;default:seen=false}break;case"AutoFilter":switch(Rn[3]){case"AutoFilterColumn":break;case"AutoFilterCondition":break;case"AutoFilterAnd":break;case"AutoFilterOr":break;default:seen=false}break;case"QueryTable":switch(Rn[3]){case"Id":break;case"AutoFormatFont":break;case"AutoFormatPattern":break;case"QuerySource":break;case"QueryType":break;case"EnableRedirections":break;case"RefreshedInXl9":break;case"URLString":break;case"HTMLTables":break;case"Connection":break;case"CommandText":break;case"RefreshInfo":break;case"NoTitles":break;case"NextId":break;case"ColumnInfo":break;case"OverwriteCells":break;case"DoNotPromptForFile":break;case"TextWizardSettings":break;case"Source":break;case"Number":break;case"Decimal":break;case"ThousandSeparator":break;case"TrailingMinusNumbers":break;case"FormatSettings":break;case"FieldType":break;case"Delimiters":break;case"Tab":break;case"Comma":break;case"AutoFormatName":break;case"VersionLastEdit":break;case"VersionLastRefresh":break;default:seen=false}break;case"Sorting":case"ConditionalFormatting":case"DataValidation":switch(Rn[3]){case"Range":break;case"Type":break;case"Min":break;case"Max":break;case"Sort":break;case"Descending":break;case"Order":break;case"CaseSensitive":break;case"Value":break;case"ErrorStyle":break;case"ErrorMessage":break;case"ErrorTitle":break;case"CellRangeList":break;case"InputMessage":break;case"InputTitle":break;case"ComboHide":break;case"InputHide":break;case"Condition":break;case"Qualifier":break;case"UseBlank":break;case"Value1":break;case"Value2":break;case"Format":break;default:seen=false}break;case"MapInfo":case"Schema":case"data":switch(Rn[3]){case"Map":break;case"Entry":break;case"Range":break;case"XPath":break;case"Field":break;case"XSDType":break;case"FilterOn":break;case"Aggregate":break;case"ElementType":break;case"AttributeType":break;case"schema":case"element":case"complexType":case"datatype":case"all":case"attribute":case"extends":break;case"row":break;default:seen=false}break;case"SmartTags":break;default:seen=false;break}if(seen)break;if(!state[state.length-1][1])throw"Unrecognized tag: "+Rn[3]+"|"+state.join("|");if(state[state.length-1][0]==="CustomDocumentProperties"){if(Rn[0].substr(-2)==="/>")break;else if(Rn[1]==="/")xlml_set_custprop(Custprops,Rn,cp,str.slice(pidx,Rn.index));else{cp=Rn;pidx=Rn.index+Rn[0].length}break}if(opts.WTF)throw"Unrecognized tag: "+Rn[3]+"|"+state.join("|")}var out={};if(!opts.bookSheets&&!opts.bookProps)out.Sheets=sheets;out.SheetNames=sheetnames;out.SSF=SSF.get_table();out.Props=Props;out.Custprops=Custprops;return out}function parse_xlml(data,opts){fix_read_opts(opts=opts||{});switch(opts.type||"base64"){case"base64":return parse_xlml_xml(Base64.decode(data),opts);case"binary":case"buffer":case"file":return parse_xlml_xml(data,opts);case"array":return parse_xlml_xml(data.map(_chr).join(""),opts)}}function write_xlml(wb,opts){}function parse_compobj(obj){var v={};var o=obj.content;var l=28,m;m=__lpstr(o,l);l+=4+__readUInt32LE(o,l);v.UserType=m;m=__readUInt32LE(o,l);l+=4;switch(m){case 0:break;case 4294967295:case 4294967294:l+=4;break;default:if(m>400)throw new Error("Unsupported Clipboard: "+m.toString(16));l+=m}m=__lpstr(o,l);l+=m.length===0?0:5+m.length;v.Reserved1=m;if((m=__readUInt32LE(o,l))!==1907550708)return v;throw"Unsupported Unicode Extension"}function slurp(R,blob,length,opts){var l=length;var bufs=[];var d=blob.slice(blob.l,blob.l+l);if(opts&&opts.enc&&opts.enc.insitu_decrypt)switch(R.n){case"BOF":case"FilePass":case"FileLock":case"InterfaceHdr":case"RRDInfo":case"RRDHead":case"UsrExcl":break;default:if(d.length===0)break;opts.enc.insitu_decrypt(d)}bufs.push(d);blob.l+=l;var next=XLSRecordEnum[__readUInt16LE(blob,blob.l)];while(next!=null&&next.n==="Continue"){l=__readUInt16LE(blob,blob.l+2);bufs.push(blob.slice(blob.l+4,blob.l+4+l));blob.l+=4+l;next=XLSRecordEnum[__readUInt16LE(blob,blob.l)]}var b=bconcat(bufs);prep_blob(b,0);var ll=0;b.lens=[];for(var j=0;j<bufs.length;++j){b.lens.push(ll);ll+=bufs[j].length}return R.f(b,b.length,opts)}function safe_format_xf(p,opts,date1904){if(!p.XF)return;try{var fmtid=p.XF.ifmt||0;if(p.t==="e"){
+p.w=p.w||BErr[p.v]}else if(fmtid===0){if(p.t==="n"){if((p.v|0)===p.v)p.w=SSF._general_int(p.v);else p.w=SSF._general_num(p.v)}else p.w=SSF._general(p.v)}else p.w=SSF.format(fmtid,p.v,{date1904:date1904||false});if(opts.cellNF)p.z=SSF._table[fmtid]}catch(e){if(opts.WTF)throw e}}function make_cell(val,ixfe,t){return{v:val,ixfe:ixfe,t:t}}function parse_workbook(blob,options){var wb={opts:{}};var Sheets={};var out={};var Directory={};var found_sheet=false;var range={};var last_formula=null;var sst=[];var cur_sheet="";var Preamble={};var lastcell,last_cell,cc,cmnt,rng,rngC,rngR;var shared_formulae={};var array_formulae=[];var temp_val;var country;var cell_valid=true;var XFs=[];var palette=[];var get_rgb=function getrgb(icv){if(icv<8)return XLSIcv[icv];if(icv<64)return palette[icv-8]||XLSIcv[icv];return XLSIcv[icv]};var process_cell_style=function pcs(cell,line){var xfd=line.XF.data;if(!xfd||!xfd.patternType)return;line.s={};line.s.patternType=xfd.patternType;var t;if(t=rgb2Hex(get_rgb(xfd.icvFore))){line.s.fgColor={rgb:t}}if(t=rgb2Hex(get_rgb(xfd.icvBack))){line.s.bgColor={rgb:t}}};var addcell=function addcell(cell,line,options){if(!cell_valid)return;if(options.cellStyles&&line.XF&&line.XF.data)process_cell_style(cell,line);lastcell=cell;last_cell=encode_cell(cell);if(range.s){if(cell.r<range.s.r)range.s.r=cell.r;if(cell.c<range.s.c)range.s.c=cell.c}if(range.e){if(cell.r+1>range.e.r)range.e.r=cell.r+1;if(cell.c+1>range.e.c)range.e.c=cell.c+1}if(options.sheetRows&&lastcell.r>=options.sheetRows)cell_valid=false;else out[last_cell]=line};var opts={enc:false,sbcch:0,snames:[],sharedf:shared_formulae,arrayf:array_formulae,rrtabid:[],lastuser:"",biff:8,codepage:0,winlocked:0,wtf:false};if(options.password)opts.password=options.password;var mergecells=[];var objects=[];var supbooks=[[]];var sbc=0,sbci=0,sbcli=0;supbooks.SheetNames=opts.snames;supbooks.sharedf=opts.sharedf;supbooks.arrayf=opts.arrayf;var last_Rn="";var file_depth=0;opts.codepage=1200;set_cp(1200);while(blob.l<blob.length-1){var s=blob.l;var RecordType=blob.read_shift(2);if(RecordType===0&&last_Rn==="EOF")break;var length=blob.l===blob.length?0:blob.read_shift(2),y;var R=XLSRecordEnum[RecordType];if(R&&R.f){if(options.bookSheets){if(last_Rn==="BoundSheet8"&&R.n!=="BoundSheet8")break}last_Rn=R.n;if(R.r===2||R.r==12){var rt=blob.read_shift(2);length-=2;if(!opts.enc&&rt!==RecordType)throw"rt mismatch";if(R.r==12){blob.l+=10;length-=10}}var val;if(R.n==="EOF")val=R.f(blob,length,opts);else val=slurp(R,blob,length,opts);var Rn=R.n;if(opts.biff===5||opts.biff===2)switch(Rn){case"Lbl":Rn="Label";break}switch(Rn){case"Date1904":wb.opts.Date1904=val;break;case"WriteProtect":wb.opts.WriteProtect=true;break;case"FilePass":if(!opts.enc)blob.l=0;opts.enc=val;if(opts.WTF)console.error(val);if(!options.password)throw new Error("File is password-protected");if(val.Type!==0)throw new Error("Encryption scheme unsupported");if(!val.valid)throw new Error("Password is incorrect");break;case"WriteAccess":opts.lastuser=val;break;case"FileSharing":break;case"CodePage":if(val===21010)val=1200;else if(val===32769)val=1252;opts.codepage=val;set_cp(val);break;case"RRTabId":opts.rrtabid=val;break;case"WinProtect":opts.winlocked=val;break;case"Template":break;case"RefreshAll":wb.opts.RefreshAll=val;break;case"BookBool":break;case"UsesELFs":break;case"MTRSettings":{if(val[0]&&val[1])throw"Unsupported threads: "+val}break;case"CalcCount":wb.opts.CalcCount=val;break;case"CalcDelta":wb.opts.CalcDelta=val;break;case"CalcIter":wb.opts.CalcIter=val;break;case"CalcMode":wb.opts.CalcMode=val;break;case"CalcPrecision":wb.opts.CalcPrecision=val;break;case"CalcSaveRecalc":wb.opts.CalcSaveRecalc=val;break;case"CalcRefMode":opts.CalcRefMode=val;break;case"Uncalced":break;case"ForceFullCalculation":wb.opts.FullCalc=val;break;case"WsBool":break;case"XF":XFs.push(val);break;case"ExtSST":break;case"BookExt":break;case"RichTextStream":break;case"BkHim":break;case"SupBook":supbooks[++sbc]=[val];sbci=0;break;case"ExternName":supbooks[sbc][++sbci]=val;break;case"Index":break;case"Lbl":supbooks[0][++sbcli]=val;break;case"ExternSheet":supbooks[sbc]=supbooks[sbc].concat(val);sbci+=val.length;break;case"Protect":out["!protect"]=val;break;case"Password":if(val!==0&&opts.WTF)console.error("Password verifier: "+val);break;case"Prot4Rev":case"Prot4RevPass":break;case"BoundSheet8":{Directory[val.pos]=val;opts.snames.push(val.name)}break;case"EOF":{if(--file_depth)break;if(range.e){out["!range"]=range;if(range.e.r>0&&range.e.c>0){range.e.r--;range.e.c--;out["!ref"]=encode_range(range);range.e.r++;range.e.c++}if(mergecells.length>0)out["!merges"]=mergecells;if(objects.length>0)out["!objects"]=objects}if(cur_sheet==="")Preamble=out;else Sheets[cur_sheet]=out;out={}}break;case"BOF":{if(opts.biff!==8);else if(val.BIFFVer===1280)opts.biff=5;else if(val.BIFFVer===2)opts.biff=2;else if(val.BIFFVer===7)opts.biff=2;if(file_depth++)break;cell_valid=true;out={};if(opts.biff===2){if(cur_sheet==="")cur_sheet="Sheet1";range={s:{r:0,c:0},e:{r:0,c:0}}}else cur_sheet=(Directory[s]||{name:""}).name;mergecells=[];objects=[]}break;case"Number":case"BIFF2NUM":{temp_val={ixfe:val.ixfe,XF:XFs[val.ixfe],v:val.val,t:"n"};if(temp_val.XF)safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:val.c,r:val.r},temp_val,options)}break;case"BoolErr":{temp_val={ixfe:val.ixfe,XF:XFs[val.ixfe],v:val.val,t:val.t};if(temp_val.XF)safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:val.c,r:val.r},temp_val,options)}break;case"RK":{temp_val={ixfe:val.ixfe,XF:XFs[val.ixfe],v:val.rknum,t:"n"};if(temp_val.XF)safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:val.c,r:val.r},temp_val,options)}break;case"MulRk":{for(var j=val.c;j<=val.C;++j){var ixfe=val.rkrec[j-val.c][0];temp_val={ixfe:ixfe,XF:XFs[ixfe],v:val.rkrec[j-val.c][1],t:"n"};if(temp_val.XF)safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:j,r:val.r},temp_val,options)}}break;case"Formula":{switch(val.val){case"String":last_formula=val;break;case"Array Formula":throw"Array Formula unsupported";default:temp_val={v:val.val,ixfe:val.cell.ixfe,t:val.tt};temp_val.XF=XFs[temp_val.ixfe];if(options.cellFormula)temp_val.f="="+stringify_formula(val.formula,range,val.cell,supbooks,opts);if(temp_val.XF)safe_format_xf(temp_val,options,wb.opts.Date1904);addcell(val.cell,temp_val,options);last_formula=val}}break;case"String":{if(last_formula){last_formula.val=val;temp_val={v:last_formula.val,ixfe:last_formula.cell.ixfe,t:"s"};temp_val.XF=XFs[temp_val.ixfe];if(options.cellFormula)temp_val.f="="+stringify_formula(last_formula.formula,range,last_formula.cell,supbooks,opts);if(temp_val.XF)safe_format_xf(temp_val,options,wb.opts.Date1904);addcell(last_formula.cell,temp_val,options);last_formula=null}}break;case"Array":{array_formulae.push(val)}break;case"ShrFmla":{if(!cell_valid)break;shared_formulae[encode_cell(last_formula.cell)]=val[0]}break;case"LabelSst":temp_val=make_cell(sst[val.isst].t,val.ixfe,"s");temp_val.XF=XFs[temp_val.ixfe];if(temp_val.XF)safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:val.c,r:val.r},temp_val,options);break;case"Label":case"BIFF2STR":temp_val=make_cell(val.val,val.ixfe,"s");temp_val.XF=XFs[temp_val.ixfe];if(temp_val.XF)safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:val.c,r:val.r},temp_val,options);break;case"Dimensions":{if(file_depth===1)range=val}break;case"SST":{sst=val}break;case"Format":{SSF.load(val[1],val[0])}break;case"MergeCells":mergecells=mergecells.concat(val);break;case"Obj":objects[val.cmo[0]]=opts.lastobj=val;break;case"TxO":opts.lastobj.TxO=val;break;case"HLink":{for(rngR=val[0].s.r;rngR<=val[0].e.r;++rngR)for(rngC=val[0].s.c;rngC<=val[0].e.c;++rngC)if(out[encode_cell({c:rngC,r:rngR})])out[encode_cell({c:rngC,r:rngR})].l=val[1]}break;case"HLinkTooltip":{for(rngR=val[0].s.r;rngR<=val[0].e.r;++rngR)for(rngC=val[0].s.c;rngC<=val[0].e.c;++rngC)if(out[encode_cell({c:rngC,r:rngR})])out[encode_cell({c:rngC,r:rngR})].l.tooltip=val[1]}break;case"Note":{if(opts.biff<=5&&opts.biff>=2)break;cc=out[encode_cell(val[0])];var noteobj=objects[val[2]];if(!cc)break;if(!cc.c)cc.c=[];cmnt={a:val[1],t:noteobj.TxO.t};cc.c.push(cmnt)}break;default:switch(R.n){case"ClrtClient":break;case"XFExt":update_xfext(XFs[val.ixfe],val.ext);break;case"NameCmt":break;case"Header":break;case"Footer":break;case"HCenter":break;case"VCenter":break;case"Pls":break;case"Setup":break;case"DefColWidth":break;case"GCW":break;case"LHRecord":break;case"ColInfo":break;case"Row":break;case"DBCell":break;case"MulBlank":break;case"EntExU2":break;case"SxView":break;case"Sxvd":break;case"SXVI":break;case"SXVDEx":break;case"SxIvd":break;case"SXDI":break;case"SXLI":break;case"SXEx":break;case"QsiSXTag":break;case"Selection":break;case"Feat":break;case"FeatHdr":case"FeatHdr11":break;case"Feature11":case"Feature12":case"List12":break;case"Blank":break;case"Country":country=val;break;case"RecalcId":break;case"DefaultRowHeight":case"DxGCol":break;case"Fbi":case"Fbi2":case"GelFrame":break;case"Font":break;case"XFCRC":break;case"Style":break;case"StyleExt":break;case"Palette":palette=val;break;case"Theme":break;case"ScenarioProtect":break;case"ObjProtect":break;case"CondFmt12":break;case"Table":break;case"TableStyles":break;case"TableStyle":break;case"TableStyleElement":break;case"SXStreamID":break;case"SXVS":break;case"DConRef":break;case"SXAddl":break;case"DConBin":break;case"DConName":break;case"SXPI":break;case"SxFormat":break;case"SxSelect":break;case"SxRule":break;case"SxFilt":break;case"SxItm":break;case"SxDXF":break;case"ScenMan":break;case"DCon":break;case"CellWatch":break;case"PrintRowCol":break;case"PrintGrid":break;case"PrintSize":break;case"XCT":break;case"CRN":break;case"Scl":{}break;case"SheetExt":{}break;case"SheetExtOptional":{}break;case"ObNoMacros":{}break;case"ObProj":{}break;case"CodeName":{}break;case"GUIDTypeLib":{}break;case"WOpt":break;case"PhoneticInfo":break;case"OleObjectSize":break;case"DXF":case"DXFN":case"DXFN12":case"DXFN12List":case"DXFN12NoCB":break;case"Dv":case"DVal":break;case"BRAI":case"Series":case"SeriesText":break;case"DConn":break;case"DbOrParamQry":break;case"DBQueryExt":break;case"IFmtRecord":break;case"CondFmt":case"CF":case"CF12":case"CFEx":break;case"Excel9File":break;case"Units":break;case"InterfaceHdr":case"Mms":case"InterfaceEnd":case"DSF":case"BuiltInFnGroupCount":case"Window1":case"Window2":case"HideObj":case"GridSet":case"Guts":case"UserBView":case"UserSViewBegin":case"UserSViewEnd":case"Pane":break;default:switch(R.n){case"Dat":case"Begin":case"End":case"StartBlock":case"EndBlock":case"Frame":case"Area":case"Axis":case"AxisLine":case"Tick":break;case"AxesUsed":case"CrtLayout12":case"CrtLayout12A":case"CrtLink":case"CrtLine":case"CrtMlFrt":case"CrtMlFrtContinue":break;case"LineFormat":case"AreaFormat":case"Chart":case"Chart3d":case"Chart3DBarShape":case"ChartFormat":case"ChartFrtInfo":break;case"PlotArea":case"PlotGrowth":break;case"SeriesList":case"SerParent":case"SerAuxTrend":break;case"DataFormat":case"SerToCrt":case"FontX":break;case"CatSerRange":case"AxcExt":case"SerFmt":break;case"ShtProps":break;case"DefaultText":case"Text":case"CatLab":break;case"DataLabExtContents":break;case"Legend":case"LegendException":break;case"Pie":case"Scatter":break;case"PieFormat":case"MarkerFormat":break;case"StartObject":case"EndObject":break;case"AlRuns":case"ObjectLink":break;case"SIIndex":break;case"AttachedLabel":case"YMult":break;case"Line":case"Bar":break;case"Surf":break;case"AxisParent":break;case"Pos":break;case"ValueRange":break;case"SXViewEx9":break;case"SXViewLink":break;case"PivotChartBits":break;case"SBaseRef":break;case"TextPropsStream":break;case"LnExt":break;case"MkrExt":break;case"CrtCoopt":break;case"Qsi":case"Qsif":case"Qsir":case"QsiSXTag":break;case"TxtQry":break;case"FilterMode":break;case"AutoFilter":case"AutoFilterInfo":break;case"AutoFilter12":break;case"DropDownObjIds":break;case"Sort":break;case"SortData":break;case"ShapePropsStream":break;case"MsoDrawing":case"MsoDrawingGroup":case"MsoDrawingSelection":break;case"ImData":break;case"WebPub":case"AutoWebPub":case"RightMargin":case"LeftMargin":case"TopMargin":case"BottomMargin":case"HeaderFooter":case"HFPicture":case"PLV":case"HorizontalPageBreaks":case"VerticalPageBreaks":case"Backup":case"CompressPictures":case"Compat12":break;case"Continue":case"ContinueFrt12":break;case"FrtFontList":case"FrtWrapper":break;case"ExternCount":break;case"RString":break;case"TabIdConf":case"Radar":case"RadarArea":case"DropBar":case"Intl":case"CoordList":case"SerAuxErrBar":break;default:switch(R.n){case"SCENARIO":case"DConBin":case"PicF":case"DataLabExt":case"Lel":case"BopPop":case"BopPopCustom":case"RealTimeData":case"Name":break;default:if(options.WTF)throw"Unrecognized Record "+R.n}}}}}else blob.l+=length}var sheetnamesraw=opts.biff===2?["Sheet1"]:Object.keys(Directory).sort(function(a,b){return Number(a)-Number(b)}).map(function(x){return Directory[x].name});var sheetnames=sheetnamesraw.slice();wb.Directory=sheetnamesraw;wb.SheetNames=sheetnamesraw;if(!options.bookSheets)wb.Sheets=Sheets;wb.Preamble=Preamble;wb.Strings=sst;wb.SSF=SSF.get_table();if(opts.enc)wb.Encryption=opts.enc;wb.Metadata={};if(country!==undefined)wb.Metadata.Country=country;return wb}function parse_xlscfb(cfb,options){if(!options)options={};fix_read_opts(options);reset_cp();var CompObj,Summary,Workbook;if(cfb.find){CompObj=cfb.find("!CompObj");Summary=cfb.find("!SummaryInformation");Workbook=cfb.find("/Workbook")}else{prep_blob(cfb,0);Workbook={content:cfb}}if(!Workbook)Workbook=cfb.find("/Book");var CompObjP,SummaryP,WorkbookP;if(CompObj)CompObjP=parse_compobj(CompObj);if(options.bookProps&&!options.bookSheets)WorkbookP={};else{if(Workbook)WorkbookP=parse_workbook(Workbook.content,options,!!Workbook.find);else throw new Error("Cannot find Workbook stream")}if(cfb.find)parse_props(cfb);var props={};for(var y in cfb.Summary)props[y]=cfb.Summary[y];for(y in cfb.DocSummary)props[y]=cfb.DocSummary[y];WorkbookP.Props=WorkbookP.Custprops=props;if(options.bookFiles)WorkbookP.cfb=cfb;WorkbookP.CompObjP=CompObjP;return WorkbookP}function parse_props(cfb){var DSI=cfb.find("!DocumentSummaryInformation");if(DSI)try{cfb.DocSummary=parse_PropertySetStream(DSI,DocSummaryPIDDSI)}catch(e){}var SI=cfb.find("!SummaryInformation");if(SI)try{cfb.Summary=parse_PropertySetStream(SI,SummaryPIDSI)}catch(e){}}var XLSBRecordEnum={0:{n:"BrtRowHdr",f:parse_BrtRowHdr},1:{n:"BrtCellBlank",f:parse_BrtCellBlank},2:{n:"BrtCellRk",f:parse_BrtCellRk},3:{n:"BrtCellError",f:parse_BrtCellError},4:{n:"BrtCellBool",f:parse_BrtCellBool},5:{n:"BrtCellReal",f:parse_BrtCellReal},6:{n:"BrtCellSt",f:parse_BrtCellSt},7:{n:"BrtCellIsst",f:parse_BrtCellIsst},8:{n:"BrtFmlaString",f:parse_BrtFmlaString},9:{n:"BrtFmlaNum",f:parse_BrtFmlaNum},10:{n:"BrtFmlaBool",f:parse_BrtFmlaBool},11:{n:"BrtFmlaError",f:parse_BrtFmlaError},16:{n:"BrtFRTArchID$",f:parse_BrtFRTArchID$},19:{n:"BrtSSTItem",f:parse_RichStr},20:{n:"BrtPCDIMissing",f:parsenoop},21:{n:"BrtPCDINumber",f:parsenoop},22:{n:"BrtPCDIBoolean",f:parsenoop},23:{n:"BrtPCDIError",f:parsenoop},24:{n:"BrtPCDIString",f:parsenoop},25:{n:"BrtPCDIDatetime",f:parsenoop},26:{n:"BrtPCDIIndex",f:parsenoop},27:{n:"BrtPCDIAMissing",f:parsenoop},28:{n:"BrtPCDIANumber",f:parsenoop},29:{n:"BrtPCDIABoolean",f:parsenoop},30:{n:"BrtPCDIAError",f:parsenoop},31:{n:"BrtPCDIAString",f:parsenoop},32:{n:"BrtPCDIADatetime",f:parsenoop},33:{n:"BrtPCRRecord",f:parsenoop},34:{n:"BrtPCRRecordDt",f:parsenoop},35:{n:"BrtFRTBegin",f:parsenoop},36:{n:"BrtFRTEnd",f:parsenoop},37:{n:"BrtACBegin",f:parsenoop},38:{n:"BrtACEnd",f:parsenoop},39:{n:"BrtName",f:parsenoop},40:{n:"BrtIndexRowBlock",f:parsenoop},42:{n:"BrtIndexBlock",f:parsenoop},43:{n:"BrtFont",f:parse_BrtFont},44:{n:"BrtFmt",f:parse_BrtFmt},45:{n:"BrtFill",f:parsenoop},46:{n:"BrtBorder",f:parsenoop},47:{n:"BrtXF",f:parse_BrtXF},48:{n:"BrtStyle",f:parsenoop},49:{n:"BrtCellMeta",f:parsenoop},50:{n:"BrtValueMeta",f:parsenoop},51:{n:"BrtMdb",f:parsenoop},52:{n:"BrtBeginFmd",f:parsenoop},53:{n:"BrtEndFmd",f:parsenoop},54:{n:"BrtBeginMdx",f:parsenoop},55:{n:"BrtEndMdx",f:parsenoop},56:{n:"BrtBeginMdxTuple",f:parsenoop},57:{n:"BrtEndMdxTuple",f:parsenoop},58:{n:"BrtMdxMbrIstr",f:parsenoop},59:{n:"BrtStr",f:parsenoop},60:{n:"BrtColInfo",f:parsenoop},62:{n:"BrtCellRString",f:parsenoop},63:{n:"BrtCalcChainItem$",f:parse_BrtCalcChainItem$},64:{n:"BrtDVal",f:parsenoop},65:{n:"BrtSxvcellNum",f:parsenoop},66:{n:"BrtSxvcellStr",f:parsenoop},67:{n:"BrtSxvcellBool",f:parsenoop},68:{n:"BrtSxvcellErr",f:parsenoop},69:{n:"BrtSxvcellDate",f:parsenoop},70:{n:"BrtSxvcellNil",f:parsenoop},128:{n:"BrtFileVersion",f:parsenoop},129:{n:"BrtBeginSheet",f:parsenoop},130:{n:"BrtEndSheet",f:parsenoop},131:{n:"BrtBeginBook",f:parsenoop,p:0},132:{n:"BrtEndBook",f:parsenoop},133:{n:"BrtBeginWsViews",f:parsenoop},134:{n:"BrtEndWsViews",f:parsenoop},135:{n:"BrtBeginBookViews",f:parsenoop},136:{n:"BrtEndBookViews",f:parsenoop},137:{n:"BrtBeginWsView",f:parsenoop},138:{n:"BrtEndWsView",f:parsenoop},139:{n:"BrtBeginCsViews",f:parsenoop},140:{n:"BrtEndCsViews",f:parsenoop},141:{n:"BrtBeginCsView",f:parsenoop},142:{n:"BrtEndCsView",f:parsenoop},143:{n:"BrtBeginBundleShs",f:parsenoop},144:{n:"BrtEndBundleShs",f:parsenoop},145:{n:"BrtBeginSheetData",f:parsenoop},146:{n:"BrtEndSheetData",f:parsenoop},147:{n:"BrtWsProp",f:parse_BrtWsProp},148:{n:"BrtWsDim",f:parse_BrtWsDim,p:16},151:{n:"BrtPane",f:parsenoop},152:{n:"BrtSel",f:parsenoop},153:{n:"BrtWbProp",f:parse_BrtWbProp},154:{n:"BrtWbFactoid",f:parsenoop},155:{n:"BrtFileRecover",f:parsenoop},156:{n:"BrtBundleSh",f:parse_BrtBundleSh},157:{n:"BrtCalcProp",f:parsenoop},158:{n:"BrtBookView",f:parsenoop},159:{n:"BrtBeginSst",f:parse_BrtBeginSst},160:{n:"BrtEndSst",f:parsenoop},161:{n:"BrtBeginAFilter",f:parsenoop},162:{n:"BrtEndAFilter",f:parsenoop},163:{n:"BrtBeginFilterColumn",f:parsenoop},164:{n:"BrtEndFilterColumn",f:parsenoop},165:{n:"BrtBeginFilters",f:parsenoop},166:{n:"BrtEndFilters",f:parsenoop},167:{n:"BrtFilter",f:parsenoop},168:{n:"BrtColorFilter",f:parsenoop},169:{n:"BrtIconFilter",f:parsenoop},170:{n:"BrtTop10Filter",f:parsenoop},171:{n:"BrtDynamicFilter",f:parsenoop},172:{n:"BrtBeginCustomFilters",f:parsenoop},173:{n:"BrtEndCustomFilters",f:parsenoop},174:{n:"BrtCustomFilter",f:parsenoop},175:{n:"BrtAFilterDateGroupItem",f:parsenoop},176:{n:"BrtMergeCell",f:parse_BrtMergeCell},177:{n:"BrtBeginMergeCells",f:parsenoop},178:{n:"BrtEndMergeCells",f:parsenoop},179:{n:"BrtBeginPivotCacheDef",f:parsenoop},180:{n:"BrtEndPivotCacheDef",f:parsenoop},181:{n:"BrtBeginPCDFields",f:parsenoop},182:{n:"BrtEndPCDFields",f:parsenoop},183:{n:"BrtBeginPCDField",f:parsenoop},184:{n:"BrtEndPCDField",f:parsenoop},185:{n:"BrtBeginPCDSource",f:parsenoop},186:{n:"BrtEndPCDSource",f:parsenoop},187:{n:"BrtBeginPCDSRange",f:parsenoop},188:{n:"BrtEndPCDSRange",f:parsenoop},189:{n:"BrtBeginPCDFAtbl",f:parsenoop},190:{n:"BrtEndPCDFAtbl",f:parsenoop},191:{n:"BrtBeginPCDIRun",f:parsenoop},192:{n:"BrtEndPCDIRun",f:parsenoop},193:{n:"BrtBeginPivotCacheRecords",f:parsenoop},194:{n:"BrtEndPivotCacheRecords",f:parsenoop},195:{n:"BrtBeginPCDHierarchies",f:parsenoop},196:{n:"BrtEndPCDHierarchies",f:parsenoop},197:{n:"BrtBeginPCDHierarchy",f:parsenoop},198:{n:"BrtEndPCDHierarchy",f:parsenoop},199:{n:"BrtBeginPCDHFieldsUsage",f:parsenoop},200:{n:"BrtEndPCDHFieldsUsage",f:parsenoop},201:{n:"BrtBeginExtConnection",f:parsenoop},202:{n:"BrtEndExtConnection",f:parsenoop},203:{n:"BrtBeginECDbProps",f:parsenoop},204:{n:"BrtEndECDbProps",f:parsenoop},205:{n:"BrtBeginECOlapProps",f:parsenoop},206:{n:"BrtEndECOlapProps",f:parsenoop},207:{n:"BrtBeginPCDSConsol",f:parsenoop},208:{n:"BrtEndPCDSConsol",f:parsenoop},209:{n:"BrtBeginPCDSCPages",f:parsenoop},210:{n:"BrtEndPCDSCPages",f:parsenoop},211:{n:"BrtBeginPCDSCPage",f:parsenoop},212:{n:"BrtEndPCDSCPage",f:parsenoop},213:{n:"BrtBeginPCDSCPItem",f:parsenoop},214:{n:"BrtEndPCDSCPItem",f:parsenoop},215:{n:"BrtBeginPCDSCSets",f:parsenoop},216:{n:"BrtEndPCDSCSets",f:parsenoop},217:{n:"BrtBeginPCDSCSet",f:parsenoop},218:{n:"BrtEndPCDSCSet",f:parsenoop},219:{n:"BrtBeginPCDFGroup",f:parsenoop},220:{n:"BrtEndPCDFGroup",f:parsenoop},221:{n:"BrtBeginPCDFGItems",f:parsenoop},222:{n:"BrtEndPCDFGItems",f:parsenoop},223:{n:"BrtBeginPCDFGRange",f:parsenoop},224:{n:"BrtEndPCDFGRange",f:parsenoop},225:{n:"BrtBeginPCDFGDiscrete",f:parsenoop},226:{n:"BrtEndPCDFGDiscrete",f:parsenoop},227:{n:"BrtBeginPCDSDTupleCache",f:parsenoop},228:{n:"BrtEndPCDSDTupleCache",f:parsenoop},229:{n:"BrtBeginPCDSDTCEntries",f:parsenoop},230:{n:"BrtEndPCDSDTCEntries",f:parsenoop},231:{n:"BrtBeginPCDSDTCEMembers",f:parsenoop},232:{n:"BrtEndPCDSDTCEMembers",f:parsenoop},233:{n:"BrtBeginPCDSDTCEMember",f:parsenoop},234:{n:"BrtEndPCDSDTCEMember",f:parsenoop},235:{n:"BrtBeginPCDSDTCQueries",f:parsenoop},236:{n:"BrtEndPCDSDTCQueries",f:parsenoop},237:{n:"BrtBeginPCDSDTCQuery",f:parsenoop},238:{n:"BrtEndPCDSDTCQuery",f:parsenoop},239:{n:"BrtBeginPCDSDTCSets",f:parsenoop},240:{n:"BrtEndPCDSDTCSets",f:parsenoop},241:{n:"BrtBeginPCDSDTCSet",f:parsenoop},242:{n:"BrtEndPCDSDTCSet",f:parsenoop},243:{n:"BrtBeginPCDCalcItems",f:parsenoop},244:{n:"BrtEndPCDCalcItems",f:parsenoop},245:{n:"BrtBeginPCDCalcItem",f:parsenoop},246:{n:"BrtEndPCDCalcItem",f:parsenoop},247:{n:"BrtBeginPRule",f:parsenoop},248:{n:"BrtEndPRule",f:parsenoop},249:{n:"BrtBeginPRFilters",f:parsenoop},250:{n:"BrtEndPRFilters",f:parsenoop},251:{n:"BrtBeginPRFilter",f:parsenoop},252:{n:"BrtEndPRFilter",f:parsenoop},253:{n:"BrtBeginPNames",f:parsenoop},254:{n:"BrtEndPNames",f:parsenoop},255:{n:"BrtBeginPName",f:parsenoop},256:{n:"BrtEndPName",f:parsenoop},257:{n:"BrtBeginPNPairs",f:parsenoop},258:{n:"BrtEndPNPairs",f:parsenoop},259:{n:"BrtBeginPNPair",f:parsenoop},260:{n:"BrtEndPNPair",f:parsenoop},261:{n:"BrtBeginECWebProps",f:parsenoop},262:{n:"BrtEndECWebProps",f:parsenoop},263:{n:"BrtBeginEcWpTables",f:parsenoop},264:{n:"BrtEndECWPTables",f:parsenoop},265:{n:"BrtBeginECParams",f:parsenoop},266:{n:"BrtEndECParams",f:parsenoop},267:{n:"BrtBeginECParam",f:parsenoop},268:{n:"BrtEndECParam",f:parsenoop},269:{n:"BrtBeginPCDKPIs",f:parsenoop},270:{n:"BrtEndPCDKPIs",f:parsenoop},271:{n:"BrtBeginPCDKPI",f:parsenoop},272:{n:"BrtEndPCDKPI",f:parsenoop},273:{n:"BrtBeginDims",f:parsenoop},274:{n:"BrtEndDims",f:parsenoop},275:{n:"BrtBeginDim",f:parsenoop},276:{n:"BrtEndDim",f:parsenoop},277:{n:"BrtIndexPartEnd",f:parsenoop},278:{n:"BrtBeginStyleSheet",f:parsenoop},279:{n:"BrtEndStyleSheet",f:parsenoop},280:{n:"BrtBeginSXView",f:parsenoop},281:{n:"BrtEndSXVI",f:parsenoop},282:{n:"BrtBeginSXVI",f:parsenoop},283:{n:"BrtBeginSXVIs",f:parsenoop},284:{n:"BrtEndSXVIs",f:parsenoop},285:{n:"BrtBeginSXVD",f:parsenoop},286:{n:"BrtEndSXVD",f:parsenoop},287:{n:"BrtBeginSXVDs",f:parsenoop},288:{n:"BrtEndSXVDs",f:parsenoop},289:{n:"BrtBeginSXPI",f:parsenoop},290:{n:"BrtEndSXPI",f:parsenoop},291:{n:"BrtBeginSXPIs",f:parsenoop},292:{n:"BrtEndSXPIs",f:parsenoop},293:{n:"BrtBeginSXDI",f:parsenoop},294:{n:"BrtEndSXDI",f:parsenoop},295:{n:"BrtBeginSXDIs",f:parsenoop},296:{n:"BrtEndSXDIs",f:parsenoop},297:{n:"BrtBeginSXLI",f:parsenoop},298:{n:"BrtEndSXLI",f:parsenoop},299:{n:"BrtBeginSXLIRws",f:parsenoop},300:{n:"BrtEndSXLIRws",f:parsenoop},301:{n:"BrtBeginSXLICols",f:parsenoop},302:{n:"BrtEndSXLICols",f:parsenoop},303:{n:"BrtBeginSXFormat",f:parsenoop},304:{n:"BrtEndSXFormat",f:parsenoop},305:{n:"BrtBeginSXFormats",f:parsenoop},306:{n:"BrtEndSxFormats",f:parsenoop},307:{n:"BrtBeginSxSelect",f:parsenoop},308:{n:"BrtEndSxSelect",f:parsenoop},309:{n:"BrtBeginISXVDRws",f:parsenoop},310:{n:"BrtEndISXVDRws",f:parsenoop},311:{n:"BrtBeginISXVDCols",f:parsenoop},312:{n:"BrtEndISXVDCols",f:parsenoop},313:{n:"BrtEndSXLocation",f:parsenoop},314:{n:"BrtBeginSXLocation",f:parsenoop},315:{n:"BrtEndSXView",f:parsenoop},316:{n:"BrtBeginSXTHs",f:parsenoop},317:{n:"BrtEndSXTHs",f:parsenoop},318:{n:"BrtBeginSXTH",f:parsenoop},319:{n:"BrtEndSXTH",f:parsenoop},320:{n:"BrtBeginISXTHRws",f:parsenoop},321:{n:"BrtEndISXTHRws",f:parsenoop},322:{n:"BrtBeginISXTHCols",f:parsenoop},323:{n:"BrtEndISXTHCols",f:parsenoop},324:{n:"BrtBeginSXTDMPS",f:parsenoop},325:{n:"BrtEndSXTDMPs",f:parsenoop},326:{n:"BrtBeginSXTDMP",f:parsenoop},327:{n:"BrtEndSXTDMP",f:parsenoop},328:{n:"BrtBeginSXTHItems",f:parsenoop},329:{n:"BrtEndSXTHItems",f:parsenoop},330:{n:"BrtBeginSXTHItem",f:parsenoop},331:{n:"BrtEndSXTHItem",f:parsenoop},332:{n:"BrtBeginMetadata",f:parsenoop},333:{n:"BrtEndMetadata",f:parsenoop},334:{n:"BrtBeginEsmdtinfo",f:parsenoop},335:{n:"BrtMdtinfo",f:parsenoop},336:{n:"BrtEndEsmdtinfo",f:parsenoop},337:{n:"BrtBeginEsmdb",f:parsenoop},338:{n:"BrtEndEsmdb",f:parsenoop},339:{n:"BrtBeginEsfmd",f:parsenoop},340:{n:"BrtEndEsfmd",f:parsenoop},341:{n:"BrtBeginSingleCells",f:parsenoop},342:{n:"BrtEndSingleCells",f:parsenoop},343:{n:"BrtBeginList",f:parsenoop},344:{n:"BrtEndList",f:parsenoop},345:{n:"BrtBeginListCols",f:parsenoop},346:{n:"BrtEndListCols",f:parsenoop},347:{n:"BrtBeginListCol",f:parsenoop},348:{n:"BrtEndListCol",f:parsenoop},349:{n:"BrtBeginListXmlCPr",f:parsenoop},350:{n:"BrtEndListXmlCPr",f:parsenoop},351:{n:"BrtListCCFmla",f:parsenoop},352:{n:"BrtListTrFmla",f:parsenoop},353:{n:"BrtBeginExternals",f:parsenoop},354:{n:"BrtEndExternals",f:parsenoop},355:{n:"BrtSupBookSrc",f:parsenoop},357:{n:"BrtSupSelf",f:parsenoop},358:{n:"BrtSupSame",f:parsenoop},359:{n:"BrtSupTabs",f:parsenoop},360:{n:"BrtBeginSupBook",f:parsenoop},361:{n:"BrtPlaceholderName",f:parsenoop},362:{n:"BrtExternSheet",f:parsenoop},363:{n:"BrtExternTableStart",f:parsenoop},364:{n:"BrtExternTableEnd",f:parsenoop},366:{n:"BrtExternRowHdr",f:parsenoop},367:{n:"BrtExternCellBlank",f:parsenoop},368:{n:"BrtExternCellReal",f:parsenoop},369:{n:"BrtExternCellBool",f:parsenoop},370:{n:"BrtExternCellError",f:parsenoop},371:{n:"BrtExternCellString",f:parsenoop},372:{n:"BrtBeginEsmdx",f:parsenoop},373:{n:"BrtEndEsmdx",f:parsenoop},374:{n:"BrtBeginMdxSet",f:parsenoop},375:{n:"BrtEndMdxSet",f:parsenoop},376:{n:"BrtBeginMdxMbrProp",f:parsenoop},377:{n:"BrtEndMdxMbrProp",f:parsenoop},378:{n:"BrtBeginMdxKPI",f:parsenoop},379:{n:"BrtEndMdxKPI",f:parsenoop},380:{n:"BrtBeginEsstr",f:parsenoop},381:{n:"BrtEndEsstr",f:parsenoop},382:{n:"BrtBeginPRFItem",f:parsenoop},383:{n:"BrtEndPRFItem",f:parsenoop},384:{n:"BrtBeginPivotCacheIDs",f:parsenoop},385:{n:"BrtEndPivotCacheIDs",f:parsenoop},386:{n:"BrtBeginPivotCacheID",f:parsenoop},387:{n:"BrtEndPivotCacheID",f:parsenoop},388:{n:"BrtBeginISXVIs",f:parsenoop},389:{n:"BrtEndISXVIs",f:parsenoop},390:{n:"BrtBeginColInfos",f:parsenoop},391:{n:"BrtEndColInfos",f:parsenoop},392:{n:"BrtBeginRwBrk",f:parsenoop},393:{n:"BrtEndRwBrk",f:parsenoop},394:{n:"BrtBeginColBrk",f:parsenoop},395:{n:"BrtEndColBrk",f:parsenoop},396:{n:"BrtBrk",f:parsenoop},397:{n:"BrtUserBookView",f:parsenoop},398:{n:"BrtInfo",f:parsenoop},399:{n:"BrtCUsr",f:parsenoop},400:{n:"BrtUsr",f:parsenoop},401:{n:"BrtBeginUsers",f:parsenoop},403:{n:"BrtEOF",f:parsenoop},404:{n:"BrtUCR",f:parsenoop},405:{n:"BrtRRInsDel",f:parsenoop},406:{n:"BrtRREndInsDel",f:parsenoop},407:{n:"BrtRRMove",f:parsenoop},408:{n:"BrtRREndMove",f:parsenoop},409:{n:"BrtRRChgCell",f:parsenoop},410:{n:"BrtRREndChgCell",f:parsenoop},411:{n:"BrtRRHeader",f:parsenoop},412:{n:"BrtRRUserView",f:parsenoop},413:{n:"BrtRRRenSheet",f:parsenoop},414:{n:"BrtRRInsertSh",f:parsenoop},415:{n:"BrtRRDefName",f:parsenoop},416:{n:"BrtRRNote",f:parsenoop},417:{n:"BrtRRConflict",f:parsenoop},418:{n:"BrtRRTQSIF",f:parsenoop},419:{n:"BrtRRFormat",f:parsenoop},420:{n:"BrtRREndFormat",f:parsenoop},421:{n:"BrtRRAutoFmt",f:parsenoop},422:{n:"BrtBeginUserShViews",f:parsenoop},423:{n:"BrtBeginUserShView",f:parsenoop},424:{n:"BrtEndUserShView",f:parsenoop},425:{n:"BrtEndUserShViews",f:parsenoop},426:{n:"BrtArrFmla",f:parsenoop},427:{n:"BrtShrFmla",f:parsenoop},428:{n:"BrtTable",f:parsenoop},429:{n:"BrtBeginExtConnections",f:parsenoop},430:{n:"BrtEndExtConnections",f:parsenoop},431:{n:"BrtBeginPCDCalcMems",f:parsenoop},432:{n:"BrtEndPCDCalcMems",f:parsenoop},433:{n:"BrtBeginPCDCalcMem",f:parsenoop},434:{n:"BrtEndPCDCalcMem",f:parsenoop},435:{n:"BrtBeginPCDHGLevels",f:parsenoop},436:{n:"BrtEndPCDHGLevels",f:parsenoop},437:{n:"BrtBeginPCDHGLevel",f:parsenoop},438:{n:"BrtEndPCDHGLevel",f:parsenoop},439:{n:"BrtBeginPCDHGLGroups",f:parsenoop},440:{n:"BrtEndPCDHGLGroups",f:parsenoop},441:{n:"BrtBeginPCDHGLGroup",f:parsenoop},442:{n:"BrtEndPCDHGLGroup",f:parsenoop},443:{n:"BrtBeginPCDHGLGMembers",f:parsenoop},444:{n:"BrtEndPCDHGLGMembers",f:parsenoop},445:{n:"BrtBeginPCDHGLGMember",f:parsenoop},446:{n:"BrtEndPCDHGLGMember",f:parsenoop},447:{n:"BrtBeginQSI",f:parsenoop},448:{n:"BrtEndQSI",f:parsenoop},449:{n:"BrtBeginQSIR",f:parsenoop},450:{n:"BrtEndQSIR",f:parsenoop},451:{n:"BrtBeginDeletedNames",f:parsenoop},452:{n:"BrtEndDeletedNames",f:parsenoop},453:{n:"BrtBeginDeletedName",f:parsenoop},454:{n:"BrtEndDeletedName",f:parsenoop},455:{n:"BrtBeginQSIFs",f:parsenoop},456:{n:"BrtEndQSIFs",f:parsenoop},457:{n:"BrtBeginQSIF",f:parsenoop},458:{n:"BrtEndQSIF",f:parsenoop},459:{n:"BrtBeginAutoSortScope",f:parsenoop},460:{n:"BrtEndAutoSortScope",f:parsenoop},461:{n:"BrtBeginConditionalFormatting",f:parsenoop},462:{n:"BrtEndConditionalFormatting",f:parsenoop},463:{n:"BrtBeginCFRule",f:parsenoop},464:{n:"BrtEndCFRule",f:parsenoop},465:{n:"BrtBeginIconSet",f:parsenoop},466:{n:"BrtEndIconSet",f:parsenoop},467:{n:"BrtBeginDatabar",f:parsenoop},468:{n:"BrtEndDatabar",f:parsenoop},469:{n:"BrtBeginColorScale",f:parsenoop},470:{n:"BrtEndColorScale",f:parsenoop},471:{n:"BrtCFVO",f:parsenoop},472:{n:"BrtExternValueMeta",f:parsenoop},473:{n:"BrtBeginColorPalette",f:parsenoop},474:{n:"BrtEndColorPalette",f:parsenoop},475:{n:"BrtIndexedColor",f:parsenoop},476:{n:"BrtMargins",f:parsenoop},477:{n:"BrtPrintOptions",f:parsenoop},478:{n:"BrtPageSetup",f:parsenoop},479:{n:"BrtBeginHeaderFooter",f:parsenoop},480:{n:"BrtEndHeaderFooter",f:parsenoop},481:{n:"BrtBeginSXCrtFormat",f:parsenoop},482:{n:"BrtEndSXCrtFormat",f:parsenoop},483:{n:"BrtBeginSXCrtFormats",f:parsenoop},484:{n:"BrtEndSXCrtFormats",f:parsenoop},485:{n:"BrtWsFmtInfo",f:parsenoop},486:{n:"BrtBeginMgs",f:parsenoop},487:{n:"BrtEndMGs",f:parsenoop},488:{n:"BrtBeginMGMaps",f:parsenoop},489:{n:"BrtEndMGMaps",f:parsenoop},490:{n:"BrtBeginMG",f:parsenoop},491:{n:"BrtEndMG",f:parsenoop},492:{n:"BrtBeginMap",f:parsenoop},493:{n:"BrtEndMap",f:parsenoop},494:{n:"BrtHLink",f:parse_BrtHLink},495:{n:"BrtBeginDCon",f:parsenoop},496:{n:"BrtEndDCon",f:parsenoop},497:{n:"BrtBeginDRefs",f:parsenoop},498:{n:"BrtEndDRefs",f:parsenoop},499:{n:"BrtDRef",f:parsenoop},500:{n:"BrtBeginScenMan",f:parsenoop},501:{n:"BrtEndScenMan",f:parsenoop},502:{n:"BrtBeginSct",f:parsenoop},503:{n:"BrtEndSct",f:parsenoop},504:{n:"BrtSlc",f:parsenoop},505:{n:"BrtBeginDXFs",f:parsenoop},506:{n:"BrtEndDXFs",f:parsenoop},507:{n:"BrtDXF",f:parsenoop},508:{n:"BrtBeginTableStyles",f:parsenoop},509:{n:"BrtEndTableStyles",f:parsenoop},510:{n:"BrtBeginTableStyle",f:parsenoop},511:{n:"BrtEndTableStyle",f:parsenoop},512:{n:"BrtTableStyleElement",f:parsenoop},513:{n:"BrtTableStyleClient",f:parsenoop},514:{n:"BrtBeginVolDeps",f:parsenoop},515:{n:"BrtEndVolDeps",f:parsenoop},516:{n:"BrtBeginVolType",f:parsenoop},517:{n:"BrtEndVolType",f:parsenoop},518:{n:"BrtBeginVolMain",f:parsenoop},519:{n:"BrtEndVolMain",f:parsenoop},520:{n:"BrtBeginVolTopic",f:parsenoop},521:{n:"BrtEndVolTopic",f:parsenoop},522:{n:"BrtVolSubtopic",f:parsenoop},523:{n:"BrtVolRef",f:parsenoop},524:{n:"BrtVolNum",f:parsenoop},525:{n:"BrtVolErr",f:parsenoop},526:{n:"BrtVolStr",f:parsenoop},527:{n:"BrtVolBool",f:parsenoop},528:{n:"BrtBeginCalcChain$",f:parsenoop},529:{n:"BrtEndCalcChain$",f:parsenoop},530:{n:"BrtBeginSortState",f:parsenoop},531:{n:"BrtEndSortState",f:parsenoop},532:{n:"BrtBeginSortCond",f:parsenoop},533:{n:"BrtEndSortCond",f:parsenoop},534:{n:"BrtBookProtection",f:parsenoop},535:{n:"BrtSheetProtection",f:parsenoop},536:{n:"BrtRangeProtection",f:parsenoop},537:{n:"BrtPhoneticInfo",f:parsenoop},538:{n:"BrtBeginECTxtWiz",f:parsenoop},539:{n:"BrtEndECTxtWiz",
+f:parsenoop},540:{n:"BrtBeginECTWFldInfoLst",f:parsenoop},541:{n:"BrtEndECTWFldInfoLst",f:parsenoop},542:{n:"BrtBeginECTwFldInfo",f:parsenoop},548:{n:"BrtFileSharing",f:parsenoop},549:{n:"BrtOleSize",f:parsenoop},550:{n:"BrtDrawing",f:parsenoop},551:{n:"BrtLegacyDrawing",f:parsenoop},552:{n:"BrtLegacyDrawingHF",f:parsenoop},553:{n:"BrtWebOpt",f:parsenoop},554:{n:"BrtBeginWebPubItems",f:parsenoop},555:{n:"BrtEndWebPubItems",f:parsenoop},556:{n:"BrtBeginWebPubItem",f:parsenoop},557:{n:"BrtEndWebPubItem",f:parsenoop},558:{n:"BrtBeginSXCondFmt",f:parsenoop},559:{n:"BrtEndSXCondFmt",f:parsenoop},560:{n:"BrtBeginSXCondFmts",f:parsenoop},561:{n:"BrtEndSXCondFmts",f:parsenoop},562:{n:"BrtBkHim",f:parsenoop},564:{n:"BrtColor",f:parsenoop},565:{n:"BrtBeginIndexedColors",f:parsenoop},566:{n:"BrtEndIndexedColors",f:parsenoop},569:{n:"BrtBeginMRUColors",f:parsenoop},570:{n:"BrtEndMRUColors",f:parsenoop},572:{n:"BrtMRUColor",f:parsenoop},573:{n:"BrtBeginDVals",f:parsenoop},574:{n:"BrtEndDVals",f:parsenoop},577:{n:"BrtSupNameStart",f:parsenoop},578:{n:"BrtSupNameValueStart",f:parsenoop},579:{n:"BrtSupNameValueEnd",f:parsenoop},580:{n:"BrtSupNameNum",f:parsenoop},581:{n:"BrtSupNameErr",f:parsenoop},582:{n:"BrtSupNameSt",f:parsenoop},583:{n:"BrtSupNameNil",f:parsenoop},584:{n:"BrtSupNameBool",f:parsenoop},585:{n:"BrtSupNameFmla",f:parsenoop},586:{n:"BrtSupNameBits",f:parsenoop},587:{n:"BrtSupNameEnd",f:parsenoop},588:{n:"BrtEndSupBook",f:parsenoop},589:{n:"BrtCellSmartTagProperty",f:parsenoop},590:{n:"BrtBeginCellSmartTag",f:parsenoop},591:{n:"BrtEndCellSmartTag",f:parsenoop},592:{n:"BrtBeginCellSmartTags",f:parsenoop},593:{n:"BrtEndCellSmartTags",f:parsenoop},594:{n:"BrtBeginSmartTags",f:parsenoop},595:{n:"BrtEndSmartTags",f:parsenoop},596:{n:"BrtSmartTagType",f:parsenoop},597:{n:"BrtBeginSmartTagTypes",f:parsenoop},598:{n:"BrtEndSmartTagTypes",f:parsenoop},599:{n:"BrtBeginSXFilters",f:parsenoop},600:{n:"BrtEndSXFilters",f:parsenoop},601:{n:"BrtBeginSXFILTER",f:parsenoop},602:{n:"BrtEndSXFilter",f:parsenoop},603:{n:"BrtBeginFills",f:parsenoop},604:{n:"BrtEndFills",f:parsenoop},605:{n:"BrtBeginCellWatches",f:parsenoop},606:{n:"BrtEndCellWatches",f:parsenoop},607:{n:"BrtCellWatch",f:parsenoop},608:{n:"BrtBeginCRErrs",f:parsenoop},609:{n:"BrtEndCRErrs",f:parsenoop},610:{n:"BrtCrashRecErr",f:parsenoop},611:{n:"BrtBeginFonts",f:parsenoop},612:{n:"BrtEndFonts",f:parsenoop},613:{n:"BrtBeginBorders",f:parsenoop},614:{n:"BrtEndBorders",f:parsenoop},615:{n:"BrtBeginFmts",f:parsenoop},616:{n:"BrtEndFmts",f:parsenoop},617:{n:"BrtBeginCellXFs",f:parsenoop},618:{n:"BrtEndCellXFs",f:parsenoop},619:{n:"BrtBeginStyles",f:parsenoop},620:{n:"BrtEndStyles",f:parsenoop},625:{n:"BrtBigName",f:parsenoop},626:{n:"BrtBeginCellStyleXFs",f:parsenoop},627:{n:"BrtEndCellStyleXFs",f:parsenoop},628:{n:"BrtBeginComments",f:parsenoop},629:{n:"BrtEndComments",f:parsenoop},630:{n:"BrtBeginCommentAuthors",f:parsenoop},631:{n:"BrtEndCommentAuthors",f:parsenoop},632:{n:"BrtCommentAuthor",f:parse_BrtCommentAuthor},633:{n:"BrtBeginCommentList",f:parsenoop},634:{n:"BrtEndCommentList",f:parsenoop},635:{n:"BrtBeginComment",f:parse_BrtBeginComment},636:{n:"BrtEndComment",f:parsenoop},637:{n:"BrtCommentText",f:parse_BrtCommentText},638:{n:"BrtBeginOleObjects",f:parsenoop},639:{n:"BrtOleObject",f:parsenoop},640:{n:"BrtEndOleObjects",f:parsenoop},641:{n:"BrtBeginSxrules",f:parsenoop},642:{n:"BrtEndSxRules",f:parsenoop},643:{n:"BrtBeginActiveXControls",f:parsenoop},644:{n:"BrtActiveX",f:parsenoop},645:{n:"BrtEndActiveXControls",f:parsenoop},646:{n:"BrtBeginPCDSDTCEMembersSortBy",f:parsenoop},648:{n:"BrtBeginCellIgnoreECs",f:parsenoop},649:{n:"BrtCellIgnoreEC",f:parsenoop},650:{n:"BrtEndCellIgnoreECs",f:parsenoop},651:{n:"BrtCsProp",f:parsenoop},652:{n:"BrtCsPageSetup",f:parsenoop},653:{n:"BrtBeginUserCsViews",f:parsenoop},654:{n:"BrtEndUserCsViews",f:parsenoop},655:{n:"BrtBeginUserCsView",f:parsenoop},656:{n:"BrtEndUserCsView",f:parsenoop},657:{n:"BrtBeginPcdSFCIEntries",f:parsenoop},658:{n:"BrtEndPCDSFCIEntries",f:parsenoop},659:{n:"BrtPCDSFCIEntry",f:parsenoop},660:{n:"BrtBeginListParts",f:parsenoop},661:{n:"BrtListPart",f:parsenoop},662:{n:"BrtEndListParts",f:parsenoop},663:{n:"BrtSheetCalcProp",f:parsenoop},664:{n:"BrtBeginFnGroup",f:parsenoop},665:{n:"BrtFnGroup",f:parsenoop},666:{n:"BrtEndFnGroup",f:parsenoop},667:{n:"BrtSupAddin",f:parsenoop},668:{n:"BrtSXTDMPOrder",f:parsenoop},669:{n:"BrtCsProtection",f:parsenoop},671:{n:"BrtBeginWsSortMap",f:parsenoop},672:{n:"BrtEndWsSortMap",f:parsenoop},673:{n:"BrtBeginRRSort",f:parsenoop},674:{n:"BrtEndRRSort",f:parsenoop},675:{n:"BrtRRSortItem",f:parsenoop},676:{n:"BrtFileSharingIso",f:parsenoop},677:{n:"BrtBookProtectionIso",f:parsenoop},678:{n:"BrtSheetProtectionIso",f:parsenoop},679:{n:"BrtCsProtectionIso",f:parsenoop},680:{n:"BrtRangeProtectionIso",f:parsenoop},1024:{n:"BrtRwDescent",f:parsenoop},1025:{n:"BrtKnownFonts",f:parsenoop},1026:{n:"BrtBeginSXTupleSet",f:parsenoop},1027:{n:"BrtEndSXTupleSet",f:parsenoop},1028:{n:"BrtBeginSXTupleSetHeader",f:parsenoop},1029:{n:"BrtEndSXTupleSetHeader",f:parsenoop},1030:{n:"BrtSXTupleSetHeaderItem",f:parsenoop},1031:{n:"BrtBeginSXTupleSetData",f:parsenoop},1032:{n:"BrtEndSXTupleSetData",f:parsenoop},1033:{n:"BrtBeginSXTupleSetRow",f:parsenoop},1034:{n:"BrtEndSXTupleSetRow",f:parsenoop},1035:{n:"BrtSXTupleSetRowItem",f:parsenoop},1036:{n:"BrtNameExt",f:parsenoop},1037:{n:"BrtPCDH14",f:parsenoop},1038:{n:"BrtBeginPCDCalcMem14",f:parsenoop},1039:{n:"BrtEndPCDCalcMem14",f:parsenoop},1040:{n:"BrtSXTH14",f:parsenoop},1041:{n:"BrtBeginSparklineGroup",f:parsenoop},1042:{n:"BrtEndSparklineGroup",f:parsenoop},1043:{n:"BrtSparkline",f:parsenoop},1044:{n:"BrtSXDI14",f:parsenoop},1045:{n:"BrtWsFmtInfoEx14",f:parsenoop},1046:{n:"BrtBeginConditionalFormatting14",f:parsenoop},1047:{n:"BrtEndConditionalFormatting14",f:parsenoop},1048:{n:"BrtBeginCFRule14",f:parsenoop},1049:{n:"BrtEndCFRule14",f:parsenoop},1050:{n:"BrtCFVO14",f:parsenoop},1051:{n:"BrtBeginDatabar14",f:parsenoop},1052:{n:"BrtBeginIconSet14",f:parsenoop},1053:{n:"BrtDVal14",f:parsenoop},1054:{n:"BrtBeginDVals14",f:parsenoop},1055:{n:"BrtColor14",f:parsenoop},1056:{n:"BrtBeginSparklines",f:parsenoop},1057:{n:"BrtEndSparklines",f:parsenoop},1058:{n:"BrtBeginSparklineGroups",f:parsenoop},1059:{n:"BrtEndSparklineGroups",f:parsenoop},1061:{n:"BrtSXVD14",f:parsenoop},1062:{n:"BrtBeginSxview14",f:parsenoop},1063:{n:"BrtEndSxview14",f:parsenoop},1066:{n:"BrtBeginPCD14",f:parsenoop},1067:{n:"BrtEndPCD14",f:parsenoop},1068:{n:"BrtBeginExtConn14",f:parsenoop},1069:{n:"BrtEndExtConn14",f:parsenoop},1070:{n:"BrtBeginSlicerCacheIDs",f:parsenoop},1071:{n:"BrtEndSlicerCacheIDs",f:parsenoop},1072:{n:"BrtBeginSlicerCacheID",f:parsenoop},1073:{n:"BrtEndSlicerCacheID",f:parsenoop},1075:{n:"BrtBeginSlicerCache",f:parsenoop},1076:{n:"BrtEndSlicerCache",f:parsenoop},1077:{n:"BrtBeginSlicerCacheDef",f:parsenoop},1078:{n:"BrtEndSlicerCacheDef",f:parsenoop},1079:{n:"BrtBeginSlicersEx",f:parsenoop},1080:{n:"BrtEndSlicersEx",f:parsenoop},1081:{n:"BrtBeginSlicerEx",f:parsenoop},1082:{n:"BrtEndSlicerEx",f:parsenoop},1083:{n:"BrtBeginSlicer",f:parsenoop},1084:{n:"BrtEndSlicer",f:parsenoop},1085:{n:"BrtSlicerCachePivotTables",f:parsenoop},1086:{n:"BrtBeginSlicerCacheOlapImpl",f:parsenoop},1087:{n:"BrtEndSlicerCacheOlapImpl",f:parsenoop},1088:{n:"BrtBeginSlicerCacheLevelsData",f:parsenoop},1089:{n:"BrtEndSlicerCacheLevelsData",f:parsenoop},1090:{n:"BrtBeginSlicerCacheLevelData",f:parsenoop},1091:{n:"BrtEndSlicerCacheLevelData",f:parsenoop},1092:{n:"BrtBeginSlicerCacheSiRanges",f:parsenoop},1093:{n:"BrtEndSlicerCacheSiRanges",f:parsenoop},1094:{n:"BrtBeginSlicerCacheSiRange",f:parsenoop},1095:{n:"BrtEndSlicerCacheSiRange",f:parsenoop},1096:{n:"BrtSlicerCacheOlapItem",f:parsenoop},1097:{n:"BrtBeginSlicerCacheSelections",f:parsenoop},1098:{n:"BrtSlicerCacheSelection",f:parsenoop},1099:{n:"BrtEndSlicerCacheSelections",f:parsenoop},1100:{n:"BrtBeginSlicerCacheNative",f:parsenoop},1101:{n:"BrtEndSlicerCacheNative",f:parsenoop},1102:{n:"BrtSlicerCacheNativeItem",f:parsenoop},1103:{n:"BrtRangeProtection14",f:parsenoop},1104:{n:"BrtRangeProtectionIso14",f:parsenoop},1105:{n:"BrtCellIgnoreEC14",f:parsenoop},1111:{n:"BrtList14",f:parsenoop},1112:{n:"BrtCFIcon",f:parsenoop},1113:{n:"BrtBeginSlicerCachesPivotCacheIDs",f:parsenoop},1114:{n:"BrtEndSlicerCachesPivotCacheIDs",f:parsenoop},1115:{n:"BrtBeginSlicers",f:parsenoop},1116:{n:"BrtEndSlicers",f:parsenoop},1117:{n:"BrtWbProp14",f:parsenoop},1118:{n:"BrtBeginSXEdit",f:parsenoop},1119:{n:"BrtEndSXEdit",f:parsenoop},1120:{n:"BrtBeginSXEdits",f:parsenoop},1121:{n:"BrtEndSXEdits",f:parsenoop},1122:{n:"BrtBeginSXChange",f:parsenoop},1123:{n:"BrtEndSXChange",f:parsenoop},1124:{n:"BrtBeginSXChanges",f:parsenoop},1125:{n:"BrtEndSXChanges",f:parsenoop},1126:{n:"BrtSXTupleItems",f:parsenoop},1128:{n:"BrtBeginSlicerStyle",f:parsenoop},1129:{n:"BrtEndSlicerStyle",f:parsenoop},1130:{n:"BrtSlicerStyleElement",f:parsenoop},1131:{n:"BrtBeginStyleSheetExt14",f:parsenoop},1132:{n:"BrtEndStyleSheetExt14",f:parsenoop},1133:{n:"BrtBeginSlicerCachesPivotCacheID",f:parsenoop},1134:{n:"BrtEndSlicerCachesPivotCacheID",f:parsenoop},1135:{n:"BrtBeginConditionalFormattings",f:parsenoop},1136:{n:"BrtEndConditionalFormattings",f:parsenoop},1137:{n:"BrtBeginPCDCalcMemExt",f:parsenoop},1138:{n:"BrtEndPCDCalcMemExt",f:parsenoop},1139:{n:"BrtBeginPCDCalcMemsExt",f:parsenoop},1140:{n:"BrtEndPCDCalcMemsExt",f:parsenoop},1141:{n:"BrtPCDField14",f:parsenoop},1142:{n:"BrtBeginSlicerStyles",f:parsenoop},1143:{n:"BrtEndSlicerStyles",f:parsenoop},1144:{n:"BrtBeginSlicerStyleElements",f:parsenoop},1145:{n:"BrtEndSlicerStyleElements",f:parsenoop},1146:{n:"BrtCFRuleExt",f:parsenoop},1147:{n:"BrtBeginSXCondFmt14",f:parsenoop},1148:{n:"BrtEndSXCondFmt14",f:parsenoop},1149:{n:"BrtBeginSXCondFmts14",f:parsenoop},1150:{n:"BrtEndSXCondFmts14",f:parsenoop},1152:{n:"BrtBeginSortCond14",f:parsenoop},1153:{n:"BrtEndSortCond14",f:parsenoop},1154:{n:"BrtEndDVals14",f:parsenoop},1155:{n:"BrtEndIconSet14",f:parsenoop},1156:{n:"BrtEndDatabar14",f:parsenoop},1157:{n:"BrtBeginColorScale14",f:parsenoop},1158:{n:"BrtEndColorScale14",f:parsenoop},1159:{n:"BrtBeginSxrules14",f:parsenoop},1160:{n:"BrtEndSxrules14",f:parsenoop},1161:{n:"BrtBeginPRule14",f:parsenoop},1162:{n:"BrtEndPRule14",f:parsenoop},1163:{n:"BrtBeginPRFilters14",f:parsenoop},1164:{n:"BrtEndPRFilters14",f:parsenoop},1165:{n:"BrtBeginPRFilter14",f:parsenoop},1166:{n:"BrtEndPRFilter14",f:parsenoop},1167:{n:"BrtBeginPRFItem14",f:parsenoop},1168:{n:"BrtEndPRFItem14",f:parsenoop},1169:{n:"BrtBeginCellIgnoreECs14",f:parsenoop},1170:{n:"BrtEndCellIgnoreECs14",f:parsenoop},1171:{n:"BrtDxf14",f:parsenoop},1172:{n:"BrtBeginDxF14s",f:parsenoop},1173:{n:"BrtEndDxf14s",f:parsenoop},1177:{n:"BrtFilter14",f:parsenoop},1178:{n:"BrtBeginCustomFilters14",f:parsenoop},1180:{n:"BrtCustomFilter14",f:parsenoop},1181:{n:"BrtIconFilter14",f:parsenoop},1182:{n:"BrtPivotCacheConnectionName",f:parsenoop},2048:{n:"BrtBeginDecoupledPivotCacheIDs",f:parsenoop},2049:{n:"BrtEndDecoupledPivotCacheIDs",f:parsenoop},2050:{n:"BrtDecoupledPivotCacheID",f:parsenoop},2051:{n:"BrtBeginPivotTableRefs",f:parsenoop},2052:{n:"BrtEndPivotTableRefs",f:parsenoop},2053:{n:"BrtPivotTableRef",f:parsenoop},2054:{n:"BrtSlicerCacheBookPivotTables",f:parsenoop},2055:{n:"BrtBeginSxvcells",f:parsenoop},2056:{n:"BrtEndSxvcells",f:parsenoop},2057:{n:"BrtBeginSxRow",f:parsenoop},2058:{n:"BrtEndSxRow",f:parsenoop},2060:{n:"BrtPcdCalcMem15",f:parsenoop},2067:{n:"BrtQsi15",f:parsenoop},2068:{n:"BrtBeginWebExtensions",f:parsenoop},2069:{n:"BrtEndWebExtensions",f:parsenoop},2070:{n:"BrtWebExtension",f:parsenoop},2071:{n:"BrtAbsPath15",f:parsenoop},2072:{n:"BrtBeginPivotTableUISettings",f:parsenoop},2073:{n:"BrtEndPivotTableUISettings",f:parsenoop},2075:{n:"BrtTableSlicerCacheIDs",f:parsenoop},2076:{n:"BrtTableSlicerCacheID",f:parsenoop},2077:{n:"BrtBeginTableSlicerCache",f:parsenoop},2078:{n:"BrtEndTableSlicerCache",f:parsenoop},2079:{n:"BrtSxFilter15",f:parsenoop},2080:{n:"BrtBeginTimelineCachePivotCacheIDs",f:parsenoop},2081:{n:"BrtEndTimelineCachePivotCacheIDs",f:parsenoop},2082:{n:"BrtTimelineCachePivotCacheID",f:parsenoop},2083:{n:"BrtBeginTimelineCacheIDs",f:parsenoop},2084:{n:"BrtEndTimelineCacheIDs",f:parsenoop},2085:{n:"BrtBeginTimelineCacheID",f:parsenoop},2086:{n:"BrtEndTimelineCacheID",f:parsenoop},2087:{n:"BrtBeginTimelinesEx",f:parsenoop},2088:{n:"BrtEndTimelinesEx",f:parsenoop},2089:{n:"BrtBeginTimelineEx",f:parsenoop},2090:{n:"BrtEndTimelineEx",f:parsenoop},2091:{n:"BrtWorkBookPr15",f:parsenoop},2092:{n:"BrtPCDH15",f:parsenoop},2093:{n:"BrtBeginTimelineStyle",f:parsenoop},2094:{n:"BrtEndTimelineStyle",f:parsenoop},2095:{n:"BrtTimelineStyleElement",f:parsenoop},2096:{n:"BrtBeginTimelineStylesheetExt15",f:parsenoop},2097:{n:"BrtEndTimelineStylesheetExt15",f:parsenoop},2098:{n:"BrtBeginTimelineStyles",f:parsenoop},2099:{n:"BrtEndTimelineStyles",f:parsenoop},2100:{n:"BrtBeginTimelineStyleElements",f:parsenoop},2101:{n:"BrtEndTimelineStyleElements",f:parsenoop},2102:{n:"BrtDxf15",f:parsenoop},2103:{n:"BrtBeginDxfs15",f:parsenoop},2104:{n:"brtEndDxfs15",f:parsenoop},2105:{n:"BrtSlicerCacheHideItemsWithNoData",f:parsenoop},2106:{n:"BrtBeginItemUniqueNames",f:parsenoop},2107:{n:"BrtEndItemUniqueNames",f:parsenoop},2108:{n:"BrtItemUniqueName",f:parsenoop},2109:{n:"BrtBeginExtConn15",f:parsenoop},2110:{n:"BrtEndExtConn15",f:parsenoop},2111:{n:"BrtBeginOledbPr15",f:parsenoop},2112:{n:"BrtEndOledbPr15",f:parsenoop},2113:{n:"BrtBeginDataFeedPr15",f:parsenoop},2114:{n:"BrtEndDataFeedPr15",f:parsenoop},2115:{n:"BrtTextPr15",f:parsenoop},2116:{n:"BrtRangePr15",f:parsenoop},2117:{n:"BrtDbCommand15",f:parsenoop},2118:{n:"BrtBeginDbTables15",f:parsenoop},2119:{n:"BrtEndDbTables15",f:parsenoop},2120:{n:"BrtDbTable15",f:parsenoop},2121:{n:"BrtBeginDataModel",f:parsenoop},2122:{n:"BrtEndDataModel",f:parsenoop},2123:{n:"BrtBeginModelTables",f:parsenoop},2124:{n:"BrtEndModelTables",f:parsenoop},2125:{n:"BrtModelTable",f:parsenoop},2126:{n:"BrtBeginModelRelationships",f:parsenoop},2127:{n:"BrtEndModelRelationships",f:parsenoop},2128:{n:"BrtModelRelationship",f:parsenoop},2129:{n:"BrtBeginECTxtWiz15",f:parsenoop},2130:{n:"BrtEndECTxtWiz15",f:parsenoop},2131:{n:"BrtBeginECTWFldInfoLst15",f:parsenoop},2132:{n:"BrtEndECTWFldInfoLst15",f:parsenoop},2133:{n:"BrtBeginECTWFldInfo15",f:parsenoop},2134:{n:"BrtFieldListActiveItem",f:parsenoop},2135:{n:"BrtPivotCacheIdVersion",f:parsenoop},2136:{n:"BrtSXDI15",f:parsenoop},65535:{n:"",f:parsenoop}};var evert_RE=evert_key(XLSBRecordEnum,"n");var XLSRecordEnum={3:{n:"BIFF2NUM",f:parse_BIFF2NUM},4:{n:"BIFF2STR",f:parse_BIFF2STR},6:{n:"Formula",f:parse_Formula},9:{n:"BOF",f:parse_BOF},10:{n:"EOF",f:parse_EOF},12:{n:"CalcCount",f:parse_CalcCount},13:{n:"CalcMode",f:parse_CalcMode},14:{n:"CalcPrecision",f:parse_CalcPrecision},15:{n:"CalcRefMode",f:parse_CalcRefMode},16:{n:"CalcDelta",f:parse_CalcDelta},17:{n:"CalcIter",f:parse_CalcIter},18:{n:"Protect",f:parse_Protect},19:{n:"Password",f:parse_Password},20:{n:"Header",f:parse_Header},21:{n:"Footer",f:parse_Footer},23:{n:"ExternSheet",f:parse_ExternSheet},24:{n:"Lbl",f:parse_Lbl},25:{n:"WinProtect",f:parse_WinProtect},26:{n:"VerticalPageBreaks",f:parse_VerticalPageBreaks},27:{n:"HorizontalPageBreaks",f:parse_HorizontalPageBreaks},28:{n:"Note",f:parse_Note},29:{n:"Selection",f:parse_Selection},34:{n:"Date1904",f:parse_Date1904},35:{n:"ExternName",f:parse_ExternName},38:{n:"LeftMargin",f:parse_LeftMargin},39:{n:"RightMargin",f:parse_RightMargin},40:{n:"TopMargin",f:parse_TopMargin},41:{n:"BottomMargin",f:parse_BottomMargin},42:{n:"PrintRowCol",f:parse_PrintRowCol},43:{n:"PrintGrid",f:parse_PrintGrid},47:{n:"FilePass",f:parse_FilePass},49:{n:"Font",f:parse_Font},51:{n:"PrintSize",f:parse_PrintSize},60:{n:"Continue",f:parse_Continue},61:{n:"Window1",f:parse_Window1},64:{n:"Backup",f:parse_Backup},65:{n:"Pane",f:parse_Pane},66:{n:"CodePage",f:parse_CodePage},77:{n:"Pls",f:parse_Pls},80:{n:"DCon",f:parse_DCon},81:{n:"DConRef",f:parse_DConRef},82:{n:"DConName",f:parse_DConName},85:{n:"DefColWidth",f:parse_DefColWidth},89:{n:"XCT",f:parse_XCT},90:{n:"CRN",f:parse_CRN},91:{n:"FileSharing",f:parse_FileSharing},92:{n:"WriteAccess",f:parse_WriteAccess},93:{n:"Obj",f:parse_Obj},94:{n:"Uncalced",f:parse_Uncalced},95:{n:"CalcSaveRecalc",f:parse_CalcSaveRecalc},96:{n:"Template",f:parse_Template},97:{n:"Intl",f:parse_Intl},99:{n:"ObjProtect",f:parse_ObjProtect},125:{n:"ColInfo",f:parse_ColInfo},128:{n:"Guts",f:parse_Guts},129:{n:"WsBool",f:parse_WsBool},130:{n:"GridSet",f:parse_GridSet},131:{n:"HCenter",f:parse_HCenter},132:{n:"VCenter",f:parse_VCenter},133:{n:"BoundSheet8",f:parse_BoundSheet8},134:{n:"WriteProtect",f:parse_WriteProtect},140:{n:"Country",f:parse_Country},141:{n:"HideObj",f:parse_HideObj},144:{n:"Sort",f:parse_Sort},146:{n:"Palette",f:parse_Palette},151:{n:"Sync",f:parse_Sync},152:{n:"LPr",f:parse_LPr},153:{n:"DxGCol",f:parse_DxGCol},154:{n:"FnGroupName",f:parse_FnGroupName},155:{n:"FilterMode",f:parse_FilterMode},156:{n:"BuiltInFnGroupCount",f:parse_BuiltInFnGroupCount},157:{n:"AutoFilterInfo",f:parse_AutoFilterInfo},158:{n:"AutoFilter",f:parse_AutoFilter},160:{n:"Scl",f:parse_Scl},161:{n:"Setup",f:parse_Setup},174:{n:"ScenMan",f:parse_ScenMan},175:{n:"SCENARIO",f:parse_SCENARIO},176:{n:"SxView",f:parse_SxView},177:{n:"Sxvd",f:parse_Sxvd},178:{n:"SXVI",f:parse_SXVI},180:{n:"SxIvd",f:parse_SxIvd},181:{n:"SXLI",f:parse_SXLI},182:{n:"SXPI",f:parse_SXPI},184:{n:"DocRoute",f:parse_DocRoute},185:{n:"RecipName",f:parse_RecipName},189:{n:"MulRk",f:parse_MulRk},190:{n:"MulBlank",f:parse_MulBlank},193:{n:"Mms",f:parse_Mms},197:{n:"SXDI",f:parse_SXDI},198:{n:"SXDB",f:parse_SXDB},199:{n:"SXFDB",f:parse_SXFDB},200:{n:"SXDBB",f:parse_SXDBB},201:{n:"SXNum",f:parse_SXNum},202:{n:"SxBool",f:parse_SxBool},203:{n:"SxErr",f:parse_SxErr},204:{n:"SXInt",f:parse_SXInt},205:{n:"SXString",f:parse_SXString},206:{n:"SXDtr",f:parse_SXDtr},207:{n:"SxNil",f:parse_SxNil},208:{n:"SXTbl",f:parse_SXTbl},209:{n:"SXTBRGIITM",f:parse_SXTBRGIITM},210:{n:"SxTbpg",f:parse_SxTbpg},211:{n:"ObProj",f:parse_ObProj},213:{n:"SXStreamID",f:parse_SXStreamID},215:{n:"DBCell",f:parse_DBCell},216:{n:"SXRng",f:parse_SXRng},217:{n:"SxIsxoper",f:parse_SxIsxoper},218:{n:"BookBool",f:parse_BookBool},220:{n:"DbOrParamQry",f:parse_DbOrParamQry},221:{n:"ScenarioProtect",f:parse_ScenarioProtect},222:{n:"OleObjectSize",f:parse_OleObjectSize},224:{n:"XF",f:parse_XF},225:{n:"InterfaceHdr",f:parse_InterfaceHdr},226:{n:"InterfaceEnd",f:parse_InterfaceEnd},227:{n:"SXVS",f:parse_SXVS},229:{n:"MergeCells",f:parse_MergeCells},233:{n:"BkHim",f:parse_BkHim},235:{n:"MsoDrawingGroup",f:parse_MsoDrawingGroup},236:{n:"MsoDrawing",f:parse_MsoDrawing},237:{n:"MsoDrawingSelection",f:parse_MsoDrawingSelection},239:{n:"PhoneticInfo",f:parse_PhoneticInfo},240:{n:"SxRule",f:parse_SxRule},241:{n:"SXEx",f:parse_SXEx},242:{n:"SxFilt",f:parse_SxFilt},244:{n:"SxDXF",f:parse_SxDXF},245:{n:"SxItm",f:parse_SxItm},246:{n:"SxName",f:parse_SxName},247:{n:"SxSelect",f:parse_SxSelect},248:{n:"SXPair",f:parse_SXPair},249:{n:"SxFmla",f:parse_SxFmla},251:{n:"SxFormat",f:parse_SxFormat},252:{n:"SST",f:parse_SST},253:{n:"LabelSst",f:parse_LabelSst},255:{n:"ExtSST",f:parse_ExtSST},256:{n:"SXVDEx",f:parse_SXVDEx},259:{n:"SXFormula",f:parse_SXFormula},290:{n:"SXDBEx",f:parse_SXDBEx},311:{n:"RRDInsDel",f:parse_RRDInsDel},312:{n:"RRDHead",f:parse_RRDHead},315:{n:"RRDChgCell",f:parse_RRDChgCell},317:{n:"RRTabId",f:parse_RRTabId},318:{n:"RRDRenSheet",f:parse_RRDRenSheet},319:{n:"RRSort",f:parse_RRSort},320:{n:"RRDMove",f:parse_RRDMove},330:{n:"RRFormat",f:parse_RRFormat},331:{n:"RRAutoFmt",f:parse_RRAutoFmt},333:{n:"RRInsertSh",f:parse_RRInsertSh},334:{n:"RRDMoveBegin",f:parse_RRDMoveBegin},335:{n:"RRDMoveEnd",f:parse_RRDMoveEnd},336:{n:"RRDInsDelBegin",f:parse_RRDInsDelBegin},337:{n:"RRDInsDelEnd",f:parse_RRDInsDelEnd},338:{n:"RRDConflict",f:parse_RRDConflict},339:{n:"RRDDefName",f:parse_RRDDefName},340:{n:"RRDRstEtxp",f:parse_RRDRstEtxp},351:{n:"LRng",f:parse_LRng},352:{n:"UsesELFs",f:parse_UsesELFs},353:{n:"DSF",f:parse_DSF},401:{n:"CUsr",f:parse_CUsr},402:{n:"CbUsr",f:parse_CbUsr},403:{n:"UsrInfo",f:parse_UsrInfo},404:{n:"UsrExcl",f:parse_UsrExcl},405:{n:"FileLock",f:parse_FileLock},406:{n:"RRDInfo",f:parse_RRDInfo},407:{n:"BCUsrs",f:parse_BCUsrs},408:{n:"UsrChk",f:parse_UsrChk},425:{n:"UserBView",f:parse_UserBView},426:{n:"UserSViewBegin",f:parse_UserSViewBegin},427:{n:"UserSViewEnd",f:parse_UserSViewEnd},428:{n:"RRDUserView",f:parse_RRDUserView},429:{n:"Qsi",f:parse_Qsi},430:{n:"SupBook",f:parse_SupBook},431:{n:"Prot4Rev",f:parse_Prot4Rev},432:{n:"CondFmt",f:parse_CondFmt},433:{n:"CF",f:parse_CF},434:{n:"DVal",f:parse_DVal},437:{n:"DConBin",f:parse_DConBin},438:{n:"TxO",f:parse_TxO},439:{n:"RefreshAll",f:parse_RefreshAll},440:{n:"HLink",f:parse_HLink},441:{n:"Lel",f:parse_Lel},442:{n:"CodeName",f:parse_XLSCodeName},443:{n:"SXFDBType",f:parse_SXFDBType},444:{n:"Prot4RevPass",f:parse_Prot4RevPass},445:{n:"ObNoMacros",f:parse_ObNoMacros},446:{n:"Dv",f:parse_Dv},448:{n:"Excel9File",f:parse_Excel9File},449:{n:"RecalcId",f:parse_RecalcId,r:2},450:{n:"EntExU2",f:parse_EntExU2},512:{n:"Dimensions",f:parse_Dimensions},513:{n:"Blank",f:parse_Blank},515:{n:"Number",f:parse_Number},516:{n:"Label",f:parse_Label},517:{n:"BoolErr",f:parse_BoolErr},519:{n:"String",f:parse_String},520:{n:"Row",f:parse_Row},523:{n:"Index",f:parse_Index},545:{n:"Array",f:parse_Array},549:{n:"DefaultRowHeight",f:parse_DefaultRowHeight},566:{n:"Table",f:parse_Table},574:{n:"Window2",f:parse_Window2},638:{n:"RK",f:parse_RK},659:{n:"Style",f:parse_Style},1048:{n:"BigName",f:parse_BigName},1054:{n:"Format",f:parse_Format},1084:{n:"ContinueBigName",f:parse_ContinueBigName},1212:{n:"ShrFmla",f:parse_ShrFmla},2048:{n:"HLinkTooltip",f:parse_HLinkTooltip},2049:{n:"WebPub",f:parse_WebPub},2050:{n:"QsiSXTag",f:parse_QsiSXTag},2051:{n:"DBQueryExt",f:parse_DBQueryExt},2052:{n:"ExtString",f:parse_ExtString},2053:{n:"TxtQry",f:parse_TxtQry},2054:{n:"Qsir",f:parse_Qsir},2055:{n:"Qsif",f:parse_Qsif},2056:{n:"RRDTQSIF",f:parse_RRDTQSIF},2057:{n:"BOF",f:parse_BOF},2058:{n:"OleDbConn",f:parse_OleDbConn},2059:{n:"WOpt",f:parse_WOpt},2060:{n:"SXViewEx",f:parse_SXViewEx},2061:{n:"SXTH",f:parse_SXTH},2062:{n:"SXPIEx",f:parse_SXPIEx},2063:{n:"SXVDTEx",f:parse_SXVDTEx},2064:{n:"SXViewEx9",f:parse_SXViewEx9},2066:{n:"ContinueFrt",f:parse_ContinueFrt},2067:{n:"RealTimeData",f:parse_RealTimeData},2128:{n:"ChartFrtInfo",f:parse_ChartFrtInfo},2129:{n:"FrtWrapper",f:parse_FrtWrapper},2130:{n:"StartBlock",f:parse_StartBlock},2131:{n:"EndBlock",f:parse_EndBlock},2132:{n:"StartObject",f:parse_StartObject},2133:{n:"EndObject",f:parse_EndObject},2134:{n:"CatLab",f:parse_CatLab},2135:{n:"YMult",f:parse_YMult},2136:{n:"SXViewLink",f:parse_SXViewLink},2137:{n:"PivotChartBits",f:parse_PivotChartBits},2138:{n:"FrtFontList",f:parse_FrtFontList},2146:{n:"SheetExt",f:parse_SheetExt},2147:{n:"BookExt",f:parse_BookExt,r:12},2148:{n:"SXAddl",f:parse_SXAddl},2149:{n:"CrErr",f:parse_CrErr},2150:{n:"HFPicture",f:parse_HFPicture},2151:{n:"FeatHdr",f:parse_FeatHdr},2152:{n:"Feat",f:parse_Feat},2154:{n:"DataLabExt",f:parse_DataLabExt},2155:{n:"DataLabExtContents",f:parse_DataLabExtContents},2156:{n:"CellWatch",f:parse_CellWatch},2161:{n:"FeatHdr11",f:parse_FeatHdr11},2162:{n:"Feature11",f:parse_Feature11},2164:{n:"DropDownObjIds",f:parse_DropDownObjIds},2165:{n:"ContinueFrt11",f:parse_ContinueFrt11},2166:{n:"DConn",f:parse_DConn},2167:{n:"List12",f:parse_List12},2168:{n:"Feature12",f:parse_Feature12},2169:{n:"CondFmt12",f:parse_CondFmt12},2170:{n:"CF12",f:parse_CF12},2171:{n:"CFEx",f:parse_CFEx},2172:{n:"XFCRC",f:parse_XFCRC,r:12},2173:{n:"XFExt",f:parse_XFExt,r:12},2174:{n:"AutoFilter12",f:parse_AutoFilter12},2175:{n:"ContinueFrt12",f:parse_ContinueFrt12},2180:{n:"MDTInfo",f:parse_MDTInfo},2181:{n:"MDXStr",f:parse_MDXStr},2182:{n:"MDXTuple",f:parse_MDXTuple},2183:{n:"MDXSet",f:parse_MDXSet},2184:{n:"MDXProp",f:parse_MDXProp},2185:{n:"MDXKPI",f:parse_MDXKPI},2186:{n:"MDB",f:parse_MDB},2187:{n:"PLV",f:parse_PLV},2188:{n:"Compat12",f:parse_Compat12,r:12},2189:{n:"DXF",f:parse_DXF},2190:{n:"TableStyles",f:parse_TableStyles,r:12},2191:{n:"TableStyle",f:parse_TableStyle},2192:{n:"TableStyleElement",f:parse_TableStyleElement},2194:{n:"StyleExt",f:parse_StyleExt},2195:{n:"NamePublish",f:parse_NamePublish},2196:{n:"NameCmt",f:parse_NameCmt},2197:{n:"SortData",f:parse_SortData},2198:{n:"Theme",f:parse_Theme,r:12},2199:{n:"GUIDTypeLib",f:parse_GUIDTypeLib},2200:{n:"FnGrp12",f:parse_FnGrp12},2201:{n:"NameFnGrp12",f:parse_NameFnGrp12},2202:{n:"MTRSettings",f:parse_MTRSettings,r:12},2203:{n:"CompressPictures",f:parse_CompressPictures},2204:{n:"HeaderFooter",f:parse_HeaderFooter},2205:{n:"CrtLayout12",f:parse_CrtLayout12},2206:{n:"CrtMlFrt",f:parse_CrtMlFrt},2207:{n:"CrtMlFrtContinue",f:parse_CrtMlFrtContinue},2211:{n:"ForceFullCalculation",f:parse_ForceFullCalculation},2212:{n:"ShapePropsStream",f:parse_ShapePropsStream},2213:{n:"TextPropsStream",f:parse_TextPropsStream},2214:{n:"RichTextStream",f:parse_RichTextStream},2215:{n:"CrtLayout12A",f:parse_CrtLayout12A},4097:{n:"Units",f:parse_Units},4098:{n:"Chart",f:parse_Chart},4099:{n:"Series",f:parse_Series},4102:{n:"DataFormat",f:parse_DataFormat},4103:{n:"LineFormat",f:parse_LineFormat},4105:{n:"MarkerFormat",f:parse_MarkerFormat},4106:{n:"AreaFormat",f:parse_AreaFormat},4107:{n:"PieFormat",f:parse_PieFormat},4108:{n:"AttachedLabel",f:parse_AttachedLabel},4109:{n:"SeriesText",f:parse_SeriesText},4116:{n:"ChartFormat",f:parse_ChartFormat},4117:{n:"Legend",f:parse_Legend},4118:{n:"SeriesList",f:parse_SeriesList},4119:{n:"Bar",f:parse_Bar},4120:{n:"Line",f:parse_Line},4121:{n:"Pie",f:parse_Pie},4122:{n:"Area",f:parse_Area},4123:{n:"Scatter",f:parse_Scatter},4124:{n:"CrtLine",f:parse_CrtLine},4125:{n:"Axis",f:parse_Axis},4126:{n:"Tick",f:parse_Tick},4127:{n:"ValueRange",f:parse_ValueRange},4128:{n:"CatSerRange",f:parse_CatSerRange},4129:{n:"AxisLine",f:parse_AxisLine},4130:{n:"CrtLink",f:parse_CrtLink},4132:{n:"DefaultText",f:parse_DefaultText},4133:{n:"Text",f:parse_Text},4134:{n:"FontX",f:parse_FontX},4135:{n:"ObjectLink",f:parse_ObjectLink},4146:{n:"Frame",f:parse_Frame},4147:{n:"Begin",f:parse_Begin},4148:{n:"End",f:parse_End},4149:{n:"PlotArea",f:parse_PlotArea},4154:{n:"Chart3d",f:parse_Chart3d},4156:{n:"PicF",f:parse_PicF},4157:{n:"DropBar",f:parse_DropBar},4158:{n:"Radar",f:parse_Radar},4159:{n:"Surf",f:parse_Surf},4160:{n:"RadarArea",f:parse_RadarArea},4161:{n:"AxisParent",f:parse_AxisParent},4163:{n:"LegendException",f:parse_LegendException},4164:{n:"ShtProps",f:parse_ShtProps},4165:{n:"SerToCrt",f:parse_SerToCrt},4166:{n:"AxesUsed",f:parse_AxesUsed},4168:{n:"SBaseRef",f:parse_SBaseRef},4170:{n:"SerParent",f:parse_SerParent},4171:{n:"SerAuxTrend",f:parse_SerAuxTrend},4174:{n:"IFmtRecord",f:parse_IFmtRecord},4175:{n:"Pos",f:parse_Pos},4176:{n:"AlRuns",f:parse_AlRuns},4177:{n:"BRAI",f:parse_BRAI},4187:{n:"SerAuxErrBar",f:parse_SerAuxErrBar},4188:{n:"ClrtClient",f:parse_ClrtClient},4189:{n:"SerFmt",f:parse_SerFmt},4191:{n:"Chart3DBarShape",f:parse_Chart3DBarShape},4192:{n:"Fbi",f:parse_Fbi},4193:{n:"BopPop",f:parse_BopPop},4194:{n:"AxcExt",f:parse_AxcExt},4195:{n:"Dat",f:parse_Dat},4196:{n:"PlotGrowth",f:parse_PlotGrowth},4197:{n:"SIIndex",f:parse_SIIndex},4198:{n:"GelFrame",f:parse_GelFrame},4199:{n:"BopPopCustom",f:parse_BopPopCustom},4200:{n:"Fbi2",f:parse_Fbi2},22:{n:"ExternCount",f:parsenoop},126:{n:"RK",f:parsenoop},127:{n:"ImData",f:parsenoop},135:{n:"Addin",f:parsenoop},136:{n:"Edg",f:parsenoop},137:{n:"Pub",f:parsenoop},145:{n:"Sub",f:parsenoop},148:{n:"LHRecord",f:parsenoop},149:{n:"LHNGraph",f:parsenoop},150:{n:"Sound",f:parsenoop},169:{n:"CoordList",f:parsenoop},171:{n:"GCW",f:parsenoop},188:{n:"ShrFmla",f:parsenoop},194:{n:"AddMenu",f:parsenoop},195:{n:"DelMenu",f:parsenoop},214:{n:"RString",f:parsenoop},223:{n:"UDDesc",f:parsenoop},234:{n:"TabIdConf",f:parsenoop},354:{n:"XL5Modify",f:parsenoop},421:{n:"FileSharing2",f:parsenoop},536:{n:"Name",f:parsenoop},547:{n:"ExternName",f:parse_ExternName},561:{n:"Font",f:parsenoop},1030:{n:"Formula",f:parse_Formula},2157:{n:"FeatInfo",f:parsenoop},2163:{n:"FeatInfo11",f:parsenoop},2177:{n:"SXAddl12",f:parsenoop},2240:{n:"AutoWebPub",f:parsenoop},2241:{n:"ListObj",f:parsenoop},2242:{n:"ListField",f:parsenoop},2243:{n:"ListDV",f:parsenoop},2244:{n:"ListCondFmt",f:parsenoop},2245:{n:"ListCF",f:parsenoop},2246:{n:"FMQry",f:parsenoop},2247:{n:"FMSQry",f:parsenoop},2248:{n:"PLV",f:parsenoop},2249:{n:"LnExt",f:parsenoop},2250:{n:"MkrExt",f:parsenoop},2251:{n:"CrtCoopt",f:parsenoop},0:{}};function parse_ods(zip,opts){if(typeof module!=="undefined"&&typeof require!=="undefined"&&typeof ODS==="undefined")ODS=require("./od"+"s");if(typeof ODS==="undefined"||!ODS.parse_ods)throw new Error("Unsupported ODS");return ODS.parse_ods(zip,opts)}function fix_opts_func(defaults){return function fix_opts(opts){for(var i=0;i!=defaults.length;++i){var d=defaults[i];if(opts[d[0]]===undefined)opts[d[0]]=d[1];if(d[2]==="n")opts[d[0]]=Number(opts[d[0]])}}}var fix_read_opts=fix_opts_func([["cellNF",false],["cellHTML",true],["cellFormula",true],["cellStyles",false],["cellDates",false],["sheetStubs",false],["sheetRows",0,"n"],["bookDeps",false],["bookSheets",false],["bookProps",false],["bookFiles",false],["bookVBA",false],["password",""],["WTF",false]]);var fix_write_opts=fix_opts_func([["cellDates",false],["bookSST",false],["bookType","xlsx"],["WTF",false]]);function safe_parse_wbrels(wbrels,sheets){if(!wbrels)return 0;try{wbrels=sheets.map(function pwbr(w){return[w.name,wbrels["!id"][w.id].Target]})}catch(e){return null}return!wbrels||wbrels.length===0?null:wbrels}function safe_parse_ws(zip,path,relsPath,sheet,sheetRels,sheets,opts){try{sheetRels[sheet]=parse_rels(getzipdata(zip,relsPath,true),path);sheets[sheet]=parse_ws(getzipdata(zip,path),path,opts,sheetRels[sheet])}catch(e){if(opts.WTF)throw e}}var nodirs=function nodirs(x){return x.substr(-1)!="/"};function parse_zip(zip,opts){make_ssf(SSF);opts=opts||{};fix_read_opts(opts);reset_cp();if(safegetzipfile(zip,"META-INF/manifest.xml"))return parse_ods(zip,opts);var entries=keys(zip.files).filter(nodirs).sort();var dir=parse_ct(getzipdata(zip,"[Content_Types].xml"),opts);var xlsb=false;var sheets,binname;if(dir.workbooks.length===0){binname="xl/workbook.xml";if(getzipdata(zip,binname,true))dir.workbooks.push(binname)}if(dir.workbooks.length===0){binname="xl/workbook.bin";if(!getzipfile(zip,binname,true))throw new Error("Could not find workbook");dir.workbooks.push(binname);xlsb=true}if(dir.workbooks[0].substr(-3)=="bin")xlsb=true;if(xlsb)set_cp(1200);if(!opts.bookSheets&&!opts.bookProps){strs=[];if(dir.sst)strs=parse_sst(getzipdata(zip,dir.sst.replace(/^\//,"")),dir.sst,opts);themes={};if(opts.cellStyles&&dir.themes.length)themes=parse_theme(getzipdata(zip,dir.themes[0].replace(/^\//,""),true),dir.themes[0],opts);styles={};if(dir.style)styles=parse_sty(getzipdata(zip,dir.style.replace(/^\//,"")),dir.style,opts)}var wb=parse_wb(getzipdata(zip,dir.workbooks[0].replace(/^\//,"")),dir.workbooks[0],opts);var props={},propdata="";if(dir.coreprops.length!==0){propdata=getzipdata(zip,dir.coreprops[0].replace(/^\//,""),true);if(propdata)props=parse_core_props(propdata);if(dir.extprops.length!==0){propdata=getzipdata(zip,dir.extprops[0].replace(/^\//,""),true);if(propdata)parse_ext_props(propdata,props)}}var custprops={};if(!opts.bookSheets||opts.bookProps){if(dir.custprops.length!==0){propdata=getzipdata(zip,dir.custprops[0].replace(/^\//,""),true);if(propdata)custprops=parse_cust_props(propdata,opts)}}var out={};if(opts.bookSheets||opts.bookProps){if(props.Worksheets&&props.SheetNames.length>0)sheets=props.SheetNames;else if(wb.Sheets)sheets=wb.Sheets.map(function pluck(x){return x.name});if(opts.bookProps){out.Props=props;out.Custprops=custprops}if(typeof sheets!=="undefined")out.SheetNames=sheets;if(opts.bookSheets?out.SheetNames:opts.bookProps)return out}sheets={};
+var deps={};if(opts.bookDeps&&dir.calcchain)deps=parse_cc(getzipdata(zip,dir.calcchain.replace(/^\//,"")),dir.calcchain,opts);var i=0;var sheetRels={};var path,relsPath;if(!props.Worksheets){var wbsheets=wb.Sheets;props.Worksheets=wbsheets.length;props.SheetNames=[];for(var j=0;j!=wbsheets.length;++j){props.SheetNames[j]=wbsheets[j].name}}var wbext=xlsb?"bin":"xml";var wbrelsfile="xl/_rels/workbook."+wbext+".rels";var wbrels=parse_rels(getzipdata(zip,wbrelsfile,true),wbrelsfile);if(wbrels)wbrels=safe_parse_wbrels(wbrels,wb.Sheets);var nmode=getzipdata(zip,"xl/worksheets/sheet.xml",true)?1:0;for(i=0;i!=props.Worksheets;++i){if(wbrels)path="xl/"+wbrels[i][1].replace(/[\/]?xl\//,"");else{path="xl/worksheets/sheet"+(i+1-nmode)+"."+wbext;path=path.replace(/sheet0\./,"sheet.")}relsPath=path.replace(/^(.*)(\/)([^\/]*)$/,"$1/_rels/$3.rels");safe_parse_ws(zip,path,relsPath,props.SheetNames[i],sheetRels,sheets,opts)}if(dir.comments)parse_comments(zip,dir.comments,sheets,sheetRels,opts);out={Directory:dir,Workbook:wb,Props:props,Custprops:custprops,Deps:deps,Sheets:sheets,SheetNames:props.SheetNames,Strings:strs,Styles:styles,Themes:themes,SSF:SSF.get_table()};if(opts.bookFiles){out.keys=entries;out.files=zip.files}if(opts.bookVBA){if(dir.vba.length>0)out.vbaraw=getzipdata(zip,dir.vba[0],true);else if(dir.defaults.bin==="application/vnd.ms-office.vbaProject")out.vbaraw=getzipdata(zip,"xl/vbaProject.bin",true)}return out}function add_rels(rels,rId,f,type,relobj){if(!relobj)relobj={};if(!rels["!id"])rels["!id"]={};relobj.Id="rId"+rId;relobj.Type=type;relobj.Target=f;if(rels["!id"][relobj.Id])throw new Error("Cannot rewrite rId "+rId);rels["!id"][relobj.Id]=relobj;rels[("/"+relobj.Target).replace("//","/")]=relobj}function write_zip(wb,opts){if(wb&&!wb.SSF){wb.SSF=SSF.get_table()}if(wb&&wb.SSF){make_ssf(SSF);SSF.load_table(wb.SSF);opts.revssf=evert_num(wb.SSF);opts.revssf[wb.SSF[65535]]=0}opts.rels={};opts.wbrels={};opts.Strings=[];opts.Strings.Count=0;opts.Strings.Unique=0;var wbext=opts.bookType=="xlsb"?"bin":"xml";var ct={workbooks:[],sheets:[],calcchains:[],themes:[],styles:[],coreprops:[],extprops:[],custprops:[],strs:[],comments:[],vba:[],TODO:[],rels:[],xmlns:""};fix_write_opts(opts=opts||{});var zip=new jszip;var f="",rId=0;opts.cellXfs=[];get_cell_style(opts.cellXfs,{},{revssf:{General:0}});f="docProps/core.xml";zip.file(f,write_core_props(wb.Props,opts));ct.coreprops.push(f);add_rels(opts.rels,2,f,RELS.CORE_PROPS);f="docProps/app.xml";if(!wb.Props)wb.Props={};wb.Props.SheetNames=wb.SheetNames;wb.Props.Worksheets=wb.SheetNames.length;zip.file(f,write_ext_props(wb.Props,opts));ct.extprops.push(f);add_rels(opts.rels,3,f,RELS.EXT_PROPS);if(wb.Custprops!==wb.Props&&keys(wb.Custprops||{}).length>0){f="docProps/custom.xml";zip.file(f,write_cust_props(wb.Custprops,opts));ct.custprops.push(f);add_rels(opts.rels,4,f,RELS.CUST_PROPS)}f="xl/workbook."+wbext;zip.file(f,write_wb(wb,f,opts));ct.workbooks.push(f);add_rels(opts.rels,1,f,RELS.WB);for(rId=1;rId<=wb.SheetNames.length;++rId){f="xl/worksheets/sheet"+rId+"."+wbext;zip.file(f,write_ws(rId-1,f,opts,wb));ct.sheets.push(f);add_rels(opts.wbrels,rId,"worksheets/sheet"+rId+"."+wbext,RELS.WS)}if(opts.Strings!=null&&opts.Strings.length>0){f="xl/sharedStrings."+wbext;zip.file(f,write_sst(opts.Strings,f,opts));ct.strs.push(f);add_rels(opts.wbrels,++rId,"sharedStrings."+wbext,RELS.SST)}f="xl/theme/theme1.xml";zip.file(f,write_theme(opts));ct.themes.push(f);add_rels(opts.wbrels,++rId,"theme/theme1.xml",RELS.THEME);f="xl/styles."+wbext;zip.file(f,write_sty(wb,f,opts));ct.styles.push(f);add_rels(opts.wbrels,++rId,"styles."+wbext,RELS.STY);zip.file("[Content_Types].xml",write_ct(ct,opts));zip.file("_rels/.rels",write_rels(opts.rels));zip.file("xl/_rels/workbook."+wbext+".rels",write_rels(opts.wbrels));return zip}function firstbyte(f,o){switch((o||{}).type||"base64"){case"buffer":return f[0];case"base64":return Base64.decode(f.substr(0,12)).charCodeAt(0);case"binary":return f.charCodeAt(0);case"array":return f[0];default:throw new Error("Unrecognized type "+o.type)}}function read_zip(data,opts){var zip,d=data;var o=opts||{};if(!o.type)o.type=has_buf&&Buffer.isBuffer(data)?"buffer":"base64";switch(o.type){case"base64":zip=new jszip(d,{base64:true});break;case"binary":case"array":zip=new jszip(d,{base64:false});break;case"buffer":zip=new jszip(d);break;case"file":zip=new jszip(d=_fs.readFileSync(data));break;default:throw new Error("Unrecognized type "+o.type)}return parse_zip(zip,o)}function readSync(data,opts){var zip,d=data,isfile=false,n;var o=opts||{};if(!o.type)o.type=has_buf&&Buffer.isBuffer(data)?"buffer":"base64";if(o.type=="file"){isfile=true;o.type="buffer";d=_fs.readFileSync(data)}switch(n=firstbyte(d,o)){case 208:if(isfile)o.type="file";return parse_xlscfb(CFB.read(data,o),o);case 9:return parse_xlscfb(s2a(o.type==="base64"?Base64.decode(data):data),o);case 60:return parse_xlml(d,o);case 80:if(isfile)o.type="file";return read_zip(data,opts);default:throw new Error("Unsupported file "+n)}}function readFileSync(data,opts){var o=opts||{};o.type="file";var wb=readSync(data,o);wb.FILENAME=data;return wb}function write_zip_type(wb,opts){var o=opts||{};style_builder=new StyleBuilder(opts);var z=write_zip(wb,o);switch(o.type){case"base64":return z.generate({type:"base64"});case"binary":return z.generate({type:"string"});case"buffer":return z.generate({type:"nodebuffer"});case"file":return _fs.writeFileSync(o.file,z.generate({type:"nodebuffer"}));default:throw new Error("Unrecognized type "+o.type)}}function writeSync(wb,opts){var o=opts||{};switch(o.bookType){case"xml":return write_xlml(wb,o);default:return write_zip_type(wb,o)}}function writeFileSync(wb,filename,opts){var o=opts||{};o.type="file";o.file=filename;switch(o.file.substr(-5).toLowerCase()){case".xlsx":o.bookType="xlsx";break;case".xlsm":o.bookType="xlsm";break;case".xlsb":o.bookType="xlsb";break;default:switch(o.file.substr(-4).toLowerCase()){case".xls":o.bookType="xls";break;case".xml":o.bookType="xml";break}}return writeSync(wb,o)}function decode_row(rowstr){return parseInt(unfix_row(rowstr),10)-1}function encode_row(row){return""+(row+1)}function fix_row(cstr){return cstr.replace(/([A-Z]|^)(\d+)$/,"$1$$$2")}function unfix_row(cstr){return cstr.replace(/\$(\d+)$/,"$1")}function decode_col(colstr){var c=unfix_col(colstr),d=0,i=0;for(;i!==c.length;++i)d=26*d+c.charCodeAt(i)-64;return d-1}function encode_col(col){var s="";for(++col;col;col=Math.floor((col-1)/26))s=String.fromCharCode((col-1)%26+65)+s;return s}function fix_col(cstr){return cstr.replace(/^([A-Z])/,"$$$1")}function unfix_col(cstr){return cstr.replace(/^\$([A-Z])/,"$1")}function split_cell(cstr){return cstr.replace(/(\$?[A-Z]*)(\$?\d*)/,"$1,$2").split(",")}function decode_cell(cstr){var splt=split_cell(cstr);return{c:decode_col(splt[0]),r:decode_row(splt[1])}}function encode_cell(cell){return encode_col(cell.c)+encode_row(cell.r)}function fix_cell(cstr){return fix_col(fix_row(cstr))}function unfix_cell(cstr){return unfix_col(unfix_row(cstr))}function decode_range(range){var x=range.split(":").map(decode_cell);return{s:x[0],e:x[x.length-1]}}function encode_range(cs,ce){if(ce===undefined||typeof ce==="number")return encode_range(cs.s,cs.e);if(typeof cs!=="string")cs=encode_cell(cs);if(typeof ce!=="string")ce=encode_cell(ce);return cs==ce?cs:cs+":"+ce}function safe_decode_range(range){var o={s:{c:0,r:0},e:{c:0,r:0}};var idx=0,i=0,cc=0;var len=range.length;for(idx=0;i<len;++i){if((cc=range.charCodeAt(i)-64)<1||cc>26)break;idx=26*idx+cc}o.s.c=--idx;for(idx=0;i<len;++i){if((cc=range.charCodeAt(i)-48)<0||cc>9)break;idx=10*idx+cc}o.s.r=--idx;if(i===len||range.charCodeAt(++i)===58){o.e.c=o.s.c;o.e.r=o.s.r;return o}for(idx=0;i!=len;++i){if((cc=range.charCodeAt(i)-64)<1||cc>26)break;idx=26*idx+cc}o.e.c=--idx;for(idx=0;i!=len;++i){if((cc=range.charCodeAt(i)-48)<0||cc>9)break;idx=10*idx+cc}o.e.r=--idx;return o}function safe_format_cell(cell,v){if(cell.z!==undefined)try{return cell.w=SSF.format(cell.z,v)}catch(e){}if(!cell.XF)return v;try{return cell.w=SSF.format(cell.XF.ifmt||0,v)}catch(e){return""+v}}function format_cell(cell,v){if(cell==null||cell.t==null)return"";if(cell.w!==undefined)return cell.w;if(v===undefined)return safe_format_cell(cell,cell.v);return safe_format_cell(cell,v)}function sheet_to_json(sheet,opts){var val,row,range,header=0,offset=1,r,hdr=[],isempty,R,C,v;var o=opts!=null?opts:{};var raw=o.raw;if(sheet==null||sheet["!ref"]==null)return[];range=o.range!==undefined?o.range:sheet["!ref"];if(o.header===1)header=1;else if(o.header==="A")header=2;else if(Array.isArray(o.header))header=3;switch(typeof range){case"string":r=safe_decode_range(range);break;case"number":r=safe_decode_range(sheet["!ref"]);r.s.r=range;break;default:r=range}if(header>0)offset=0;var rr=encode_row(r.s.r);var cols=new Array(r.e.c-r.s.c+1);var out=new Array(r.e.r-r.s.r-offset+1);var outi=0;for(C=r.s.c;C<=r.e.c;++C){cols[C]=encode_col(C);val=sheet[cols[C]+rr];switch(header){case 1:hdr[C]=C;break;case 2:hdr[C]=cols[C];break;case 3:hdr[C]=o.header[C-r.s.c];break;default:if(val===undefined)continue;hdr[C]=format_cell(val)}}for(R=r.s.r+offset;R<=r.e.r;++R){rr=encode_row(R);isempty=true;if(header===1)row=[];else{row={};if(Object.defineProperty)Object.defineProperty(row,"__rowNum__",{value:R,enumerable:false});else row.__rowNum__=R}for(C=r.s.c;C<=r.e.c;++C){val=sheet[cols[C]+rr];if(val===undefined||val.t===undefined)continue;v=val.v;switch(val.t){case"e":continue;case"s":break;case"b":case"n":break;default:throw"unrecognized type "+val.t}if(v!==undefined){row[hdr[C]]=raw?v:format_cell(val,v);isempty=false}}if(isempty===false||header===1)out[outi++]=row}out.length=outi;return out}function sheet_to_row_object_array(sheet,opts){return sheet_to_json(sheet,opts!=null?opts:{})}function sheet_to_csv(sheet,opts){var out="",txt="",qreg=/"/g;var o=opts==null?{}:opts;if(sheet==null||sheet["!ref"]==null)return"";var r=safe_decode_range(sheet["!ref"]);var FS=o.FS!==undefined?o.FS:",",fs=FS.charCodeAt(0);var RS=o.RS!==undefined?o.RS:"\n",rs=RS.charCodeAt(0);var row="",rr="",cols=[];var i=0,cc=0,val;var R=0,C=0;for(C=r.s.c;C<=r.e.c;++C)cols[C]=encode_col(C);for(R=r.s.r;R<=r.e.r;++R){row="";rr=encode_row(R);for(C=r.s.c;C<=r.e.c;++C){val=sheet[cols[C]+rr];txt=val!==undefined?""+format_cell(val):"";for(i=0,cc=0;i!==txt.length;++i)if((cc=txt.charCodeAt(i))===fs||cc===rs||cc===34){txt='"'+txt.replace(qreg,'""')+'"';break}row+=(C===r.s.c?"":FS)+txt}out+=row+RS}return out}var make_csv=sheet_to_csv;function sheet_to_formulae(sheet){var cmds,y="",x,val="";if(sheet==null||sheet["!ref"]==null)return"";var r=safe_decode_range(sheet["!ref"]),rr="",cols=[],C;cmds=new Array((r.e.r-r.s.r+1)*(r.e.c-r.s.c+1));var i=0;for(C=r.s.c;C<=r.e.c;++C)cols[C]=encode_col(C);for(var R=r.s.r;R<=r.e.r;++R){rr=encode_row(R);for(C=r.s.c;C<=r.e.c;++C){y=cols[C]+rr;x=sheet[y];val="";if(x===undefined)continue;if(x.f!=null)val=x.f;else if(x.w!==undefined)val="'"+x.w;else if(x.v===undefined)continue;else val=""+x.v;cmds[i++]=y+"="+val}}cmds.length=i;return cmds}var utils={encode_col:encode_col,encode_row:encode_row,encode_cell:encode_cell,encode_range:encode_range,decode_col:decode_col,decode_row:decode_row,split_cell:split_cell,decode_cell:decode_cell,decode_range:decode_range,format_cell:format_cell,get_formulae:sheet_to_formulae,make_csv:sheet_to_csv,make_json:sheet_to_json,make_formulae:sheet_to_formulae,sheet_to_csv:sheet_to_csv,sheet_to_json:sheet_to_json,sheet_to_formulae:sheet_to_formulae,sheet_to_row_object_array:sheet_to_row_object_array};var XmlNode=function(){function XmlNode(tagName,attributes,children){if(!(this instanceof XmlNode)){return new XmlNode(tagName,attributes,children)}this.tagName=tagName;this._attributes=attributes||{};this._children=children||[];this._prefix="";return this}XmlNode.prototype.createElement=function(){return new XmlNode(arguments)};XmlNode.prototype.children=function(){return this._children};XmlNode.prototype.append=function(node){this._children.push(node);return this};XmlNode.prototype.prefix=function(prefix){if(arguments.length==0){return this._prefix}this._prefix=prefix;return this};XmlNode.prototype.attr=function(attr,value){if(value==undefined){delete this._attributes[attr];return this}if(arguments.length==0){return this._attributes}else if(typeof attr=="string"&&arguments.length==1){return this._attributes.attr[attr]}if(typeof attr=="object"&&arguments.length==1){for(var key in attr){this._attributes[key]=attr[key]}}else if(arguments.length==2&&typeof attr=="string"){this._attributes[attr]=value}return this};var APOS="'";QUOTE='"';var ESCAPED_QUOTE={};ESCAPED_QUOTE[QUOTE]="&quot;";ESCAPED_QUOTE[APOS]="&apos;";XmlNode.prototype.escapeAttributeValue=function(att_value){return'"'+att_value.replace(/\"/g,"&quot;")+'"'};XmlNode.prototype.toXml=function(node){if(!node)node=this;var xml=node._prefix;xml+="<"+node.tagName;if(node._attributes){for(var key in node._attributes){xml+=" "+key+"="+this.escapeAttributeValue(""+node._attributes[key])+""}}if(node._children&&node._children.length>0){xml+=">";for(var i=0;i<node._children.length;i++){xml+=this.toXml(node._children[i])}xml+="</"+node.tagName+">"}else{xml+="/>"}return xml};return XmlNode}();var StyleBuilder=function(options){var customNumFmtId=164;var table_fmt={0:"General",1:"0",2:"0.00",3:"#,##0",4:"#,##0.00",9:"0%",10:"0.00%",11:"0.00E+00",12:"# ?/?",13:"# ??/??",14:"m/d/yy",15:"d-mmm-yy",16:"d-mmm",17:"mmm-yy",18:"h:mm AM/PM",19:"h:mm:ss AM/PM",20:"h:mm",21:"h:mm:ss",22:"m/d/yy h:mm",37:"#,##0 ;(#,##0)",38:"#,##0 ;[Red](#,##0)",39:"#,##0.00;(#,##0.00)",40:"#,##0.00;[Red](#,##0.00)",45:"mm:ss",46:"[h]:mm:ss",47:"mmss.0",48:"##0.0E+0",49:"@",56:'"涓婂崍/涓嬪崍 "hh"鏅�"mm"鍒�"ss"绉� "'};var fmt_table={};for(var idx in table_fmt){fmt_table[table_fmt[idx]]=idx}_hashIndex={};_listIndex=[];return{initialize:function(options){this.$fonts=XmlNode("fonts").attr("count",0).attr("x14ac:knownFonts","1");this.$fills=XmlNode("fills").attr("count",0);this.$borders=XmlNode("borders").attr("count",0);this.$numFmts=XmlNode("numFmts").attr("count",0);this.$cellStyleXfs=XmlNode("cellStyleXfs");this.$xf=XmlNode("xf").attr("numFmtId",0).attr("fontId",0).attr("fillId",0).attr("borderId",0);this.$cellXfs=XmlNode("cellXfs").attr("count",0);this.$cellStyles=XmlNode("cellStyles").append(XmlNode("cellStyle").attr("name","Normal").attr("xfId",0).attr("builtinId",0));this.$dxfs=XmlNode("dxfs").attr("count","0");this.$tableStyles=XmlNode("tableStyles").attr("count","0").attr("defaultTableStyle","TableStyleMedium9").attr("defaultPivotStyle","PivotStyleMedium4");this.$styles=XmlNode("styleSheet").attr("xmlns:mc","http://schemas.openxmlformats.org/markup-compatibility/2006").attr("xmlns:x14ac","http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac").attr("xmlns","http://schemas.openxmlformats.org/spreadsheetml/2006/main").attr("mc:Ignorable","x14ac").prefix('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>').append(this.$numFmts).append(this.$fonts).append(this.$fills).append(this.$borders).append(this.$cellStyleXfs.append(this.$xf)).append(this.$cellXfs).append(this.$cellStyles).append(this.$dxfs).append(this.$tableStyles);var defaultStyle=options.defaultCellStyle||{};if(!defaultStyle.font)defaultStyle.font={name:"Calibri",sz:"12"};if(!defaultStyle.font.name)defaultStyle.font.name="Calibri";if(!defaultStyle.font.sz)defaultStyle.font.sz=11;if(!defaultStyle.fill)defaultStyle.fill={patternType:"none",fgColor:{}};if(!defaultStyle.border)defaultStyle.border={};if(!defaultStyle.numFmt)defaultStyle.numFmt=0;this.defaultStyle=defaultStyle;var gray125Style=JSON.parse(JSON.stringify(defaultStyle));gray125Style.fill={patternType:"gray125",fgColor:{}};this.addStyles([defaultStyle,gray125Style]);return this},addStyle:function(attributes){var hashKey=JSON.stringify(attributes);var index=_hashIndex[hashKey];if(index==undefined){index=this._addXf(attributes);_hashIndex[hashKey]=index}else{index=_hashIndex[hashKey]}return index},addStyles:function(styles){var self=this;return styles.map(function(style){return self.addStyle(style)})},_duckTypeStyle:function(attributes){if(typeof attributes=="object"&&(attributes.patternFill||attributes.fgColor)){return{fill:attributes}}else if(attributes.font||attributes.numFmt||attributes.border||attributes.fill){return attributes}else{return this._getStyleCSS(attributes)}},_getStyleCSS:function(css){return css},_addXf:function(attributes){var fontId=this._addFont(attributes.font);var fillId=this._addFill(attributes.fill);var borderId=this._addBorder(attributes.border);var numFmtId=this._addNumFmt(attributes.numFmt);var $xf=XmlNode("xf").attr("numFmtId",numFmtId).attr("fontId",fontId).attr("fillId",fillId).attr("borderId",borderId).attr("xfId","0");if(fontId>0){$xf.attr("applyFont","1")}if(fillId>0){$xf.attr("applyFill","1")}if(borderId>0){$xf.attr("applyBorder","1")}if(numFmtId>0){$xf.attr("applyNumberFormat","1")}if(attributes.alignment){var $alignment=XmlNode("alignment");if(attributes.alignment.horizontal){$alignment.attr("horizontal",attributes.alignment.horizontal)}if(attributes.alignment.vertical){$alignment.attr("vertical",attributes.alignment.vertical)}if(attributes.alignment.indent){$alignment.attr("indent",attributes.alignment.indent)}if(attributes.alignment.readingOrder){$alignment.attr("readingOrder",attributes.alignment.readingOrder)}if(attributes.alignment.wrapText){$alignment.attr("wrapText",attributes.alignment.wrapText)}if(attributes.alignment.textRotation!=undefined){$alignment.attr("textRotation",attributes.alignment.textRotation)}$xf.append($alignment).attr("applyAlignment",1)}this.$cellXfs.append($xf);var count=+this.$cellXfs.children().length;this.$cellXfs.attr("count",count);return count-1},_addFont:function(attributes){if(!attributes){return 0}var $font=XmlNode("font").append(XmlNode("sz").attr("val",attributes.sz||this.defaultStyle.font.sz)).append(XmlNode("name").attr("val",attributes.name||this.defaultStyle.font.name));if(attributes.bold)$font.append(XmlNode("b"));if(attributes.underline)$font.append(XmlNode("u"));if(attributes.italic)$font.append(XmlNode("i"));if(attributes.strike)$font.append(XmlNode("strike"));if(attributes.outline)$font.append(XmlNode("outline"));if(attributes.shadow)$font.append(XmlNode("shadow"));if(attributes.vertAlign){$font.append(XmlNode("vertAlign").attr("val",attributes.vertAlign))}if(attributes.color){if(attributes.color.theme){$font.append(XmlNode("color").attr("theme",attributes.color.theme));if(attributes.color.tint){$font.append(XmlNode("tint").attr("theme",attributes.color.tint))}}else if(attributes.color.rgb){$font.append(XmlNode("color").attr("rgb",attributes.color.rgb))}}this.$fonts.append($font);var count=this.$fonts.children().length;this.$fonts.attr("count",count);return count-1},_addNumFmt:function(numFmt){if(!numFmt){return 0}if(typeof numFmt=="string"){var numFmtIdx=fmt_table[numFmt];if(numFmtIdx>=0){return numFmtIdx}}if(/^[0-9]+$/.exec(numFmt)){return numFmt}numFmt=numFmt.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;");var $numFmt=XmlNode("numFmt").attr("numFmtId",++customNumFmtId).attr("formatCode",numFmt);this.$numFmts.append($numFmt);var count=this.$numFmts.children().length;this.$numFmts.attr("count",count);return customNumFmtId},_addFill:function(attributes){if(!attributes){return 0}var $patternFill=XmlNode("patternFill").attr("patternType",attributes.patternType||"solid");if(attributes.fgColor){var $fgColor=XmlNode("fgColor");if(attributes.fgColor.rgb){if(attributes.fgColor.rgb.length==6){attributes.fgColor.rgb="FF"+attributes.fgColor.rgb}$fgColor.attr("rgb",attributes.fgColor.rgb);$patternFill.append($fgColor)}else if(attributes.fgColor.theme){$fgColor.attr("theme",attributes.fgColor.theme);if(attributes.fgColor.tint){$fgColor.attr("tint",attributes.fgColor.tint)}$patternFill.append($fgColor)}if(!attributes.bgColor){attributes.bgColor={indexed:"64"}}}if(attributes.bgColor){var $bgColor=XmlNode("bgColor").attr(attributes.bgColor);$patternFill.append($bgColor)}var $fill=XmlNode("fill").append($patternFill);this.$fills.append($fill);var count=this.$fills.children().length;this.$fills.attr("count",count);return count-1},_getSubBorder:function(direction,spec){var $direction=XmlNode(direction);if(spec){if(spec.style)$direction.attr("style",spec.style);if(spec.color){var $color=XmlNode("color");if(spec.color.auto){$color.attr("auto",spec.color.auto)}else if(spec.color.rgb){$color.attr("rgb",spec.color.rgb)}else if(spec.color.theme||spec.color.tint){$color.attr("theme",spec.color.theme||"1");$color.attr("tint",spec.color.tint||"0")}$direction.append($color)}}return $direction},_addBorder:function(attributes){if(!attributes){return 0}var self=this;var $border=XmlNode("border").attr("diagonalUp",attributes.diagonalUp).attr("diagonalDown",attributes.diagonalDown);var directions=["left","right","top","bottom","diagonal"];directions.forEach(function(direction){$border.append(self._getSubBorder(direction,attributes[direction]))});this.$borders.append($border);var count=this.$borders.children().length;this.$borders.attr("count",count);return count-1},toXml:function(){return this.$styles.toXml()}}.initialize(options||{})};XLSX.parse_xlscfb=parse_xlscfb;XLSX.parse_zip=parse_zip;XLSX.read=readSync;XLSX.readFile=readFileSync;XLSX.readFileSync=readFileSync;XLSX.write=writeSync;XLSX.writeFile=writeFileSync;XLSX.writeFileSync=writeFileSync;XLSX.utils=utils;XLSX.CFB=CFB;XLSX.SSF=SSF})(typeof exports!=="undefined"?exports:XLSX);var XLS=XLSX;
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/dist/xlsx.min.map b/Source/UBCS-WEB/src/config/js-xlsx-master/dist/xlsx.min.map
new file mode 100644
index 0000000..1f76cf2
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/dist/xlsx.min.map
@@ -0,0 +1 @@
+{"version":3,"sources":["xlsx.js"],"names":["XLSX","make_xlsx","version","current_codepage","current_cptable","module","require","cptable","reset_cp","set_cp","cp","char_codes","data","o","i","len","length","charCodeAt","debom_xml","_getchar","_gc1","x","String","fromCharCode","utils","decode","substr","_gc2","Base64","make_b64","map","encode","input","utf8","c1","c2","c3","e1","e2","e3","e4","isNaN","charAt","b64_decode","replace","indexOf","has_buf","Buffer","new_raw_buf","Array","s2a","s","split","bconcat","bufs","concat","apply","chr0","chr1","SSF","make_ssf","_strrev","fill","c","l","pad0","v","d","t","pad_","rpad_","pad0r1","Math","round","pad0r2","p2_32","pow","pad0r","isgeneral","opts_fmt","fixopts","y","undefined","opts","table_fmt","0","1","2","3","4","9","10","11","12","13","14","15","16","17","18","19","20","21","22","37","38","39","40","45","46","47","48","49","56","65535","days","months","frac","D","mixed","sgn","B","P_2","P_1","P","Q_2","Q_1","Q","A","floor","q","general_fmt_int","_general_int","general_fmt_num","make_general_fmt_num","gnr1","gnr2","gnr4","gnr5","gnr6","gfn2","w","gfn5","toFixed","toPrecision","toExponential","gfn3","gfn4","V","log","abs","LOG10E","_general_num","general_fmt","Error","_general","fix_hijri","date","parse_date_code","b2","time","dow","dout","out","T","u","m","H","M","S","date1904","Date","setDate","getDate","getFullYear","getMonth","getDay","write_date","type","fmt","val","ss0","ss","tt","outl","commaify","j","write_num","make_write_num","pct1","write_num_pct","sfmt","mul","write_num_cm","idx","write_num_exp","match","period","ee","fakee","$$","$1","$2","$3","frac1","write_num_f1","r","aval","sign","den","parseInt","rr","base","myn","myd","write_num_f2","dec1","closeparen","phone","hashq","str","cc","rnd","dd","dec","flr","write_num_flt","ffmt","oo","ri","ff","oa","min","max","lres","rres","write_num_cm2","write_num_pct2","write_num_exp2","write_num_int","split_fmt","in_str","_split","abstime","eval_fmt","flen","lst","dt","hr","toLowerCase","bt","ssm","nstr","jj","vv","myv","ostr","decpt","lasti","retval","_eval","cfregex","cfregex2","chkcond","thresh","parseFloat","choose_fmt","f","lat","m1","m2","format","table","_table","load","load_entry","get_table","load_table","tbl","XLMLFormatMap","General Number","General Date","Long Date","Medium Date","Short Date","Long Time","Medium Time","Short Time","Currency","Fixed","Standard","Percent","Scientific","Yes/No","True/False","On/Off","DO_NOT_EXPORT_CFB","CFB","_CFB","exports","parse","file","mver","ssz","nmfs","ndfs","dir_start","minifat_start","difat_start","fat_addrs","blob","slice","prep_blob","mv","check_get_mver","header","check_shifts","nds","read_shift","chk","sectors","sectorify","sleuth_fat","sector_list","make_sector_list","name","ENDOFCHAIN","files","Paths","FileIndex","FullPaths","FullPathDir","read_directory","build_full_paths","root_name","shift","root","find_path","make_find_path","raw","find","HEADER_SIGNATURE","HEADER_CLSID","nsectors","ceil","FI","FPD","FP","L","R","C","pl","dad","push","UCFullPaths","UCPaths","toUpperCase","path","k","UCPath","cnt","sector","__readInt32LE","get_sector_list","start","chkd","sl","buf","buf_chain","modulus","addr","nodes","__toBuffer","minifat_store","namelen","ctime","mtime","__utf16le","color","clsid","state","ct","read_date","mt","size","storage","content","MSSZ","offset","__readUInt32LE","fs","readFileSync","filename","options","readSync","consts","MAXREGSECT","DIFSECT","FATSECT","FREESECT","HEADER_MINOR_VERSION","MAXREGSID","NOSTREAM","EntryTypes","read","ReadShift","CheckField","isval","keys","Object","evert_key","obj","key","K","evert","evert_num","evert_arr","datenum","epoch","cc2str","arr","getdata","asNodeBuffer","_data","getContent","prototype","call","toString","asBinary","safegetzipfile","zip","lowerCaseFiles","getzipfile","getzipdata","safe","e","_fs","jszip","JSZip","attregexg","tagregex","nsregex","nsregex2","parsexmltag","tag","skip_root","z","eq","substring","strip_ns","encodings","&quot;","&apos;","&gt;","&lt;","&amp;","rencoding","rencstr","unescapexml","encregex","coderegex","text","decregex","charegex","escapexml","xlml_fixstr","entregex","entrepl","parsexmlbool","value","utf8read","utf8reada","orig","utf8readb","ww","corpus","utf8readc","matchtag","mtcache","g","RegExp","vtregex","vt_cache","vt_regex","vtvregex","vtmregex","parseVector","h","matches","baseType","res","forEach","wtregex","writetag","wxt_helper","join","writextag","write_w3cdtf","toISOString","write_vt","XML_HEADER","XMLNS","dc","dcterms","dcmitype","mx","sjs","vt","xsi","xsd","main","readIEEE754","isLE","nl","ml","el","eMax","eBias","bits","NaN","Infinity","___toBuffer","toBuffer_","___utf16le","utf16le_","b","__readUInt16LE","__hexlify","___hexlify","hexlify_","__utf8","___utf8","__readUInt8","__lpstr","___lpstr","lpstr_","__lpwstr","___lpwstr","lpwstr_","__double","___double","is_buf","is_buf_a","a","isArray","utf16le_b","isBuffer","lpstr_b","readUInt32LE","lpwstr_b","utf8_b","this","double_","readDoubleLE","is_buf_b","__readInt16LE","___unhexlify","__unhexlify","oI","oR","loc","lens","WriteShift","writeUInt16LE","writeUInt32LE","writeDoubleLE","writeInt32LE","hexstr","fld","pos","write_shift","parsenoop","writenoop","new_buf","sz","recordhopper","cb","tmpbyte","cntbyte","RT","XLSBRecordEnum","buf_array","blksz","newblk","ba_newblk","curbuf","endbuf","ba_endbuf","next","ba_next","end","ba_end","ba_push","_bufs","write_record","ba","payload","evert_RE","p","shift_cell_xls","cell","tgt","cRel","rRel","shift_range_xls","range","OFFCRYPTO","make_offcrypto","O","_crypto","crypto","rc4","md5","hex","createHash","update","digest","parse_StrRun","ich","ifnt","parse_RichStr","flags","parse_XLWideString","rgsStrRun","dwSizeStrRun","write_RichStr","write_XLWideString","parse_XLSBCell","col","iStyleRef","fPhShow","write_XLSBCell","parse_XLSBCodeName","parse_XLNullableWideString","cchCharacters","write_XLNullableWideString","parse_RelID","write_RelID","parse_RkNumber","fX100","fInt","RK","parse_UncheckedRfX","write_UncheckedRfX","parse_Xnum","write_Xnum","BErr","7","23","29","36","42","43","255","RBErr","parse_BrtColor","fValidRGB","xColorType","index","nTintAndShade","bRed","bGreen","bBlue","bAlpha","parse_FontFlags","fItalic","fStrikeout","fOutline","fShadow","fCondense","fExtend","VT_EMPTY","VT_NULL","VT_I2","VT_I4","VT_R4","VT_R8","VT_CY","VT_DATE","VT_BSTR","VT_ERROR","VT_BOOL","VT_VARIANT","VT_DECIMAL","VT_I1","VT_UI1","VT_UI2","VT_UI4","VT_I8","VT_UI8","VT_INT","VT_UINT","VT_LPSTR","VT_LPWSTR","VT_FILETIME","VT_BLOB","VT_STREAM","VT_STORAGE","VT_STREAMED_Object","VT_STORED_Object","VT_BLOB_Object","VT_CF","VT_CLSID","VT_VERSIONED_STREAM","VT_VECTOR","VT_ARRAY","VT_STRING","VT_USTR","VT_CUSTOM","DocSummaryPIDDSI","n","5","6","8","26","27","28","SummaryPIDSI","SpecialProperties","2147483648","2147483651","1919054434","hasOwnProperty","CountryEnum","30","31","32","33","34","41","44","52","55","61","64","66","81","82","84","86","90","105","213","216","218","351","354","358","420","886","961","962","963","964","965","966","971","972","974","981","XLSFillPattern","rgbify","XLSIcv","ct2type","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml","application/vnd.ms-excel.binIndexWs","application/vnd.ms-excel.chartsheet","application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml","application/vnd.ms-excel.dialogsheet","application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml","application/vnd.ms-excel.macrosheet","application/vnd.ms-excel.macrosheet+xml","application/vnd.ms-excel.intlmacrosheet","application/vnd.ms-excel.binIndexMs","application/vnd.openxmlformats-package.core-properties+xml","application/vnd.openxmlformats-officedocument.custom-properties+xml","application/vnd.openxmlformats-officedocument.extended-properties+xml","application/vnd.openxmlformats-officedocument.customXmlProperties+xml","application/vnd.ms-excel.comments","application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml","application/vnd.ms-excel.pivotTable","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml","application/vnd.ms-excel.calcChain","application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml","application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings","application/vnd.ms-office.activeX","application/vnd.ms-office.activeX+xml","application/vnd.ms-excel.attachedToolbars","application/vnd.ms-excel.connections","application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml","application/vnd.ms-excel.externalLink","application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml","application/vnd.ms-excel.sheetMetadata","application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml","application/vnd.ms-excel.pivotCacheDefinition","application/vnd.ms-excel.pivotCacheRecords","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml","application/vnd.ms-excel.queryTable","application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml","application/vnd.ms-excel.userNames","application/vnd.ms-excel.revisionHeaders","application/vnd.ms-excel.revisionLog","application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml","application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml","application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml","application/vnd.ms-excel.tableSingleCells","application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml","application/vnd.ms-excel.slicer","application/vnd.ms-excel.slicerCache","application/vnd.ms-excel.slicer+xml","application/vnd.ms-excel.slicerCache+xml","application/vnd.ms-excel.wsSortMap","application/vnd.ms-excel.table","application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml","application/vnd.openxmlformats-officedocument.theme+xml","application/vnd.ms-excel.Timeline+xml","application/vnd.ms-excel.TimelineCache+xml","application/vnd.ms-office.vbaProject","application/vnd.ms-office.vbaProjectSignature","application/vnd.ms-office.volatileDependencies","application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml","application/vnd.ms-excel.controlproperties+xml","application/vnd.openxmlformats-officedocument.model+data","application/vnd.ms-excel.Survey+xml","application/vnd.openxmlformats-officedocument.drawing+xml","application/vnd.openxmlformats-officedocument.drawingml.chart+xml","application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml","application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml","application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml","application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml","application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml","application/vnd.openxmlformats-officedocument.vmlDrawing","application/vnd.openxmlformats-package.relationships+xml","application/vnd.openxmlformats-officedocument.oleObject","sheet","CT_LIST","workbooks","xlsx","xlsm","xlsb","xltx","strs","sheets","styles","type2ct","CT","parse_ct","ctext","calcchains","themes","coreprops","extprops","custprops","comments","vba","TODO","rels","xmlns","Extension","ContentType","PartName","WTF","console","error","calcchain","sst","style","defaults","CTYPE_XML_ROOT","xmlns:xsd","xmlns:xsi","CTYPE_DEFAULTS","write_ct","f1","bookType","f2","f3","RELS","WB","SHEET","parse_rels","currentFilePath","hash","resolveRelativePathIntoAbsolute","to","toksFrom","pop","toksTo","reversed","tokTo","rel","Type","Target","Id","TargetMode","canonictarget","RELS_ROOT","write_rels","rid","CORE_PROPS","CORE_PROPS_REGEX","parse_core_props","cur","CORE_PROPS_XML_ROOT","xmlns:cp","xmlns:dc","xmlns:dcterms","xmlns:dcmitype","cp_doit","write_core_props","Props","title","subject","creator","keywords","description","CreatedDate","xsi:type","ModifiedDate","EXT_PROPS","parse_ext_props","HeadingPairs","TitlesOfParts","widx","Worksheets","parts","SheetNames","EXT_PROPS_XML_ROOT","xmlns:vt","write_ext_props","W","Application","CUST_PROPS","custregex","parse_cust_props","xmlnsvt","toks","warn","CUST_PROPS_XML_ROOT","write_cust_props","pid","custprop","fmtid","xlml_set_prop","parse_FILETIME","dwLowDateTime","dwHighDateTime","parse_lpstr","pad","parse_lpwstr","parse_VtStringBase","stringType","parse_VtString","parse_VtUnalignedString","parse_VtVecUnalignedLpstrValue","ret","parse_VtVecUnalignedLpstr","parse_VtHeadingPair","headingString","parse_TypedPropertyValue","headerParts","parse_VtVecHeadingPairValue","cElements","parse_VtVecHeadingPair","parse_dictionary","CodePage","dict","parse_BLOB","bytes","parse_ClipboardData","Size","parse_VtVector","_opts","parse_PropertySet","PIDSI","start_addr","NumProps","Dictionary","DictObj","PropID","Offset","PropH","fail","piddsi","oldpos","parsebool","parse_PropertySetStream","NumSets","FMTID0","FMTID1","Offset0","Offset1","vers","SystemIdentifier","PSet0","rval","FMTID","PSet1","parsenoop2","parslurp","target","parslurp2","parseuint16","parseuint16a","parse_Boolean","parse_Bes","parse_ShortXLUnicodeString","cch","width","encoding","biff","fHighByte","parse_XLUnicodeRichExtendedString","fExtSt","fRichSt","cRun","cbExtRst","msg","parse_XLUnicodeStringNoCch","parse_XLUnicodeString","parse_XLUnicodeString2","parse_ControlInfo","parse_URLMoniker","extra","url","parse_FileMoniker","cAnti","ansiLength","ansiPath","endServer","versionNumber","cbUnicodePathSize","cbUnicodePathBytes","usKeyValue","unicodePath","parse_HyperlinkMoniker","parse_HyperlinkString","parse_Hyperlink","sVer","displayName","targetFrameName","moniker","oleMoniker","location","guid","fileTime","parse_LongRGBA","parse_LongRGB","parse_XLSCell","rw","ixfe","parse_frtHeader","rt","parse_OptXLUnicodeString","HIDEOBJENUM","parse_HideObjEnum","parse_XTI","iSupBook","itabFirst","itabLast","parse_RkRec","parse_AddinUdf","udfName","parse_Ref8U","rwFirst","rwLast","colFirst","colLast","parse_RefU","parse_Ref","parse_FtCmo","ot","id","parse_FtNts","fSharedNote","parse_FtCf","cf","FtTab","parse_FtArray","fts","ft","parse_FontIndex","parse_BOF","BIFFVer","parse_InterfaceHdr","parse_WriteAccess","enc","UserName","parse_BoundSheet8","hidden","hs","parse_SST","ucnt","Count","Unique","parse_ExtSST","extsst","dsst","parse_Row","Col","rht","parse_ForceFullCalculation","fullcalc","parse_CompressPictures","parse_RecalcId","parse_DefaultRowHeight","miyRw","fl","Unsynced","DyZero","ExAsc","ExDsc","parse_Window1","xWn","yWn","dxWn","dyWn","iTabCur","iTabFirst","ctabSel","wTabRatio","Pos","Dim","Flags","CurTab","FirstTab","Selected","TabRatio","parse_Font","parse_LabelSst","isst","parse_Label","parse_Format","ifmt","fmtstr","parse_Dimensions","parse_RK","rkrec","rknum","parse_MulRk","rkrecs","lastcol","parse_CellStyleXF","patternType","icvFore","icvBack","parse_CellXF","parse_StyleXF","parse_XF","fStyle","parse_Guts","parse_BoolErr","parse_Number","xnum","parse_XLHeaderFooter","parse_SupBook","ctab","virtPath","rgst","sbcch","parse_ExternName","body","fBuiltIn","fWantAdvise","fWantPict","fOle","fOleLink","fIcon","parse_Lbl","chKey","cce","itab","rgce","parse_NameParsedFormula","Name","parse_ExternSheet","snames","parse_ShrFmla","ref","cUse","parse_SharedParsedFormula","parse_Array","parse_ArrayParsedFormula","parse_MTRSettings","fMTREnabled","fUserSetThreadCount","cUserThreadCount","parse_NoteSh","row","idObj","stAuthor","parse_Note","parse_MergeCells","merges","cmcs","parse_Obj","cmo","parse_TxO","lastobj","controlInfo","cchText","cbRuns","ifntEmpty","texts","hdr","parse_HLink","hlink","parse_HLinkTooltip","wzTooltip","parse_Country","parse_ClrtClient","ccv","parse_Palette","parse_XFCRC","cxfs","crc","parse_Style","parse_StyleExt","parse_ColInfo","parse_Window2","parse_Backup","parse_Blank","parse_BottomMargin","parse_BuiltInFnGroupCount","parse_CalcCount","parse_CalcDelta","parse_CalcIter","parse_CalcMode","parse_CalcPrecision","parse_CalcRefMode","parse_CalcSaveRecalc","parse_CodePage","parse_Compat12","parse_Date1904","parse_DefColWidth","parse_DSF","parse_EntExU2","parse_EOF","parse_Excel9File","parse_FeatHdr","parse_FontX","parse_Footer","parse_GridSet","parse_HCenter","parse_Header","parse_HideObj","parse_InterfaceEnd","parse_LeftMargin","parse_Mms","parse_ObjProtect","parse_Password","parse_PrintGrid","parse_PrintRowCol","parse_PrintSize","parse_Prot4Rev","parse_Prot4RevPass","parse_Protect","parse_RefreshAll","parse_RightMargin","parse_RRTabId","parse_ScenarioProtect","parse_Scl","parse_String","parse_SxBool","parse_TopMargin","parse_UsesELFs","parse_VCenter","parse_WinProtect","parse_WriteProtect","parse_VerticalPageBreaks","parse_HorizontalPageBreaks","parse_Selection","parse_Continue","parse_Pane","parse_Pls","parse_DCon","parse_DConRef","parse_DConName","parse_XCT","parse_CRN","parse_FileSharing","parse_Uncalced","parse_Template","parse_Intl","parse_WsBool","parse_Sort","parse_Sync","parse_LPr","parse_DxGCol","parse_FnGroupName","parse_FilterMode","parse_AutoFilterInfo","parse_AutoFilter","parse_Setup","parse_ScenMan","parse_SCENARIO","parse_SxView","parse_Sxvd","parse_SXVI","parse_SxIvd","parse_SXLI","parse_SXPI","parse_DocRoute","parse_RecipName","parse_MulBlank","parse_SXDI","parse_SXDB","parse_SXFDB","parse_SXDBB","parse_SXNum","parse_SxErr","parse_SXInt","parse_SXString","parse_SXDtr","parse_SxNil","parse_SXTbl","parse_SXTBRGIITM","parse_SxTbpg","parse_ObProj","parse_SXStreamID","parse_DBCell","parse_SXRng","parse_SxIsxoper","parse_BookBool","parse_DbOrParamQry","parse_OleObjectSize","parse_SXVS","parse_BkHim","parse_MsoDrawingGroup","parse_MsoDrawing","parse_MsoDrawingSelection","parse_PhoneticInfo","parse_SxRule","parse_SXEx","parse_SxFilt","parse_SxDXF","parse_SxItm","parse_SxName","parse_SxSelect","parse_SXPair","parse_SxFmla","parse_SxFormat","parse_SXVDEx","parse_SXFormula","parse_SXDBEx","parse_RRDInsDel","parse_RRDHead","parse_RRDChgCell","parse_RRDRenSheet","parse_RRSort","parse_RRDMove","parse_RRFormat","parse_RRAutoFmt","parse_RRInsertSh","parse_RRDMoveBegin","parse_RRDMoveEnd","parse_RRDInsDelBegin","parse_RRDInsDelEnd","parse_RRDConflict","parse_RRDDefName","parse_RRDRstEtxp","parse_LRng","parse_CUsr","parse_CbUsr","parse_UsrInfo","parse_UsrExcl","parse_FileLock","parse_RRDInfo","parse_BCUsrs","parse_UsrChk","parse_UserBView","parse_UserSViewBegin","parse_UserSViewEnd","parse_RRDUserView","parse_Qsi","parse_CondFmt","parse_CF","parse_DVal","parse_DConBin","parse_Lel","parse_XLSCodeName","parse_SXFDBType","parse_ObNoMacros","parse_Dv","parse_Index","parse_Table","parse_BigName","parse_ContinueBigName","parse_WebPub","parse_QsiSXTag","parse_DBQueryExt","parse_ExtString","parse_TxtQry","parse_Qsir","parse_Qsif","parse_RRDTQSIF","parse_OleDbConn","parse_WOpt","parse_SXViewEx","parse_SXTH","parse_SXPIEx","parse_SXVDTEx","parse_SXViewEx9","parse_ContinueFrt","parse_RealTimeData","parse_ChartFrtInfo","parse_FrtWrapper","parse_StartBlock","parse_EndBlock","parse_StartObject","parse_EndObject","parse_CatLab","parse_YMult","parse_SXViewLink","parse_PivotChartBits","parse_FrtFontList","parse_SheetExt","parse_BookExt","parse_SXAddl","parse_CrErr","parse_HFPicture","parse_Feat","parse_DataLabExt","parse_DataLabExtContents","parse_CellWatch","parse_FeatHdr11","parse_Feature11","parse_DropDownObjIds","parse_ContinueFrt11","parse_DConn","parse_List12","parse_Feature12","parse_CondFmt12","parse_CF12","parse_CFEx","parse_AutoFilter12","parse_ContinueFrt12","parse_MDTInfo","parse_MDXStr","parse_MDXTuple","parse_MDXSet","parse_MDXProp","parse_MDXKPI","parse_MDB","parse_PLV","parse_DXF","parse_TableStyles","parse_TableStyle","parse_TableStyleElement","parse_NamePublish","parse_NameCmt","parse_SortData","parse_GUIDTypeLib","parse_FnGrp12","parse_NameFnGrp12","parse_HeaderFooter","parse_CrtLayout12","parse_CrtMlFrt","parse_CrtMlFrtContinue","parse_ShapePropsStream","parse_TextPropsStream","parse_RichTextStream","parse_CrtLayout12A","parse_Units","parse_Chart","parse_Series","parse_DataFormat","parse_LineFormat","parse_MarkerFormat","parse_AreaFormat","parse_PieFormat","parse_AttachedLabel","parse_SeriesText","parse_ChartFormat","parse_Legend","parse_SeriesList","parse_Bar","parse_Line","parse_Pie","parse_Area","parse_Scatter","parse_CrtLine","parse_Axis","parse_Tick","parse_ValueRange","parse_CatSerRange","parse_AxisLine","parse_CrtLink","parse_DefaultText","parse_Text","parse_ObjectLink","parse_Frame","parse_Begin","parse_End","parse_PlotArea","parse_Chart3d","parse_PicF","parse_DropBar","parse_Radar","parse_Surf","parse_RadarArea","parse_AxisParent","parse_LegendException","parse_ShtProps","parse_SerToCrt","parse_AxesUsed","parse_SBaseRef","parse_SerParent","parse_SerAuxTrend","parse_IFmtRecord","parse_Pos","parse_AlRuns","parse_BRAI","parse_SerAuxErrBar","parse_SerFmt","parse_Chart3DBarShape","parse_Fbi","parse_BopPop","parse_AxcExt","parse_Dat","parse_PlotGrowth","parse_SIIndex","parse_GelFrame","parse_BopPopCustom","parse_Fbi2","parse_BIFF5String","parse_BIFF2STR","parse_BIFF2NUM","num","CS2CP","77","128","129","130","134","136","161","162","163","177","178","186","204","222","238","69","parse_rs","parse_rs_factory","tregex","rpregex","rregex","rend","nlregex","parse_rpr","rpr","intro","outro","font","strike","rgb","family","parse_r","terms","rs","sitregex","sirregex","parse_si","html","cellHTML","sstr0","sstr1","sstr2","parse_sst_xml","count","uniqueCount","SST","straywsregex","write_sst_xml","bookSST","sitag","parse_BrtBeginSst","parse_sst_bin","pass","hopper_sst","write_BrtBeginSst","write_BrtSSTItem","write_sst_bin","_JS2ANSI","parse_Version","Major","Minor","parse_EncryptionHeader","tmp","AlgID","parse_EncryptionVerifier","parse_RC4CryptoHeader","EncryptionVersionInfo","EncryptionHeader","EncryptionVerifier","parse_RC4Header","Salt","EncryptedVerifier","EncryptedVerifierHash","crypto_CreatePasswordVerifier_Method1","Password","Verifier","PasswordArray","PasswordDecoded","PasswordByte","Intermediate1","Intermediate2","Intermediate3","crypto_CreateXorArray_Method1","PadArray","InitialCode","XorMatrix","Ror","Byte","XorRor","byte1","byte2","CreateXorKey_Method1","XorKey","CurrentElement","Char","password","Index","ObfuscationArray","Temp","PasswordLastChar","PadIndex","crypto_DecryptData_Method1","Data","XorArrayIndex","XorArray","Value","crypto_MakeXorDecryptor","parse_XORObfuscation","verificationBytes","verifier","valid","insitu_decrypt","parse_FilePassHeader","Info","parse_FilePass","hex2RGB","rgb2Hex","rgb2HSL","G","H6","L2","hsl2RGB","hsl","h6","X","rgb_tint","tint","rev","DEF_MDW","MAX_MDW","MIN_MDW","MDW","width2px","px2char","px","char2width","chr","cycle_width","collw","find_mdw","coll","XLMLPatternTypeMap","None","Solid","Gray50","Gray75","Gray25","HorzStripe","VertStripe","ReverseDiagStripe","DiagStripe","DiagCross","ThickDiagCross","ThinHorzStripe","ThinVertStripe","ThinReverseDiagStripe","ThinHorzCross","parse_fills","Fills","bgColor","indexed","theme","themeElements","clrScheme","raw_rgb","fgColor","parse_fonts","Fonts","bold","underline","italic","outline","shadow","vertAlign","parse_borders","Borders","border","sub_border","diagonalUp","diagonalDown","left","right","top","bottom","diagonal","auto","parse_numFmts","NumberFmt","formatCode","numFmtId","write_numFmts","NF","parse_cellXfs","CellXf","xf","fillId","alignment","vertical","horizontal","textRotation","indent","wrapText","write_cellXfs","cellXfs","parse_sty_xml","make_pstyx","numFmtRegex","cellXfRegex","fillsRegex","bordersRegex","STYLES_XML_ROOT","STY","write_sty_xml","wb","style_builder","toXml","parse_BrtFmt","stFmtCode","parse_BrtFont","dyHeight","grbit","bls","sss","uls","bFamily","bCharSet","brtColor","bFontScheme","Bold","Italic","Strikeout","Outline","Shadow","Condense","Extend","Sub","Sup","parse_BrtXF","ixfeParent","parse_sty_bin","hopper_sty","write_sty_bin","THEME","parse_clrScheme","lastClr","parse_fontScheme","parse_fmtScheme","clrsregex","fntsregex","fmtsregex","parse_themeElements","themeltregex","parse_theme_xml","write_theme","themeXml","parse_Theme","dwThemeVersion","parse_ColorTheme","parse_FullColorExt","xclrType","nTintShade","xclrValue","parse_IcvXF","parse_XFExtGradient","parse_ExtProp","extType","parse_XFExt","cexts","ext","update_xfext","xfext","xfe","parse_cc_xml","write_cc_xml","parse_BrtCalcChainItem$","encode_cell","parse_cc_bin","hopper_cc","write_cc_bin","parse_comments","dirComments","sheetRels","canonicalpath","parse_cmnt","sheetNames","sheetName","insertCommentsIntoSheet","comment","safe_decode_range","thisCell","decode_cell","encoded","encode_range","author","parse_comments_xml","authors","commentList","trim","authorId","sheetRows","textMatch","write_comments_xml","parse_BrtBeginComment","iauthor","rfx","parse_BrtCommentAuthor","parse_BrtCommentText","parse_comments_bin","hopper_cmnt","write_comments_bin","rc_to_a1","rcregex","rcbase","rcfunc","$4","$5","encode_col","encode_row","fstr","parseread","parseread1","parse_ColRelU","parse_RgceArea","parse_RgceAreaRel","parse_RgceLoc","parse_RgceLocRel","cl","parse_PtgArea","area","parse_PtgArea3d","ixti","parse_PtgAreaErr","parse_PtgAreaErr3d","parse_PtgAreaN","parse_PtgArray","parse_PtgAttrBaxcel","bitSemi","bitBaxcel","parse_PtgAttrChoose","parse_PtgAttrGoto","bitGoto","parse_PtgAttrIf","bitIf","parse_PtgAttrSemi","parse_PtgAttrSpaceType","parse_PtgAttrSpace","parse_PtgAttrSpaceSemi","parse_PtgRef","ptg","parse_PtgRefN","parse_PtgRef3d","parse_PtgFunc","iftab","FtabArgc","Ftab","parse_PtgFuncVar","cparams","tab","parsetab","Cetab","parse_PtgAttrSum","parse_PtgConcat","parse_PtgExp","parse_PtgErr","parse_PtgInt","parse_PtgBool","parse_PtgNum","parse_PtgStr","parse_SerAr","parse_PtgExtraMem","parse_PtgExtraArray","cols","rows","parse_PtgName","nameindex","parse_PtgNameX","parse_PtgMemArea","parse_PtgMemFunc","parse_PtgRefErr","parse_PtgAdd","parse_PtgDiv","parse_PtgEq","parse_PtgGe","parse_PtgGt","parse_PtgIsect","parse_PtgLe","parse_PtgLt","parse_PtgMissArg","parse_PtgMul","parse_PtgNe","parse_PtgParen","parse_PtgPercent","parse_PtgPower","parse_PtgRange","parse_PtgSub","parse_PtgUminus","parse_PtgUnion","parse_PtgUplus","parse_PtgMemErr","parse_PtgMemNoMem","parse_PtgRefErr3d","parse_PtgTbl","PtgTypes","35","57","58","59","60","PtgDupes","96","65","97","98","67","99","68","100","101","70","102","71","103","72","104","73","74","106","75","107","76","108","109","89","121","122","91","123","92","124","93","125","Ptg18","Ptg19","parse_Formula","parse_FormulaValue","chn","cbf","parse_XLSCellParsedFormula","formula","shared","parse_RgbExtra","parse_Rgce","rgcb","ptgs","mapper","stringify_formula","supbooks","_range","stack","nameidx","fflen","argc","func","args","lbl","XLSXFutureFunctions","bookidx","externbook","sharedf","parsedf","fnd","arrayf","parse_XLSBCellParsedFormula","PtgDataType","24","25","50","51","53","54","62","63","78","79","80","83","85","87","88","94","95","110","111","112","113","114","115","116","117","118","119","120","126","127","131","132","133","135","137","138","139","140","142","143","144","145","146","147","148","149","150","151","152","153","155","159","164","166","167","168","169","170","171","172","173","174","175","185","187","188","189","190","191","192","193","194","195","196","197","198","199","200","201","202","203","206","207","208","209","210","211","212","214","215","217","219","220","223","224","225","226","227","228","229","240","243","249","250","251","252","253","254","256","259","260","265","266","267","268","269","272","273","274","276","277","278","279","280","281","282","283","284","285","288","289","290","291","292","293","295","296","297","298","302","305","306","307","308","309","310","311","312","313","314","315","316","318","319","320","321","322","323","324","325","328","330","336","338","339","342","343","344","350","352","355","356","370","373","374","375","376","377","378","379","380","381","382","383","384","385","386","388","390","391","392","393","394","395","396","397","398","399","400","412","413","414","415","416","417","421","422","423","424","425","430","431","432","433","434","435","436","437","438","439","440","441","442","443","444","445","446","447","448","449","450","451","452","453","454","455","456","458","459","460","461","462","463","464","465","466","467","468","469","470","471","472","473","474","475","476","477","478","480","481","482","485","489","491","493","494","495","509","510","511","517","518","519","520","521","522","523","545","546","547","548","549","620","621","647","653","667","673","753","755","808","141","154","156","157","158","160","165","176","179","180","181","182","183","184","205","221","230","231","232","233","234","235","236","237","239","241","242","244","245","246","247","248","257","258","261","262","263","264","270","271","275","286","287","294","299","300","301","303","304","317","326","327","329","331","332","334","335","337","340","341","345","346","347","348","349","353","357","359","360","361","362","363","364","365","366","367","368","369","371","372","_xlfn.ACOT","_xlfn.ACOTH","_xlfn.AGGREGATE","_xlfn.ARABIC","_xlfn.AVERAGEIF","_xlfn.AVERAGEIFS","_xlfn.BASE","_xlfn.BETA.DIST","_xlfn.BETA.INV","_xlfn.BINOM.DIST","_xlfn.BINOM.DIST.RANGE","_xlfn.BINOM.INV","_xlfn.BITAND","_xlfn.BITLSHIFT","_xlfn.BITOR","_xlfn.BITRSHIFT","_xlfn.BITXOR","_xlfn.CEILING.MATH","_xlfn.CEILING.PRECISE","_xlfn.CHISQ.DIST","_xlfn.CHISQ.DIST.RT","_xlfn.CHISQ.INV","_xlfn.CHISQ.INV.RT","_xlfn.CHISQ.TEST","_xlfn.COMBINA","_xlfn.CONFIDENCE.NORM","_xlfn.CONFIDENCE.T","_xlfn.COT","_xlfn.COTH","_xlfn.COUNTIFS","_xlfn.COVARIANCE.P","_xlfn.COVARIANCE.S","_xlfn.CSC","_xlfn.CSCH","_xlfn.DAYS","_xlfn.DECIMAL","_xlfn.ECMA.CEILING","_xlfn.ERF.PRECISE","_xlfn.ERFC.PRECISE","_xlfn.EXPON.DIST","_xlfn.F.DIST","_xlfn.F.DIST.RT","_xlfn.F.INV","_xlfn.F.INV.RT","_xlfn.F.TEST","_xlfn.FILTERXML","_xlfn.FLOOR.MATH","_xlfn.FLOOR.PRECISE","_xlfn.FORMULATEXT","_xlfn.GAMMA","_xlfn.GAMMA.DIST","_xlfn.GAMMA.INV","_xlfn.GAMMALN.PRECISE","_xlfn.GAUSS","_xlfn.HYPGEOM.DIST","_xlfn.IFNA","_xlfn.IFERROR","_xlfn.IMCOSH","_xlfn.IMCOT","_xlfn.IMCSC","_xlfn.IMCSCH","_xlfn.IMSEC","_xlfn.IMSECH","_xlfn.IMSINH","_xlfn.IMTAN","_xlfn.ISFORMULA","_xlfn.ISO.CEILING","_xlfn.ISOWEEKNUM","_xlfn.LOGNORM.DIST","_xlfn.LOGNORM.INV","_xlfn.MODE.MULT","_xlfn.MODE.SNGL","_xlfn.MUNIT","_xlfn.NEGBINOM.DIST","_xlfn.NETWORKDAYS.INTL","_xlfn.NIGBINOM","_xlfn.NORM.DIST","_xlfn.NORM.INV","_xlfn.NORM.S.DIST","_xlfn.NORM.S.INV","_xlfn.NUMBERVALUE","_xlfn.PDURATION","_xlfn.PERCENTILE.EXC","_xlfn.PERCENTILE.INC","_xlfn.PERCENTRANK.EXC","_xlfn.PERCENTRANK.INC","_xlfn.PERMUTATIONA","_xlfn.PHI","_xlfn.POISSON.DIST","_xlfn.QUARTILE.EXC","_xlfn.QUARTILE.INC","_xlfn.QUERYSTRING","_xlfn.RANK.AVG","_xlfn.RANK.EQ","_xlfn.RRI","_xlfn.SEC","_xlfn.SECH","_xlfn.SHEET","_xlfn.SHEETS","_xlfn.SKEW.P","_xlfn.STDEV.P","_xlfn.STDEV.S","_xlfn.SUMIFS","_xlfn.T.DIST","_xlfn.T.DIST.2T","_xlfn.T.DIST.RT","_xlfn.T.INV","_xlfn.T.INV.2T","_xlfn.T.TEST","_xlfn.UNICHAR","_xlfn.UNICODE","_xlfn.VAR.P","_xlfn.VAR.S","_xlfn.WEBSERVICE","_xlfn.WEIBULL.DIST","_xlfn.WORKDAY.INTL","_xlfn.XOR","_xlfn.Z.TEST","_ssfopts","WS","get_sst_id","get_cell_style","exec","numFmt","addStyle","revssf","fontId","borderId","xfId","applyNumberFormat","get_cell_style_csf","cellXf","applyAlignment","JSON","stringify","safe_format","fillid","cellNF","parse_ws_xml_dim","ws","mergecregex","sheetdataregex","hlinkregex","dimregex","colregex","parse_ws_xml","ridx","mergecells","columns","cellStyles","parse_ws_xml_cols","refguess","mtch","parse_ws_xml_data","parse_ws_xml_hlinks","tmpref","write_ws_xml_merges","write_ws_xml_pagesetup","setup","pageSetup","scale","orientation","horizontalDpi","verticalDpi","Rel","rng","seencol","coli","colm","colM","wpx","wch","write_ws_xml_cols","customWidth","write_ws_xml_cell","oldt","oldv","cellDates","os","Strings","parse_ws_xml_data_factory","cellregex","rowregex","isregex","match_v","match_f","sdata","guess","cells","cref","tagr","tagc","sstr","do_format","marr","marrlen","xlen","cellFormula","sheetStubs","write_ws_xml_data","WS_XML_ROOT","xmlns:r","write_ws_xml","sidx","rdata","Sheets","kids","pane","selection","activeCell","sqref","sheetView","showGridLines","tabSelected","workbookViewId","write_ws_xml_row_breaks","write_ws_xml_col_breaks","breaks","brk","thisBreak","nextBreak","man","manualBreakCount","parse_BrtRowHdr","parse_BrtWsDim","write_BrtWsDim","parse_BrtWsProp","parse_BrtCellBlank","write_BrtCellBlank","parse_BrtCellBool","fBool","parse_BrtCellError","parse_BrtCellIsst","parse_BrtCellReal","parse_BrtCellRk","parse_BrtCellSt","parse_BrtFmlaBool","parse_BrtFmlaError","parse_BrtFmlaNum","parse_BrtFmlaString","parse_BrtMergeCell","parse_BrtHLink","relId","tooltip","display","parse_ws_bin","!id","ws_parse","write_ws_bin_cell","write_CELLTABLE","write_ws_bin","WBPropsDef","WBViewDef","SheetDef","CalcPrDef","CustomWBViewDef","push_defaults_array","push_defaults","parse_wb_defaults","WBProps","CalcPr","WBView","wbnsregex","parse_wb_xml","AppVersion","xml_wb","WB_XML_ROOT","safe1904","Workbook","write_wb_xml","sheetId","r:id","hasPrintHeaders","printHeader","printColumns","localSheetId","parse_BrtBundleSh","hsState","iTabID","strRelID","write_BrtBundleSh","parse_BrtWbProp","strName","write_BrtWbProp","parse_BrtFRTArchID$","ArchID","parse_wb_bin","hopper_wb","write_BUNDLESHS","write_BrtFileVersion","write_BOOKVIEWS","write_BrtCalcProp","write_BrtFileRecover","write_wb_bin","parse_wb","parse_ws","parse_sty","parse_theme","parse_sst","parse_cc","write_wb","write_ws","write_sty","write_sst","attregexg2","attregex2","_chr","xlml_parsexmltag","words","xlml_parsexmltagobj","xlml_format","xlml_set_custprop","Custprops","Rn","safe_format_xlml","nf","process_style_xlml","stag","Interior","I","Pattern","ID","parse_xlml_data","xml","csty","sid","StyleID","interiors","Parent","UTC","Formula","xlml_clean_comment","xlml_normalize","xlmlregex","parse_xlml_xml","sheetnames","cursheet","sheetname","dtag","didx","fidx","pidx","cstys","lastIndex","HRef","HRefScreenTip","MergeAcross","MergeDown","Format","Span","Author","seen","bookSheets","bookProps","parse_xlml","fix_read_opts","write_xlml","parse_compobj","UserType","Reserved1","slurp","XLSRecordEnum","ll","safe_format_xf","XF","make_cell","parse_workbook","Directory","found_sheet","last_formula","cur_sheet","Preamble","lastcell","last_cell","cmnt","rngC","rngR","shared_formulae","array_formulae","temp_val","country","cell_valid","XFs","palette","get_rgb","getrgb","icv","process_cell_style","pcs","line","xfd","addcell","rrtabid","lastuser","codepage","winlocked","wtf","objects","sbc","sbci","sbcli","last_Rn","file_depth","RecordType","Date1904","WriteProtect","RefreshAll","CalcCount","CalcDelta","CalcIter","CalcMode","CalcPrecision","CalcSaveRecalc","CalcRefMode","FullCalc","TxO","noteobj","sheetnamesraw","sort","Number","Encryption","Metadata","Country","parse_xlscfb","cfb","CompObj","Summary","CompObjP","SummaryP","WorkbookP","parse_props","props","DocSummary","bookFiles","DSI","SI","333","387","389","401","403","404","405","406","407","408","409","410","411","418","419","426","427","428","429","457","479","483","484","486","487","488","490","492","496","497","498","499","500","501","502","503","504","505","506","507","508","512","513","514","515","516","524","525","526","527","528","529","530","531","532","533","534","535","536","537","538","539","540","541","542","550","551","552","553","554","555","556","557","558","559","560","561","562","564","565","566","569","570","572","573","574","577","578","579","580","581","582","583","584","585","586","587","588","589","590","591","592","593","594","595","596","597","598","599","600","601","602","603","604","605","606","607","608","609","610","611","612","613","614","615","616","617","618","619","625","626","627","628","629","630","631","632","633","634","635","636","637","638","639","640","641","642","643","644","645","646","648","649","650","651","652","654","655","656","657","658","659","660","661","662","663","664","665","666","668","669","671","672","674","675","676","677","678","679","680","1024","1025","1026","1027","1028","1029","1030","1031","1032","1033","1034","1035","1036","1037","1038","1039","1040","1041","1042","1043","1044","1045","1046","1047","1048","1049","1050","1051","1052","1053","1054","1055","1056","1057","1058","1059","1061","1062","1063","1066","1067","1068","1069","1070","1071","1072","1073","1075","1076","1077","1078","1079","1080","1081","1082","1083","1084","1085","1086","1087","1088","1089","1090","1091","1092","1093","1094","1095","1096","1097","1098","1099","1100","1101","1102","1103","1104","1105","1111","1112","1113","1114","1115","1116","1117","1118","1119","1120","1121","1122","1123","1124","1125","1126","1128","1129","1130","1131","1132","1133","1134","1135","1136","1137","1138","1139","1140","1141","1142","1143","1144","1145","1146","1147","1148","1149","1150","1152","1153","1154","1155","1156","1157","1158","1159","1160","1161","1162","1163","1164","1165","1166","1167","1168","1169","1170","1171","1172","1173","1177","1178","1180","1181","1182","2048","2049","2050","2051","2052","2053","2054","2055","2056","2057","2058","2060","2067","2068","2069","2070","2071","2072","2073","2075","2076","2077","2078","2079","2080","2081","2082","2083","2084","2085","2086","2087","2088","2089","2090","2091","2092","2093","2094","2095","2096","2097","2098","2099","2100","2101","2102","2103","2104","2105","2106","2107","2108","2109","2110","2111","2112","2113","2114","2115","2116","2117","2118","2119","2120","2121","2122","2123","2124","2125","2126","2127","2128","2129","2130","2131","2132","2133","2134","2135","2136","402","1212","2059","2061","2062","2063","2064","2066","2137","2138","2146","2147","2148","2149","2150","2151","2152","2154","2155","2156","2161","2162","2164","2165","2166","2167","2168","2169","2170","2171","2172","2173","2174","2175","2180","2181","2182","2183","2184","2185","2186","2187","2188","2189","2190","2191","2192","2194","2195","2196","2197","2198","2199","2200","2201","2202","2203","2204","2205","2206","2207","2211","2212","2213","2214","2215","4097","4098","4099","4102","4103","4105","4106","4107","4108","4109","4116","4117","4118","4119","4120","4121","4122","4123","4124","4125","4126","4127","4128","4129","4130","4132","4133","4134","4135","4146","4147","4148","4149","4154","4156","4157","4158","4159","4160","4161","4163","4164","4165","4166","4168","4170","4171","4174","4175","4176","4177","4187","4188","4189","4191","4192","4193","4194","4195","4196","4197","4198","4199","4200","2157","2163","2177","2240","2241","2242","2243","2244","2245","2246","2247","2248","2249","2250","2251","parse_ods","ODS","fix_opts_func","fix_opts","fix_write_opts","safe_parse_wbrels","wbrels","pwbr","safe_parse_ws","relsPath","nodirs","parse_zip","entries","filter","dir","binname","propdata","pluck","deps","bookDeps","wbsheets","wbext","wbrelsfile","nmode","Deps","Styles","Themes","bookVBA","vbaraw","bin","add_rels","rId","relobj","write_zip","General","firstbyte","read_zip","base64","isfile","FILENAME","write_zip_type","StyleBuilder","generate","writeFileSync","writeSync","decode_row","rowstr","unfix_row","fix_row","cstr","decode_col","colstr","unfix_col","fix_col","split_cell","splt","fix_cell","unfix_cell","decode_range","cs","ce","safe_format_cell","format_cell","sheet_to_json","isempty","outi","defineProperty","enumerable","__rowNum__","sheet_to_row_object_array","sheet_to_csv","txt","qreg","FS","RS","make_csv","sheet_to_formulae","cmds","get_formulae","make_json","make_formulae","XmlNode","tagName","attributes","children","_attributes","_children","_prefix","createElement","arguments","append","node","prefix","attr","APOS","QUOTE","ESCAPED_QUOTE","escapeAttributeValue","att_value","customNumFmtId","fmt_table","_hashIndex","_listIndex","initialize","$fonts","$fills","$borders","$numFmts","$cellStyleXfs","$xf","$cellXfs","$cellStyles","$dxfs","$tableStyles","$styles","defaultStyle","defaultCellStyle","gray125Style","addStyles","hashKey","_addXf","self","_duckTypeStyle","patternFill","_getStyleCSS","css","_addFont","_addFill","_addBorder","_addNumFmt","$alignment","readingOrder","$font","numFmtIdx","$numFmt","$patternFill","$fgColor","$bgColor","$fill","_getSubBorder","direction","spec","$direction","$color","$border","directions","readFile","write","writeFile","XLS"],"mappings":";AAIA,GAAIA,UACJ,QAAUC,WAAUD,MACpBA,KAAKE,QAAU,QACf,IAAIC,kBAAmB,KAAMC,eAC7B,UAAUC,UAAW,mBAAsBC,WAAY,YAAa,CACnE,SAAUC,WAAY,YAAaA,QAAUD,QAAQ,iBACrDF,iBAAkBG,QAAQJ,kBAE3B,QAASK,YAAaC,OAAO,MAC7B,GAAIA,QAAS,SAASC,IAAMP,iBAAmBO,GAE/C,SAASC,YAAWC,MAAQ,GAAIC,KAAQ,KAAI,GAAIC,GAAI,EAAGC,IAAMH,KAAKI,OAAQF,EAAIC,MAAOD,EAAGD,EAAEC,GAAKF,KAAKK,WAAWH,EAAI,OAAOD,GAC1H,GAAIK,WAAY,SAASN,MAAQ,MAAOA,MAExC,IAAIO,UAAW,QAASC,MAAKC,GAAK,MAAOC,QAAOC,aAAaF,GAC7D,UAAUd,WAAY,YAAa,CAClCE,OAAS,SAASC,IAAMP,iBAAmBO,EAAIN,iBAAkBG,QAAQG,IACzEQ,WAAY,SAASN,MACpB,GAAGA,KAAKK,WAAW,KAAO,KAAQL,KAAKK,WAAW,KAAO,IAAM,CAAE,MAAOV,SAAQiB,MAAMC,OAAO,KAAMd,WAAWC,KAAKc,OAAO,KAC1H,MAAOd,MAERO,UAAW,QAASQ,MAAKN,GACxB,GAAGlB,mBAAqB,KAAM,MAAOmB,QAAOC,aAAaF,EACzD,OAAOd,SAAQiB,MAAMC,OAAOtB,kBAAmBkB,EAAE,IAAIA,GAAG,IAAI,IAG9D,GAAIO,QAAS,QAAUC,YACtB,GAAIC,KAAM,mEACV,QACCC,OAAQ,SAASC,MAAOC,MACvB,GAAIpB,GAAI,EACR,IAAIqB,IAAIC,GAAIC,GAAIC,GAAIC,GAAIC,GAAIC,EAC5B,KAAI,GAAI1B,GAAI,EAAGA,EAAIkB,MAAMhB,QAAU,CAClCkB,GAAKF,MAAMf,WAAWH,IACtBqB,IAAKH,MAAMf,WAAWH,IACtBsB,IAAKJ,MAAMf,WAAWH,IACtBuB,IAAKH,IAAM,CACXI,KAAMJ,GAAK,IAAM,EAAIC,IAAM,CAC3BI,KAAMJ,GAAK,KAAO,EAAIC,IAAM,CAC5BI,IAAKJ,GAAK,EACV,IAAIK,MAAMN,IAAK,CAAEI,GAAKC,GAAK,OACtB,IAAIC,MAAML,IAAK,CAAEI,GAAK,GAC3B3B,GAAKiB,IAAIY,OAAOL,IAAMP,IAAIY,OAAOJ,IAAMR,IAAIY,OAAOH,IAAMT,IAAIY,OAAOF,IAEpE,MAAO3B,IAERY,OAAQ,QAASkB,YAAWX,MAAOC,MAClC,GAAIpB,GAAI,EACR,IAAIqB,IAAIC,GAAIC,EACZ,IAAIC,IAAIC,GAAIC,GAAIC,EAChBR,OAAQA,MAAMY,QAAQ,sBAAuB,GAC7C,KAAI,GAAI9B,GAAI,EAAGA,EAAIkB,MAAMhB,QAAS,CACjCqB,GAAKP,IAAIe,QAAQb,MAAMU,OAAO5B,KAC9BwB,IAAKR,IAAIe,QAAQb,MAAMU,OAAO5B,KAC9ByB,IAAKT,IAAIe,QAAQb,MAAMU,OAAO5B,KAC9B0B,IAAKV,IAAIe,QAAQb,MAAMU,OAAO5B,KAC9BoB,IAAKG,IAAM,EAAIC,IAAM,CACrBH,KAAMG,GAAK,KAAO,EAAIC,IAAM,CAC5BH,KAAMG,GAAK,IAAM,EAAIC,EACrB3B,IAAKS,OAAOC,aAAaW,GACzB,IAAIK,IAAM,GAAI,CAAE1B,GAAKS,OAAOC,aAAaY,IACzC,GAAIK,IAAM,GAAI,CAAE3B,GAAKS,OAAOC,aAAaa,KAE1C,MAAOvB,OAIV,IAAIiC,eAAkBC,UAAW,WAEjC,SAASC,aAAYjC,KAEpB,MAAO,KAAK+B,QAAUC,OAASE,OAAOlC,KAIvC,QAASmC,KAAIC,GACZ,GAAGL,QAAS,MAAO,IAAIC,QAAOI,EAAG,SACjC,OAAOA,GAAEC,MAAM,IAAItB,IAAI,SAAST,GAAI,MAAOA,GAAEJ,WAAW,GAAK,MAG9D,GAAIoC,SAAU,SAASC,MAAQ,SAAUC,OAAOC,SAAUF,MAE1D,IAAIG,MAAO,UAAWC,KAAO,iBAG7B,IAAIC,OACJ,IAAIC,UAAW,QAASA,UAASD,KACjCA,IAAIzD,QAAU,OACd,SAAS2D,SAAQxC,GAAK,GAAIR,GAAI,GAAIC,EAAIO,EAAEL,OAAO,CAAG,OAAMF,GAAG,EAAGD,GAAKQ,EAAEqB,OAAO5B,IAAM,OAAOD,GACzF,QAASiD,MAAKC,EAAEC,GAAK,GAAInD,GAAI,EAAI,OAAMA,EAAEG,OAASgD,EAAGnD,GAAGkD,CAAG,OAAOlD,GAClE,QAASoD,MAAKC,EAAEC,GAAG,GAAIC,GAAE,GAAGF,CAAG,OAAOE,GAAEpD,QAAQmD,EAAEC,EAAEN,KAAK,IAAIK,EAAEC,EAAEpD,QAAQoD,EACzE,QAASC,MAAKH,EAAEC,GAAG,GAAIC,GAAE,GAAGF,CAAE,OAAOE,GAAEpD,QAAQmD,EAAEC,EAAEN,KAAK,IAAIK,EAAEC,EAAEpD,QAAQoD,EACxE,QAASE,OAAMJ,EAAEC,GAAG,GAAIC,GAAE,GAAGF,CAAG,OAAOE,GAAEpD,QAAQmD,EAAEC,EAAEA,EAAEN,KAAK,IAAIK,EAAEC,EAAEpD,QACpE,QAASuD,QAAOL,EAAEC,GAAG,GAAIC,GAAE,GAAGI,KAAKC,MAAMP,EAAI,OAAOE,GAAEpD,QAAQmD,EAAEC,EAAEN,KAAK,IAAIK,EAAEC,EAAEpD,QAAQoD,EACvF,QAASM,QAAOR,EAAEC,GAAG,GAAIC,GAAE,GAAGF,CAAG,OAAOE,GAAEpD,QAAQmD,EAAEC,EAAEN,KAAK,IAAIK,EAAEC,EAAEpD,QAAQoD,EAC3E,GAAIO,OAAQH,KAAKI,IAAI,EAAE,GACvB,SAASC,OAAMX,EAAEC,GAAG,GAAGD,EAAES,OAAOT,GAAGS,MAAO,MAAOJ,QAAOL,EAAEC,EAAI,IAAIrD,GAAI0D,KAAKC,MAAMP,EAAI,OAAOQ,QAAO5D,EAAEqD,GACrG,QAASW,WAAU3B,EAAGrC,GAAK,MAAOqC,GAAEnC,QAAU,EAAIF,IAAMqC,EAAElC,WAAWH,GAAG,MAAQ,MAAQqC,EAAElC,WAAWH,EAAE,GAAG,MAAQ,MAAQqC,EAAElC,WAAWH,EAAE,GAAG,MAAQ,MAAQqC,EAAElC,WAAWH,EAAE,GAAG,MAAQ,MAAQqC,EAAElC,WAAWH,EAAE,GAAG,MAAQ,MAAQqC,EAAElC,WAAWH,EAAE,GAAG,MAAQ,KAAOqC,EAAElC,WAAWH,EAAE,GAAG,MAAQ,IAE3R,GAAIiE,YACF,WAAY,IACZ,SAAU,KACV,MAAO,OAET,SAASC,SAAQnE,GAChB,IAAI,GAAIoE,GAAI,EAAGA,GAAKF,SAAS/D,SAAUiE,EAAG,GAAGpE,EAAEkE,SAASE,GAAG,MAAMC,UAAWrE,EAAEkE,SAASE,GAAG,IAAIF,SAASE,GAAG,GAE3GtB,IAAIwB,KAAOJ,QACX,IAAIK,YACHC,EAAI,UACJC,EAAI,IACJC,EAAI,OACJC,EAAI,QACJC,EAAI,WACJC,EAAI,KACJC,GAAI,QACJC,GAAI,WACJC,GAAI,QACJC,GAAI,UACJC,GAAI,SACJC,GAAI,WACJC,GAAI,QACJC,GAAI,SACJC,GAAI,aACJC,GAAI,gBACJC,GAAI,OACJC,GAAI,UACJC,GAAI,cACJC,GAAI,iBACJC,GAAI,sBACJC,GAAI,sBACJC,GAAI,2BACJC,GAAI,QACJC,GAAI,YACJC,GAAI,SACJC,GAAI,WACJC,GAAI,IACJC,GAAI,2BACJC,MAAO,UAER,IAAIC,QACF,MAAO,WACP,MAAO,WACP,MAAO,YACP,MAAO,cACP,MAAO,aACP,MAAO,WACP,MAAO,YAET,IAAIC,UACF,IAAK,MAAO,YACZ,IAAK,MAAO,aACZ,IAAK,MAAO,UACZ,IAAK,MAAO,UACZ,IAAK,MAAO,QACZ,IAAK,MAAO,SACZ,IAAK,MAAO,SACZ,IAAK,MAAO,WACZ,IAAK,MAAO,cACZ,IAAK,MAAO,YACZ,IAAK,MAAO,aACZ,IAAK,MAAO,YAEd,SAASC,MAAKhG,EAAGiG,EAAGC,OACnB,GAAIC,KAAMnG,EAAI,GAAK,EAAI,CACvB,IAAIoG,GAAIpG,EAAImG,GACZ,IAAIE,KAAM,EAAGC,IAAM,EAAGC,EAAI,CAC1B,IAAIC,KAAM,EAAGC,IAAM,EAAGC,EAAI,CAC1B,IAAIC,GAAIxD,KAAKyD,MAAMR,EACnB,OAAMK,IAAMR,EAAG,CACdU,EAAIxD,KAAKyD,MAAMR,EACfG,GAAII,EAAIL,IAAMD,GACdK,GAAIC,EAAIF,IAAMD,GACd,IAAIJ,EAAIO,EAAK,MAAc,KAC3BP,GAAI,GAAKA,EAAIO,EACbN,KAAMC,GAAKA,KAAMC,CACjBC,KAAMC,GAAKA,KAAMC,EAElB,GAAGA,EAAIT,EAAG,CAAES,EAAID,GAAKF,GAAID,IACzB,GAAGI,EAAIT,EAAG,CAAES,EAAIF,GAAKD,GAAIF,IACzB,IAAIH,MAAO,OAAQ,EAAGC,IAAMI,EAAGG,EAC/B,IAAGA,IAAI,EAAG,KAAM,qBAAqBH,EAAE,IAAID,IAAI,IAAID,IAAI,IAAIK,EAAE,IAAID,IAAI,IAAID,GACzE,IAAIK,GAAI1D,KAAKyD,MAAMT,IAAMI,EAAEG,EAC3B,QAAQG,EAAGV,IAAII,EAAIM,EAAEH,EAAGA,GAEzB,QAASI,iBAAgBjE,EAAGiB,MAAQ,MAAO,GAAGjB,EAC9CP,IAAIyE,aAAeD,eACnB,IAAIE,iBAAkB,QAAUC,wBAChC,GAAIC,MAAO,kBAAmBC,KAAO,QAASC,KAAO,iBAAkBC,KAAO,WAAYC,KAAO,cACjG,SAASC,MAAK1E,GACb,GAAI2E,GAAK3E,EAAE,EAAE,GAAG,EAChB,IAAIrD,GAAIiI,KAAK5E,EAAE6E,QAAQ,IAAM,IAAGlI,EAAEG,QAAU6H,EAAG,MAAOhI,EACtDA,GAAIqD,EAAE8E,YAAY,GAAK,IAAGnI,EAAEG,QAAU6H,EAAG,MAAOhI,EAChD,OAAOqD,GAAE+E,cAAc,GAExB,QAASC,MAAKhF,GACb,GAAIrD,GAAIqD,EAAE6E,QAAQ,IAAInG,QAAQ2F,KAAK,MACnC,IAAG1H,EAAEG,QAAUkD,EAAE,EAAE,GAAG,IAAKrD,EAAIqD,EAAE8E,YAAY,EAC7C,OAAOnI,GAER,QAASsI,MAAKtI,GACb,IAAI,GAAIC,GAAI,EAAGA,GAAKD,EAAEG,SAAUF,EAAG,IAAID,EAAEI,WAAWH,GAAK,MAAU,IAAK,MAAOD,GAAE+B,QAAQ6F,KAAK,OAAO7F,QAAQ8F,KAAK,KAAK9F,QAAQ,IAAI,KAAKA,QAAQ+F,KAAK,QACrJ,OAAO9H,GAER,QAASiI,MAAKjI,GAGb,MAAOA,GAAEgC,QAAQ,MAAQ,EAAIhC,EAAE+B,QAAQ4F,KAAK,IAAI5F,QAAQ2F,KAAK,OAAS1H,EAEvE,MAAO,SAASwH,iBAAgBnE,EAAGiB,MAClC,GAAIiE,GAAI5E,KAAKyD,MAAMzD,KAAK6E,IAAI7E,KAAK8E,IAAIpF,IAAIM,KAAK+E,QAAS1I,CACvD,IAAGuI,IAAM,GAAKA,IAAM,EAAGvI,EAAIqD,EAAE8E,YAAY,GAAGI,OACvC,IAAG5E,KAAK8E,IAAIF,IAAM,EAAGvI,EAAI+H,KAAK1E,OAC9B,IAAGkF,IAAM,GAAIvI,EAAIqD,EAAE6E,QAAQ,IAAIrH,OAAO,EAAE,QACxCb,GAAIqI,KAAKhF,EACd,OAAO4E,MAAKK,KAAKtI,OAElB8C,KAAI6F,aAAenB,eACnB,SAASoB,aAAYvF,EAAGiB,MACvB,aAAcjB,IACb,IAAK,SAAU,MAAOA,EACtB,KAAK,UAAW,MAAOA,GAAI,OAAS,OACpC,KAAK,SAAU,OAAQA,EAAE,KAAOA,EAAIiE,gBAAgBjE,EAAGiB,MAAQkD,gBAAgBnE,EAAGiB,MAEnF,KAAM,IAAIuE,OAAM,wCAA0CxF,GAE3DP,IAAIgG,SAAWF,WACf,SAASG,WAAUC,KAAMhJ,GAAK,MAAO,GACrC,QAASiJ,iBAAgB5F,EAAEiB,KAAK4E,IAC/B,GAAG7F,EAAI,SAAWA,EAAI,EAAG,MAAO,KAChC,IAAI2F,MAAQ3F,EAAE,EAAI8F,KAAOxF,KAAKyD,MAAM,OAAS/D,EAAI2F,OAAQI,IAAI,CAC7D,IAAIC,QACJ,IAAIC,MAAK7C,EAAEuC,KAAMO,EAAEJ,KAAMK,EAAE,OAAOnG,EAAE2F,MAAMG,KAAK/E,EAAE,EAAEqF,EAAE,EAAEnG,EAAE,EAAEoG,EAAE,EAAEC,EAAE,EAAEC,EAAE,EAAEvC,EAAE,EACzE,IAAG1D,KAAK8E,IAAIa,IAAIE,GAAK,KAAMF,IAAIE,EAAI,CACnCrF,SAAQG,MAAQ,KAAOA,KAAQA,QAC/B,IAAGA,KAAKuF,SAAUb,MAAQ,IAC1B,IAAGM,IAAIE,EAAI,KAAO,CACjBF,IAAIE,EAAI,CACR,MAAKL,MAAQ,MAAO,CAAEA,KAAO,IAAKH,MAEnC,GAAGA,OAAS,GAAI,CAACK,KAAOH,IAAM,KAAK,GAAG,KAAO,KAAK,EAAE,GAAKE,KAAI,MACxD,IAAGJ,OAAS,EAAG,CAACK,KAAOH,IAAM,KAAK,EAAE,KAAO,KAAK,EAAE,EAAIE,KAAI,MAC1D,CACJ,GAAGJ,KAAO,KAAMA,IAEhB,IAAI1F,GAAI,GAAIwG,MAAK,KAAK,EAAE,EACxBxG,GAAEyG,QAAQzG,EAAE0G,UAAYhB,KAAO,EAC/BK,OAAQ/F,EAAE2G,cAAe3G,EAAE4G,WAAW,EAAE5G,EAAE0G,UAC1CZ,KAAM9F,EAAE6G,QACR,IAAGnB,KAAO,GAAII,KAAOA,IAAM,GAAK,CAChC,IAAGF,GAAIE,IAAML,UAAUzF,EAAG+F,MAE3BC,IAAIlF,EAAIiF,KAAK,EAAIC,KAAIG,EAAIJ,KAAK,EAAIC,KAAIhG,EAAI+F,KAAK,EAC/CC,KAAIM,EAAIT,KAAO,EAAIA,MAAOxF,KAAKyD,MAAM+B,KAAO,GAC5CG,KAAIK,EAAIR,KAAO,EAAIA,MAAOxF,KAAKyD,MAAM+B,KAAO,GAC5CG,KAAII,EAAIP,IACRG,KAAIjC,EAAI+B,GACR,OAAOE,KAERxG,IAAImG,gBAAkBA,eAEtB,SAASmB,YAAWC,KAAMC,IAAKC,IAAKC,KACnC,GAAIxK,GAAE,GAAIyK,GAAG,EAAGC,GAAG,EAAGtG,EAAImG,IAAInG,EAAGkF,IAAKqB,KAAO,CAC7C,QAAON,MACN,IAAK,IACJjG,EAAImG,IAAInG,EAAI,GAEb,KAAK,KACL,OAAOkG,IAAInK,QACV,IAAK,GAAG,IAAK,GAAGmJ,IAAMlF,EAAI,GAAKuG,MAAO,CAAG,MACzC,SAASrB,IAAMlF,EAAI,GAAOuG,MAAO,CAAG,OACnC,KACF,KAAK,KACL,OAAOL,IAAInK,QACV,IAAK,GAAG,IAAK,GAAGmJ,IAAMiB,IAAId,CAAGkB,MAAOL,IAAInK,MAAQ,MAChD,KAAK,GAAG,MAAOoG,QAAOgE,IAAId,EAAE,GAAG,EAC/B,KAAK,GAAG,MAAOlD,QAAOgE,IAAId,EAAE,GAAG,EAC/B,SAAS,MAAOlD,QAAOgE,IAAId,EAAE,GAAG,GAC/B,KACF,KAAK,KACL,OAAOa,IAAInK,QACV,IAAK,GAAG,IAAK,GAAGmJ,IAAMiB,IAAIjH,CAAGqH,MAAOL,IAAInK,MAAQ,MAChD,KAAK,GAAG,MAAOmG,MAAKiE,IAAIlD,GAAG,EAC3B,SAAS,MAAOf,MAAKiE,IAAIlD,GAAG,GAC3B,KACF,KAAK,KACL,OAAOiD,IAAInK,QACV,IAAK,GAAG,IAAK,GAAGmJ,IAAM,GAAGiB,IAAIb,EAAE,IAAI,EAAIiB,MAAOL,IAAInK,MAAQ,MAC1D,SAAS,KAAM,oBAAsBmK,IACpC,KACF,KAAK,IACL,OAAOA,IAAInK,QACV,IAAK,GAAG,IAAK,GAAGmJ,IAAMiB,IAAIb,CAAGiB,MAAOL,IAAInK,MAAQ,MAChD,SAAS,KAAM,oBAAsBmK,IACpC,KACF,KAAK,IACL,OAAOA,IAAInK,QACV,IAAK,GAAG,IAAK,GAAGmJ,IAAMiB,IAAIZ,CAAGgB,MAAOL,IAAInK,MAAQ,MAChD,SAAS,KAAM,sBAAwBmK,IACtC,KACF,KAAK,KACL,GAAGC,IAAIf,IAAM,EAAG,OAAOc,KACtB,IAAK,IAAK,IAAK,KAAM,MAAOlH,MAAKmH,IAAIX,EAAGU,IAAInK,OAC5C,KAAK,KAAM,IAAK,MAAO,IAAK,QAE7B,OAAOmK,KACN,IAAK,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,MAAO,IAAK,OAChD,GAAGE,KAAO,EAAGE,GAAKF,MAAQ,EAAI,IAAO,QAChCE,IAAKF,MAAQ,EAAI,GAAK,CAC3BC,IAAK9G,KAAKC,MAAM,IAAM2G,IAAIX,EAAIW,IAAIf,GAClC,IAAGiB,IAAM,GAAGC,GAAID,GAAK,CACrB,IAAGH,MAAQ,IAAK,MAAOG,MAAO,EAAI,IAAM,GAAGA,GAAGC,EAC9C1K,GAAIoD,KAAKqH,GAAG,EAAID,IAChB,IAAGF,MAAQ,KAAM,MAAOtK,GAAEa,OAAO,EAAE,EACnC,OAAO,IAAMb,EAAEa,OAAO,EAAEyJ,IAAInK,OAAO,EACpC,SAAS,KAAM,sBAAwBmK,IAExC,IAAK,IACL,OAAOA,KACN,IAAK,MAAO,IAAK,OAAQhB,IAAMiB,IAAI9D,EAAE,GAAG8D,IAAIb,CAAG,MAC/C,KAAK,MAAO,IAAK,OAAQJ,KAAOiB,IAAI9D,EAAE,GAAG8D,IAAIb,GAAG,GAAGa,IAAIZ,CAAG,MAC1D,KAAK,MAAO,IAAK,OAAQL,MAAQiB,IAAI9D,EAAE,GAAG8D,IAAIb,GAAG,GAAGa,IAAIZ,GAAG,GAAGhG,KAAKC,MAAM2G,IAAIX,EAAEW,IAAIf,EAAI,MACvF,SAAS,KAAM,uBAAyBc,IACvCK,KAAOL,IAAInK,SAAW,EAAI,EAAI,CAAG,MACnC,KAAK,KACJmJ,IAAMlF,CAAGuG,MAAO,EAElB,GAAGA,KAAO,EAAG,MAAOvH,MAAKkG,IAAKqB,UAAY,OAAO,GAGlD,QAASC,UAAStI,GACjB,GAAGA,EAAEnC,QAAU,EAAG,MAAOmC,EACzB,IAAIuI,GAAKvI,EAAEnC,OAAS,EAAIH,EAAIsC,EAAEzB,OAAO,EAAEgK,EACvC,MAAMA,GAAGvI,EAAEnC,OAAQ0K,GAAG,EAAG7K,IAAIA,EAAEG,OAAS,EAAI,IAAM,IAAMmC,EAAEzB,OAAOgK,EAAE,EACnE,OAAO7K,GAER,GAAI8K,WAAY,QAAUC,kBAC1B,GAAIC,MAAO,IACX,SAASC,eAAcZ,KAAMC,IAAKC,KACjC,GAAIW,MAAOZ,IAAIvI,QAAQiJ,KAAK,IAAKG,IAAMb,IAAInK,OAAS+K,KAAK/K,MACzD,OAAO2K,WAAUT,KAAMa,KAAMX,IAAM5G,KAAKI,IAAI,GAAG,EAAEoH,MAAQlI,KAAK,IAAIkI,KAEnE,QAASC,cAAaf,KAAMC,IAAKC,KAChC,GAAIc,KAAMf,IAAInK,OAAS,CACvB,OAAMmK,IAAIlK,WAAWiL,IAAI,KAAO,KAAMA,GACtC,OAAOP,WAAUT,KAAMC,IAAIzJ,OAAO,EAAEwK,KAAMd,IAAM5G,KAAKI,IAAI,GAAG,GAAGuG,IAAInK,OAAOkL,OAE3E,QAASC,eAAchB,IAAKC,KAC3B,GAAIvK,EACJ,IAAIqL,KAAMf,IAAItI,QAAQ,KAAOsI,IAAItI,QAAQ,KAAO,CAChD,IAAGsI,IAAIiB,MAAM,eAAgB,CAC5B,GAAIC,QAASlB,IAAItI,QAAQ,IAAM,IAAGwJ,UAAY,EAAGA,OAAOlB,IAAItI,QAAQ,IACpE,IAAIyJ,IAAK9H,KAAKyD,MAAMzD,KAAK6E,IAAI7E,KAAK8E,IAAI8B,MAAM5G,KAAK+E,QAAQ8C,MACzD,IAAGC,GAAK,EAAGA,IAAMD,MACjBxL,IAAKuK,IAAI5G,KAAKI,IAAI,GAAG0H,KAAKtD,YAAYkD,IAAI,GAAGG,OAAOC,IAAID,OACxD,IAAGxL,EAAEgC,QAAQ,QAAU,EAAG,CACzB,GAAI0J,OAAQ/H,KAAKyD,MAAMzD,KAAK6E,IAAI7E,KAAK8E,IAAI8B,MAAM5G,KAAK+E,OACpD,IAAG1I,EAAEgC,QAAQ,QAAU,EAAGhC,EAAIA,EAAE,GAAK,IAAMA,EAAEa,OAAO,GAAK,MAAQ6K,MAAQ1L,EAAEG,OAAOsL,QAC7EzL,IAAK,MAAQ0L,MAAQD,GAC1B,OAAMzL,EAAEa,OAAO,EAAE,KAAO,KAAM,CAC7Bb,EAAIA,EAAE,GAAKA,EAAEa,OAAO,EAAE2K,QAAU,IAAMxL,EAAEa,OAAO,EAAE2K,OACjDxL,GAAIA,EAAE+B,QAAQ,aAAa,MAAMA,QAAQ,QAAQ,MAElD/B,EAAIA,EAAE+B,QAAQ,MAAM,KAErB/B,EAAIA,EAAE+B,QAAQ,2BAA2B,SAAS4J,GAAGC,GAAGC,GAAGC,IAAM,MAAOF,IAAKC,GAAKC,GAAGjL,OAAO,GAAG2K,OAAOC,IAAID,QAAU,IAAMM,GAAGjL,OAAO4K,IAAM,UACpIzL,GAAIuK,IAAInC,cAAciD,IAC7B,IAAGf,IAAIiB,MAAM,WAAavL,EAAEuL,MAAM,YAAavL,EAAIA,EAAEa,OAAO,EAAEb,EAAEG,OAAO,GAAK,IAAMH,EAAEA,EAAEG,OAAO,EAC7F,IAAGmK,IAAIiB,MAAM,QAAUvL,EAAEuL,MAAM,OAAQvL,EAAIA,EAAE+B,QAAQ,MAAM,IAC3D,OAAO/B,GAAE+B,QAAQ,IAAI,KAEtB,GAAIgK,OAAQ,wBACZ,SAASC,cAAaC,EAAGC,KAAMC,MAC9B,GAAIC,KAAMC,SAASJ,EAAE,IAAKK,GAAK3I,KAAKC,MAAMsI,KAAOE,KAAMG,KAAO5I,KAAKyD,MAAMkF,GAAGF,IAC5E,IAAII,KAAOF,GAAKC,KAAKH,IAAMK,IAAML,GACjC,OAAOD,OAAQI,OAAS,EAAI,GAAK,GAAGA,MAAQ,KAAOC,MAAQ,EAAIvJ,KAAK,IAAKgJ,EAAE,GAAG9L,OAAS,EAAI8L,EAAE,GAAG9L,QAAUqD,KAAKgJ,IAAIP,EAAE,GAAG9L,QAAU8L,EAAE,GAAK,IAAMA,EAAE,GAAK7I,KAAKqJ,IAAIR,EAAE,GAAG9L,SAErK,QAASuM,cAAaT,EAAGC,KAAMC,MAC9B,MAAOA,OAAQD,OAAS,EAAI,GAAK,GAAGA,MAAQjJ,KAAK,IAAKgJ,EAAE,GAAG9L,OAAS,EAAI8L,EAAE,GAAG9L,QAE9E,GAAIwM,MAAO,aACX,IAAIC,YAAa,UACjB,IAAIC,OAAQ,qBACZ,SAASC,OAAMC,KACd,GAAI/M,GAAI,GAAIgN,EACZ,KAAI,GAAI/M,GAAI,EAAGA,GAAK8M,IAAI5M,SAAUF,EAAG,OAAQ+M,GAAGD,IAAI3M,WAAWH,IAC9D,IAAK,IAAI,KACT,KAAK,IAAID,GAAI,GAAK,MAClB,KAAK,IAAIA,GAAI,GAAK,MAClB,SAASA,GAAIS,OAAOC,aAAasM,IAElC,MAAOhN,GAER,QAASiN,KAAI1C,IAAKjH,GAAK,GAAI4J,IAAKvJ,KAAKI,IAAI,GAAGT,EAAI,OAAO,GAAIK,KAAKC,MAAM2G,IAAM2C,IAAIA,GAChF,QAASC,KAAI5C,IAAKjH,GAAK,MAAOK,MAAKC,OAAO2G,IAAI5G,KAAKyD,MAAMmD,MAAM5G,KAAKI,IAAI,GAAGT,IAC3E,QAAS8J,KAAI7C,KAAO,GAAGA,IAAM,YAAcA,KAAO,WAAY,MAAO,IAAIA,KAAO,EAAKA,IAAI,EAAMA,IAAI,EAAE,EAAK,OAAO,GAAG5G,KAAKyD,MAAMmD,KAC/H,QAAS8C,eAAchD,KAAMC,IAAKC,KACjC,GAAGF,KAAKjK,WAAW,KAAO,KAAOkK,IAAIiB,MAAMqB,YAAa,CACvD,GAAIU,MAAOhD,IAAIvI,QAAQ,OAAO,IAAIA,QAAQ,MAAM,IAAIA,QAAQ,KAAK,GACjE,IAAGwI,KAAO,EAAG,MAAO8C,eAAc,IAAKC,KAAM/C,IAC7C,OAAO,IAAM8C,cAAc,IAAKC,MAAO/C,KAAO,IAE/C,GAAGD,IAAIlK,WAAWkK,IAAInK,OAAS,KAAO,GAAI,MAAOiL,cAAaf,KAAMC,IAAKC,IACzE,IAAGD,IAAItI,QAAQ,QAAU,EAAG,MAAOiJ,eAAcZ,KAAMC,IAAKC,IAC5D,IAAGD,IAAItI,QAAQ,QAAU,EAAG,MAAOsJ,eAAchB,IAAKC,IACtD,IAAGD,IAAIlK,WAAW,KAAO,GAAI,MAAO,IAAIiN,cAAchD,KAAKC,IAAIzJ,OAAOyJ,IAAI,IAAI,IAAI,EAAE,GAAGC,IACvF,IAAIvK,GAAGuN,EACP,IAAItB,GAAGuB,GAAIC,GAAIvB,KAAOvI,KAAK8E,IAAI8B,KAAM4B,KAAO5B,IAAM,EAAI,IAAM,EAC5D,IAAGD,IAAIiB,MAAM,SAAU,MAAOY,MAAOnI,MAAMkI,KAAK5B,IAAInK,OACpD,IAAGmK,IAAIiB,MAAM,WAAY,CACxBvL,EAAIgE,MAAMuG,IAAI,EAAI,IAAGvK,IAAM,IAAKA,EAAI,EACpC,OAAOA,GAAEG,OAASmK,IAAInK,OAASH,EAAI8M,MAAMxC,IAAIzJ,OAAO,EAAEyJ,IAAInK,OAAOH,EAAEG,SAAWH,EAE/E,IAAIiM,EAAI3B,IAAIiB,MAAMQ,UAAY,KAAM,MAAOC,cAAaC,EAAGC,KAAMC,KACjE,IAAG7B,IAAIiB,MAAM,YAAc,KAAM,MAAOY,MAAOnI,MAAMkI,KAAK5B,IAAInK,OAASmK,IAAItI,QAAQ,KACnF,KAAIiK,EAAI3B,IAAIiB,MAAMoB,SAAW,KAAM,CAClC3M,EAAIiN,IAAI1C,IAAK0B,EAAE,GAAG9L,QAAQ4B,QAAQ,aAAa,MAAMkK,EAAE,IAAIlK,QAAQ,MAAM,IAAIkK,EAAE,IAAIlK,QAAQ,WAAW,SAAS4J,GAAIC,IAAM,MAAO,IAAMA,GAAK3I,KAAK,IAAKgJ,EAAE,GAAG9L,OAAOyL,GAAGzL,SACpK,OAAOmK,KAAItI,QAAQ,SAAW,EAAIhC,EAAIA,EAAE+B,QAAQ,OAAO,KAExDuI,IAAMA,IAAIvI,QAAQ,YAAa,KAC/B,KAAIkK,EAAI3B,IAAIiB,MAAM,mBAAqB,KAAM,CAC5C,MAAOY,MAAOc,IAAIf,KAAMD,EAAE,GAAG9L,QAAQ4B,QAAQ,kBAAkB,OAAOA,QAAQ,YAAY,OAAOA,QAAQ,OAAOkK,EAAE,GAAG9L,OAAO,KAAK,KAElI,IAAI8L,EAAI3B,IAAIiB,MAAM,mBAAqB,KAAM,MAAOY,MAAOvB,SAAS5G,MAAMkI,KAAK,GAC/E,KAAID,EAAI3B,IAAIiB,MAAM,wBAA0B,KAAM,CACjD,MAAOhB,KAAM,EAAI,IAAM8C,cAAchD,KAAMC,KAAMC,KAAOK,SAAS,GAAIjH,KAAKyD,MAAMmD,MAAS,IAAMnH,KAAK+J,IAAI5C,IAAK0B,EAAE,GAAG9L,QAAQ8L,EAAE,GAAG9L,QAEhI,IAAI8L,EAAI3B,IAAIiB,MAAM,eAAiB,KAAM,MAAO8B,eAAchD,KAAKC,IAAIvI,QAAQ,SAAS,IAAIwI,IAC5F,KAAI0B,EAAI3B,IAAIiB,MAAM,8BAAgC,KAAM,CACvDvL,EAAIgD,QAAQqK,cAAchD,KAAMC,IAAIvI,QAAQ,SAAS,IAAKwI,KAC1DiD,IAAK,CACL,OAAOxK,SAAQA,QAAQsH,IAAIvI,QAAQ,MAAM,KAAKA,QAAQ,QAAQ,SAASvB,GAAG,MAAOgN,IAAGxN,EAAEG,OAAOH,EAAEwN,MAAMhN,IAAI,IAAI,IAAI,MAElH,GAAG8J,IAAIiB,MAAMsB,SAAW,KAAM,CAC7B7M,EAAIqN,cAAchD,KAAM,aAAcE,IACtC,OAAO,IAAMvK,EAAEa,OAAO,EAAE,GAAK,KAAOb,EAAEa,OAAO,EAAG,GAAK,IAAMb,EAAEa,OAAO,GAErE,GAAI6M,IAAK,EACT,KAAIzB,EAAI3B,IAAIiB,MAAM,kCAAoC,KAAM,CAC3DiC,GAAK7J,KAAKgK,IAAI1B,EAAE,GAAG9L,OAAO,EAC1BsN,IAAKjH,KAAK0F,KAAMvI,KAAKI,IAAI,GAAGyJ,IAAI,EAAG,MACnCxN,GAAI,GAAKmM,IACTuB,IAAK5C,UAAU,IAAKmB,EAAE,GAAIwB,GAAG,GAC7B,IAAGC,GAAGA,GAAGvN,OAAO,IAAM,IAAKuN,GAAKA,GAAG7M,OAAO,EAAE6M,GAAGvN,OAAO,GAAK,GAC3DH,IAAK0N,GAAKzB,EAAE,GAAK,IAAMA,EAAE,EACzByB,IAAKjK,MAAMgK,GAAG,GAAGD,GACjB,IAAGE,GAAGvN,OAAS8L,EAAE,GAAG9L,OAAQuN,GAAKZ,MAAMb,EAAE,GAAGpL,OAAOoL,EAAE,GAAG9L,OAAOuN,GAAGvN,SAAWuN,EAC7E1N,IAAK0N,EACL,OAAO1N,GAER,IAAIiM,EAAI3B,IAAIiB,MAAM,oCAAsC,KAAM,CAC7DiC,GAAK7J,KAAKgK,IAAIhK,KAAKiK,IAAI3B,EAAE,GAAG9L,OAAQ8L,EAAE,GAAG9L,QAAQ,EACjDsN,IAAKjH,KAAK0F,KAAMvI,KAAKI,IAAI,GAAGyJ,IAAI,EAAG,KACnC,OAAOrB,OAAQsB,GAAG,KAAKA,GAAG,GAAK,GAAK,MAAQ,KAAOA,GAAG,GAAKjK,KAAKiK,GAAG,GAAGD,IAAMvB,EAAE,GAAK,IAAMA,EAAE,GAAKxI,MAAMgK,GAAG,GAAGD,IAAKvK,KAAK,IAAK,EAAEuK,GAAG,EAAIvB,EAAE,GAAG9L,OAAS8L,EAAE,GAAG9L,SAExJ,IAAI8L,EAAI3B,IAAIiB,MAAM,eAAiB,KAAM,CACxCvL,EAAIgE,MAAMuG,IAAK,EACf,IAAGD,IAAInK,QAAUH,EAAEG,OAAQ,MAAOH,EAClC,OAAO8M,OAAMxC,IAAIzJ,OAAO,EAAEyJ,IAAInK,OAAOH,EAAEG,SAAWH,EAElD,IAAIiM,EAAI3B,IAAIiB,MAAM,0BAA4B,KAAM,CACpDvL,EAAI,GAAKuK,IAAIrC,QAAQvE,KAAKgK,IAAI1B,EAAE,GAAG9L,OAAO,KAAK4B,QAAQ,YAAY,KACnEyL,IAAKxN,EAAEgC,QAAQ,IACf,IAAI6L,MAAOvD,IAAItI,QAAQ,KAAOwL,GAAIM,KAAOxD,IAAInK,OAASH,EAAEG,OAAS0N,IACjE,OAAOf,OAAMxC,IAAIzJ,OAAO,EAAEgN,MAAQ7N,EAAIsK,IAAIzJ,OAAOyJ,IAAInK,OAAO2N,OAE7D,IAAI7B,EAAI3B,IAAIiB,MAAM,yBAA2B,KAAM,CAClDiC,GAAKL,IAAI5C,IAAK0B,EAAE,GAAG9L,OACnB,OAAOoK,KAAM,EAAI,IAAM8C,cAAchD,KAAMC,KAAMC,KAAOK,SAASwC,IAAI7C,MAAMxI,QAAQ,aAAa,OAAOA,QAAQ,QAAQ,SAAS4J,IAAM,MAAO,OAASA,GAAGxL,OAAS,EAAIiD,KAAK,EAAE,EAAEuI,GAAGxL,QAAU,IAAMwL,KAAS,IAAMvI,KAAKoK,GAAGvB,EAAE,GAAG9L,QAE/N,OAAOmK,KACN,IAAK,QAAS,GAAI9J,GAAIoK,SAAS5G,MAAMkI,KAAK,GAAK,OAAO1L,KAAM,IAAM2L,KAAO3L,EAAI,EAC7E,UAED,KAAM,IAAIqI,OAAM,uBAAyByB,IAAM,KAEhD,QAASyD,eAAc1D,KAAMC,IAAKC,KACjC,GAAIc,KAAMf,IAAInK,OAAS,CACvB,OAAMmK,IAAIlK,WAAWiL,IAAI,KAAO,KAAMA,GACtC,OAAOP,WAAUT,KAAMC,IAAIzJ,OAAO,EAAEwK,KAAMd,IAAM5G,KAAKI,IAAI,GAAG,GAAGuG,IAAInK,OAAOkL,OAE3E,QAAS2C,gBAAe3D,KAAMC,IAAKC,KAClC,GAAIW,MAAOZ,IAAIvI,QAAQiJ,KAAK,IAAKG,IAAMb,IAAInK,OAAS+K,KAAK/K,MACzD,OAAO2K,WAAUT,KAAMa,KAAMX,IAAM5G,KAAKI,IAAI,GAAG,EAAEoH,MAAQlI,KAAK,IAAIkI,KAEnE,QAAS8C,gBAAe3D,IAAKC,KAC5B,GAAIvK,EACJ,IAAIqL,KAAMf,IAAItI,QAAQ,KAAOsI,IAAItI,QAAQ,KAAO,CAChD,IAAGsI,IAAIiB,MAAM,eAAgB,CAC5B,GAAIC,QAASlB,IAAItI,QAAQ,IAAM,IAAGwJ,UAAY,EAAGA,OAAOlB,IAAItI,QAAQ,IACpE,IAAIyJ,IAAK9H,KAAKyD,MAAMzD,KAAK6E,IAAI7E,KAAK8E,IAAI8B,MAAM5G,KAAK+E,QAAQ8C,MACzD,IAAGC,GAAK,EAAGA,IAAMD,MACjBxL,IAAKuK,IAAI5G,KAAKI,IAAI,GAAG0H,KAAKtD,YAAYkD,IAAI,GAAGG,OAAOC,IAAID,OACxD,KAAIxL,EAAEuL,MAAM,QAAS,CACpB,GAAIG,OAAQ/H,KAAKyD,MAAMzD,KAAK6E,IAAI7E,KAAK8E,IAAI8B,MAAM5G,KAAK+E,OACpD,IAAG1I,EAAEgC,QAAQ,QAAU,EAAGhC,EAAIA,EAAE,GAAK,IAAMA,EAAEa,OAAO,GAAK,MAAQ6K,MAAQ1L,EAAEG,OAAOsL,QAC7EzL,IAAK,MAAQ0L,MAAQD,GAC1BzL,GAAIA,EAAE+B,QAAQ,MAAM,KAErB/B,EAAIA,EAAE+B,QAAQ,2BAA2B,SAAS4J,GAAGC,GAAGC,GAAGC,IAAM,MAAOF,IAAKC,GAAKC,GAAGjL,OAAO,GAAG2K,OAAOC,IAAID,QAAU,IAAMM,GAAGjL,OAAO4K,IAAM,UACpIzL,GAAIuK,IAAInC,cAAciD,IAC7B,IAAGf,IAAIiB,MAAM,WAAavL,EAAEuL,MAAM,YAAavL,EAAIA,EAAEa,OAAO,EAAEb,EAAEG,OAAO,GAAK,IAAMH,EAAEA,EAAEG,OAAO,EAC7F,IAAGmK,IAAIiB,MAAM,QAAUvL,EAAEuL,MAAM,OAAQvL,EAAIA,EAAE+B,QAAQ,MAAM,IAC3D,OAAO/B,GAAE+B,QAAQ,IAAI,KAEtB,QAASmM,eAAc7D,KAAMC,IAAKC,KACjC,GAAGF,KAAKjK,WAAW,KAAO,KAAOkK,IAAIiB,MAAMqB,YAAa,CACvD,GAAIU,MAAOhD,IAAIvI,QAAQ,OAAO,IAAIA,QAAQ,MAAM,IAAIA,QAAQ,KAAK,GACjE,IAAGwI,KAAO,EAAG,MAAO2D,eAAc,IAAKZ,KAAM/C,IAC7C,OAAO,IAAM2D,cAAc,IAAKZ,MAAO/C,KAAO,IAE/C,GAAGD,IAAIlK,WAAWkK,IAAInK,OAAS,KAAO,GAAI,MAAO4N,eAAc1D,KAAMC,IAAKC,IAC1E,IAAGD,IAAItI,QAAQ,QAAU,EAAG,MAAOgM,gBAAe3D,KAAMC,IAAKC,IAC7D,IAAGD,IAAItI,QAAQ,QAAU,EAAG,MAAOiM,gBAAe3D,IAAKC,IACvD,IAAGD,IAAIlK,WAAW,KAAO,GAAI,MAAO,IAAI8N,cAAc7D,KAAKC,IAAIzJ,OAAOyJ,IAAI,IAAI,IAAI,EAAE,GAAGC,IACvF,IAAIvK,EACJ,IAAIiM,GAAGuB,GAAIC,GAAIvB,KAAOvI,KAAK8E,IAAI8B,KAAM4B,KAAO5B,IAAM,EAAI,IAAM,EAC5D,IAAGD,IAAIiB,MAAM,SAAU,MAAOY,MAAO/I,KAAK8I,KAAK5B,IAAInK,OACnD,IAAGmK,IAAIiB,MAAM,WAAY,CACxBvL,EAAK,GAAGuK,GAAM,IAAGA,MAAQ,EAAGvK,EAAI,EAChC,OAAOA,GAAEG,OAASmK,IAAInK,OAASH,EAAI8M,MAAMxC,IAAIzJ,OAAO,EAAEyJ,IAAInK,OAAOH,EAAEG,SAAWH,EAE/E,IAAIiM,EAAI3B,IAAIiB,MAAMQ,UAAY,KAAM,MAAOW,cAAaT,EAAGC,KAAMC,KACjE,IAAG7B,IAAIiB,MAAM,YAAc,KAAM,MAAOY,MAAO/I,KAAK8I,KAAK5B,IAAInK,OAASmK,IAAItI,QAAQ,KAClF,KAAIiK,EAAI3B,IAAIiB,MAAMoB,SAAW,KAAM,CAClC3M,GAAK,GAAGuK,KAAKxI,QAAQ,aAAa,MAAMkK,EAAE,IAAIlK,QAAQ,MAAM,IAAIkK,EAAE,IAAIlK,QAAQ,WAAW,SAAS4J,GAAIC,IAAM,MAAO,IAAMA,GAAK3I,KAAK,IAAKgJ,EAAE,GAAG9L,OAAOyL,GAAGzL,SACvJ,OAAOmK,KAAItI,QAAQ,SAAW,EAAIhC,EAAIA,EAAE+B,QAAQ,OAAO,KAExDuI,IAAMA,IAAIvI,QAAQ,YAAa,KAC/B,KAAIkK,EAAI3B,IAAIiB,MAAM,mBAAqB,KAAM,CAC5C,MAAOY,OAAQ,GAAGD,MAAMnK,QAAQ,kBAAkB,OAAOA,QAAQ,YAAY,OAAOA,QAAQ,OAAOkK,EAAE,GAAG9L,OAAO,KAAK,KAErH,IAAI8L,EAAI3B,IAAIiB,MAAM,mBAAqB,KAAM,MAAOY,MAAOvB,SAAU,GAAGsB,KACxE,KAAID,EAAI3B,IAAIiB,MAAM,wBAA0B,KAAM,CACjD,MAAOhB,KAAM,EAAI,IAAM2D,cAAc7D,KAAMC,KAAMC,KAAOK,SAAU,GAAGL,KAAQ,IAAMtH,KAAK,IAAIgJ,EAAE,GAAG9L,QAElG,IAAI8L,EAAI3B,IAAIiB,MAAM,eAAiB,KAAM,MAAO2C,eAAc7D,KAAKC,IAAIvI,QAAQ,SAAS,IAAIwI,IAC5F,KAAI0B,EAAI3B,IAAIiB,MAAM,8BAAgC,KAAM,CACvDvL,EAAIgD,QAAQkL,cAAc7D,KAAMC,IAAIvI,QAAQ,SAAS,IAAKwI,KAC1DiD,IAAK,CACL,OAAOxK,SAAQA,QAAQsH,IAAIvI,QAAQ,MAAM,KAAKA,QAAQ,QAAQ,SAASvB,GAAG,MAAOgN,IAAGxN,EAAEG,OAAOH,EAAEwN,MAAMhN,IAAI,IAAI,IAAI,MAElH,GAAG8J,IAAIiB,MAAMsB,SAAW,KAAM,CAC7B7M,EAAIkO,cAAc7D,KAAM,aAAcE,IACtC,OAAO,IAAMvK,EAAEa,OAAO,EAAE,GAAK,KAAOb,EAAEa,OAAO,EAAG,GAAK,IAAMb,EAAEa,OAAO,GAErE,GAAI6M,IAAK,EACT,KAAIzB,EAAI3B,IAAIiB,MAAM,kCAAoC,KAAM,CAC3DiC,GAAK7J,KAAKgK,IAAI1B,EAAE,GAAG9L,OAAO,EAC1BsN,IAAKjH,KAAK0F,KAAMvI,KAAKI,IAAI,GAAGyJ,IAAI,EAAG,MACnCxN,GAAI,GAAKmM,IACTuB,IAAK5C,UAAU,IAAKmB,EAAE,GAAIwB,GAAG,GAC7B,IAAGC,GAAGA,GAAGvN,OAAO,IAAM,IAAKuN,GAAKA,GAAG7M,OAAO,EAAE6M,GAAGvN,OAAO,GAAK,GAC3DH,IAAK0N,GAAKzB,EAAE,GAAK,IAAMA,EAAE,EACzByB,IAAKjK,MAAMgK,GAAG,GAAGD,GACjB,IAAGE,GAAGvN,OAAS8L,EAAE,GAAG9L,OAAQuN,GAAKZ,MAAMb,EAAE,GAAGpL,OAAOoL,EAAE,GAAG9L,OAAOuN,GAAGvN,SAAWuN,EAC7E1N,IAAK0N,EACL,OAAO1N,GAER,IAAIiM,EAAI3B,IAAIiB,MAAM,oCAAsC,KAAM,CAC7DiC,GAAK7J,KAAKgK,IAAIhK,KAAKiK,IAAI3B,EAAE,GAAG9L,OAAQ8L,EAAE,GAAG9L,QAAQ,EACjDsN,IAAKjH,KAAK0F,KAAMvI,KAAKI,IAAI,GAAGyJ,IAAI,EAAG,KACnC,OAAOrB,OAAQsB,GAAG,KAAKA,GAAG,GAAK,GAAK,MAAQ,KAAOA,GAAG,GAAKjK,KAAKiK,GAAG,GAAGD,IAAMvB,EAAE,GAAK,IAAMA,EAAE,GAAKxI,MAAMgK,GAAG,GAAGD,IAAKvK,KAAK,IAAK,EAAEuK,GAAG,EAAIvB,EAAE,GAAG9L,OAAS8L,EAAE,GAAG9L,SAExJ,IAAI8L,EAAI3B,IAAIiB,MAAM,eAAiB,KAAM,CACxCvL,EAAI,GAAKuK,GACT,IAAGD,IAAInK,QAAUH,EAAEG,OAAQ,MAAOH,EAClC,OAAO8M,OAAMxC,IAAIzJ,OAAO,EAAEyJ,IAAInK,OAAOH,EAAEG,SAAWH,EAEnD,IAAIiM,EAAI3B,IAAIiB,MAAM,yBAA2B,KAAM,CAClDvL,EAAI,GAAKuK,IAAIrC,QAAQvE,KAAKgK,IAAI1B,EAAE,GAAG9L,OAAO,KAAK4B,QAAQ,YAAY,KACnEyL,IAAKxN,EAAEgC,QAAQ,IACf,IAAI6L,MAAOvD,IAAItI,QAAQ,KAAOwL,GAAIM,KAAOxD,IAAInK,OAASH,EAAEG,OAAS0N,IACjE,OAAOf,OAAMxC,IAAIzJ,OAAO,EAAEgN,MAAQ7N,EAAIsK,IAAIzJ,OAAOyJ,IAAInK,OAAO2N,OAE7D,IAAI7B,EAAI3B,IAAIiB,MAAM,yBAA2B,KAAM,CAClD,MAAOhB,KAAM,EAAI,IAAM2D,cAAc7D,KAAMC,KAAMC,KAAOK,SAAS,GAAGL,KAAKxI,QAAQ,aAAa,OAAOA,QAAQ,QAAQ,SAAS4J,IAAM,MAAO,OAASA,GAAGxL,OAAS,EAAIiD,KAAK,EAAE,EAAEuI,GAAGxL,QAAU,IAAMwL,KAAS,IAAMvI,KAAK,EAAE6I,EAAE,GAAG9L,QAE5N,OAAOmK,KACN,IAAK,QAAS,GAAI9J,GAAIoK,SAAS,GAAGsB,KAAO,OAAO1L,KAAM,IAAM2L,KAAO3L,EAAI,EACvE,UAED,KAAM,IAAIqI,OAAM,uBAAyByB,IAAM,KAEhD,MAAO,SAASQ,WAAUT,KAAMC,IAAKC,KACpC,OAAQA,IAAI,KAAOA,IAAM2D,cAAc7D,KAAMC,IAAKC,KAAO8C,cAAchD,KAAMC,IAAKC,QAEnF,SAAS4D,WAAU7D,KAClB,GAAIhB,OACJ,IAAI8E,QAAS,MAAOpB,EACpB,KAAI,GAAI/M,GAAI,EAAG4K,EAAI,EAAG5K,EAAIqK,IAAInK,SAAUF,EAAG,OAAQ+M,GAAG1C,IAAIlK,WAAWH,IACpE,IAAK,IACJmO,QAAUA,MAAQ,MACnB,KAAK,IAAI,IAAK,IAAI,IAAK,MACpBnO,CAAG,MACN,KAAK,IACJqJ,IAAIA,IAAInJ,QAAUmK,IAAIzJ,OAAOgK,EAAE5K,EAAE4K,EACjCA,GAAI5K,EAAE,EAERqJ,IAAIA,IAAInJ,QAAUmK,IAAIzJ,OAAOgK,EAC7B,IAAGuD,SAAW,KAAM,KAAM,IAAIvF,OAAM,WAAayB,IAAM,yBACvD,OAAOhB,KAERxG,IAAIuL,OAASF,SACb,IAAIG,SAAU,eACd,SAASC,UAASjE,IAAKjH,EAAGiB,KAAMkK,MAC/B,GAAIlF,QAAUtJ,EAAI,GAAIC,EAAI,EAAGiD,EAAI,GAAIuL,IAAI,IAAKpH,EAAGqH,GAAI7D,EAAGmC,EACxD,IAAI2B,IAAG,GAEP,OAAM1O,EAAIqK,IAAInK,OAAQ,CACrB,OAAQ+C,EAAIoH,IAAIrK,IACf,IAAK,IACJ,IAAIgE,UAAUqG,IAAKrK,GAAI,KAAM,IAAI4I,OAAM,0BAA4B3F,EAAI,OAAQoH,IAC/EhB,KAAIA,IAAInJ,SAAWoD,EAAE,IAAKF,EAAE,UAAYpD,IAAG,CAAG,MAC/C,KAAK,IACJ,IAAID,EAAE,IAAIgN,GAAG1C,IAAIlK,aAAaH,MAAQ,IAAMA,EAAIqK,IAAInK,QAASH,GAAKS,OAAOC,aAAasM,GACtF1D,KAAIA,IAAInJ,SAAWoD,EAAE,IAAKF,EAAErD,KAAMC,CAAG,MACtC,KAAK,KAAM,GAAI+H,GAAIsC,MAAMrK,GAAIsD,EAAKyE,IAAM,KAAOA,IAAM,IAAOA,EAAI,GAC/DsB,KAAIA,IAAInJ,SAAWoD,EAAEA,EAAGF,EAAE2E,KAAM/H,CAAG,MACpC,KAAK,IAAKqJ,IAAIA,IAAInJ,SAAWoD,EAAE,IAAKF,EAAE,IAAMpD,IAAG,CAAG,MAClD,KAAK,IACJqJ,IAAIA,IAAInJ,SAAWoD,EAAE,IAAKF,EAAEA,KAAMpD,CAAG,MACtC,KAAK,IAAK,IAAK,IACd,GAAGqK,IAAIrK,EAAE,KAAO,KAAOqK,IAAIrK,EAAE,KAAO,IAAK,CACnC,GAAGyO,IAAI,KAAM,CAAEA,GAAGzF,gBAAgB5F,EAAGiB,KAAMgG,IAAIrK,EAAE,KAAO,IAAM,IAAGyO,IAAI,KAAM,MAAO,GACvFpF,IAAIA,IAAInJ,SAAWoD,EAAE,IAAKF,EAAEiH,IAAIzJ,OAAOZ,EAAE,GAAKwO,KAAMvL,CAAGjD,IAAG,CAAG,OAG/D,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACtDiD,EAAIA,EAAE0L,aAEP,KAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAChE,GAAGvL,EAAI,EAAG,MAAO,EACjB,IAAGqL,IAAI,KAAM,CAAEA,GAAGzF,gBAAgB5F,EAAGiB,KAAO,IAAGoK,IAAI,KAAM,MAAO,GAChE1O,EAAIkD,CAAG,SAAQjD,EAAEqK,IAAInK,QAAUmK,IAAIrK,GAAG2O,gBAAkB1L,EAAGlD,GAAGkD,CAC9D,IAAGA,IAAM,KAAOuL,IAAIG,gBAAkB,IAAK1L,EAAI,GAC/C,IAAGA,IAAM,IAAKA,EAAIyL,EAClBrF,KAAIA,IAAInJ,SAAWoD,EAAEL,EAAGG,EAAErD,EAAIyO,KAAMvL,CAAG,MACxC,KAAK,IACJmE,GAAG9D,EAAEL,EAAGG,EAAE,IACV,IAAGqL,IAAI,KAAMA,GAAGzF,gBAAgB5F,EAAGiB,KAC/B,IAAGgG,IAAIzJ,OAAOZ,EAAG,KAAO,MAAO,CAAE,GAAGyO,IAAI,KAAMrH,EAAEhE,EAAIqL,GAAGhF,GAAK,GAAK,IAAM,GAAKrC,GAAE9D,EAAI,GAAKoL,IAAG,GAAI1O,IAAG,MAC5F,IAAGqK,IAAIzJ,OAAOZ,EAAE,KAAO,QAAS,CAAE,GAAGyO,IAAI,KAAMrH,EAAEhE,EAAIqL,GAAGhF,GAAK,GAAK,KAAO,IAAMrC,GAAE9D,EAAI,GAAKtD,IAAG,CAAG0O,IAAG,QACvG,CAAEtH,EAAE9D,EAAI,MAAOtD,EACpB,GAAGyO,IAAI,MAAQrH,EAAE9D,IAAM,IAAK,MAAO,EACnC+F,KAAIA,IAAInJ,QAAUkH,CAAGoH,KAAMvL,CAAG,MAC/B,KAAK,IACJlD,EAAIkD,CACJ,OAAMoH,IAAIrK,OAAS,KAAOA,EAAIqK,IAAInK,OAAQH,GAAKsK,IAAIrK,EACnD,IAAGD,EAAEa,QAAQ,KAAO,IAAK,KAAM,4BAA8Bb,EAAI,GACjE,IAAGA,EAAEuL,MAAM+C,SAAU,CACpB,GAAGI,IAAI,KAAM,CAAEA,GAAGzF,gBAAgB5F,EAAGiB,KAAO,IAAGoK,IAAI,KAAM,MAAO,GAChEpF,IAAIA,IAAInJ,SAAWoD,EAAE,IAAKF,EAAErD,EAAE4O,mBACxB,CAAE5O,EAAE,GACX,KAED,KAAK,IACJ,GAAG0O,IAAM,KAAM,CACd1O,EAAIkD,CAAG,QAAOA,EAAEoH,MAAMrK,MAAQ,IAAKD,GAAKkD,CACxCoG,KAAIA,IAAInJ,SAAWoD,EAAE,IAAKF,EAAErD,EAAI,OAGlC,IAAK,IAAK,IAAK,IACdA,EAAIkD,CAAG,OAAM,YAAYlB,QAAQkB,EAAEoH,MAAMrK,KAAO,GAAKiD,GAAG,MAAQoH,IAAIrK,EAAE,IAAM,KAAO,KAAK+B,QAAQsI,IAAIrK,EAAE,KAAK,EAAGD,GAAKkD,CACnHoG,KAAIA,IAAInJ,SAAWoD,EAAE,IAAKF,EAAErD,EAAI,MACjC,KAAK,IACJA,EAAIkD,CAAG,OAAMoH,MAAMrK,KAAOiD,EAAGlD,GAAGkD,CAChCmE,IAAG9D,EAAEL,EAAGG,EAAErD,EAAIsJ,KAAIA,IAAInJ,QAAUkH,CAAGoH,KAAMvL,CAAG,MAC7C,KAAK,MAAOjD,CAAG,IAAGqK,IAAIrK,IAAM,KAAOqK,IAAIrK,IAAM,MAAOA,CAAG,MACvD,KAAK,IAAK,IAAK,IAAKqJ,IAAIA,IAAInJ,SAAWoD,EAAGiL,OAAO,EAAE,IAAItL,EAAIG,EAAEH,KAAMjD,CAAG,MACtE,KAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACpFD,EAAIkD,CAAG,OAAM,aAAalB,QAAQsI,MAAMrK,KAAO,EAAGD,GAAGsK,IAAIrK,EACzDqJ,KAAIA,IAAInJ,SAAWoD,EAAE,IAAKF,EAAErD,EAAI,MACjC,KAAK,IAAKsJ,IAAIA,IAAInJ,SAAWoD,EAAEL,EAAGG,EAAEH,KAAMjD,CAAG,MAC7C,SACC,GAAG,uCAAuC+B,QAAQkB,MAAQ,EAAG,KAAM,IAAI2F,OAAM,0BAA4B3F,EAAI,OAASoH,IACtHhB,KAAIA,IAAInJ,SAAWoD,EAAE,IAAKF,EAAEH,KAAMjD,CAAG,QAGxC,GAAI4O,IAAK,EAAGrE,IAAM,EAAGsE,GACrB,KAAI7O,EAAEqJ,IAAInJ,OAAO,EAAGsO,IAAI,IAAKxO,GAAK,IAAKA,EAAG,CACzC,OAAOqJ,IAAIrJ,GAAGsD,GACb,IAAK,IAAK,IAAK,IAAK+F,IAAIrJ,GAAGsD,EAAIoL,EAAIF,KAAI,GAAK,IAAGI,GAAK,EAAGA,GAAK,CAAG,MAC/D,KAAK,IACJ,GAAIC,IAAIxF,IAAIrJ,GAAGoD,EAAEkI,MAAM,SAAWf,IAAI7G,KAAKiK,IAAIpD,IAAIsE,IAAI,GAAG3O,OAAO,EACjE,IAAG0O,GAAK,EAAGA,GAAK,CAEjB,KAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAKJ,IAAInF,IAAIrJ,GAAGsD,CAAG,MACtD,KAAK,IAAK,GAAGkL,MAAQ,IAAK,CAAEnF,IAAIrJ,GAAGsD,EAAI,GAAK,IAAGsL,GAAK,EAAGA,GAAK,EAAK,KACjE,KAAK,IAAK,GAAGvF,IAAIrJ,GAAGoD,IAAM,MACzB,KACD,KAAK,IACJ,GAAGwL,GAAK,GAAKvF,IAAIrJ,GAAGoD,EAAEkI,MAAM,QAASsD,GAAK,CAC1C,IAAGA,GAAK,GAAKvF,IAAIrJ,GAAGoD,EAAEkI,MAAM,QAASsD,GAAK,CAC1C,IAAGA,GAAK,GAAKvF,IAAIrJ,GAAGoD,EAAEkI,MAAM,QAASsD,GAAK,GAG7C,OAAOA,IACN,IAAK,GAAG,KACR,KAAK,GACJ,GAAGH,GAAGlF,GAAK,GAAK,CAAEkF,GAAGlF,EAAI,IAAKkF,GAAG9E,EACjC,GAAG8E,GAAG9E,GAAM,GAAI,CAAE8E,GAAG9E,EAAI,IAAK8E,GAAG/E,EACjC,GAAG+E,GAAG/E,GAAM,GAAI,CAAE+E,GAAG/E,EAAI,IAAK+E,GAAGhF,EACjC,KACD,KAAK,GACJ,GAAGgF,GAAGlF,GAAK,GAAK,CAAEkF,GAAGlF,EAAI,IAAKkF,GAAG9E,EACjC,GAAG8E,GAAG9E,GAAM,GAAI,CAAE8E,GAAG9E,EAAI,IAAK8E,GAAG/E,EACjC,MAGF,GAAIoF,MAAO,GAAIC,EACf,KAAI/O,EAAE,EAAGA,EAAIqJ,IAAInJ,SAAUF,EAAG,CAC7B,OAAOqJ,IAAIrJ,GAAGsD,GACb,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACxC,KAAK,IAAK+F,IAAIrJ,GAAKoE,SAAW,MAC9B,KAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC9FiF,IAAIrJ,GAAGoD,EAAI+G,WAAWd,IAAIrJ,GAAGsD,EAAEnD,WAAW,GAAIkJ,IAAIrJ,GAAGoD,EAAGqL,GAAIlE,IAC5DlB,KAAIrJ,GAAGsD,EAAI,GAAK,MACjB,KAAK,IAAK,IAAK,IAAK,IAAK,IACxByL,GAAK/O,EAAE,CACP,OAAMqJ,IAAI0F,KAAO,QACf9L,EAAEoG,IAAI0F,IAAIzL,KAAO,KAAOL,IAAM,MAC9BA,IAAM,KAAOA,IAAM,MAAQoG,IAAI0F,GAAG,IAAM,OAAS1F,IAAI0F,GAAG,GAAGzL,IAAM,KAAO+F,IAAI0F,GAAG,GAAGzL,IAAM,KAAO+F,IAAI0F,GAAG,GAAG3L,IAAM,MAChHiG,IAAIrJ,GAAGsD,IAAM,MAAQL,IAAM,KAAOA,IAAM,KAAOA,IAAM,MACrDA,IAAM,MAAQoG,IAAI0F,IAAI3L,IAAM,KAAO,KAAKrB,QAAQsH,IAAI0F,IAAI3L,IAAM,GAAKiG,IAAI0F,IAAI3L,IAAM,KAAOiG,IAAI0F,GAAG,IAAM,MAAQ1F,IAAI0F,GAAG,GAAGzL,GAAK,MAC1H,CACF+F,IAAIrJ,GAAGoD,GAAKiG,IAAI0F,IAAI3L,CACpBiG,KAAI0F,IAAM3K,YAAa2K,GAExBD,MAAQzF,IAAIrJ,GAAGoD,CACfpD,GAAI+O,GAAG,CAAG,MACX,KAAK,IAAK1F,IAAIrJ,GAAGsD,EAAI,GAAK+F,KAAIrJ,GAAGoD,EAAIuF,YAAYvF,EAAEiB,KAAO,QAG5D,GAAI2K,IAAK,GAAIC,IAAKC,IAClB,IAAGJ,KAAK5O,OAAS,EAAG,CACnB+O,IAAO7L,EAAE,GAAG0L,KAAK3O,WAAW,KAAO,IAAMiD,EAAIA,CAC7C8L,MAAOrE,UAAUiE,KAAK3O,WAAW,KAAO,GAAK,IAAM,IAAK2O,KAAMG,IAC9DF,IAAGG,KAAKhP,OAAO,CACf,IAAIiP,OAAQ9F,IAAInJ,MAChB,KAAIF,EAAE,EAAGA,EAAIqJ,IAAInJ,SAAUF,EAAG,GAAGqJ,IAAIrJ,IAAM,MAAQqJ,IAAIrJ,GAAGoD,EAAErB,QAAQ,MAAQ,EAAG,CAAEoN,MAAQnP,CAAG,OAC5F,GAAIoP,OAAM/F,IAAInJ,MACd,IAAGiP,QAAU9F,IAAInJ,QAAUgP,KAAKnN,QAAQ,QAAU,EAAG,CACpD,IAAI/B,EAAEqJ,IAAInJ,OAAO,EAAGF,GAAI,IAAIA,EAAG,CAC9B,GAAGqJ,IAAIrJ,IAAM,MAAQ,MAAM+B,QAAQsH,IAAIrJ,GAAGsD,MAAQ,EAAG,QACrD,IAAGyL,IAAI1F,IAAIrJ,GAAGoD,EAAElD,OAAO,EAAG,CAAE6O,IAAM1F,IAAIrJ,GAAGoD,EAAElD,MAAQmJ,KAAIrJ,GAAGoD,EAAI8L,KAAKtO,OAAOmO,GAAG,EAAG1F,IAAIrJ,GAAGoD,EAAElD,YACpF,IAAG6O,GAAK,EAAG1F,IAAIrJ,GAAGoD,EAAI,OACtB,CAAEiG,IAAIrJ,GAAGoD,EAAI8L,KAAKtO,OAAO,EAAGmO,GAAG,EAAIA,KAAM,EAC9C1F,IAAIrJ,GAAGsD,EAAI,GACX8L,OAAQpP,EAET,GAAG+O,IAAI,GAAKK,MAAM/F,IAAInJ,OAAQmJ,IAAI+F,OAAOhM,EAAI8L,KAAKtO,OAAO,EAAEmO,GAAG,GAAK1F,IAAI+F,OAAOhM,MAE1E,IAAG+L,QAAU9F,IAAInJ,QAAUgP,KAAKnN,QAAQ,QAAU,EAAG,CACzDgN,GAAKG,KAAKnN,QAAQ,KAAK,CACvB,KAAI/B,EAAEmP,MAAOnP,GAAI,IAAKA,EAAG,CACxB,GAAGqJ,IAAIrJ,IAAM,MAAQ,MAAM+B,QAAQsH,IAAIrJ,GAAGsD,MAAQ,EAAG,QACrDsH,GAAEvB,IAAIrJ,GAAGoD,EAAErB,QAAQ,MAAM,GAAG/B,IAAImP,MAAM9F,IAAIrJ,GAAGoD,EAAErB,QAAQ,KAAK,EAAEsH,IAAIrJ,GAAGoD,EAAElD,OAAO,CAC9E8O,IAAK3F,IAAIrJ,GAAGoD,EAAExC,OAAOgK,EAAE,EACvB,MAAMA,GAAG,IAAKA,EAAG,CAChB,GAAGmE,IAAI,IAAM1F,IAAIrJ,GAAGoD,EAAEwH,KAAO,KAAOvB,IAAIrJ,GAAGoD,EAAEwH,KAAO,KAAMoE,GAAKE,KAAKH,MAAQC,GAE7E3F,IAAIrJ,GAAGoD,EAAI4L,EACX3F,KAAIrJ,GAAGsD,EAAI,GACX8L,OAAQpP,EAET,GAAG+O,IAAI,GAAKK,MAAM/F,IAAInJ,OAAQmJ,IAAI+F,OAAOhM,EAAI8L,KAAKtO,OAAO,EAAEmO,GAAG,GAAK1F,IAAI+F,OAAOhM,CAC9E2L,IAAKG,KAAKnN,QAAQ,KAAK,CACvB,KAAI/B,EAAEmP,MAAOnP,EAAEqJ,IAAInJ,SAAUF,EAAG,CAC/B,GAAGqJ,IAAIrJ,IAAM,MAAQ,MAAM+B,QAAQsH,IAAIrJ,GAAGsD,MAAQ,GAAKtD,IAAMmP,MAAQ,QACrEvE,GAAEvB,IAAIrJ,GAAGoD,EAAErB,QAAQ,MAAM,GAAG/B,IAAImP,MAAM9F,IAAIrJ,GAAGoD,EAAErB,QAAQ,KAAK,EAAE,CAC9DiN,IAAK3F,IAAIrJ,GAAGoD,EAAExC,OAAO,EAAEgK,EACvB,MAAMA,EAAEvB,IAAIrJ,GAAGoD,EAAElD,SAAU0K,EAAG,CAC7B,GAAGmE,GAAGG,KAAKhP,OAAQ8O,IAAME,KAAKH,MAE/B1F,IAAIrJ,GAAGoD,EAAI4L,EACX3F,KAAIrJ,GAAGsD,EAAI,GACX8L,OAAQpP,IAIX,IAAIA,EAAE,EAAGA,EAAEqJ,IAAInJ,SAAUF,EAAG,GAAGqJ,IAAIrJ,IAAM,MAAQ,MAAM+B,QAAQsH,IAAIrJ,GAAGsD,IAAI,EAAG,CAC5E2L,IAAOV,KAAM,GAAKnL,EAAI,GAAKpD,EAAE,GAAKqJ,IAAIrJ,EAAE,GAAGoD,IAAM,KAAOA,EAAEA,CAC1DiG,KAAIrJ,GAAGoD,EAAIyH,UAAUxB,IAAIrJ,GAAGsD,EAAG+F,IAAIrJ,GAAGoD,EAAG6L,IACzC5F,KAAIrJ,GAAGsD,EAAI,IAEZ,GAAI+L,QAAS,EACb,KAAIrP,EAAE,EAAGA,IAAMqJ,IAAInJ,SAAUF,EAAG,GAAGqJ,IAAIrJ,IAAM,KAAMqP,QAAUhG,IAAIrJ,GAAGoD,CACpE,OAAOiM,QAERxM,IAAIyM,MAAQhB,QACZ,IAAIiB,SAAU,SACd,IAAIC,UAAW,2BACf,SAASC,SAAQrM,EAAGiJ,IACnB,GAAGA,IAAM,KAAM,MAAO,MACtB,IAAIqD,QAASC,WAAWtD,GAAG,GAC3B,QAAOA,GAAG,IACT,IAAK,IAAM,GAAGjJ,GAAKsM,OAAQ,MAAO,KAAM,MACxC,KAAK,IAAM,GAAGtM,EAAKsM,OAAQ,MAAO,KAAM,MACxC,KAAK,IAAM,GAAGtM,EAAKsM,OAAQ,MAAO,KAAM,MACxC,KAAK,KAAM,GAAGtM,GAAKsM,OAAQ,MAAO,KAAM,MACxC,KAAK,KAAM,GAAGtM,GAAKsM,OAAQ,MAAO,KAAM,MACxC,KAAK,KAAM,GAAGtM,GAAKsM,OAAQ,MAAO,KAAM,OAEzC,MAAO,OAER,QAASE,YAAWC,EAAGzM,GACtB,GAAIiH,KAAM6D,UAAU2B,EACpB,IAAI3M,GAAImH,IAAInK,OAAQ4P,IAAMzF,IAAInH,EAAE,GAAGnB,QAAQ,IAC3C,IAAGmB,EAAE,GAAK4M,KAAK,IAAK5M,CACpB,IAAGmH,IAAInK,OAAS,EAAG,KAAM,iCAAmCmK,IAAM,GAClE,UAAUjH,KAAM,SAAU,OAAQ,EAAGiH,IAAInK,SAAW,GAAK4P,KAAK,EAAEzF,IAAIA,IAAInK,OAAO,GAAG,IAClF,QAAOmK,IAAInK,QACV,IAAK,GAAGmK,IAAMyF,KAAK,GAAK,UAAW,UAAW,UAAWzF,IAAI,KAAOA,IAAI,GAAIA,IAAI,GAAIA,IAAI,GAAI,IAAM,MAClG,KAAK,GAAGA,IAAMyF,KAAK,GAAKzF,IAAI,GAAIA,IAAI,GAAIA,IAAI,GAAIA,IAAI,KAAOA,IAAI,GAAIA,IAAI,GAAIA,IAAI,GAAI,IAAM,MACzF,KAAK,GAAGA,IAAMyF,KAAK,GAAKzF,IAAI,GAAIA,IAAI,GAAIA,IAAI,GAAIA,IAAI,KAAOA,IAAI,GAAIA,IAAI,GAAIA,IAAI,GAAI,IAAM,MACzF,KAAK,GAAG,MAET,GAAImD,IAAKpK,EAAI,EAAIiH,IAAI,GAAKjH,EAAI,EAAIiH,IAAI,GAAKA,IAAI,EAC/C,IAAGA,IAAI,GAAGtI,QAAQ,QAAU,GAAKsI,IAAI,GAAGtI,QAAQ,QAAU,EAAG,OAAQmB,EAAGsK,GACxE,IAAGnD,IAAI,GAAGiB,MAAMiE,UAAY,MAAQlF,IAAI,GAAGiB,MAAMiE,UAAY,KAAM,CAClE,GAAIQ,IAAK1F,IAAI,GAAGiB,MAAMkE,SACtB,IAAIQ,IAAK3F,IAAI,GAAGiB,MAAMkE,SACtB,OAAOC,SAAQrM,EAAG2M,KAAO7M,EAAGmH,IAAI,IAAMoF,QAAQrM,EAAG4M,KAAO9M,EAAGmH,IAAI,KAAOnH,EAAGmH,IAAI0F,IAAM,MAAQC,IAAM,KAAO,EAAI,IAE7G,OAAQ9M,EAAGsK,IAEZ,QAASyC,QAAO5F,IAAIjH,EAAErD,GACrBmE,QAAQnE,GAAK,KAAOA,EAAKA,KACzB,IAAIkL,MAAO,EACX,cAAcZ,MACb,IAAK,SAAUY,KAAOZ,GAAK,MAC3B,KAAK,SAAUY,MAAQlL,EAAEmQ,OAAS,KAAOnQ,EAAEmQ,MAAQ5L,WAAW+F,IAAM,OAErE,GAAGrG,UAAUiH,KAAK,GAAI,MAAOtC,aAAYvF,EAAGrD,EAC5C,IAAI8P,GAAID,WAAW3E,KAAM7H,EACzB,IAAGY,UAAU6L,EAAE,IAAK,MAAOlH,aAAYvF,EAAGrD,EAC1C,IAAGqD,IAAM,KAAMA,EAAI,WAAa,IAAGA,IAAM,MAAOA,EAAI,YAC/C,IAAGA,IAAM,IAAMA,GAAK,KAAM,MAAO,EACtC,OAAOkL,UAASuB,EAAE,GAAIzM,EAAGrD,EAAG8P,EAAE,IAE/BhN,IAAIsN,OAAS7L,SACbzB,KAAIuN,KAAO,QAASC,YAAWhG,IAAKe,KAAO9G,UAAU8G,KAAOf,IAC5DxH,KAAIoN,OAASA,MACbpN,KAAIyN,UAAY,QAASA,aAAc,MAAOhM,WAC9CzB,KAAI0N,WAAa,QAASA,YAAWC,KAAO,IAAI,GAAIxQ,GAAE,EAAGA,GAAG,MAAUA,EAAG,GAAGwQ,IAAIxQ,KAAOoE,UAAWvB,IAAIuN,KAAKI,IAAIxQ,GAAIA,IAEnH8C,UAASD,IAET,IAAI4N,gBACHC,iBAAkB,UAClBC,eAAgB9N,IAAIsN,OAAO,IAC3BS,YAAa,sBACbC,cAAehO,IAAIsN,OAAO,IAC1BW,aAAcjO,IAAIsN,OAAO,IACzBY,YAAalO,IAAIsN,OAAO,IACxBa,cAAenO,IAAIsN,OAAO,IAC1Bc,aAAcpO,IAAIsN,OAAO,IACzBe,SAAY,uCACZC,MAAStO,IAAIsN,OAAO,GACpBiB,SAAYvO,IAAIsN,OAAO,GACvBkB,QAAWxO,IAAIsN,OAAO,IACtBmB,WAAczO,IAAIsN,OAAO,IACzBoB,SAAU,qBACVC,aAAc,0BACdC,SAAU,qBAGX,IAAIC,mBAAoB,IAMxB,IAAIC,KAAM,QAAUC,QACpB,GAAIC,WACJA,SAAQzS,QAAU,QAClB,SAAS0S,OAAMC,MACf,GAAIC,MAAO,CACX,IAAIC,KAAM,GACV,IAAIC,MAAO,CACX,IAAIC,MAAO,CACX,IAAIC,WAAY,CAChB,IAAIC,eAAgB,CACpB,IAAIC,aAAc,CAElB,IAAIC,aAGJ,IAAIC,MAAOT,KAAKU,MAAM,EAAE,IACxBC,WAAUF,KAAM,EAGhB,IAAIG,IAAKC,eAAeJ,KACxBR,MAAOW,GAAG,EACV,QAAOX,MACN,IAAK,GAAGC,IAAM,GAAK,MAAO,KAAK,GAAGA,IAAM,IAAM,MAC9C,SAAS,KAAM,sCAAwCD,KAIxD,GAAGC,MAAQ,IAAK,CAAEO,KAAOT,KAAKU,MAAM,EAAER,IAAMS,WAAUF,KAAM,IAE5D,GAAIK,QAASd,KAAKU,MAAM,EAAER,IAE1Ba,cAAaN,KAAMR,KAGnB,IAAIe,KAAMP,KAAKQ,WAAW,EAAG,IAC7B,IAAGhB,OAAS,GAAKe,MAAQ,EAAG,KAAM,uCAAyCA,GAI3EP,MAAKtP,GAAK,CAGVkP,WAAYI,KAAKQ,WAAW,EAAG,IAG/BR,MAAKtP,GAAK,CAGVsP,MAAKS,IAAI,WAAY,4BAGrBZ,eAAgBG,KAAKQ,WAAW,EAAG,IAGnCd,MAAOM,KAAKQ,WAAW,EAAG,IAG1BV,aAAcE,KAAKQ,WAAW,EAAG,IAGjCb,MAAOK,KAAKQ,WAAW,EAAG,IAG1B,KAAI,GAAI5L,GAAGwD,EAAI,EAAGA,EAAI,MAAOA,EAAG,CAC/BxD,EAAIoL,KAAKQ,WAAW,EAAG,IACvB,IAAG5L,EAAE,EAAG,KACRmL,WAAU3H,GAAKxD,EAIhB,GAAI8L,SAAUC,UAAUpB,KAAME,IAE9BmB,YAAWd,YAAaH,KAAMe,QAASjB,IAAKM,UAG5C,IAAIc,aAAcC,iBAAiBJ,QAASd,UAAWG,UAAWN,IAElEoB,aAAYjB,WAAWmB,KAAO,YAC9B,IAAGrB,KAAO,GAAKG,gBAAkBmB,WAAYH,YAAYhB,eAAekB,KAAO,UAC/EF,aAAYd,UAAU,IAAIgB,KAAO,MACjCF,aAAYd,UAAYA,SACxBc,aAAYpB,IAAMA,GAGlB,IAAIwB,UAAYC,SAAYC,aAAgBC,aAAgBC,cAC5DC,gBAAe1B,UAAWiB,YAAaH,QAASQ,MAAOxB,KAAMuB,MAAOE,UAEpEI,kBAAiBJ,UAAWE,YAAaD,UAAWF,MAEpD,IAAIM,WAAYN,MAAMO,OACtBP,OAAMQ,KAAOF,SAGb,IAAIG,WAAYC,eAAeR,UAAWF,MAAOC,UAAWF,MAAOO,UAEnE,QACCK,KAAMxB,OAAQA,OAAQK,QAASA,SAC/BS,UAAWA,UACXC,UAAWA,UACXC,YAAaA,YACbS,KAAMH,WAKP,QAASvB,gBAAeJ,MAEvBA,KAAKS,IAAIsB,iBAAkB,qBAG3B/B,MAAKS,IAAIuB,aAAc,UAGvB,IAAIxC,MAAOQ,KAAKQ,WAAW,EAAG,IAE9B,QAAQR,KAAKQ,WAAW,EAAE,KAAMhB,MAEjC,QAASc,cAAaN,KAAMR,MAC3B,GAAIiC,OAAQ,CAGZzB,MAAKS,IAAI,OAAQ,eAGjB,QAAQgB,MAAQzB,KAAKQ,WAAW,IAC/B,IAAK,GAAM,GAAGhB,OAAS,EAAG,KAAM,mCAAqC,MACrE,KAAK,IAAM,GAAGA,OAAS,EAAG,KAAM,mCAAqC,MACrE,SAAS,KAAM,sCAAwCiC,MAIxDzB,KAAKS,IAAI,OAAQ,sBAGjBT,MAAKS,IAAI,eAAgB,cAI1B,QAASE,WAAUpB,KAAME,KACxB,GAAIwC,UAAW/Q,KAAKgR,KAAK3C,KAAK7R,OAAO+R,KAAK,CAC1C,IAAIiB,SAAU,GAAI/Q,OAAMsS,SACxB,KAAI,GAAIzU,GAAE,EAAGA,EAAIyU,WAAYzU,EAAGkT,QAAQlT,EAAE,GAAK+R,KAAKU,MAAMzS,EAAEiS,KAAKjS,EAAE,GAAGiS,IACtEiB,SAAQuB,SAAS,GAAK1C,KAAKU,MAAMgC,SAASxC,IAC1C,OAAOiB,SAIR,QAASa,kBAAiBY,GAAIC,IAAKC,GAAInB,OACtC,GAAI1T,GAAI,EAAG8U,EAAI,EAAGC,EAAI,EAAGC,EAAI,EAAGpK,EAAI,EAAGqK,GAAKvB,MAAMxT,MAClD,IAAIgV,KAAM,GAAI/S,OAAM8S,IAAK7N,EAAI,GAAIjF,OAAM8S,GAEvC,MAAMjV,EAAIiV,KAAMjV,EAAG,CAAEkV,IAAIlV,GAAGoH,EAAEpH,GAAGA,CAAG6U,IAAG7U,GAAG0T,MAAM1T,GAEhD,KAAM4K,EAAIxD,EAAElH,SAAU0K,EAAG,CACxB5K,EAAIoH,EAAEwD,EACNkK,GAAIH,GAAG3U,GAAG8U,CAAGC,GAAIJ,GAAG3U,GAAG+U,CAAGC,GAAIL,GAAG3U,GAAGgV,CACpC,IAAGE,IAAIlV,KAAOA,EAAG,CAChB,GAAG8U,KAAO,GAAkBI,IAAIJ,KAAOA,EAAGI,IAAIlV,GAAKkV,IAAIJ,EACvD,IAAGC,KAAO,GAAKG,IAAIH,KAAOA,EAAGG,IAAIlV,GAAKkV,IAAIH,GAE3C,GAAGC,KAAO,EAAgBE,IAAIF,GAAKhV,CACnC,IAAG8U,KAAO,EAAG,CAAEI,IAAIJ,GAAKI,IAAIlV,EAAIoH,GAAE+N,KAAKL,GACvC,GAAGC,KAAO,EAAG,CAAEG,IAAIH,GAAKG,IAAIlV,EAAIoH,GAAE+N,KAAKJ,IAExC,IAAI/U,EAAE,EAAGA,IAAMiV,KAAMjV,EAAG,GAAGkV,IAAIlV,KAAOA,EAAG,CACxC,GAAG+U,KAAO,GAAkBG,IAAIH,KAAOA,EAAGG,IAAIlV,GAAKkV,IAAIH,OAClD,IAAGD,KAAO,GAAKI,IAAIJ,KAAOA,EAAGI,IAAIlV,GAAKkV,IAAIJ,GAGhD,IAAI9U,EAAE,EAAGA,EAAIiV,KAAMjV,EAAG,CACrB,GAAG2U,GAAG3U,GAAGoK,OAAS,EAAiB,QACnCQ,GAAIsK,IAAIlV,EACR,IAAG4K,IAAM,EAAGiK,GAAG7U,GAAK6U,GAAG,GAAK,IAAMA,GAAG7U,OAChC,OAAM4K,IAAM,EAAG,CACnBiK,GAAG7U,GAAK6U,GAAGjK,GAAK,IAAMiK,GAAG7U,EACzB4K,GAAIsK,IAAItK,GAETsK,IAAIlV,GAAK,EAGV6U,GAAG,IAAM,GACT,KAAI7U,EAAE,EAAGA,EAAIiV,KAAMjV,EAAG,CACrB,GAAG2U,GAAG3U,GAAGoK,OAAS,EAAgByK,GAAG7U,IAAM,GAC3C4U,KAAIC,GAAG7U,IAAM2U,GAAG3U,IAKlB,QAASoU,gBAAeR,UAAWF,MAAOC,UAAWF,MAAOO,WAC3D,GAAIoB,aAAc,GAAIjT,OAAMyR,UAAU1T,OACtC,IAAImV,SAAU,GAAIlT,OAAMuR,MAAMxT,QAASF,CACvC,KAAIA,EAAI,EAAGA,EAAI4T,UAAU1T,SAAUF,EAAGoV,YAAYpV,GAAK4T,UAAU5T,GAAGsV,cAAcxT,QAAQa,KAAK,IAAIb,QAAQc,KAAK,IAChH,KAAI5C,EAAI,EAAGA,EAAI0T,MAAMxT,SAAUF,EAAGqV,QAAQrV,GAAK0T,MAAM1T,GAAGsV,cAAcxT,QAAQa,KAAK,IAAIb,QAAQc,KAAK,IACpG,OAAO,SAASuR,WAAUoB,MACzB,GAAIC,EACJ,IAAGD,KAAKpV,WAAW,KAAO,GAAc,CAAEqV,EAAE,IAAMD,MAAOvB,UAAYuB,SAChEC,GAAID,KAAKxT,QAAQ,QAAU,CAChC,IAAI0T,QAASF,KAAKD,cAAcxT,QAAQa,KAAK,IAAIb,QAAQc,KAAK,IAC9D,IAAImF,GAAIyN,IAAM,KAAOJ,YAAYrT,QAAQ0T,QAAUJ,QAAQtT,QAAQ0T,OACnE,IAAG1N,KAAO,EAAG,MAAO,KACpB,OAAOyN,KAAM,KAAO7B,UAAU5L,GAAK0L,MAAMC,MAAM3L,KAMjD,QAASqL,YAAWhI,IAAKsK,IAAKxC,QAASjB,IAAKM,WAC3C,GAAInL,EACJ,IAAGgE,MAAQoI,WAAY,CACtB,GAAGkC,MAAQ,EAAG,KAAM,wCACd,IAAGtK,OAAS,EAAgB,CAClC,GAAIuK,QAASzC,QAAQ9H,KAAM5B,GAAKyI,MAAM,GAAG,CACzC,KAAI,GAAIjS,GAAI,EAAGA,EAAIwJ,IAAKxJ,EAAG,CAC1B,IAAIoH,EAAIwO,cAAcD,OAAO3V,EAAE,MAAQwT,WAAY,KACnDjB,WAAU4C,KAAK/N,GAEhBgM,WAAWwC,cAAcD,OAAO1D,IAAI,GAAGyD,IAAM,EAAGxC,QAASjB,IAAKM,YAKhE,QAASsD,iBAAgB3C,QAAS4C,MAAOvD,UAAWN,IAAK8D,MACxD,GAAIC,IAAK9C,QAAQhT,MACjB,IAAI+V,KAAKC,SACT,KAAIH,KAAMA,KAAO,GAAI5T,OAAM6T,GAC3B,IAAIG,SAAUlE,IAAM,EAAGrH,EAAGmE,EAC1BkH,OACAC,aACA,KAAItL,EAAEkL,MAAOlL,GAAG,GAAI,CACnBmL,KAAKnL,GAAK,IACVqL,KAAIA,IAAI/V,QAAU0K,CAClBsL,WAAUf,KAAKjC,QAAQtI,GACvB,IAAIwL,MAAO7D,UAAU7O,KAAKyD,MAAMyD,EAAE,EAAEqH;AACpClD,GAAOnE,EAAE,EAAKuL,OACd,IAAGlE,IAAM,EAAIlD,GAAI,KAAM,yBAA2BnE,EAAI,MAAMqH,GAC5DrH,GAAIgL,cAAc1C,QAAQkD,MAAOrH,IAElC,OAAQsH,MAAOJ,IAAKnW,KAAKwW,YAAYJ,aAItC,QAAS5C,kBAAiBJ,QAASd,UAAWG,UAAWN,KACxD,GAAI+D,IAAK9C,QAAQhT,OAAQmT,YAAc,GAAIlR,OAAM6T,GACjD,IAAID,MAAO,GAAI5T,OAAM6T,IAAKC,IAAKC,SAC/B,IAAIC,SAAUlE,IAAM,EAAGjS,EAAG4K,EAAG4K,EAAGzG,EAChC,KAAI/O,EAAE,EAAGA,EAAIgW,KAAMhW,EAAG,CACrBiW,MACAT,GAAKxV,EAAIoS,SAAY,IAAGoD,GAAKQ,GAAIR,GAAGQ,EACpC,IAAGD,KAAKP,KAAO,KAAM,QACrBU,aACA,KAAItL,EAAE4K,EAAG5K,GAAG,GAAI,CACfmL,KAAKnL,GAAK,IACVqL,KAAIA,IAAI/V,QAAU0K,CAClBsL,WAAUf,KAAKjC,QAAQtI,GACvB,IAAIwL,MAAO7D,UAAU7O,KAAKyD,MAAMyD,EAAE,EAAEqH,KACpClD,IAAOnE,EAAE,EAAKuL,OACd,IAAGlE,IAAM,EAAIlD,GAAI,KAAM,yBAA2BnE,EAAI,MAAMqH,GAC5DrH,GAAIgL,cAAc1C,QAAQkD,MAAOrH,IAElCsE,YAAYmC,IAAMa,MAAOJ,IAAKnW,KAAKwW,YAAYJ,aAEhD,MAAO7C,aAIR,QAASS,gBAAe1B,UAAWiB,YAAaH,QAASQ,MAAOxB,KAAMuB,MAAOE,WAC5E,GAAInB,KACJ,IAAI+D,eAAgB,EAAGtB,GAAMvB,MAAMxT,OAAO,EAAE,CAC5C,IAAIyV,QAAStC,YAAYjB,WAAWtS,IACpC,IAAIE,GAAI,EAAGwW,QAAU,EAAGjD,KAAMxT,EAAG0W,MAAOC,KACxC,MAAM1W,EAAI2V,OAAOzV,OAAQF,GAAI,IAAK,CACjCwS,KAAOmD,OAAOlD,MAAMzS,EAAGA,EAAE,IACzB0S,WAAUF,KAAM,GAChBgE,SAAUhE,KAAKQ,WAAW,EAC1B,IAAGwD,UAAY,EAAG,QAClBjD,MAAOoD,UAAUnE,KAAK,EAAEgE,QAAQvB,GAChCvB,OAAMyB,KAAK5B,KACXxT,IACCwT,KAAOA,KACPnJ,KAAOoI,KAAKQ,WAAW,GACvB4D,MAAOpE,KAAKQ,WAAW,GACvB8B,EAAOtC,KAAKQ,WAAW,EAAG,KAC1B+B,EAAOvC,KAAKQ,WAAW,EAAG,KAC1BgC,EAAOxC,KAAKQ,WAAW,EAAG,KAC1B6D,MAAOrE,KAAKQ,WAAW,IACvB8D,MAAOtE,KAAKQ,WAAW,EAAG,KAE3ByD,OAAQjE,KAAKQ,WAAW,GAAKR,KAAKQ,WAAW,GAAKR,KAAKQ,WAAW,GAAKR,KAAKQ,WAAW,EACvF,IAAGyD,QAAU,EAAG,CACf1W,EAAE0W,MAAQA,KAAO1W,GAAEgX,GAAKC,UAAUxE,KAAMA,KAAKtP,EAAE,GAEhDwT,MAAQlE,KAAKQ,WAAW,GAAKR,KAAKQ,WAAW,GAAKR,KAAKQ,WAAW,GAAKR,KAAKQ,WAAW,EACvF,IAAG0D,QAAU,EAAG,CACf3W,EAAE2W,MAAQA,KAAO3W,GAAEkX,GAAKD,UAAUxE,KAAMA,KAAKtP,EAAE,GAEhDnD,EAAE+V,MAAQtD,KAAKQ,WAAW,EAAG,IAC7BjT,GAAEmX,KAAO1E,KAAKQ,WAAW,EAAG,IAC5B,IAAGjT,EAAEqK,OAAS,EAAG,CAChBmM,cAAgBxW,EAAE+V,KAClB,IAAG5D,KAAO,GAAKqE,gBAAkB/C,WAAYH,YAAYkD,eAAehD,KAAO,kBAEzE,IAAGxT,EAAEmX,MAAQ,KAAkB,CACrCnX,EAAEoX,QAAU,KACZ,IAAG9D,YAAYtT,EAAE+V,SAAW1R,UAAWiP,YAAYtT,EAAE+V,OAASD,gBAAgB3C,QAASnT,EAAE+V,MAAOzC,YAAYd,UAAWc,YAAYpB,IACnIoB,aAAYtT,EAAE+V,OAAOvC,KAAOxT,EAAEwT,IAC9BxT,GAAEqX,QAAU/D,YAAYtT,EAAE+V,OAAOhW,KAAK2S,MAAM,EAAE1S,EAAEmX,KAChDxE,WAAU3S,EAAEqX,QAAS,OACf,CACNrX,EAAEoX,QAAU,SACZ,IAAGZ,gBAAkB/C,YAAczT,EAAE+V,QAAUtC,WAAY,CAC1DzT,EAAEqX,QAAU/D,YAAYkD,eAAezW,KAAK2S,MAAM1S,EAAE+V,MAAMuB,KAAKtX,EAAE+V,MAAMuB,KAAKtX,EAAEmX,KAC9ExE,WAAU3S,EAAEqX,QAAS,IAGvB3D,MAAMF,MAAQxT,CACd4T,WAAUwB,KAAKpV,IAIjB,QAASiX,WAAUxE,KAAM8E,QACxB,MAAO,IAAIzN,OAAU0N,eAAe/E,KAAK8E,OAAO,GAAG,IAAK5T,KAAKI,IAAI,EAAE,IAAIyT,eAAe/E,KAAK8E,QAAQ,IAAQ,aAAa,KAGzH,GAAIE,GACJ,SAASC,cAAaC,SAAUC,SAC/B,GAAGH,KAAOpT,UAAWoT,GAAKhY,QAAQ,KAClC,OAAOsS,OAAM0F,GAAGC,aAAaC,UAAWC,SAGzC,QAASC,UAASpF,KAAMmF,SACvB,OAAOA,UAAYvT,WAAauT,QAAQvN,OAAShG,UAAYuT,QAAQvN,KAAO,UAC3E,IAAK,OAAQ,MAAOqN,cAAajF,KAAMmF,QACvC,KAAK,SAAU,MAAO7F,OAAM1P,IAAItB,OAAOH,OAAO6R,OAAQmF,QACtD,KAAK,SAAU,MAAO7F,OAAM1P,IAAIoQ,MAAOmF,SAExC,MAAO7F,OAAMU,MAId,GAAI6E,MAAO,EAGX,IAAI7D,aAAc,CAElB,IAAIe,kBAAmB,kBACvB,IAAIC,cAAe,kCACnB,IAAIqD,SAEHC,YAAa,EACbC,SAAU,EACVC,SAAU,EACVxE,WAAYA,WACZyE,UAAW,EAEX1D,iBAAkBA,iBAClB2D,qBAAsB,OACtBC,WAAY,EACZC,UAAW,EACX5D,aAAcA,aAEd6D,YAAa,UAAU,UAAU,SAAS,YAAY,WAAW,QAGlExG,SAAQyG,KAAOV,QACf/F,SAAQC,MAAQA,KAChBD,SAAQnR,OACP6X,UAAWA,UACXC,WAAYA,WACZ9F,UAAWA,UACXnQ,QAASA,QACTsV,OAAQA,OAGT,OAAOhG,WAGP,UAAUrS,WAAY,mBAAsBD,UAAW,mBAAsBmS,qBAAsB,YAAa,CAAEnS,OAAOsS,QAAUF,IACnI,QAAS8G,OAAMlY,GAAK,MAAOA,KAAM6D,WAAa7D,IAAM,KAEpD,QAASmY,MAAK3Y,GAAK,MAAO4Y,QAAOD,KAAK3Y,GAEtC,QAAS6Y,WAAUC,IAAKC,KACvB,GAAI/Y,MAAQgZ,EAAIL,KAAKG,IACrB,KAAI,GAAI7Y,GAAI,EAAGA,IAAM+Y,EAAE7Y,SAAUF,EAAGD,EAAE8Y,IAAIE,EAAE/Y,IAAI8Y,MAAQC,EAAE/Y,EAC1D,OAAOD,GAGR,QAASiZ,OAAMH,KACd,GAAI9Y,MAAQgZ,EAAIL,KAAKG,IACrB,KAAI,GAAI7Y,GAAI,EAAGA,IAAM+Y,EAAE7Y,SAAUF,EAAGD,EAAE8Y,IAAIE,EAAE/Y,KAAO+Y,EAAE/Y,EACrD,OAAOD,GAGR,QAASkZ,WAAUJ,KAClB,GAAI9Y,MAAQgZ,EAAIL,KAAKG,IACrB,KAAI,GAAI7Y,GAAI,EAAGA,IAAM+Y,EAAE7Y,SAAUF,EAAGD,EAAE8Y,IAAIE,EAAE/Y,KAAOoM,SAAS2M,EAAE/Y,GAAG,GACjE,OAAOD,GAGR,QAASmZ,WAAUL,KAClB,GAAI9Y,MAAQgZ,EAAIL,KAAKG,IACrB,KAAI,GAAI7Y,GAAI,EAAGA,IAAM+Y,EAAE7Y,SAAUF,EAAG,CACnC,GAAGD,EAAE8Y,IAAIE,EAAE/Y,MAAQ,KAAMD,EAAE8Y,IAAIE,EAAE/Y,OACjCD,GAAE8Y,IAAIE,EAAE/Y,KAAKmV,KAAK4D,EAAE/Y,IAErB,MAAOD,GAIR,QAASoZ,SAAQ/V,EAAGwG,UACnB,GAAGA,SAAUxG,GAAG,IAChB,IAAIgW,OAAQvP,KAAKiI,MAAM1O,EACvB,QAAQgW,MAAQ,aAAkB,GAAK,GAAK,GAAK,KAGlD,QAASC,QAAOC,KACf,GAAIvZ,GAAI,EACR,KAAI,GAAIC,GAAI,EAAGA,GAAKsZ,IAAIpZ,SAAUF,EAAGD,GAAKS,OAAOC,aAAa6Y,IAAItZ,GAClE,OAAOD,GAGR,QAASwZ,SAAQzZ,MAChB,IAAIA,KAAM,MAAO,KACjB,IAAGA,KAAKyT,KAAK3S,QAAQ,KAAO,OAAQ,CACnC,GAAGd,KAAKA,KAAM,MAAOD,YAAWC,KAAKA,KACrC,IAAGA,KAAK0Z,cAAgBxX,QAAS,MAAOlC,MAAK0Z,cAC7C,IAAG1Z,KAAK2Z,OAAS3Z,KAAK2Z,MAAMC,WAAY,MAAOvX,OAAMwX,UAAUlH,MAAMmH,KAAK9Z,KAAK2Z,MAAMC,kBAC/E,CACN,GAAG5Z,KAAKA,KAAM,MAAOA,MAAKyT,KAAK3S,QAAQ,KAAO,OAASR,UAAUN,KAAKA,MAAQD,WAAWC,KAAKA,KAC9F,IAAGA,KAAK0Z,cAAgBxX,QAAS,MAAO5B,WAAUN,KAAK0Z,eAAeK,SAAS,UAC/E,IAAG/Z,KAAKga,SAAU,MAAO1Z,WAAUN,KAAKga,WACxC,IAAGha,KAAK2Z,OAAS3Z,KAAK2Z,MAAMC,WAAY,MAAOtZ,WAAUiZ,OAAOlX,MAAMwX,UAAUlH,MAAMmH,KAAK9Z,KAAK2Z,MAAMC,aAAa,KAEpH,MAAO,MAGR,QAASK,gBAAeC,IAAKjI,MAC5B,GAAIlC,GAAIkC,IAAM,IAAGiI,IAAIvG,MAAM5D,GAAI,MAAOmK,KAAIvG,MAAM5D,EAEhD,IAAIoK,kBACJ,KAAK,GAAInB,OAAOkB,KAAIvG,MAAO,CAC1BwG,eAAenB,IAAInK,eAAiBqL,IAAIvG,MAAMqF,KAG/CjJ,EAAIkC,KAAKpD,aAAe,IAAGsL,eAAepK,GAAI,MAAOoK,gBAAepK,EACpEA,GAAIA,EAAE/N,QAAQ,MAAM,KAAO,IAAGmY,eAAepK,GAAI,MAAOoK,gBAAepK,EACvE,OAAO,MAGR,QAASqK,YAAWF,IAAKjI,MACxB,GAAIhS,GAAIga,eAAeC,IAAKjI,KAC5B,IAAGhS,GAAK,KAAM,KAAM,IAAI6I,OAAM,oBAAsBmJ,KAAO,UAC3D,OAAOhS,GAGR,QAASoa,YAAWH,IAAKjI,KAAMqI,MAC9B,IAAIA,KAAM,MAAOb,SAAQW,WAAWF,IAAKjI,MACzC,KAAIA,KAAM,MAAO,KACjB,KAAM,MAAOoI,YAAWH,IAAKjI,MAAS,MAAMsI,GAAK,MAAO,OAGzD,GAAIC,KAAKC,KACT,UAAUC,SAAU,YAAaD,MAAQC,KACzC,UAAW3I,WAAY,YAAa,CACnC,SAAWtS,UAAW,aAAeA,OAAOsS,QAAS,CACpD,GAAG7P,eAAkBuY,SAAU,YAAaA,MAAQ/a,QAAQ,KAAK,MACjE,UAAU+a,SAAU,YAAaA,MAAQ/a,QAAQ,OAAO,OAAOgb,KAC/DF,KAAM9a,QAAQ,IAAI,MAGpB,GAAIib,WAAU,iDACd,IAAIC,UAAS,UACb,IAAIC,SAAQ,QAASC,SAAW,YAChC,SAASC,aAAYC,IAAKC,WACzB,GAAIC,KACJ,IAAIC,IAAK,EAAGhY,EAAI,CAChB,MAAMgY,KAAOH,IAAI5a,SAAU+a,GAAI,IAAIhY,EAAI6X,IAAI3a,WAAW8a,OAAS,IAAMhY,IAAM,IAAMA,IAAM,GAAI,KAC3F,KAAI8X,UAAWC,EAAE,GAAKF,IAAIla,OAAO,EAAGqa,GACpC,IAAGA,KAAOH,IAAI5a,OAAQ,MAAO8a,EAC7B,IAAIxR,GAAIsR,IAAIxP,MAAMmP,WAAY7P,EAAE,EAAG7C,EAAE,GAAI3E,EAAE,GAAIpD,EAAE,EAAGoH,EAAE,GAAI2F,GAAG,EAC7D,IAAGvD,EAAG,IAAIxJ,EAAI,EAAGA,GAAKwJ,EAAEtJ,SAAUF,EAAG,CACpC+M,GAAKvD,EAAExJ,EACP,KAAIiD,EAAE,EAAGA,GAAK8J,GAAG7M,SAAU+C,EAAG,GAAG8J,GAAG5M,WAAW8C,KAAO,GAAI,KAC1DmE,GAAI2F,GAAGnM,OAAO,EAAEqC,EAAIG,GAAI2J,GAAGmO,UAAUjY,EAAE,EAAG8J,GAAG7M,OAAO,EACpD,KAAI0K,EAAE,EAAEA,GAAGxD,EAAElH,SAAS0K,EAAG,GAAGxD,EAAEjH,WAAWyK,KAAO,GAAI,KACpD,IAAGA,IAAIxD,EAAElH,OAAQ8a,EAAE5T,GAAKhE,MACnB4X,IAAGpQ,IAAI,GAAKxD,EAAExG,OAAO,EAAE,KAAK,QAAQ,QAAQ,IAAIwG,EAAExG,OAAOgK,EAAE,IAAMxH,EAEvE,MAAO4X,GAER,QAASG,UAAS5a,GAAK,MAAOA,GAAEuB,QAAQ8Y,SAAU,OAElD,GAAIQ,YACHC,SAAU,IACVC,SAAU,IACVC,OAAQ,IACRC,OAAQ,IACRC,QAAS,IAEV,IAAIC,WAAY1C,MAAMoC,UACtB,IAAIO,SAAU,SAASrZ,MAAM,GAG7B,IAAIsZ,aAAc,WACjB,GAAIC,UAAW,YAAaC,UAAY,mBACxC,OAAO,SAASF,aAAYG,MAC3B,GAAI1Z,GAAI0Z,KAAO,EACf,OAAO1Z,GAAEP,QAAQ+Z,SAAU,SAASnQ,IAAM,MAAO0P,WAAU1P,MAAQ5J,QAAQga,UAAU,SAAStS,EAAEvG,GAAI,MAAOzC,QAAOC,aAAa2L,SAASnJ,EAAE,UAI5I,IAAI+Y,UAAS,WAAYC,SAAW,+BACpC,SAASC,WAAUH,MAClB,GAAI1Z,GAAI0Z,KAAO,EACf,OAAO1Z,GAAEP,QAAQka,SAAU,SAAS7X,GAAK,MAAOuX,WAAUvX,KAAOrC,QAAQma,SAAS,SAAS5Z,GAAK,MAAO,MAAQ,MAAMA,EAAElC,WAAW,GAAG0Z,SAAS,KAAKjZ,QAAQ,GAAK,MAIjK,GAAIub,aAAc,WACjB,GAAIC,UAAW,WACf,SAASC,SAAQ3Q,GAAGC,IAAM,MAAOnL,QAAOC,aAAa2L,SAAST,GAAG,KACjE,MAAO,SAASwQ,aAAYrP,KAAO,MAAOA,KAAIhL,QAAQsa,SAASC,YAGhE,SAASC,cAAaC,MAAOzB,KAC5B,OAAOyB,OACN,IAAK,IAAK,IAAK,OAAQ,IAAK,OAAQ,MAAO,KAE3C,SAAS,MAAO,QAIlB,GAAIC,UAAW,QAASC,WAAUC,MACjC,GAAIrT,KAAM,GAAIrJ,EAAI,EAAGiD,EAAI,EAAGI,EAAI,EAAGgX,EAAI,EAAGxK,EAAI,EAAG9H,EAAI,CACrD,OAAO/H,EAAI0c,KAAKxc,OAAQ,CACvB+C,EAAIyZ,KAAKvc,WAAWH,IACpB,IAAIiD,EAAI,IAAK,CAAEoG,KAAO7I,OAAOC,aAAawC,EAAI,UAC9CI,EAAIqZ,KAAKvc,WAAWH,IACpB,IAAIiD,EAAE,KAAOA,EAAE,IAAK,CAAEoG,KAAO7I,OAAOC,cAAewC,EAAI,KAAO,EAAMI,EAAI,GAAM,UAC9EgX,EAAIqC,KAAKvc,WAAWH,IACpB,IAAIiD,EAAI,IAAK,CAAEoG,KAAO7I,OAAOC,cAAewC,EAAI,KAAO,IAAQI,EAAI,KAAO,EAAMgX,EAAI,GAAM,UAC1FxK,EAAI6M,KAAKvc,WAAWH,IACpB+H,KAAO9E,EAAI,IAAM,IAAQI,EAAI,KAAO,IAAQgX,EAAI,KAAO,EAAMxK,EAAI,IAAK,KACtExG,MAAO7I,OAAOC,aAAa,OAAWsH,IAAI,GAAI,MAC9CsB,MAAO7I,OAAOC,aAAa,OAAUsH,EAAE,OAExC,MAAOsB,KAIR,IAAGrH,QAAS,CACX,GAAI2a,WAAY,QAASA,WAAU7c,MAClC,GAAIuJ,KAAM,GAAIpH,QAAO,EAAEnC,KAAKI,QAAS6H,EAAG/H,EAAG4K,EAAI,EAAG4K,EAAI,EAAGoH,GAAG,EAAG3Z,CAC/D,KAAIjD,EAAI,EAAGA,EAAIF,KAAKI,OAAQF,GAAG4K,EAAG,CACjCA,EAAI,CACJ,KAAI3H,EAAEnD,KAAKK,WAAWH,IAAM,IAAK+H,EAAI9E,MAChC,IAAGA,EAAI,IAAK,CAAE8E,GAAK9E,EAAE,IAAI,IAAInD,KAAKK,WAAWH,EAAE,GAAG,GAAK4K,GAAE,MACzD,IAAG3H,EAAI,IAAK,CAAE8E,GAAG9E,EAAE,IAAI,MAAMnD,KAAKK,WAAWH,EAAE,GAAG,IAAI,IAAIF,KAAKK,WAAWH,EAAE,GAAG,GAAK4K,GAAE,MACtF,CAAEA,EAAI,CACV7C,IAAK9E,EAAI,GAAG,QAAQnD,KAAKK,WAAWH,EAAE,GAAG,IAAI,MAAMF,KAAKK,WAAWH,EAAE,GAAG,IAAI,IAAIF,KAAKK,WAAWH,EAAE,GAAG,GACrG+H,IAAK,KAAO6U,IAAK,OAAW7U,IAAI,GAAI,KAAOA,GAAI,OAAUA,EAAE,MAE5D,GAAG6U,KAAO,EAAG,CAAEvT,IAAImM,KAAOoH,GAAG,GAAKvT,KAAImM,KAAOoH,KAAK,CAAGA,IAAK,EAC1DvT,IAAImM,KAAOzN,EAAE,GAAKsB,KAAImM,KAAOzN,IAAI,EAElCsB,IAAInJ,OAASsV,CACb,OAAOnM,KAAIwQ,SAAS,QAErB,IAAIgD,QAAS,oBACb,IAAGL,SAASK,SAAWF,UAAUE,QAASL,SAAWG,SACrD,IAAIG,WAAY,QAASA,WAAUhd,MAAQ,MAAOmC,QAAOnC,KAAM,UAAU+Z,SAAS,QAClF,IAAG2C,SAASK,SAAWC,UAAUD,QAASL,SAAWM,UAItD,GAAIC,UAAW,WACd,GAAIC,WACJ,OAAO,SAASD,UAASlN,EAAEoN,GAC1B,GAAI3Z,GAAIuM,EAAE,IAAIoN,CACd,IAAGD,QAAQ1Z,KAAOc,UAAW,MAAO4Y,SAAQ1Z,EAC5C,OAAQ0Z,SAAQ1Z,GAAK,GAAI4Z,QAAO,cAAcrN,EAAE,0DAA+DA,EAAE,IAAKoN,GAAG,OAI3H,IAAIE,SAAU,WAAa,GAAIC,YAC9B,OAAO,SAASC,UAASzO,IACxB,GAAGwO,SAASxO,MAAQxK,UAAW,MAAOgZ,UAASxO,GAC/C,OAAQwO,UAASxO,IAAM,GAAIsO,QAAO,OAAStO,GAAK,cAAgBA,GAAK,IAAK,QAE5E,IAAI0O,UAAW,mBAAoBC,SAAW,mBAC9C,SAASC,aAAY1d,MACpB,GAAI2d,GAAI5C,YAAY/a,KAEpB,IAAI4d,SAAU5d,KAAKwL,MAAM6R,QAAQM,EAAEE,cACnC,IAAGD,QAAQxd,QAAUud,EAAEvG,KAAM,KAAM,4BAA8BwG,QAAQxd,OAAS,OAASud,EAAEvG,IAC7F,IAAI0G,OACJF,SAAQG,QAAQ,SAAStd,GACxB,GAAI6C,GAAI7C,EAAEuB,QAAQwb,SAAS,IAAIhS,MAAMiS,SACrCK,KAAIzI,MAAM/R,EAAEA,EAAE,GAAIE,EAAEF,EAAE,MAEvB,OAAOwa,KAGR,GAAIE,SAAU,cACd,SAASC,UAASlO,EAAEoN,GAAI,MAAO,IAAMpN,GAAKoN,EAAE3R,MAAMwS,SAAS,wBAA0B,IAAM,IAAMb,EAAI,KAAOpN,EAAI,IAEhH,QAASmO,YAAWP,GAAK,MAAO/E,MAAK+E,GAAGzc,IAAI,SAASwU,GAAK,MAAO,IAAMA,EAAI,KAAOiI,EAAEjI,GAAK,MAAOyI,KAAK,IACrG,QAASC,WAAUrO,EAAEoN,EAAEQ,GAAK,MAAO,IAAM5N,GAAK4I,MAAMgF,GAAKO,WAAWP,GAAK,KAAOhF,MAAMwE,IAAMA,EAAE3R,MAAMwS,SAAS,wBAA0B,IAAM,IAAMb,EAAI,KAAOpN,EAAI,KAAO,IAEzK,QAASsO,cAAa9a,EAAGC,GAAK,IAAM,MAAOD,GAAE+a,cAActc,QAAQ,QAAQ,IAAO,MAAMuY,GAAK,GAAG/W,EAAG,KAAM+W,IAEzG,QAASgE,UAAShc,GACjB,aAAcA,IACb,IAAK,SAAU,MAAO6b,WAAU,YAAa7b,EAC7C,KAAK,SAAU,MAAO6b,YAAW7b,EAAE,IAAIA,EAAE,QAAQ,QAAS7B,OAAO6B,GACjE,KAAK,UAAW,MAAO6b,WAAU,UAAU7b,EAAE,OAAO,SAErD,GAAGA,YAAawH,MAAM,MAAOqU,WAAU,cAAeC,aAAa9b,GACnE,MAAM,IAAIuG,OAAM,uBAAyBvG,GAG1C,GAAIic,YAAa,6DACjB,IAAIC,QACHC,GAAM,mCACNC,QAAW,4BACXC,SAAY,+BACZC,GAAM,0DACN3S,EAAK,sEACL4S,IAAO,yEACPC,GAAM,uEACNC,IAAO,4CACPC,IAAO,mCAGRR,OAAMS,MACL,4DACA,gDACA,sDACA,mDAGD,SAASC,aAAYhJ,IAAK7K,IAAK8T,KAAMC,GAAIC,IACxC,GAAGF,OAAS9a,UAAW8a,KAAO,IAC9B,KAAIC,GAAIA,GAAK,CACb,KAAIC,IAAMD,KAAO,EAAGC,GAAK,EACzB,IAAI/E,GAAG7Q,EAAG6V,GAAKF,GAAK,EAAIC,GAAK,EAAGE,MAAQ,GAAKD,IAAM,EAAGE,MAAQD,MAAQ,CACtE,IAAIE,OAAQ,EAAGnc,EAAI6b,MAAQ,EAAI,EAAGlf,EAAIkf,KAAQC,GAAK,EAAK,EAAG9c,EAAI4T,IAAI7K,IAAMpL,EAEzEA,IAAKqD,CACLgX,GAAIhY,GAAM,IAAOmd,MAAS,CAAInd,OAASmd,IAAOA,OAAQH,EACtD,MAAOG,KAAO,EAAGnF,EAAIA,EAAI,IAAMpE,IAAI7K,IAAMpL,GAAIA,GAAKqD,EAAGmc,MAAQ,GAC7DhW,EAAI6Q,GAAM,IAAOmF,MAAS,CAAInF,OAASmF,IAAOA,OAAQJ,EACtD,MAAOI,KAAO,EAAGhW,EAAIA,EAAI,IAAMyM,IAAI7K,IAAMpL,GAAIA,GAAKqD,EAAGmc,MAAQ,GAC7D,GAAInF,IAAMiF,KAAM,MAAO9V,GAAIiW,KAAQpd,GAAK,EAAI,GAAKqd,aAC5C,IAAIrF,IAAM,EAAGA,EAAI,EAAIkF,UACrB,CAAE/V,EAAIA,EAAI9F,KAAKI,IAAI,EAAGsb,GAAK/E,GAAIA,EAAIkF,MACxC,OAAQld,GAAK,EAAI,GAAKmH,EAAI9F,KAAKI,IAAI,EAAGuW,EAAI+E,IAG3C,GAAI9I,YAAYqJ,WAChBrJ,YAAaqJ,YAAc,QAASC,WAAUpd,MAAQ,GAAIjC,KAAQ,KAAI,GAAIP,GAAI,EAAGA,EAAIwC,KAAK,GAAGtC,SAAUF,EAAG,CAAEO,EAAE4U,KAAKzS,MAAMnC,EAAGiC,KAAK,GAAGxC,IAAO,MAAOO,GAClJ,IAAIoW,WAAWkJ,UACflJ,WAAYkJ,WAAa,QAASC,UAASC,EAAE1d,EAAEgY,GAAK,GAAI7P,MAAO,KAAI,GAAIxK,GAAEqC,EAAGrC,EAAEqa,EAAGra,GAAG,EAAGwK,GAAG2K,KAAK3U,OAAOC,aAAauf,eAAeD,EAAE/f,IAAM,OAAOwK,IAAGyT,KAAK,IACzJ,IAAIgC,WAAWC,UACfD,WAAYC,WAAa,QAASC,UAASJ,EAAE1d,EAAEa,GAAK,MAAO6c,GAAEtN,MAAMpQ,EAAGA,EAAEa,GAAIlC,IAAI,SAAST,GAAG,OAAQA,EAAE,GAAG,IAAI,IAAMA,EAAEsZ,SAAS,MAAOoE,KAAK,IAC1I,IAAImC,QAAQC,OACZD,QAASC,QAAU,SAASN,EAAE1d,EAAEgY,GAAK,GAAI7P,MAAO,KAAI,GAAIxK,GAAEqC,EAAGrC,EAAEqa,EAAGra,IAAKwK,GAAG2K,KAAK3U,OAAOC,aAAa6f,YAAYP,EAAE/f,IAAM,OAAOwK,IAAGyT,KAAK,IACtI,IAAIsC,SAASC,QACbD,SAAUC,SAAW,QAASC,QAAOV,EAAE/f,GAAK,GAAIC,KAAMsX,eAAewI,EAAE/f,EAAI,OAAOC,KAAM,EAAImgB,OAAOL,EAAG/f,EAAE,EAAEA,EAAE,EAAEC,IAAI,GAAK,GACvH,IAAIygB,UAAUC,SACdD,UAAWC,UAAY,QAASC,SAAQb,EAAE/f,GAAK,GAAIC,KAAM,EAAEsX,eAAewI,EAAE/f,EAAI,OAAOC,KAAM,EAAImgB,OAAOL,EAAG/f,EAAE,EAAEA,EAAE,EAAEC,IAAI,GAAK,GAC5H,IAAI4gB,UAAUC,SACdD,UAAWC,UAAY,SAASf,EAAG3U,KAAO,MAAO6T,aAAYc,EAAG3U,KAEhE,IAAI2V,QAAS,QAASC,UAASC,GAAK,MAAO9e,OAAM+e,QAAQD,GACzD,IAAGjf,QAAS,CACX2U,UAAY,QAASwK,WAAUpB,EAAE1d,EAAEgY,GAAK,IAAIpY,OAAOmf,SAASrB,GAAI,MAAOF,YAAWE,EAAE1d,EAAEgY,EAAI,OAAO0F,GAAElG,SAAS,UAAUxX,EAAEgY,GACxH4F,WAAY,SAASF,EAAE1d,EAAEa,GAAK,MAAOjB,QAAOmf,SAASrB,GAAKA,EAAElG,SAAS,MAAMxX,EAAEA,EAAEa,GAAKgd,WAAWH,EAAE1d,EAAEa,GACnGqd,SAAU,QAASc,SAAQtB,EAAE/f,GAAK,IAAIiC,OAAOmf,SAASrB,GAAI,MAAOS,UAAST,EAAG/f,EAAI,IAAIC,KAAM8f,EAAEuB,aAAathB,EAAI,OAAOC,KAAM,EAAI8f,EAAElG,SAAS,OAAO7Z,EAAE,EAAEA,EAAE,EAAEC,IAAI,GAAK,GAClKygB,UAAW,QAASa,UAASxB,EAAE/f,GAAK,IAAIiC,OAAOmf,SAASrB,GAAI,MAAOY,WAAUZ,EAAG/f,EAAI,IAAIC,KAAM,EAAE8f,EAAEuB,aAAathB,EAAI,OAAO+f,GAAElG,SAAS,UAAU7Z,EAAE,EAAEA,EAAE,EAAEC,IAAI,GAC3JmgB,QAAS,QAASoB,QAAOnf,EAAEgY,GAAK,MAAOoH,MAAK5H,SAAS,OAAOxX,EAAEgY,GAC9D/D,YAAa,SAAS9T,MAAQ,MAAQA,MAAK,GAAGtC,OAAS,GAAK+B,OAAOmf,SAAS5e,KAAK,GAAG,IAAOP,OAAOQ,OAAOD,KAAK,IAAMmd,YAAYnd,MAChID,SAAU,SAASC,MAAQ,MAAOP,QAAOmf,SAAS5e,KAAK,IAAMP,OAAOQ,OAAOD,SAAWC,OAAOC,SAAUF,MACvGqe,UAAW,QAASa,SAAQ3B,EAAE/f,GAAK,GAAGiC,OAAOmf,SAASrB,GAAI,MAAOA,GAAE4B,aAAa3hB,EAAI,OAAO8gB,WAAUf,EAAE/f,GACvG+gB,QAAS,QAASa,UAASX,GAAK,MAAOhf,QAAOmf,SAASH,IAAM9e,MAAM+e,QAAQD,IAI5E,SAAUxhB,WAAY,YAAa,CAClCkX,UAAY,SAASoJ,EAAE1d,EAAEgY,GAAK,MAAO5a,SAAQiB,MAAMC,OAAO,KAAMof,EAAEtN,MAAMpQ,EAAEgY,IAC1E+F,QAAS,SAASL,EAAE1d,EAAEgY,GAAK,MAAO5a,SAAQiB,MAAMC,OAAO,MAAOof,EAAEtN,MAAMpQ,EAAEgY,IACxEkG,SAAU,SAASR,EAAE/f,GAAK,GAAIC,KAAMsX,eAAewI,EAAE/f,EAAI,OAAOC,KAAM,EAAIR,QAAQiB,MAAMC,OAAOtB,iBAAkB0gB,EAAEtN,MAAMzS,EAAE,EAAGA,EAAE,EAAEC,IAAI,IAAM,GAC5IygB,UAAW,SAASX,EAAE/f,GAAK,GAAIC,KAAM,EAAEsX,eAAewI,EAAE/f,EAAI,OAAOC,KAAM,EAAIR,QAAQiB,MAAMC,OAAO,KAAMof,EAAEtN,MAAMzS,EAAE,EAAEA,EAAE,EAAEC,IAAI,IAAM,IAGnI,GAAIqgB,aAAc,SAASP,EAAG3U,KAAO,MAAO2U,GAAE3U,KAC9C,IAAI4U,gBAAiB,SAASD,EAAG3U,KAAO,MAAO2U,GAAE3U,IAAI,IAAI,GAAG,GAAG2U,EAAE3U,KACjE,IAAIyW,eAAgB,SAAS9B,EAAG3U,KAAO,GAAI7B,GAAIwW,EAAE3U,IAAI,IAAI,GAAG,GAAG2U,EAAE3U,IAAM,OAAQ7B,GAAI,MAAUA,GAAK,MAASA,EAAI,IAAM,EACrH,IAAIgO,gBAAiB,SAASwI,EAAG3U,KAAO,MAAO2U,GAAE3U,IAAI,IAAI,GAAG,KAAK2U,EAAE3U,IAAI,IAAI,KAAK2U,EAAE3U,IAAI,IAAI,GAAG2U,EAAE3U,KAC/F,IAAIwK,eAAgB,SAASmK,EAAG3U,KAAO,MAAQ2U,GAAE3U,IAAI,IAAI,GAAK2U,EAAE3U,IAAI,IAAI,GAAK2U,EAAE3U,IAAI,IAAI,EAAG2U,EAAE3U,KAE5F,IAAI0W,cAAe,SAASzf,GAAK,MAAOA,GAAEiJ,MAAM,OAAOtK,IAAI,SAAST,GAAK,MAAO6L,UAAS7L,EAAE,MAC3F,IAAIwhB,mBAAqB9f,UAAW,YAAc,SAASI,GAAK,MAAOJ,QAAOmf,SAAS/e,GAAK,GAAIJ,QAAOI,EAAG,OAASyf,aAAazf,IAAQyf,YAExI,SAASvJ,WAAUrB,KAAM5T,GACxB,GAAIvD,GAAE,GAAIiiB,GAAIC,GAAI3U,MAAOvF,EAAGiH,GAAIhP,EAAGkiB,GACnC,QAAO5e,GACN,IAAK,OACJ4e,IAAMT,KAAKve,CACX,IAAGlB,SAAWC,OAAOmf,SAASK,MAAO1hB,EAAI0hB,KAAKhP,MAAMgP,KAAKve,EAAGue,KAAKve,EAAE,EAAEgU,MAAM2C,SAAS,eAC/E,KAAI7Z,EAAI,EAAGA,GAAKkX,OAAQlX,EAAG,CAAED,GAAGS,OAAOC,aAAauf,eAAeyB,KAAMS,KAAOA,MAAK,EAC1FhL,MAAQ,CACR,MAED,KAAK,OAAQnX,EAAIqgB,OAAOqB,KAAMA,KAAKve,EAAGue,KAAKve,EAAIgU,KAAO,MACtD,KAAK,UAAWA,MAAQ,CAAGnX,GAAI4W,UAAU8K,KAAMA,KAAKve,EAAGue,KAAKve,EAAIgU,KAAO,MAGvE,KAAK,QAASnX,EAAIwgB,QAAQkB,KAAMA,KAAKve,EAAIgU,MAAO,EAAInX,EAAEG,MAAQ,MAE9D,KAAK,SAAUH,EAAI2gB,SAASe,KAAMA,KAAKve,EAAIgU,MAAO,EAAInX,EAAEG,MAAQ,IAAGH,EAAEA,EAAEG,OAAO,IAAM,KAAUgX,MAAQ,CAAG,MAEzG,KAAK,OAAQA,KAAO,CAAGnX,GAAI,EAC1B,QAAOgI,EAAEuY,YAAYmB,KAAMA,KAAKve,EAAIgU,WAAW,EAAG5J,GAAG6H,KAAK9U,SAAS0H,GACnEhI,GAAIuN,GAAG2Q,KAAK,GAAK,MAClB,KAAK,OAAQ/G,KAAO,CAAGnX,GAAI,EAC1B,QAAOgI,EAAEiY,eAAeyB,KAAKA,KAAKve,EAAGgU,SAAS,EAAE,CAAC5J,GAAG6H,KAAK9U,SAAS0H,GAAImP,OAAM,EAC5EA,MAAM,CAAGnX,GAAIuN,GAAG2Q,KAAK,GAAK,MAG3B,KAAK,YAAale,EAAI,EAAImiB,KAAMT,KAAKve,CACpC,KAAIlD,EAAI,EAAGA,GAAKkX,OAAQlX,EAAG,CAC1B,GAAGyhB,KAAKU,MAAQV,KAAKU,KAAKpgB,QAAQmgB,QAAU,EAAG,CAC9Cna,EAAIuY,YAAYmB,KAAMS,IACtBT,MAAKve,EAAIgf,IAAM,CACflT,IAAKuJ,UAAUqB,KAAK6H,KAAMvK,KAAKlX,EAAG+H,EAAI,YAAc,YACpD,OAAOuF,IAAG2Q,KAAK,IAAMjP,GAEtB1B,GAAG6H,KAAK9U,SAAS2f,eAAeyB,KAAMS,MACtCA,MAAK,EACJniB,EAAIuN,GAAG2Q,KAAK,GAAK/G,OAAQ,CAAG,MAE/B,KAAK,YAAanX,EAAI,EAAImiB,KAAMT,KAAKve,CACpC,KAAIlD,EAAI,EAAGA,GAAKkX,OAAQlX,EAAG,CAC1B,GAAGyhB,KAAKU,MAAQV,KAAKU,KAAKpgB,QAAQmgB,QAAU,EAAG,CAC9Cna,EAAIuY,YAAYmB,KAAMS,IACtBT,MAAKve,EAAIgf,IAAM,CACflT,IAAKuJ,UAAUqB,KAAK6H,KAAMvK,KAAKlX,EAAG+H,EAAI,YAAc,YACpD,OAAOuF,IAAG2Q,KAAK,IAAMjP,GAEtB1B,GAAG6H,KAAK9U,SAASigB,YAAYmB,KAAMS,MACnCA,MAAK,EACJniB,EAAIuN,GAAG2Q,KAAK,GAAK,MAEpB,SACD,OAAO/G,MACN,IAAK,GAAG8K,GAAK1B,YAAYmB,KAAMA,KAAKve,EAAIue,MAAKve,GAAK,OAAO8e,GACzD,KAAK,GAAGA,IAAM1e,IAAM,IAAMue,cAAgB7B,gBAAgByB,KAAMA,KAAKve,EAAIue,MAAKve,GAAK,CAAG,OAAO8e,GAC7F,KAAK,GACJ,GAAG1e,IAAM,MAAQme,KAAKA,KAAKve,EAAE,GAAK,OAAQ,EAAG,CAAE8e,GAAKpM,cAAc6L,KAAMA,KAAKve,EAAIue,MAAKve,GAAK,CAAG,OAAO8e,QAChG,CAAEC,GAAK1K,eAAekK,KAAMA,KAAKve,EAAIue,MAAKve,GAAK,CAAG,OAAO+e,IAAM,KACrE,KAAK,GAAG,GAAG3e,IAAM,IAAK,CAAE2e,GAAKpB,SAASY,KAAMA,KAAKve,EAAIue,MAAKve,GAAK,CAAG,OAAO+e,IAEzE,IAAK,IAAIliB,EAAIkgB,UAAUwB,KAAMA,KAAKve,EAAGgU,KAAO,QAE7CuK,KAAKve,GAAGgU,IAAM,OAAOnX,GAGtB,QAASqiB,YAAW9e,EAAGgH,IAAKuF,GAC3B,GAAIqH,MAAMlX,CACV,IAAG6P,IAAM,OAAQ,CAChB,IAAI7P,EAAI,EAAGA,GAAKsK,IAAIpK,SAAUF,EAAGyhB,KAAKY,cAAc/X,IAAInK,WAAWH,GAAIyhB,KAAKve,EAAI,EAAIlD,EACpFkX,MAAO,EAAI5M,IAAIpK,WACT,QAAOoD,GACb,IAAM,GAAG4T,KAAO,CAAGuK,MAAKA,KAAKve,GAAKoH,IAAI,GAAK,MAC3C,KAAM,GAAG4M,KAAO,CAAGuK,MAAKA,KAAKve,EAAE,GAAKoH,IAAM,GAAKA,QAAS,CAAGmX,MAAKA,KAAKve,EAAE,GAAKoH,IAAI,GAAKA,QAAS,CAAGmX,MAAKA,KAAKve,GAAKoH,IAAI,GAAK,MACzH,KAAM,GAAG4M,KAAO,CAAGuK,MAAKa,cAAchY,IAAKmX,KAAKve,EAAI,MACpD,KAAM,GAAGgU,KAAO,CAAG,IAAGrH,IAAM,IAAK,CAAE4R,KAAKc,cAAcjY,IAAKmX,KAAKve,EAAI,OAEpE,IAAK,IAAI,KACT,MAAM,EAAGgU,KAAO,CAAGuK,MAAKe,aAAalY,IAAKmX,KAAKve,EAAI,OAEpDue,KAAKve,GAAKgU,IAAM,OAAOuK,MAGxB,QAASjJ,YAAWiK,OAAQC,KAC3B,GAAIlZ,GAAIyW,UAAUwB,KAAKA,KAAKve,EAAEuf,OAAOviB,QAAQ,EAC7C,IAAGsJ,IAAMiZ,OAAQ,KAAMC,KAAM,YAAcD,OAAS,QAAUjZ,CAC9DiY,MAAKve,GAAKuf,OAAOviB,QAAQ,EAG1B,QAASwS,WAAUF,KAAMmQ,KACxBnQ,KAAKtP,EAAIyf,GACTnQ,MAAKQ,WAAauF,SAClB/F,MAAKS,IAAMuF,UACXhG,MAAKoQ,YAAcR,WAGpB,QAASS,WAAUrQ,KAAMtS,QAAUsS,KAAKtP,GAAKhD,OAE7C,QAAS4iB,WAAUtQ,KAAMtS,QAAUsS,KAAKtP,GAAKhD,OAE7C,QAAS6iB,SAAQC,IAChB,GAAIjjB,GAAImC,YAAY8gB,GACpBtQ,WAAU3S,EAAG,EACb,OAAOA,GAIR,QAASkjB,cAAanjB,KAAMojB,GAAI7e,MAC/B,GAAI8e,SAASC,QAASljB,MACtBwS,WAAU5S,KAAMA,KAAKoD,GAAK,EAC1B,OAAMpD,KAAKoD,EAAIpD,KAAKI,OAAQ,CAC3B,GAAImjB,IAAKvjB,KAAKkT,WAAW,EACzB,IAAGqQ,GAAK,IAAMA,IAAMA,GAAK,OAAUvjB,KAAKkT,WAAW,GAAK,MAAO,EAC/D,IAAI+B,GAAIuO,eAAeD,KAAOC,eAAe,MAC7CH,SAAUrjB,KAAKkT,WAAW,EAC1B9S,QAASijB,QAAU,GACnB,KAAIC,QAAU,EAAGA,QAAS,GAAMD,QAAU,MAASC,QAASljB,UAAYijB,QAAUrjB,KAAKkT,WAAW,IAAM,MAAQ,EAAEoQ,OAClH,IAAI/f,GAAI0R,EAAElF,EAAE/P,KAAMI,OAAQmE,KAC1B,IAAG6e,GAAG7f,EAAG0R,EAAGsO,IAAK,QAKnB,QAASE,aACR,GAAI/gB,SAAWghB,MAAQ,IACvB,IAAIC,QAAS,QAASC,WAAUV,IAC/B,GAAIjjB,GAAIgjB,QAAQC,GAChBtQ,WAAU3S,EAAG,EACb,OAAOA,GAGR,IAAI4jB,QAASF,OAAOD,MAEpB,IAAII,QAAS,QAASC,aACrBF,OAAOzjB,OAASyjB,OAAOzgB,CACvB,IAAGygB,OAAOzjB,OAAS,EAAGsC,KAAK2S,KAAKwO,OAChCA,QAAS,KAGV,IAAIG,MAAO,QAASC,SAAQf,IAC3B,GAAGA,GAAKW,OAAOzjB,OAASyjB,OAAOzgB,EAAG,MAAOygB,OACzCC,SACA,OAAQD,QAASF,OAAO/f,KAAKiK,IAAIqV,GAAG,EAAGQ,QAGxC,IAAIQ,KAAM,QAASC,UAClBL,QACA,OAAOtN,aAAY9T,OAGpB,IAAI2S,MAAO,QAAS+O,SAAQjO,KAAO2N,QAAUD,QAAS1N,GAAK6N,MAAKN,OAEhE,QAASM,KAAKA,KAAM3O,KAAKA,KAAM6O,IAAIA,IAAKG,MAAM3hB,MAG/C,QAAS4hB,cAAaC,GAAIja,KAAMka,QAASpkB,QACxC,GAAIoD,GAAIihB,SAASna,MAAOlH,CACxB,KAAIhD,OAAQA,OAASojB,eAAehgB,GAAGkhB,IAAMF,aAAapkB,QAAU,CACpEgD,GAAI,GAAKI,GAAK,IAAO,EAAI,GAAK,EAAIpD,MAClC,IAAGA,QAAU,MAAQgD,CAAG,IAAGhD,QAAU,QAAUgD,CAAG,IAAGhD,QAAU,UAAYgD,CAC3E,IAAInD,GAAIskB,GAAGP,KAAK5gB,EAChB,IAAGI,GAAK,IAAMvD,EAAE6iB,YAAY,EAAGtf,OAC1B,CACJvD,EAAE6iB,YAAY,GAAItf,EAAI,KAAQ,IAC9BvD,GAAE6iB,YAAY,EAAItf,GAAK,GAExB,IAAI,GAAItD,GAAI,EAAGA,GAAK,IAAKA,EAAG,CAC3B,GAAGE,QAAU,IAAM,CAAEH,EAAE6iB,YAAY,GAAI1iB,OAAS,KAAM,IAAOA,UAAW,MACnE,CAAEH,EAAE6iB,YAAY,EAAG1iB,OAAS,QAElC,GAAGA,OAAS,GAAK6gB,OAAOuD,SAAUD,GAAGlP,KAAKmP,SAG3C,QAASG,gBAAeC,KAAMC,KAC7B,GAAGA,IAAItiB,EAAG,CACT,GAAGqiB,KAAKE,KAAMF,KAAKzhB,GAAK0hB,IAAItiB,EAAEY,CAC9B,IAAGyhB,KAAKG,KAAMH,KAAK1Y,GAAK2Y,IAAItiB,EAAE2J,MACxB,CACN0Y,KAAKzhB,GAAK0hB,IAAI1hB,CACdyhB,MAAK1Y,GAAK2Y,IAAI3Y,EAEf0Y,KAAKE,KAAOF,KAAKG,KAAO,CACxB,OAAMH,KAAKzhB,GAAK,IAAOyhB,KAAKzhB,GAAK,GACjC,OAAMyhB,KAAK1Y,GAAK,MAAS0Y,KAAK1Y,GAAK,KACnC,OAAO0Y,MAGR,QAASI,iBAAgBJ,KAAMK,OAC9BL,KAAKriB,EAAIoiB,eAAeC,KAAKriB,EAAG0iB,MAAM1iB,EACtCqiB,MAAKrK,EAAIoK,eAAeC,KAAKrK,EAAG0K,MAAM1iB,EACtC,OAAOqiB,MAGR,GAAIM,aACJ,IAAIC,gBAAiB,SAASC,EAAGC,SAChC,GAAIC,OACJ,UAAUD,WAAY,YAAaC,OAASD,YACvC,UAAU3lB,WAAY,YAAa,CACvC,IAAM4lB,OAAS5lB,QAAQ,MAAM,OAC7B,MAAM6a,GAAK+K,OAAS,MAGrBF,EAAEG,IAAM,SAASvM,IAAKhZ,MACrB,GAAI6J,GAAI,GAAIxH,OAAM,IAClB,IAAIc,GAAI,EAAGjD,EAAI,EAAG4K,EAAI,EAAGtH,EAAI,CAC7B,KAAItD,EAAI,EAAGA,GAAK,MAAOA,EAAG2J,EAAE3J,GAAKA,CACjC,KAAIA,EAAI,EAAGA,GAAK,MAAOA,EAAG,CACzB4K,EAAKA,EAAIjB,EAAE3J,GAAM8Y,IAAI9Y,EAAE8Y,IAAI5Y,QAASC,WAAW,GAAI,GACnDmD,GAAIqG,EAAE3J,EAAI2J,GAAE3J,GAAK2J,EAAEiB,EAAIjB,GAAEiB,GAAKtH,EAE/BtD,EAAI4K,EAAI,CAAGvB,KAAMpH,OAAOnC,KAAKI,OAC7B,KAAI+C,EAAI,EAAGA,GAAKnD,KAAKI,SAAU+C,EAAG,CACjCjD,EAAKA,EAAI,EAAG,GACZ4K,IAAKA,EAAIjB,EAAE3J,IAAI,GACfsD,GAAIqG,EAAE3J,EAAI2J,GAAE3J,GAAK2J,EAAEiB,EAAIjB,GAAEiB,GAAKtH,CAC9B+F,KAAIpG,GAAMnD,KAAKmD,GAAK0G,EAAGA,EAAE3J,GAAG2J,EAAEiB,GAAI,KAEnC,MAAOvB,KAGR,IAAG+b,OAAQ,CACVF,EAAEI,IAAM,SAASC,KAAO,MAAOH,QAAOI,WAAW,OAAOC,OAAOF,KAAKG,OAAO,YACrE,CACNR,EAAEI,IAAM,SAASC,KAAO,KAAM,kBAGhCN,gBAAeD,gBAAkBI,UAAW,YAAcA,OAAShhB,UAInE,SAASuhB,cAAa7lB,KAAMI,QAC3B,OAAS0lB,IAAK9lB,KAAKkT,WAAW,GAAI6S,KAAM/lB,KAAKkT,WAAW,IAIzD,QAAS8S,eAAchmB,KAAMI,QAC5B,GAAI4V,OAAQhW,KAAKoD,CACjB,IAAI6iB,OAAQjmB,KAAKkT,WAAW,EAC5B,IAAIlG,KAAMkZ,mBAAmBlmB,KAC7B,IAAImmB,aACJ,IAAIjL,IAAM1X,EAAGwJ,IAAK2Q,EAAG3Q,IACrB,KAAIiZ,MAAQ,KAAO,EAAG,CAErB,GAAIG,cAAepmB,KAAKkT,WAAW,EACnC,KAAI,GAAIhT,GAAI,EAAGA,GAAKkmB,eAAgBlmB,EAAGimB,UAAU9Q,KAAKwQ,aAAa7lB,MACnEkb,GAAEhP,EAAIia,cAEFjL,GAAEhP,EAAI,MAAQkQ,UAAUpP,KAAO,MACpC,KAAIiZ,MAAQ,KAAO,EAAG,EAGtBjmB,KAAKoD,EAAI4S,MAAQ5V,MACjB,OAAO8a,GAER,QAASmL,eAAcrZ,IAAK/M,GAE3B,GAAGA,GAAK,KAAMA,EAAIgjB,QAAQ,EAAE,EAAEjW,IAAIxJ,EAAEpD,OACpCH,GAAE6iB,YAAY,EAAE,EAChBwD,oBAAmBtZ,IAAIxJ,EAAGvD,EAC1B,OAAOA,GAIR,QAASsmB,gBAAevmB,MACvB,GAAIwmB,KAAMxmB,KAAKkT,WAAW,EAC1B,IAAIuT,WAAYzmB,KAAKkT,WAAW,EAChCuT,YAAazmB,KAAKkT,WAAW,IAAK,EAClC,IAAIwT,SAAU1mB,KAAKkT,WAAW,EAC9B,QAAS/P,EAAEqjB,IAAKC,UAAWA,WAE5B,QAASE,gBAAe/B,KAAM3kB,GAC7B,GAAGA,GAAK,KAAMA,EAAIgjB,QAAQ,EAC1BhjB,GAAE6iB,aAAa,EAAG8B,KAAKzhB,EACvBlD,GAAE6iB,YAAY,EAAG8B,KAAK6B,YAAcniB,UAAYsgB,KAAK6B,UAAY7B,KAAKriB,EACtEtC,GAAE6iB,YAAY,EAAG,EACjB,OAAO7iB,GAKR,QAAS2mB,oBAAoB5mB,KAAMI,QAAU,MAAO8lB,oBAAmBlmB,KAAMI,QAG7E,QAASymB,4BAA2B7mB,MACnC,GAAI8mB,eAAgB9mB,KAAKkT,WAAW,EACpC,OAAO4T,iBAAkB,GAAKA,gBAAkB,WAAa,GAAK9mB,KAAKkT,WAAW4T,cAAe,QAElG,QAASC,4BAA2B/mB,KAAMC,GACzC,IAAIA,EAAGA,EAAIgjB,QAAQ,IACnBhjB,GAAE6iB,YAAY,EAAG9iB,KAAKI,OAAS,EAAIJ,KAAKI,OAAS,WACjD,IAAGJ,KAAKI,OAAS,EAAGH,EAAE6iB,YAAY,EAAG9iB,KAAM,OAC3C,OAAOC,GAIR,QAASimB,oBAAmBlmB,MAC3B,GAAI8mB,eAAgB9mB,KAAKkT,WAAW,EACpC,OAAO4T,iBAAkB,EAAI,GAAK9mB,KAAKkT,WAAW4T,cAAe,QAElE,QAASR,oBAAmBtmB,KAAMC,GACjC,GAAGA,GAAK,KAAMA,EAAIgjB,QAAQ,EAAE,EAAEjjB,KAAKI,OACnCH,GAAE6iB,YAAY,EAAG9iB,KAAKI,OACtB,IAAGJ,KAAKI,OAAS,EAAGH,EAAE6iB,YAAY,EAAG9iB,KAAM,OAC3C,OAAOC,GAIR,GAAI+mB,aAAcH,0BAClB,IAAII,aAAcF,0BAKlB,SAASG,gBAAelnB,MACvB,GAAIigB,GAAIjgB,KAAK2S,MAAM3S,KAAKoD,EAAGpD,KAAKoD,EAAE,EAClC,IAAI+jB,OAAQlH,EAAE,GAAK,EAAGmH,KAAOnH,EAAE,GAAK,CACpCjgB,MAAKoD,GAAG,CACR6c,GAAE,IAAM,GACR,IAAIoH,IAAKD,OAAS,EAAIrG,UAAU,EAAE,EAAE,EAAE,EAAEd,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,IAAI,GAAKnK,cAAcmK,EAAE,IAAI,CACtF,OAAOkH,OAAQE,GAAG,IAAMA,GAIzB,QAASC,oBAAmBtnB,MAC3B,GAAI4kB,OAAQriB,KAAOgY,KACnBqK,MAAKriB,EAAE2J,EAAIlM,KAAKkT,WAAW,EAC3B0R,MAAKrK,EAAErO,EAAIlM,KAAKkT,WAAW,EAC3B0R,MAAKriB,EAAEY,EAAInD,KAAKkT,WAAW,EAC3B0R,MAAKrK,EAAEpX,EAAInD,KAAKkT,WAAW,EAC3B,OAAO0R,MAGR,QAAS2C,oBAAmBrb,EAAGjM,GAC9B,IAAIA,EAAGA,EAAIgjB,QAAQ,GACnBhjB,GAAE6iB,YAAY,EAAG5W,EAAE3J,EAAE2J,EACrBjM,GAAE6iB,YAAY,EAAG5W,EAAEqO,EAAErO,EACrBjM,GAAE6iB,YAAY,EAAG5W,EAAE3J,EAAEY,EACrBlD,GAAE6iB,YAAY,EAAG5W,EAAEqO,EAAEpX,EACrB,OAAOlD,GAKR,QAASunB,YAAWxnB,KAAMI,QAAU,MAAOJ,MAAKkT,WAAW,EAAG,KAC9D,QAASuU,YAAWznB,KAAMC,GAAK,OAAQA,GAAKgjB,QAAQ,IAAIH,YAAY,EAAG,IAAK9iB,MAG5E,GAAI0nB,OACHjjB,EAAM,SACNkjB,EAAM,UACNviB,GAAM,UACNwiB,GAAM,QACNC,GAAM,SACNC,GAAM,QACNC,GAAM,OACNC,GAAM,gBACNC,IAAM,QAEP,IAAIC,OAAQ/O,UAAUuO,KAGtB,SAASS,gBAAenoB,KAAMI,QAC7B,GAAImJ,OACJ,IAAIhG,GAAIvD,KAAKkT,WAAW,EACxB3J,KAAI6e,UAAY7kB,EAAI,CACpBgG,KAAI8e,WAAa9kB,IAAM,CACvBgG,KAAI+e,MAAQtoB,KAAKkT,WAAW,EAC5B3J,KAAIgf,cAAgBvoB,KAAKkT,WAAW,EAAG,IACvC3J,KAAIif,KAASxoB,KAAKkT,WAAW,EAC7B3J,KAAIkf,OAASzoB,KAAKkT,WAAW,EAC7B3J,KAAImf,MAAS1oB,KAAKkT,WAAW,EAC7B3J,KAAIof,OAAS3oB,KAAKkT,WAAW,GAI9B,QAAS0V,iBAAgB5oB,KAAMI,QAC9B,GAAImD,GAAIvD,KAAKkT,WAAW,EACxBlT,MAAKoD,GACL,IAAImG,MACHsf,QAAStlB,EAAI,EACbulB,WAAYvlB,EAAI,EAChBwlB,SAAUxlB,EAAI,GACdylB,QAASzlB,EAAI,GACb0lB,UAAW1lB,EAAI,GACf2lB,QAAS3lB,EAAI,IAEd,OAAOgG,KAGR,CACC,GAAI4f,UAAc,CAClB,IAAIC,SAAc,CAClB,IAAIC,OAAc,CAClB,IAAIC,OAAc,CAClB,IAAIC,OAAc,CAClB,IAAIC,OAAc,CAClB,IAAIC,OAAc,CAClB,IAAIC,SAAc,CAClB,IAAIC,SAAc,CAClB,IAAIC,UAAc,EAClB,IAAIC,SAAc,EAClB,IAAIC,YAAc,EAClB,IAAIC,YAAc,EAClB,IAAIC,OAAc,EAClB,IAAIC,QAAc,EAClB,IAAIC,QAAc,EAClB,IAAIC,QAAc,EAClB,IAAIC,OAAc,EAClB,IAAIC,QAAc,EAClB,IAAIC,QAAc,EAClB,IAAIC,SAAc,EAClB,IAAIC,UAAc,EAClB,IAAIC,WAAc,EAClB,IAAIC,aAAc,EAClB,IAAIC,SAAc,EAClB,IAAIC,WAAc,EAClB,IAAIC,YAAc,EAClB,IAAIC,oBAAsB,EAC1B,IAAIC,kBAAsB,EAC1B,IAAIC,gBAAsB,EAC1B,IAAIC,OAAc,EAClB,IAAIC,UAAc,EAClB,IAAIC,qBAAsB,EAC1B,IAAIC,WAAc,IAClB,IAAIC,UAAc,IAElB,IAAIC,WAAc,EAClB,IAAIC,SAAc,EAClB,IAAIC,YAAeF,UAAWC,SAI/B,GAAIE,mBACH/mB,GAAQgnB,EAAG,WAAYloB,EAAG6lB,OAC1B1kB,GAAQ+mB,EAAG,WAAYloB,EAAG8nB,WAC1B1mB,GAAQ8mB,EAAG,qBAAsBloB,EAAG8nB,WACpCzmB,GAAQ6mB,EAAG,YAAaloB,EAAG8lB,OAC3BqC,GAAQD,EAAG,YAAaloB,EAAG8lB,OAC3BsC,GAAQF,EAAG,iBAAkBloB,EAAG8lB,OAChC3B,GAAQ+D,EAAG,aAAcloB,EAAG8lB,OAC5BuC,GAAQH,EAAG,YAAaloB,EAAG8lB,OAC3BxkB,GAAQ4mB,EAAG,cAAeloB,EAAG8lB,OAC7BvkB,IAAQ2mB,EAAG,sBAAuBloB,EAAG8lB,OACrCtkB,IAAQ0mB,EAAG,QAASloB,EAAGqmB,SACvB5kB,IAAQymB,EAAG,cAAeloB,EAAG4nB,UAAYtB,YACzC5kB,IAAQwmB,EAAG,WAAYloB,EAAG4nB,UAAYZ,UACtCrlB,IAAQumB,EAAG,UAAWloB,EAAG8nB,WACzBlmB,IAAQsmB,EAAG,UAAWloB,EAAG8nB,WACzBjmB,IAAQqmB,EAAG,aAAcloB,EAAGqmB,SAC5BvkB,IAAQomB,EAAG,iBAAkBloB,EAAG8lB,OAChC9jB,IAAQkmB,EAAG,YAAaloB,EAAGqmB,SAC3BlkB,IAAQ+lB,EAAG,gBAAiBloB,EAAGqmB,SAC/BjC,IAAQ8D,EAAG,aAAcloB,EAAG8lB,MAAO5E,EAAG,WACtCoH,IAAQJ,EAAG,cAAeloB,EAAG8nB,WAC7BS,IAAQL,EAAG,gBAAiBloB,EAAG8nB,WAC/BU,IAAQN,EAAG,WAAYloB,EAAG8nB,WAC1BzD,IAAQ6D,EAAG,UAAWloB,EAAG8nB,WACzBrD,OAID,IAAIgE,eACHvnB,GAAQgnB,EAAG,WAAYloB,EAAG6lB,OAC1B1kB,GAAQ+mB,EAAG,QAASloB,EAAG8nB,WACvB1mB,GAAQ8mB,EAAG,UAAWloB,EAAG8nB,WACzBzmB,GAAQ6mB,EAAG,SAAUloB,EAAG8nB,WACxBK,GAAQD,EAAG,WAAYloB,EAAG8nB,WAC1BM,GAAQF,EAAG,WAAYloB,EAAG8nB,WAC1B3D,GAAQ+D,EAAG,WAAYloB,EAAG8nB,WAC1BO,GAAQH,EAAG,aAAcloB,EAAG8nB,WAC5BxmB,GAAQ4mB,EAAG,YAAaloB,EAAG8nB,WAC3BvmB,IAAQ2mB,EAAG,WAAYloB,EAAGknB,aAC1B1lB,IAAQ0mB,EAAG,cAAeloB,EAAGknB,aAC7BzlB,IAAQymB,EAAG,cAAeloB,EAAGknB,aAC7BxlB,IAAQwmB,EAAG,eAAgBloB,EAAGknB,aAC9BvlB,IAAQumB,EAAG,YAAaloB,EAAG8lB,OAC3BlkB,IAAQsmB,EAAG,YAAaloB,EAAG8lB,OAC3BjkB,IAAQqmB,EAAG,YAAaloB,EAAG8lB,OAC3BhkB,IAAQomB,EAAG,YAAaloB,EAAGynB,OAC3B1lB,IAAQmmB,EAAG,kBAAmBloB,EAAGgnB,UACjChlB,IAAQkmB,EAAG,mBAAoBloB,EAAG8lB,OAClCrB,OAID,IAAIiE,oBACHC,YAAcT,EAAG,SAAUloB,EAAG2mB,QAC9BiC,YAAcV,EAAG,WAAYloB,EAAG2mB,QAChCkC,gBAGD,WACC,IAAI,GAAIhoB,KAAK6nB,mBAAmB,GAAGA,kBAAkBI,eAAejoB,GACpEonB,iBAAiBpnB,GAAK4nB,aAAa5nB,GAAK6nB,kBAAkB7nB,MAI3D,IAAIkoB,cACH7nB,EAAQ,KACRC,EAAQ,KACRC,EAAQ,GACR+iB,EAAQ,KACRliB,GAAQ,KACR+mB,GAAQ,KACRC,GAAQ,KACRC,GAAQ,KACRC,GAAQ,KACRC,GAAQ,KACR9E,GAAQ,KACRhiB,GAAQ,KACR+mB,GAAQ,KACR7E,GAAQ,KACR8E,GAAQ,KACR9mB,GAAQ,KACRC,GAAQ,KACRC,GAAQ,KACRC,GAAQ,KACRC,GAAQ,KACR2mB,GAAQ,KACRC,GAAQ,KACRC,GAAQ,KACRC,GAAQ,KACRC,GAAQ,KACRC,GAAQ,KACRC,GAAQ,KACRC,GAAQ,KACRC,GAAQ,KACRC,GAAQ,KACRC,IAAQ,KACRC,IAAQ,KACRC,IAAQ,KACRC,IAAQ,KACRC,IAAQ,KACRC,IAAQ,KACRC,IAAQ,KACRC,IAAQ,KACRC,IAAQ,KACRC,IAAQ,KACRC,IAAQ,KACRC,IAAQ,KACRC,IAAQ,KACRC,IAAQ,KACRC,IAAQ,KACRC,IAAQ,KACRC,IAAQ,KACRC,IAAQ,KACRC,IAAQ,KACRroB,MAAQ,KAIT,IAAIsoB,iBACH,KACA,QACA,aACA,WACA,YACA,iBACA,eACA,WACA,SACA,WACA,cACA,kBACA,gBACA,YACA,UACA,YACA,eACA,UACA,WAGD,SAASC,QAAOrV,KAAO,MAAOA,KAAItY,IAAI,SAAST,GAAK,OAASA,GAAG,GAAI,IAAKA,GAAG,EAAG,IAAIA,EAAE,OAGrF,GAAIquB,QAASD,QAEZ,EACA,SACA,SACA,MACA,IACA,SACA,SACA,MAGA,EACA,SACA,SACA,MACA,IACA,SACA,SACA,MAEA,QACA,MACA,IACA,QACA,QACA,MACA,SACA,QACA,SACA,SACA,SACA,SACA,QACA,SACA,MACA,SAEA,IACA,SACA,SACA,MACA,QACA,QACA,MACA,IACA,MACA,SACA,SACA,SACA,SACA,SACA,SACA,SAEA,QACA,QACA,SACA,SACA,SACA,SACA,QACA,QACA,MACA,QACA,MACA,QACA,SACA,SACA,QACA,QAGA,SACA,GAQD,IAAIE,UAEHC,6EAA8E,YAG9EC,sCAAuC,OAGvCC,sCAAuC,OACvCC,6EAA8E,OAG9EC,uCAAwC,OACxCC,8EAA+E,OAG/EC,sCAAuC,OACvCC,0CAA2C,OAC3CC,0CAA2C,OAC3CC,sCAAuC,OAGvCC,6DAA8D,YAC9DC,sEAAuE,YACvEC,wEAAyE,WAGzEC,wEAAyE,OAGzEC,oCAAqC,WACrCC,2EAA4E,WAG5EC,sCAAuC,OACvCC,6EAA8E,OAG9EC,qCAAsC,aACtCC,4EAA6E,aAG7EC,8EAA+E,OAG/EC,oCAAqC,OACrCC,wCAAyC,OAGzCC,4CAA6C,OAG7CC,uCAAwC,OACxCC,8EAA+E,OAG/EC,wCAAyC,OACzCC,+EAAgF,OAGhFC,yCAA0C,OAC1CC,gFAAiF,OAGjFC,gDAAiD,OACjDC,6CAA8C,OAC9CC,uFAAwF,OACxFC,oFAAqF,OAGrFC,sCAAuC,OACvCC,6EAA8E,OAG9EC,qCAAsC,OACtCC,2CAA4C,OAC5CC,uCAAwC,OACxCC,kFAAmF,OACnFC,8EAA+E,OAC/EC,4EAA6E,OAG7EC,4CAA6C,OAC7CC,mFAAoF,OAGpFC,kCAAmC,OACnCC,uCAAwC,OACxCC,sCAAuC,OACvCC,2CAA4C,OAG5CC,qCAAsC,OAGtCC,iCAAkC,OAClCC,wEAAyE,OAGzEC,0DAA2D,SAG3DC,wCAAyC,OACzCC,6CAA8C,OAG9CC,uCAAwC,MACxCC,gDAAiD,MAGjDC,iDAAkD,OAClDC,uFAAwF,OAGxFC,iDAAkD,OAGlDC,2DAA4D,OAG5DC,sCAAuC,OAGvCC,4DAA6D,OAC7DC,oEAAqE,OACrEC,0EAA2E,OAC3EC,4EAA6E,OAC7EC,0EAA2E,OAC3EC,4EAA6E,OAC7EC,2EAA4E,OAG5EC,2DAA4D,OAE5DC,2DAA4D,OAC5DC,0DAA2D,OAE3DC,MAAS,KAGV,IAAIC,SAAU,WACb,GAAIvzB,IACHwzB,WACCC,KAAM,6EACNC,KAAM,uDACNC,KAAM,0DACNC,KAAM,iFAEPC,MACCJ,KAAM,gFACNE,KAAM,0CAEPG,QACCL,KAAM,4EACNE,KAAM,sCAEPI,QACCN,KAAM,yEACNE,KAAM;EAGRhb,MAAK3Y,GAAG8d,QAAQ,SAASrI,GAAK,IAAIzV,EAAEyV,GAAGie,KAAM1zB,EAAEyV,GAAGie,KAAO1zB,EAAEyV,GAAGge,MAC9D9a,MAAK3Y,GAAG8d,QAAQ,SAASrI,GAAIkD,KAAK3Y,EAAEyV,IAAIqI,QAAQ,SAASza,GAAKyrB,QAAQ9uB,EAAEyV,GAAGpS,IAAMoS,KACjF,OAAOzV,KAGR,IAAIg0B,SAAU7a,UAAU2V,QAExBtQ,OAAMyV,GAAK,8DAEX,SAASC,UAASn0B,KAAMuE,MACvB,GAAI6vB,SACJ,KAAIp0B,OAASA,KAAKwL,MAAO,MAAOxL,KAChC,IAAIiX,KAAOwc,aAAeM,UAAYM,cAAgBC,UAAYN,UACjEO,aAAeC,YAAcC,aAAeX,QAASY,YAAcC,OACnEC,QAASC,QAASC,MAAO,KACzB90B,KAAKwL,MAAMoP,eAAemD,QAAQ,SAAStd,GAC3C,GAAI4D,GAAI0W,YAAYta,EACpB,QAAO4D,EAAE,GAAGrC,QAAQ6Y,QAAQ,MAC3B,IAAK,QAAS,KACd,KAAK,SAAU5D,GAAG6d,MAAQzwB,EAAE,SAAWA,EAAE,GAAGmH,MAAM,aAAa,GAAG,KAAK,GAAM,MAC7E,KAAK,WAAY4oB,MAAM/vB,EAAE0wB,WAAa1wB,EAAE2wB,WAAa,MACrD,KAAK,YACJ,GAAG/d,GAAG8X,QAAQ1qB,EAAE2wB,gBAAkB1wB,UAAW2S,GAAG8X,QAAQ1qB,EAAE2wB,cAAc3f,KAAKhR,EAAE4wB,cAC1E,IAAG1wB,KAAK2wB,IAAKC,QAAQC,MAAM/wB,EAChC,SAGH,IAAG4S,GAAG6d,QAAUrW,MAAMyV,GAAI,KAAM,IAAIprB,OAAM,sBAAwBmO,GAAG6d,MACrE7d,IAAGoe,UAAYpe,GAAGod,WAAWj0B,OAAS,EAAI6W,GAAGod,WAAW,GAAK,EAC7Dpd,IAAGqe,IAAMre,GAAG6c,KAAK1zB,OAAS,EAAI6W,GAAG6c,KAAK,GAAK,EAC3C7c,IAAGse,MAAQte,GAAG+c,OAAO5zB,OAAS,EAAI6W,GAAG+c,OAAO,GAAK,EACjD/c,IAAGue,SAAWpB,YACPnd,IAAGod,UACV,OAAOpd,IAGR,GAAIwe,gBAAiBrX,UAAU,QAAS,MACvC0W,MAASrW,MAAMyV,GACfwB,YAAajX,MAAMQ,IACnB0W,YAAalX,MAAMO,KAGpB,IAAI4W,kBACF,MAAO,oBACP,MAAO,4DACP,OAAQ3B,QAAQY,KAAK,KACrB3zB,IAAI,SAAST,GACd,MAAO2d,WAAU,UAAW,MAAO2W,UAAYt0B,EAAE,GAAIu0B,YAAev0B,EAAE,MAGvE,SAASo1B,UAAS5e,GAAI1S,MACrB,GAAItE,MAAQqD,CACZrD,GAAEA,EAAEG,QAAU,UACdH,GAAEA,EAAEG,QAAU,cACdH,GAAIA,EAAE0C,OAAOizB,eACb,IAAIE,IAAK,SAAS7tB,GACjB,GAAGgP,GAAGhP,IAAMgP,GAAGhP,GAAG7H,OAAS,EAAG,CAC7BkD,EAAI2T,GAAGhP,GAAG,EACVhI,GAAEA,EAAEG,QAAWge,UAAU,WAAY,MACpC6W,UAAa3xB,EAAE,IAAM,IAAM,GAAG,KAAOA,EACrC0xB,YAAexB,QAAQvrB,GAAG1D,KAAKwxB,UAAY,WAI9C,IAAIC,IAAK,SAAS/tB,GACjBgP,GAAGhP,GAAG8V,QAAQ,SAASza,GACtBrD,EAAEA,EAAEG,QAAWge,UAAU,WAAY,MACpC6W,UAAa3xB,EAAE,IAAM,IAAM,GAAG,KAAOA,EACrC0xB,YAAexB,QAAQvrB,GAAG1D,KAAKwxB,UAAY,YAI9C,IAAIE,IAAK,SAASzyB,IAChByT,GAAGzT,QAAQua,QAAQ,SAASza,GAC5BrD,EAAEA,EAAEG,QAAWge,UAAU,WAAY,MACpC6W,UAAa3xB,EAAE,IAAM,IAAM,GAAG,KAAOA,EACrC0xB,YAAef,QAAQzwB,GAAG,OAI7BsyB,IAAG,YACHE,IAAG,SACHC,IAAG,WACF,OAAQ,UAAUlY,QAAQ+X,KAC1B,YAAa,WAAY,aAAa/X,QAAQkY,GAC/C,IAAGh2B,EAAEG,OAAO,EAAE,CAAEH,EAAEA,EAAEG,QAAU,UAAcH,GAAE,GAAGA,EAAE,GAAG+B,QAAQ,KAAK,KACnE,MAAO/B,GAAEke,KAAK,IAGf,GAAI+X,OACHC,GAAI,qFACJC,MAAO,qFAGR,SAASC,YAAWr2B,KAAMs2B,iBACzB,IAAKt2B,KAAM,MAAOA,KAClB,IAAIs2B,gBAAgBx0B,OAAO,KAAO,IAAK,CACtCw0B,gBAAkB,IAAIA,gBAEvB,GAAIzB,QACJ,IAAI0B,QACJ,IAAIC,iCAAkC,SAAUC,IAC/C,GAAIC,UAAWJ,gBAAgB9zB,MAAM,IACrCk0B,UAASC,KACT,IAAIC,QAASH,GAAGj0B,MAAM,IACtB,IAAIq0B,YACJ,OAAOD,OAAOx2B,SAAW,EAAG,CAC3B,GAAI02B,OAAQF,OAAOziB,OACnB,IAAI2iB,QAAU,KAAM,CACnBJ,SAASC,UACH,IAAIG,QAAU,IAAK,CACzBJ,SAASrhB,KAAKyhB,QAGhB,MAAOJ,UAASvY,KAAK,KAGtBne,MAAKwL,MAAMoP,UAAUmD,QAAQ,SAAStd,GACrC,GAAI4D,GAAI0W,YAAYta,EAEpB,IAAI4D,EAAE,KAAO,gBAAiB,CAC7B,GAAI0yB,OAAUA,KAAIC,KAAO3yB,EAAE2yB,IAAMD,KAAIE,OAAS5yB,EAAE4yB,MAAQF,KAAIG,GAAK7yB,EAAE6yB,EAAIH,KAAII,WAAa9yB,EAAE8yB,UAC1F,IAAIC,eAAgB/yB,EAAE8yB,aAAe,WAAa9yB,EAAE4yB,OAAST,gCAAgCnyB,EAAE4yB,OAC/FpC,MAAKuC,eAAiBL,GACtBR,MAAKlyB,EAAE6yB,IAAMH,MAGflC,MAAK,OAAS0B,IACd,OAAO1B,MAGRpW,MAAMyX,KAAO,8DAEb,IAAImB,WAAYjZ,UAAU,gBAAiB,MAE1C0W,MAASrW,MAAMyX,MAIhB,SAASoB,YAAWzC,MACnB,GAAI50B,KACJA,GAAEA,EAAEG,QAAU,UACdH,GAAEA,EAAEG,QAAU,SACdwY,MAAKic,KAAK,QAAQ9W,QAAQ,SAASwZ,KAAO,GAAIR,KAAMlC,KAAK,OAAO0C,IAC/Dt3B,GAAEA,EAAEG,QAAWge,UAAU,eAAgB,KAAM2Y,MAEhD,IAAG92B,EAAEG,OAAO,EAAE,CAAEH,EAAEA,EAAEG,QAAU,kBAAsBH,GAAE,GAAGA,EAAE,GAAG+B,QAAQ,KAAK,KAC3E,MAAO/B,GAAEke,KAAK,IAIf,GAAIqZ,cACF,cAAe,aACf,mBAAoB,kBACpB,cAAe,aACf,oBAAqB,eACrB,iBAAkB,gBAClB,cAAe,cACf,aAAc,YACd,aAAc,WACd,iBAAkB,aAClB,gBAAiB,eACjB,cAAe,aACf,aAAc,YACd,WAAY,UACZ,kBAAmB,cAAe,SAClC,mBAAoB,eAAgB,QAGtC/Y,OAAM+Y,WAAa,yEACnBtB,MAAKsB,WAAc,uFAEnB,IAAIC,kBAAmB,WACtB,GAAIvrB,GAAI,GAAI7J,OAAMm1B,WAAWp3B,OAC7B,KAAI,GAAIF,GAAI,EAAGA,EAAIs3B,WAAWp3B,SAAUF,EAAG,CAC1C,GAAI6P,GAAIynB,WAAWt3B,EACnB,IAAIid,GAAI,MAAOpN,EAAE,GAAGjP,OAAO,EAAEiP,EAAE,GAAG9N,QAAQ,MAAO,KAAM8N,EAAE,GAAGjP,OAAOiP,EAAE,GAAG9N,QAAQ,KAAK,EACrFiK,GAAEhM,GAAK,GAAIkd,QAAO,IAAMD,EAAI,eAAkBA,EAAI,KAEnD,MAAOjR,KAGR,SAASwrB,kBAAiB13B,MACzB,GAAI0kB,KAEJ,KAAI,GAAIxkB,GAAI,EAAGA,EAAIs3B,WAAWp3B,SAAUF,EAAG,CAC1C,GAAI6P,GAAIynB,WAAWt3B,GAAIy3B,IAAM33B,KAAKwL,MAAMisB,iBAAiBv3B,GACzD,IAAGy3B,KAAO,MAAQA,IAAIv3B,OAAS,EAAGskB,EAAE3U,EAAE,IAAM4nB,IAAI,EAChD,IAAG5nB,EAAE,KAAO,QAAU2U,EAAE3U,EAAE,IAAK2U,EAAE3U,EAAE,IAAM,GAAIhG,MAAK2a,EAAE3U,EAAE,KAGvD,MAAO2U,GAGR,GAAIkT,qBAAsBxZ,UAAU,oBAAqB,MAExDyZ,WAAYpZ,MAAM+Y,WAClBM,WAAYrZ,MAAMC,GAClBqZ,gBAAiBtZ,MAAME,QACvBqZ,iBAAkBvZ,MAAMG,SACxB+W,YAAalX,MAAMO,KAGpB,SAASiZ,SAAQloB,EAAGoN,EAAGQ,EAAG1d,EAAGykB,GAC5B,GAAGA,EAAE3U,IAAM,MAAQoN,GAAK,MAAQA,IAAM,GAAI,MAC1CuH,GAAE3U,GAAKoN,CACPld,GAAEA,EAAEG,QAAWud,EAAIS,UAAUrO,EAAEoN,EAAEQ,GAAKM,SAASlO,EAAEoN,GAGlD,QAAS+a,kBAAiBp4B,GAAIyE,MAC7B,GAAItE,IAAKue,WAAYoZ,qBAAsBlT,IAC1C,IAAIngB,MAAQA,KAAK4zB,MAAO,CACtB,GAAI5zB,KAAK4zB,MAAMC,MAAOn4B,EAAEA,EAAEG,QAAgB,aAAqBmE,KAAK4zB,MAAMC,MAAe,aACzF,IAAI7zB,KAAK4zB,MAAME,QAASp4B,EAAEA,EAAEG,QAAc,eAAqBmE,KAAK4zB,MAAME,QAAe,eACzF,IAAI9zB,KAAK4zB,MAAMG,QAASr4B,EAAEA,EAAEG,QAAc,eAAqBmE,KAAK4zB,MAAMG,QAAe,eACzF,IAAI/zB,KAAK4zB,MAAMI,SAAUt4B,EAAEA,EAAEG,QAAa,gBAAqBmE,KAAK4zB,MAAMI,SAAgB,gBAC1F,IAAIh0B,KAAK4zB,MAAMK,YAAav4B,EAAEA,EAAEG,QAAU,mBAAqBmE,KAAK4zB,MAAMK,YAAe,oBAE3F,GAAG14B,GAAI,CAEL,GAAGA,GAAG24B,aAAe,KAAMR,QAAQ,wBAA0Bn4B,IAAG24B,cAAgB,SAAW34B,GAAG24B,YAAcpa,aAAave,GAAG24B,YAAal0B,KAAK2wB,MAAOwD,WAAW,kBAAmBz4B,EAAGykB,EACtL,IAAG5kB,GAAG64B,cAAgB,KAAMV,QAAQ,yBAA2Bn4B,IAAG64B,eAAiB,SAAW74B,GAAG64B,aAAeta,aAAave,GAAG64B,aAAcp0B,KAAK2wB,MAAOwD,WAAW,kBAAmBz4B,EAAGykB,EAE5L,KAAI,GAAIxkB,GAAI,EAAGA,GAAKs3B,WAAWp3B,SAAUF,EAAG,CAAE,GAAI6P,GAAIynB,WAAWt3B,EAAI+3B,SAAQloB,EAAE,GAAIjQ,GAAGiQ,EAAE,IAAK,KAAM9P,EAAGykB,IAEvG,GAAGzkB,EAAEG,OAAO,EAAE,CAAEH,EAAEA,EAAEG,QAAU,sBAA0BH,GAAE,GAAGA,EAAE,GAAG+B,QAAQ,KAAK,KAC/E,MAAO/B,GAAEke,KAAK,IAIhB,GAAIya,aACF,cAAe,cAAe,WAC9B,aAAc,aAAc,WAC5B,UAAW,UAAW,WACtB,cAAe,cAAe,WAC9B,UAAW,UAAW,WACtB,oBAAqB,oBAAqB,SAC1C,YAAa,YAAa,SAC1B,gBAAiB,gBAAiB,SAClC,YAAa,YAAa,SAC1B,eAAgB,eAAgB,QAChC,gBAAiB,gBAAiB,OAGpCna,OAAMma,UAAY,2EAClB1C,MAAK0C,UAAa,yFAElB,SAASC,iBAAgB74B,KAAM0kB,GAC9B,GAAIpd,KAAQ,KAAIod,EAAGA,IAEnBkU,WAAU7a,QAAQ,SAAShO,GAC1B,OAAOA,EAAE,IACR,IAAK,SAAU2U,EAAE3U,EAAE,KAAO/P,KAAKwL,MAAMyR,SAASlN,EAAE,UAAU,EAAI,MAC9D,KAAK,OAAQ2U,EAAE3U,EAAE,KAAO/P,KAAKwL,MAAMyR,SAASlN,EAAE,UAAU,KAAO,MAAQ,MACvE,KAAK,MACJ,GAAI4nB,KAAM33B,KAAKwL,MAAM,GAAI4R,QAAO,IAAMrN,EAAE,GAAK,eAAkBA,EAAE,GAAK,KACtE,IAAG4nB,KAAOA,IAAIv3B,OAAS,EAAGkH,EAAEyI,EAAE,IAAM4nB,IAAI,EACxC,SAIH,IAAGrwB,EAAEwxB,cAAgBxxB,EAAEyxB,cAAe,CACrC,GAAIz1B,GAAIoa,YAAYpW,EAAEwxB,aACtB,IAAIhuB,GAAI,EAAGkuB,KAAO,CAClB,KAAI,GAAI94B,GAAI,EAAGA,IAAMoD,EAAElD,SAAUF,EAAG,CACnC,OAAOoD,EAAEpD,GAAGoD,GACX,IAAK,aAAc01B,KAAOluB,CAAG4Z,GAAEuU,YAAe31B,IAAIpD,GAAI,CAAG,MACzD,KAAK,iBAAkBA,CAAG,QAG5B,GAAIg5B,OAAQxb,YAAYpW,EAAEyxB,eAAe73B,IAAI,SAAST,GAAK,MAAOic,UAASjc,EAAE6C,IAC7EohB,GAAEyU,WAAaD,MAAMvmB,MAAMqmB,KAAMA,KAAOtU,EAAEuU,YAE3C,MAAOvU,GAGR,GAAI0U,oBAAqBhb,UAAU,aAAc,MAChD0W,MAASrW,MAAMma,UACfS,WAAY5a,MAAMM,IAGnB,SAASua,iBAAgBx5B,GAAIyE,MAC5B,GAAItE,MAAQykB,KAAQ6U,EAAInb,SACxB,KAAIte,GAAIA,KACRA,IAAG05B,YAAc,SACjBv5B,GAAEA,EAAEG,QAAU,UACdH,GAAEA,EAAEG,QAAU,kBAEdw4B,WAAU7a,QAAQ,SAAShO,GAC1B,GAAGjQ,GAAGiQ,EAAE,MAAQzL,UAAW,MAC3B,IAAIhB,EACJ,QAAOyM,EAAE,IACR,IAAK,SAAUzM,EAAIxD,GAAGiQ,EAAE,GAAK,MAC7B,KAAK,OAAQzM,EAAIxD,GAAGiQ,EAAE,IAAM,OAAS,OAAS,OAE/C,GAAGzM,IAAMgB,UAAWrE,EAAEA,EAAEG,QAAWm5B,EAAExpB,EAAE,GAAIzM,IAI5CrD,GAAEA,EAAEG,QAAWm5B,EAAE,eAAgBA,EAAE,YAAaA,EAAE,aAAc,mCAAmCA,EAAE,aAAcA,EAAE,QAAS74B,OAAOZ,GAAGm5B,eAAgB7hB,KAAK,EAAGyG,SAAS,YACzK5d,GAAEA,EAAEG,QAAWm5B,EAAE,gBAAiBA,EAAE,YAAaz5B,GAAGq5B,WAAWj4B,IAAI,SAASqB,GAAK,MAAO,aAAeA,EAAI,gBAAkB4b,KAAK,KAAM/G,KAAMtX,GAAGm5B,WAAYpb,SAAS,UACtK,IAAG5d,EAAEG,OAAO,EAAE,CAAEH,EAAEA,EAAEG,QAAU,eAAmBH,GAAE,GAAGA,EAAE,GAAG+B,QAAQ,KAAK,KACxE,MAAO/B,GAAEke,KAAK,IAGfM,MAAMgb,WAAa,yEACnBvD,MAAKuD,WAAc,uFAEnB,IAAIC,WAAY,eAChB,SAASC,kBAAiB35B,KAAMuE,MAC/B,GAAImgB,MAAQjR,IACZ,IAAI/J,GAAI1J,KAAKwL,MAAMkuB,UACnB,IAAGhwB,EAAG,IAAI,GAAIxJ,GAAI,EAAGA,GAAKwJ,EAAEtJ,SAAUF,EAAG,CACxC,GAAIO,GAAIiJ,EAAExJ,GAAImE,EAAI0W,YAAYta,EAC9B,QAAO4D,EAAE,IACR,IAAK,QAAS,KACd,KAAK,cACJ,GAAGA,EAAEywB,QAAUrW,MAAMgb,WAAY,KAAM,sBAAwBp1B,EAAEywB,KACjE,IAAGzwB,EAAEu1B,SAAWv1B,EAAEu1B,UAAYnb,MAAMM,GAAI,KAAM,mBAAqB1a,EAAEu1B,OACrE,MACD,KAAK,YAAanmB,KAAOpP,EAAEoP,IAAM,MACjC,KAAK,cAAeA,KAAO,IAAM,MACjC,SAAS,GAAIhT,EAAEwB,QAAQ,UAAY,EAAG,CACrC,GAAI43B,MAAOp5B,EAAE+B,MAAM,IACnB,IAAI8H,MAAOuvB,KAAK,GAAGze,UAAU,GAAIa,KAAO4d,KAAK,EAE7C,QAAOvvB,MACN,IAAK,QAAS,IAAK,SAAU,IAAK,OAAQ,IAAK,SAC9Coa,EAAEjR,MAAQqI,YAAYG,KACtB,MACD,KAAK,OACJyI,EAAEjR,MAAQ+I,aAAaP,KAAM,YAC7B,MACD,KAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,MAAO,IAAK,OAC5DyI,EAAEjR,MAAQnH,SAAS2P,KAAM,GACzB,MACD,KAAK,KAAM,IAAK,KAAM,IAAK,UAC1ByI,EAAEjR,MAAQ5D,WAAWoM,KACrB,MACD,KAAK,WAAY,IAAK,OACrByI,EAAEjR,MAAQ,GAAI1J,MAAKkS,KACnB,MACD,KAAK,KAAM,IAAK,QACfyI,EAAEjR,MAAQqI,YAAYG,KACtB,MACD,SACC,SAAUkZ,WAAY,YAAaA,QAAQ2E,KAAK,aAAcr5B,EAAG6J,KAAMuvB,WAEnE,IAAGp5B,EAAEK,OAAO,EAAE,KAAO,KAAM,MAC3B,IAAGyD,KAAK2wB,IAAK,KAAM,IAAIpsB,OAAMrI,IAGtC,MAAOikB,GAGR,GAAIqV,qBAAsB3b,UAAU,aAAc,MACjD0W,MAASrW,MAAMgb,WACfJ,WAAY5a,MAAMM,IAGnB,SAASib,kBAAiBl6B,GAAIyE,MAC7B,GAAItE,IAAKue,WAAYub,oBACrB,KAAIj6B,GAAI,MAAOG,GAAEke,KAAK,GACtB,IAAI8b,KAAM,CACVrhB,MAAK9Y,IAAIie,QAAQ,QAASmc,UAASxkB,KAAOukB,GACzCh6B,GAAEA,EAAEG,QAAWge,UAAU,WAAYG,SAASze,GAAG4V,KAChDykB,MAAS,yCACTF,IAAOA,IACPxmB,KAAQiC,KAGV,IAAGzV,EAAEG,OAAO,EAAE,CAAEH,EAAEA,EAAEG,QAAU,eAAiBH,GAAE,GAAGA,EAAE,GAAG+B,QAAQ,KAAK,KACtE,MAAO/B,GAAEke,KAAK,IAEf,QAASic,eAAcjC,MAAOnd,IAAKxQ,KAElC,OAAOwQ,KACN,IAAK,cAAeA,IAAM,UAAY,OAEvCmd,MAAMnd,KAAOxQ,IAMd,QAAS6vB,gBAAe3nB,MACvB,GAAI4nB,eAAgB5nB,KAAKQ,WAAW,GAAIqnB,eAAiB7nB,KAAKQ,WAAW,EACzE,OAAO,IAAInJ,OAAOwwB,eAAe,IAAI32B,KAAKI,IAAI,EAAE,IAAMs2B,cAAc,IAAO,aAAa,KAAMhc,cAActc,QAAQ,QAAQ,IAI7H,QAASw4B,aAAY9nB,KAAMpI,KAAMmwB,KAChC,GAAIztB,KAAM0F,KAAKQ,WAAW,EAAG,QAC7B,IAAGunB,IAAK/nB,KAAKtP,GAAM,GAAM4J,IAAI5M,OAAO,EAAK,GAAM,CAC/C,OAAO4M,KAIR,QAAS0tB,cAAahoB,KAAMpI,KAAMmwB,KACjC,GAAIztB,KAAM0F,KAAKQ,WAAW,EAAG,SAC7B,IAAGunB,IAAK/nB,KAAKtP,GAAM,GAAM4J,IAAI5M,OAAO,EAAK,GAAM,CAC/C,OAAO4M,KAMR,QAAS2tB,oBAAmBjoB,KAAMkoB,WAAYH,KAC7C,GAAGG,aAAe,GAAoB,MAAOF,cAAahoB,KAC1D,OAAO8nB,aAAY9nB,KAAMkoB,WAAYH,KAGtC,QAASI,gBAAenoB,KAAMlP,EAAGi3B,KAAO,MAAOE,oBAAmBjoB,KAAMlP,EAAGi3B,MAAQ,MAAQ,EAAG,GAC9F,QAASK,yBAAwBpoB,KAAMlP,GAAK,IAAIA,EAAG,KAAM,IAAIsF,OAAM,SAAW,OAAO6xB,oBAAmBjoB,KAAMlP,EAAG,GAGjH,QAASu3B,gCAA+BroB,MACvC,GAAItS,QAASsS,KAAKQ,WAAW,EAC7B,IAAI8nB,OACJ,KAAI,GAAI96B,GAAI,EAAGA,GAAKE,SAAUF,EAAG86B,IAAI96B,GAAKwS,KAAKQ,WAAW,EAAG,QAC7D,OAAO8nB,KAIR,QAASC,2BAA0BvoB,MAClC,MAAOqoB,gCAA+BroB,MAIvC,QAASwoB,qBAAoBxoB,MAC5B,GAAIyoB,eAAgBC,yBAAyB1oB,KAAM6Y,QACnD,IAAI8P,aAAcD,yBAAyB1oB,KAAM4W,MACjD,QAAQ6R,cAAeE,aAIxB,QAASC,6BAA4B5oB,MACpC,GAAI6oB,WAAY7oB,KAAKQ,WAAW,EAChC,IAAI3J,OACJ,KAAI,GAAIrJ,GAAI,EAAGA,GAAKq7B,UAAY,IAAKr7B,EAAGqJ,IAAI8L,KAAK6lB,oBAAoBxoB,MACrE,OAAOnJ,KAIR,QAASiyB,wBAAuB9oB,MAE/B,MAAO4oB,6BAA4B5oB,MAIpC,QAAS+oB,kBAAiB/oB,KAAKgpB,UAC9B,GAAI9lB,KAAMlD,KAAKQ,WAAW,EAC1B,IAAIyoB,QACJ,KAAI,GAAI7wB,GAAI,EAAGA,GAAK8K,MAAO9K,EAAG,CAC7B,GAAImvB,KAAMvnB,KAAKQ,WAAW,EAC1B,IAAI/S,KAAMuS,KAAKQ,WAAW,EAC1ByoB,MAAK1B,KAAOvnB,KAAKQ,WAAW/S,IAAMu7B,WAAa,KAAO,UAAU,QAAS15B,QAAQa,KAAK,IAAIb,QAAQc,KAAK,KAExG,GAAG4P,KAAKtP,EAAI,EAAGsP,KAAKtP,EAAKsP,KAAKtP,GAAG,EAAE,GAAI,CACvC,OAAOu4B,MAIR,QAASC,YAAWlpB,MACnB,GAAI0E,MAAO1E,KAAKQ,WAAW,EAC3B,IAAI2oB,OAAQnpB,KAAKC,MAAMD,KAAKtP,EAAEsP,KAAKtP,EAAEgU,KACrC,IAAGA,KAAO,EAAI,EAAG1E,KAAKtP,GAAM,GAAKgU,KAAO,GAAM,CAC9C,OAAOykB,OAIR,QAASC,qBAAoBppB,MAE5B,GAAIzS,KACJA,GAAE87B,KAAOrpB,KAAKQ,WAAW,EAEzBR,MAAKtP,GAAKnD,EAAE87B,IACZ,OAAO97B,GAIR,QAAS+7B,gBAAetpB,KAAM0Q,KAW9B,QAASgY,0BAAyB1oB,KAAMpI,KAAM2xB,OAC7C,GAAIz4B,GAAIkP,KAAKQ,WAAW,GAAI8nB,IAAKz2B,KAAO03B,SACxCvpB,MAAKtP,GAAK,CACV,IAAGkH,OAASwf,WACZ,GAAGtmB,IAAM8G,MAAQkhB,UAAUvpB,QAAQqI,SAAS,EAAG,KAAM,IAAIxB,OAAM,iBAAmBwB,KAAO,QAAU9G,EACnG,QAAO8G,OAASwf,WAAatmB,EAAI8G,MAChC,IAAK,GAAgB0wB,IAAMtoB,KAAKQ,WAAW,EAAG,IAAM,KAAI3O,KAAKgQ,IAAK7B,KAAKtP,GAAK,CAAG,OAAO43B,IACtF,KAAK,GAAgBA,IAAMtoB,KAAKQ,WAAW,EAAG,IAAM,OAAO8nB,IAC3D,KAAK,IAAkB,MAAOtoB,MAAKQ,WAAW,KAAO,CACrD,KAAK,IAAiB8nB,IAAMtoB,KAAKQ,WAAW,EAAI,OAAO8nB,IACvD,KAAK,IAAmB,MAAOR,aAAY9nB,KAAMlP,EAAG,GAAGxB,QAAQa,KAAK,GACpE,KAAK,IAAoB,MAAO63B,cAAahoB,KAC7C,KAAK,IAAsB,MAAO2nB,gBAAe3nB,KACjD,KAAK,IAAkB,MAAOkpB,YAAWlpB,KACzC,KAAK,IAAgB,MAAOopB,qBAAoBppB,KAChD,KAAK,IAAoB,MAAOmoB,gBAAenoB,KAAMlP,GAAIe,KAAKgQ,KAAO,GAAGvS,QAAQa,KAAK,GACrF,KAAK,IAAkB,MAAOi4B,yBAAwBpoB,KAAMlP,EAAG,GAAGxB,QAAQa,KAAK,GAC/E,KAAK,MAAiC,MAAO24B,wBAAuB9oB,KACpE,KAAK,MAAqB,MAAOuoB,2BAA0BvoB,KAC3D,SAAS,KAAM,IAAI5J,OAAM,wCAA0CwB,KAAO,IAAM9G,IAgBlF,QAAS04B,mBAAkBxpB,KAAMypB,OAChC,GAAIC,YAAa1pB,KAAKtP,CACtB,IAAIgU,MAAO1E,KAAKQ,WAAW,EAC3B,IAAImpB,UAAW3pB,KAAKQ,WAAW,EAC/B,IAAIilB,UAAYj4B,EAAI,CACpB,IAAIw7B,UAAW,CACf,IAAIY,aAAc,EAAGC,OACrB,KAAIr8B,EAAI,EAAGA,GAAKm8B,WAAYn8B,EAAG,CAC9B,GAAIs8B,QAAS9pB,KAAKQ,WAAW,EAC7B,IAAIupB,QAAS/pB,KAAKQ,WAAW,EAC7BilB,OAAMj4B,IAAMs8B,OAAQC,OAASL,YAE9B,GAAIM,SACJ,KAAIx8B,EAAI,EAAGA,GAAKm8B,WAAYn8B,EAAG,CAC9B,GAAGwS,KAAKtP,IAAM+0B,MAAMj4B,GAAG,GAAI,CAC1B,GAAIy8B,MAAO,IACX,IAAGz8B,EAAE,GAAKi8B,MAAO,OAAOA,MAAMhE,MAAMj4B,EAAE,GAAG,IAAIsD,GAC5C,IAAK,GAAgB,GAAGkP,KAAKtP,EAAG,IAAM+0B,MAAMj4B,GAAG,GAAI,CAAEwS,KAAKtP,GAAG,CAAGu5B,MAAO,MAAS,KAChF,KAAK,IAAoB,GAAGjqB,KAAKtP,GAAK+0B,MAAMj4B,GAAG,GAAI,CAAEwS,KAAKtP,EAAE+0B,MAAMj4B,GAAG,EAAIy8B,MAAO,MAAS,KACzF,KAAK,MAAiC,GAAGjqB,KAAKtP,GAAK+0B,MAAMj4B,GAAG,GAAI,CAAEwS,KAAKtP,EAAE+0B,MAAMj4B,GAAG,EAAIy8B,MAAO,MAAS,MAEvG,IAAIR,OAASzpB,KAAKtP,GAAK+0B,MAAMj4B,GAAG,GAAI,CAAEy8B,KAAK,KAAOjqB,MAAKtP,EAAI+0B,MAAMj4B,GAAG,GACpE,GAAGy8B,KAAM,KAAM,IAAI7zB,OAAM,gCAAkCqvB,MAAMj4B,GAAG,GAAK,OAASwS,KAAKtP,EAAI,KAAOlD,GAEnG,GAAGi8B,MAAO,CACT,GAAIS,QAAST,MAAMhE,MAAMj4B,GAAG,GAC5Bw8B,OAAME,OAAOlR,GAAK0P,yBAAyB1oB,KAAMkqB,OAAOp5B,GAAI+Q,IAAI,MAChE,IAAGqoB,OAAOlY,IAAM,UAAWgY,MAAME,OAAOlR,GAAKhrB,OAAOg8B,MAAME,OAAOlR,IAAM,IAAM,IAAMhrB,OAAOg8B,MAAME,OAAOlR,GAAK,MAC5G,IAAGkR,OAAOlR,GAAK,WAAY,OAAOgR,MAAME,OAAOlR,IAC9C,IAAK,GAAGgR,MAAME,OAAOlR,GAAK,IAE1B,KAAK,KACL,IAAK,MAEL,IAAK,KACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,MAEL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KAEL,IAAK,MACL,IAAK,MACL,IAAK,MAAO,KAAM,IAClB,IAAK,OAAO,KAAM,IACjB7rB,OAAO67B,SAAWgB,MAAME,OAAOlR,GAAK,MACrC,SAAS,KAAM,IAAI5iB,OAAM,yBAA2B4zB,MAAME,OAAOlR,SAE5D,CACN,GAAGyM,MAAMj4B,GAAG,KAAO,EAAK,CACvBw7B,SAAWgB,MAAMhB,SAAWN,yBAAyB1oB,KAAM2W,MAC3DxpB,QAAO67B,SACP,IAAGY,cAAgB,EAAG,CACrB,GAAIO,QAASnqB,KAAKtP,CAClBsP,MAAKtP,EAAI+0B,MAAMmE,YAAY,EAC3BC,SAAUd,iBAAiB/oB,KAAKgpB,SAChChpB,MAAKtP,EAAIy5B,YAEJ,IAAG1E,MAAMj4B,GAAG,KAAO,EAAG,CAC5B,GAAGw7B,WAAa,EAAG,CAAEY,WAAap8B,CAAGwS,MAAKtP,EAAI+0B,MAAMj4B,EAAE,GAAG,EAAI,UAC7Dq8B,QAAUd,iBAAiB/oB,KAAKgpB,cAC1B,CACN,GAAIjoB,MAAO8oB,QAAQpE,MAAMj4B,GAAG,GAC5B,IAAIsK,IAEJ,QAAOkI,KAAKA,KAAKtP,IAChB,IAAK,IAAkBsP,KAAKtP,GAAK,CAAGoH,KAAMoxB,WAAWlpB,KAAO,MAC5D,KAAK,IAAmBA,KAAKtP,GAAK,CAAGoH,KAAMqwB,eAAenoB,KAAMA,KAAKA,KAAKtP,EAAE,GAAK,MACjF,KAAK,IAAoBsP,KAAKtP,GAAK,CAAGoH,KAAMqwB,eAAenoB,KAAMA,KAAKA,KAAKtP,EAAE,GAAK,MAClF,KAAK,GAAgBsP,KAAKtP,GAAK,CAAGoH,KAAMkI,KAAKQ,WAAW,EAAG,IAAM,MACjE,KAAK,IAAiBR,KAAKtP,GAAK,CAAGoH,KAAMkI,KAAKQ,WAAW,EAAI,MAC7D,KAAK,GAAgBR,KAAKtP,GAAK,CAAGoH,KAAMkI,KAAKQ,WAAW,EAAG,IAAM,MACjE,KAAK,IAAkBR,KAAKtP,GAAK,CAAGoH,KAAMsyB,UAAUpqB,KAAM,EAAI,MAC9D,KAAK,IAAsBA,KAAKtP,GAAK,CAAGoH,KAAM,GAAIT,MAAKswB,eAAe3nB,MAAQ,MAC9E,SAAS,KAAM,IAAI5J,OAAM,mBAAqB4J,KAAKA,KAAKtP,IAEzDs5B,MAAMjpB,MAAQjJ,MAIjBkI,KAAKtP,EAAIg5B,WAAahlB,IACtB,OAAOslB,OAIR,QAASK,yBAAwB9qB,KAAMkqB,OACtC,GAAIzpB,MAAOT,KAAKqF,OAChB1E,WAAUF,KAAM,EAEhB,IAAIsqB,SAASC,OAAQC,OAAQC,QAASC,OACtC1qB,MAAKS,IAAI,OAAQ,eAEjB,IAAIkqB,MAAO3qB,KAAKQ,WAAW,EAC3B,IAAIoqB,kBAAmB5qB,KAAKQ,WAAW,EACvCR,MAAKS,IAAItB,IAAIjR,MAAMmX,OAAOrD,aAAc,UACxCsoB,SAAUtqB,KAAKQ,WAAW,EAC1B,IAAG8pB,UAAY,GAAKA,UAAY,EAAG,KAAM,uBAAyBA,OAClEC,QAASvqB,KAAKQ,WAAW,GAAKiqB,SAAUzqB,KAAKQ,WAAW,EAExD,IAAG8pB,UAAY,GAAKG,UAAYzqB,KAAKtP,EAAG,KAAM,sBACzC,IAAG45B,UAAY,EAAG,CAAEE,OAASxqB,KAAKQ,WAAW,GAAKkqB,SAAU1qB,KAAKQ,WAAW,GACjF,GAAIqqB,OAAQrB,kBAAkBxpB,KAAMypB,MAEpC,IAAIqB,OAASF,iBAAkBA,iBAC/B,KAAI,GAAIj5B,KAAKk5B,OAAOC,KAAKn5B,GAAKk5B,MAAMl5B,EAEpCm5B,MAAKC,MAAQR,MAEb,IAAGD,UAAY,EAAG,MAAOQ,KACzB,IAAG9qB,KAAKtP,IAAMg6B,QAAS,KAAM,sBAAwB1qB,KAAKtP,EAAI,QAAUg6B,OACxE,IAAIM,MACJ,KAAMA,MAAQxB,kBAAkBxpB,KAAM,MAAS,MAAM6H,IACrD,IAAIlW,IAAKq5B,OAAOF,KAAKn5B,GAAKq5B,MAAMr5B,EAChCm5B,MAAKC,OAASR,OAAQC,OACtB,OAAOM,MAIR,QAASG,YAAWjrB,KAAMtS,QAAUsS,KAAKQ,WAAW9S,OAAS,OAAO,MAEpE,QAASw9B,UAASlrB,KAAMtS,OAAQgjB,IAC/B,GAAI5J,QAAUqkB,OAASnrB,KAAKtP,EAAIhD,MAChC,OAAMsS,KAAKtP,EAAIy6B,OAAQrkB,IAAInE,KAAK+N,GAAG1Q,KAAMmrB,OAASnrB,KAAKtP,GACvD,IAAGy6B,SAAWnrB,KAAKtP,EAAG,KAAM,IAAI0F,OAAM,cACtC,OAAO0Q,KAGR,QAASskB,WAAUprB,KAAMtS,OAAQgjB,IAChC,GAAI5J,QAAUqkB,OAASnrB,KAAKtP,EAAIhD,OAAQD,IAAMuS,KAAKQ,WAAW,EAC9D,OAAM/S,QAAU,EAAGqZ,IAAInE,KAAK+N,GAAG1Q,KAAMmrB,OAASnrB,KAAKtP,GACnD,IAAGy6B,SAAWnrB,KAAKtP,EAAG,KAAM,IAAI0F,OAAM,cACtC,OAAO0Q,KAGR,QAASsjB,WAAUpqB,KAAMtS,QAAU,MAAOsS,MAAKQ,WAAW9S,UAAY,EAEtE,QAAS29B,aAAYrrB,MAAQ,MAAOA,MAAKQ,WAAW,EAAG,KACvD,QAAS8qB,cAAatrB,KAAMtS,QAAU,MAAOw9B,UAASlrB,KAAKtS,OAAO29B,aAKlE,GAAIE,eAAgBnB,SAGpB,SAASoB,WAAUxrB,MAClB,GAAIpP,GAAIoP,KAAKQ,WAAW,GAAI1P,EAAIkP,KAAKQ,WAAW,EAChD,OAAO1P,KAAM,EAAOF,EAAIA,IAAM,EAI/B,QAAS66B,4BAA2BzrB,KAAMtS,OAAQmE,MACjD,GAAI65B,KAAM1rB,KAAKQ,WAAW,EAC1B,IAAImrB,OAAQ,EAAGC,SAAW,WAC1B,IAAIx+B,IAAKP,gBACT,IAAGgF,MAAQA,KAAKg6B,MAAQ,EAAGh/B,iBAAmB,IAC9C,IAAGgF,OAASD,WAAaC,KAAKg6B,OAAS,EAAG,CACzC,GAAIC,WAAY9rB,KAAKQ,WAAW,EAChC,IAAGsrB,UAAW,CAAEH,MAAQ,CAAGC,UAAW,aAEvC,GAAIr+B,GAAIm+B,IAAM1rB,KAAKQ,WAAWkrB,IAAKE,UAAY,EAC/C/+B,kBAAmBO,EACnB,OAAOG,GAIR,QAASw+B,mCAAkC/rB,MAC1C,GAAI5S,IAAKP,gBACTA,kBAAmB,IACnB,IAAI6+B,KAAM1rB,KAAKQ,WAAW,GAAI+S,MAAQvT,KAAKQ,WAAW,EACtD,IAAIsrB,WAAYvY,MAAQ,EAAKyY,OAASzY,MAAQ,EAAK0Y,QAAU1Y,MAAQ,CACrE,IAAIoY,OAAQ,GAAKpY,MAAQ,EACzB,IAAI2Y,MAAMC,QACV,IAAI3jB,KACJ,IAAGyjB,QAASC,KAAOlsB,KAAKQ,WAAW,EACnC,IAAGwrB,OAAQG,SAAWnsB,KAAKQ,WAAW,EACtC,IAAIorB,UAAYrY,MAAQ,EAAO,YAAc,WAC7C,IAAI6Y,KAAMV,MAAQ,EAAI,GAAK1rB,KAAKQ,WAAWkrB,IAAKE,SAChD,IAAGK,QAASjsB,KAAKtP,GAAK,EAAIw7B,IAC1B,IAAGF,OAAQhsB,KAAKtP,GAAKy7B,QACrB3jB,GAAE1X,EAAIs7B,GACN,KAAIH,QAAS,CAAEzjB,EAAE3G,IAAM,MAAQ2G,EAAE1X,EAAI,MAAQ0X,GAAEhP,EAAIgP,EAAE1X,EACrDjE,iBAAmBO,EACnB,OAAOob,GAIR,QAAS6jB,4BAA2BrsB,KAAM0rB,IAAK75B,MAC9C,GAAIgL,OACJ,IAAIivB,WAAY9rB,KAAKQ,WAAW,EAChC,IAAGsrB,YAAY,EAAG,CAAEjvB,OAASmD,KAAKQ,WAAWkrB,IAAK,iBAC7C,CAAE7uB,OAASmD,KAAKQ,WAAWkrB,IAAK,aACrC,MAAO7uB,QAIR,QAASyvB,uBAAsBtsB,KAAMtS,OAAQmE,MAC5C,GAAI65B,KAAM1rB,KAAKQ,WAAW3O,OAASD,WAAaC,KAAKg6B,KAAO,GAAKh6B,KAAKg6B,KAAO,EAAI,EAAI,EACrF,IAAGH,MAAQ,EAAG,CAAE1rB,KAAKtP,GAAK,OAAO,GACjC,MAAO27B,4BAA2BrsB,KAAM0rB,IAAK75B,MAG9C,QAAS06B,wBAAuBvsB,KAAMtS,OAAQmE,MAC7C,GAAGA,KAAKg6B,OAAS,GAAKh6B,KAAKg6B,OAAS,EAAG,MAAOS,uBAAsBtsB,KAAMtS,OAAQmE,KAClF,IAAI65B,KAAM1rB,KAAKQ,WAAW,EAC1B,IAAGkrB,MAAQ,EAAG,CAAE1rB,KAAKtP,GAAK,OAAO,GACjC,MAAOsP,MAAKQ,WAAWkrB,IAAK,aAI7B,GAAIc,mBAAoBnc,SAGxB,IAAIoc,kBAAmB,SAASzsB,KAAMtS,QACrC,GAAID,KAAMuS,KAAKQ,WAAW,GAAI8C,MAAQtD,KAAKtP,CAC3C,IAAIg8B,OAAQ,KACZ,IAAGj/B,IAAM,GAAI,CAEZuS,KAAKtP,GAAKjD,IAAM,EAChB,IAAGuS,KAAKQ,WAAW,MAAQ,mCAAoCksB,MAAQ,IACvE1sB,MAAKtP,EAAI4S,MAEV,GAAIqpB,KAAM3sB,KAAKQ,YAAYksB,MAAMj/B,IAAI,GAAGA,MAAM,EAAG,WAAW6B,QAAQa,KAAK,GACzE,IAAGu8B,MAAO1sB,KAAKtP,GAAK,EACpB,OAAOi8B,KAIR,IAAIC,mBAAoB,SAAS5sB,KAAMtS,QACtC,GAAIm/B,OAAQ7sB,KAAKQ,WAAW,EAC5B,IAAIssB,YAAa9sB,KAAKQ,WAAW,EACjC,IAAIusB,UAAW/sB,KAAKQ,WAAWssB,WAAY,OAC3C,IAAIE,WAAYhtB,KAAKQ,WAAW,EAChC,IAAIysB,eAAgBjtB,KAAKQ,WAAW,EACpC,IAAI0sB,mBAAoBltB,KAAKQ,WAAW,EACxC,IAAG0sB,oBAAsB,EAAG,MAAOH,UAASz9B,QAAQ,MAAM,IAC1D,IAAI69B,oBAAqBntB,KAAKQ,WAAW,EACzC,IAAI4sB,YAAaptB,KAAKQ,WAAW,EACjC,IAAI6sB,aAAcrtB,KAAKQ,WAAW2sB,oBAAoB,EAAG,WAAW79B,QAAQa,KAAK,GACjF,OAAOk9B,aAIR,IAAIC,wBAAyB,SAASttB,KAAMtS,QAC3C,GAAI2W,OAAQrE,KAAKQ,WAAW,GAAK9S,SAAU,EAC3C,QAAO2W,OACN,IAAK,mCAAoC,MAAOooB,kBAAiBzsB,KAAMtS,OACvE,KAAK,mCAAoC,MAAOk/B,mBAAkB5sB,KAAMtS,OACxE,SAAS,KAAM,uBAAyB2W,OAK1C,IAAIkpB,uBAAwB,SAASvtB,KAAMtS,QAC1C,GAAID,KAAMuS,KAAKQ,WAAW,EAC1B,IAAIjT,GAAIyS,KAAKQ,WAAW/S,IAAK,WAAW6B,QAAQa,KAAM,GACtD,OAAO5C,GAIR,IAAIigC,iBAAkB,SAASxtB,KAAMtS,QACpC,GAAI8jB,KAAMxR,KAAKtP,EAAIhD,MACnB,IAAI+/B,MAAOztB,KAAKQ,WAAW,EAC3B,IAAGitB,OAAS,EAAG,KAAM,IAAIr3B,OAAM,+BAAiCq3B,KAChE,IAAIla,OAAQvT,KAAKQ,WAAW,EAC5BR,MAAKtP,GAAK,CACV,IAAIg9B,aAAaC,gBAAiBC,QAASC,WAAYC,SAAUC,KAAMC,QACvE,IAAGza,MAAQ,GAAQma,YAAcH,sBAAsBvtB,KAAMwR,IAAMxR,KAAKtP,EACxE,IAAG6iB,MAAQ,IAAQoa,gBAAkBJ,sBAAsBvtB,KAAMwR,IAAMxR,KAAKtP,EAC5E,KAAI6iB,MAAQ,OAAY,IAAQqa,QAAUL,sBAAsBvtB,KAAMwR,IAAMxR,KAAKtP,EACjF,KAAI6iB,MAAQ,OAAY,EAAQsa,WAAaP,uBAAuBttB,KAAMwR,IAAMxR,KAAKtP,EACrF,IAAG6iB,MAAQ,EAAQua,SAAWP,sBAAsBvtB,KAAMwR,IAAMxR,KAAKtP,EACrE,IAAG6iB,MAAQ,GAAQwa,KAAO/tB,KAAKQ,WAAW,GAC1C,IAAG+S,MAAQ,GAAQya,SAAWrG,eAAe3nB,KAAM,EACnDA,MAAKtP,EAAI8gB,GACT,IAAI2Z,QAAUwC,iBAAiBC,SAASC,UACxC,IAAGC,SAAU3C,QAAQ,IAAI2C,QACzB,QAAQvJ,OAAQ4G,QAIjB,SAAS8C,gBAAejuB,KAAMtS,QAAU,GAAI8L,GAAIwG,KAAKQ,WAAW,GAAIiK,EAAIzK,KAAKQ,WAAW,GAAI+M,EAAIvN,KAAKQ,WAAW,GAAIiO,EAAIzO,KAAKQ,WAAW,EAAI,QAAQhH,EAAEiR,EAAE8C,EAAEkB,GAG1J,QAASyf,eAAcluB,KAAMtS,QAAU,GAAIK,GAAIkgC,eAAejuB,KAAMtS,OAASK,GAAE,GAAK,CAAG,OAAOA,GAM9F,QAASogC,eAAcnuB,KAAMtS,QAC5B,GAAI0gC,IAAKpuB,KAAKQ,WAAW,EACzB,IAAIsT,KAAM9T,KAAKQ,WAAW,EAC1B,IAAI6tB,MAAOruB,KAAKQ,WAAW,EAC3B,QAAQhH,EAAE40B,GAAI39B,EAAEqjB,IAAKua,KAAKA,MAI3B,QAASC,iBAAgBtuB,MACxB,GAAIuuB,IAAKvuB,KAAKQ,WAAW,EACzB,IAAI+S,OAAQvT,KAAKQ,WAAW,EAC5BR,MAAKtP,GAAK,CACV,QAAQkH,KAAM22B,GAAIhb,MAAOA,OAK1B,QAASib,0BAAyBxuB,KAAMtS,OAAQmE,MAAQ,MAAOnE,UAAW,EAAI,GAAK6+B,uBAAuBvsB,KAAMtS,OAAQmE,MAGxH,GAAI48B,cAAe,UAAW,kBAAmB,UACjD,IAAIC,mBAAoBrD,WAGxB,SAASsD,WAAU3uB,KAAMtS,QACxB,GAAIkhC,UAAW5uB,KAAKQ,WAAW,GAAIquB,UAAY7uB,KAAKQ,WAAW,EAAE,KAAMsuB,SAAW9uB,KAAKQ,WAAW,EAAE,IACpG,QAAQouB,SAAUC,UAAWC,UAI9B,QAASC,aAAY/uB,KAAMtS,QAC1B,GAAI2gC,MAAOruB,KAAKQ,WAAW,EAC3B,IAAImU,IAAKH,eAAexU,KAExB,QAAQquB,KAAM1Z,IAIf,QAASqa,gBAAehvB,KAAMtS,QAC7BsS,KAAKtP,GAAK,CAAGhD,SAAU,CACvB,IAAIgD,GAAIsP,KAAKtP,EAAIhD,MACjB,IAAIuhC,SAAUxD,2BAA2BzrB,KAAMtS,OAC/C,IAAIgjB,IAAK1Q,KAAKQ,WAAW,EACzB9P,IAAKsP,KAAKtP,CACV,IAAGggB,KAAOhgB,EAAG,KAAM,iCAAmCA,EAAI,OAASggB,EACnE1Q,MAAKtP,GAAKggB,EACV,OAAOue,SAIR,QAASC,aAAYlvB,KAAMtS,QAC1B,GAAIyhC,SAAUnvB,KAAKQ,WAAW,EAC9B,IAAI4uB,QAASpvB,KAAKQ,WAAW,EAC7B,IAAI6uB,UAAWrvB,KAAKQ,WAAW,EAC/B,IAAI8uB,SAAUtvB,KAAKQ,WAAW,EAC9B,QAAQ3Q,GAAGY,EAAE4+B,SAAU71B,EAAE21B,SAAUtnB,GAAGpX,EAAE6+B,QAAQ91B,EAAE41B,SAInD,QAASG,YAAWvvB,KAAMtS,QACzB,GAAIyhC,SAAUnvB,KAAKQ,WAAW,EAC9B,IAAI4uB,QAASpvB,KAAKQ,WAAW,EAC7B,IAAI6uB,UAAWrvB,KAAKQ,WAAW,EAC/B,IAAI8uB,SAAUtvB,KAAKQ,WAAW,EAC9B,QAAQ3Q,GAAGY,EAAE4+B,SAAU71B,EAAE21B,SAAUtnB,GAAGpX,EAAE6+B,QAAQ91B,EAAE41B,SAInD,GAAII,WAAYD,UAGhB,SAASE,aAAYzvB,KAAMtS,QAC1BsS,KAAKtP,GAAK,CACV,IAAIg/B,IAAK1vB,KAAKQ,WAAW,EACzB,IAAImvB,IAAK3vB,KAAKQ,WAAW,EACzB,IAAI+S,OAAQvT,KAAKQ,WAAW,EAC5BR,MAAKtP,GAAG,EACR,QAAQi/B,GAAID,GAAInc,OAIjB,QAASqc,aAAY5vB,KAAMtS,QAC1B,GAAImJ,OACJmJ,MAAKtP,GAAK,CACVsP,MAAKtP,GAAK,EACVmG,KAAIg5B,YAAc7vB,KAAKQ,WAAW,EAClCR,MAAKtP,GAAK,CACV,OAAOmG,KAIR,QAASi5B,YAAW9vB,KAAMtS,QACzB,GAAImJ,OACJmJ,MAAKtP,GAAK,CACVsP,MAAK+vB,GAAK/vB,KAAKQ,WAAW,EAC1B,OAAO3J,KAIR,GAAIm5B,QACHh9B,GAAMy8B,YACN38B,GAAMud,UACNxd,GAAM,SAASmN,KAAMtS,QAAUsS,KAAKtP,GAAK,IACzCkC,GAAM,SAASoN,KAAMtS,QAAUsS,KAAKtP,GAAK,GACzCiC,GAAM0d,UACN3d,GAAM2d,UACN7d,GAAMo9B,YACNr9B,GAAM,SAASyN,KAAMtS,QAAUsS,KAAKtP,GAAK,IACzC4B,GAAM,SAAS0N,KAAMtS,QAAUsS,KAAKtP,GAAK,IACzC2B,GAAM,SAAS2N,KAAMtS,QAAUsS,KAAKtP,GAAK,IACzC0B,EAAMie,UACN8I,EAAM,SAASnZ,KAAMtS,QAAUsS,KAAKtP,GAAK,GACzCukB,EAAM6a,WACN5W,EAAM,SAASlZ,KAAMtS,QAAUsS,KAAKtP,GAAK,GACzCyB,EAAMke,UACNte,EAAM,SAASiO,KAAMtS,QAAUsS,KAAKtP,GAAK,GAE1C,SAASu/B,eAAcjwB,KAAMtS,OAAQgiC,IACpC,GAAI7/B,GAAImQ,KAAKtP,CACb,IAAIw/B,OACJ,OAAMlwB,KAAKtP,EAAIb,EAAInC,OAAQ,CAC1B,GAAIyiC,IAAKnwB,KAAKQ,WAAW,EACzBR,MAAKtP,GAAG,CACR,KACCw/B,IAAIvtB,KAAKqtB,MAAMG,IAAInwB,KAAMnQ,EAAInC,OAASsS,KAAKtP,IAC1C,MAAMmX,GAAK7H,KAAKtP,EAAIb,EAAInC,MAAQ,OAAOwiC,MAE1C,GAAGlwB,KAAKtP,GAAKb,EAAInC,OAAQsS,KAAKtP,EAAIb,EAAInC,MACtC,OAAOwiC,KAIR,GAAIE,iBAAkB/E,WAKtB,SAASgF,WAAUrwB,KAAMtS,QACxB,GAAIH,KACJA,GAAE+iC,QAAUtwB,KAAKQ,WAAW,EAAI9S,SAAU,CAC1C,QAAOH,EAAE+iC,SACR,IAAK,MACL,IAAK,MACL,IAAK,GAAQ,IAAK,GACjB,KACD,SAAS,KAAM,uBAAyB/iC,EAAE+iC,QAE3CtwB,KAAKQ,WAAW9S,OAChB,OAAOH,GAKR,QAASgjC,oBAAmBvwB,KAAMtS,QACjC,GAAGA,SAAW,EAAG,MAAO,KACxB,IAAIkH,EACJ,KAAIA,EAAEoL,KAAKQ,WAAW,MAAM,KAAQ,KAAM,yBAA2B5L,CACrE,OAAO,MAKR,QAAS47B,mBAAkBxwB,KAAMtS,OAAQmE,MACxC,GAAGA,KAAK4+B,IAAK,CAAEzwB,KAAKtP,GAAKhD,MAAQ,OAAO,GACxC,GAAIgD,GAAIsP,KAAKtP,CAEb,IAAIggC,UAAWpE,sBAAsBtsB,KAAM,EAAGnO,KAC9CmO,MAAKQ,WAAW9S,OAASgD,EAAIsP,KAAKtP,EAClC,OAAOggC,UAIR,QAASC,mBAAkB3wB,KAAMtS,OAAQmE,MACxC,GAAIse,KAAMnQ,KAAKQ,WAAW,EAC1B,IAAIowB,QAAS5wB,KAAKQ,WAAW,IAAM,CACnC,IAAIvE,IAAK+D,KAAKQ,WAAW,EACzB,QAAOvE,IACN,IAAK,GAAGA,GAAK,WAAa,MAC1B,KAAK,GAAGA,GAAK,YAAc,MAC3B,KAAK,GAAGA,GAAK,YAAc,MAC3B,KAAK,GAAGA,GAAK,WAAa,OAE3B,GAAI8E,MAAO0qB,2BAA2BzrB,KAAM,EAAGnO,KAC/C,IAAGkP,KAAKrT,SAAW,EAAGqT,KAAO,QAC7B,QAASoP,IAAIA,IAAK0gB,GAAGD,OAAQ30B,GAAGA,GAAI8E,KAAKA,MAI1C,QAAS+vB,WAAU9wB,KAAMtS,QACxB,GAAIwV,KAAMlD,KAAKQ,WAAW,EAC1B,IAAIuwB,MAAO/wB,KAAKQ,WAAW,EAC3B,IAAI4gB,QACJ,KAAI,GAAI5zB,GAAI,EAAGA,GAAKujC,OAAQvjC,EAAG,CAC9B4zB,KAAKze,KAAKopB,kCAAkC/rB,OAE7CohB,KAAK4P,MAAQ9tB,GAAKke,MAAK6P,OAASF,IAChC,OAAO3P,MAIR,QAAS8P,cAAalxB,KAAMtS,QAC3B,GAAIyjC,UACJA,QAAOC,KAAOpxB,KAAKQ,WAAW,EAC9BR,MAAKtP,GAAKhD,OAAO,CACjB,OAAOyjC,QAKR,QAASE,WAAUrxB,KAAMtS,QACxB,GAAI0gC,IAAKpuB,KAAKQ,WAAW,GAAIsT,IAAM9T,KAAKQ,WAAW,GAAI8wB,IAAMtxB,KAAKQ,WAAW,GAAI+wB,IAAMvxB,KAAKQ,WAAW,EACvGR,MAAKQ,WAAW,EAChB,IAAI+S,OAAQvT,KAAKQ,WAAW,EAC5BR,MAAKQ,WAAW,EAChBR,MAAKQ,WAAW,EAChB,QAAQhH,EAAE40B,GAAI39B,EAAEqjB,IAAK5Q,IAAIouB,IAAIxd,KAK9B,QAAS0d,4BAA2BxxB,KAAMtS,QACzC,GAAI2S,QAASiuB,gBAAgBtuB,KAC7B,IAAGK,OAAOzI,MAAQ,KAAQ,KAAM,yBAA2ByI,OAAOzI,IAClE,IAAI65B,UAAWzxB,KAAKQ,WAAW,EAC/B,OAAOixB,YAAa,EAIrB,GAAIC,wBAAyBzG,UAK7B,SAAS0G,gBAAe3xB,KAAMtS,QAC7BsS,KAAKQ,WAAW,EAChB,OAAOR,MAAKQ,WAAW,GAIxB,QAASoxB,wBAAwB5xB,KAAMtS,QACtC,GAAI2P,GAAI2C,KAAKQ,WAAW,GAAIqxB,KAC5BA,OAAQ7xB,KAAKQ,WAAW,EACxB,IAAIsxB,KAAMC,SAAS10B,EAAE,EAAE20B,QAAQ30B,EAAE,IAAI,EAAE40B,OAAO50B,EAAE,IAAI,EAAE60B,OAAO70B,EAAE,IAAI,EACnE,QAAQy0B,GAAID,OAIb,QAASM,eAAcnyB,KAAMtS,QAC5B,GAAI0kC,KAAMpyB,KAAKQ,WAAW,GAAI6xB,IAAMryB,KAAKQ,WAAW,GAAI8xB,KAAOtyB,KAAKQ,WAAW,GAAI+xB,KAAOvyB,KAAKQ,WAAW,EAC1G,IAAI+S,OAAQvT,KAAKQ,WAAW,GAAIgyB,QAAUxyB,KAAKQ,WAAW,GAAIiyB,UAAYzyB,KAAKQ,WAAW,EAC1F,IAAIkyB,SAAU1yB,KAAKQ,WAAW,GAAImyB,UAAY3yB,KAAKQ,WAAW,EAC9D,QAASoyB,KAAMR,IAAKC,KAAMQ,KAAMP,KAAMC,MAAOO,MAAOvf,MAAOwf,OAAQP,QAClEQ,SAAUP,UAAWQ,SAAUP,QAASQ,SAAUP,WAIpD,QAASQ,YAAWnzB,KAAMtS,OAAQmE,MACjCmO,KAAKtP,GAAK,EACV,IAAIqQ,MAAO0qB,2BAA2BzrB,KAAM,EAAGnO,KAC/C,OAAOkP,MAIR,QAASqyB,gBAAepzB,KAAMtS,QAC7B,GAAIwkB,MAAOic,cAAcnuB,KACzBkS,MAAKmhB,KAAOrzB,KAAKQ,WAAW,EAC5B,OAAO0R,MAIR,QAASohB,aAAYtzB,KAAMtS,OAAQmE,MAClC,GAAIqgB,MAAOic,cAAcnuB,KAAM,EAC/B,IAAI1F,KAAMgyB,sBAAsBtsB,KAAMtS,OAAO,EAAGmE,KAChDqgB,MAAKpa,IAAMwC,GACX,OAAO4X,MAIR,QAASqhB,cAAavzB,KAAMtS,OAAQmE,MACnC,GAAI2hC,MAAOxzB,KAAKQ,WAAW,EAC3B,IAAIizB,QAASlH,uBAAuBvsB,KAAM,EAAGnO,KAC7C,QAAQ2hC,KAAMC,QAIf,QAASC,kBAAiB1zB,KAAMtS,QAC/B,GAAI6H,GAAI7H,SAAW,GAAK,EAAI,CAC5B,IAAI8L,GAAIwG,KAAKQ,WAAWjL,GAAIgN,EAAIvC,KAAKQ,WAAWjL,GAC5C9E,EAAIuP,KAAKQ,WAAW,GAAIgC,EAAIxC,KAAKQ,WAAW,EAChDR,MAAKtP,GAAK,CACV,QAAQb,GAAI2J,EAAEA,EAAG/I,EAAEA,GAAIoX,GAAIrO,EAAE+I,EAAG9R,EAAE+R,IAInC,QAASmxB,UAAS3zB,KAAMtS,QACvB,GAAI0gC,IAAKpuB,KAAKQ,WAAW,GAAIsT,IAAM9T,KAAKQ,WAAW,EACnD,IAAIozB,OAAQ7E,YAAY/uB,KACxB,QAAQxG,EAAE40B,GAAI39B,EAAEqjB,IAAKua,KAAKuF,MAAM,GAAIC,MAAMD,MAAM,IAIjD,QAASE,aAAY9zB,KAAMtS,QAC1B,GAAIy9B,QAASnrB,KAAKtP,EAAIhD,OAAS,CAC/B,IAAI0gC,IAAKpuB,KAAKQ,WAAW,GAAIsT,IAAM9T,KAAKQ,WAAW,EACnD,IAAIuzB,UACJ,OAAM/zB,KAAKtP,EAAIy6B,OAAQ4I,OAAOpxB,KAAKosB,YAAY/uB,MAC/C,IAAGA,KAAKtP,IAAMy6B,OAAQ,KAAM,kBAC5B,IAAI6I,SAAUh0B,KAAKQ,WAAW,EAC9B,IAAGuzB,OAAOrmC,QAAUsmC,QAAUlgB,IAAM,EAAG,KAAM,uBAC7C,QAAQta,EAAE40B,GAAI39B,EAAEqjB,IAAKtR,EAAEwxB,QAASJ,MAAMG,QAIvC,QAASE,mBAAkBj0B,KAAMtS,OAAQm1B,OACxC,GAAIt1B,KACJ,IAAIkhB,GAAIzO,KAAKQ,WAAW,GAAI+M,EAAIvN,KAAKQ,WAAW,EAChD,IAAI/P,GAAIuP,KAAKQ,WAAW,GAAI3P,EAAImP,KAAKQ,WAAW,EAChDjT,GAAE2mC,YAAchY,eAAezrB,GAAK,GACpClD,GAAE4mC,QAAUtjC,EAAI,GAChBtD,GAAE6mC,QAAWvjC,GAAK,EAAK,GACvB,OAAOtD,GAER,QAAS8mC,cAAar0B,KAAMtS,QAAS,MAAOumC,mBAAkBj0B,KAAKtS,OAAO,GAC1E,QAAS4mC,eAAct0B,KAAMtS,QAAS,MAAOumC,mBAAkBj0B,KAAKtS,OAAO,GAG3E,QAAS6mC,UAASv0B,KAAMtS,QACvB,GAAIH,KACJA,GAAE8lB,KAAOrT,KAAKQ,WAAW,EAAIjT,GAAEimC,KAAOxzB,KAAKQ,WAAW,EAAIjT,GAAEgmB,MAAQvT,KAAKQ,WAAW,EACpFjT,GAAEinC,OAAUjnC,EAAEgmB,OAAS,EAAK,CAC5B7lB,SAAU,CACVH,GAAED,KAAO2mC,kBAAkBj0B,KAAMtS,OAAQH,EAAEinC,OAC3C,OAAOjnC,GAIR,QAASknC,YAAWz0B,KAAMtS,QACzBsS,KAAKtP,GAAK,CACV,IAAImG,MAAOmJ,KAAKQ,WAAW,GAAIR,KAAKQ,WAAW,GAC/C,IAAG3J,IAAI,KAAO,EAAGA,IAAI,IACrB,IAAGA,IAAI,KAAO,EAAGA,IAAI,IACrB,IAAGA,IAAI,GAAK,GAAKA,IAAI,GAAK,EAAG,KAAM,gBAAkBA,GACrD,OAAOA,KAIR,QAAS69B,eAAc10B,KAAMtS,QAC5B,GAAIwkB,MAAOic,cAAcnuB,KAAM,EAC/B,IAAIlI,KAAM0zB,UAAUxrB,KAAM,EAC1BkS,MAAKpa,IAAMA,GACXoa,MAAKphB,EAAKgH,MAAQ,MAAQA,MAAQ,MAAS,IAAM,GACjD,OAAOoa,MAIR,QAASyiB,cAAa30B,KAAMtS,QAC3B,GAAIwkB,MAAOic,cAAcnuB,KAAM,EAC/B,IAAI40B,MAAO9f,WAAW9U,KAAM,EAC5BkS,MAAKpa,IAAM88B,IACX,OAAO1iB,MAGR,GAAI2iB,sBAAuBrG,wBAG3B,SAASsG,eAAc90B,KAAMtS,OAAQmE,MACpC,GAAI2f,KAAMxR,KAAKtP,EAAIhD,MACnB,IAAIqnC,MAAO/0B,KAAKQ,WAAW,EAC3B,IAAIkrB,KAAM1rB,KAAKQ,WAAW,EAC1B,IAAIw0B,SACJ,IAAGtJ,KAAM,GAAQA,KAAM,IAAMsJ,SAAW3I,2BAA2BrsB,KAAM0rB,IACzE,IAAIuJ,MAAOj1B,KAAKQ,WAAWgR,IAAMxR,KAAKtP,EACtCmB,MAAKqjC,MAAQxJ,GACb,QAAQA,IAAKqJ,KAAMC,SAAUC,MAI9B,QAASE,kBAAiBn1B,KAAMtS,OAAQmE,MACvC,GAAI0hB,OAAQvT,KAAKQ,WAAW,EAC5B,IAAI40B,KACJ,IAAI7nC,IACH8nC,SAAU9hB,MAAQ,EAClB+hB,YAAc/hB,QAAU,EAAK,EAC7BgiB,UAAYhiB,QAAU,EAAK,EAC3BiiB,KAAOjiB,QAAU,EAAK,EACtBkiB,SAAWliB,QAAU,EAAK,EAC1Bwc,GAAKxc,QAAU,EAAK,KACpBmiB,MAAOniB,QAAU,GAAK,EAEvB,IAAG1hB,KAAKqjC,QAAU,MAAQE,KAAOpG,eAAehvB,KAAMtS,OAAO,EAE7DH,GAAE6nC,KAAOA,MAAQp1B,KAAKQ,WAAW9S,OAAO,EACxC,OAAOH,GAIR,QAASooC,WAAU31B,KAAMtS,OAAQmE,MAChC,GAAGA,KAAKg6B,KAAO,EAAG,MAAOyH,aAAYtzB,KAAMtS,OAAQmE,KACnD,IAAIs5B,QAASnrB,KAAKtP,EAAIhD,MACtB,IAAI6lB,OAAQvT,KAAKQ,WAAW,EAC5B,IAAIo1B,OAAQ51B,KAAKQ,WAAW,EAC5B,IAAIkrB,KAAM1rB,KAAKQ,WAAW,EAC1B,IAAIq1B,KAAM71B,KAAKQ,WAAW,EAC1BR,MAAKtP,GAAK,CACV,IAAIolC,MAAO91B,KAAKQ,WAAW,EAC3BR,MAAKtP,GAAK,CACV,IAAIqQ,MAAOsrB,2BAA2BrsB,KAAM0rB,IAAK75B,KACjD,IAAIkkC,MAAOC,wBAAwBh2B,KAAMmrB,OAASnrB,KAAKtP,EAAGmB,KAAMgkC,IAChE,QACCD,MAAOA,MACPK,KAAMl1B,KACNg1B,KAAMA,MAKR,QAASG,mBAAkBl2B,KAAMtS,OAAQmE,MACxC,GAAGA,KAAKg6B,KAAO,EAAG,MAAOJ,4BAA2BzrB,KAAMtS,OAAQmE,KAClE,IAAItE,GAAI69B,UAAUprB,KAAKtS,OAAOihC,UAC9B,IAAI7zB,MACJ,IAAGjJ,KAAKqjC,QAAU,KAAQ,CACzB,IAAI,GAAI1nC,GAAI,EAAGA,GAAKD,EAAEG,SAAUF,EAAGsN,GAAG6H,KAAK9Q,KAAKskC,OAAO5oC,EAAEC,GAAG,IAC5D,OAAOsN,QAEH,OAAOvN,GAIb,QAAS6oC,eAAcp2B,KAAMtS,OAAQmE,MACpC,GAAIwkC,KAAM9G,WAAWvvB,KAAM,EAC3BA,MAAKtP,GACL,IAAI4lC,MAAOt2B,KAAKQ,WAAW,EAC3B9S,SAAU,CACV,QAAQ6oC,0BAA0Bv2B,KAAMtS,OAAQmE,MAAOykC,MAIxD,QAASE,aAAYx2B,KAAMtS,OAAQmE,MAClC,GAAIwkC,KAAM7G,UAAUxvB,KAAM,EAC1BA,MAAKtP,GAAK,CAAGhD,SAAU,EACvB,QAAQ2oC,IAAKI,yBAAyBz2B,KAAMtS,OAAQmE,KAAMwkC,MAI3D,QAASK,mBAAkB12B,KAAMtS,QAChC,GAAIipC,aAAc32B,KAAKQ,WAAW,KAAO,CACzC,IAAIo2B,qBAAsB52B,KAAKQ,WAAW,KAAO,CACjD,IAAIq2B,kBAAmB72B,KAAKQ,WAAW,EACvC,QAAQm2B,YAAaC,oBAAqBC,kBAI3C,QAASC,cAAa92B,KAAMtS,OAAQmE,MACnC,GAAGA,KAAKg6B,KAAO,EAAG,MAClB,IAAIkL,KAAM/2B,KAAKQ,WAAW,GAAIsT,IAAM9T,KAAKQ,WAAW,EACpD,IAAI+S,OAAQvT,KAAKQ,WAAW,GAAIw2B,MAAQh3B,KAAKQ,WAAW,EACxD,IAAIy2B,UAAW1K,uBAAuBvsB,KAAM,EAAGnO,KAC/C,IAAGA,KAAKg6B,KAAO,EAAG7rB,KAAKQ,WAAW,EAClC,SAAShH,EAAEu9B,IAAItmC,EAAEqjB,KAAMmjB,SAAUD,MAAOzjB,OAIzC,QAAS2jB,YAAWl3B,KAAMtS,OAAQmE,MAEjC,MAAOilC,cAAa92B,KAAMtS,OAAQmE,MAInC,QAASslC,kBAAiBn3B,KAAMtS,QAC/B,GAAI0pC,UACJ,IAAIC,MAAOr3B,KAAKQ,WAAW,EAC3B,OAAO62B,OAAQD,OAAOz0B,KAAKusB,YAAYlvB,KAAKtS,QAC5C,OAAO0pC,QAIR,QAASE,WAAUt3B,KAAMtS,QACxB,GAAI6pC,KAAM9H,YAAYzvB,KAAM,GAC5B,IAAIkwB,KAAMD,cAAcjwB,KAAMtS,OAAO,GAAI6pC,IAAI,GAC7C,QAASA,IAAKA,IAAKpH,GAAGD,KAIvB,QAASsH,WAAUx3B,KAAMtS,OAAQmE,MAChC,GAAIhC,GAAImQ,KAAKtP,CACd,KACCsP,KAAKtP,GAAK,CACV,IAAIg/B,KAAM79B,KAAK4lC,UAAUF,KAAK,EAAE,KAAKA,IAAI,EACzC,IAAIG,YACJ,KAAI,EAAE,EAAE,EAAE,GAAG,GAAG,IAAInoC,QAAQmgC,MAAQ,EAAG1vB,KAAKtP,GAAK,MAC5CgnC,aAAclL,kBAAkBxsB,KAAM,EAAGnO,KAC9C,IAAI8lC,SAAU33B,KAAKQ,WAAW,EAC9B,IAAIo3B,QAAS53B,KAAKQ,WAAW,EAC7B,IAAIq3B,WAAYzH,gBAAgBpwB,KAAM,EACtC,IAAIvS,KAAMuS,KAAKQ,WAAW,EAC1BR,MAAKtP,GAAKjD,GAGV,IAAIqqC,OAAQ,EACZ,KAAI,GAAItqC,GAAI,EAAGA,EAAIwS,KAAK2P,KAAKjiB,OAAO,IAAKF,EAAG,CAC3C,GAAGwS,KAAKtP,EAAEb,GAAKmQ,KAAK2P,KAAKniB,GAAI,KAAM,0BACnC,IAAIuqC,KAAM/3B,KAAKA,KAAKtP,EACpB,IAAII,GAAIu7B,2BAA2BrsB,KAAMA,KAAK2P,KAAKniB,EAAE,GAAGwS,KAAK2P,KAAKniB,GAAG,EACrEsqC,QAAShnC,CACT,IAAGgnC,MAAMpqC,SAAWqqC,IAAMJ,QAAU,EAAEA,SAAU,MAEjD,GAAGG,MAAMpqC,SAAWiqC,SAAWG,MAAMpqC,SAAWiqC,QAAQ,EAAG,CAC1D,KAAM,YAAcA,QAAU,OAASG,MAAMpqC,OAG9CsS,KAAKtP,EAAIb,EAAInC,MAQb,QAASoD,EAAGgnC,OACX,MAAMjwB,GAAK7H,KAAKtP,EAAIb,EAAInC,MAAQ,QAASoD,EAAGgnC,OAAO,KAIrD,GAAIE,aAAc,SAASh4B,KAAMtS,QAChC,GAAI2oC,KAAMnH,YAAYlvB,KAAM,EAC5BA,MAAKtP,GAAK,EACV,IAAIunC,OAAQzK,gBAAgBxtB,KAAMtS,OAAO,GACzC,QAAQ2oC,IAAK4B,OAId,IAAIC,oBAAqB,SAASl4B,KAAMtS,QACvC,GAAI8jB,KAAMxR,KAAKtP,EAAIhD,MACnBsS,MAAKQ,WAAW,EAChB,IAAI61B,KAAMnH,YAAYlvB,KAAM,EAC5B,IAAIm4B,WAAYn4B,KAAKQ,YAAY9S,OAAO,IAAI,EAAG,YAC/CyqC,WAAYA,UAAU7oC,QAAQa,KAAK,GACnC,QAAQkmC,IAAK8B,WAId,SAASC,eAAcp4B,KAAMtS;AAC5B,GAAIH,MAAQsD,CACZA,GAAImP,KAAKQ,WAAW,EAAIjT,GAAE,GAAKssB,YAAYhpB,IAAMA,CACjDA,GAAImP,KAAKQ,WAAW,EAAIjT,GAAE,GAAKssB,YAAYhpB,IAAMA,CACjD,OAAOtD,GAIR,QAAS8qC,kBAAiBr4B,KAAMtS,QAC/B,GAAI4qC,KAAMt4B,KAAKQ,WAAW,EAC1B,IAAIjT,KACJ,OAAM+qC,OAAM,EAAG/qC,EAAEoV,KAAKurB,cAAcluB,KAAM,GAC1C,OAAOzS,GAIR,QAASgrC,eAAcv4B,KAAMtS,QAC5B,GAAI4qC,KAAMt4B,KAAKQ,WAAW,EAC1B,IAAIjT,KACJ,OAAM+qC,OAAM,EAAG/qC,EAAEoV,KAAKurB,cAAcluB,KAAM,GAC1C,OAAOzS,GAIR,QAASirC,aAAYx4B,KAAMtS,QAC1BsS,KAAKtP,GAAK,CACV,IAAInD,IAAKkrC,KAAK,EAAGC,IAAI,EACrBnrC,GAAEkrC,KAAOz4B,KAAKQ,WAAW,EACzBjT,GAAEmrC,IAAM14B,KAAKQ,WAAW,EACxB,OAAOjT,GAIR,GAAIorC,aAActoB,SAClB,IAAIuoB,gBAAiBvoB,SAErB,IAAIwoB,eAAgBxoB,SAEpB,IAAIyoB,eAAgBzoB,SAGpB,IAAI0oB,cAAe3O,SACnB,IAAI4O,aAAc7K,aAClB,IAAI8K,oBAAqBnkB,UACzB,IAAIokB,2BAA4B7N,WAChC,IAAI8N,iBAAkB9N,WACtB,IAAI+N,iBAAkBtkB,UACtB,IAAIukB,gBAAiBjP,SACrB,IAAIkP,gBAAiBjO,WACrB,IAAIkO,qBAAsBnP,SAC1B,IAAIoP,mBAAoBvO,UACxB,IAAIwO,sBAAuBrP,SAC3B,IAAIsP,gBAAiBrO,WACrB,IAAIsO,gBAAiBvP,SACrB,IAAIwP,gBAAiBxP,SACrB,IAAIyP,mBAAoBxO,WACxB,IAAIyO,WAAY7O,UAChB,IAAI8O,eAAgB9O,UACpB,IAAI+O,WAAY/O,UAChB,IAAIgP,kBAAmBhP,UACvB,IAAIiP,eAAgBjP,UACpB,IAAIkP,aAAc9O,WAClB,IAAI+O,cAAevF,oBACnB,IAAIwF,eAAgBhP,WACpB,IAAIiP,eAAgBlQ,SACpB,IAAImQ,cAAe1F,oBACnB,IAAI2F,eAAgB9L,iBACpB,IAAI+L,oBAAqBxP,UACzB,IAAIyP,kBAAmB5lB,UACvB,IAAI6lB,WAAY1P,UAChB,IAAI2P,kBAAmBxQ,SACvB,IAAIyQ,gBAAiBxP,WACrB,IAAIyP,iBAAkB1Q,SACtB,IAAI2Q,mBAAoB3Q,SACxB,IAAI4Q,iBAAkB3P,WACtB,IAAI4P,gBAAiB7Q,SACrB,IAAI8Q,oBAAqB7P,WACzB,IAAI8P,eAAgB/Q,SACpB,IAAIgR,kBAAmBhR,SACvB,IAAIiR,mBAAoBvmB,UACxB,IAAIwmB,eAAgBhQ,YACpB,IAAIiQ,uBAAwBnR,SAC5B,IAAIoR,WAAYlQ,YAChB,IAAImQ,cAAenP,qBACnB,IAAIoP,cAAetR,SACnB,IAAIuR,iBAAkB7mB,UACtB,IAAI8mB,gBAAiBxR,SACrB,IAAIyR,eAAgBzR,SACpB,IAAI0R,kBAAmB1R,SACvB,IAAI2R,oBAAqB1rB,SAIzB,IAAI2rB,0BAA2B3rB,SAC/B,IAAI4rB,4BAA6B5rB,SACjC,IAAI6rB,iBAAkB7rB,SACtB,IAAI8rB,gBAAiB9rB,SACrB,IAAI+rB,YAAa/rB,SACjB,IAAIgsB,WAAYhsB,SAChB,IAAIisB,YAAajsB,SACjB,IAAIksB,eAAgBlsB,SACpB,IAAImsB,gBAAiBnsB,SACrB,IAAIosB,WAAYpsB,SAChB,IAAIqsB,WAAYrsB,SAChB,IAAIssB,mBAAoBtsB,SACxB,IAAIusB,gBAAiBvsB,SACrB,IAAIwsB,gBAAiBxsB,SACrB,IAAIysB,YAAazsB,SACjB,IAAI0sB,cAAe1sB,SACnB,IAAI2sB,YAAa3sB,SACjB,IAAI4sB,YAAa5sB,SACjB,IAAI6sB,WAAY7sB,SAChB,IAAI8sB,cAAe9sB,SACnB,IAAI+sB,mBAAoB/sB,SACxB,IAAIgtB,kBAAmBhtB,SACvB,IAAIitB,sBAAuBjtB,SAC3B,IAAIktB,kBAAmBltB,SACvB,IAAImtB,aAAcntB,SAClB,IAAIotB,eAAgBptB,SACpB,IAAIqtB,gBAAiBrtB,SACrB,IAAIstB,cAAettB,SACnB,IAAIutB,YAAavtB,SACjB,IAAIwtB,YAAaxtB,SACjB,IAAIytB,aAAcztB,SAClB,IAAI0tB,YAAa1tB,SACjB,IAAI2tB,YAAa3tB,SACjB,IAAI4tB,gBAAiB5tB,SACrB,IAAI6tB,iBAAkB7tB,SACtB,IAAI8tB,gBAAiB9tB,SACrB,IAAI+tB,YAAa/tB,SACjB,IAAIguB,YAAahuB,SACjB,IAAIiuB,aAAcjuB,SAClB,IAAIkuB,aAAcluB,SAClB,IAAImuB,aAAcnuB,SAClB,IAAIouB,aAAcpuB,SAClB,IAAIquB,aAAcruB,SAClB,IAAIsuB,gBAAiBtuB,SACrB,IAAIuuB,aAAcvuB,SAClB,IAAIwuB,aAAcxuB,SAClB,IAAIyuB,aAAczuB,SAClB,IAAI0uB,kBAAmB1uB,SACvB,IAAI2uB,cAAe3uB,SACnB,IAAI4uB,cAAe5uB,SACnB,IAAI6uB,kBAAmB7uB,SACvB,IAAI8uB,cAAe9uB,SACnB,IAAI+uB,aAAc/uB,SAClB,IAAIgvB,iBAAkBhvB,SACtB,IAAIivB,gBAAiBjvB,SACrB,IAAIkvB,oBAAqBlvB,SACzB,IAAImvB,qBAAsBnvB,SAC1B,IAAIovB,YAAapvB,SACjB,IAAIqvB,aAAcrvB,SAClB,IAAIsvB,uBAAwBtvB,SAC5B,IAAIuvB,kBAAmBvvB,SACvB,IAAIwvB,2BAA4BxvB,SAChC,IAAIyvB,oBAAqBzvB,SACzB,IAAI0vB,cAAe1vB,SACnB,IAAI2vB,YAAa3vB,SACjB,IAAI4vB,cAAe5vB,SACnB,IAAI6vB,aAAc7vB,SAClB,IAAI8vB,aAAc9vB,SAClB,IAAI+vB,cAAe/vB,SACnB,IAAIgwB,gBAAiBhwB,SACrB,IAAIiwB,cAAejwB,SACnB,IAAIkwB,cAAelwB,SACnB,IAAImwB,gBAAiBnwB,SACrB,IAAIowB,cAAepwB,SACnB,IAAIqwB,iBAAkBrwB,SACtB,IAAIswB,cAAetwB,SACnB,IAAIuwB,iBAAkBvwB,SACtB,IAAIwwB,eAAgBxwB,SACpB,IAAIywB,kBAAmBzwB,SACvB,IAAI0wB,mBAAoB1wB,SACxB,IAAI2wB,cAAe3wB,SACnB,IAAI4wB,eAAgB5wB,SACpB,IAAI6wB,gBAAiB7wB,SACrB,IAAI8wB,iBAAkB9wB,SACtB,IAAI+wB,kBAAmB/wB,SACvB,IAAIgxB,oBAAqBhxB,SACzB,IAAIixB,kBAAmBjxB,SACvB,IAAIkxB,sBAAuBlxB,SAC3B,IAAImxB,oBAAqBnxB,SACzB,IAAIoxB,mBAAoBpxB,SACxB,IAAIqxB,kBAAmBrxB,SACvB,IAAIsxB,kBAAmBtxB,SACvB,IAAIuxB,YAAavxB,SACjB,IAAIwxB,YAAaxxB,SACjB,IAAIyxB,aAAczxB,SAClB,IAAI0xB,eAAgB1xB,SACpB,IAAI2xB,eAAgB3xB,SACpB,IAAI4xB,gBAAiB5xB,SACrB,IAAI6xB,eAAgB7xB,SACpB,IAAI8xB,cAAe9xB,SACnB,IAAI+xB,cAAe/xB,SACnB,IAAIgyB,iBAAkBhyB,SACtB,IAAIiyB,sBAAuBjyB,SAC3B,IAAIkyB,oBAAqBlyB,SACzB,IAAImyB,mBAAoBnyB,SACxB,IAAIoyB,WAAYpyB,SAChB,IAAIqyB,eAAgBryB,SACpB,IAAIsyB,UAAWtyB,SACf,IAAIuyB,YAAavyB,SACjB,IAAIwyB,eAAgBxyB,SACpB,IAAIyyB,WAAYzyB,SAChB,IAAI0yB,mBAAoBzW,qBACxB,IAAI0W,iBAAkB3yB,SACtB,IAAI4yB,kBAAmB5yB,SACvB,IAAI6yB,UAAW7yB,SACf,IAAI8yB,aAAc9yB,SAClB,IAAI+yB,aAAc/yB,SAClB,IAAIgzB,eAAgBhzB,SACpB,IAAIizB,uBAAwBjzB,SAC5B,IAAIkzB,cAAelzB,SACnB,IAAImzB,gBAAiBnzB,SACrB,IAAIozB,kBAAmBpzB,SACvB,IAAIqzB,iBAAkBrzB,SACtB,IAAIszB,cAAetzB,SACnB,IAAIuzB,YAAavzB,SACjB,IAAIwzB,YAAaxzB,SACjB,IAAIyzB,gBAAiBzzB,SACrB,IAAI0zB,iBAAkB1zB,SACtB,IAAI2zB,YAAa3zB,SACjB,IAAI4zB,gBAAiB5zB,SACrB,IAAI6zB,YAAa7zB,SACjB,IAAI8zB,cAAe9zB,SACnB,IAAI+zB,eAAgB/zB,SACpB,IAAIg0B,iBAAkBh0B,SACtB,IAAIi0B,mBAAoBj0B,SACxB,IAAIk0B,oBAAqBl0B,SACzB,IAAIm0B,oBAAqBn0B,SACzB,IAAIo0B,kBAAmBp0B,SACvB,IAAIq0B,kBAAmBr0B,SACvB,IAAIs0B,gBAAiBt0B,SACrB,IAAIu0B,mBAAoBv0B,SACxB,IAAIw0B,iBAAkBx0B,SACtB,IAAIy0B,cAAez0B,SACnB,IAAI00B,aAAc10B,SAClB,IAAI20B,kBAAmB30B,SACvB,IAAI40B,sBAAuB50B,SAC3B,IAAI60B,mBAAoB70B,SACxB,IAAI80B,gBAAiB90B,SACrB,IAAI+0B,eAAgB/0B,SACpB,IAAIg1B,cAAeh1B,SACnB,IAAIi1B,aAAcj1B,SAClB,IAAIk1B,iBAAkBl1B,SACtB,IAAIm1B,YAAan1B,SACjB,IAAIo1B,kBAAmBp1B,SACvB,IAAIq1B,0BAA2Br1B,SAC/B,IAAIs1B,iBAAkBt1B,SACtB,IAAIu1B,iBAAkBv1B,SACtB,IAAIw1B,iBAAkBx1B,SACtB,IAAIy1B,sBAAuBz1B,SAC3B,IAAI01B,qBAAsB11B,SAC1B,IAAI21B,aAAc31B,SAClB,IAAI41B,cAAe51B,SACnB,IAAI61B,iBAAkB71B,SACtB,IAAI81B,iBAAkB91B,SACtB,IAAI+1B,YAAa/1B,SACjB,IAAIg2B,YAAah2B,SACjB,IAAIi2B,oBAAqBj2B,SACzB,IAAIk2B,qBAAsBl2B,SAC1B,IAAIm2B,eAAgBn2B,SACpB,IAAIo2B,cAAep2B,SACnB,IAAIq2B,gBAAiBr2B,SACrB,IAAIs2B,cAAet2B,SACnB,IAAIu2B,eAAgBv2B,SACpB,IAAIw2B,cAAex2B,SACnB,IAAIy2B,WAAYz2B,SAChB,IAAI02B,WAAY12B,SAChB,IAAI22B,WAAY32B,SAChB,IAAI42B,mBAAoB52B,SACxB,IAAI62B,kBAAmB72B,SACvB,IAAI82B,yBAA0B92B,SAC9B,IAAI+2B,mBAAoB/2B,SACxB,IAAIg3B,eAAgBh3B,SACpB,IAAIi3B,gBAAiBj3B,SACrB,IAAIk3B,mBAAoBl3B,SACxB,IAAIm3B,eAAgBn3B,SACpB,IAAIo3B,mBAAoBp3B,SACxB,IAAIq3B,oBAAqBr3B,SACzB,IAAIs3B,mBAAoBt3B,SACxB,IAAIu3B,gBAAiBv3B,SACrB,IAAIw3B,wBAAyBx3B,SAC7B,IAAIy3B,wBAAyBz3B,SAC7B,IAAI03B,uBAAwB13B,SAC5B,IAAI23B,sBAAuB33B,SAC3B,IAAI43B,oBAAqB53B,SACzB,IAAI63B,aAAc73B,SAClB,IAAI83B,aAAc93B,SAClB,IAAI+3B,cAAe/3B,SACnB,IAAIg4B,kBAAmBh4B,SACvB,IAAIi4B,kBAAmBj4B,SACvB,IAAIk4B,oBAAqBl4B,SACzB,IAAIm4B,kBAAmBn4B,SACvB,IAAIo4B,iBAAkBp4B,SACtB,IAAIq4B,qBAAsBr4B,SAC1B,IAAIs4B,kBAAmBt4B,SACvB,IAAIu4B,mBAAoBv4B,SACxB,IAAIw4B,cAAex4B,SACnB,IAAIy4B,kBAAmBz4B,SACvB,IAAI04B,WAAY14B,SAChB,IAAI24B,YAAa34B,SACjB,IAAI44B,WAAY54B,SAChB,IAAI64B,YAAa74B,SACjB,IAAI84B,eAAgB94B,SACpB,IAAI+4B,eAAgB/4B,SACpB,IAAIg5B,YAAah5B,SACjB,IAAIi5B,YAAaj5B,SACjB,IAAIk5B,kBAAmBl5B,SACvB,IAAIm5B,mBAAoBn5B,SACxB,IAAIo5B,gBAAiBp5B,SACrB,IAAIq5B,eAAgBr5B,SACpB,IAAIs5B,mBAAoBt5B,SACxB,IAAIu5B,YAAav5B,SACjB,IAAIw5B,kBAAmBx5B,SACvB,IAAIy5B,aAAcz5B,SAClB,IAAI05B,aAAc15B,SAClB,IAAI25B,WAAY35B,SAChB,IAAI45B,gBAAiB55B,SACrB,IAAI65B,eAAgB75B,SACpB,IAAI85B,YAAa95B,SACjB,IAAI+5B,eAAgB/5B,SACpB,IAAIg6B,aAAch6B,SAClB,IAAIi6B,YAAaj6B,SACjB,IAAIk6B,iBAAkBl6B,SACtB,IAAIm6B,kBAAmBn6B,SACvB,IAAIo6B,uBAAwBp6B,SAC5B,IAAIq6B,gBAAiBr6B,SACrB,IAAIs6B,gBAAiBt6B,SACrB,IAAIu6B,gBAAiBv6B,SACrB,IAAIw6B,gBAAiBx6B,SACrB,IAAIy6B,iBAAkBz6B,SACtB,IAAI06B,mBAAoB16B,SACxB,IAAI26B,kBAAmB36B,SACvB,IAAI46B,WAAY56B,SAChB,IAAI66B,cAAe76B,SACnB,IAAI86B,YAAa96B,SACjB,IAAI+6B,oBAAqB/6B,SACzB,IAAIg7B,cAAeh7B,SACnB,IAAIi7B,uBAAwBj7B,SAC5B,IAAIk7B,WAAYl7B,SAChB,IAAIm7B,cAAen7B,SACnB,IAAIo7B,cAAep7B,SACnB,IAAIq7B,WAAYr7B,SAChB,IAAIs7B,kBAAmBt7B,SACvB,IAAIu7B,eAAgBv7B,SACpB,IAAIw7B,gBAAiBx7B,SACrB,IAAIy7B,oBAAqBz7B,SACzB,IAAI07B,YAAa17B,SAGjB,SAAS27B,mBAAkBhsC,MAC1B,GAAIvS,KAAMuS,KAAKQ,WAAW,EAC1B,OAAOR,MAAKQ,WAAW/S,IAAK,aAI7B,QAASw+C,gBAAejsC,KAAMtS,OAAQmE,MACrC,GAAIqgB,MAAOic,cAAcnuB,KAAM,KAC7BA,KAAKtP,CACP,IAAI4J,KAAMiyB,uBAAuBvsB,KAAMtS,OAAO,EAAGmE,KACjDqgB,MAAKpa,IAAMwC,GACX,OAAO4X,MAGR,QAASg6B,gBAAelsC,KAAMtS,OAAQmE,MACrC,GAAIqgB,MAAOic,cAAcnuB,KAAM,KAC7BA,KAAKtP,CACP,IAAIy7C,KAAMr3B,WAAW9U,KAAM,EAC3BkS,MAAKpa,IAAMq0C,GACX,OAAOj6B,MAIR,GAAIk6B,QACHr6C,EAAM,KACNC,EAAK,MACLC,EAAK,MACLo6C,GAAK,IACLC,IAAO,IACPC,IAAO,IACPC,IAAM,KACNC,IAAO,IACPC,IAAO,IACPC,IAAM,KACNC,IAAM,KACNC,IAAM,KACNC,IAAM,KACNC,IAAM,KACNC,IAAM,KACNC,IAAM,KACNC,IAAO,IACPC,IAAM,KACN53B,IAAM,KACN63B,GAAM,KAIP,IAAIC,UAAW,QAAUC,oBACxB,GAAIC,QAAShjC,SAAS,KAAMijC,QAAUjjC,SAAS,OAAQkjC,OAAS,OAAQC,KAAO,QAASC,QAAU,OAElG,IAAIC,WAAY,QAASA,WAAUC,IAAKC,MAAOC,OAC9C,GAAIC,SAAW5gD,GAAK,KACpB,IAAI4J,GAAI62C,IAAI/0C,MAAMoP,UAAW1a,EAAI,CACjC,IAAGwJ,EAAG,KAAKxJ,GAAGwJ,EAAEtJ,SAAUF,EAAG,CAC5B,GAAImE,GAAI0W,YAAYrR,EAAExJ,GACtB,QAAOmE,EAAE,IAGR,IAAK,YAAa,KAGlB,KAAK,UAAW,KAGhB,KAAK,UAEL,IAAK,YAAa,KAGlB,KAAK,WACJ,GAAGA,EAAEmG,KAAO,IAAK,KACjB1K,IAAKg/C,MAAMxyC,SAASjI,EAAEmG,IAAK,IAC3B,MAGD,KAAK,WAEL,IAAK,aAAc,KAGnB,KAAK,SAAUk2C,KAAKjtC,KAAOpP,EAAEmG,GAAK,MAGlC,KAAK,MAAOk2C,KAAKx9B,GAAK7e,EAAEmG,GAAK,MAG7B,KAAK,UACJ,IAAInG,EAAEmG,IAAK,KAEZ,KAAK,YAAak2C,KAAKC,OAAS,CAAG,MACnC,KAAK,YAAa,KAGlB,KAAK,KACJ,IAAIt8C,EAAEmG,IAAK,KAEZ,KAAK,OAAQk2C,KAAKj3C,EAAI,CAAG,MACzB,KAAK,OAAQ,KAGb,KAAK,KACJ,IAAIpF,EAAEmG,IAAK,KAEZ,KAAK,OAAQk2C,KAAKzgC,EAAI,CAAG,MACzB,KAAK,OAAQ,KAGb,KAAK,KACJ,IAAI5b,EAAEmG,IAAK,KAEZ,KAAK,OAAQk2C,KAAKxgD,EAAI,CAAG,MACzB,KAAK,OAAQ,KAGb,KAAK,SACJ,GAAGmE,EAAEu8C,IAAKF,KAAK5pC,MAAQzS,EAAEu8C,IAAI9/C,OAAO,EAAE,EACtC,MAGD,KAAK,UAAW4/C,KAAKG,OAASx8C,EAAEmG,GAAK,MAGrC,KAAK,aAAc,KAGnB,KAAK,UAAW,KAEhB,SACC,GAAGnG,EAAE,GAAGhE,WAAW,KAAO,GAAI,KAAM,4BAA8BgE,EAAE,IAIvE,GAAIkxB,SACJ,IAAGmrB,KAAKzgC,EAAGsV,MAAMlgB,KAAK,qBACtB,IAAGqrC,KAAKxgD,EAAGq1B,MAAMlgB,KAAK,sBACtBmrC,OAAMnrC,KAAK,gBAAkBkgB,MAAMpX,KAAK,IAAM,KAC9CsiC,OAAMprC,KAAK,UACX,OAAOvV,IAIR,SAASghD,SAAQ50C,GAChB,GAAI60C,WAAY,MAEhB,IAAIv9C,GAAI0I,EAAEV,MAAMy0C,QAASngD,GAAK,KAC9B,KAAI6Y,MAAMnV,GAAI,MAAO,EACrBu9C,OAAM,GAAKv9C,EAAE,EAEb,IAAI+8C,KAAMr0C,EAAEV,MAAM00C,QAClB,IAAGvnC,MAAM4nC,KAAMzgD,GAAKwgD,UAAUC,IAAI,GAAIQ,MAAM,GAAIA,MAAM,GAEtD,OAAOA,OAAM,GAAG5iC,KAAK,IAAM4iC,MAAM,GAAG/+C,QAAQq+C,QAAQ,SAAWU,MAAM,GAAG5iC,KAAK,IAE9E,MAAO,SAAS4hC,UAASiB,IACxB,MAAOA,IAAGh/C,QAAQm+C,OAAO,IAAI39C,MAAM49C,MAAMl/C,IAAI4/C,SAAS3iC,KAAK,OAK7D,IAAI8iC,UAAW,wBAAyBC,SAAW,KACnD,SAASC,UAAS1gD,EAAG8D,MACpB,GAAI68C,MAAO78C,KAAOA,KAAK88C,SAAW,IAClC,IAAInmC,KACJ,KAAIza,EAAG,MAAO,KACd,IAAI4D,EAEJ,IAAG5D,EAAEJ,WAAW,KAAO,IAAK,CAC3B6a,EAAE1X,EAAIkZ,SAASZ,YAAYrb,EAAEK,OAAOL,EAAEwB,QAAQ,KAAK,GAAGO,MAAM,SAAS,IACrE0Y,GAAEhP,EAAIzL,CACN,IAAG2gD,KAAMlmC,EAAEyC,EAAIzC,EAAE1X,MAGb,IAAIa,EAAI5D,EAAE+K,MAAM01C,UAAY,CAChChmC,EAAEhP,EAAIzL,CACNya,GAAE1X,EAAIkZ,SAASZ,YAAYrb,EAAE+K,MAAMy1C,UAAU9iC,KAAK,IAAInc,QAAQ4Y,SAAS,KACvE,IAAGwmC,KAAMlmC,EAAEyC,EAAIoiC,SAASt/C,GAIzB,MAAOya,GAIR,GAAIomC,OAAQ,8BACZ,IAAIC,OAAQ,mBACZ,IAAIC,OAAQ,oBACZ,SAASC,eAAczhD,KAAMuE,MAC5B,GAAIhC,MAAQmI,EAEZ,IAAI4qB,KAAMt1B,KAAKwL,MAAM81C,MACrB,IAAG3oC,MAAM2c,KAAM,CACd5qB,GAAK4qB,IAAI,GAAGtzB,QAAQu/C,MAAM,IAAI/+C,MAAMg/C,MACpC,KAAI,GAAIthD,GAAI,EAAGA,GAAKwK,GAAGtK,SAAUF,EAAG,CACnC,GAAID,GAAIkhD,SAASz2C,GAAGxK,GAAIqE,KACxB,IAAGtE,GAAK,KAAMsC,EAAEA,EAAEnC,QAAUH,EAE7Bq1B,IAAMva,YAAYua,IAAI,GAAK/yB,GAAEmhC,MAAQpO,IAAIosB,KAAOn/C,GAAEohC,OAASrO,IAAIqsB,YAEhE,MAAOp/C,GAGR2zB,KAAK0rB,IAAM,mFACX,IAAIC,cAAe,kBACnB,SAASC,eAAcxsB,IAAK/wB,MAC3B,IAAIA,KAAKw9C,QAAS,MAAO,EACzB,IAAI9hD,IAAKue,WACTve,GAAEA,EAAEG,QAAWge,UAAU,MAAO,MAC/B0W,MAAOrW,MAAMS,KAAK,GAClBwiC,MAAOpsB,IAAIoO,MACXie,YAAarsB,IAAIqO,QAElB,KAAI,GAAIzjC,GAAI,EAAGA,GAAKo1B,IAAIl1B,SAAUF,EAAG,CAAE,GAAGo1B,IAAIp1B,IAAM,KAAM,QACzD,IAAIqC,GAAI+yB,IAAIp1B,EACZ,IAAI8hD,OAAQ,MACZ,IAAGz/C,EAAE2J,EAAG81C,OAASz/C,EAAE2J,MACd,CACJ81C,OAAS,IACT,IAAGz/C,EAAEiB,EAAEgI,MAAMq2C,cAAeG,OAAS,uBACrCA,QAAS,IAAM5lC,UAAU7Z,EAAEiB,GAAK,OAEjCw+C,OAAS,OACT/hD,GAAEA,EAAEG,QAAU,MAEf,GAAGH,EAAEG,OAAO,EAAE,CAAEH,EAAEA,EAAEG,QAAU,QAAYH,GAAE,GAAGA,EAAE,GAAG+B,QAAQ,KAAK,KACjE,MAAO/B,GAAEke,KAAK,IAGf,QAAS8jC,mBAAkBjiD,KAAMI,QAChC,OAAQJ,KAAKkT,WAAW,GAAIlT,KAAKkT,WAAW,IAI7C,QAASgvC,eAAcliD,KAAMuE,MAC5B,GAAIhC,KACJ,IAAI4/C,MAAO,KACXh/B,cAAanjB,KAAM,QAASoiD,YAAW53C,IAAKyK,EAAGsO,IAC9C,OAAOtO,EAAEyW,GACR,IAAK,cAAenpB,EAAEmhC,MAAQl5B,IAAI,EAAIjI,GAAEohC,OAASn5B,IAAI,EAAI,MACzD,KAAK,aAAcjI,EAAE8S,KAAK7K,IAAM,MAChC,KAAK,YAAa,MAAO,KAEzB,KAAK,cAAe23C,KAAO,IAAM,MACjC,KAAK,YAAaA,KAAO,KAAO,MAChC,SAAS,IAAIA,MAAQ59C,KAAK2wB,IAAK,KAAM,IAAIpsB,OAAM,qBAAuBya,GAAK,IAAMtO,EAAEyW,KAGrF,OAAOnpB,GAGR,QAAS8/C,mBAAkB/sB,IAAKr1B,GAC/B,IAAIA,EAAGA,EAAIgjB,QAAQ,EACnBhjB,GAAE6iB,YAAY,EAAGwS,IAAIoO,MACrBzjC,GAAE6iB,YAAY,EAAGwS,IAAIqO,OACrB,OAAO1jC,GAGR,GAAIqiD,kBAAmBj8B,aAEvB,SAASk8B,eAAcjtB,IAAK/wB,MAC3B,GAAIggB,IAAKd,WACTa,cAAaC,GAAI,cAAe89B,kBAAkB/sB,KAClD,KAAI,GAAIp1B,GAAI,EAAGA,EAAIo1B,IAAIl1B,SAAUF,EAAGokB,aAAaC,GAAI,aAAc+9B,iBAAiBhtB,IAAIp1B,IACxFokB,cAAaC,GAAI,YACjB,OAAOA,IAAGL,MAEX,QAASs+B,UAASx1C,KAAO,SAAUrN,WAAY,YAAa,MAAOA,SAAQiB,MAAMO,OAAO,KAAM6L,IAAM,OAAOA,KAAIxK,MAAM,IAAItB,IAAI,SAAST,GAAK,MAAOA,GAAEJ,WAAW,KAG/J,QAASoiD,eAAc/vC,KAAMtS,QAC5B,GAAIH,KACJA,GAAEyiD,MAAQhwC,KAAKQ,WAAW,EAC1BjT,GAAE0iD,MAAQjwC,KAAKQ,WAAW,EAC1B,OAAOjT,GAGR,QAAS2iD,wBAAuBlwC,KAAMtS,QACrC,GAAIH,KACJA,GAAEulC,MAAQ9yB,KAAKQ,WAAW,EAG1B,IAAI2vC,KAAMnwC,KAAKQ,WAAW,EAC1B,IAAG2vC,MAAQ,EAAG,KAAM,2BAA6BA,GAEjD5iD,GAAE6iD,MAAQpwC,KAAKQ,WAAW,EAC1B,QAAOjT,EAAE6iD,OACR,IAAK,GAAG,IAAK,OAAQ,IAAK,OAAQ,IAAK,OAAQ,IAAK,OAAQ,KAC5D,SAAS,KAAM,sCAAwC7iD,EAAE6iD,MAE1D//B,UAAUrQ,KAAMtS,OAAO,GACvB,OAAOH,GAIR,QAAS8iD,0BAAyBrwC,KAAMtS,QACvC,MAAO2iB,WAAUrQ,KAAMtS,QAGxB,QAAS4iD,uBAAsBtwC,KAAMtS,QACpC,GAAIH,KACJ,IAAIo9B,MAAOp9B,EAAEgjD,sBAAwBR,cAAc/vC,KAAM,EAAItS,SAAU,CACvE,IAAGi9B,KAAKslB,OAAS,EAAG,KAAM,oCAAsCtlB,KAAKslB,KACrE,IAAGtlB,KAAKqlB,MAAQ,GAAKrlB,KAAKqlB,MAAQ,EAAG,KAAM,oCAAsCrlB,KAAKqlB,KACtFziD,GAAEulC,MAAQ9yB,KAAKQ,WAAW,EAAI9S,SAAU,CACxC,IAAI8iB,IAAKxQ,KAAKQ,WAAW,EAAI9S,SAAU,CACvCH,GAAEijD,iBAAmBN,uBAAuBlwC,KAAMwQ,GAAK9iB,SAAU8iB,EACjEjjB,GAAEkjD,mBAAqBJ,yBAAyBrwC,KAAMtS,OACtD,OAAOH,GAGR,QAASmjD,iBAAgB1wC,KAAMtS,QAC9B,GAAIH,KACJ,IAAIo9B,MAAOp9B,EAAEgjD,sBAAwBR,cAAc/vC,KAAM,EAAItS,SAAU,CACvE,IAAGi9B,KAAKqlB,OAAS,GAAKrlB,KAAKslB,OAAS,EAAG,KAAM,6BAA+BtlB,KAAKqlB,MAAQ,MAAQrlB,KAAKslB,KACtG1iD,GAAEojD,KAAO3wC,KAAKQ,WAAW,GACzBjT,GAAEqjD,kBAAoB5wC,KAAKQ,WAAW,GACtCjT,GAAEsjD,sBAAwB7wC,KAAKQ,WAAW,GAC1C,OAAOjT,GAIR,QAASujD,uCAAsCC,UAC9C,GAAIC,UAAW,EAAQC,aACvB,IAAIC,iBAAkBpB,SAASiB,SAC/B,IAAItjD,KAAMyjD,gBAAgBxjD,OAAS,EAAGF,EAAG2jD,YACzC,IAAIC,eAAeC,cAAeC,aAClCL,eAAgBvhD,YAAYjC,IAC5BwjD,eAAc,GAAKC,gBAAgBxjD,MACnC,KAAIF,EAAI,EAAGA,GAAKC,MAAOD,EAAGyjD,cAAczjD,GAAK0jD,gBAAgB1jD,EAAE,EAC/D,KAAIA,EAAIC,IAAI,EAAGD,GAAK,IAAKA,EAAG,CAC3B2jD,aAAeF,cAAczjD,EAC7B4jD,gBAAkBJ,SAAW,SAAY,EAAU,EAAI,CACvDK,eAAiBL,UAAY,EAAK,KAClCM,eAAgBF,cAAgBC,aAChCL,UAAWM,cAAgBH,aAE5B,MAAOH,UAAW,MAInB,GAAIO,+BAAgC,WACnC,GAAIC,WAAY,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,EAAM,IAAM,GAAM,EAAM,IAAM,GAAM,EACpG,IAAIC,cAAe,MAAQ,KAAQ,MAAQ,MAAQ,KAAQ,KAAQ,MAAQ,MAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MACnI,IAAIC,YAAa,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,KAAQ,KAAQ,MAAQ,MAAQ,IAAQ,KAAQ,KAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,KAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,IAAQ,KAAQ,KAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,MAAQ,MAAQ,KAAQ,KAAQ,MACj1B,IAAIC,KAAM,SAASC,MAAQ,OAASA,KAAK,EAAMA,KAAK,KAAQ,IAC5D,IAAIC,QAAS,SAASC,MAAOC,OAAS,MAAOJ,KAAIG,MAAQC,OACzD,IAAIC,sBAAuB,SAASjB,UACnC,GAAIkB,QAASR,YAAYV,SAASrjD,OAAS,EAC3C,IAAIwkD,gBAAiB,GACrB,KAAI,GAAI1kD,GAAIujD,SAASrjD,OAAO,EAAGF,GAAK,IAAKA,EAAG,CAC3C,GAAI2kD,MAAOpB,SAASvjD,EACpB,KAAI,GAAI4K,GAAI,EAAGA,GAAK,IAAKA,EAAG,CAC3B,GAAG+5C,KAAO,GAAMF,QAAUP,UAAUQ,eACpCC,OAAQ,IAAKD,gBAGf,MAAOD,QAER,OAAO,UAASG,UACf,GAAIrB,UAAWjB,SAASsC,SACxB,IAAIH,QAASD,qBAAqBjB,SAClC,IAAIsB,OAAQtB,SAASrjD,MACrB,IAAI4kD,kBAAmB5iD,YAAY,GACnC,KAAI,GAAIlC,GAAI,EAAGA,GAAK,KAAMA,EAAG8kD,iBAAiB9kD,GAAK,CACnD,IAAI+kD,MAAMC,iBAAkBC,QAC5B,KAAIJ,MAAQ,KAAO,EAAG,CACrBE,KAAON,QAAU,CACjBK,kBAAiBD,OAASR,OAAOL,SAAS,GAAIe,QAC5CF,KACFE,MAAON,OAAS,GAChBO,kBAAmBzB,SAASA,SAASrjD,OAAS,EAC9C4kD,kBAAiBD,OAASR,OAAOW,iBAAkBD,MAEpD,MAAMF,MAAQ,EAAG,GACdA,KACFE,MAAON,QAAU,CACjBK,kBAAiBD,OAASR,OAAOd,SAASsB,OAAQE,QAChDF,KACFE,MAAON,OAAS,GAChBK,kBAAiBD,OAASR,OAAOd,SAASsB,OAAQE,MAEnDF,MAAQ,EACRI,UAAW,GAAK1B,SAASrjD,MACzB,OAAM+kD,SAAW,EAAG,CACnBF,KAAON,QAAU,CACjBK,kBAAiBD,OAASR,OAAOL,SAASiB,UAAWF,QACnDF,QACAI,QACFF,MAAON,OAAS,GAChBK,kBAAiBD,OAASR,OAAOd,SAASsB,OAAQE,QAChDF,QACAI,SAEH,MAAOH,qBAKT,IAAII,4BAA6B,SAASN,SAAUO,KAAMC,cAAeC,SAAUngC,GAElF,IAAIA,EAAGA,EAAIigC,IACX,KAAIE,SAAUA,SAAWtB,8BAA8Ba,SACvD,IAAIC,OAAOS,KACX,KAAIT,MAAQ,EAAGA,OAASM,KAAKjlD,SAAU2kD,MAAO,CAC7CS,MAAQH,KAAKN,MACbS,QAASD,SAASD,cAClBE,QAAUA,OAAO,EAAMA,OAAO,GAAM,GACpCpgC,GAAE2/B,OAASS,QACTF,cAEH,OAAQlgC,EAAGkgC,cAAeC,UAG3B,IAAIE,yBAA0B,SAASX,UACtC,GAAIQ,eAAgB,EAAGC,SAAWtB,8BAA8Ba,SAChE,OAAO,UAASO,MACf,GAAIjgC,GAAIggC,2BAA2B,KAAMC,KAAMC,cAAeC,SAC9DD,eAAgBlgC,EAAE,EAClB,OAAOA,GAAE,IAKX,SAASsgC,sBAAqBhzC,KAAMtS,OAAQmE,KAAMgF,KACjD,GAAItJ,IAAM+Y,IAAK+kB,YAAYrrB,MAAOizC,kBAAmB5nB,YAAYrrB,MACjE,IAAGnO,KAAKugD,SAAU7kD,EAAE2lD,SAAWpC,sCAAsCj/C,KAAKugD,SAC1Ev7C,KAAIs8C,MAAQ5lD,EAAE0lD,oBAAsB1lD,EAAE2lD,QACtC,IAAGr8C,IAAIs8C,MAAOt8C,IAAIu8C,eAAiBL,wBAAwBlhD,KAAKugD,SAChE,OAAO7kD,GAIR,QAAS8lD,sBAAqBrzC,KAAMtS,OAAQoN,IAC3C,GAAIvN,GAAIuN,MAAUvN,GAAE+lD,KAAOtzC,KAAKQ,WAAW,EAAIR,MAAKtP,GAAK,CACzD,IAAGnD,EAAE+lD,OAAS,EAAG/lD,EAAEolD,KAAOjC,gBAAgB1wC,KAAMtS,YAC3CH,GAAEolD,KAAOrC,sBAAsBtwC,KAAMtS,OAC1C,OAAOH,GAER,QAASgmD,gBAAevzC,KAAMtS,OAAQmE,MACrC,GAAItE,IAAM+2B,KAAMtkB,KAAKQ,WAAW,GAChC,IAAGjT,EAAE+2B,KAAM+uB,qBAAqBrzC,KAAMtS,OAAO,EAAGH,OAC3CylD,sBAAqBhzC,KAAMtS,OAAO,EAAGmE,KAAMtE,EAChD,OAAOA,GAIR,QAASimD,SAAQvoC,GAChB,GAAI1d,GAAI0d,EAAE7c,OAAO6c,EAAE,KAAK,IAAI,EAAE,EAAE,EAChC,QAAQrR,SAASrM,EAAEa,OAAO,EAAE,GAAG,IAAIwL,SAASrM,EAAEa,OAAO,EAAE,GAAG,IAAIwL,SAASrM,EAAEa,OAAO,EAAE,GAAG,KAEtF,QAASqlD,SAAQvF,KAChB,IAAI,GAAI1gD,GAAE,EAAED,EAAE,EAAGC,GAAG,IAAKA,EAAGD,EAAIA,EAAE,KAAO2gD,IAAI1gD,GAAG,IAAI,IAAI0gD,IAAI1gD,GAAG,EAAE,EAAE0gD,IAAI1gD,GACvE,OAAOD,GAAE8Z,SAAS,IAAIvE,cAAc1U,OAAO,GAG5C,QAASslD,SAAQxF,KAChB,GAAI3rC,GAAI2rC,IAAI,GAAG,IAAKyF,EAAIzF,IAAI,GAAG,IAAK/5C,EAAE+5C,IAAI,GAAG,GAC7C,IAAIh3C,GAAIhG,KAAKiK,IAAIoH,EAAGoxC,EAAGx/C,GAAI6C,EAAI9F,KAAKgK,IAAIqH,EAAGoxC,EAAGx/C,GAAIqO,EAAItL,EAAIF,CAC1D,IAAGwL,IAAM,EAAG,OAAQ,EAAG,EAAGD,EAE1B,IAAIqxC,IAAK,EAAGz8C,EAAI,EAAG08C,GAAM38C,EAAIF,CAC7BG,GAAIqL,GAAKqxC,GAAK,EAAI,EAAIA,GAAKA,GAC3B,QAAO38C,GACN,IAAKqL,GAAGqxC,KAAOD,EAAIx/C,GAAKqO,EAAI,GAAG,CAAG,MAClC,KAAKmxC,GAAGC,IAAOz/C,EAAIoO,GAAKC,EAAI,CAAI,MAChC,KAAKrO,GAAGy/C,IAAOrxC,EAAIoxC,GAAKnxC,EAAI,CAAI,OAEjC,OAAQoxC,GAAK,EAAGz8C,EAAG08C,GAAK,GAGzB,QAASC,SAAQC,KAChB,GAAI98C,GAAI88C,IAAI,GAAI58C,EAAI48C,IAAI,GAAIzxC,EAAIyxC,IAAI,EACpC,IAAIvxC,GAAIrL,EAAI,GAAKmL,EAAI,GAAMA,EAAI,EAAIA,GAAItL,EAAIsL,EAAIE,EAAE,CACjD,IAAI0rC,MAAOl3C,EAAEA,EAAEA,GAAIg9C,GAAK,EAAE/8C,CAE1B,IAAIg9C,EACJ,IAAG98C,IAAM,EAAG,OAAO68C,GAAG,GACrB,IAAK,GAAG,IAAK,GAAGC,EAAIzxC,EAAIwxC,EAAI9F,KAAI,IAAM1rC,CAAG0rC,KAAI,IAAM+F,CAAG,MACtD,KAAK,GAAGA,EAAIzxC,GAAK,EAAIwxC,GAAO9F,KAAI,IAAM+F,CAAG/F,KAAI,IAAM1rC,CAAG,MACtD,KAAK,GAAGyxC,EAAIzxC,GAAKwxC,GAAK,EAAM9F,KAAI,IAAM1rC,CAAG0rC,KAAI,IAAM+F,CAAG,MACtD,KAAK,GAAGA,EAAIzxC,GAAK,EAAIwxC,GAAO9F,KAAI,IAAM+F,CAAG/F,KAAI,IAAM1rC,CAAG,MACtD,KAAK,GAAGyxC,EAAIzxC,GAAKwxC,GAAK,EAAM9F,KAAI,IAAM1rC,CAAG0rC,KAAI,IAAM+F,CAAG,MACtD,KAAK,GAAGA,EAAIzxC,GAAK,EAAIwxC,GAAO9F,KAAI,IAAM+F,CAAG/F,KAAI,IAAM1rC,CAAG,OAEvD,IAAI,GAAIhV,GAAI,EAAGA,GAAK,IAAKA,EAAG0gD,IAAI1gD,GAAK0D,KAAKC,MAAM+8C,IAAI1gD,GAAG,IACvD,OAAO0gD,KAIR,QAASgG,UAASnhC,IAAKohC,MACtB,GAAGA,MAAQ,EAAG,MAAOphC,IACrB,IAAIghC,KAAML,QAAQF,QAAQzgC,KAC1B,IAAIohC,KAAO,EAAGJ,IAAI,GAAKA,IAAI,IAAM,EAAII,UAChCJ,KAAI,GAAK,GAAK,EAAIA,IAAI,KAAO,EAAII,KACrC,IAAIC,KAAKX,QAAQK,QAAQC,KAC1B,OAAOK,KAIR,GAAIC,SAAU,EAAGC,QAAU,GAAIC,QAAU,EAAGC,IAAMH,OAClD,SAASI,UAAS9oB,OAAS,OAAUA,OAAU,IAAI6oB,IAAK,GAAG,KAAOA,IAAM,EACxE,QAASE,SAAQC,IAAM,QAAUA,GAAK,GAAGH,IAAM,IAAM,GAAK,GAAG,IAC7D,QAASI,YAAWC,KAAO,QAAUA,IAAML,IAAM,GAAGA,IAAI,IAAK,GAAG,IAChE,QAASM,aAAYC,OAAS,MAAOH,YAAWF,QAAQD,SAASM,SACjE,QAASC,UAASD,MAAOE,MACxB,GAAGH,YAAYC,QAAUA,MAAO,CAC/B,IAAIP,IAAIH,QAASG,IAAID,UAAWC,IAAK,GAAGM,YAAYC,SAAWA,MAAO,KACtE,IAAGP,MAAQD,QAAS,IAAIC,IAAIH,QAAQ,EAAGG,IAAIF,UAAWE,IAAK,GAAGM,YAAYC,SAAWA,MAAO,KAC5F,IAAGP,MAAQF,QAASE,IAAMH,SAK5B,GAAIa,qBACHC,KAAQ,OACRC,MAAS,QACTC,OAAU,aACVC,OAAU,WACVC,OAAU,YACVC,WAAc,iBACdC,WAAc,eACdC,kBAAqB,WACrBC,WAAc,SACdC,UAAa,WACbC,eAAkB,cAClBC,eAAkB,kBAClBC,eAAkB,gBAClBC,sBAAyB,YACzBC,cAAiB,YAGlB,IAAI30B,UAEJ,IAAIM,UAGJ,SAASs0B,aAAYplD,EAAGe,MACtByvB,OAAO60B,QACP,IAAI3lD,QACJM,GAAE,GAAGgI,MAAMoP,UAAUmD,QAAQ,SAAUtd,GACrC,GAAI4D,GAAI0W,YAAYta,EACpB,QAAQ4D,EAAE,IACR,IAAK,SACL,IAAK,UACL,IAAK,WACH,KAGF,KAAK,SACH,KACF,KAAK,UACH2vB,OAAO60B,MAAMxzC,KAAKnS,KAClBA,QACA,MAGF,KAAK,eACH,GAAImB,EAAEuiC,YAAa1jC,KAAK0jC,YAAcviC,EAAEuiC,WACxC,MACF,KAAK,iBACL,IAAK,iBACH,KAGF,KAAK,WACH,IAAK1jC,KAAK4lD,QAAS5lD,KAAK4lD,UACxB,IAAIzkD,EAAE0kD,QAAS7lD,KAAK4lD,QAAQC,QAAUz8C,SAASjI,EAAE0kD,QAAS,GAC1D,IAAI1kD,EAAE2kD,MAAO9lD,KAAK4lD,QAAQE,MAAQ18C,SAASjI,EAAE2kD,MAAO,GACpD,IAAI3kD,EAAEwiD,KAAM3jD,KAAK4lD,QAAQjC,KAAOh3C,WAAWxL,EAAEwiD,KAG7C,IAAIxiD,EAAE2kD,OAAS10B,OAAO20B,eAAiB30B,OAAO20B,cAAcC,UAAW,CACrEhmD,KAAK4lD,QAAQlI,IAAMgG,SAAStyB,OAAO20B,cAAcC,UAAUhmD,KAAK4lD,QAAQE,OAAOpI,IAAK19C,KAAK4lD,QAAQjC,MAAQ,EACzG,IAAItiD,KAAK2wB,IAAKhyB,KAAK4lD,QAAQK,QAAUvC,SAAStyB,OAAO20B,cAAcC,UAAUhmD,KAAK4lD,QAAQE,OAAOpI,IAAI,GAGvG,GAAIv8C,EAAEu8C,IAAK19C,KAAK4lD,QAAQlI,IAAMv8C,EAAEu8C,GAChC,MACF,KAAK,aACL,IAAK,aACH,KAGF,KAAK,WACH,IAAK19C,KAAKkmD,QAASlmD,KAAKkmD,UACxB,IAAI/kD,EAAE2kD,MAAO9lD,KAAKkmD,QAAQJ,MAAQ18C,SAASjI,EAAE2kD,MAAO,GACpD,IAAI3kD,EAAEwiD,KAAM3jD,KAAKkmD,QAAQvC,KAAOh3C,WAAWxL,EAAEwiD,KAE7C,IAAIxiD,EAAE2kD,OAAS10B,OAAO20B,eAAiB30B,OAAO20B,cAAcC,UAAW,CACrEhmD,KAAKkmD,QAAQxI,IAAMgG,SAAStyB,OAAO20B,cAAcC,UAAUhmD,KAAKkmD,QAAQJ,OAAOpI,IAAK19C,KAAKkmD,QAAQvC,MAAQ,EACzG,IAAItiD,KAAK2wB,IAAKhyB,KAAKkmD,QAAQD,QAAUvC,SAAStyB,OAAO20B,cAAcC,UAAUhmD,KAAKkmD,QAAQJ,OAAOpI,IAAI,GAIvG,GAAIv8C,EAAEu8C,IAAK19C,KAAKkmD,QAAQxI,IAAMv8C,EAAEu8C,GAChC,MACF,KAAK,aACL,IAAK,aACH,KAEF,SACE,GAAIr8C,KAAK2wB,IAAK,KAAM,gBAAkB7wB,EAAE,GAAK,eAKrD,QAASglD,aAAY7lD,EAAGe,MACtByvB,OAAOs1B,QACP,IAAI5I,QACJl9C,GAAE,GAAGgI,MAAMoP,UAAUmD,QAAQ,SAAUtd,GACrC,GAAI4D,GAAI0W,YAAYta,EACpB,QAAQ4D,EAAE,IAER,IAAK,SACL,IAAM,UACN,IAAK,WACH,KACF,KAAK,QACH,KACF,KAAK,UACH2vB,OAAOs1B,MAAMj0C,KAAKqrC,KAElBA,QACA,MAEF,KAAK,QACH,GAAIr8C,EAAEmG,IAAKk2C,KAAKjtC,KAAOpP,EAAEmG,GACzB,MACF,KAAK,UACL,IAAK,UACH,KAGF,KAAK,OACHk2C,KAAK6I,KAAO,IACZ,MACF,KAAK,OACH7I,KAAK8I,UAAY,IACjB,MACF,KAAK,OACH9I,KAAK+I,OAAS,IACd,MACF,KAAK,YACH/I,KAAKC,OAAS,IACd,MACF,KAAK,aACHD,KAAKgJ,QAAU,IACf,MACF,KAAK,YACHhJ,KAAKiJ,OAAS,IACd,MAGF,KAAK,MACH,GAAItlD,EAAEmG,IAAKk2C,KAAKx9B,GAAK7e,EAAEmG,GACvB,MACF,KAAK,QACL,IAAK,QACH,KAEF,KAAK,aACH,GAAInG,EAAEmG,IAAKk2C,KAAKkJ,UAAYvlD,EAAEmG,GAC9B,MACF,KAAK,eACL,IAAK,eACH,KAGF,KAAK,SACH,IAAKk2C,KAAK5pC,MAAO4pC,KAAK5pC,QACtB,IAAIzS,EAAE2kD,MAAOtI,KAAK5pC,MAAMkyC,MAAQ3kD,EAAE2kD,KAClC,IAAI3kD,EAAEwiD,KAAMnG,KAAK5pC,MAAM+vC,KAAOxiD,EAAEwiD,IAChC,IAAIxiD,EAAE2kD,OAAS10B,OAAO20B,eAAiB30B,OAAO20B,cAAcC,UAAW,CACrExI,KAAK5pC,MAAM8pC,IAAMgG,SAAStyB,OAAO20B,cAAcC,UAAUxI,KAAK5pC,MAAMkyC,OAAOpI,IAAKF,KAAK5pC,MAAM+vC,MAAQ,GAErG,GAAIxiD,EAAEu8C,IAAKF,KAAK5pC,MAAM8pC,IAAMv8C,EAAEu8C,GAC9B,MACF,KAAK,WACL,IAAK,WACH,SAKR,QAASiJ,eAAcrmD,EAAGe,MACxByvB,OAAO81B,UACP,IAAIC,WAAaC,aACjBxmD,GAAE,GAAGgI,MAAMoP,UAAUmD,QAAQ,SAAUtd,GACrC,GAAI4D,GAAI0W,YAAYta,EACpB,QAAQ4D,EAAE,IACR,IAAK,WACL,IAAM,YACN,IAAK,aACH,KACF,KAAK,UACL,IAAK,WACH0lD,SACA,IAAI1lD,EAAE4lD,WAAY,CAAEF,OAAOE,WAAa5lD,EAAE4lD,WAC1C,GAAI5lD,EAAE6lD,aAAc,CAAEH,OAAOG,aAAe7lD,EAAE6lD,aAC9Cl2B,OAAO81B,QAAQz0C,KAAK00C,OAEpB,MACA,MACF,KAAK,YACH,KAEF,KAAK,QACHC,WAAaD,OAAOI,OACpB,IAAI9lD,EAAEkxB,MAAO,CACXy0B,WAAWz0B,MAAQlxB,EAAEkxB,MAEvB,KACF,KAAK,SACHy0B,WAAaD,OAAOK,QACpB,IAAI/lD,EAAEkxB,MAAO,CACXy0B,WAAWz0B,MAAQlxB,EAAEkxB,MAEvB,KACF,KAAK,OACHy0B,WAAaD,OAAOM,MACpB,IAAIhmD,EAAEkxB,MAAO,CACXy0B,WAAWz0B,MAAQlxB,EAAEkxB,MAEvB,KACF,KAAK,UACHy0B,WAAaD,OAAOO,SACpB,IAAIjmD,EAAEkxB,MAAO,CACXy0B,WAAWz0B,MAAQlxB,EAAEkxB,MAEvB,KACF,KAAK,YACHy0B,WAAaD,OAAOQ,WACpB,IAAIlmD,EAAEkxB,MAAO,CACXy0B,WAAWz0B,MAAQlxB,EAAEkxB,MAEvB,KAEF,KAAK,SACHy0B,WAAWlzC,QACX,IAAIzS,EAAE2kD,MAAOgB,WAAWlzC,MAAMkyC,MAAQ3kD,EAAE2kD,KACxC,IAAI3kD,EAAE2kD,OAAS10B,OAAO20B,eAAiB30B,OAAO20B,cAAcC,UAAW,CACrEc,WAAWlzC,MAAM8pC,IAAMgG,SAAStyB,OAAO20B,cAAcC,UAAUc,WAAWlzC,MAAMkyC,OAAOpI,IAAKoJ,WAAWlzC,MAAM+vC,MAAQ,GAGvH,GAAIxiD,EAAEwiD,KAAMmD,WAAWlzC,MAAM+vC,KAAOxiD,EAAEwiD,IACtC,IAAIxiD,EAAEu8C,IAAKoJ,WAAWlzC,MAAM8pC,IAAMv8C,EAAEu8C,GACpC,IAAIv8C,EAAEmmD,KAAMR,WAAWlzC,MAAM0zC,KAAOnmD,EAAEmmD,IACtC,MACF,KAAK,UACL,IAAK,UACH,KACF,SACE,SAOR,QAASC,eAAcjnD,EAAGe,MACxByvB,OAAO02B,YACP,IAAIh1C,GAAIkD,KAAK7V,IAAIsN,OACjB,KAAK,GAAInQ,GAAI,EAAGA,EAAIwV,EAAEtV,SAAUF,EAAG8zB,OAAO02B,UAAUh1C,EAAExV,IAAM6C,IAAIsN,OAAOqF,EAAExV,GACzE,IAAIwJ,GAAIlG,EAAE,GAAGgI,MAAMoP,SACnB,KAAK1a,EAAI,EAAGA,EAAIwJ,EAAEtJ,SAAUF,EAAG,CAC7B,GAAImE,GAAI0W,YAAYrR,EAAExJ,GACtB,QAAQmE,EAAE,IACR,IAAK,WACL,IAAK,aACL,IAAK,aACL,IAAK,YACH,KACF,KAAK,UACL,CACE,GAAI0L,GAAI+L,YAAYY,SAASrY,EAAEsmD,aAAc7/C,EAAIwB,SAASjI,EAAEumD,SAAU,GACtE52B,QAAO02B,UAAU5/C,GAAKiF,CACtB,IAAIjF,EAAI,EAAG/H,IAAIuN,KAAKP,EAAGjF,GAEvB,KACF,SACE,GAAIvG,KAAK2wB,IAAK,KAAM,gBAAkB7wB,EAAE,GAAK,gBAKrD,QAASwmD,eAAcC,GAAIvmD,MACzB,GAAItE,IAAK,eAEN,EAAG,IACH,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,IAAK,MACN8d,QAAQ,SAAU7R,GAClB,IAAK,GAAIhM,GAAIgM,EAAE,GAAIhM,GAAKgM,EAAE,KAAMhM,EAAG,GAAI4qD,GAAG5qD,KAAOoE,UAAWrE,EAAEA,EAAEG,QAAWge,UAAU,SAAU,MAAOwsC,SAAU1qD,EAAGyqD,WAAYvuC,UAAU0uC,GAAG5qD,OAE9I,IAAID,EAAEG,SAAW,EAAG,MAAO,EAC3BH,GAAEA,EAAEG,QAAU,YACdH,GAAE,GAAKme,UAAU,UAAW,MAAQsjC,MAAOzhD,EAAEG,OAAS,IAAK4B,QAAQ,KAAM,IACzE,OAAO/B,GAAEke,KAAK,IAIhB,QAAS4sC,eAAcvnD,EAAGe,MACxByvB,OAAOg3B,SACP,IAAIC,GACJznD,GAAE,GAAGgI,MAAMoP,UAAUmD,QAAQ,SAAUtd,GACrC,GAAI4D,GAAI0W,YAAYta,EACpB,QAAQ4D,EAAE,IACR,IAAK,WACL,IAAK,YACL,IAAK,aACL,IAAK,aACH,KAGF,KAAK,MACD4mD,GAAK5mD,QACE4mD,IAAG,SACL5mD,GAAE,EACT,IAAI4mD,GAAGL,SAAUK,GAAGL,SAAWt+C,SAAS2+C,GAAGL,SAAU,GACrD,IAAIK,GAAGC,OAAQD,GAAGC,OAAS5+C,SAAS2+C,GAAGC,OAAQ,GAC/Cl3B,QAAOg3B,OAAO31C,KAAK41C,GACnB,MACF,KAAK,QACH,KAGF,KAAK,aACL,IAAK,eACH,GAAIE,aACF,IAAI9mD,EAAE+mD,SAAU,CAAED,UAAUC,SAAW/mD,EAAE+mD,SACzC,GAAI/mD,EAAEgnD,WAAY,CAAEF,UAAUE,WAAahnD,EAAEgnD,WAC7C,GAAIhnD,EAAEinD,cAAgBhnD,UAAW,CAAE6mD,UAAUG,aAAejnD,EAAEinD,aAC9D,GAAIjnD,EAAEknD,OAAQ,CAAEJ,UAAUI,OAASlnD,EAAEknD,OACrC,GAAIlnD,EAAEmnD,SAAU,CAAEL,UAAUK,SAAWnnD,EAAEmnD,SACzCP,GAAGE,UAAYA,SAEjB,MAGF,KAAK,cACL,IAAK,gBACL,IAAK,gBACH,KAEF,KAAK,UACL,IAAK,YACH,KACF,KAAK,OACH,KACF,SACE,GAAI5mD,KAAK2wB,IAAK,KAAM,gBAAkB7wB,EAAE,GAAK,iBAKrD,QAASonD,eAAcC,SACrB,GAAIzrD,KACJA,GAAEA,EAAEG,QAAWge,UAAU,UAAW,KACpCstC,SAAQ3tC,QAAQ,SAAU5a,GACxBlD,EAAEA,EAAEG,QAAWge,UAAU,KAAM,KAAMjb,IAEvClD,GAAEA,EAAEG,QAAU,YACd,IAAIH,EAAEG,SAAW,EAAG,MAAO,EAC3BH,GAAE,GAAKme,UAAU,UAAW,MAAOsjC,MAAOzhD,EAAEG,OAAS,IAAI4B,QAAQ,KAAM,IACvE,OAAO/B,GAAEke,KAAK,IAIhB,GAAIwtC,eAAgB,QAAUC,cAC5B,GAAIC,aAAc,+BAClB,IAAIC,aAAc,+BAClB,IAAIC,YAAa,2BACjB,IAAIC,cAAe,+BAEnB,OAAO,SAASL,eAAc3rD,KAAMuE,MAElC,GAAIf,EAGJ,IAAKA,EAAIxD,KAAKwL,MAAMqgD,aAAepB,cAAcjnD,EAAGe,KAGpD,IAAKf,EAAIxD,KAAKwL,MAAM,6BAA+B69C,YAAY7lD,EAAGe,KAGlE,IAAKf,EAAIxD,KAAKwL,MAAMugD,YAAcnD,YAAYplD,EAAGe,KAGjD,IAAKf,EAAIxD,KAAKwL,MAAMwgD,cAAgBnC,cAAcrmD,EAAGe,KAIrD,IAAKf,EAAIxD,KAAKwL,MAAMsgD,aAAef,cAAcvnD,EAAGe,KAOpD,OAAOyvB,WAIX,IAAIi4B,iBAAkB7tC,UAAU,aAAc,MAC5C0W,MAASrW,MAAMS,KAAK,GACpBma,WAAY5a,MAAMM,IAGpBmX,MAAKg2B,IAAM,4EAEX,SAASC,eAAcC,GAAI7nD,MAEzB,SAAW8nD,gBAAiB,mBAAsB,WAAa,YAAa,CAC1E,MAAOA,eAAcC,QAGvB,GAAIrsD,IAAKue,WAAYytC,iBAAkBhkD,CACvC,KAAKA,EAAI4iD,cAAcuB,GAAGrpD,OAAS,KAAM9C,EAAEA,EAAEG,QAAU6H,CACvDhI,GAAEA,EAAEG,QAAU,mIACdH,GAAEA,EAAEG,QAAU,0HACdH,GAAEA,EAAEG,QAAU,yFACdH,GAAEA,EAAEG,QAAU,8FACd,IAAK6H,EAAIwjD,cAAclnD,KAAKmnD,SAAWzrD,EAAEA,EAAEG,QAAU,CACrDH,GAAEA,EAAEG,QAAU,sFACdH,GAAEA,EAAEG,QAAU,mBACdH,GAAEA,EAAEG,QAAU,sGAEd,IAAIH,EAAEG,OAAS,EAAG,CAChBH,EAAEA,EAAEG,QAAU,eACdH,GAAE,GAAKA,EAAE,GAAG+B,QAAQ,KAAM,KAE5B,MAAO/B,GAAEke,KAAK,IAGhB,QAASouC,cAAavsD,KAAMI,QAC3B,GAAI8lC,MAAOlmC,KAAKkT,WAAW,EAC3B,IAAIs5C,WAAYtmC,mBAAmBlmB,KAAKI,OAAO,EAC/C,QAAQ8lC,KAAMsmB,WAIf,QAASC,eAAczsD,KAAMI,QAC5B,GAAImJ,MAAO0c,SACX1c,KAAImjD,SAAW1sD,KAAKkT,WAAW,EAC/B3J,KAAIojD,MAAQ/jC,gBAAgB5oB,KAAM,EAClCuJ,KAAIqjD,IAAM5sD,KAAKkT,WAAW,EAC1B3J,KAAIsjD,IAAM7sD,KAAKkT,WAAW,EAC1B3J,KAAIujD,IAAM9sD,KAAKkT,WAAW,EAC1B3J,KAAIwjD,QAAU/sD,KAAKkT,WAAW,EAC9B3J,KAAIyjD,SAAWhtD,KAAKkT,WAAW,EAC/BlT,MAAKoD,GACLmG,KAAI0jD,SAAW9kC,eAAenoB,KAAM,EACpCuJ,KAAI2jD,YAAcltD,KAAKkT,WAAW,EAClC3J,KAAIkK,KAAOyS,mBAAmBlmB,KAAMI,OAAS,GAE7CmJ,KAAI0c,MAAMknC,KAAO5jD,IAAIqjD,MAAQ,GAC7BrjD,KAAI0c,MAAMmnC,OAAS7jD,IAAIojD,MAAM9jC,OAC7Btf,KAAI0c,MAAMonC,UAAY9jD,IAAIojD,MAAM7jC,UAChCvf,KAAI0c,MAAMqnC,QAAU/jD,IAAIojD,MAAM5jC,QAC9Bxf,KAAI0c,MAAMsnC,OAAShkD,IAAIojD,MAAM3jC,OAC7Bzf,KAAI0c,MAAMunC,SAAWjkD,IAAIojD,MAAM1jC,SAC/B1f,KAAI0c,MAAMwnC,OAASlkD,IAAIojD,MAAMzjC,OAC7B3f,KAAI0c,MAAMynC,IAAMnkD,IAAIsjD,IAAM,CAC1BtjD,KAAI0c,MAAM0nC,IAAMpkD,IAAIsjD,IAAM,CAC1B,OAAOtjD,KAIR,QAASqkD,aAAY5tD,KAAMI,QAC1B,GAAIytD,YAAa7tD,KAAKkT,WAAW,EACjC,IAAIgzB,MAAOlmC,KAAKkT,WAAW,EAC3B6P,WAAU/iB,KAAMI,OAAO,EACvB,QAAQ2gC,KAAK8sB,WAAY3nB,KAAKA,MAI/B,QAAS4nB,eAAc9tD,KAAMuE,MAC5ByvB,OAAO02B,YACP,KAAI,GAAIrmD,KAAKtB,KAAIsN,OAAQ2jB,OAAO02B,UAAUrmD,GAAKtB,IAAIsN,OAAOhM,EAE1D2vB,QAAOg3B,SACP,IAAIh0C,OAAQ,EACZ,IAAImrC,MAAO,KACXh/B,cAAanjB,KAAM,QAAS+tD,YAAWvjD,IAAKyK,EAAGsO,IAC9C,OAAOtO,EAAEyW,GACR,IAAK,SACJsI,OAAO02B,UAAUlgD,IAAI,IAAMA,IAAI,EAAIzH,KAAIuN,KAAK9F,IAAI,GAAIA,IAAI,GACxD,MACD,KAAK,UAAW,KAChB,KAAK,gBAAiB,KACtB,KAAK,UAAW,KAChB,KAAK,YAAa,KAClB,KAAK,QACJ,GAAGwM,QAAU,UAAW,CACvBgd,OAAOg3B,OAAO31C,KAAK7K,KAEpB,KACD,KAAK,WAAY,KACjB,KAAK,SAAU,KACf,KAAK,cAAe,KACpB,KAAK,kBAAmB,KACxB,KAAK,qBAAsB,KAC3B,KAAK,mBAAoB,KACzB,KAAK,qBAAsB,KAC3B,KAAK,uBAAwB,KAC7B,KAAK,mBAAoB,KACzB,KAAK,eAAgBwM,MAAQ,MAAQ,MACrC,KAAK,aAAcA,MAAQ,EAAI,MAC/B,KAAK,gBAAiBA,MAAQ,OAAS,MACvC,KAAK,cAAeA,MAAQ,EAAI,MAChC,KAAK,aAAcA,MAAQ,SAAW,MACtC,KAAK,WAAYA,MAAQ,EAAI,MAC7B,KAAK,gBAAiBA,MAAQ,OAAS,MACvC,KAAK,cAAeA,MAAQ,EAAI,MAChC,KAAK,kBAAmBA,MAAQ,SAAW,MAC3C,KAAK,gBAAiBA,MAAQ,EAAI,MAClC,KAAK,uBAAwBA,MAAQ,cAAgB,MACrD,KAAK,qBAAsBA,MAAQ,EAAI,MACvC,KAAK,kBAAmBA,MAAQ,SAAW,MAC3C,KAAK,gBAAiBA,MAAQ,EAAI,MAClC,KAAK,iBAAkBA,MAAQ,QAAU,MACzC,KAAK,eAAgBA,MAAQ,EAAI,MACjC,KAAK,eAAgBA,MAAQ,MAAQ,MACrC,KAAK,aAAcA,MAAQ,EAAI,MAC/B,KAAK,sBAAuBA,MAAQ,aAAe,MACnD,KAAK,oBAAqBA,MAAQ,EAAI,MACtC,KAAK,uBAAwBA,MAAQ,cAAgB,MACrD,KAAK,qBAAsBA,MAAQ,EAAI,MACvC,KAAK,wBAAyBA,MAAQ,eAAiB,MACvD,KAAK,sBAAuBA,MAAQ,EAAI,MACxC,KAAK,oBAAqBA,MAAQ,WAAa,MAC/C,KAAK,kBAAmBA,MAAQ,EAAI,MACpC,KAAK;AAAemrC,KAAO,IAAM,MACjC,KAAK,YAAaA,KAAO,KAAO,MAChC,KAAK,0BAA2B,KAChC,KAAK,uBAAwB,KAC7B,KAAK,qBAAsB,KAC3B,KAAK,kCAAmC,KACxC,KAAK,gCAAiC,KACtC,KAAK,yBAA0B,KAC/B,KAAK,uBAAwB,KAC7B,KAAK,wBAAyB,KAC9B,SAAS,IAAIA,MAAQ59C,KAAK2wB,IAAK,KAAM,IAAIpsB,OAAM,qBAAuBya,GAAK,IAAMtO,EAAEyW,KAGrF,OAAOsI,QAIR,QAASg6B,eAAchuD,KAAMuE,MAC5B,GAAIggB,IAAKd,WACTa,cAAaC,GAAI,qBAYjBD,cAAaC,GAAI,mBACjB,OAAOA,IAAGL,MAEXgS,KAAK+3B,MAAQ,2EAGb,SAASC,iBAAgB1qD,EAAGe,MAC3B+vB,OAAO20B,cAAcC,YACrB,IAAIpyC,SACJtT,GAAE,GAAGgI,MAAMoP,UAAUmD,QAAQ,SAAStd,GACrC,GAAI4D,GAAI0W,YAAYta,EACpB,QAAO4D,EAAE,IACR,IAAK,eAAgB,IAAK,iBAAkB,KAG5C,KAAK,aAAcyS,MAAM8pC,IAAMv8C,EAAEmG,GAAK,MAGtC,KAAK,YAAasM,MAAM8pC,IAAMv8C,EAAE8pD,OAAS,MAGzC,KAAK,UACL,IAAK,WAEL,IAAK,UACL,IAAK,WAEL,IAAK,UACL,IAAK,WAEL,IAAK,UACL,IAAK,WAEL,IAAK,cACL,IAAK,eAEL,IAAK,cACL,IAAK,eAEL,IAAK,cACL,IAAK,eAEL,IAAK,cACL,IAAK,eAEL,IAAK,cACL,IAAK,eAEL,IAAK,cACL,IAAK,eAEL,IAAK,YACL,IAAK,aAEL,IAAK,eACL,IAAK,gBACJ,GAAI9pD,EAAE,GAAG,KAAO,IAAK,CACpBiwB,OAAO20B,cAAcC,UAAU7zC,KAAKyB,MACpCA,cACM,CACNA,MAAMrD,KAAOpP,EAAE,GAAG+W,UAAU,EAAG/W,EAAE,GAAGjE,OAAS,GAE9C,KAED,SAAS,GAAGmE,KAAK2wB,IAAK,KAAM,gBAAkB7wB,EAAE,GAAK,mBAMxD,QAAS+pD,kBAAiB5qD,EAAGe,OAG7B,QAAS8pD,iBAAgB7qD,EAAGe,OAE5B,GAAI+pD,WAAY,+CAChB,IAAIC,WAAY,iDAChB,IAAIC,WAAY,+CAGhB,SAASC,qBAAoBzuD,KAAMuE,MAClC+vB,OAAO20B,gBAEP,IAAIzlD,KAIF,YAAa8qD,UAAWJ,kBAExB,aAAcK,UAAWH,mBAEzB,YAAaI,UAAWH,kBACxBtwC,QAAQ,SAASrU,GAClB,KAAKlG,EAAExD,KAAKwL,MAAM9B,EAAE,KAAM,KAAMA,GAAE,GAAK,6BACvCA,GAAE,GAAGlG,EAAGe,QAIV,GAAImqD,cAAe,uDAGnB,SAASC,iBAAgB3uD,KAAMuE,MAE9B,IAAIvE,MAAQA,KAAKI,SAAW,EAAG,MAAOk0B,OAEtC,IAAI9wB,EAGJ,MAAKA,EAAExD,KAAKwL,MAAMkjD,eAAgB,KAAM,kCACxCD,qBAAoBjrD,EAAE,GAAIe,KAE1B,OAAO+vB,QAIR,QAASs6B,aAAYrqD,MACnB,GAAIA,KAAKsqD,SAAU,CAAE,MAAOtqD,MAAKsqD,SACjC,MAAO,65OAET,QAASC,aAAYp8C,KAAMtS,QAC1B,GAAI2uD,gBAAiBr8C,KAAKQ,WAAW,EACrC,IAAG67C,iBAAmB,OAAQ,MAC9Br8C,MAAKtP,GAAKhD,OAAO,EAIlB,QAAS4uD,kBAAiBt8C,KAAMtS,QAAU,MAAOsS,MAAKQ,WAAW,GAGjE,QAAS+7C,oBAAmBv8C,KAAMtS,QACjC,GAAIH,KACJA,GAAEivD,SAAWx8C,KAAKQ,WAAW,EAC7BjT,GAAEkvD,WAAaz8C,KAAKQ,WAAW,EAC/B,QAAOjT,EAAEivD,UACR,IAAK,GAAGx8C,KAAKtP,GAAK,CAAG,MACrB,KAAK,GAAGnD,EAAEmvD,UAAYC,YAAY38C,KAAM,EAAI,MAC5C,KAAK,GAAGzS,EAAEmvD,UAAYzuB,eAAejuB,KAAM,EAAI,MAC/C,KAAK,GAAGzS,EAAEmvD,UAAYJ,iBAAiBt8C,KAAM,EAAI,MACjD,KAAK,GAAGA,KAAKtP,GAAK,CAAG,OAEtBsP,KAAKtP,GAAK,CACV,OAAOnD,GAIR,QAASovD,aAAY38C,KAAMtS,QAC1B,MAAO2iB,WAAUrQ,KAAMtS,QAIxB,QAASkvD,qBAAoB58C,KAAMtS,QAClC,MAAO2iB,WAAUrQ,KAAMtS,QAIxB,QAASmvD,eAAc78C,KAAMtS,QAC5B,GAAIovD,SAAU98C,KAAKQ,WAAW,EAC9B,IAAIkQ,IAAK1Q,KAAKQ,WAAW,EACzB,IAAIjT,IAAKuvD,QACT,QAAOA,SACN,IAAK,GAAM,IAAK,GAAM,IAAK,GAAM,IAAK,GACtC,IAAK,GAAM,IAAK,IAAM,IAAK,IAAM,IAAK,IACrCvvD,EAAE,GAAKgvD,mBAAmBv8C,KAAM0Q,GAAK,MACtC,KAAK,GAAMnjB,EAAE,GAAKqvD,oBAAoB58C,KAAM0Q,GAAK,MACjD,KAAK,IAAM,IAAK,IAAMnjB,EAAE,GAAKyS,KAAKQ,WAAWkQ,KAAO,EAAI,EAAI,EAAI,MAChE,SAAS,KAAM,IAAIta,OAAM,8BAAgC0mD,QAAU,IAAMpsC,IAE1E,MAAOnjB,GAIR,QAASwvD,aAAY/8C,KAAMtS,QAC1B,GAAI8jB,KAAMxR,KAAKtP,EAAIhD,MACnBsS,MAAKtP,GAAK,CACV,IAAI29B,MAAOruB,KAAKQ,WAAW,EAC3BR,MAAKtP,GAAK,CACV,IAAIssD,OAAQh9C,KAAKQ,WAAW,EAC5B,IAAIy8C,OACJ,OAAMD,SAAU,EAAGC,IAAIt6C,KAAKk6C,cAAc78C,KAAMwR,IAAIxR,KAAKtP,GACzD,QAAQ29B,KAAKA,KAAM4uB,IAAIA,KAIxB,QAASC,cAAa3E,GAAI4E,OACzBA,MAAM9xC,QAAQ,SAAS+xC,KACtB,OAAOA,IAAI,IACV,IAAK,GAAM,KACX,KAAK,GAAM,KACX,KAAK,GAAM,IAAK,GAAM,IAAK,GAAM,IAAK,IAAM,KAC5C,KAAK,IAAM,KACX,KAAK,IAAM,KACX,SAAS,KAAM,QAAUA,IAAI,GAAG/1C,SAAS,OAM5C,QAASg2C,cAAa/vD,KAAMuE,MAC3B,GAAIhB,KACJ,IAAIH,GAAI,EAAGlD,EAAI,GACdF,KAAKwL,MAAMoP,eAAemD,QAAQ,SAAStd,GAC3C,GAAI4D,GAAI0W,YAAYta,EACpB,QAAO4D,EAAE,IACR,IAAK,QAAS,KAEd,KAAK,aAAc,IAAK,cAAe,IAAK,eAAgB,KAE5D,KAAK,WAAaA,GAAE,EAAI,IAAGA,EAAEnE,EAAGA,EAAImE,EAAEnE,MAAQmE,GAAEnE,EAAIA,CAAGqD,GAAE8R,KAAKhR,EAAI,SAGpE,OAAOd,GAGR,QAASysD,cAAahwD,KAAMuE,OAE5B,QAAS0rD,yBAAwBjwD,KAAMI,QACtC,GAAImJ,OACJA,KAAIrJ,EAAIF,KAAKkT,WAAW,EACxB,IAAI0R,QACJA,MAAK1Y,EAAIlM,KAAKkT,WAAW,EACzB0R,MAAKzhB,EAAInD,KAAKkT,WAAW,EACzB3J,KAAI2C,EAAIgkD,YAAYtrC,KACpB,IAAIqB,OAAQjmB,KAAKkT,WAAW,EAC5B,IAAG+S,MAAQ,EAAK1c,IAAInG,EAAI,GACxB,IAAG6iB,MAAQ,EAAK1c,IAAI4X,EAAI,GACxB,OAAO5X,KAIR,QAAS4mD,cAAanwD,KAAMuE,MAC3B,GAAIgF,OACJ,IAAI44C,MAAO,KACXh/B,cAAanjB,KAAM,QAASowD,WAAU5lD,IAAKyK,EAAGsO,IAC7C,OAAOtO,EAAEyW,GACR,IAAK,oBAAqBniB,IAAI8L,KAAK7K,IAAM,MACzC,KAAK,qBAAsB,KAC3B,KAAK,mBAAoB,KACzB,SAAS,IAAI23C,MAAQ59C,KAAK2wB,IAAK,KAAM,IAAIpsB,OAAM,qBAAuBya,GAAK,IAAMtO,EAAEyW,KAGrF,OAAOniB,KAGR,QAAS8mD,cAAarwD,KAAMuE,OAE5B,QAAS+rD,gBAAep2C,IAAKq2C,YAAax8B,OAAQy8B,UAAWjsD,MAC5D,IAAI,GAAIrE,GAAI,EAAGA,GAAKqwD,YAAYnwD,SAAUF,EAAG,CAC5C,GAAIuwD,eAAcF,YAAYrwD,EAC9B,IAAIw0B,UAASg8B,WAAWr2C,WAAWH,IAAKu2C,cAAczuD,QAAQ,MAAM,IAAK,MAAOyuD,cAAelsD,KAC/F,KAAImwB,WAAaA,SAASt0B,OAAQ,QAElC,IAAIuwD,YAAa/3C,KAAKmb,OACtB,KAAI,GAAIjpB,GAAI,EAAGA,GAAK6lD,WAAWvwD,SAAU0K,EAAG,CAC3C,GAAI8lD,WAAYD,WAAW7lD,EAC3B,IAAI+pB,MAAO27B,UAAUI,UACrB,IAAG/7B,KAAM,CACR,GAAIkC,KAAMlC,KAAK47B,cACf,IAAG15B,IAAK85B,wBAAwBD,UAAW78B,OAAO68B,WAAYl8B,aAMlE,QAASm8B,yBAAwBD,UAAWr9B,MAAOmB,UAClDA,SAAS3W,QAAQ,SAAS+yC,SACzB,GAAIlsC,MAAO2O,MAAMu9B,QAAQ/nB,IACzB,KAAKnkB,KAAM,CACVA,OACA2O,OAAMu9B,QAAQ/nB,KAAOnkB,IACrB,IAAIK,OAAQ8rC,kBAAkBx9B,MAAM,SAAS,kBAC7C,IAAIy9B,UAAWC,YAAYH,QAAQ/nB,IACnC,IAAG9jB,MAAM1iB,EAAE2J,EAAI8kD,SAAS9kD,EAAG+Y,MAAM1iB,EAAE2J,EAAI8kD,SAAS9kD,CAChD,IAAG+Y,MAAM1K,EAAErO,EAAI8kD,SAAS9kD,EAAG+Y,MAAM1K,EAAErO,EAAI8kD,SAAS9kD,CAChD,IAAG+Y,MAAM1iB,EAAEY,EAAI6tD,SAAS7tD,EAAG8hB,MAAM1iB,EAAEY,EAAI6tD,SAAS7tD,CAChD,IAAG8hB,MAAM1K,EAAEpX,EAAI6tD,SAAS7tD,EAAG8hB,MAAM1K,EAAEpX,EAAI6tD,SAAS7tD,CAChD,IAAI+tD,SAAUC,aAAalsC,MAC3B,IAAIisC,UAAY39B,MAAM,QAASA,MAAM,QAAU29B,QAGhD,IAAKtsC,KAAKzhB,EAAGyhB,KAAKzhB,IAClB,IAAIlD,IAAKkhB,EAAG2vC,QAAQM,OAAQ5tD,EAAGstD,QAAQttD,EAAG0I,EAAG4kD,QAAQ5kD,EACrD,IAAG4kD,QAAQnzC,EAAG1d,EAAE0d,EAAImzC,QAAQnzC,CAC5BiH,MAAKzhB,EAAEkS,KAAKpV,KAKd,QAASoxD,oBAAmBrxD,KAAMuE,MACjC,GAAGvE,KAAKwL,MAAM,2BAA4B,QAC1C,IAAI8lD,WACJ,IAAIC,eACJvxD,MAAKwL,MAAM,sDAAsD,GAAGhJ,MAAM,mBAAmBub,QAAQ,SAAStd,GAC7G,GAAGA,IAAM,IAAMA,EAAE+wD,SAAW,GAAI,MAChCF,SAAQj8C,KAAK5U,EAAE+K,MAAM,8BAA8B,OAEnDxL,KAAKwL,MAAM,gEAAgE,GAAG,KAAK,GAAGhJ,MAAM,oBAAoBub,QAAQ,SAAStd,EAAG6nB,OACpI,GAAG7nB,IAAM,IAAMA,EAAE+wD,SAAW,GAAI,MAChC,IAAIntD,GAAI0W,YAAYta,EAAE+K,MAAM,2BAA2B,GACvD,IAAIslD,UAAYM,OAAQ/sD,EAAEotD,UAAYH,QAAQjtD,EAAEotD,UAAYH,QAAQjtD,EAAEotD,UAAYntD,UAAWykC,IAAK1kC,EAAE0kC,IAAKtI,KAAMp8B,EAAEo8B,KACjH,IAAI7b,MAAOqsC,YAAY5sD,EAAE0kC,IACzB,IAAGxkC,KAAKmtD,WAAantD,KAAKmtD,WAAa9sC,KAAK1Y,EAAG,MAC/C,IAAIylD,WAAYlxD,EAAE+K,MAAM,6BACxB,KAAKmmD,YAAcA,UAAU,GAAI,MACjC,IAAI1wB,IAAKkgB,SAASwQ,UAAU,GAC5Bb,SAAQ5kD,EAAI+0B,GAAG/0B,CACf4kD,SAAQttD,EAAIy9B,GAAGz9B,CACf,IAAGe,KAAK88C,SAAUyP,QAAQnzC,EAAIsjB,GAAGtjB,CACjC4zC,aAAYl8C,KAAKy7C,UAElB,OAAOS,aAGR,QAASK,oBAAmB5xD,KAAMuE,OAElC,QAASstD,uBAAsB7xD,KAAMI,QACpC,GAAImJ,OACJA,KAAIuoD,QAAU9xD,KAAKkT,WAAW,EAC9B,IAAI6+C,KAAMzqC,mBAAmBtnB,KAAM,GACnCuJ,KAAIwoD,IAAMA,IAAIxvD,CACdgH,KAAIw/B,IAAMmnB,YAAY6B,IAAIxvD,EAC1BvC,MAAKoD,GAAK,EACV,OAAOmG,KAIR,GAAIyoD,wBAAyB9rC,kBAG7B,IAAI+rC,sBAAuBjsC,aAG3B,SAASksC,oBAAmBlyD,KAAMuE,MACjC,GAAIgF,OACJ,IAAI+nD,WACJ,IAAInuD,KACJ,IAAIg/C,MAAO,KACXh/B,cAAanjB,KAAM,QAASmyD,aAAY3nD,IAAKyK,EAAGsO,IAC/C,OAAOtO,EAAEyW,GACR,IAAK,mBAAoB4lC,QAAQj8C,KAAK7K,IAAM,MAC5C,KAAK,kBAAmBrH,EAAIqH,GAAK,MACjC,KAAK,iBAAkBrH,EAAEK,EAAIgH,IAAIhH,CAAGL,GAAEwa,EAAInT,IAAImT,CAAGxa,GAAE+I,EAAI1B,IAAI0B,CAAG,MAC9D,KAAK,gBACJ/I,EAAEiuD,OAASE,QAAQnuD,EAAE2uD,eACd3uD,GAAE2uD,OACT,IAAGvtD,KAAKmtD,WAAantD,KAAKmtD,WAAavuD,EAAE4uD,IAAI7lD,EAAG,YACzC/I,GAAE4uD,GAAKxoD,KAAI8L,KAAKlS,EAAI,MAC5B,KAAK,mBAAoB,KACzB,KAAK,iBAAkB,KACvB,KAAK,yBAA0B,KAC/B,KAAK,uBAAwB,KAC7B,KAAK,sBAAuB,KAC5B,KAAK,oBAAqB,KAC1B,SAAS,IAAIg/C,MAAQ59C,KAAK2wB,IAAK,KAAM,IAAIpsB,OAAM,qBAAuBya,GAAK,IAAMtO,EAAEyW,KAGrF,OAAOniB,KAGR,QAAS6oD,oBAAmBpyD,KAAMuE,OAElC,GAAI8tD,UAAW,WACd,GAAIC,SAAU,kDACd,IAAIC,OACJ,SAASC,QAAO5mD,GAAGC,GAAGC,GAAGC,GAAG0mD,GAAGC,IAC9B,GAAIz9C,GAAIlJ,GAAG3L,OAAO,EAAEkM,SAASP,GAAG,IAAI,EAAE,EAAGmJ,EAAIw9C,GAAGtyD,OAAO,EAAEkM,SAASomD,GAAG,IAAI,EAAE,CAC3E,IAAGx9C,EAAE,GAAKu9C,GAAGryD,SAAW,EAAG8U,EAAE,CAC7B,IAAGu9C,GAAGryD,OAAS,EAAG8U,GAAKq9C,OAAOpvD,CAC9B,IAAG2I,GAAG1L,OAAS,EAAG6U,GAAKs9C,OAAOrmD,CAC9B,OAAOL,IAAK8mD,WAAWz9C,GAAK09C,WAAW39C,GAExC,MAAO,SAASo9C,UAASQ,KAAMrmD,MAC9B+lD,OAAS/lD,IACT,OAAOqmD,MAAK7wD,QAAQswD,QAASE,WAM/B,SAASM,WAAU1vD,GAAK,MAAO,UAASsP,KAAMtS,QAAUsS,KAAKtP,GAAGA,CAAG,SACnE,QAAS2vD,YAAWrgD,KAAMtS,QAAUsS,KAAKtP,GAAG,CAAG,QAK/C,QAAS4vD,eAActgD,KAAMtS,QAC5B,GAAI+C,GAAIuP,KAAKQ,WAAW,EACxB,QAAQ/P,EAAI,MAASA,GAAK,GAAM,EAAIA,GAAK,GAAM,GAIhD,QAAS8vD,gBAAevgD,KAAMtS,QAC7B,GAAI8L,GAAEwG,KAAKQ,WAAW,GAAI+B,EAAEvC,KAAKQ,WAAW,EAC5C,IAAI/P,GAAE6vD,cAActgD,KAAM,EAC1B,IAAIwC,GAAE89C,cAActgD,KAAM,EAC1B,QAASnQ,GAAG2J,EAAEA,EAAG/I,EAAEA,EAAE,GAAI2hB,KAAK3hB,EAAE,GAAI4hB,KAAK5hB,EAAE,IAAKoX,GAAGrO,EAAE+I,EAAG9R,EAAE+R,EAAE,GAAI4P,KAAK5P,EAAE,GAAI6P,KAAK7P,EAAE,KAInF,QAASg+C,mBAAkBxgD,KAAMtS,QAChC,GAAI8L,GAAEwG,KAAKQ,WAAW,GAAI+B,EAAEvC,KAAKQ,WAAW,EAC5C,IAAI/P,GAAE6vD,cAActgD,KAAM,EAC1B,IAAIwC,GAAE89C,cAActgD,KAAM,EAC1B,QAASnQ,GAAG2J,EAAEA,EAAG/I,EAAEA,EAAE,GAAI2hB,KAAK3hB,EAAE,GAAI4hB,KAAK5hB,EAAE,IAAKoX,GAAGrO,EAAE+I,EAAG9R,EAAE+R,EAAE,GAAI4P,KAAK5P,EAAE,GAAI6P,KAAK7P,EAAE,KAInF,QAASi+C,eAAczgD,KAAMtS,QAC5B,GAAI8L,GAAIwG,KAAKQ,WAAW,EACxB,IAAI/P,GAAI6vD,cAActgD,KAAM,EAC5B,QAAQxG,EAAEA,EAAG/I,EAAEA,EAAE,GAAI2hB,KAAK3hB,EAAE,GAAI4hB,KAAK5hB,EAAE,IAIxC,QAASiwD,kBAAiB1gD,KAAMtS,QAC/B,GAAI8L,GAAIwG,KAAKQ,WAAW,EACxB,IAAImgD,IAAK3gD,KAAKQ,WAAW,EACzB,IAAI4R,OAAQuuC,GAAK,QAAW,GAAItuC,MAAQsuC,GAAK,QAAW,EACxDA,KAAM,KACN,IAAGvuC,OAAS,EAAG,MAAMuuC,IAAM,IAAOA,IAAM,GACxC,QAAQnnD,EAAEA,EAAE/I,EAAEkwD,GAAGvuC,KAAKA,KAAKC,KAAKA,MAMjC,QAASuuC,eAAc5gD,KAAMtS,QAC5B,GAAIkK,OAAQoI,KAAKA,KAAKtP,KAAO,KAAS,CACtC,IAAImwD,MAAON,eAAevgD,KAAM,EAChC,QAAQpI,KAAMipD,MAIf,QAASC,iBAAgB9gD,KAAMtS,QAC9B,GAAIkK,OAAQoI,KAAKA,KAAKtP,KAAO,KAAS,CACtC,IAAIqwD,MAAO/gD,KAAKQ,WAAW,EAC3B,IAAIqgD,MAAON,eAAevgD,KAAM,EAChC,QAAQpI,KAAMmpD,KAAMF,MAIrB,QAASG,kBAAiBhhD,KAAMtS,QAC/B,GAAIkK,OAAQoI,KAAKA,KAAKtP,KAAO,KAAS,CACtCsP,MAAKtP,GAAK,CACV,QAAQkH,MAGT,QAASqpD,oBAAmBjhD,KAAMtS,QACjC,GAAIkK,OAAQoI,KAAKA,KAAKtP,KAAO,KAAS,CACtC,IAAIqwD,MAAO/gD,KAAKQ,WAAW,EAC3BR,MAAKtP,GAAK,CACV,QAAQkH,KAAMmpD,MAIf,QAASG,gBAAelhD,KAAMtS,QAC7B,GAAIkK,OAAQoI,KAAKA,KAAKtP,KAAO,KAAS,CACtC,IAAImwD,MAAOL,kBAAkBxgD,KAAM,EACnC,QAAQpI,KAAMipD,MAIf,QAASM,gBAAenhD,KAAMtS,QAC7B,GAAIkK,OAAQoI,KAAKA,KAAKtP,KAAO,KAAS,CACtCsP,MAAKtP,GAAK,CACV,QAAQkH,MAIT,QAASwpD,qBAAoBphD,KAAMtS,QAClC,GAAI2zD,SAAUrhD,KAAKA,KAAKtP,EAAE,GAAK,CAC/B,IAAI4wD,WAAY,CAChBthD,MAAKtP,GAAK,CACV,QAAQ2wD,QAASC,WAIlB,QAASC,qBAAoBvhD,KAAMtS,QAClCsS,KAAKtP,GAAI,CACT,IAAIoU,QAAS9E,KAAKQ,WAAW,EAC7B,IAAIjT,KAEJ,KAAI,GAAIC,GAAI,EAAGA,GAAKsX,SAAUtX,EAAGD,EAAEoV,KAAK3C,KAAKQ,WAAW,GACxD,OAAOjT,GAIR,QAASi0D,mBAAkBxhD,KAAMtS,QAChC,GAAI+zD,SAAWzhD,KAAKA,KAAKtP,EAAE,GAAK,IAAQ,EAAI,CAC5CsP,MAAKtP,GAAK,CACV,QAAQ+wD,QAASzhD,KAAKQ,WAAW,IAIlC,QAASkhD,iBAAgB1hD,KAAMtS,QAC9B,GAAIi0D,OAAS3hD,KAAKA,KAAKtP,EAAE,GAAK,IAAQ,EAAI,CAC1CsP,MAAKtP,GAAK,CACV,QAAQixD,MAAO3hD,KAAKQ,WAAW,IAIhC,QAASohD,mBAAkB5hD,KAAMtS,QAChC,GAAI2zD,SAAWrhD,KAAKA,KAAKtP,EAAE,GAAK,IAAQ,EAAI,CAC5CsP,MAAKtP,GAAK,CACV,QAAQ2wD,SAIT,QAASQ,wBAAuB7hD,KAAMtS,QACrC,GAAIkK,MAAOoI,KAAKQ,WAAW,GAAIkrB,IAAM1rB,KAAKQ,WAAW,EACrD,QAAQ5I,KAAM8zB,KAIf,QAASo2B,oBAAmB9hD,KAAMtS,QACjCsS,KAAKQ,WAAW,EAChB,OAAOqhD,wBAAuB7hD,KAAM,GAIrC,QAAS+hD,wBAAuB/hD,KAAMtS,QACrCsS,KAAKQ,WAAW,EAChB,OAAOqhD,wBAAuB7hD,KAAM,GAIrC,QAASgiD,cAAahiD,KAAMtS,QAC3B,GAAIu0D,KAAMjiD,KAAKA,KAAKtP,GAAK,EACzB,IAAIkH,OAAQoI,KAAKA,KAAKtP,GAAK,KAAO,CAClCsP,MAAKtP,GAAK,CACV,IAAIgf,KAAM+wC,cAAczgD,KAAK,EAC7B,QAAQpI,KAAM8X,KAIf,QAASwyC,eAAcliD,KAAMtS,QAC5B,GAAIu0D,KAAMjiD,KAAKA,KAAKtP,GAAK,EACzB,IAAIkH,OAAQoI,KAAKA,KAAKtP,GAAK,KAAO,CAClCsP,MAAKtP,GAAK,CACV,IAAIgf,KAAMgxC,iBAAiB1gD,KAAK,EAChC,QAAQpI,KAAM8X,KAIf,QAASyyC,gBAAeniD,KAAMtS,QAC7B,GAAIu0D,KAAMjiD,KAAKA,KAAKtP,GAAK,EACzB,IAAIkH,OAAQoI,KAAKA,KAAKtP,GAAK,KAAO,CAClCsP,MAAKtP,GAAK,CACV,IAAIqwD,MAAO/gD,KAAKQ,WAAW,EAC3B,IAAIkP,KAAM+wC,cAAczgD,KAAK,EAC7B,QAAQpI,KAAMmpD,KAAMrxC,KAKrB,QAAS0yC,eAAcpiD,KAAMtS,QAC5B,GAAIu0D,KAAMjiD,KAAKA,KAAKtP,GAAK,EACzB,IAAIkH,OAAQoI,KAAKA,KAAKtP,GAAK,KAAO,CAClCsP,MAAKtP,GAAK,CACV,IAAI2xD,OAAQriD,KAAKQ,WAAW,EAC5B,QAAQ8hD,SAASD,OAAQE,KAAKF,QAG/B,QAASG,kBAAiBxiD,KAAMtS,QAC/BsS,KAAKtP,GACL,IAAI+xD,SAAUziD,KAAKQ,WAAW,GAAIkiD,IAAMC,SAAS3iD,KACjD,QAAQyiD,SAAUC,IAAI,KAAO,EAAIH,KAAOK,OAAOF,IAAI,KAGpD,QAASC,UAAS3iD,KAAMtS,QACvB,OAAQsS,KAAKA,KAAKtP,EAAE,IAAI,EAAGsP,KAAKQ,WAAW,GAAK,OAIjD,GAAIqiD,kBAAmBzC,UAAU,EAEjC,IAAI0C,iBAAkBzC,UAGtB,SAAS0C,cAAa/iD,KAAMtS,QAC3BsS,KAAKtP,GACL,IAAIqmC,KAAM/2B,KAAKQ,WAAW,EAC1B,IAAIsT,KAAM9T,KAAKQ,WAAW,EAC1B,QAAQu2B,IAAKjjB,KAId,QAASkvC,cAAahjD,KAAMtS,QAAUsS,KAAKtP,GAAK,OAAOskB,MAAKhV,KAAKQ,WAAW,IAG5E,QAASyiD,cAAajjD,KAAMtS,QAAUsS,KAAKtP,GAAK,OAAOsP,MAAKQ,WAAW,GAGvE,QAAS0iD,eAAcljD,KAAMtS,QAAUsS,KAAKtP,GAAK,OAAOsP,MAAKQ,WAAW,KAAK,EAG7E,QAAS2iD,cAAanjD,KAAMtS,QAAUsS,KAAKtP,GAAK,OAAOokB,YAAW9U,KAAM,GAGxE,QAASojD,cAAapjD,KAAMtS,QAAUsS,KAAKtP,GAAK,OAAO+6B,4BAA2BzrB,MAGlF,QAASqjD,aAAYrjD,MACpB,GAAIlI,OACJ,QAAQA,IAAI,GAAKkI,KAAKQ,WAAW,IAEhC,IAAK,GACJ1I,IAAI,GAAKsyB,UAAUpqB,KAAM,GAAK,OAAS,OACvCA,MAAKtP,GAAK,CAAG,MAEd,KAAK,IACJoH,IAAI,GAAKkd,KAAKhV,KAAKA,KAAKtP,GACxBsP,MAAKtP,GAAK,CAAG,MAEd,KAAK,GACJsP,KAAKtP,GAAK,CAAG,MAEd,KAAK,GACJoH,IAAI,GAAKgd,WAAW9U,KAAM,EAAI,MAE/B,KAAK,GACJlI,IAAI,GAAKw0B,sBAAsBtsB,KAAO,OAGxC,MAAOlI,KAIR,QAASwrD,mBAAkBtjD,KAAM61B,KAChC,GAAImZ,OAAQhvC,KAAKQ,WAAW,EAC5B,IAAI3J,OACJ,KAAI,GAAIrJ,GAAI,EAAGA,GAAKwhD,QAASxhD,EAAGqJ,IAAI8L,KAAKusB,YAAYlvB,KAAM,GAC3D,OAAOnJ,KAIR,QAAS0sD,qBAAoBvjD,MAC5B,GAAIwjD,MAAO,EAAIxjD,KAAKQ,WAAW,EAC/B,IAAIijD,MAAO,EAAIzjD,KAAKQ,WAAW,EAC/B,KAAI,GAAIhT,GAAI,EAAGD,KAAMC,GAAKi2D,OAASl2D,EAAEC,SAAYA,EAChD,IAAI,GAAI4K,GAAI,EAAGA,GAAKorD,OAAQprD,EAAG7K,EAAEC,GAAG4K,GAAKirD,YAAYrjD,KACtD,OAAOzS,GAIR,QAASm2D,eAAc1jD,KAAMtS,QAC5B,GAAIkK,MAAQoI,KAAKQ,WAAW,KAAO,EAAK,CACxC,IAAImjD,WAAY3jD,KAAKQ,WAAW,EAChC,QAAQ5I,KAAM,EAAG+rD,WAIlB,QAASC,gBAAe5jD,KAAMtS,QAC7B,GAAIkK,MAAQoI,KAAKQ,WAAW,KAAO,EAAK,CACxC,IAAIugD,MAAO/gD,KAAKQ,WAAW,EAC3B,IAAImjD,WAAY3jD,KAAKQ,WAAW,EAChC,QAAQ5I,KAAMmpD,KAAM4C,WAIrB,QAASE,kBAAiB7jD,KAAMtS,QAC/B,GAAIkK,MAAQoI,KAAKQ,WAAW,KAAO,EAAK,CACxCR,MAAKtP,GAAK,CACV,IAAImlC,KAAM71B,KAAKQ,WAAW,EAC1B,QAAQ5I,KAAMi+B,KAIf,QAASiuB,kBAAiB9jD,KAAMtS,QAC/B,GAAIkK,MAAQoI,KAAKQ,WAAW,KAAO,EAAK,CACxC,IAAIq1B,KAAM71B,KAAKQ,WAAW,EAC1B,QAAQ5I,KAAMi+B,KAKf,QAASkuB,iBAAgB/jD,KAAMtS,QAC9B,GAAIkK,MAAQoI,KAAKQ,WAAW,KAAO,EAAK,CACxCR,MAAKtP,GAAK,CACV,QAAQkH,MAIT,GAAIosD,cAAe3D,UAEnB,IAAI4D,cAAe5D,UAEnB,IAAI6D,aAAc7D,UAElB,IAAI8D,aAAc9D,UAElB,IAAI+D,aAAc/D,UAElB,IAAIgE,gBAAiBhE,UAErB,IAAIiE,aAAcjE,UAElB,IAAIkE,aAAclE,UAElB,IAAImE,kBAAmBnE,UAEvB,IAAIoE,cAAepE,UAEnB,IAAIqE,aAAcrE,UAElB,IAAIsE,gBAAiBtE,UAErB,IAAIuE,kBAAmBvE,UAEvB,IAAIwE,gBAAiBxE,UAErB,IAAIyE,gBAAiBzE,UAErB,IAAI0E,cAAe1E,UAEnB,IAAI2E,iBAAkB3E,UAEtB,IAAI4E,gBAAiB5E,UAErB,IAAI6E,gBAAiB7E,UAGrB,IAAI8E,iBAAkB90C,SAEtB,IAAI+0C,mBAAoB/0C,SAExB,IAAIg1C,mBAAoBh1C,SAExB,IAAIi1C,cAAej1C,SAGnB,IAAIk1C,WACHvzD,GAAQgnB,EAAE,SAAU3b,EAAE0lD,cACtB9wD,GAAQ+mB,EAAE,SAAU3b,EAAEioD,cACtBpzD,GAAQ8mB,EAAE,SAAU3b,EAAE2mD,cACtB7xD,GAAQ6mB,EAAE,SAAU3b,EAAE0nD,cACtB9rC,GAAQD,EAAE,SAAU3b,EAAEonD,cACtBvrC,GAAQF,EAAE,SAAU3b,EAAE4mD,cACtBhvC,GAAQ+D,EAAE,WAAY3b,EAAEwnD,gBACxB1rC,GAAQH,EAAE,YAAa3b,EAAEylD,iBACzB1wD,GAAQ4mB,EAAE,QAAS3b,EAAEknD,aACrBlyD,IAAQ2mB,EAAE,QAAS3b,EAAEinD,aACrBhyD,IAAQ0mB,EAAE,QAAS3b,EAAE6mD,aACrB3xD,IAAQymB,EAAE,QAAS3b,EAAE8mD,aACrB3xD,IAAQwmB,EAAE,QAAS3b,EAAE+mD,aACrB3xD,IAAQumB,EAAE,QAAS3b,EAAEqnD,aACrBhyD,IAAQsmB,EAAE,WAAY3b,EAAEgnD,gBACxB1xD,IAAQqmB,EAAE,WAAY3b,EAAE4nD,gBACxBryD,IAAQomB,EAAE,WAAY3b,EAAEynD,gBACxBjyD,IAAQmmB,EAAE,WAAY3b,EAAE6nD,gBACxBpyD,IAAQkmB,EAAE,YAAa3b,EAAE2nD,iBACzBjyD,IAAQimB,EAAE,aAAc3b,EAAEunD,kBAC1B5xD,IAAQgmB,EAAE,WAAY3b,EAAEsnD,gBACxB1xD,IAAQ+lB,EAAE,aAAc3b,EAAEmnD,kBAC1BtvC,IAAQ8D,EAAE,SAAU3b,EAAE+lD,cACtB9pC,IAAQN,EAAE,SAAU3b,EAAE2lD,cACtB7tC,IAAQ6D,EAAE,UAAW3b,EAAE6lD,eACvBppC,IAAQd,EAAE,SAAU3b,EAAE4lD,cACtBlpC,IAAQf,EAAE,SAAU3b,EAAE8lD,cACtBnpC,IAAQhB,EAAE,WAAY3b,EAAE8jD,gBACxBlnC,IAAQjB,EAAE,UAAW3b,EAAE+kD,eACvBloC,IAAQlB,EAAE,aAAc3b,EAAEmlD,kBAC1BgD,IAAQxsC,EAAE,UAAW3b,EAAEqmD,eACvBtuC,IAAQ4D,EAAE,SAAU3b,EAAE2kD,cACtB9uD,IAAQ8lB,EAAE,UAAW3b,EAAEujD,eACvBztD,IAAQ6lB,EAAE,aAAc3b,EAAEwmD,kBAC1BzwD,IAAQ4lB,EAAE,YAAa3b,EAAE8nD,iBACzB9xD,IAAQ2lB,EAAE,cAAe3b,EAAE+nD,mBAC3BjrC,IAAQnB,EAAE,aAAc3b,EAAEymD,kBAC1BzuC,IAAQ2D,EAAE,YAAa3b,EAAE0mD,iBACzBzuC,IAAQ0D,EAAE,aAAc3b,EAAE2jD,kBAC1B5mC,IAAQpB,EAAE,UAAW3b,EAAE6kD,eACvB5uD,IAAQ0lB,EAAE,WAAY3b,EAAE6jD,gBACxBuE,IAAQzsC,EAAE,WAAY3b,EAAEumD,gBACxB8B,IAAQ1sC,EAAE,WAAY3b,EAAE8kD,gBACxBwD,IAAQ3sC,EAAE,YAAa3b,EAAEyjD,iBACzB8E,IAAQ5sC,EAAE,cAAe3b,EAAEgoD,mBAC3B9qC,IAAQvB,EAAE,eAAgB3b,EAAE4jD,oBAC5B1rC,OAGD,IAAIswC,WACHrrC,GAAM,GAAMsrC,GAAM,GAClBC,GAAM,GAAMC,GAAM,GAClBvrC,GAAM,GAAMwrC,GAAM,GAClBC,GAAM,GAAMC,GAAM,GAClBC,GAAM,GAAMC,IAAM,GAClBjZ,GAAM,GAAMkZ,IAAM,GAClBC,GAAM,GAAMC,IAAM,GAClBC,GAAM,GAAMC,IAAM,GAClBC,GAAM,GAAMC,IAAM,GAClBC,GAAM,GAAM9rC,IAAM,GAClB+rC,GAAM,GAAMC,IAAM,GAClBC,GAAM,GAAMC,IAAM,GAClBC,GAAM,GAAMC,IAAM,GAClB9a,GAAM,GAAM+a,IAAM,GAClBC,GAAM,GAAMC,IAAM,GAClBxsC,GAAM,GAAMysC,IAAM,GAClBC,GAAM,GAAMC,IAAM,GAClBC,GAAM,GAAMC,IAAM,GAClBC,GAAM,GAAMC,IAAM,KAEnB,WAAY,IAAI,GAAIl2D,KAAKk0D,UAAUN,SAAS5zD,GAAK4zD,SAASM,SAASl0D,OAEnE,IAAIm2D,SACJ,IAAIC,QACH/1D,GAAQgnB,EAAE,cAAe3b,EAAEukD,mBAC3B3vD,GAAQ+mB,EAAE,YAAa3b,EAAEqkD,iBACzBvvD,GAAQ6mB,EAAE,gBAAiB3b,EAAEkkD,qBAC7BpoC,GAAQH,EAAE,cAAe3b,EAAEmkD,mBAC3B7uD,IAAQqmB,EAAE,aAAc3b,EAAEwlD,kBAC1B7oC,IAAQhB,EAAE,gBAAiB3b,EAAE+jD,qBAC7B5mC,IAAQxB,EAAE,eAAgB3b,EAAEykD,oBAC5BiE,IAAQ/sC,EAAE,mBAAoB3b,EAAE0kD,wBAChCxsC,OAID,SAASyyC,eAAchoD,KAAMtS,OAAQmE,MACpC,GAAIqgB,MAAOic,cAAcnuB,KAAM,EAC/B,IAAIlI,KAAMmwD,mBAAmBjoD,KAAK,EAClC,IAAIuT,OAAQvT,KAAKQ,WAAW,EAC5BR,MAAKQ,WAAW,EAChB,IAAI0nD,KAAMloD,KAAKQ,WAAW,EAC1B,IAAI2nD,KAAM,EACV,IAAGt2D,KAAKg6B,OAAS,EAAG7rB,KAAKtP,GAAKhD,OAAO,OAChCy6D,KAAMC,2BAA2BpoD,KAAMtS,OAAO,GAAImE,KACvD,QAAQqgB,KAAKA,KAAMpa,IAAIA,IAAI,GAAIuwD,QAAQF,IAAKG,OAAS/0C,OAAS,EAAK,EAAGtb,GAAGH,IAAI,IAI9E,QAASmwD,oBAAmBjoD,MAC3B,GAAIuN,EACJ,IAAGC,eAAexN,KAAKA,KAAKtP,EAAI,KAAO,MAAQ,OAAQokB,WAAW9U,MAAM,IACxE,QAAOA,KAAKA,KAAKtP,IAChB,IAAK,GAAMsP,KAAKtP,GAAK,CAAG,QAAQ,SAAU,IAC1C,KAAK,GAAM6c,EAAIvN,KAAKA,KAAKtP,EAAE,KAAO,CAAKsP,MAAKtP,GAAK,CAAG,QAAQ6c,EAAE,IAC9D,KAAK,GAAMA,EAAIvN,KAAKA,KAAKtP,EAAE,EAAIsP,MAAKtP,GAAK,CAAG,QAAQ6c,EAAE,IACtD,KAAK,GAAMvN,KAAKtP,GAAK,CAAG,QAAQ,GAAG,MAKrC,QAAS63D,gBAAevoD,KAAMtS,OAAQqoC,KAAMlkC,MAC3C,GAAGA,KAAKg6B,KAAO,EAAG,MAAOxb,WAAUrQ,KAAMtS,OACzC,IAAIy9B,QAASnrB,KAAKtP,EAAIhD,MACtB,IAAIH,KACJ,KAAI,GAAIC,GAAI,EAAGA,IAAMuoC,KAAKroC,SAAUF,EAAG,CACtC,OAAOuoC,KAAKvoC,GAAG,IACd,IAAK,WACJuoC,KAAKvoC,GAAG,GAAK+1D,oBAAoBvjD,KACjCzS,GAAEoV,KAAKozB,KAAKvoC,GAAG,GACf,MACD,KAAK,aACJuoC,KAAKvoC,GAAG,GAAK81D,kBAAkBtjD,KAAM+1B,KAAKvoC,GAAG,GAC7CD,GAAEoV,KAAKozB,KAAKvoC,GAAG,GACf,MACD,SAAS,OAGXE,OAASy9B,OAASnrB,KAAKtP,CACvB,IAAGhD,SAAW,EAAGH,EAAEoV,KAAK0N,UAAUrQ,KAAMtS,QACxC,OAAOH,GAIR,QAASyoC,yBAAwBh2B,KAAMtS,OAAQmE,KAAMgkC,KACpD,GAAI1K,QAASnrB,KAAKtP,EAAIhD,MACtB,IAAIqoC,MAAOyyB,WAAWxoD,KAAM61B,IAC5B,IAAI4yB,KACJ,IAAGt9B,SAAWnrB,KAAKtP,EAAG+3D,KAAOF,eAAevoD,KAAMmrB,OAASnrB,KAAKtP,EAAGqlC,KAAMlkC,KACzE,QAAQkkC,KAAM0yB,MAIf,QAASL,4BAA2BpoD,KAAMtS,OAAQmE,MACjD,GAAIs5B,QAASnrB,KAAKtP,EAAIhD,MACtB,IAAI+6D,MAAM5yB,IAAM71B,KAAKQ,WAAW,EAChC,IAAGq1B,KAAO,MAAQ,UAAWxlB,UAAUrQ,KAAMtS,OAAO,GACpD,IAAIqoC,MAAOyyB,WAAWxoD,KAAM61B,IAC5B,IAAGnoC,SAAWmoC,IAAM,EAAG4yB,KAAOF,eAAevoD,KAAMtS,OAASmoC,IAAM,EAAGE,KAAMlkC,KAC3E,QAAQkkC,KAAM0yB,MAIf,QAASlyB,2BAA0Bv2B,KAAMtS,OAAQmE,MAChD,GAAIs5B,QAASnrB,KAAKtP,EAAIhD,MACtB,IAAI+6D,MAAM5yB,IAAM71B,KAAKQ,WAAW,EAChC,IAAIu1B,MAAOyyB,WAAWxoD,KAAM61B,IAC5B,IAAGA,KAAO,MAAQ,UAAWxlB,UAAUrQ,KAAMtS,OAAO,GACpD,IAAGA,SAAWmoC,IAAM,EAAG4yB,KAAOF,eAAevoD,KAAMmrB,OAAS0K,IAAM,EAAGE,KAAMlkC,KAC3E,QAAQkkC,KAAM0yB,MAIf,QAAShyB,0BAAyBz2B,KAAMtS,OAAQmE,KAAMwkC,KACrD,GAAIlL,QAASnrB,KAAKtP,EAAIhD,MACtB,IAAI+6D,MAAM5yB,IAAM71B,KAAKQ,WAAW,EAChC,IAAGq1B,KAAO,MAAQ,UAAWxlB,UAAUrQ,KAAMtS,OAAO,GACpD,IAAIqoC,MAAOyyB,WAAWxoD,KAAM61B,IAC5B,IAAGnoC,SAAWmoC,IAAM,EAAG4yB,KAAOF,eAAevoD,KAAMmrB,OAAS0K,IAAM,EAAGE,KAAMlkC,KAC3E,QAAQkkC,KAAM0yB,MAIf,QAASD,YAAWxoD,KAAMtS,QACzB,GAAIy9B,QAASnrB,KAAKtP,EAAIhD,MACtB,IAAI6U,GAAGotB,GAAI+4B,OACX,OAAMv9B,QAAUnrB,KAAKtP,EAAG,CACvBhD,OAASy9B,OAASnrB,KAAKtP,CACvBi/B,IAAK3vB,KAAKA,KAAKtP,EACf6R,GAAIgjD,SAAS51B,GAEb,IAAGA,KAAO,IAAQA,KAAO,GAAM,CAC9BA,GAAK3vB,KAAKA,KAAKtP,EAAI,EACnB6R,IAAKotB,KAAO,GAAOm4B,MAAQC,OAAOp4B,IAEnC,IAAIptB,IAAMA,EAAElF,EAAG,CAAEqrD,KAAK/lD,KAAK0N,UAAUrQ,KAAMtS,aACtC,CAAEg7D,KAAK/lD,MAAMJ,EAAEyW,EAAGzW,EAAElF,EAAE2C,KAAMtS,WAElC,MAAOg7D,MAGR,QAASC,QAAO56D,GAAK,MAAOA,GAAES,IAAI,QAAS80B,IAAG3xB,GAAK,MAAOA,GAAE,KAAM8Z,KAAK,KAGvE,QAASm9C,mBAAkBP,QAAS91C,MAAOL,KAAM22C,SAAUh3D,MAC1D,GAAGA,OAASD,WAAaC,KAAKg6B,OAAS,EAAG,MAAO,SACjD,IAAIi9B,QAASv2C,QAAU3gB,UAAY2gB,OAAS1iB,GAAGY,EAAE,EAAG+I,EAAE,GACtD,IAAIuvD,UAAYh6D,GAAIC,GAAI4I,KAAMnH,EAAGswD,KAAMiI,QAASxvD,CAChD,KAAI6uD,QAAQ,KAAOA,QAAQ,GAAG,GAAI,MAAO,EAEzC,KAAI,GAAIrtD,IAAK,EAAGiuD,MAAQZ,QAAQ,GAAG36D,OAAQsN,GAAKiuD,QAASjuD,GAAI,CAC5D,GAAIqC,GAAIgrD,QAAQ,GAAGrtD,GAEnB,QAAOqC,EAAE,IAGR,IAAK,YAAa0rD,MAAMpmD,KAAK,IAAMomD,MAAM9kC,MAAQ,MAEjD,KAAK,WAAY8kC,MAAMpmD,KAAK,IAAMomD,MAAM9kC,MAAQ,MAEhD,KAAK,aAAc8kC,MAAMpmD,KAAKomD,MAAM9kC,MAAQ,IAAM,MAIlD,KAAK,SACJl1B,GAAKg6D,MAAM9kC,KAAOj1B,IAAK+5D,MAAM9kC,KAC7B8kC,OAAMpmD,KAAK3T,GAAG,IAAID,GAClB,MAED,KAAK,SACJA,GAAKg6D,MAAM9kC,KAAOj1B,IAAK+5D,MAAM9kC,KAC7B8kC,OAAMpmD,KAAK3T,GAAG,IAAID,GAClB,MAED,KAAK,SACJA,GAAKg6D,MAAM9kC,KAAOj1B,IAAK+5D,MAAM9kC,KAC7B8kC,OAAMpmD,KAAK3T,GAAG,IAAID,GAClB,MAED,KAAK,SACJA,GAAKg6D,MAAM9kC,KAAOj1B,IAAK+5D,MAAM9kC,KAC7B8kC,OAAMpmD,KAAK3T,GAAG,IAAID,GAClB,MAED,KAAK,WACJA,GAAKg6D,MAAM9kC,KAAOj1B,IAAK+5D,MAAM9kC,KAC7B8kC,OAAMpmD,KAAK3T,GAAG,IAAID,GAClB,MAED,KAAK,YACJA,GAAKg6D,MAAM9kC,KAAOj1B,IAAK+5D,MAAM9kC,KAC7B8kC,OAAMpmD,KAAK3T,GAAG,IAAID,GAClB,MAED,KAAK,QACJA,GAAKg6D,MAAM9kC,KAAOj1B,IAAK+5D,MAAM9kC,KAC7B8kC,OAAMpmD,KAAK3T,GAAG,IAAID,GAClB,MAED,KAAK,QACJA,GAAKg6D,MAAM9kC,KAAOj1B,IAAK+5D,MAAM9kC,KAC7B8kC,OAAMpmD,KAAK3T,GAAG,KAAKD,GACnB,MAED,KAAK,QACJA,GAAKg6D,MAAM9kC,KAAOj1B,IAAK+5D,MAAM9kC,KAC7B8kC,OAAMpmD,KAAK3T,GAAG,IAAID,GAClB,MAED,KAAK,QACJA,GAAKg6D,MAAM9kC,KAAOj1B,IAAK+5D,MAAM9kC,KAC7B8kC,OAAMpmD,KAAK3T,GAAG,KAAKD,GACnB,MAED,KAAK,QACJA,GAAKg6D,MAAM9kC,KAAOj1B,IAAK+5D,MAAM9kC,KAC7B8kC,OAAMpmD,KAAK3T,GAAG,IAAID,GAClB,MAED,KAAK,QACJA,GAAKg6D,MAAM9kC,KAAOj1B,IAAK+5D,MAAM9kC,KAC7B8kC,OAAMpmD,KAAK3T,GAAG,KAAKD,GACnB,MAID,KAAK,WACJA,GAAKg6D,MAAM9kC,KAAOj1B,IAAK+5D,MAAM9kC,KAC7B8kC,OAAMpmD,KAAK3T,GAAG,IAAID,GAClB,MACD,KAAK,WACJA,GAAKg6D,MAAM9kC,KAAOj1B,IAAK+5D,MAAM9kC,KAC7B8kC,OAAMpmD,KAAK3T,GAAG,IAAID,GAClB,MACD,KAAK,WAAY,KAIjB,KAAK,gBAAiB,KAEtB,KAAK,cAAe,KAEpB,KAAK,YAAa,KAIlB,KAAK,SACJ6I,KAAOyF,EAAE,GAAG,EAAI5M,GAAIwhB,eAAessC,YAAYf,YAAYngD,EAAE,GAAG,KAAMyrD,OACtEC,OAAMpmD,KAAK66C,YAAY/sD,GACvB,MAED,KAAK,UACJmH,KAAOyF,EAAE,GAAG,EAAI5M,GAAIwhB,eAAessC,YAAYf,YAAYngD,EAAE,GAAG,KAAM6U,KACtE62C,OAAMpmD,KAAK66C,YAAY/sD,GACvB,MACD,KAAK,WACJmH,KAAOyF,EAAE,GAAG,EAAI0jD,MAAO1jD,EAAE,GAAG,EAAI5M,GAAIwhB,eAAe5U,EAAE,GAAG,GAAIyrD,OAC5DC,OAAMpmD,KAAKkmD,SAAS,GAAG9H,KAAK,GAAG,IAAIvD,YAAY/sD,GAC/C,MAID,KAAK,UAEL,IAAK,aAEJ,GAAIy4D,MAAO7rD,EAAE,GAAG,GAAI8rD,KAAO9rD,EAAE,GAAG,EAChC,KAAI6rD,KAAMA,KAAO,CACjB,IAAIE,MAAOL,MAAM9oD,OAAOipD,KACxBH,OAAMr7D,QAAUw7D,IAChB,IAAGC,OAAS,OAAQA,KAAOC,KAAK3nD,OAChCsnD,OAAMpmD,KAAKwmD,KAAO,IAAMC,KAAK39C,KAAK,KAAO,IACzC,MAGD,KAAK,UAAWs9C,MAAMpmD,KAAKtF,EAAE,GAAK,OAAS,QAAU,MAErD,KAAK,SAAU0rD,MAAMpmD,KAAKtF,EAAE,GAAK,MAEjC,KAAK,SAAU0rD,MAAMpmD,KAAK3U,OAAOqP,EAAE,IAAM,MAEzC,KAAK,SAAU0rD,MAAMpmD,KAAK,IAAMtF,EAAE,GAAK,IAAM,MAE7C,KAAK,SAAU0rD,MAAMpmD,KAAKtF,EAAE,GAAK,MAEjC,KAAK,UACJzF,KAAOyF,EAAE,GAAG,EAAI7D,GAAI8Y,gBAAgBjV,EAAE,GAAG,GAAIyrD,OAC7CC,OAAMpmD,KAAK87C,aAAajlD,GACxB,MAED,KAAK,YACJ5B,KAAOyF,EAAE,GAAG,EAAI0jD,MAAO1jD,EAAE,GAAG,EAAI7D,GAAI6D,EAAE,GAAG,EACzC0rD,OAAMpmD,KAAKkmD,SAAS,GAAG9H,KAAK,GAAG,IAAItC,aAAajlD,GAChD,MAED,KAAK,aACJuvD,MAAMpmD,KAAK,OAASomD,MAAM9kC,MAAQ,IAClC,MAID,KAAK,cAAe,KAGpB,KAAK,UAEJ+kC,QAAU3rD,EAAE,GAAG,EACf,IAAIgsD,KAAMR,SAAS,GAAGG,QACtB,IAAIjoD,MAAOsoD,IAAIpzB,IACf,IAAGl1B,OAAQuoD,qBAAqBvoD,KAAOuoD,oBAAoBvoD,KAC3DgoD,OAAMpmD,KAAK5B,KACX,MAGD,KAAK,WAEJ,GAAIwoD,SAAUlsD,EAAE,GAAG,EAAI2rD,SAAU3rD,EAAE,GAAG,EAAI,IAAImsD,WAE9C,IAAGX,SAASU,QAAQ,GAAIC,WAAaX,SAASU,QAAQ,GAAGP,aACpD,IAAGH,SAASU,QAAQ,GAAIC,WAAaX,SAASU,QAAQ,GAAGP,QAC9D,KAAIQ,WAAYA,YAAcp0B,KAAM,YACpC2zB,OAAMpmD,KAAK6mD,WAAWp0B,KACtB,MAID,KAAK,WAAY2zB,MAAMpmD,KAAK,IAAMomD,MAAM9kC,MAAQ,IAAM,MAGtD,KAAK,YAAa8kC,MAAMpmD,KAAK,QAAU,MAIvC,KAAK,SACJlS,GAAKA,EAAE4M,EAAE,GAAG,GAAG7D,EAAE6D,EAAE,GAAG,GACtB,IAAIzI,IAAKnE,EAAGyhB,KAAKzhB,EAAG+I,EAAE0Y,KAAK1Y,EAC3B,IAAGqvD,SAASY,QAAQjM,YAAY/sD,IAAK,CACpC,GAAIi5D,SAAWb,SAASY,QAAQjM,YAAY/sD,GAC5Cs4D,OAAMpmD,KAAKimD,kBAAkBc,QAASZ,OAAQl0D,EAAGi0D,SAAUh3D,WAEvD,CACJ,GAAI83D,KAAM,KACV,KAAI56D,GAAG,EAAEA,IAAI85D,SAASe,OAAOl8D,SAAUqB,GAAI,CAE1CC,GAAK65D,SAASe,OAAO76D,GACrB,IAAG0B,EAAEA,EAAIzB,GAAG,GAAGa,EAAEY,GAAKA,EAAEA,EAAIzB,GAAG,GAAG6Y,EAAEpX,EAAG,QACvC,IAAGA,EAAE+I,EAAIxK,GAAG,GAAGa,EAAE2J,GAAK/I,EAAE+I,EAAIxK,GAAG,GAAG6Y,EAAErO,EAAG,QACvCuvD,OAAMpmD,KAAKimD,kBAAkB55D,GAAG,GAAI85D,OAAQl0D,EAAGi0D,SAAUh3D,OAE1D,IAAI83D,IAAKZ,MAAMpmD,KAAKtF,EAAE,IAEvB,KAGD,KAAK,WACJ0rD,MAAMpmD,KAAK,IAAMtF,EAAE,GAAG7O,IAAIm6D,QAAQl9C,KAAK,KAAO,IAC9C,MAID,KAAK,aAEJ,KAGD,KAAK,eAAgB,KAGrB,KAAK,SAAU,KAGf,KAAK,YAAa,KAGlB,KAAK,aACJs9C,MAAMpmD,KAAK,GACX,MAGD,KAAK,aAAc,KAGnB,KAAK,WAAYomD,MAAMpmD,KAAK,GAAK,MAGjC,KAAK,cAAe,KAGpB,KAAK,aAAc,KAEnB,SAAS,KAAM,+BAAiCtF,GAKlD,MAAO0rD,OAAM,GAId,QAASc,6BAA4Bv8D,KAAMI,QAC1C,GAAImoC,KAAMvoC,KAAKkT,WAAW,EAC1B,OAAO6P,WAAU/iB,KAAMI,OAAO,GAG/B,GAAIo8D,cACH93D,EAAK,YACLC,EAAK,QACLC,EAAK,QAIN,IAAI0wD,QACH7wD,EAAQ,OACRC,EAAQ,OACRC,EAAQ,aACRC,EAAQ,YACRC,EAAQ,OACR8mB,EAAQ,UACRC,EAAQ,cACRjE,EAAQ,aACRkE,EAAQ,QACR/mB,EAAQ,gBACRC,GAAQ,OACRC,GAAQ,aACRC,GAAQ,cACRC,GAAQ,cACRC,GAAQ,cACRC,GAAQ,OACRC,GAAQ,QACRC,GAAQ,MACRK,GAAQ,iBACRiiB,GAAQ,mBACR60C,GAAQ,iBACRC,GAAQ,oBACR5wC,GAAQ,OACRC,GAAQ,UACRC,GAAQ,mBACRnE,GAAQ,YACR2E,GAAQ,UACRC,GAAQ,gBACRC,GAAQ,cACRE,GAAQ,YACRsrC,GAAQ,UACRpwC,GAAQ,cACRliB,GAAQ,eACRC,GAAQ,eACRC,GAAQ,OACRC,GAAQ,cACR8mB,GAAQ,QACR9E,GAAQ,gBACRC,GAAQ,YACR8E,GAAQ,QACR9mB,GAAQ,SACRC,GAAQ,kBACRC,GAAQ,eACRC,GAAQ,OACRC,GAAQ,MACRu2D,GAAQ,OACRC,GAAQ,QACR7vC,GAAQ,QACR8vC,GAAQ,gBACRC,GAAQ,cACR9vC,GAAQ,SACR3mB,GAAQ,aACR8xD,GAAQ,YACRlrC,GAAQ,cACR8vC,GAAQ,eACRC,GAAQ,eACR9vC,GAAQ,eACRurC,GAAQ,mBACRtrC,GAAQ,mBACRyrC,GAAQ,eACRE,GAAQ,cACRhZ,GAAQ,iBACRmZ,GAAQ,eACRE,GAAQ,cACRE,GAAQ,kBACRE,GAAQ,cACRC,GAAQ;AACRE,GAAQ,cACRE,GAAQ,YACR7a,GAAQ,gBACRke,GAAQ,OACRC,GAAQ,SACRC,GAAQ,cACR/vC,GAAQ,YACRC,GAAQ,eACR+vC,GAAQ,mBACR9vC,GAAQ,WACR+vC,GAAQ,aACR9vC,GAAQ,UACR+vC,GAAQ,QACRC,GAAQ,gBACRxD,GAAQ,cACRvsC,GAAQ,cACR0sC,GAAQ,QACRE,GAAQ,UACRE,GAAQ,OACRkD,GAAQ,SACRC,GAAQ,YACRjF,GAAQ,UACRE,GAAQ,eACRC,GAAQ,gBACRE,GAAQ,iBACRE,IAAQ,iBACRC,IAAQ,oBACRE,IAAQ,oBACRE,IAAQ,WACRE,IAAQ,gBACR7rC,IAAQ,gBACRgsC,IAAQ,gBACRE,IAAQ,gBACRE,IAAQ,eACRC,IAAQ,SACR4D,IAAQ,cACRC,IAAQ,gBACRC,IAAQ,QACRC,IAAQ,QACRC,IAAQ,QACRC,IAAQ,QACRC,IAAQ,UACRC,IAAQ,UACRC,IAAQ,QACRC,IAAQ,MACRC,IAAQ,cACRpE,IAAQ,iBACRC,IAAQ,UACRI,IAAQ,aACRE,IAAQ,eACR8D,IAAQ,eACRC,IAAQ,aACRtf,IAAQ,cACRC,IAAQ,cACRC,IAAQ,kBACRqf,IAAQ,YACRC,IAAQ,iBACRC,IAAQ,cACRtf,IAAQ,eACRuf,IAAQ,eACRtf,IAAQ,YACRuf,IAAQ,QACRC,IAAQ,YACRC,IAAQ,UACRC,IAAQ,gBACRC,IAAQ,UACRC,IAAQ,aACRC,IAAQ,aACRC,IAAQ,gBACRC,IAAQ,YACRC,IAAQ,aACRC,IAAQ,UACRC,IAAQ,OACRC,IAAQ,cACRC,IAAQ,UACRC,IAAQ,YACRC,IAAQ,iBACRC,IAAQ,cACRC,IAAQ,oBACRvgB,IAAQ,gBACRC,IAAQ,eACRC,IAAQ,iBACRsgB,IAAQ,kBACRC,IAAQ,cACRC,IAAQ,qBACRC,IAAQ,SACRC,IAAQ,cACRC,IAAQ,WACRC,IAAQ,WACRC,IAAQ,eACRC,IAAQ,eACRC,IAAQ,iBACRC,IAAQ,eACRC,IAAQ,kBACR9gB,IAAQ,qBACR+gB,IAAQ,aACRC,IAAQ,YACRC,IAAQ,YACRC,IAAQ,gBACRC,IAAQ,cACRC,IAAQ,eACRC,IAAQ,kBACRC,IAAQ,oBACRC,IAAQ,kBACRC,IAAQ,iBACRC,IAAQ,UACRC,IAAQ,YACRC,IAAQ,YACRC,IAAQ,aACRC,IAAQ,cACRC,IAAQ,UACRC,IAAQ,SACR9hB,IAAQ,cACR+hB,IAAQ,UACRC,IAAQ,oBACRC,IAAQ,kBACRC,IAAQ,QACRC,IAAQ,aACRC,IAAQ,YACRC,IAAQ,cACRt0C,IAAQ,mBACRu0C,IAAQ,oBACRC,IAAQ,cACRv0C,IAAQ,cACRw0C,IAAQ,mBACRv0C,IAAQ,eACRw0C,IAAQ,aACRC,IAAQ,eACRziB,IAAQ,gBACR0iB,IAAQ,aACRC,IAAQ,cACRC,IAAQ,cACRC,IAAQ,iBACRC,IAAQ,YACRC,IAAQ,cACRC,IAAQ,eACRC,IAAQ,aACRC,IAAQ,aACRC,IAAQ,gBACRC,IAAQ,eACRC,IAAQ,kBACRC,IAAQ,gBACRC,IAAQ,qBACRC,IAAQ,WACRC,IAAQ,OACRC,IAAQ,gBACRC,IAAQ,kBACRC,IAAQ,aACRC,IAAQ,aACRC,IAAQ,eACRC,IAAQ,iBACRC,IAAQ,cACRC,IAAQ,iBACRC,IAAQ,qBACRC,IAAQ,YACRC,IAAQ,oBACRC,IAAQ,WACRC,IAAQ,cACRC,IAAQ,iBACRC,IAAQ,WACRC,IAAQ,eACRC,IAAQ,gBACRC,IAAQ,gBACRC,IAAQ,mBACRC,IAAQ,iBACRC,IAAQ,eACRC,IAAQ,cACRC,IAAQ,YACRC,IAAQ,kBACRC,IAAQ,oBACRC,IAAQ,iBACRC,IAAQ,YACRC,IAAQ,aACRC,IAAQ,oBACRC,IAAQ,aACRC,IAAQ,eACRC,IAAQ,iBACRC,IAAQ,kBACRC,IAAQ,eACRC,IAAQ,gBACRC,IAAQ,gBACRC,IAAQ,qBACRC,IAAQ,mBACRC,IAAQ,qBACRC,IAAQ,yBACRC,IAAQ,cACRC,IAAQ,aACRC,IAAQ,mBACRC,IAAQ,sBACRC,IAAQ,eACRC,IAAQ,eACRC,IAAQ,gBACRC,IAAQ,cACRC,IAAQ,kBACRC,IAAQ,cACRC,IAAQ,gBACRC,IAAQ,kBACRC,IAAQ,2BACRC,IAAQ,eACRC,IAAQ,iBACRC,IAAQ,aACRC,IAAQ,iBACRC,IAAQ,YACRC,IAAQ,mBACRC,IAAQ,cACRC,IAAQ,wBACRp5C,IAAQ,kBACRq5C,IAAQ,qBACRC,IAAQ,kBACRC,IAAQ,kBACRC,IAAQ,kBACRC,IAAQ,qBACRC,IAAQ,aACRC,IAAQ,iBACRC,IAAQ,eACRC,IAAQ,mBACRC,IAAQ,aACRC,IAAQ,eACRC,IAAQ,kBACRC,IAAQ,gBACRC,IAAQ,gBACRC,IAAQ,kBACRC,IAAQ,kBACRC,IAAQ,gBACRC,IAAQ,iBACRC,IAAQ,uBACRC,IAAQ,0BACRC,IAAQ,iBACRC,IAAQ,eACRC,IAAQ,YACRC,IAAQ,cACRC,IAAQ,aACRC,IAAQ,iBACRC,IAAQ,kBACRC,IAAQ,kBACRC,IAAQ,gBACRC,IAAQ,kBACRC,IAAQ,gBACRC,IAAQ,gBACRC,IAAQ,qBACRC,IAAQ,cACRC,IAAQ,mBACRr7C,IAAQ,uBACRs7C,IAAQ,mBACRC,IAAQ,kBACRC,IAAQ,mBACRC,IAAQ,cACRC,IAAQ,iBACRC,IAAQ,kBACRC,IAAQ,eACRC,IAAQ,eACRC,IAAQ,oBACRC,IAAQ,sBACRC,IAAQ,sBACRC,IAAQ,mBACRC,IAAQ,qBACRC,IAAQ,qBACRC,IAAQ,gBACRC,IAAQ,aACRC,IAAQ,YACRC,IAAQ,cACRC,IAAQ,mBACRC,IAAQ,gBACRC,IAAQ,wBACRC,IAAQ,qBACRC,IAAQ,SACRC,IAAQ,kBACRC,IAAQ,gBACRC,IAAQ,kBACRC,IAAQ,gBACRC,IAAQ,gBACRC,IAAQ,mBACRC,IAAQ,mBACRC,IAAQ,oBACRC,IAAQ,eACRC,IAAQ,oBACRC,IAAQ,uBACRC,IAAQ,cACRC,IAAQ,WACRC,IAAQ,WACRC,IAAQ,aACRC,IAAQ,aACRC,IAAQ,eACRC,IAAQ,eACRC,IAAQ,cACRC,IAAQ,qBACRC,IAAQ,yBACRC,IAAQ,mBACRC,IAAQ,WACRC,IAAQ,iBACRC,IAAQ,iBACRC,IAAQ,eACRC,IAAQ,YACRC,IAAQ,mBACRC,IAAQ,mBACRC,IAAQ,iBACRC,IAAQ,kBACRC,IAAQ,oBACRC,IAAQ,mBACRC,IAAQ,cACRC,IAAQ,gBACRC,IAAQ,WACRC,IAAQ,YACRC,IAAQ,cACRC,IAAQ,cACRC,IAAQ,mBACRC,IAAQ,oBACRC,IAAQ,iBACRC,IAAQ,YACRC,IAAQ,SACRC,IAAQ,SACRC,IAAQ,gBACRC,IAAQ,mBACRC,IAAQ,iBACRC,IAAQ,WACRC,IAAQ,gBACRC,IAAQ,gBACRC,IAAQ,cACRC,IAAQ,iBACRC,IAAQ,iBACRC,IAAQ,oBACRC,IAAQ,sBACRC,IAAQ,aACRC,IAAQ,cACRC,IAAQ,cACRC,IAAQ,oBACRC,IAAQ,eACRC,IAAQ,gBACRC,IAAQ,oBAIT,IAAI1Z,OACHxwD,EAAQ,QACRC,EAAQ,KACRC,EAAQ,OACRC,EAAQ,UACRC,EAAQ,MACR8mB,EAAQ,UACRC,EAAQ,MACRjE,EAAQ,MACRkE,EAAQ,MACR/mB,EAAQ,SACRC,GAAQ,KACRC,GAAQ,MACRC,GAAQ,QACRC,GAAQ,SACRC,GAAQ,QACRC,GAAQ,MACRC,GAAQ,MACRC,GAAQ,MACRC,GAAQ,OACRC,GAAQ,KACRC,GAAQ,OACRC,GAAQ,MACRC,GAAQ,KACRiiB,GAAQ,QACR60C,GAAQ,MACRC,GAAQ,MACR5wC,GAAQ,OACRC,GAAQ,QACRC,GAAQ,SACRnE,GAAQ,QACR2E,GAAQ,OACRC,GAAQ,MACRC,GAAQ,MACRC,GAAQ,QACRC,GAAQ,OACRsrC,GAAQ,QACRpwC,GAAQ,MACRliB,GAAQ,KACRC,GAAQ,MACRC,GAAQ,MACRC,GAAQ,SACR8mB,GAAQ,OACR9E,GAAQ,WACRC,GAAQ,OACR8E,GAAQ,OACR9mB,GAAQ,SACRC,GAAQ,MACRC,GAAQ,OACRC,GAAQ,OACRC,GAAQ,SACRu2D,GAAQ,QACRC,GAAQ,SACR7vC,GAAQ,SACR8vC,GAAQ,OACRC,GAAQ,OACR9vC,GAAQ,SACR3mB,GAAQ,KACR8xD,GAAQ,KACRC,GAAQ,OACRC,GAAQ,MACRC,GAAQ,OACRrrC,GAAQ,OACR8vC,GAAQ,MACRC,GAAQ,OACR9vC,GAAQ,QACRurC,GAAQ,OACRtrC,GAAQ,OACRyrC,GAAQ,MACRE,GAAQ,QACRhZ,GAAQ,OACRmZ,GAAQ,UACRE,GAAQ,OACRE,GAAQ,SACRE,GAAQ,SACRC,GAAQ,MACRE,GAAQ,QACRE,GAAQ,OACR7a,GAAQ,UACRke,GAAQ,SACRC,GAAQ,SACRC,GAAQ,SACR/vC,GAAQ,WACRC,GAAQ,SACR+vC,GAAQ,YACR9vC,GAAQ,QACR+vC,GAAQ,OACR9vC,GAAQ,OACR+vC,GAAQ,OACRC,GAAQ,WACRxD,GAAQ,SACRvsC,GAAQ,QACR0sC,GAAQ,UACRE,GAAQ,SACRE,GAAQ,YACRkD,GAAQ,cACRC,GAAQ,YACRjF,GAAQ,SACRE,GAAQ,QACRC,GAAQ,OACRE,GAAQ,OACRE,IAAQ,SACRC,IAAQ,UACRE,IAAQ,UACRE,IAAQ,QACRE,IAAQ,QACR7rC,IAAQ,QACRgsC,IAAQ,cACRE,IAAQ,WACRE,IAAQ,YACRC,IAAQ,MACR4D,IAAQ,OACRC,IAAQ,OACRC,IAAQ,QACRC,IAAQ,QACRC,IAAQ,SACRC,IAAQ,OACRC,IAAQ,QACRC,IAAQ,QACRC,IAAQ,OACRC,IAAQ,UACRC,IAAQ,aACRpE,IAAQ,OACRC,IAAQ,QACRE,IAAQ,YACRE,IAAQ,OACRE,IAAQ,OACR8D,IAAQ,QACRC,IAAQ,SACRtf,IAAQ,WACRC,IAAQ,UACRC,IAAQ,IACRqf,IAAQ,IACRC,IAAQ,QACRC,IAAQ,SACRtf,IAAQ,QACRuf,IAAQ,UACRtf,IAAQ,QACRuf,IAAQ,WACRC,IAAQ,SACRC,IAAQ,OACRC,IAAQ,YACR8P,IAAQ,YACR7P,IAAQ,MACRC,IAAQ,MACRC,IAAQ,MACRC,IAAQ,UACRC,IAAQ,UACRC,IAAQ,UACRC,IAAQ,WACRC,IAAQ,WACRC,IAAQ,OACRC,IAAQ,UACRC,IAAQ,WACRC,IAAQ,cACRmP,IAAQ,iBACRlP,IAAQ,gBACRmP,IAAQ,iBACRC,IAAQ,WACRC,IAAQ,cACRpP,IAAQ,iBACRqP,IAAQ,iBACR5vB,IAAQ,aACRC,IAAQ,QACRC,IAAQ,UACRsgB,IAAQ,WACRqP,IAAQ,QACRpP,IAAQ,QACRC,IAAQ,OACRC,IAAQ,OACRC,IAAQ,SACRC,IAAQ,aACRC,IAAQ,MACRC,IAAQ,QACRC,IAAQ,QACRC,IAAQ,OACRC,IAAQ,WACR4O,IAAQ,UACR3vB,IAAQ,OACRC,IAAQ,UACR2vB,IAAQ,YACRC,IAAQ,UACRC,IAAQ,OACRC,IAAQ,UACRC,IAAQ,UACRC,IAAQ,OACRjP,IAAQ,WACR9gB,IAAQ,gBACR+gB,IAAQ,aACRC,IAAQ,eACRC,IAAQ,WACRC,IAAQ,YACRC,IAAQ,WACRC,IAAQ,OACRC,IAAQ,SACRC,IAAQ,OACRC,IAAQ,UACRC,IAAQ,QACRC,IAAQ,QACRC,IAAQ,YACRC,IAAQ,UACRC,IAAQ,aACRC,IAAQ,aACR5hB,IAAQ,WACR+vB,IAAQ,QACRhO,IAAQ,UACRC,IAAQ,WACRC,IAAQ,QACRC,IAAQ,SACRC,IAAQ,OACRC,IAAQ,OACRC,IAAQ,UACRt0C,IAAQ,YACRu0C,IAAQ,MACRC,IAAQ,OACRv0C,IAAQ,OACRy0C,IAAQ,UACRC,IAAQ,UACRsN,IAAQ,QACR/vB,IAAQ,MACR0iB,IAAQ,OACRC,IAAQ,UACRC,IAAQ,SACRC,IAAQ,WACRC,IAAQ,SACRC,IAAQ,aACRC,IAAQ,OACRgN,IAAQ,OACRC,IAAQ,OACRC,IAAQ,QACRC,IAAQ,QACRC,IAAQ,QACRC,IAAQ,OACRC,IAAQ,gBACRC,IAAQ,WACRtwB,IAAQ,aACRuwB,IAAQ,cACRvN,IAAQ,gBACRwN,IAAQ,kBACRC,IAAQ,gBACRxN,IAAQ,WACRyN,IAAQ,OACRC,IAAQ,QACRC,IAAQ,aACRC,IAAQ,KACRC,IAAQ,QACR1N,IAAQ,SACRC,IAAQ,YACRC,IAAQ,cACRC,IAAQ,iBACRn7C,IAAQ,OACRo7C,IAAQ,gBACRuN,IAAQ,WACRC,IAAQ,cACRvN,IAAQ,WACRC,IAAQ,iBACRuN,IAAQ,aACRC,IAAQ,YACRC,IAAQ,eACRC,IAAQ,eACRzN,IAAQ,cACRC,IAAQ,aACRC,IAAQ,cACRC,IAAQ,eACRC,IAAQ,SACRsN,IAAQ,WACRC,IAAQ,UACRtN,IAAQ,UACRC,IAAQ,YACRC,IAAQ,UACRqN,IAAQ,SACRpN,IAAQ,SACRC,IAAQ,aACRC,IAAQ,YACRC,IAAQ,OACRC,IAAQ,YACRC,IAAQ,QACRC,IAAQ,OACRC,IAAQ,SACRC,IAAQ,YACRC,IAAQ,QACR4M,IAAQ,YACRC,IAAQ,WACR5M,IAAQ,UACRC,IAAQ,cACRC,IAAQ,cACRC,IAAQ,SACRC,IAAQ,eACRC,IAAQ,WACRwM,IAAQ,YACRvM,IAAQ,UACRC,IAAQ,WACRC,IAAQ,cACRC,IAAQ,MACRqM,IAAQ,SACRC,IAAQ,UACRC,IAAQ,QACRtM,IAAQ,UACRuM,IAAQ,UACRC,IAAQ,WACRvM,IAAQ,WACRC,IAAQ,UACRC,IAAQ,SACRC,IAAQ,QACRC,IAAQ,WACRC,IAAQ,QACRC,IAAQ,YACRC,IAAQ,UACRC,IAAQ,MACRC,IAAQ,QACRC,IAAQ,QACRC,IAAQ,QACR6L,IAAQ,OACR5L,IAAQ,QACRC,IAAQ,UACRC,IAAQ,UACRC,IAAQ,QACRC,IAAQ,OACRC,IAAQ,OACRC,IAAQ,QACRC,IAAQ,QACRsL,IAAQ,QACRC,IAAQ,WACRtL,IAAQ,aACRuL,IAAQ,cACRtL,IAAQ,OACRuL,IAAQ,WACRC,IAAQ,OACRC,IAAQ,gBACRC,IAAQ,YACRzL,IAAQ,cACR0L,IAAQ,QACRzL,IAAQ,iBACRC,IAAQ,kBACRyL,IAAQ,kBACRC,IAAQ,iBACRzL,IAAQ,UACRC,IAAQ,UACRC,IAAQ,WACRwL,IAAQ,QACRC,IAAQ,UACRC,IAAQ,aACRC,IAAQ,eACRC,IAAQ,oBACR3L,IAAQ,QACRp5C,IAAQ,UACRq5C,IAAQ,aACR2L,IAAQ,eACR/kD,IAAQ,QACRq5C,IAAQ,cACRC,IAAQ,cACR0L,IAAQ,WACR/kD,IAAQ,eACRglD,IAAQ,YACRC,IAAQ,WACRC,IAAQ,WACRC,IAAQ,OACRC,IAAQ,OACRC,IAAQ,UACRC,IAAQ,QACRC,IAAQ,SACRC,IAAQ,OACRC,IAAQ,WACRC,IAAQ,gBACRpM,IAAQ,YACRqM,IAAQ,kBACRC,IAAQ,eACRrM,IAAQ,gBACRC,IAAQ,mBACRC,IAAQ,cACRC,IAAQ,gBACRC,IAAQ,cACRC,IAAQ,WACRC,IAAQ,MAET,IAAI5S,WACHrwD,EAAQ,EACRC,EAAQ,EACRQ,GAAQ,EACRC,GAAQ,EACRC,GAAQ,EACRC,GAAQ,EACRE,GAAQ,EACRC,GAAQ,EACRC,GAAQ,EACRiiB,GAAQ,EACR60C,GAAQ,EACRC,GAAQ,EACR5wC,GAAQ,EACRC,GAAQ,EACRS,GAAQ,EACRC,GAAQ,EACRC,GAAQ,EACRC,GAAQ,EACR9mB,GAAQ,EACRC,GAAQ,EACRC,GAAQ,EACR8mB,GAAQ,EACR9E,GAAQ,EACRC,GAAQ,EACR8E,GAAQ,EACR9mB,GAAQ,EACRE,GAAQ,EACRC,GAAQ,EACR02D,GAAQ,EACR5vC,GAAQ,EACRwrC,GAAQ,EACRtrC,GAAQ,EACRyrC,GAAQ,EACRE,GAAQ,EACRhZ,GAAQ,EACRqZ,GAAQ,EACRE,GAAQ,EACRE,GAAQ,EACRG,GAAQ,EACRE,GAAQ,EACR7a,GAAQ,EACRme,GAAQ,EACRC,GAAQ,EACRC,GAAQ,EACR7vC,GAAQ,EACRC,GAAQ,EACRkrC,GAAQ,EACRC,GAAQ,EACRE,GAAQ,EACRprC,IAAQ,EACRkwC,IAAQ,EACRC,IAAQ,EACRC,IAAQ,EACRC,IAAQ,EACRG,IAAQ,EACRC,IAAQ,EACRC,IAAQ,EACRnE,IAAQ,EACRqE,IAAQ,EACRC,IAAQ,EACRtf,IAAQ,EACRC,IAAQ,EACRC,IAAQ,EACRqf,IAAQ,EACRE,IAAQ,EACRtf,IAAQ,EACRuf,IAAQ,EACRtf,IAAQ,EACRuf,IAAQ,EACRC,IAAQ,EACRE,IAAQ,EACR8P,IAAQ,EACR7P,IAAQ,EACRC,IAAQ,EACR1f,IAAQ,EACRC,IAAQ,EACRsgB,IAAQ,EACRqP,IAAQ,EACR9O,IAAQ,EACRG,IAAQ,EACR4O,IAAQ,EACR3vB,IAAQ,EACRC,IAAQ,EACR2vB,IAAQ,EACRK,IAAQ,EACR9O,IAAQ,EACRC,IAAQ,EACRK,IAAQ,EACRC,IAAQ,EACRE,IAAQ,EACRC,IAAQ,EACRE,IAAQ,EACRI,IAAQ,EACRG,IAAQ,EACRC,IAAQ,EACRC,IAAQ,EACRt0C,IAAQ,EACRu0C,IAAQ,EACRC,IAAQ,EACRU,IAAQ,EACRgN,IAAQ,EACRC,IAAQ,EACRC,IAAQ,EACRC,IAAQ,EACRC,IAAQ,EACRC,IAAQ,EACRM,IAAQ,EACRrN,IAAQ,EACR0N,IAAQ,EACRE,IAAQ,EACRK,IAAQ,EACRrN,IAAQ,EACRC,IAAQ,EACRqN,IAAQ,EACRpN,IAAQ,EACRC,IAAQ,EACRC,IAAQ,EACRC,IAAQ,EACRC,IAAQ,EACRC,IAAQ,EACRC,IAAQ,EACRC,IAAQ,EACRC,IAAQ,EACRC,IAAQ,EACR4M,IAAQ,EACRC,IAAQ,EACR5M,IAAQ,EACRC,IAAQ,EACRC,IAAQ,EACRC,IAAQ,EACRC,IAAQ,EACRC,IAAQ,EACRwM,IAAQ,EACRvM,IAAQ,EACRC,IAAQ,EACRC,IAAQ,EACRC,IAAQ,EACRqM,IAAQ,EACRC,IAAQ,EACRC,IAAQ,EACRtM,IAAQ,EACRuM,IAAQ,EACRC,IAAQ,EACRvM,IAAQ,EACRC,IAAQ,EACRC,IAAQ,EACRC,IAAQ,EACRC,IAAQ,EACRC,IAAQ,EACRC,IAAQ,EACRC,IAAQ,EACRC,IAAQ,EACRC,IAAQ,EACRC,IAAQ,EACRC,IAAQ,EACRQ,IAAQ,EACRsL,IAAQ,EACRC,IAAQ,EACRtL,IAAQ,EACRwL,IAAQ,EACRC,IAAQ,EACRG,IAAQ,EACRvL,IAAQ,EACRC,IAAQ,EACR0L,IAAQ,EACRC,IAAQ,EACRzL,IAAQ,EACRp5C,IAAQ,EACRq5C,IAAQ,EACR2L,IAAQ,EACRG,IAAQ,EACRQ,IAAQ,EACRC,IAAQ,EACRpM,IAAQ,EACRqM,IAAQ,EACRC,IAAQ,EACRrM,IAAQ,EACRC,IAAQ,EACRC,IAAQ,EACRC,IAAQ,EACRC,IAAQ,EACRC,IAAQ,EACRrhE,MAAQ,EAGT,IAAI01D,sBACH4X,aAAc,OACdC,cAAe,QACfC,kBAAmB,YACnBC,eAAgB,SAChBC,kBAAmB,YACnBC,mBAAoB,aACpBC,aAAc,OACdC,kBAAmB,YACnBC,iBAAkB,WAClBC,mBAAoB,aACpBC,yBAA0B,mBAC1BC,kBAAmB,YACnBC,eAAgB,SAChBC,kBAAmB,YACnBC,cAAe,QACfC,kBAAmB,YACnBC,eAAgB,SAChBC,qBAAsB,eACtBC,wBAAyB,kBACzBC,mBAAoB,aACpBC,sBAAuB,gBACvBC,kBAAmB,YACnBC,qBAAsB,eACtBC,mBAAoB,aACpBC,gBAAiB,UACjBC,wBAAyB,kBACzBC,qBAAsB,eACtBC,YAAa,MACbC,aAAc,OACdC,iBAAkB,WAClBC,qBAAsB,eACtBC,qBAAsB,eACtBC,YAAa,MACbC,aAAc,OACdC,aAAc,OACdC,gBAAiB,UACjBC,qBAAsB,eACtBC,oBAAqB,cACrBC,qBAAsB,eACtBC,mBAAoB,aACpBC,eAAgB,SAChBC,kBAAmB,YACnBC,cAAe,QACfC,iBAAkB,WAClBC,eAAgB,SAChBC,kBAAmB,YACnBC,mBAAoB,aACpBC,sBAAuB,gBACvBC,oBAAqB,cACrBC,cAAe,QACfC,mBAAoB,aACpBC,kBAAmB,YACnBC,wBAAyB,kBACzBC,cAAe,QACfC,qBAAsB,eACtBC,aAAc,OACdC,gBAAiB,UACjBC,eAAgB,SAChBC,cAAe,QACfC,cAAe,QACfC,eAAgB,SAChBC,cAAe,QACfC,eAAgB,SAChBC,eAAgB,SAChBC,cAAe,QACfC,kBAAmB,YACnBC,oBAAqB,cACrBC,mBAAoB,aACpBC,qBAAsB,eACtBC,oBAAqB,cACrBC,kBAAmB,YACnBC,kBAAmB,YACnBC,cAAe,QACfC,sBAAuB,gBACvBC,yBAA0B,mBAC1BC,iBAAkB,WAClBC,kBAAmB,YACnBC,iBAAkB,WAClBC,oBAAqB,cACrBC,mBAAoB,aACpBC,oBAAqB,cACrBC,kBAAmB,YACnBC,uBAAwB,iBACxBC,uBAAwB,iBACxBC,wBAAyB,kBACzBC,wBAAyB,kBACzBC,qBAAsB,eACtBC,YAAa,MACbC,qBAAsB,eACtBC,qBAAsB,eACtBC,qBAAsB,eACtBC,oBAAqB,cACrBC,iBAAkB,WAClBC,gBAAiB,UACjBC,YAAa,MACbC,YAAa,MACbC,aAAc,OACdC,cAAe,QACfC,eAAgB,SAChBC,eAAgB,SAChBC,gBAAiB,UACjBC,gBAAiB,UACjBC,eAAgB,SAChBC,eAAgB,SAChBC,kBAAmB,YACnBC,kBAAmB,YACnBC,cAAe,QACfC,iBAAkB,WAClBC,eAAgB,SAChBC,gBAAiB,UACjBC,gBAAiB,UACjBC,cAAe,QACfC,cAAe,QACfC,mBAAoB,aACpBC,qBAAsB,eACtBC,qBAAsB,eACtBC,YAAa,MACbC,eAAgB,SAGjB,IAAInnD,QACJ,IAAIonD,YAEJhlD,MAAKilD,GAAK,+EAEV,SAASC,YAAW9lD,IAAKtoB,KACxB,IAAI,GAAI9M,GAAI,EAAGC,IAAMm1B,IAAIl1B,OAAQF,EAAIC,MAAOD,EAAG,GAAGo1B,IAAIp1B,GAAGsD,IAAMwJ,IAAK,CAAEsoB,IAAIoO,OAAU,OAAOxjC,GAC3Fo1B,IAAIn1B,MAAQqD,EAAEwJ,IAAMsoB,KAAIoO,OAAUpO,KAAIqO,QAAW,OAAOxjC,KAGzD,QAASk7E,gBAAernD,OAAQpP,KAAMrgB,MACpC,SAAW8nD,gBAAiB,YAAa,CACvC,GAAI,QAAQivB,KAAK12D,KAAKriB,GAAI,CAAE,MAAOqiB,MAAKriB,EACxC,GAAIqiB,KAAKriB,GAAMqiB,KAAKriB,IAAMqiB,KAAKriB,EAAI,CAAE,MAAOqiB,MAAKriB,EACjD,GAAIA,GAAIqiB,KAAKriB,KACb,IAAIqiB,KAAK1J,EAAG3Y,EAAEg5E,OAAS32D,KAAK1J,CAC5B,OAAOmxC,eAAcmvB,SAASj5E,OAE3B,CACH,GAAI2Y,GAAI3W,KAAKk3E,OAAO72D,KAAK1J,GAAK,KAAO0J,KAAK1J,EAAI,UAC9C,KAAI,GAAIhb,GAAI,EAAGC,IAAM6zB,OAAO5zB,OAAQF,GAAKC,MAAOD,EAAG,GAAG8zB,OAAO9zB,GAAG0qD,WAAa1vC,EAAG,MAAOhb,EACvF8zB,QAAO7zB,MACLyqD,SAAS1vC,EACTwgE,OAAO,EACPxwB,OAAO,EACPywB,SAAS,EACTC,KAAK,EACLC,kBAAkB,EAEpB,OAAO17E,MAIX,QAAS27E,oBAAmBC,QAE1B,GAAIA,OAAQ,CAEV,GAAIx5E,KAEJ,UAAWw5E,QAAOnxB,UAAYtmD,UAAY,CACxC/B,EAAEg5E,OAASx4E,IAAIsN,OAAO0rE,OAAOnxB,UAG/B,GAAGmxB,OAAO7wB,OAAS,CACjB3oD,EAAEW,KAAQ8wB,OAAO60B,MAAMkzB,OAAO7wB,QAGhC,GAAI6wB,OAAOL,OAAQ,CACjBn5E,EAAEm+C,KAAO1sB,OAAOs1B,MAAMyyB,OAAOL,QAE/B,GAAIK,OAAOJ,SAAU,CACnBp5E,EAAEwnD,OAAS/1B,OAAO81B,QAAQiyB,OAAOJ,UAEnC,GAAII,OAAOC,gBAAgB,EAAG,CAC5Bz5E,EAAE4oD,UAAY4wB,OAAO5wB,UAIvB,MAAO8wB,MAAKjqE,MAAMiqE,KAAKC,UAAU35E,IAEnC,MAAO,MAGT,QAAS45E,aAAYz3D,EAAGyV,MAAOiiD,OAAQ73E,MACtC,IACC,GAAGmgB,EAAElhB,IAAM,IAAKkhB,EAAEzc,EAAIyc,EAAEzc,GAAKyf,KAAKhD,EAAEphB,OAC/B,IAAG62B,QAAU,EAAG,CACpB,GAAGzV,EAAElhB,IAAM,IAAK,CACf,IAAIkhB,EAAEphB,EAAE,KAAOohB,EAAEphB,EAAGohB,EAAEzc,EAAIlF,IAAIyE,aAAakd,EAAEphB,EAAE43E,cAC1Cx2D,GAAEzc,EAAIlF,IAAI6F,aAAa8b,EAAEphB,EAAE43E,cAE5B,IAAGx2D,EAAElhB,IAAM,IAAK,CACpB,GAAI2J,IAAKkM,QAAQqL,EAAEphB,EACnB,KAAI6J,GAAG,KAAOA,GAAIuX,EAAEzc,EAAIlF,IAAIyE,aAAa2F,GAAG+tE,cACvCx2D,GAAEzc,EAAIlF,IAAI6F,aAAauE,GAAG+tE,cAE3B,IAAGx2D,EAAEphB,IAAMgB,UAAW,MAAO,OAC7BogB,GAAEzc,EAAIlF,IAAIgG,SAAS2b,EAAEphB,EAAE43E,cAExB,IAAGx2D,EAAElhB,IAAM,IAAKkhB,EAAEzc,EAAIlF,IAAIoN,OAAOgqB,MAAM9gB,QAAQqL,EAAEphB,GAAG43E,cACpDx2D,GAAEzc,EAAIlF,IAAIoN,OAAOgqB,MAAMzV,EAAEphB,EAAE43E,SAChC,IAAG32E,KAAK83E,OAAQ33D,EAAExJ,EAAInY,IAAIsN,OAAO8pB,OAChC,MAAM5f,GAAK,GAAGhW,KAAK2wB,IAAK,KAAM3a,IAEjC,QAAS+hE,kBAAiBC,GAAIh6E,GAC5B,GAAIgB,GAAIwtD,kBAAkBxuD,EAC1B,IAAIgB,EAAEhB,EAAE2J,GAAK3I,EAAEgX,EAAErO,GAAK3I,EAAEhB,EAAEY,GAAKI,EAAEgX,EAAEpX,GAAKI,EAAEhB,EAAE2J,GAAK,GAAK3I,EAAEhB,EAAEY,GAAK,EAAGo5E,GAAG,QAAUprB,aAAa5tD,GAE9F,GAAIi5E,aAAc,oCAClB,IAAIC,gBAAiB,wDACrB,IAAIC,YAAa,qBACjB,IAAIC,UAAW,aACf,IAAIC,UAAW,eAEf,SAASC,cAAa78E,KAAMuE,KAAMswB,MAChC,IAAK70B,KAAM,MAAOA,KAElB,IAAIuC,KAGJ,IAAIu6E,MAAO98E,KAAKiC,QAAQ,aACxB,IAAI66E,KAAO,EAAG,CACZ,GAAI/zC,KAAM/oC,KAAKc,OAAOg8E,KAAM,IAAItxE,MAAMmxE,SACtC,IAAI5zC,KAAO,KAAMuzC,iBAAiB/5E,EAAGwmC,IAAI,IAI3C,GAAIg0C,cACJ,IAAI/8E,KAAKiC,QAAQ,oBAAsB,EAAG,CACxC,GAAI6nC,QAAS9pC,KAAKwL,MAAMgxE,YACxB,KAAKM,KAAO,EAAGA,MAAQhzC,OAAO1pC,SAAU08E,KACtCC,WAAWD,MAAQ/rB,kBAAkBjnB,OAAOgzC,MAAMh8E,OAAOgpC,OAAOgzC,MAAM76E,QAAQ,KAAQ,IAI1F,GAAI+6E,WACJ,IAAIz4E,KAAK04E,YAAcj9E,KAAKiC,QAAQ,cAAgB,EAAG,CAErD,GAAIi0D,MAAOl2D,KAAKwL,MAAMoxE,SACtBM,mBAAkBF,QAAS9mB,MAG7B,GAAIinB,WAAY56E,GAAI2J,EAAG,IAAS/I,EAAG,KAAUoX,GAAIrO,EAAG,EAAG/I,EAAG,GAG1D,IAAIi6E,MAAOp9E,KAAKwL,MAAMixE,eACtB,IAAIW,KAAMC,kBAAkBD,KAAK,GAAI76E,EAAGgC,KAAM44E,SAG9C,IAAIn9E,KAAKiC,QAAQ,oBAAsB,EAAGq7E,oBAAoB/6E,EAAGvC,KAAKwL,MAAMkxE,YAAa7nD,KAEzF,KAAKtyB,EAAE,SAAW46E,SAAS5iE,EAAEpX,GAAKg6E,SAAS56E,EAAEY,GAAKg6E,SAAS5iE,EAAErO,GAAKixE,SAAS56E,EAAE2J,EAAG3J,EAAE,QAAU4uD,aAAagsB,SACzG,IAAI54E,KAAKmtD,UAAY,GAAKnvD,EAAE,QAAS,CACnC,GAAIg7E,QAASxsB,kBAAkBxuD,EAAE,QACjC,IAAIgC,KAAKmtD,WAAa6rB,OAAOhjE,EAAErO,EAAG,CAChCqxE,OAAOhjE,EAAErO,EAAI3H,KAAKmtD,UAAY,CAC9B,IAAI6rB,OAAOhjE,EAAErO,EAAIixE,SAAS5iE,EAAErO,EAAGqxE,OAAOhjE,EAAErO,EAAIixE,SAAS5iE,EAAErO,CACvD,IAAIqxE,OAAOhjE,EAAErO,EAAIqxE,OAAOh7E,EAAE2J,EAAGqxE,OAAOh7E,EAAE2J,EAAIqxE,OAAOhjE,EAAErO,CACnD,IAAIqxE,OAAOhjE,EAAEpX,EAAIg6E,SAAS5iE,EAAEpX,EAAGo6E,OAAOhjE,EAAEpX,EAAIg6E,SAAS5iE,EAAEpX,CACvD,IAAIo6E,OAAOhjE,EAAEpX,EAAIo6E,OAAOh7E,EAAEY,EAAGo6E,OAAOh7E,EAAEY,EAAIo6E,OAAOhjE,EAAEpX,CACnDZ,GAAE,YAAcA,EAAE,OAClBA,GAAE,QAAU4uD,aAAaosB,SAG7B,GAAIR,WAAW38E,OAAS,EAAGmC,EAAE,WAAaw6E,UAC1C,IAAIC,QAAQ58E,OAAS,EAAGmC,EAAE,SAAWy6E,OACrC,OAAOz6E,GAGT,QAASi7E,qBAAoB1zC,QAC3B,GAAIA,OAAO1pC,QAAU,EAAG,MAAO,EAC/B,IAAIH,GAAI,sBAAwB6pC,OAAO1pC,OAAS,IAChD,KAAK,GAAIF,GAAI,EAAGA,GAAK4pC,OAAO1pC,SAAUF,EAAGD,GAAK,mBAAqBkxD,aAAarnB,OAAO5pC,IAAM,KAC7F,OAAOD,GAAI,gBAGb,QAASw9E,wBAAuBC,OAC9B,GAAIC,WAAYv/D,UAAU,YAAa,MACrCw/D,MAAOF,MAAME,OAAS,MACtBC,YAAaH,MAAMG,aAAe,WAClCC,cAAeJ,MAAMI,eAAiB,aACtCC,YAAaL,MAAMK,aAAe,cAEpC,OAAOJ,WAIT,QAASL,qBAAoB/6E,EAAGvC,KAAM60B,MACpC,IAAK,GAAI30B,GAAI,EAAGA,GAAKF,KAAKI,SAAUF,EAAG,CACrC,GAAIsK,KAAMuQ,YAAY/a,KAAKE,GAAI,KAC/B,KAAKsK,IAAIu+B,IAAK,MACd,IAAIhS,KAAMlC,KAAOA,KAAK,OAAOrqB,IAAI63B,IAAM,IACvC,IAAItL,IAAK,CACPvsB,IAAIysB,OAASF,IAAIE,MACjB,IAAIzsB,IAAIg2B,SAAUh2B,IAAIysB,QAAU,IAAMzsB,IAAIg2B,QAC1Ch2B,KAAIwzE,IAAMjnD,QACL,CACLvsB,IAAIysB,OAASzsB,IAAIg2B,QACjBzJ,MAAOE,OAAQzsB,IAAIg2B,SAAUrJ,WAAY,WACzC3sB,KAAIwzE,IAAMjnD,IAEZ,GAAIknD,KAAMltB,kBAAkBvmD,IAAIu+B,IAChC,KAAK,GAAI9zB,GAAIgpE,IAAI17E,EAAE2J,EAAG+I,GAAKgpE,IAAI1jE,EAAErO,IAAK+I,EAAG,IAAK,GAAIC,GAAI+oE,IAAI17E,EAAEY,EAAG+R,GAAK+oE,IAAI1jE,EAAEpX,IAAK+R,EAAG,CAChF,GAAIoB,MAAO45C,aAAa/sD,EAAG+R,EAAGhJ,EAAG+I,GACjC,KAAK1S,EAAE+T,MAAO/T,EAAE+T,OAAS9S,EAAG,OAAQF,EAAGgB,UACvC/B,GAAE+T,MAAMlT,EAAIoH,MAKlB,QAAS0yE,mBAAkBF,QAAS9mB,MAClC,GAAIgoB,SAAU,KACd,KAAK,GAAIC,MAAO,EAAGA,MAAQjoB,KAAK91D,SAAU+9E,KAAM,CAC9C,GAAIx2B,MAAO5sC,YAAYm7C,KAAKioB,MAAO,KACnC,IAAIC,MAAO9xE,SAASq7C,KAAK/5C,IAAK,IAAM,EAAGywE,KAAO/xE,SAASq7C,KAAK95C,IAAK,IAAM,QAChE85C,MAAK/5C,UACL+5C,MAAK95C,GACZ,KAAKqwE,SAAWv2B,KAAKtpB,MAAO,CAC1B6/C,QAAU,IACVx2B,WAAUC,KAAKtpB,MAAOspB,MAExB,GAAIA,KAAKtpB,MAAO,CACdspB,KAAK22B,IAAMn3B,UAAUQ,KAAKtpB,MAC1BspB,MAAK42B,IAAMn3B,QAAQO,KAAK22B,IACxB32B,MAAKT,IAAMA,IAEb,MAAOk3B,MAAQC,KAAMrB,QAAQoB,QAAUz2B,MAI3C,QAAS62B,mBAAkBjC,GAAIrmB,MAC7B,GAAIj2D,IAAK,UAAWumB,IAAK6X,KACzB,KAAK,GAAIn+B,GAAI,EAAGA,GAAKg2D,KAAK91D,SAAUF,EAAG,CACrC,KAAMsmB,IAAM0vC,KAAKh2D,IAAK,QACtB,IAAIwkB,IAAK9W,IAAK1N,EAAI,EAAG2N,IAAK3N,EAAI,EAE9Bm+B,QAAS,CACT,IAAI7X,IAAI83D,IAAKjgD,MAAQ+oB,QAAQ5gC,IAAI83D,SAC5B,IAAI93D,IAAI+3D,IAAKlgD,MAAQ7X,IAAI+3D,GAC9B,IAAIlgD,OAAS,EAAG,CACd3Z,EAAE2Z,MAAQipB,WAAWjpB,MACrB3Z,GAAE+5D,YAAc,EAElBx+E,EAAEA,EAAEG,QAAWge,UAAU,MAAO,KAAMsG,GAExCzkB,EAAEA,EAAEG,QAAU,SACd,OAAOH,GAAEke,KAAK,IAGhB,QAASugE,mBAAkB95D,KAAMmkB,IAAKwzC,GAAIh4E,KAAM+G,IAAK8gD,IACnD,GAAIxnC,KAAKthB,IAAMgB,WAAasgB,KAAKriB,IAAM+B,UAAW,MAAO,EACzD,IAAI4K,IAAK,EACT,IAAIyvE,MAAO/5D,KAAKphB,EAAGo7E,KAAOh6D,KAAKthB,CAC/B,QAAQshB,KAAKphB,GACX,IAAK,IACH0L,GAAK0V,KAAKthB,EAAI,IAAM,GACpB,MACF,KAAK,IACH4L,GAAK,GAAK0V,KAAKthB,CACf,MACF,KAAK,IACH4L,GAAKwY,KAAK9C,KAAKthB,EACf,MACF,KAAK,IACH,GAAIiB,KAAKs6E,UAAW3vE,GAAK,GAAInF,MAAK6a,KAAKthB,GAAGgb,kBACrC,CACHsG,KAAKphB,EAAI,GACT0L,IAAK,IAAM0V,KAAKthB,EAAI+V,QAAQuL,KAAKthB,GACjC,UAAWshB,MAAK1J,IAAM,YAAa0J,KAAK1J,EAAInY,IAAIsN,OAAO,IAEzD,KACF,SACEnB,GAAK0V,KAAKthB,CACV,OAEJ,GAAIA,GAAI2a,SAAS,IAAK7B,UAAUlN,KAAMjP,GAAKiM,EAAG68B,IAE9C,IAAI+1C,IAAKzD,eAAe92E,KAAKmnD,QAAS9mC,KAAMrgB,KAC5C,IAAIu6E,KAAO,EAAG7+E,EAAEsC,EAAIu8E,EACpB,QAAQl6D,KAAKphB,GACX,IAAK,IACH,KACF,KAAK,IACHvD,EAAEuD,EAAI,GACN,MACF,KAAK,IACHvD,EAAEuD,EAAI,GACN,MACF,KAAK,IACHvD,EAAEuD,EAAI,GACN,MACF,SACE,GAAIe,KAAKw9C,QAAS,CAChBz+C,EAAI2a,SAAS,IAAK,GAAKm9D,WAAW72E,KAAKw6E,QAASn6D,KAAKthB,GACrDrD,GAAEuD,EAAI,GACN,OAEFvD,EAAEuD,EAAI,KACN,OAEJ,GAAIohB,KAAKphB,GAAKm7E,KAAM,CAClB/5D,KAAKphB,EAAIm7E,IACT/5D,MAAKthB,EAAIs7E,KAEX,MAAOxgE,WAAU,IAAK9a,EAAGrD,GAG3B,GAAIo9E,mBAAoB,QAAU2B,6BAChC,GAAIC,WAAY,kBAAmBC,SAAW,kBAC9C,IAAI/+B,QAAS,qBAAsBg/B,QAAU,sBAC7C,IAAIC,SAAUniE,SAAS,KAAMoiE,QAAUpiE,SAAS,IAEhD,OAAO,SAASogE,mBAAkBiC,MAAO/8E,EAAGgC,KAAMg7E,OAChD,GAAI9xE,IAAK,EAAGhN,EAAI,GAAI++E,SAAYC,QAAWn0E,IAAM,EAAGpL,EAAI,EAAG+M,GAAK,EAAG1J,EAAI,GAAImhB,CAC3E,IAAI1J,KAAK0kE,KAAO,EAAGC,KAAO,CAC1B,IAAIC,KACJ,IAAIzlD,OAAQ,EAAGiiD,OAAS,EAAGyD,UAAYx9E,MAAM+e,QAAQ4S,OAAOg3B,QAASvoB,EACrE,KAAK,GAAIq9C,MAAOR,MAAM98E,MAAM08E,UAAW/nE,GAAK,EAAG4oE,QAAUD,KAAK1/E,OAAQ+W,IAAM4oE,UAAW5oE,GAAI,CACzF1W,EAAIq/E,KAAK3oE,IAAIq6C,MACb,IAAIwuB,MAAOv/E,EAAEL,MACb,IAAI4/E,OAAS,EAAG,QAGhB,KAAKvyE,GAAK,EAAGA,GAAKuyE,OAAQvyE,GAAI,GAAIhN,EAAEJ,WAAWoN,MAAQ,GAAI,QACzDA,EACFuN,KAAMD,YAAYta,EAAEK,OAAO,EAAG2M,IAAK,KAEnCiyE,YAAc1kE,KAAI9O,IAAM,YAAcI,SAAS0O,IAAI9O,EAAG,IAAMwzE,KAAO,CACnEC,OAAQ,CACR,IAAIp7E,KAAKmtD,WAAantD,KAAKmtD,UAAYguB,KAAM,QAC7C,IAAIH,MAAMh9E,EAAE2J,EAAIwzE,KAAO,EAAGH,MAAMh9E,EAAE2J,EAAIwzE,KAAO,CAC7C,IAAIH,MAAMhlE,EAAErO,EAAIwzE,KAAO,EAAGH,MAAMhlE,EAAErO,EAAIwzE,KAAO,CAG7CF,OAAQ/+E,EAAEK,OAAO2M,IAAIjL,MAAMy8E,UAC3B,KAAKxxE,SAAYuN,KAAI9O,IAAM,YAAc,EAAI,EAAGuB,IAAM+xE,MAAMp/E,SAAUqN,GAAI,CACxEhN,EAAI++E,MAAM/xE,IAAI+jD,MACd,IAAI/wD,EAAEL,SAAW,EAAG,QACpBq/E,MAAOh/E,EAAE+K,MAAM20C,OACf70C,KAAMmC,EACNvN,GAAI,CACJ+M,IAAK,CACLxM,GAAI,OAASA,EAAEK,OAAO,EAAG,IAAM,IAAM,IAAM,IAAML,CACjD,IAAIg/E,OAAS,MAAQA,KAAKr/E,SAAW,EAAG,CACtCkL,IAAM,CACN/H,GAAIk8E,KAAK,EACT,KAAKv/E,EAAI,EAAGA,GAAKqD,EAAEnD,SAAUF,EAAG,CAC9B,IAAK+M,GAAK1J,EAAElD,WAAWH,GAAK,IAAM,GAAK+M,GAAK,GAAI,KAChD3B,KAAM,GAAKA,IAAM2B,KAEjB3B,GACFq0E,MAAOr0E,UACAq0E,IACT,KAAKz/E,EAAI,EAAGA,GAAKO,EAAEL,SAAUF,EAAG,GAAIO,EAAEJ,WAAWH,KAAO,GAAI,QAC1DA,CACF8a,KAAMD,YAAYta,EAAEK,OAAO,EAAGZ,GAAI,KAClC,KAAK8a,IAAI9O,EAAG8O,IAAI9O,EAAItL,MAAMsvD,aAAahkD,EAAGwzE,KAAO,EAAGv8E,EAAGw8E,MACvDp8E,GAAI9C,EAAEK,OAAOZ,EACbwkB,IAAKlhB,EAAG,GAER,KAAKi8E,KAAOl8E,EAAEiI,MAAM4zE,YAAc,MAAQK,KAAK,KAAO,GAAI/6D,EAAEphB,EAAIwY,YAAY2jE,KAAK,GACjF,IAAIl7E,KAAK07E,cAAgBR,KAAOl8E,EAAEiI,MAAM6zE,YAAc,KAAM36D,EAAE3U,EAAI+L,YAAY2jE,KAAK,GAGnF,IAAIzkE,IAAIxX,IAAMc,WAAa0W,IAAIzY,IAAM+B,WAAaogB,EAAEphB,IAAMgB,UAAW,CACnE,IAAKC,KAAK27E,WAAY,QACtBx7D,GAAElhB,EAAI,WAEHkhB,GAAElhB,EAAIwX,IAAIxX,GAAK,GACpB,IAAI+7E,MAAMh9E,EAAEY,EAAImI,IAAKi0E,MAAMh9E,EAAEY,EAAImI,GACjC,IAAIi0E,MAAMhlE,EAAEpX,EAAImI,IAAKi0E,MAAMhlE,EAAEpX,EAAImI,GAEjC,QAAQoZ,EAAElhB,GACR,IAAK,IACHkhB,EAAEphB,EAAIuM,WAAW6U,EAAEphB,EACnB,IAAIzB,MAAM6iB,EAAEphB,GAAIohB,EAAEphB,EAAI,EACtB,MACF,KAAK,IAEHs8E,KAAO9rD,KAAKxnB,SAASoY,EAAEphB,EAAG,IAC1BohB,GAAEphB,EAAIs8E,KAAKp8E,CACXkhB,GAAExY,EAAI0zE,KAAK1zE,CACX,IAAI3H,KAAK88C,SAAU38B,EAAE/G,EAAIiiE,KAAKjiE,CAC9B,MACF,KAAK,MACH+G,EAAElhB,EAAI,GACNkhB,GAAEphB,EAAKohB,EAAEphB,GAAK,KAAQoZ,SAASgI,EAAEphB,GAAK,EACtC,IAAIiB,KAAK88C,SAAU38B,EAAE/G,EAAI+G,EAAEphB,CAC3B,MACF,KAAK,YACHm8E,KAAOl8E,EAAEiI,MAAM2zE,QACfz6D,GAAElhB,EAAI,GACN,IAAIi8E,OAAS,KAAM,CACjBG,KAAOz+B,SAASs+B,KAAK,GACrB/6D,GAAEphB,EAAIs8E,KAAKp8E,MACNkhB,GAAEphB,EAAI,EACb,MACF,KAAK,IACHohB,EAAEphB,EAAIkZ,aAAakI,EAAEphB,EACrB,MACF,KAAK,IACH,IAAKiB,KAAKs6E,UAAW,CACnBn6D,EAAEphB,EAAI+V,QAAQqL,EAAEphB,EAChBohB,GAAElhB,EAAI,IAER,KAEF,KAAK,IACHkhB,EAAEzc,EAAIyc,EAAEphB,CACRohB,GAAEphB,EAAI4kB,MAAMxD,EAAEphB,EACd,OAGJ62B,MAAQiiD,OAAS,CACjB,IAAIyD,WAAa7kE,IAAIzY,IAAM+B,UAAW,CACpCm+B,GAAKzO,OAAOg3B,OAAOhwC,IAAIzY,EACvB,IAAIgC,KAAK04E,WAAY,CACnBv4D,EAAEniB,EAAIu5E,mBAAmBr5C,IAE3B,GAAIA,IAAM,KAAM,CACd,GAAIA,GAAGmoB,UAAY,KAAMzwB,MAAQsI,GAAGmoB,QACpC,IAAIrmD,KAAK04E,YAAcx6C,GAAGyoB,QAAU,KAAMkxB,OAAS35C,GAAGyoB,QAG1DixB,YAAYz3D,EAAGyV,MAAOiiD,OAAQ73E,KAC9BhC,GAAEyY,IAAI9O,GAAKwY,OAMnB,SAASy7D,mBAAkB5D,GAAIh4E,KAAM+G,IAAK8gD,IACxC,GAAInsD,MAAQiM,KAAQ+Y,MAAQ8rC,kBAAkBwrB,GAAG,SAAU33D,KAAMmkB,IAAKx8B,GAAK,GAAI2pD,QAAWjhD,EAAGC,CAC7F,KAAKA,EAAI+P,MAAM1iB,EAAEY,EAAG+R,GAAK+P,MAAM1K,EAAEpX,IAAK+R,EAAGghD,KAAKhhD,GAAKy9C,WAAWz9C,EAC9D,KAAKD,EAAIgQ,MAAM1iB,EAAE2J,EAAG+I,GAAKgQ,MAAM1K,EAAErO,IAAK+I,EAAG,CACvC/I,IACAK,IAAKqmD,WAAW39C,EAChB,KAAKC,EAAI+P,MAAM1iB,EAAEY,EAAG+R,GAAK+P,MAAM1K,EAAEpX,IAAK+R,EAAG,CACvC6zB,IAAMmtB,KAAKhhD,GAAK3I,EAChB,IAAIgwE,GAAGxzC,OAASzkC,UAAW,QAC3B,KAAKsgB,KAAO85D,kBAAkBnC,GAAGxzC,KAAMA,IAAKwzC,GAAIh4E,KAAM+G,IAAK8gD,MAAQ,KAAMlgD,EAAEmJ,KAAKuP,MAElF,GAAI1Y,EAAE9L,OAAS,EAAGH,EAAEA,EAAEG,QAAWge,UAAU,MAAOlS,EAAEiS,KAAK,KAAMjS,EAAGK,KAEpE,MAAOtM,GAAEke,KAAK,IAGhB,GAAIiiE,aAAchiE,UAAU,YAAa,MACvC0W,MAASrW,MAAMS,KAAK,GACpBmhE,UAAW5hE,MAAMvS,GAGnB,SAASo0E,cAAah1E,IAAK/G,KAAM6nD,IAC/B,GAAInsD,IAAKue,WAAY4hE,YACrB,IAAI79E,GAAI6pD,GAAGjzB,WAAW7tB,KAAMi1E,KAAO,EAAGC,MAAQ,EAC9C,IAAIjE,IAAKnwB,GAAGq0B,OAAOl+E,EACnB,IAAIg6E,KAAOj4E,UAAWi4E,KACtB,IAAIxzC,KAAMwzC,GAAG,OACb,IAAIxzC,MAAQzkC,UAAWykC,IAAM,IAC7B9oC,GAAEA,EAAEG,QAAWge,UAAU,YAAa,MAAO2qB,IAAOA,KAEpD,IAAI23C,QACJ,IAAInE,GAAG,WAAY,CACjB,GAAIoE,MAAO,EACXA,MAAOviE,UAAU,OAAQ,KAAMm+D,GAAG,WAClCmE,MAAKrrE,KAAKsrE,KAEV,IAAIC,WAAYxiE,UAAU,YAAa,MACrCuiE,KAAM,WAERD,MAAKrrE,KAAKurE,UAEV,IAAIA,WAAYxiE,UAAU,YAAa,MACrCuiE,KAAM,cAERD,MAAKrrE,KAAKurE,UAEV,IAAIA,WAAYxiE,UAAU,YAAa,MACrCuiE,KAAM,cACNE,WAAYtE,GAAG,WACfuE,MAAOvE,GAAG,YAEZmE,MAAKrrE,KAAKurE,WAMZ,GAAIG,WAAY3iE,UAAU,YAAasiE,KAAKviE,KAAK,KAAO7Z,WACtD08E,cAAez8E,KAAKy8E,eAAiB,MAAQ,IAAM,IACnDC,YAAa18E,KAAK08E,cAAgB38E,UAAY,IAAMC,KAAK08E,YACzDC,eAAgB38E,KAAK28E,iBAAmB58E,UAAY,IAAMC,KAAK28E,gBAEjEjhF,GAAEA,EAAEG,QAAUge,UAAU,aAAc2iE,UAEtC,IAAIxE,GAAG,WAAaj4E,WAAai4E,GAAG,SAASn8E,OAAS,EAAGH,EAAEA,EAAEG,QAAWo+E,kBAAkBjC,GAAIA,GAAG,SACjGt8E,GAAEsgF,KAAOtgF,EAAEG,QAAU,cACrB,IAAIm8E,GAAG,UAAYj4E,UAAW,CAC5Bk8E,MAAQL,kBAAkB5D,GAAIh4E,KAAM+G,IAAK8gD,GACzC,IAAIo0B,MAAMpgF,OAAS,EAAGH,EAAEA,EAAEG,QAAU,MAEtC,GAAIH,EAAEG,OAASmgF,KAAO,EAAG,CACvBtgF,EAAEA,EAAEG,QAAU,cACdH,GAAEsgF,MAAQtgF,EAAEsgF,MAAMv+E,QAAQ,KAAM,KAGlC,GAAIu6E,GAAG,aAAej4E,WAAai4E,GAAG,WAAWn8E,OAAS,EAAGH,EAAEA,EAAEG,QAAWo9E,oBAAoBjB,GAAG,WAEnG,IAAIA,GAAG,gBAAkBj4E,UAAWrE,EAAEA,EAAEG,QAAUq9E,uBAAuBlB,GAAG,cAC5E,IAAIA,GAAG,gBAAkBj4E,UAAWrE,EAAEA,EAAEG,QAAU+gF,wBAAwB5E,GAAG,cAC7E,IAAIA,GAAG,gBAAkBj4E,UAAWrE,EAAEA,EAAEG,QAAUghF,wBAAwB7E,GAAG,cAE7E,IAAIt8E,EAAEG,OAAS,EAAG,CAChBH,EAAEA,EAAEG,QAAU,cACdH,GAAE,GAAKA,EAAE,GAAG+B,QAAQ,KAAM,KAE5B,MAAO/B,GAAEke,KAAK,IAGhB,QAASgjE,yBAAwBE,QAC/B,GAAIC,OACJ,KAAK,GAAIphF,GAAI,EAAGA,EAAImhF,OAAOjhF,OAAQF,IAAK,CACtC,GAAIqhF,WAAY,GAAMF,OAAOnhF,EAC7B,IAAIshF,WAAY,IAAMH,OAAOnhF,EAAI,IAAM,QACvCohF,KAAIjsE,KAAK+I,UAAU,MAAO,MAAOikB,GAAIk/C,UAAW1zE,IAAK2zE,UAAWC,IAAK,OAEvE,MAAOrjE,WAAU,YAAakjE,IAAInjE,KAAK,MAAOujC,MAAO4/B,IAAIlhF,OAAQshF,iBAAkBJ,IAAIlhF,SAEzF,QAASghF,yBAAwBC,QAC/B,GAAIC,OACJ,KAAK,GAAIphF,GAAI,EAAGA,EAAImhF,OAAOjhF,OAAQF,IAAK,CACtC,GAAIqhF,WAAY,GAAMF,OAAOnhF,EAC7B,IAAIshF,WAAY,IAAMH,OAAOnhF,EAAI,IAAM,UACvCohF,KAAIjsE,KAAK+I,UAAU,MAAO,MAAOikB,GAAIk/C,UAAW1zE,IAAK2zE,UAAWC,IAAK,OAEvE,MAAOrjE,WAAU,YAAakjE,IAAInjE,KAAK,MAAOujC,MAAO4/B,IAAIlhF,OAAQshF,iBAAkBJ,IAAIlhF,SAIzF,QAASuhF,iBAAgB3hF,KAAMI,QAC9B,GAAI8a,KACJA,GAAEhP,EAAIlM,KAAKkT,WAAW,EACtBlT,MAAKoD,GAAKhD,OAAO,CACjB,OAAO8a,GAIR,GAAI0mE,gBAAiBt6D,kBACrB,IAAIu6D,gBAAiBt6D,kBAGrB,SAASu6D,iBAAgB9hF,KAAMI,QAC9B,GAAI8a,KAEJlb,MAAKoD,GAAK,EACV8X,GAAEzH,KAAOmT,mBAAmB5mB,KAAMI,OAAS,GAC3C,OAAO8a,GAIR,QAAS6mE,oBAAmB/hF,KAAMI,QACjC,GAAIwkB,MAAO2B,eAAevmB,KAC1B,QAAQ4kB,MAET,QAASo9D,oBAAmBp9D,KAAMpa,IAAKvK,GACtC,GAAGA,GAAK,KAAMA,EAAIgjB,QAAQ,EAC1B,OAAO0D,gBAAenc,IAAKvK,GAK5B,QAASgiF,mBAAkBjiF,KAAMI,QAChC,GAAIwkB,MAAO2B,eAAevmB,KAC1B,IAAIkiF,OAAQliF,KAAKkT,WAAW,EAC5B,QAAQ0R,KAAMs9D,MAAO,KAItB,QAASC,oBAAmBniF,KAAMI,QACjC,GAAIwkB,MAAO2B,eAAevmB,KAC1B,IAAIkiF,OAAQliF,KAAKkT,WAAW,EAC5B,QAAQ0R,KAAMs9D,MAAO,KAItB,QAASE,mBAAkBpiF,KAAMI,QAChC,GAAIwkB,MAAO2B,eAAevmB,KAC1B,IAAI+lC,MAAO/lC,KAAKkT,WAAW,EAC3B,QAAQ0R,KAAMmhB,KAAM,KAIrB,QAASs8C,mBAAkBriF,KAAMI,QAChC,GAAIwkB,MAAO2B,eAAevmB,KAC1B,IAAIyc,OAAQ+K,WAAWxnB,KACvB,QAAQ4kB,KAAMnI,MAAO,KAItB,QAAS6lE,iBAAgBtiF,KAAMI,QAC9B,GAAIwkB,MAAO2B,eAAevmB,KAC1B,IAAIyc,OAAQyK,eAAelnB,KAC3B,QAAQ4kB,KAAMnI,MAAO,KAItB,QAAS8lE,iBAAgBviF,KAAMI,QAC9B,GAAIwkB,MAAO2B,eAAevmB,KAC1B,IAAIyc,OAAQyJ,mBAAmBlmB,KAC/B,QAAQ4kB,KAAMnI,MAAO,OAItB,QAAS+lE,mBAAkBxiF,KAAMI,OAAQmE,MACxC,GAAIqgB,MAAO2B,eAAevmB,KAC1B,IAAIyc,OAAQzc,KAAKkT,WAAW,EAC5B,IAAIjT,IAAK2kB,KAAMnI,MAAO,IACtB,IAAGlY,KAAK07E,YAAa,CACpB,GAAIllB,SAAUwB,4BAA4Bv8D,KAAMI,OAAO,EACvDH,GAAE,GAAK,OAEHD,MAAKoD,GAAKhD,OAAO,CACtB,OAAOH,GAIR,QAASwiF,oBAAmBziF,KAAMI,OAAQmE,MACzC,GAAIqgB,MAAO2B,eAAevmB,KAC1B,IAAIyc,OAAQzc,KAAKkT,WAAW,EAC5B,IAAIjT,IAAK2kB,KAAMnI,MAAO,IACtB,IAAGlY,KAAK07E,YAAa,CACpB,GAAIllB,SAAUwB,4BAA4Bv8D,KAAMI,OAAO,EACvDH,GAAE,GAAK,OAEHD,MAAKoD,GAAKhD,OAAO,CACtB,OAAOH,GAIR,QAASyiF,kBAAiB1iF,KAAMI,OAAQmE,MACvC,GAAIqgB,MAAO2B,eAAevmB,KAC1B,IAAIyc,OAAQ+K,WAAWxnB,KACvB,IAAIC,IAAK2kB,KAAMnI,MAAO,IACtB,IAAGlY,KAAK07E,YAAa,CACpB,GAAIllB,SAAUwB,4BAA4Bv8D,KAAMI,OAAS,GACzDH,GAAE,GAAK,OAEHD,MAAKoD,GAAKhD,OAAO,EACtB,OAAOH,GAIR,QAAS0iF,qBAAoB3iF,KAAMI,OAAQmE,MAC1C,GAAIyR,OAAQhW,KAAKoD,CACjB,IAAIwhB,MAAO2B,eAAevmB,KAC1B,IAAIyc,OAAQyJ,mBAAmBlmB,KAC/B,IAAIC,IAAK2kB,KAAMnI,MAAO,MACtB,IAAGlY,KAAK07E,YAAa,CACpB,GAAIllB,SAAUwB,4BAA4Bv8D,KAAMgW,MAAQ5V,OAASJ,KAAKoD,OAElEpD,MAAKoD,EAAI4S,MAAQ5V,MACtB,OAAOH,GAIR,GAAI2iF,oBAAqBt7D,kBAGzB,SAASu7D,gBAAe7iF,KAAMI,OAAQmE,MACrC,GAAI2f,KAAMlkB,KAAKoD,EAAIhD,MACnB,IAAI2xD,KAAMzqC,mBAAmBtnB,KAAM,GACnC,IAAI8iF,OAAQj8D,2BAA2B7mB,KACvC,IAAIoiB,KAAM8D,mBAAmBlmB,KAC7B,IAAI+iF,SAAU78D,mBAAmBlmB,KACjC,IAAIgjF,SAAU98D,mBAAmBlmB,KACjCA,MAAKoD,EAAI8gB,GACT,QAAQ6tC,IAAIA,IAAK+wB,MAAMA,MAAO1gE,IAAIA,IAAK2gE,QAAQA,QAASC,QAAQA,SAIjE,QAASC,cAAajjF,KAAMuE,KAAMswB,MACjC,IAAI70B,KAAM,MAAOA,KACjB,KAAI60B,KAAMA,MAAQquD,SAClB,IAAI3gF,KAEJ,IAAIwmC,IACJ,IAAIo0C,WAAY56E,GAAI2J,EAAE,IAAS/I,EAAE,KAAUoX,GAAIrO,EAAE,EAAG/I,EAAE,GAEtD,IAAIg/C,MAAO,MAAOj+B,IAAM,KACxB,IAAIulB,KAAK/kB,EAAG+d,GAAIxtB,EAAGC,EAAGoB,KAAMspE,KAAMrzE,EAClC,IAAIwwE,cACJ55D,cAAanjB,KAAM,QAASmjF,UAAS34E,IAAKyK,GACzC,GAAGiP,IAAK,MACR,QAAOjP,EAAEyW,GACR,IAAK,WAAYqd,IAAMv+B,GAAK,MAC5B,KAAK,YACJi/B,IAAMj/B,GACN,IAAGjG,KAAKmtD,WAAantD,KAAKmtD,WAAajoB,IAAIv9B,EAAGgY,IAAI,IAClD3X,IAAKqmD,WAAWnpB,IAAIv9B,EACpB,MAED,KAAK,cACL,IAAK,eACL,IAAK,aACL,IAAK,gBACL,IAAK,cACL,IAAK,eACL,IAAK,cACL,IAAK,cACL,IAAK,YACL,IAAK,YACJwY,GAAKlhB,EAAEgH,IAAI,GACX,QAAOA,IAAI,IACV,IAAK,IAAKka,EAAEphB,EAAIkH,IAAI,EAAI,MACxB,KAAK,IAAKo1E,KAAO9rD,KAAKtpB,IAAI,GAAKka,GAAEphB,EAAIs8E,KAAKp8E,CAAGkhB,GAAExY,EAAI0zE,KAAK1zE,CAAG,MAC3D,KAAK,IAAKwY,EAAEphB,EAAIkH,IAAI,GAAK,KAAO,KAAO,MACvC,KAAK,IAAKka,EAAEphB,EAAIkH,IAAI,EAAIka,GAAEzc,EAAIyf,KAAKhD,EAAEphB,EAAI,MACzC,KAAK,MAAOohB,EAAElhB,EAAI,GAAKkhB,GAAEphB,EAAIoZ,SAASlS,IAAI,GAAK,OAEhD,GAAGjG,KAAK07E,aAAez1E,IAAIpK,OAAS,EAAGskB,EAAE3U,EAAIvF,IAAI,EACjD,IAAIi4B,GAAKzO,OAAOg3B,OAAOxgD,IAAI,GAAGic,WAAa01D,YAAYz3D,EAAE+d,GAAGyD,KAAK,KAAK3hC,KACtEhC,GAAEowD,WAAWz9C,EAAE1K,IAAI,GAAGrH,GAAKoJ,IAAMmY,CACjC,IAAGy4D,SAAS56E,EAAE2J,EAAIu9B,IAAIv9B,EAAGixE,SAAS56E,EAAE2J,EAAIu9B,IAAIv9B,CAC5C,IAAGixE,SAAS56E,EAAEY,EAAI+R,EAAGioE,SAAS56E,EAAEY,EAAI+R,CACpC,IAAGioE,SAAS5iE,EAAErO,EAAIu9B,IAAIv9B,EAAGixE,SAAS5iE,EAAErO,EAAIu9B,IAAIv9B,CAC5C,IAAGixE,SAAS5iE,EAAEpX,EAAI+R,EAAGioE,SAAS5iE,EAAEpX,EAAI+R,CACpC,MAED,KAAK,eAAgB,IAAI3Q,KAAK27E,WAAY,KACzCx7D,IAAKlhB,EAAE,IAAIF,EAAEgB,UACb/B,GAAEowD,WAAWz9C,EAAE1K,IAAI,GAAGrH,GAAKoJ,IAAMmY,CACjC,IAAGy4D,SAAS56E,EAAE2J,EAAIu9B,IAAIv9B,EAAGixE,SAAS56E,EAAE2J,EAAIu9B,IAAIv9B,CAC5C,IAAGixE,SAAS56E,EAAEY,EAAI+R,EAAGioE,SAAS56E,EAAEY,EAAI+R,CACpC,IAAGioE,SAAS5iE,EAAErO,EAAIu9B,IAAIv9B,EAAGixE,SAAS5iE,EAAErO,EAAIu9B,IAAIv9B,CAC5C,IAAGixE,SAAS5iE,EAAEpX,EAAI+R,EAAGioE,SAAS5iE,EAAEpX,EAAI+R,CACpC,MAGD,KAAK,qBAAsB,KAC3B,KAAK,mBAAoB,KACzB,KAAK,eAAgB6nE,WAAW1nE,KAAK7K,IAAM,MAE3C,KAAK,WACJ,GAAIusB,KAAMlC,KAAK,OAAOrqB,IAAIs4E,MAC1B,IAAG/rD,IAAK,CACPvsB,IAAIysB,OAASF,IAAIE,MACjB,IAAGzsB,IAAI4X,IAAK5X,IAAIysB,QAAU,IAAIzsB,IAAI4X,GAClC5X,KAAIwzE,IAAMjnD,IAEX,IAAI9hB,EAAEzK,IAAIunD,IAAIxvD,EAAE2J,EAAE+I,GAAGzK,IAAIunD,IAAIx3C,EAAErO,IAAI+I,EAAG,IAAIC,EAAE1K,IAAIunD,IAAIxvD,EAAEY,EAAE+R,GAAG1K,IAAIunD,IAAIx3C,EAAEpX,IAAI+R,EAAG,CAC3EoB,KAAO45C,aAAa/sD,EAAE+R,EAAEhJ,EAAE+I,GAC1B,KAAI1S,EAAE+T,MAAO/T,EAAE+T,OAAS9S,EAAE,IAAIF,EAAEgB,UAChC/B,GAAE+T,MAAMlT,EAAIoH,IAEb,KAED,KAAK,aAAc,KACnB,KAAK,aAAc,KACnB,KAAK,gBAAiB,KACtB,KAAK,YAAa,KAClB,KAAK,mBAAoB,KACzB,KAAK,kBAAmB,KACxB,KAAK,iBAAkB,KACvB,KAAK,UAAW,KAChB,KAAK,SAAU,KACf,KAAK,eAAgB,KACrB,KAAK,gBAAiB,KACtB,KAAK,aAAc,KACnB,KAAK,eAAgB,KACrB,KAAK,WAAY,KACjB,KAAK,mBAAoB,KACzB,KAAK,eAAgB,KACrB,KAAK,mBAAoB,KACzB,KAAK,aAAc,KACnB,KAAK,iBAAkB;AACvB,IAAK,oBAAqB,KAC1B,KAAK,kBAAmB,KACxB,KAAK,qBAAsB,KAC3B,KAAK,kBAAmB,KACxB,KAAK,aAAc,KACnB,KAAK,eAAgB,KACrB,KAAK,cAAe23C,KAAO,IAAM,MACjC,KAAK,YAAaA,KAAO,KAAO,MAChC,KAAK,cAAe,KACpB,KAAK,aAAc,KACnB,KAAK,mBAAoB,KACzB,KAAK,qBAAsB,KAC3B,KAAK,kBAAmB,KACxB,KAAK,uBAAwB,KAC7B,KAAK,qBAAsB,KAC3B,KAAK,SAAU,KACf,KAAK,gBAAiB,KACtB,KAAK,cAAe,KACpB,KAAK,iBAAkB,KACvB,KAAK,eAAgB,KACrB,KAAK,sBAAuB,KAC5B,KAAK,qBAAsB,KAC3B,KAAK,mBAAoB,KACzB,KAAK,oBAAqB,KAC1B,KAAK,WAAY,KACjB,KAAK,qBAAsB,KAC3B,KAAK,eAAgB,KACrB,KAAK,mBAAoB,KACzB,KAAK,oBAAqB,KAC1B,KAAK,cAAe,KACpB,KAAK,kBAAmB,KACxB,KAAK,oBAAqB,KAC1B,KAAK,mBAAoB,KACzB,KAAK,iBAAkB,KACvB,KAAK,kBAAmB,KACxB,KAAK,gCAAiC,KACtC,KAAK,8BAA+B,KACpC,KAAK,iBAAkB,KACvB,KAAK,eAAgB,KACrB,KAAK,gBAAiB,KACtB,KAAK,UAAW,KAChB,KAAK,cAAe,KACpB,KAAK,qBAAsB,KAC3B,KAAK,eAAgB,KACrB,KAAK,aAAc,KACnB,KAAK,gBAAiB,KACtB,KAAK,UAAW,KAChB,KAAK,cAAe,KAGpB,KAAK,0BAA2B,KAChC,KAAK,aAAc,KACnB,KAAK,wBAAyB,KAG9B,KAAK,kBAAmB,KACxB,KAAK,gBAAiB,KACtB,KAAK,uBAAwB,KAC7B,KAAK,kBAAmB,KACxB,KAAK,YAAa,KAClB,KAAK,gBAAiB,KACtB,KAAK,qBAAsB,KAC3B,KAAK,mBAAoB,KACzB,KAAK,iBAAkB,KACvB,KAAK,wBAAyB,KAC9B,KAAK,kBAAmB,KACxB,KAAK,sBAAuB,KAG5B,KAAK,oBAAqB,KAC1B,KAAK,wBAAyB,KAC9B,KAAK,uBAAwB,KAC7B,KAAK,0BAA2B,KAChC,KAAK,qBAAsB,KAC3B,KAAK,sBAAuB,KAC5B,KAAK,kBAAmB,KAGxB,KAAK,sBAAuB,KAC5B,KAAK,eAAgB,KACrB,KAAK,oBAAqB,KAG1B,KAAK,WAAY,KAGjB,KAAK,wBAAyB,KAC9B,KAAK,kBAAmB,KACxB,KAAK,sBAAuB,KAE5B,SAAS,IAAIA,MAAQ59C,KAAK2wB,IAAK,KAAM,IAAIpsB,OAAM,qBAAuBmM,EAAEyW,KAEvEnnB,KACH,KAAIhC,EAAE,UAAY46E,SAAS56E,EAAE2J,EAAI,KAAW68B,IAAIxuB,EAAErO,EAAI,GAAK68B,IAAIxuB,EAAEpX,EAAI,GAAK4lC,IAAIxmC,EAAE2J,EAAI,GAAK68B,IAAIxmC,EAAEY,EAAI,GAAIZ,EAAE,QAAU4uD,aAAapoB,IAChI,IAAGxkC,KAAKmtD,WAAanvD,EAAE,QAAS,CAC/B,GAAIg7E,QAASxsB,kBAAkBxuD,EAAE,QACjC,IAAGgC,KAAKmtD,WAAa6rB,OAAOhjE,EAAErO,EAAG,CAChCqxE,OAAOhjE,EAAErO,EAAI3H,KAAKmtD,UAAY,CAC9B,IAAG6rB,OAAOhjE,EAAErO,EAAIixE,SAAS5iE,EAAErO,EAAGqxE,OAAOhjE,EAAErO,EAAIixE,SAAS5iE,EAAErO,CACtD,IAAGqxE,OAAOhjE,EAAErO,EAAIqxE,OAAOh7E,EAAE2J,EAAGqxE,OAAOh7E,EAAE2J,EAAIqxE,OAAOhjE,EAAErO,CAClD,IAAGqxE,OAAOhjE,EAAEpX,EAAIg6E,SAAS5iE,EAAEpX,EAAGo6E,OAAOhjE,EAAEpX,EAAIg6E,SAAS5iE,EAAEpX,CACtD,IAAGo6E,OAAOhjE,EAAEpX,EAAIo6E,OAAOh7E,EAAEY,EAAGo6E,OAAOh7E,EAAEY,EAAIo6E,OAAOhjE,EAAEpX,CAClDZ,GAAE,YAAcA,EAAE,OAClBA,GAAE,QAAU4uD,aAAaosB,SAG3B,GAAGR,WAAW38E,OAAS,EAAGmC,EAAE,WAAaw6E,UACzC,OAAOx6E,GAIR,QAAS6gF,mBAAkB7+D,GAAIK,KAAM3P,EAAGC,EAAG3Q,MAC1C,GAAGqgB,KAAKthB,IAAMgB,UAAW,MAAO,EAChC,IAAI4K,IAAK,EACT,QAAO0V,KAAKphB,GACX,IAAK,IAAK0L,GAAK0V,KAAKthB,EAAI,IAAM,GAAK,MACnC,KAAK,IAAK,IAAK,IAAK4L,GAAK,GAAG0V,KAAKthB,CAAG,MACpC,SAAS4L,GAAK0V,KAAKthB,CAAG,OAEvB,GAAIrD,IAAKiM,EAAE+I,EAAG9R,EAAE+R,EAEhBjV,GAAEsC,EAAI84E,eAAe92E,KAAKmnD,QAAS9mC,KAAMrgB,KACzC,QAAOqgB,KAAKphB,GACX,IAAK,IAAK,IAAK,MACd,GAAGe,KAAKw9C,QAAS,CAChB7yC,GAAKksE,WAAW72E,KAAKw6E,QAASn6D,KAAKthB,EACnCrD,GAAEuD,EAAI,GAAK,OAEZvD,EAAEuD,EAAI,KAAO,MACd,KAAK,IAAK,KACV,KAAK,IAAKvD,EAAEuD,EAAI,GAAK,MACrB,KAAK,IAAKvD,EAAEuD,EAAI,GAAK,OAEtB8gB,aAAaC,GAAI,eAAgBy9D,mBAAmBp9D,KAAM3kB,IAG3D,QAASojF,iBAAgB9+D,GAAIg4D,GAAIjxE,IAAK/G,KAAM6nD,IAC3C,GAAInnC,OAAQ8rC,kBAAkBwrB,GAAG,SAAW,MAAOxzC,IAAKx8B,GAAK,GAAI2pD,OACjE5xC,cAAaC,GAAI,oBACjB,KAAI,GAAItP,GAAIgQ,MAAM1iB,EAAE2J,EAAG+I,GAAKgQ,MAAM1K,EAAErO,IAAK+I,EAAG,CAC3C1I,GAAKqmD,WAAW39C,EAGhB,KAAI,GAAIC,GAAI+P,MAAM1iB,EAAEY,EAAG+R,GAAK+P,MAAM1K,EAAEpX,IAAK+R,EAAG,CAE3C,GAAGD,IAAMgQ,MAAM1iB,EAAE2J,EAAGgqD,KAAKhhD,GAAKy9C,WAAWz9C,EACzC6zB,KAAMmtB,KAAKhhD,GAAK3I,EAChB,KAAIgwE,GAAGxzC,KAAM,QAEbq6C,mBAAkB7+D,GAAIg4D,GAAGxzC,KAAM9zB,EAAGC,EAAG3Q,OAGvC+f,aAAaC,GAAI,mBAGlB,QAAS++D,cAAah4E,IAAK/G,KAAM6nD,IAChC,GAAI7nC,IAAKd,WACT,IAAIlhB,GAAI6pD,GAAGjzB,WAAW7tB,KAAMixE,GAAKnwB,GAAGq0B,OAAOl+E,MAC3C,IAAI2J,GAAI6kD,kBAAkBwrB,GAAG,SAAW,KACxCj4D,cAAaC,GAAI,gBAEjBD,cAAaC,GAAI,WAAYs9D,eAAe31E,GAI5Cm3E,iBAAgB9+D,GAAIg4D,GAAIjxE,IAAK/G,KAAM6nD,GAiCnC9nC,cAAaC,GAAI,cACjB,OAAOA,IAAGL,MAGX,GAAIq/D,cACF,oBAAqB,MACrB,uBAAwB,MACxB,aAAc,MACd,qBAAsB,MACtB,WAAY,KACZ,WAAY,MACZ,oBAAqB,MAErB,gBAAiB,MACjB,qBAAsB,MACtB,oBAAqB,MACrB,eAAgB,MAChB,wBAAyB,QACzB,yBAA0B,MAC1B,6BAA8B,MAC9B,oBAAqB,MACrB,cAAe,QACf,uBAAwB,KAK1B,IAAIC,aACF,YAAa,MACb,yBAA0B,MAC1B,aAAc,MACd,YAAa,MACb,uBAAwB,MACxB,gBAAiB,MACjB,qBAAsB,MACtB,WAAY,QACZ,aAAc,WAKhB,IAAIC,YACF,QAAS,WAIX,IAAIC,aACF,gBAAiB,SACjB,WAAY,SACZ,aAAc,SACd,iBAAkB,SAClB,iBAAkB,UAClB,gBAAiB,SACjB,UAAW,UACX,eAAgB,QAChB,eAAgB,UAChB,UAAW,MAIb,IAAIC,mBACF,aAAc,UACd,kBAAmB,UACnB,sBAAuB,SACvB,uBAAwB,SACxB,YAAa,UACb,YAAa,UACb,WAAY,UACZ,eAAgB,UAChB,eAAgB,kBAChB,iBAAkB,SAClB,uBAAwB,SACxB,cAAe,QACf,gBAAiB,SACjB,gBAAiB,SACjB,qBAAsB,SACtB,WAAY,QACZ,UAAW,MACX,UAAW,KAGb,SAASC,qBAAoB/lD,OAAQrI,UACpC,IAAI,GAAI1qB,GAAI,EAAGA,GAAK+yB,OAAOz9B,SAAU0K,EAAG,CAAE,GAAI7C,GAAI41B,OAAO/yB,EACxD,KAAI,GAAI5K,GAAE,EAAGA,GAAKs1B,SAASp1B,SAAUF,EAAG,CAAE,GAAIgb,GAAIsa,SAASt1B,EAC1D,IAAG+H,EAAEiT,EAAE,KAAO,KAAMjT,EAAEiT,EAAE,IAAMA,EAAE,KAInC,QAAS2oE,eAAchmD,OAAQrI,UAC9B,IAAI,GAAIt1B,GAAI,EAAGA,GAAKs1B,SAASp1B,SAAUF,EAAG,CAAE,GAAIgb,GAAIsa,SAASt1B,EAC5D,IAAG29B,OAAO3iB,EAAE,KAAO,KAAM2iB,OAAO3iB,EAAE,IAAMA,EAAE,IAI5C,QAAS4oE,mBAAkB13B,IAC1By3B,cAAcz3B,GAAG23B,QAASR,WAC1BM,eAAcz3B,GAAG43B,OAAQN,UAEzBE,qBAAoBx3B,GAAG63B,OAAQT,UAC/BI,qBAAoBx3B,GAAGq0B,OAAQgD,SAE/BvI,UAASpxE,SAAW0S,aAAa4vC,GAAG23B,QAAQj6E,SAAU,YAGvD,GAAIo6E,WAAY,eAChB,SAASC,cAAankF,KAAMuE,MAC3B,GAAI6nD,KAAOg4B,cAAeL,WAAYE,UAAWxD,UAAWuD,UAAWlvD,MAAO,GAC9E,IAAIqtB,MAAO,MAAOrtB,MAAQ,OAC1B90B,MAAKwL,MAAMoP,UAAUmD,QAAQ,QAASsmE,QAAO5jF,GAC5C,GAAI4D,GAAI0W,YAAYta,EACpB,QAAO4a,SAAShX,EAAE,KACjB,IAAK,QAAS,KAGd,KAAK,YACJ,GAAG5D,EAAE+K,MAAM04E,WAAYpvD,MAAQ,QAAUr0B,EAAE+K,MAAM,WAAW,EAC5D4gD,IAAGt3B,MAAQzwB,EAAEywB,MACb,MACD,KAAK,cAAe,KAGpB,KAAK,qBAAuBzwB,GAAE,EAAI+nD,IAAGg4B,WAAa//E,CAAG,MACrD,KAAK,iBAAkB,KAGvB,KAAK,eAAgB,IAAK,iBAAkB,KAG5C,KAAK,oBAAsBA,GAAE,EAAI+nD,IAAG23B,QAAU1/E,CAAG,MACjD,KAAK,sBAAwBA,GAAE,EAAI+nD,IAAG23B,QAAU1/E,CAAG,MAGnD,KAAK,sBAAuB,KAC5B,KAAK,wBAAyB,KAG9B,KAAK,cAAe,IAAK,eAAgB,KAEzC,KAAK,sBAAwBA,GAAE,EAAI+nD,IAAG63B,OAAO5uE,KAAKhR,EAAI,MAGtD,KAAK,WAAY,IAAK,YAAa,KAEnC,KAAK,eAAiBA,GAAE,EAAIA,GAAEoP,KAAOiJ,SAASrY,EAAEoP,KAAO24C,IAAGq0B,OAAOprE,KAAKhR,EAAI,MAG1E,KAAK,kBAAmB,IAAK,oBAAqB,KAElD,KAAK,iBAAkB,KAGvB,KAAK,sBAAuB,IAAK,wBAAyB,IAAK,uBAAwB,KAEvF,KAAK,qBAAsB,KAG3B,KAAK,kBAAmB,KACxB,KAAK,iBAAkB,IAAK,gBAAiB89C,KAAK,IAAM,MACxD,KAAK,kBAAmBA,KAAK,KAAO,MAEpC,KAAK,eAAgB,IAAK,iBAAkB,IAAK,iBAAkB,KAGnE,KAAK,gBAAkB99C,GAAE,EAAI+nD,IAAG43B,OAAS3/E,CAAG,MAC5C,KAAK,kBAAoBA,GAAE,EAAI+nD,IAAG43B,OAAS3/E,CAAG,MAG9C,KAAK,WAAY,KAGjB,KAAK,wBAAyB,IAAK,yBAA0B,IAAK,uBAAwB,KAE1F,KAAK,sBAAuB,IAAK,wBAAyB,KAG1D,KAAK,gBAAiB,IAAK,iBAAkB,IAAK,eAAgB,KAElE,KAAK,cAAe,KAGpB,KAAK,cAAe,IAAK,gBAAiB,KAG1C,KAAK,iBAAkB,IAAK,kBAAmB,IAAK,mBAAoB,KAExE,KAAK,gBAAiB,KAGtB,KAAK,iBAAkB,IAAK,mBAAoB,KAGhD,KAAK,kBAAmB,IAAK,oBAAqB,KAGlD,KAAK,sBAAuB,IAAK,qBAAsB,IAAK,uBAAwB,KAEpF,KAAK,oBAAqB,KAG1B,KAAK,WAAY,IAAK,YAAa,IAAK,YAAa,KAErD,KAAK,OAAQ89C,KAAK,IAAM,MACxB,KAAK,SAAUA,KAAK,KAAO,MAG3B,KAAK,UAAW,KAChB,KAAK,oBAAqBA,KAAK,IAAM,MACrC,KAAK,sBAAuBA,KAAK,KAAO,MAExC,SAAS,IAAIA,MAAQ59C,KAAK2wB,IAAK,KAAM,gBAAkB7wB,EAAE,GAAK,iBAGhE,IAAGoa,MAAMS,KAAKjd,QAAQmqD,GAAGt3B,UAAY,EAAG,KAAM,IAAIhsB,OAAM,sBAAwBsjD,GAAGt3B,MAEnFgvD,mBAAkB13B,GAElB,OAAOA,IAGR,GAAIk4B,aAAclmE,UAAU,WAAY,MACvC0W,MAASrW,MAAMS,KAAK,GAGpBmhE,UAAW5hE,MAAMvS,GAGlB,SAASq4E,UAASn4B,IAEjB,IAAM,MAAO5vC,cAAa4vC,GAAGo4B,SAAST,QAAQj6E,UAAY,OAAS,QAAW,MAAMyQ,GAAK,MAAO,SAGjG,QAASkqE,cAAar4B,GAAI7nD,MACzB,GAAItE,IAAKue,WACTve,GAAEA,EAAEG,QAAUkkF,WACdrkF,GAAEA,EAAEG,QAAWge,UAAU,aAAc,MAAOtU,SAASy6E,SAASn4B,KAChEnsD,GAAEA,EAAEG,QAAU,UACd,KAAI,GAAIF,GAAI,EAAGA,GAAKksD,GAAGjzB,WAAW/4B,SAAUF,EAC3CD,EAAEA,EAAEG,QAAWge,UAAU,QAAQ,MAAM3K,KAAK24C,GAAGjzB,WAAWj5B,GAAGY,OAAO,EAAE,IAAK4jF,QAAQ,IAAIxkF,EAAE,GAAIykF,OAAO,OAAOzkF,EAAE,IAC9GD,GAAEA,EAAEG,QAAU,WAEb,IAAIwkF,iBAAkB,KACtB,KAAI,GAAI1kF,GAAI,EAAGA,GAAKksD,GAAGjzB,WAAW/4B,SAAUF,EAAG,CAC7C,GAAI0wD,WAAYxE,GAAGjzB,WAAWj5B,EAC9B,IAAIqzB,OAAQ64B,GAAGq0B,OAAO7vB,UACtB,IAAIr9B,MAAM,gBAAiB,CACzB,GAAIA,MAAM,gBAAgBnzB,SAAW,EAAG,CACtC,KAAM,+CAA+CmzB,MAAM,gBAG7DqxD,gBAAkB,MAKtB,GAAIA,gBAAiB,CACnB3kF,EAAEA,EAAEG,QAAU,gBACd,KAAI,GAAIF,GAAI,EAAGA,GAAKksD,GAAGjzB,WAAW/4B,SAAUF,EAAG,CAC7C,GAAI0wD,WAAYxE,GAAGjzB,WAAWj5B,EAC9B,IAAIqzB,OAAQ64B,GAAGq0B,OAAO7vB,UACtB,IAAIr9B,MAAM,iBAAmBA,MAAM,iBAAkB,CACjD,GAAIsxD,aAActxD,MAAM,eACxB,IAAIuxD,cAAevxD,MAAM,gBAG3B,IAAItO,OAAQ,EAEZ,IAAI6/D,aAAe7/D,OAAU,IAAM2rC,UAAY,MAAU,IAAMk0B,aAAa,GAAK,KAAOA,aAAa,GACrG,IAAIA,cAAgBD,YAAc5/D,OAAS,GAC3C,IAAI4/D,YAAa5/D,OAAU,IAAM2rC,UAAY,MAAW,IAAMi0B,YAAY,GAAK,KAAOA,YAAY,GAElG1vD,SAAQ1sB,IAAI,gCACZ0sB,SAAQ1sB,IAAIwc,MACZhlB,GAAEA,EAAEG,QAAWge,UAAU,cAAe6G,OACtCxR,KAAO,qBACPsxE,aAAe,GAAG7kF,KAIxBD,EAAEA,EAAEG,QAAU,kBAGjB,GAAGH,EAAEG,OAAO,EAAE,CAAEH,EAAEA,EAAEG,QAAU,aAAeH,GAAE,GAAGA,EAAE,GAAG+B,QAAQ,KAAK,KACpE,MAAO/B,GAAEke,KAAK,IAGf,QAAS6mE,mBAAkBhlF,KAAMI,QAChC,GAAI8a,KACJA,GAAE+pE,QAAUjlF,KAAKkT,WAAW,EAC5BgI,GAAEgqE,OAASllF,KAAKkT,WAAW,EAC3BgI,GAAEiqE,SAAWn+D,YAAYhnB,KAAKI,OAAO,EACrC8a,GAAEzH,KAAOyS,mBAAmBlmB,KAC5B,OAAOkb,GAER,QAASkqE,mBAAkBplF,KAAMC,GAChC,IAAIA,EAAGA,EAAIgjB,QAAQ,IACnBhjB,GAAE6iB,YAAY,EAAG9iB,KAAKilF,QACtBhlF,GAAE6iB,YAAY,EAAG9iB,KAAKklF,OACtBj+D,aAAYjnB,KAAKmlF,SAAUllF,EAC3BqmB,oBAAmBtmB,KAAKyT,KAAK3S,OAAO,EAAE,IAAKb,EAC3C,OAAOA,GAIR,QAASolF,iBAAgBrlF,KAAMI,QAC9BJ,KAAKkT,WAAW,EAChB,IAAI67C,gBAAiB/uD,KAAKkT,WAAW,EACrC,IAAIoyE,SAAWllF,OAAS,EAAK8lB,mBAAmBlmB,MAAQ,EACxD,QAAQ+uD,eAAgBu2B,SAEzB,QAASC,iBAAgBvlF,KAAMC,GAC9B,IAAIA,EAAGA,EAAIgjB,QAAQ,EACnBhjB,GAAE6iB,YAAY,EAAG,EACjB7iB,GAAE6iB,YAAY,EAAG,EACjB,OAAO7iB,GAGR,QAASulF,qBAAoBxlF,KAAMI,QAClC,GAAIH,KACJD,MAAKkT,WAAW,EAChBjT,GAAEwlF,OAASzlF,KAAKkT,WAAW,EAC3BlT,MAAKoD,GAAKhD,OAAS,CACnB,OAAOH,GAIR,QAASylF,cAAa1lF,KAAMuE,MAC3B,GAAI6nD,KAAOg4B,cAAeL,WAAYE,UAAWxD,UAAWuD,UAAWlvD,MAAO,GAC9E,IAAIqtB,MAAO,MAAOjnC,CAElBiI,cAAanjB,KAAM,QAAS2lF,WAAUn7E,IAAKyK,GAC1C,OAAOA,EAAEyW,GACR,IAAK,cAAe0gC,GAAGq0B,OAAOprE,KAAK7K,IAAM,MAEzC,KAAK,eAAgB,KACrB,KAAK,iBAAkB,KACvB,KAAK,YAAa,KAClB,KAAK,aAAc,KACnB,KAAK,eAAgB,KACrB,KAAK,WAAY,KACjB,KAAK,eAAgB,KAErB,KAAK,oBAAqB,KAC1B,KAAK,oBAAqB,KAC1B,KAAK,cAAe,KACpB,KAAK,kBAAmB,KACxB,KAAK,oBAAqB,KAC1B,KAAK,kBAAmB,KACxB,KAAK,kBAAmB,KACxB,KAAK,gBAAiB,KACtB,KAAK,oBAAqB,KAC1B,KAAK,aAAc,KACnB,KAAK,gBAAiB,KACtB,KAAK,iBAAkB,KACvB,KAAK,kBAAmB,KACxB,KAAK,UAAW,KAChB,KAAK,cAAe,KACpB,KAAK,kBAAmB,KACxB,KAAK,wBAAyB,KAC9B,KAAK,uBAAwB,KAC7B,KAAK,qBAAsB,KAC3B,KAAK,sBAAuB,KAC5B,KAAK,YAAa,KAClB,KAAK,iBAAkB,KACvB,KAAK,iBAAkB,KAOvB,KAAK,wBAAyB,KAC9B,KAAK,kBAAmB,KACxB,KAAK,sBAAuB,KAE5B,KAAK,cAAe23C,KAAO,IAAM,MACjC,KAAK,gBAAiB,KACtB,KAAK,kBAAmB,KACxB,KAAK,YAAaA,KAAO,KAAO,MAChC,KAAK,aAAc,KACnB,SAAS,IAAIA,MAAQ59C,KAAK2wB,IAAK,KAAM,IAAIpsB,OAAM,qBAAuBmM,EAAEyW,KAI1Eo4D,mBAAkB13B,GAElB,OAAOA,IAIR,QAASw5B,iBAAgBrhE,GAAI6nC,GAAI7nD,MAChC+f,aAAaC,GAAI,oBACjB,KAAI,GAAIjZ,KAAM,EAAGA,KAAO8gD,GAAGjzB,WAAW/4B,SAAUkL,IAAK,CACpD,GAAI/H,IAAM0hF,QAAS,EAAGC,OAAQ55E,IAAI,EAAG65E,SAAU,OAAS75E,IAAI,GAAImI,KAAM24C,GAAGjzB,WAAW7tB,KACpFgZ,cAAaC,GAAI,cAAe6gE,kBAAkB7hF,IAEnD+gB,aAAaC,GAAI,mBAIlB,QAASshE,sBAAqB7lF,KAAMC,GACnC,IAAIA,EAAGA,EAAIgjB,QAAQ,IACnB,KAAI,GAAI/iB,GAAI,EAAGA,GAAK,IAAKA,EAAGD,EAAE6iB,YAAY,EAAG,EAC7CwD,oBAAmB,UAAWrmB,EAC9BqmB,oBAAmBlnB,KAAKE,QAASW,EACjCqmB,oBAAmBlnB,KAAKE,QAASW,EACjCqmB,oBAAmB,OAAQrmB,EAC3BA,GAAEG,OAASH,EAAEmD,CACb,OAAOnD,GAIR,QAAS6lF,iBAAgBvhE,GAAI6nC,GAAI7nD,MAChC+f,aAAaC,GAAI,oBAEjBD,cAAaC,GAAI,mBAIlB,QAASwhE,mBAAkB/lF,KAAMC,GAChC,IAAIA,EAAGA,EAAIgjB,QAAQ,GACnBhjB,GAAE6iB,YAAY,EAAE,EAChB7iB,GAAE6iB,YAAY,EAAE,EAChB7iB,GAAE6iB,YAAY,EAAE,EAChB2E,YAAW,EAAGxnB,EACdA,GAAE6iB,aAAa,EAAG,KAClB7iB,GAAE6iB,YAAY,EAAG,GACjB7iB,GAAE6iB,YAAY,EAAG,EACjB,OAAO7iB,GAGR,QAAS+lF,sBAAqBhmF,KAAMC,GACnC,IAAIA,EAAGA,EAAIgjB,QAAQ,EACnBhjB,GAAE6iB,YAAY,EAAE,EAChB,OAAO7iB,GAIR,QAASgmF,cAAa75B,GAAI7nD,MACzB,GAAIggB,IAAKd,WACTa,cAAaC,GAAI,eACjBD,cAAaC,GAAI,iBAAkBshE,uBAEnCvhE,cAAaC,GAAI,YAAaghE,kBAG9BO,iBAAgBvhE,GAAI6nC,GAAI7nD,KACxBqhF,iBAAgBrhE,GAAI6nC,GAAI7nD,KAIxB+f,cAAaC,GAAI,cAAewhE,oBAOhCzhE,cAAaC,GAAI,iBAAkByhE,uBAInC1hE,cAAaC,GAAI,aAEjB,OAAOA,IAAGL,MAEX,QAASgiE,UAASlmF,KAAMyT,KAAMlP,MAC7B,OAAQkP,KAAK3S,QAAQ,KAAK,OAAS4kF,aAAevB,cAAcnkF,KAAMuE,MAGvE,QAAS4hF,UAASnmF,KAAMyT,KAAMlP,KAAMswB,MACnC,OAAQphB,KAAK3S,QAAQ,KAAK,OAASmiF,aAAepG,cAAc78E,KAAMuE,KAAMswB,MAG7E,QAASuxD,WAAUpmF,KAAMyT,KAAMlP,MAC9B,OAAQkP,KAAK3S,QAAQ,KAAK,OAASgtD,cAAgBnC,eAAe3rD,KAAMuE,MAGzE,QAAS8hF,aAAYrmF,KAAMyT,KAAMlP,MAChC,MAAOoqD,iBAAgB3uD,KAAMuE,MAG9B,QAAS+hF,WAAUtmF,KAAMyT,KAAMlP,MAC9B,OAAQkP,KAAK3S,QAAQ,KAAK,OAASohD,cAAgBT,eAAezhD,KAAMuE,MAGzE,QAASmsD,YAAW1wD,KAAMyT,KAAMlP,MAC/B,OAAQkP,KAAK3S,QAAQ,KAAK,OAASoxD,mBAAqBb,oBAAoBrxD,KAAMuE,MAGnF,QAASgiF,UAASvmF,KAAMyT,KAAMlP,MAC7B,OAAQkP,KAAK3S,QAAQ,KAAK,OAASqvD,aAAeJ,cAAc/vD,KAAMuE,MAGvE,QAASiiF,UAASp6B,GAAI34C,KAAMlP,MAC3B,OAAQkP,KAAK3S,QAAQ,KAAK,OAASmlF,aAAexB,cAAcr4B,GAAI7nD,MAGrE,QAASkiF,UAASzmF,KAAMyT,KAAMlP,KAAM6nD,IACnC,OAAQ34C,KAAK3S,QAAQ,KAAK,OAASwiF,aAAehD,cAActgF,KAAMuE,KAAM6nD,IAG7E,QAASs6B,WAAU1mF,KAAMyT,KAAMlP,MAC9B,OAAQkP,KAAK3S,QAAQ,KAAK,OAASktD,cAAgB7B,eAAensD,KAAMuE,MAGzE,QAASoiF,WAAU3mF,KAAMyT,KAAMlP,MAC9B,OAAQkP,KAAK3S,QAAQ,KAAK,OAASyhD,cAAgBT,eAAe9hD,KAAMuE,MAWzE,GAAIqiF,YAAW,iDACf,IAAIC,WAAU,oDACd,IAAIC,MAAO,SAAS3jF,GAAK,MAAOzC,QAAOC,aAAawC,GACpD,SAAS4jF,kBAAiB/rE,IAAKC,WAC9B,GAAI+rE,OAAQhsE,IAAIxY,MAAM,MACtB,IAAI0Y,KAAQ,KAAID,UAAWC,EAAE,GAAK8rE,MAAM,EACxC,IAAGA,MAAM5mF,SAAW,EAAG,MAAO8a,EAC9B,IAAIxR,GAAIsR,IAAIxP,MAAMo7E,YAAaviF,EAAGyG,EAAG7C,EAAG/H,CACxC,IAAGwJ,EAAG,IAAIxJ,EAAI,EAAGA,GAAKwJ,EAAEtJ,SAAUF,EAAG,CACpCmE,EAAIqF,EAAExJ,GAAGsL,MAAMq7E,UACf,KAAI/7E,EAAEzG,EAAE,GAAGpC,QAAQ,SAAW,EAAGiZ,EAAE7W,EAAE,IAAMA,EAAE,GAAGvD,OAAO,EAAEuD,EAAE,GAAGjE,OAAO,OAChE,CACJ,GAAGiE,EAAE,GAAGvD,OAAO,EAAE,KAAO,SAAUmH,EAAI,QAAQ5D,EAAE,GAAGvD,OAAO,OACrDmH,GAAI5D,EAAE,GAAGvD,OAAOgK,EAAE,EACvBoQ,GAAEjT,GAAK5D,EAAE,GAAGvD,OAAO,EAAEuD,EAAE,GAAGjE,OAAO,IAGnC,MAAO8a,GAER,QAAS+rE,qBAAoBjsE,KAC5B,GAAIgsE,OAAQhsE,IAAIxY,MAAM,MACtB,IAAI0Y,KACJ,IAAG8rE,MAAM5mF,SAAW,EAAG,MAAO8a,EAC9B,IAAIxR,GAAIsR,IAAIxP,MAAMo7E,YAAaviF,EAAGyG,EAAG7C,EAAG/H,CACxC,IAAGwJ,EAAG,IAAIxJ,EAAI,EAAGA,GAAKwJ,EAAEtJ,SAAUF,EAAG,CACpCmE,EAAIqF,EAAExJ,GAAGsL,MAAMq7E,UACf,KAAI/7E,EAAEzG,EAAE,GAAGpC,QAAQ,SAAW,EAAGiZ,EAAE7W,EAAE,IAAMA,EAAE,GAAGvD,OAAO,EAAEuD,EAAE,GAAGjE,OAAO,OAChE,CACJ,GAAGiE,EAAE,GAAGvD,OAAO,EAAE,KAAO,SAAUmH,EAAI,QAAQ5D,EAAE,GAAGvD,OAAO,OACrDmH,GAAI5D,EAAE,GAAGvD,OAAOgK,EAAE,EACvBoQ,GAAEjT,GAAK5D,EAAE,GAAGvD,OAAO,EAAEuD,EAAE,GAAGjE,OAAO,IAGnC,MAAO8a,GAKR,QAASgsE,aAAY/2E,OAAQsM,OAC5B,GAAIlS,KAAMoG,cAAcR,SAAW2L,YAAY3L,OAC/C,IAAG5F,MAAQ,UAAW,MAAOxH,KAAIgG,SAAS0T,MAC1C,OAAO1Z,KAAIoN,OAAO5F,IAAKkS,OAGxB,QAAS0qE,mBAAkBC,UAAWC,GAAIvnF,GAAI0K,KAC7C,QAAQ1K,GAAG,GAAG0L,MAAM,sBAAsB,GAAG,KAAK,IACjD,IAAK,UAAWhB,IAAMgS,aAAahS,IAAM,MACzC,KAAK,KAAM,IAAK,MAAOA,IAAM8B,SAAS9B,IAAK,GAAK,MAChD,KAAK,KAAM,IAAK,QAASA,IAAMqF,WAAWrF,IAAM,MAChD,KAAK,OAAQ,IAAK,cAAeA,IAAM,GAAIT,MAAKS,IAAM,MACtD,KAAK,KAAM,IAAK,SAAU,IAAK,QAAS,IAAK,OAAQ,IAAK,aAAc,KACxE,SAAS,KAAM,gBAAkB1K,GAAG,GAErCsnF,UAAUtrE,YAAYurE,GAAG,KAAO78E,IAGjC,QAAS88E,kBAAiB1iE,KAAM2iE,GAAItnF,GACnC,IACC,GAAG2kB,KAAKphB,IAAM,IAAK,CAAEohB,KAAK3c,EAAI2c,KAAK3c,GAAKyf,KAAK9C,KAAKthB,OAC7C,IAAGikF,KAAO,UAAW,CACzB,GAAG3iE,KAAKphB,IAAM,IAAK,CAClB,IAAIohB,KAAKthB,EAAE,KAAOshB,KAAKthB,EAAGshB,KAAK3c,EAAIlF,IAAIyE,aAAaod,KAAKthB,OACpDshB,MAAK3c,EAAIlF,IAAI6F,aAAagc,KAAKthB,OAEhCshB,MAAK3c,EAAIlF,IAAIgG,SAAS6b,KAAKthB,OAE5BshB,MAAK3c,EAAIi/E,YAAYK,IAAI,UAAW3iE,KAAKthB,EAC9C,IAAGrD,EAAEo8E,OAAQz3D,KAAK1J,EAAIvK,cAAc42E,KAAKA,IAAI,UAC5C,MAAMhtE,GAAK,GAAGta,EAAEi1B,IAAK,KAAM3a,IAG9B,QAASitE,oBAAmBxzD,OAAQyzD,KAAMljF,MACzC,GAAGA,KAAK04E,WAAY,CACnB,GAAGwK,KAAKC,SAAU,CACjB,GAAIC,GAAIF,KAAKC,QACb,IAAGC,EAAEC,QAASD,EAAE/gD,YAAcghB,mBAAmB+/B,EAAEC,UAAYD,EAAEC,SAGnE5zD,OAAOyzD,KAAKI,IAAMJ,KAInB,QAASK,iBAAgBC,IAAKr9E,GAAI1K,KAAM4kB,KAAMpY,KAAMwnB,OAAQg0D,KAAMv+C,IAAKxpC,GACtE,GAAIsnF,IAAK,UAAWU,IAAMrjE,KAAKsjE,QAASr+E,IAAQ5J,GAAIA,KACpD,IAAIkoF,aACJ,IAAGF,MAAQ3jF,WAAamlC,IAAKw+C,IAAMx+C,IAAIy+C,OACvC,IAAGD,MAAQ3jF,WAAa0jF,KAAMC,IAAMD,KAAKE,OACzC,OAAMl0D,OAAOi0D,OAAS3jF,UAAW,CAChC,GAAG0vB,OAAOi0D,KAAKV,GAAIA,GAAKvzD,OAAOi0D,KAAKV,EACpC,IAAGvzD,OAAOi0D,KAAKP,SAAUS,UAAU9yE,KAAK2e,OAAOi0D,KAAKP,SACpD,KAAI1zD,OAAOi0D,KAAKG,OAAQ,KACxBH,KAAMj0D,OAAOi0D,KAAKG,OAEnB,OAAOpoF,KAAKg3B,MACX,IAAK,UACJpS,KAAKphB,EAAI,GACTohB,MAAKthB,EAAIkZ,aAAaurE,IACtB,MACD,KAAK,SACJnjE,KAAKphB,EAAI,GAAKohB,MAAK1Y,EAAImQ,YAAYP,YAAYisE,KAC/CnjE,MAAKthB,EAAIykF,IAAI9lF,QAAQ,MAAQ,EAAIyI,GAAKka,KAAK1Y,CAC3C,MACD,KAAK,WACJ0Y,KAAKthB,GAAKyG,KAAKiI,MAAM+1E,KAAO,GAAIh+E,MAAKA,KAAKs+E,IAAI,KAAM,GAAI,OAAS,GAAK,GAAK,GAAK,IAChF,IAAGzjE,KAAKthB,IAAMshB,KAAKthB,EAAGshB,KAAKthB,EAAIwY,YAAYisE,SACtC,IAAGnjE,KAAKthB,GAAK,GAAKshB,KAAKthB,EAAE,GAAIshB,KAAKthB,EAAIshB,KAAKthB,EAAG,CACnD,KAAIikF,IAAMA,IAAM,UAAWA,GAAK,YAEjC,KAAK,SACJ,GAAG3iE,KAAKthB,IAAMgB,UAAWsgB,KAAKthB,GAAGykF,GACjC,KAAInjE,KAAKphB,EAAGohB,KAAKphB,EAAI,GACrB,MACD,KAAK,QAASohB,KAAKphB,EAAI,GAAKohB,MAAKthB,EAAI4kB,MAAM6/D,IAAMnjE,MAAK3c,EAAI8/E,GAAK,MAC/D,SAASnjE,KAAKphB,EAAI,GAAKohB,MAAKthB,EAAI+Y,YAAY3R,GAAK,OAElD48E,iBAAiB1iE,KAAM2iE,GAAItnF,EAC3B,IAAGA,EAAEggF,aAAe,MAAQr7D,KAAK0jE,QAAS,CACzC1jE,KAAK7U,EAAIsiD,SAASv2C,YAAY8I,KAAK0jE,SAAU97E,KAC7CoY,MAAK0jE,QAAUhkF,UAEhB,GAAGrE,EAAEg9E,WAAY,CAChBkL,UAAUpqE,QAAQ,SAAStd,GAC1B,IAAIoJ,EAAE+8B,aAAenmC,EAAEmmC,YAAa/8B,EAAE+8B,YAAcnmC,EAAEmmC,aAEvDhiB,MAAKriB,EAAIsH,EAEV+a,KAAKmc,KAAOnc,KAAKsjE,UAAY5jF,UAAYsgB,KAAKsjE,QAAU,UAGzD,QAASK,oBAAmBz3B,SAC3BA,QAAQttD,EAAIstD,QAAQxtD,CACpBwtD,SAAQxtD,EAAIwtD,QAAQ7oD,EAAI6oD,QAAQ/vB,KAAOz8B,UAGxC,QAASkkF,gBAAejlF,GACvB,GAAGrB,SAAWC,OAAOmf,SAAS/d,GAAI,MAAOA,GAAEwW,SAAS,OACpD,UAAUxW,KAAM,SAAU,MAAOA,EACjC,MAAM,OAIP,GAAIklF,WAAY,kCAChB,SAASC,gBAAenlF,EAAGgB,MAC1B,GAAIyI,KAAMw7E,eAAejlF,EACzB,IAAI8jF,GACJ,IAAIrwE,UAAY6rC,GAChB,IAAI9uB,WAAa40D,cAAiBC,YAAeC,UAAY,EAC7D,IAAIz4E,UAAYwU,QAAW6kB,OAAUq/C,KAAMC,IAC3C,IAAI5lF,GAAI,EAAG+I,EAAI,CACf,IAAIixE,WAAY56E,GAAI2J,EAAE,IAAS/I,EAAE,KAAUoX,GAAIrO,EAAE,EAAG/I,EAAE,GACtD,IAAI6wB,WAAayzD,OACjB,IAAI/8E,IAAK,GAAIs+E,KAAO,CACpB,IAAIjM,cACJ,IAAI5kD,UAAYivD,aAAgB6B,KAAO,EAAGnpF,KAC1C,IAAI40B,aAAeo8B,UACnB,IAAIo4B,UAAYlB,IAChBS,WAAUU,UAAY,CACtB,OAAO9B,GAAKoB,UAAUnN,KAAKtuE,KAAO,OAAOq6E,GAAG,IAC3C,IAAK,OACJ,GAAGrwE,MAAMA,MAAM5W,OAAO,GAAG,GAAI,KAC7B,IAAGinF,GAAG,KAAK,IAAKS,gBAAgB96E,IAAI2F,MAAMo2E,KAAM1B,GAAG/+D,OAAQ5d,GAAIo+E,KAAM9xE,MAAMA,MAAM5W,OAAO,GAAG,IAAI,UAAU0wD,QAAQlsC,MAAOzhB,EAAEA,EAAE+I,EAAEA,GAAI8nB,OAAQk1D,MAAM/lF,GAAIsmC,IAAKllC,UACpJ,CAAEmG,GAAK,EAAIo+E,MAAO/B,iBAAiBM,GAAG,GAAK0B,MAAO1B,GAAG/+D,MAAQ++D,GAAG,GAAGjnF,OACxE,KACD,KAAK,OACJ,GAAGinF,GAAG,KAAK,IAAI,CACd,GAAG3yD,SAASt0B,OAAS,EAAGwkB,KAAKzhB,EAAIuxB,QACjC,MAAKnwB,KAAKmtD,WAAantD,KAAKmtD,UAAYxlD,IAAM0Y,KAAKthB,IAAMgB,UAAWskF,SAASj2B,WAAWxvD,GAAKyvD,WAAW1mD,IAAM0Y,IAC9G,IAAGA,KAAKwkE,KAAM,CACbxkE,KAAKxhB,GAAK6zB,OAAOrS,KAAKwkE,KAAMrG,QAAQn+D,KAAKykE,cACzCzkE,MAAKwkE,KAAOxkE,KAAKykE,cAAgB/kF,UAElC,GAAGsgB,KAAK0kE,aAAe1kE,KAAK2kE,UAAW,CACtC,GAAIt8E,IAAK9J,GAAKmJ,SAASsY,KAAK0kE,YAAY,IAAI,EAC5C,IAAI/8E,IAAKL,GAAKI,SAASsY,KAAK2kE,UAAU,IAAI,EAC1CxM,YAAW1nE,MAAM9S,GAAGY,EAAEA,EAAE+I,EAAEA,GAAGqO,GAAGpX,EAAE8J,GAAGf,EAAEK,QAEtCpJ,CACF,IAAGyhB,KAAK0kE,YAAanmF,IAAMyhB,KAAK0kE,gBAC1B,CACN1kE,KAAOqiE,oBAAoBI,GAAG,GAC9B,IAAGziE,KAAKmgC,MAAO5hD,GAAKyhB,KAAKmgC,MAAQ,CACjC,IAAG5hD,EAAIg6E,SAAS56E,EAAEY,EAAGg6E,SAAS56E,EAAEY,EAAIA,CACpC,IAAGA,EAAIg6E,SAAS5iE,EAAEpX,EAAGg6E,SAAS5iE,EAAEpX,EAAIA,CACpC,IAAGkkF,GAAG,GAAGvmF,QAAQ,KAAO,OAAQqC,CAChCuxB,aAED,KACD,KAAK,MACJ,GAAG2yD,GAAG,KAAK,KAAOA,GAAG,GAAGvmF,QAAQ,KAAO,KAAM,CAC5C,GAAGoL,EAAIixE,SAAS56E,EAAE2J,EAAGixE,SAAS56E,EAAE2J,EAAIA,CACpC,IAAGA,EAAIixE,SAAS5iE,EAAErO,EAAGixE,SAAS5iE,EAAErO,EAAIA,CACpC,IAAGm7E,GAAG,GAAGvmF,QAAQ,KAAO,KAAM,CAC7B2oC,IAAMs9C,iBAAiBM,GAAG,GAC1B,IAAG59C,IAAIsb,MAAO74C,GAAKu9B,IAAIsb,MAAQ,EAEhC5hD,EAAI,IAAK+I,MACH,CACNu9B,IAAMs9C,iBAAiBM,GAAG,GAC1B,IAAG59C,IAAIsb,MAAO74C,GAAKu9B,IAAIsb,MAAQ,EAEhC,KACD,KAAK,YACJ,GAAGsiC,GAAG,KAAK,IAAI,CACd,IAAIxkC,IAAI7rC,MAAM2f,OAAO,KAAK0wD,GAAG,GAAI,KAAM,cAAcxkC,GACrD8lC,YAAWtzE,KAAKwzE,UAChB,IAAG1L,SAAS56E,EAAE2J,GAAKixE,SAAS5iE,EAAErO,GAAKixE,SAAS56E,EAAEY,GAAKg6E,SAAS5iE,EAAEpX,EAAGylF,SAAS,QAAUz3B,aAAagsB,SACjG,IAAGJ,WAAW38E,OAAQwoF,SAAS,WAAa7L,UAC5ChpD,QAAO80D,WAAaD,aACd,CACNzL,UAAY56E,GAAI2J,EAAE,IAAS/I,EAAE,KAAUoX,GAAIrO,EAAE,EAAG/I,EAAE,GAClD+I,GAAI/I,EAAI,CACR6T,OAAM3B,MAAMgyE,GAAG,GAAI,OACnBxkC,KAAMkkC,iBAAiBM,GAAG,GAC1BwB,WAAYhmC,IAAIla,IAChBigD,YACA7L,eAED,KACD,KAAK,QACJ,GAAGsK,GAAG,KAAK,IAAI,CAAC,IAAIxkC,IAAI7rC,MAAM2f,OAAO,KAAK0wD,GAAG,GAAI,KAAM,cAAcxkC,QAChE,IAAGwkC,GAAG,GAAG10E,OAAO,IAAM,KAAM,UAC5B,CACJvC,MAAQ22E,iBAAiBM,GAAG,GAC5BrwE,OAAM3B,MAAMgyE,GAAG,GAAI,OACnB6B,UAED,KAED,KAAK,QACJ,GAAG7B,GAAG,KAAK,IAAKG,mBAAmBxzD,OAAQyzD,KAAMljF,UAC5CkjF,MAAOV,iBAAiBM,GAAG,GAChC,MAED,KAAK,eACJI,KAAKF,GAAKR,iBAAiBM,GAAG,IAAImC,QAAU,SAC5C,MAED,KAAK,SACJ,GAAGxyE,MAAMA,MAAM5W,OAAO,GAAG,KAAO,QAAS,KACzC4nF,MAAOjB,iBAAiBM,GAAG,GAC3B6B,OAAOlB,KAAKjjC,MAAM,GAAGmkC,MAAM9oF,QAAW4nF,IACtC,KAAI,GAAI9nF,GAAI,EAAGA,GAAK8nF,KAAKyB,OAAQvpF,EAAGgpF,MAAMA,MAAM9oF,QAAU4nF,IAC1D,MAED,KAAK,aAAc,KACnB,KAAK,YAAa,KAClB,KAAK,IAAK,KACV,KAAK,IAAK,KACV,KAAK,IAAK,KACV,KAAK,IAAK,KACV,KAAK,MAAO,KACZ,KAAK,MAAO,KACZ,KAAK,OAAQ,KACb,KAAK,SAAU,KACf,KAAK,YAAa,KAClB,KAAK,UAAW,KAChB,KAAK,OACJ,GAAGX,GAAG,GAAGvmF,QAAQ,KAAO,KAAM,UACzB,IAAGumF,GAAG,KAAK,IAAK38E,IAAMsC,IAAI2F,MAAMq2E,KAAM3B,GAAG/+D,WACzC0gE,MAAO3B,GAAG/+D,MAAQ++D,GAAG,GAAGjnF,MAC7B,MACD,KAAK,WACJ,IAAImE,KAAK04E,WAAY,KACrBwK,MAAKC,SAAWX,iBAAiBM,GAAG,GACpC,MACD,KAAK,aAAc,KAEnB,KAAK,SACL,IAAK,QACL,IAAK,cACL,IAAK,UACL,IAAK,WACL,IAAK,UACL,IAAK,WACL,IAAK,UACL,IAAK,aACL,IAAK,YACL,IAAK,cACL,IAAK,UACL,IAAK,WACL,IAAK,YACL,IAAK,gBACL,IAAK,UACJ,GAAGA,GAAG,GAAGvmF,QAAQ,KAAO,KAAM,UACzB,IAAGumF,GAAG,KAAK,IAAKjtD,cAAcjC,MAAOkvD,GAAG,GAAIr6E,IAAI2F,MAAMs2E,KAAM5B,GAAG/+D,YAC/D2gE,MAAO5B,GAAG/+D,MAAQ++D,GAAG,GAAGjnF,MAC7B,MACD,KAAK,aAAc,KAEnB,KAAK,SACL,IAAK,WACJ,GAAGinF,GAAG,KAAK,IAAI,CAAC,IAAIxkC,IAAI7rC,MAAM2f,OAAO,KAAK0wD,GAAG,GAAI,KAAM,cAAcxkC,QAChE7rC,OAAM3B,MAAMgyE,GAAG,GAAI,OACxB,MAED,KAAK,UACJ,GAAGA,GAAG,KAAK,IAAI,CACd,IAAIxkC,IAAI7rC,MAAM2f,OAAO,KAAK0wD,GAAG,GAAI,KAAM,cAAcxkC,GACrD0lC,oBAAmBz3B,QACnBp8B,UAASrf,KAAKy7C,aACR,CACN95C,MAAM3B,MAAMgyE,GAAG,GAAI,OACnBxkC,KAAMkkC,iBAAiBM,GAAG,GAC1Bv2B,UAAW3vC,EAAE0hC,IAAI6mC,QAElB,KAED,KAAK,OAAQ,KAEb,KAAK,mBACL,IAAK,qBACL,IAAK,2BACL,IAAK,yBACL,IAAK,aACL,IAAK,aACL,IAAK,QACL,IAAK,UACL,IAAK,aACL,IAAK,aACL,IAAK,iBACL,IAAK,aACL,IAAK,UACL,IAAK,SACL,IAAK,OACL,IAAK,wBACL,IAAK,eACL,IAAK,YACL,IAAK,gBACL,IAAK,kBACL,IAAK,mBACJ,GAAGrC,GAAG,KAAK,IAAI,CAAC,IAAIxkC,IAAI7rC,MAAM2f,OAAO,KAAK0wD,GAAG,GAAI,KAAM,cAAcxkC,QAChE,IAAGwkC,GAAG,GAAGvlF,OAAOulF,GAAG,GAAGjnF,OAAO,KAAO,IAAK4W,MAAM3B,MAAMgyE,GAAG,GAAI,MACjE,MAED,SACC,GAAIsC,MAAO,IACX,QAAO3yE,MAAMA,MAAM5W,OAAO,GAAG,IAE5B,IAAK,yBAA0B,OAAOinF,GAAG,IACxC,IAAK,WAAY,KACjB,KAAK,4BAA6B,KAClC,KAAK,qBAAsB,KAC3B,KAAK,uBAAwB,KAC7B,KAAK,SAAU,KACf,KAAK,QAAS,KACd,KAAK,QAAS,KACd,KAAK,MAAO,KACZ,KAAK,gBAAiB,KACtB,KAAK,mBAAoB,KACzB,KAAK,sBAAuB,KAC5B,SAASsC,KAAO,MACf,KAGF,KAAK,mBAAoB,OAAOtC,GAAG,IAClC,IAAK,UAAW,KAChB,KAAK,iBAAkB,KACvB,KAAK,qBAAsB,KAC3B,KAAK,QAAS,KACd,KAAK,UAAW,KAChB,KAAK,YAAa,KAClB,KAAK,WAAY,KACjB,KAAK,kBAAmB,KACxB,SAASsC,KAAO,MACf,KAGF,KAAK,gBAAiB,OAAOtC,GAAG,IAC/B,IAAK,eAAgB,KACrB,KAAK,cAAe,KACpB,KAAK,aAAc,KACnB,KAAK,aAAc,KACnB,KAAK,WAAY,KACjB,KAAK,mBAAoB,KACzB,KAAK,iBAAkB,KACvB,KAAK,cAAe,KACpB,KAAK,kBAAmB,KACxB,KAAK,oBAAqB,KAC1B,KAAK,UAAW,KAChB,KAAK,YAAa,KAClB,KAAK,aAAc,KACnB,KAAK,kBAAmB,KACxB,KAAK,iBAAkB,KACvB,KAAK,MAAO,KACZ,KAAK,yBAA0B,KAC/B,KAAK,sBAAuB,KAC5B,KAAK,WAAY,KACjB,KAAK,YAAa,KAClB,KAAK,gBAAiB,KACtB,KAAK,YAAa,KAClB,KAAK,OAAQ,KACb,KAAK,MAAO,KACZ,KAAK,QAAS,KACd,KAAK,iBAAkB,KACvB,KAAK,cAAe,KACpB,KAAK,WAAY,KACjB,KAAK,gBAAiB,KACtB,KAAK,MAAO,KACZ,KAAK,aAAc,KACnB,KAAK,UAAW,KAChB,KAAK,WAAY,KACjB,KAAK,UAAW,KAChB,KAAK,aAAc,KACnB,KAAK,UAAW,KAChB,KAAK,QAAS,KACd,KAAK,OAAQ,KACb,KAAK,MAAO,KACZ,KAAK,gBAAiB,KACtB,KAAK,iBAAkB,KACvB,KAAK,2BAA4B,KACjC,KAAK,SAAU,KACf,KAAK,cAAe,KACpB,KAAK,qBAAsB,KAC3B,SAASsC,KAAO,MACf,KAGF,KAAK,kBAAmB,OAAOtC,GAAG,IACjC,IAAK,aAAc,KACnB,KAAK,SAAU,KACf,KAAK,QAAS,KACd,SAASsC,KAAO,MACf,KAGF,KAAK,mBAAoB,OAAOtC,GAAG,IAClC,IAAK,WAAY,KACjB,KAAK,UAAW,KAChB,KAAK,QAAS,KACd,KAAK,QAAS,KACd,KAAK,QAAS,KACd,KAAK,OAAQ,KACb,KAAK,SAAU,KACf,KAAK,SAAU,KACf,KAAK,SAAU,KACf,KAAK,SAAU,KACf,KAAK,YAAa,KAClB,KAAK,cAAe,KACpB,KAAK,WAAY,KACjB,KAAK,iBAAkB,KACvB,KAAK,kBAAmB,KACxB,KAAK,mBAAoB,KACzB,KAAK,mBAAoB,KACzB,KAAK,uBAAwB,KAC7B,KAAK,qBAAsB,KAC3B,KAAK,iBAAkB,KACvB,KAAK,YAAa,KAClB,KAAK,YAAa,KAClB,KAAK,aAAc,KACnB,KAAK,gBAAiB,KACtB,KAAK,mBAAoB,KACzB,KAAK,oBAAqB,KAC1B,KAAK,sBAAuB,KAC5B,KAAK,YAAa,KAClB,KAAK,iBAAkB,KACvB,KAAK,iBAAkB,KACvB,KAAK,iBAAkB,KACvB,KAAK,gBAAiB,KACtB,KAAK,WAAY,KACjB,KAAK,wBAAyB,KAC9B,KAAK,kBAAmB,KACxB,KAAK,gBAAiB,KACtB,KAAK,cAAe,KACpB,KAAK,gBAAiB,KACtB,KAAK,WAAY,KACjB,KAAK,YAAa,KAClB,KAAK,iBAAkB,KACvB,KAAK,OAAQ,KACb,KAAK,cAAe,KACpB,KAAK,YAAa,KAClB,KAAK,YAAa,KAClB,KAAK,cAAe,KACpB,KAAK,kBAAmB,KACxB,KAAK,kBAAmB,KACxB,KAAK,kBAAmB,KACxB,KAAK,kBAAmB,KACxB,KAAK,wBAAyB,KAC9B,KAAK,mBAAoB,KACzB,KAAK,gBAAiB,KACtB,KAAK,gBAAiB,KACtB,KAAK,2BAA4B,KACjC,KAAK,gBAAiB,KACtB,KAAK,uBAAwB,KAC7B,KAAK,qBAAsB,KAC3B,KAAK,8BAA+B,KACpC,KAAK,gBAAiB,KACtB,KAAK,oBAAqB,KAC1B,KAAK,mBAAoB,KACzB,KAAK,iBAAkB,KACvB,KAAK,sBAAuB,KAC5B,KAAK,gBAAiB,KACtB,KAAK,sBAAuB,KAC5B,KAAK,aAAc,KACnB,KAAK,gBAAiB,KACtB,KAAK,YAAa,KAClB,KAAK,kBAAmB,KACxB,SAASsC,KAAO,MACf,KAGF,KAAK,aAAc,IAAK,aAAc,OAAOtC,GAAG,IAC/C,IAAK,uBAAwB,KAC7B,KAAK,4BAA6B,KAClC,KAAK,mBAAoB,KACzB,KAAK,WAAY,KACjB,KAAK,aAAc,KACnB,KAAK,cAAe,KACpB,KAAK,aAAc,KACnB,KAAK,yBAA0B,KAC/B,KAAK,mBAAoB,KACzB,KAAK,WAAY,KACjB,KAAK,YAAa,KAClB,KAAK,WAAY,KACjB,KAAK,YAAa,KAClB,KAAK,aAAc,KACnB,KAAK,cAAe,KACpB,KAAK,cAAe,KACpB,KAAK,aAAc,KACnB,KAAK,mBAAoB,KACzB,KAAK,OAAQ,KACb,KAAK,WAAY,KACjB,KAAK,WAAY,KACjB,KAAK,aAAc,KACnB,KAAK,yBAA0B,KAC/B,KAAK,WAAY,KACjB,KAAK,YAAa,KAClB,KAAK,gBAAiB,KACtB,KAAK,aAAc,KACnB,KAAK,sBAAuB,KAC5B,KAAK,SAAU,KACf,KAAK,WAAY,KACjB,KAAK,YAAa,KAClB,KAAK,gBAAiB,KACtB,KAAK,WAAY,KACjB,KAAK,oBAAqB,KAC1B,KAAK,iBAAkB,KACvB,KAAK,cAAe,KACpB,KAAK,iBAAkB,KACvB,KAAK,cAAe,KACpB,KAAK,cAAe,KACpB,KAAK,kBAAmB,KACxB,KAAK,qBAAsB,KAC3B,KAAK,oBAAqB,KAC1B,KAAK,uBAAwB,KAC7B,KAAK,wBAAyB,KAC9B,KAAK,cAAe,KACpB,SAASsC,KAAO,MACf,KAGF,KAAK,aAAc,OAAOtC,GAAG,IAC5B,IAAK,YAAa,KAClB,KAAK,WAAY,KACjB,KAAK,YAAa,KAClB,KAAK,WAAY,KACjB,KAAK,WAAY,KACjB,KAAK,SAAU,KACf,KAAK,SAAU,KACf,SAASsC,KAAO,MACf,KAGF,KAAK,aAAc,OAAOtC,GAAG,IAC5B,IAAK,mBAAoB,KACzB,KAAK,sBAAuB,KAC5B,KAAK,gBAAiB,KACtB,KAAK,eAAgB,KACrB,SAASsC,KAAO,MACf,KAGF,KAAK,aAAc,OAAOtC,GAAG,IAC5B,IAAK,KAAM,KACX,KAAK,iBAAkB,KACvB,KAAK,oBAAqB,KAC1B,KAAK,cAAe,KACpB,KAAK,YAAa,KAClB,KAAK,qBAAsB,KAC3B,KAAK,iBAAkB,KACvB,KAAK,YAAa,KAClB,KAAK,aAAc,KACnB,KAAK,aAAc,KACnB,KAAK,cAAe,KACpB,KAAK,cAAe,KACpB,KAAK,WAAY,KACjB,KAAK,SAAU,KACf,KAAK,aAAc,KACnB,KAAK,iBAAkB,KACvB,KAAK,qBAAsB,KAC3B,KAAK,qBAAsB,KAC3B,KAAK,SAAU,KACf,KAAK,SAAU,KACf,KAAK,UAAW,KAChB,KAAK,oBAAqB,KAC1B,KAAK,uBAAwB,KAC7B,KAAK,iBAAkB,KACvB,KAAK,YAAa,KAClB,KAAK,aAAc,KACnB,KAAK,MAAO,KACZ,KAAK,QAAS,KACd,KAAK,iBAAkB,KACvB,KAAK,kBAAmB,KACxB,KAAK,qBAAsB,KAC3B,SAASsC,KAAO,MACf,KAGF,KAAK,UAEL,IAAK,wBAEL,IAAK,iBAAkB,OAAOtC,GAAG,IAChC,IAAK,QAAS,KACd,KAAK,OAAQ,KACb,KAAK,MAAO,KACZ,KAAK,MAAO,KACZ,KAAK,OAAQ,KACb,KAAK,aAAc,KACnB,KAAK,QAAS,KACd,KAAK,gBAAiB,KACtB,KAAK,QAAS,KACd,KAAK,aAAc,KACnB,KAAK,eAAgB,KACrB,KAAK,aAAc,KACnB,KAAK,gBAAiB,KACtB,KAAK,eAAgB,KACrB,KAAK,aAAc,KACnB,KAAK,YAAa,KAClB,KAAK,YAAa,KAClB,KAAK,YAAa,KAClB,KAAK,YAAa,KAClB,KAAK,WAAY,KACjB,KAAK,SAAU,KACf,KAAK,SAAU,KACf,KAAK,SAAU,KACf,SAASsC,KAAO,MACf,KAGF,KAAK,UAAW,IAAK,SAAU,IAAK,OAAQ,OAAOtC,GAAG,IACrD,IAAK,MAAO,KACZ,KAAK,QAAS,KACd,KAAK,QAAS,KACd,KAAK,QAAS,KACd,KAAK,QAAS,KACd,KAAK,UAAW,KAChB,KAAK,WAAY,KACjB,KAAK,YAAa,KAClB,KAAK,cAAe,KACpB,KAAK,gBAAiB,KAEtB,KAAK,SACL,IAAK,UACL,IAAK,cACL,IAAK,WACL,IAAK,MACL,IAAK,YACL,IAAK,UAAW,KAEhB,KAAK,MAAO,KACZ,SAASsC,KAAO,MACf,KAGF,KAAK,YAAa,KAElB,SAASA,KAAO,KAAO,OAExB,GAAGA,KAAM,KAET,KAAI3yE,MAAMA,MAAM5W,OAAO,GAAG,GAAI,KAAM,qBAAuBinF,GAAG,GAAK,IAAMrwE,MAAMmH,KAAK,IACpF,IAAGnH,MAAMA,MAAM5W,OAAO,GAAG,KAAK,2BAA4B,CACzD,GAAGinF,GAAG,GAAGvmF,QAAQ,KAAO,KAAM,UACzB,IAAGumF,GAAG,KAAK,IAAKF,kBAAkBC,UAAWC,GAAIvnF,GAAIkN,IAAI2F,MAAMs2E,KAAM5B,GAAG/+D,YACxE,CAAExoB,GAAKunF,EAAI4B,MAAO5B,GAAG/+D,MAAQ++D,GAAG,GAAGjnF,OACxC,MAED,GAAGmE,KAAK2wB,IAAK,KAAM,qBAAuBmyD,GAAG,GAAK,IAAMrwE,MAAMmH,KAAK,KAErE,GAAI5U,OACJ,KAAIhF,KAAKqlF,aAAerlF,KAAKslF,UAAWtgF,IAAIk3E,OAAS1sD,MACrDxqB,KAAI4vB,WAAawvD,UACjBp/E,KAAIxG,IAAMA,IAAIyN,WACdjH,KAAI4uB,MAAQA,KACZ5uB,KAAI69E,UAAYA,SAChB,OAAO79E,KAGR,QAASugF,YAAW9pF,KAAMuE,MACzBwlF,cAAcxlF,KAAKA,SACnB,QAAOA,KAAK+F,MAAM,UACjB,IAAK,SAAU,MAAOo+E,gBAAe1nF,OAAOH,OAAOb,MAAOuE,KAC1D,KAAK,SAAU,IAAK,SAAU,IAAK,OAAQ,MAAOmkF,gBAAe1oF,KAAMuE,KACvE,KAAK,QAAS,MAAOmkF,gBAAe1oF,KAAKkB,IAAI4lF,MAAM3oE,KAAK,IAAK5Z,OAI/D,QAASylF,YAAW59B,GAAI7nD,OAGxB,QAAS0lF,eAAclxE,KACtB,GAAIzV,KACJ,IAAIrD,GAAI8Y,IAAIzB,OAGZ,IAAIlU,GAAI,GAAIsG,CACZA,GAAI+W,QAAQxgB,EAAGmD,EACfA,IAAK,EAAIqU,eAAexX,EAAEmD,EAC1BE,GAAE4mF,SAAWxgF,CAGbA,GAAI+N,eAAexX,EAAEmD,EAAIA,IAAI,CAC7B,QAAOsG,GACN,IAAK,GAAY,KACjB,KAAK,YAAY,IAAK,YAAYtG,GAAG,CAAG,MACxC,SACC,GAAGsG,EAAI,IAAO,KAAM,IAAIZ,OAAM,0BAA4BY,EAAEqQ,SAAS,IACrE3W,IAAKsG,EAGPA,EAAI+W,QAAQxgB,EAAGmD,EAAIA,IAAKsG,EAAEtJ,SAAW,EAAI,EAAI,EAAIsJ,EAAEtJ,MAAQkD,GAAE6mF,UAAYzgF,CAEzE,KAAIA,EAAI+N,eAAexX,EAAEmD,MAAQ,WAAY,MAAOE,EACpD,MAAM,gCAIP,QAAS8mF,OAAMn1E,EAAGvC,KAAMtS,OAAQmE,MAC/B,GAAInB,GAAIhD,MACR,IAAIsC,QACJ,IAAIa,GAAImP,KAAKC,MAAMD,KAAKtP,EAAEsP,KAAKtP,EAAEA,EACjC,IAAGmB,MAAQA,KAAK4+B,KAAO5+B,KAAK4+B,IAAI2iB,eAAgB,OAAO7wC,EAAEyW,GACzD,IAAK,MAAO,IAAK,WAAY,IAAK,WAAY,IAAK,eAAgB,IAAK,UAAW,IAAK,UAAW,IAAK,UAAW,KACnH,SACC,GAAGnoB,EAAEnD,SAAW,EAAG,KACnBmE,MAAK4+B,IAAI2iB,eAAeviD,GAEzBb,KAAK2S,KAAK9R,EACVmP,MAAKtP,GAAKA,CACV,IAAI4gB,MAAQqmE,cAAcnqE,eAAexN,KAAKA,KAAKtP,GACnD,OAAM4gB,MAAQ,MAAQA,KAAK0H,IAAM,WAAY,CAC5CtoB,EAAI8c,eAAexN,KAAKA,KAAKtP,EAAE,EAC/BV,MAAK2S,KAAK3C,KAAKC,MAAMD,KAAKtP,EAAE,EAAEsP,KAAKtP,EAAE,EAAEA,GACvCsP,MAAKtP,GAAK,EAAEA,CACZ4gB,MAAQqmE,cAAcnqE,eAAexN,KAAMA,KAAKtP,IAEjD,GAAI6c,GAAIxd,QAAQC,KAChBkQ,WAAUqN,EAAG,EACb,IAAIqqE,IAAK,CAAGrqE,GAAEoC,OACd,KAAI,GAAIvX,GAAI,EAAGA,EAAIpI,KAAKtC,SAAU0K,EAAG,CAAEmV,EAAEoC,KAAKhN,KAAKi1E,GAAKA,KAAM5nF,KAAKoI,GAAG1K,OACtE,MAAO6U,GAAElF,EAAEkQ,EAAGA,EAAE7f,OAAQmE,MAGzB,QAASgmF,gBAAe7lE,EAAGngB,KAAMuF,UAChC,IAAI4a,EAAE8lE,GAAI,MACV,KACC,GAAIrwD,OAAQzV,EAAE8lE,GAAGtkD,MAAM,CACvB,IAAGxhB,EAAElhB,IAAM,IAAK;AAAEkhB,EAAEzc,EAAIyc,EAAEzc,GAAKyf,KAAKhD,EAAEphB,OACjC,IAAG62B,QAAU,EAAG,CACpB,GAAGzV,EAAElhB,IAAM,IAAK,CACf,IAAIkhB,EAAEphB,EAAE,KAAOohB,EAAEphB,EAAGohB,EAAEzc,EAAIlF,IAAIyE,aAAakd,EAAEphB,OACxCohB,GAAEzc,EAAIlF,IAAI6F,aAAa8b,EAAEphB,OAE1BohB,GAAEzc,EAAIlF,IAAIgG,SAAS2b,EAAEphB,OAEtBohB,GAAEzc,EAAIlF,IAAIoN,OAAOgqB,MAAMzV,EAAEphB,GAAIwG,SAASA,UAAU,OACrD,IAAGvF,KAAK83E,OAAQ33D,EAAExJ,EAAInY,IAAIsN,OAAO8pB,OAChC,MAAM5f,GAAK,GAAGhW,KAAK2wB,IAAK,KAAM3a,IAGjC,QAASkwE,WAAUjgF,IAAKu2B,KAAMv9B,GAC7B,OAAQF,EAAEkH,IAAKu2B,KAAKA,KAAMv9B,EAAEA,GAI7B,QAASknF,gBAAeh4E,KAAMmF,SAC7B,GAAIu0C,KAAM7nD,QACV,IAAIk8E,UACJ,IAAIl3E,OACJ,IAAIohF,aACJ,IAAIC,aAAc,KAClB,IAAI3lE,SACJ,IAAI4lE,cAAe,IACnB,IAAIv1D,OACJ,IAAIw1D,WAAY,EAChB,IAAIC,YACJ,IAAIC,UAAUC,UAAWh+E,GAAIi+E,KAAMjN,IAAKkN,KAAMC,IAC9C,IAAIC,mBACJ,IAAIC,kBACJ,IAAIC,SACJ,IAAIC,QACJ,IAAIC,YAAa,IACjB,IAAIC,OACJ,IAAIC,WACJ,IAAIC,SAAU,QAASC,QAAOC,KAC7B,GAAGA,IAAM,EAAG,MAAOh9D,QAAOg9D,IAC1B,IAAGA,IAAM,GAAI,MAAOH,SAAQG,IAAI,IAAMh9D,OAAOg9D,IAC7C,OAAOh9D,QAAOg9D,KAEf,IAAIC,oBAAqB,QAASC,KAAIpnE,KAAMqnE,MAC3C,GAAIC,KAAMD,KAAKzB,GAAGxqF,IAClB,KAAIksF,MAAQA,IAAItlD,YAAa,MAC7BqlD,MAAK1pF,IACL0pF,MAAK1pF,EAAEqkC,YAAcslD,IAAItlD,WACzB,IAAIpjC,EACJ,IAAIA,EAAI2iD,QAAQylC,QAAQM,IAAIrlD,UAAY,CAAEolD,KAAK1pF,EAAE6mD,SAAWxI,IAAIp9C,GAChE,GAAIA,EAAI2iD,QAAQylC,QAAQM,IAAIplD,UAAY,CAAEmlD,KAAK1pF,EAAEumD,SAAWlI,IAAIp9C,IAEjE,IAAI2oF,SAAU,QAASA,SAAQvnE,KAAMqnE,KAAMp0E,SAC1C,IAAI4zE,WAAY,MAChB,IAAG5zE,QAAQolE,YAAcgP,KAAKzB,IAAMyB,KAAKzB,GAAGxqF,KAAM+rF,mBAAmBnnE,KAAMqnE,KAC3EjB,UAAWpmE,IACXqmE,WAAY/6B,YAAYtrC,KACxB,IAAGK,MAAM1iB,EAAG,CACX,GAAGqiB,KAAK1Y,EAAI+Y,MAAM1iB,EAAE2J,EAAG+Y,MAAM1iB,EAAE2J,EAAI0Y,KAAK1Y,CACxC,IAAG0Y,KAAKzhB,EAAI8hB,MAAM1iB,EAAEY,EAAG8hB,MAAM1iB,EAAEY,EAAIyhB,KAAKzhB,EAEzC,GAAG8hB,MAAM1K,EAAG,CACX,GAAGqK,KAAK1Y,EAAI,EAAI+Y,MAAM1K,EAAErO,EAAG+Y,MAAM1K,EAAErO,EAAI0Y,KAAK1Y,EAAI,CAChD,IAAG0Y,KAAKzhB,EAAI,EAAI8hB,MAAM1K,EAAEpX,EAAG8hB,MAAM1K,EAAEpX,EAAIyhB,KAAKzhB,EAAI,EAEjD,GAAG0U,QAAQ65C,WAAas5B,SAAS9+E,GAAK2L,QAAQ65C,UAAW+5B,WAAa,UACjEliF,KAAI0hF,WAAagB,KAEvB,IAAI1nF,OACH4+B,IAAK,MACLyE,MAAO,EACPiB,UACAszB,QAASkvB,gBACT/uB,OAAQgvB,eACRc,WACAC,SAAU,GACV9tD,KAAM,EACN+tD,SAAU,EACVC,UAAW,EACXC,IAAK,MAEN,IAAG30E,QAAQitC,SAAUvgD,KAAKugD,SAAWjtC,QAAQitC,QAC7C,IAAIi4B,cACJ,IAAI0P,WACJ,IAAIlxB,cACJ,IAAImxB,KAAM,EAAGC,KAAO,EAAGC,MAAQ,CAC/BrxB,UAASpiC,WAAa50B,KAAKskC,MAC3B0yB,UAASY,QAAU53D,KAAK43D,OACxBZ,UAASe,OAAS/3D,KAAK+3D,MACvB,IAAIuwB,SAAU,EACd,IAAIC,YAAa,CAGjBvoF,MAAK+nF,SAAW,IAChBzsF,QAAO,KAEP,OAAM6S,KAAKtP,EAAIsP,KAAKtS,OAAS,EAAG,CAC/B,GAAImC,GAAImQ,KAAKtP,CACb,IAAI2pF,YAAar6E,KAAKQ,WAAW,EACjC,IAAG65E,aAAe,GAAKF,UAAY,MAAO,KAC1C,IAAIzsF,QAAUsS,KAAKtP,IAAMsP,KAAKtS,OAAS,EAAIsS,KAAKQ,WAAW,GAAK7O,CAChE,IAAI4Q,GAAIo1E,cAAc0C,WACtB,IAAG93E,GAAKA,EAAElF,EAAG,CACZ,GAAG8H,QAAQ+xE,WAAY,CACtB,GAAGiD,UAAY,eAAiB53E,EAAEyW,IAAM,cAAe,MAExDmhE,QAAU53E,EAAEyW,CACZ,IAAGzW,EAAE/I,IAAM,GAAK+I,EAAE/I,GAAK,GAAI,CAC1B,GAAI+0B,IAAKvuB,KAAKQ,WAAW,EAAI9S,SAAU,CACvC,KAAImE,KAAK4+B,KAAOlC,KAAO8rD,WAAY,KAAM,aACzC,IAAG93E,EAAE/I,GAAK,GAAG,CAAEwG,KAAKtP,GAAK,EAAIhD,SAAU,IAGxC,GAAIoK,IACJ,IAAGyK,EAAEyW,IAAM,MAAOlhB,IAAMyK,EAAElF,EAAE2C,KAAMtS,OAAQmE,UACrCiG,KAAM4/E,MAAMn1E,EAAGvC,KAAMtS,OAAQmE,KAClC,IAAI8iF,IAAKpyE,EAAEyW,CAEX,IAAGnnB,KAAKg6B,OAAS,GAAKh6B,KAAKg6B,OAAS,EAAG,OAAO8oD,IAC7C,IAAK,MAAOA,GAAK,OAAS,OAG3B,OAAOA,IAEN,IAAK,WAAYj7B,GAAG7nD,KAAKyoF,SAAWxiF,GAAK,MACzC,KAAK,eAAgB4hD,GAAG7nD,KAAK0oF,aAAe,IAAM,MAClD,KAAK,WACJ,IAAI1oF,KAAK4+B,IAAKzwB,KAAKtP,EAAI,CACvBmB,MAAK4+B,IAAM34B,GACX,IAAGjG,KAAK2wB,IAAKC,QAAQC,MAAM5qB,IAC3B,KAAIqN,QAAQitC,SAAU,KAAM,IAAIh8C,OAAM,6BACtC,IAAG0B,IAAIwsB,OAAS,EAAG,KAAM,IAAIluB,OAAM,gCACnC,KAAI0B,IAAIq7C,MAAO,KAAM,IAAI/8C,OAAM,wBAC/B,MACD,KAAK,cAAevE,KAAK8nF,SAAW7hF,GAAK,MACzC,KAAK,cAAe,KACpB,KAAK,WAEJ,GAAGA,MAAQ,MAAQA,IAAM,SACpB,IAAGA,MAAQ,MAAQA,IAAM,IAC9BjG,MAAK+nF,SAAW9hF,GAChB3K,QAAO2K,IACP,MACD,KAAK,UAAWjG,KAAK6nF,QAAU5hF,GAAK,MACpC,KAAK,aAAcjG,KAAKgoF,UAAY/hF,GAAK,MACzC,KAAK,WAAY,KACjB,KAAK,aAAc4hD,GAAG7nD,KAAK2oF,WAAa1iF,GAAK,MAC7C,KAAK,WAAY,KACjB,KAAK,WAA6D,KAClE,KAAK,cAAe,CACnB,GAAGA,IAAI,IAAMA,IAAI,GAAI,KAAM,wBAA0BA,IACpD,KACF,KAAK,YAAa4hD,GAAG7nD,KAAK4oF,UAAY3iF,GAAK,MAC3C,KAAK,YAAa4hD,GAAG7nD,KAAK6oF,UAAY5iF,GAAK,MAC3C,KAAK,WAAY4hD,GAAG7nD,KAAK8oF,SAAW7iF,GAAK,MACzC,KAAK,WAAY4hD,GAAG7nD,KAAK+oF,SAAW9iF,GAAK,MACzC,KAAK,gBAAiB4hD,GAAG7nD,KAAKgpF,cAAgB/iF,GAAK,MACnD,KAAK,iBAAkB4hD,GAAG7nD,KAAKipF,eAAiBhjF,GAAK,MACrD,KAAK,cAAejG,KAAKkpF,YAAcjjF,GAAK,MAC5C,KAAK,WAAY,KACjB,KAAK,uBAAwB4hD,GAAG7nD,KAAKmpF,SAAWljF,GAAK,MACrD,KAAK,SAAU,KACf,KAAK,KAAMkhF,IAAIr2E,KAAK7K,IAAM,MAC1B,KAAK,SAAU,KACf,KAAK,UAAW,KAChB,KAAK,iBAAkB,KACvB,KAAK,QAAS,KAEd,KAAK,UAAW+wD,WAAWmxB,MAAQliF,IAAMmiF,MAAO,CAAG,MACnD,KAAK,aAAcpxB,SAASmxB,OAAOC,MAAQniF,GAAK,MAChD,KAAK,QAAS,KACd,KAAK,MAAO+wD,SAAS,KAAKqxB,OAASpiF,GAAK,MACxC,KAAK,cAAe+wD,SAASmxB,KAAOnxB,SAASmxB,KAAK/pF,OAAO6H,IAAMmiF,OAAQniF,IAAIpK,MAAQ,MAEnF,KAAK,UAAWmJ,IAAI,YAAciB,GAAK,MACvC,KAAK,WAAY,GAAGA,MAAQ,GAAKjG,KAAK2wB,IAAKC,QAAQC,MAAM,sBAAwB5qB,IAAM,MACvF,KAAK,WAAY,IAAK,eAAgB,KAEtC,KAAK,cAAe,CACnBmgF,UAAUngF,IAAIqY,KAAOrY,GACrBjG,MAAKskC,OAAOxzB,KAAK7K,IAAIiJ,MACpB,KACF,KAAK,MAAO,CACX,KAAKq5E,WAAY,KACjB,IAAG7nE,MAAM1K,EAAG,CACXhR,IAAI,UAAY0b,KAChB,IAAGA,MAAM1K,EAAErO,EAAI,GAAK+Y,MAAM1K,EAAEpX,EAAI,EAAG,CAClC8hB,MAAM1K,EAAErO,GAAK+Y,OAAM1K,EAAEpX,GACrBoG,KAAI,QAAU4nD,aAAalsC,MAC3BA,OAAM1K,EAAErO,GAAK+Y,OAAM1K,EAAEpX,IAEtB,GAAG45E,WAAW38E,OAAS,EAAGmJ,IAAI,WAAawzE,UAC3C,IAAG0P,QAAQrsF,OAAS,EAAGmJ,IAAI,YAAckjF,QAE1C,GAAG3B,YAAc,GAAIC,SAAWxhF,QAAUk3E,QAAOqK,WAAavhF,GAC9DA,QACC,KACF,KAAK,MAAO,CACX,GAAGhF,KAAKg6B,OAAS,OACZ,IAAG/zB,IAAIw4B,UAAY,KAAQz+B,KAAKg6B,KAAO,MACvC,IAAG/zB,IAAIw4B,UAAY,EAAQz+B,KAAKg6B,KAAO,MACvC,IAAG/zB,IAAIw4B,UAAY,EAAQz+B,KAAKg6B,KAAO,CAC5C,IAAGuuD,aAAc,KACjBrB,YAAa,IACbliF,OACA,IAAGhF,KAAKg6B,OAAS,EAAG,CACnB,GAAGusD,YAAc,GAAIA,UAAY,QACjC7lE,QAAS1iB,GAAG2J,EAAE,EAAE/I,EAAE,GAAGoX,GAAGrO,EAAE,EAAE/I,EAAE,QAE1B2nF,YAAaH,UAAUpoF,KAAOkR,KAAK,KAAKA,IAC7CspE,cACA0P,YACC,KACF,KAAK,SAAU,IAAK,WAAY,CAC/BlB,UAAYxqD,KAAMv2B,IAAIu2B,KAAMypD,GAAIkB,IAAIlhF,IAAIu2B,MAAOz9B,EAAEkH,IAAIA,IAAKhH,EAAE,IAC5D,IAAG+nF,SAASf,GAAID,eAAegB,SAAU1zE,QAASu0C,GAAG7nD,KAAKyoF,SAC1Db,UAAShpF,EAAEqH,IAAIrH,EAAG+I,EAAE1B,IAAI0B,GAAIq/E,SAAU1zE,SACrC,KACF,KAAK,UAAW,CACf0zE,UAAYxqD,KAAMv2B,IAAIu2B,KAAMypD,GAAIkB,IAAIlhF,IAAIu2B,MAAOz9B,EAAEkH,IAAIA,IAAKhH,EAAEgH,IAAIhH,EAChE,IAAG+nF,SAASf,GAAID,eAAegB,SAAU1zE,QAASu0C,GAAG7nD,KAAKyoF,SAC1Db,UAAShpF,EAAEqH,IAAIrH,EAAG+I,EAAE1B,IAAI0B,GAAIq/E,SAAU1zE,SACrC,KACF,KAAK,KAAM,CACV0zE,UAAYxqD,KAAMv2B,IAAIu2B,KAAMypD,GAAIkB,IAAIlhF,IAAIu2B,MAAOz9B,EAAEkH,IAAI+7B,MAAO/iC,EAAE,IAC9D,IAAG+nF,SAASf,GAAID,eAAegB,SAAU1zE,QAASu0C,GAAG7nD,KAAKyoF,SAC1Db,UAAShpF,EAAEqH,IAAIrH,EAAG+I,EAAE1B,IAAI0B,GAAIq/E,SAAU1zE,SACrC,KACF,KAAK,QAAS,CACb,IAAI,GAAI/M,GAAIN,IAAIrH,EAAG2H,GAAKN,IAAI0K,IAAKpK,EAAG,CACnC,GAAIi2B,MAAOv2B,IAAI87B,MAAMx7B,EAAEN,IAAIrH,GAAG,EAC9BooF,WAAWxqD,KAAKA,KAAMypD,GAAGkB,IAAI3qD,MAAOz9B,EAAEkH,IAAI87B,MAAMx7B,EAAEN,IAAIrH,GAAG,GAAIK,EAAE,IAC/D,IAAG+nF,SAASf,GAAID,eAAegB,SAAU1zE,QAASu0C,GAAG7nD,KAAKyoF,SAC1Db,UAAShpF,EAAE2H,EAAGoB,EAAE1B,IAAI0B,GAAIq/E,SAAU1zE,UAElC,KACF,KAAK,UAAW,CACf,OAAOrN,IAAIA,KACV,IAAK,SAAUqgF,aAAergF,GAAK,MACnC,KAAK,gBAAiB,KAAM,2BAC5B,SACC+gF,UAAYjoF,EAAEkH,IAAIA,IAAKu2B,KAAKv2B,IAAIoa,KAAKmc,KAAMv9B,EAAEgH,IAAIG,GACjD4gF,UAASf,GAAKkB,IAAIH,SAASxqD,KAC3B,IAAGlpB,QAAQooE,YAAasL,SAASx7E,EAAI,IAAIurD,kBAAkB9wD,IAAIuwD,QAAQ91C,MAAMza,IAAIoa,KAAK22C,SAAUh3D,KAChG,IAAGgnF,SAASf,GAAID,eAAegB,SAAU1zE,QAASu0C,GAAG7nD,KAAKyoF,SAC1Db,SAAQ3hF,IAAIoa,KAAM2mE,SAAU1zE,QAC5BgzE,cAAergF,KAEhB,KACF,KAAK,SAAU,CACd,GAAGqgF,aAAc,CAChBA,aAAargF,IAAMA,GACnB+gF,WAAYjoF,EAAEunF,aAAargF,IAAKu2B,KAAK8pD,aAAajmE,KAAKmc,KAAMv9B,EAAE,IAC/D+nF,UAASf,GAAKkB,IAAIH,SAASxqD,KAC3B,IAAGlpB,QAAQooE,YAAasL,SAASx7E,EAAI,IAAIurD,kBAAkBuvB,aAAa9vB,QAAS91C,MAAO4lE,aAAajmE,KAAM22C,SAAUh3D,KACrH,IAAGgnF,SAASf,GAAID,eAAegB,SAAU1zE,QAASu0C,GAAG7nD,KAAKyoF,SAC1Db,SAAQtB,aAAajmE,KAAM2mE,SAAU1zE,QACrCgzE,cAAe,MAEf,KACF,KAAK,QAAS,CACbS,eAAej2E,KAAK7K,KACnB,KACF,KAAK,UAAW,CACf,IAAIihF,WAAY,KAGhBJ,iBAAgBn7B,YAAY26B,aAAajmE,OAAQpa,IAAI,GACpD,KACF,KAAK,WAEJ+gF,SAASd,UAAUn1D,IAAI9qB,IAAIu7B,MAAMviC,EAAGgH,IAAIu2B,KAAM,IAC9CwqD,UAASf,GAAKkB,IAAIH,SAASxqD,KAC3B,IAAGwqD,SAASf,GAAID,eAAegB,SAAU1zE,QAASu0C,GAAG7nD,KAAKyoF,SAC1Db,UAAShpF,EAAEqH,IAAIrH,EAAG+I,EAAE1B,IAAI0B,GAAIq/E,SAAU1zE,QACtC,MACD,KAAK,QAAS,IAAK,WAElB0zE,SAASd,UAAUjgF,IAAIA,IAAKA,IAAIu2B,KAAM,IACtCwqD,UAASf,GAAKkB,IAAIH,SAASxqD,KAC3B,IAAGwqD,SAASf,GAAID,eAAegB,SAAU1zE,QAASu0C,GAAG7nD,KAAKyoF,SAC1Db,UAAShpF,EAAEqH,IAAIrH,EAAG+I,EAAE1B,IAAI0B,GAAIq/E,SAAU1zE,QACtC,MACD,KAAK,aAAc,CAClB,GAAGi1E,aAAe,EAAG7nE,MAAQza,IAC5B,KACF,KAAK,MAAO,CACX8qB,IAAM9qB,IACL,KACF,KAAK,SAAU,CACdzH,IAAIuN,KAAK9F,IAAI,GAAIA,IAAI,IACpB,KAEF,KAAK,aAAcuyE,WAAaA,WAAWp6E,OAAO6H,IAAM,MAExD,KAAK,MAAOiiF,QAAQjiF,IAAIy/B,IAAI,IAAM1lC,KAAK4lC,QAAU3/B,GAAK,MACtD,KAAK,MAAOjG,KAAK4lC,QAAQwjD,IAAMnjF,GAAK,MAEpC,KAAK,QAAS,CACb,IAAI4gF,KAAO5gF,IAAI,GAAGjI,EAAE2J,EAAGk/E,MAAQ5gF,IAAI,GAAG+P,EAAErO,IAAKk/E,KAC5C,IAAID,KAAO3gF,IAAI,GAAGjI,EAAEY,EAAGgoF,MAAQ3gF,IAAI,GAAG+P,EAAEpX,IAAKgoF,KAC5C,GAAG5hF,IAAI2mD,aAAa/sD,EAAEgoF,KAAKj/E,EAAEk/E,QAC5B7hF,IAAI2mD,aAAa/sD,EAAEgoF,KAAKj/E,EAAEk/E,QAAQhoF,EAAIoH,IAAI,GAC5C,KACF,KAAK,eAAgB,CACpB,IAAI4gF,KAAO5gF,IAAI,GAAGjI,EAAE2J,EAAGk/E,MAAQ5gF,IAAI,GAAG+P,EAAErO,IAAKk/E,KAC5C,IAAID,KAAO3gF,IAAI,GAAGjI,EAAEY,EAAGgoF,MAAQ3gF,IAAI,GAAG+P,EAAEpX,IAAKgoF,KAC5C,GAAG5hF,IAAI2mD,aAAa/sD,EAAEgoF,KAAKj/E,EAAEk/E,QAC5B7hF,IAAI2mD,aAAa/sD,EAAEgoF,KAAKj/E,EAAEk/E,QAAQhoF,EAAE2/E,QAAUv4E,IAAI,GACpD,KAGF,KAAK,OAAQ,CACZ,GAAGjG,KAAKg6B,MAAQ,GAAKh6B,KAAKg6B,MAAQ,EAAG,KACrCtxB,IAAK1D,IAAI2mD,YAAY1lD,IAAI,IACzB,IAAIojF,SAAUnB,QAAQjiF,IAAI,GAC1B,KAAIyC,GAAI,KACR,KAAIA,GAAG9J,EAAG8J,GAAG9J,IACb+nF,OAAQ/pE,EAAE3W,IAAI,GAAGhH,EAAEoqF,QAAQD,IAAInqF,EAC/ByJ,IAAG9J,EAAEkS,KAAK61E,MACT,KAEF,SAAS,OAAOj2E,EAAEyW,GAClB,IAAK,aAAc,KACnB,KAAK,QAASkkC,aAAa87B,IAAIlhF,IAAIu2B,MAAOv2B,IAAImlD,IAAM,MAEpD,KAAK,UAAW,KAChB,KAAK,SAAU,KACf,KAAK,SAAU,KACf,KAAK,UAAW,KAChB,KAAK,UAAW,KAChB,KAAK,MAAO,KACZ,KAAK,QAAS,KACd,KAAK,cAAe,KACpB,KAAK,MAAO,KACZ,KAAK,WAAY,KACjB,KAAK,UAAW,KAChB,KAAK,MAAO,KACZ,KAAK,SAAU,KACf,KAAK,WAAY,KACjB,KAAK,UAAW,KAChB,KAAK,SAAU,KACf,KAAK,OAAQ,KACb,KAAK,OAAQ,KACb,KAAK,SAAU,KACf,KAAK,QAAS,KACd,KAAK,OAAQ,KACb,KAAK,OAAQ,KACb,KAAK,OAAQ,KACb,KAAK,WAAY,KACjB,KAAK,YAAa,KAClB,KAAK,OAAQ,KACb,KAAK,UAAW,IAAK,YAAa,KAClC,KAAK,YAAa,IAAK,YAAa,IAAK,SAAU,KACnD,KAAK,QAAS,KACd,KAAK,UAAW67B,QAAUhhF,GAAK,MAC/B,KAAK,WAAY,KACjB,KAAK,mBAAoB,IAAK,SAAU,KACxC,KAAK,MAAO,IAAK,OAAQ,IAAK,WAAY,KAC1C,KAAK,OAAQ,KACb,KAAK,QAAS,KACd,KAAK,QAAS,KACd,KAAK,WAAY,KACjB,KAAK,UAAWmhF,QAAUnhF,GAAK,MAC/B,KAAK,QAAS,KAEd,KAAK,kBAAmB,KACxB,KAAK,aAAc,KAGnB,KAAK,YAAa,KAGlB,KAAK,QAAS,KACd,KAAK,cAAe,KACpB,KAAK,aAAc,KACnB,KAAK,oBAAqB,KAG1B,KAAK,aAAc,KACnB,KAAK,OAAQ,KACb,KAAK,UAAW,KAChB,KAAK,SAAU,KACf,KAAK,UAAW,KAChB,KAAK,WAAY,KACjB,KAAK,OAAQ,KACb,KAAK,WAAY,KACjB,KAAK,WAAY,KACjB,KAAK,SAAU,KACf,KAAK,SAAU,KACf,KAAK,QAAS,KACd,KAAK,QAAS,KAGd,KAAK,UAAW,KAGhB,KAAK,OAAQ,KAGb,KAAK,YAAa,KAGlB,KAAK,cAAe,KACpB,KAAK,YAAa,KAClB,KAAK,YAAa,KAElB,KAAK,MAAO,KACZ,KAAK,MAAO,KAEZ,KAAK,MAAO,EAEV,KACF,KAAK,WAAY,EAEf,KACF,KAAK,mBAAoB,EAEvB,KAGF,KAAK,aAAc,EAEjB,KACF,KAAK,SAAU,EAEb,KACF,KAAK,WAAY,EAEf,KACF,KAAK,cAAe,EAElB,KAEF,KAAK,OAAQ,KACb,KAAK,eAAgB,KAErB,KAAK,gBAAiB,KAGtB,KAAK,MAAO,IAAK,OAAQ,IAAK,SAAU,IAAK,aAAc,IAAK,aAAc,KAG9E,KAAK,KAAM,IAAK,OAAQ,KAGxB,KAAK,OAAQ,IAAK,SAAU,IAAK,aAAc,KAG/C,KAAK,QAAS,KACd,KAAK,eAAgB,KACrB,KAAK,aAAc,KAGnB,KAAK,aAAc,KACnB,KAAK,UAAW,IAAK,KAAM,IAAK,OAAQ,IAAK,OAAQ,KAGrD,KAAK,aAAc,KACnB,KAAK,QAAS,KACd,KAAK,eAAgB,IAAK,MAAO,IAAK,eAAgB,IAAK,MAAO,IAAK,sBAEvE,IAAK,UAAW,IAAK,UAAW,IAAK,UAAW,IAAK,UAAW,IAAK,OACrE,IAAK,YAAa,IAAK,iBAAkB,IAAK,eAC9C,IAAK,OAAQ,KACb,SAAS,OAAOyK,EAAEyW,GAElB,IAAK,MACL,IAAK,QAAS,IAAK,MACnB,IAAK,aAAc,IAAK,WACxB,IAAK,QAAS,IAAK,OACnB,IAAK,OAAQ,IAAK,WAAY,IAAK,OAAQ,KAC3C,KAAK,WACL,IAAK,cAAe,IAAK,eAAgB,IAAK,UAAW,IAAK,UAAW,IAAK,WAAY,IAAK,mBAAoB,KACnH,KAAK,aAAc,IAAK,aACxB,IAAK,QAAS,IAAK,UAAW,IAAK,kBAAmB,IAAK,cAAe,IAAK,eAAgB,KAC/F,KAAK,WAAY,IAAK,aAAc,KACpC,KAAK,aAAc,IAAK,YAAa,IAAK,cAAe,KACzD,KAAK,aAAc,IAAK,WAAY,IAAK,QAAS,KAClD,KAAK,cAAe,IAAK,SAAU,IAAK,SAAU,KAClD,KAAK,WAAY,KACjB,KAAK,cAAe,IAAK,OAAQ,IAAK,SAAU,KAChD,KAAK,qBAAsB,KAC3B,KAAK,SAAU,IAAK,kBAAmB,KACvC,KAAK,MAAO,IAAK,UAAW,KAC5B,KAAK,YAAa,IAAK,eAAgB,KACvC,KAAK,cAAe,IAAK,YAAa,KACtC,KAAK,SAAU,IAAK,aAAc,KAClC,KAAK,UAAW,KAChB,KAAK,gBAAiB,IAAK,QAAS,KAGpC,KAAK,OAAQ,IAAK,MAAO,KACzB,KAAK,OAAQ,KAGb,KAAK,aAAc,KACnB,KAAK,MAAO,KACZ,KAAK,aAAc,KAGnB,KAAK,YAAa,KAClB,KAAK,aAAc,KACnB,KAAK,iBAAkB,KACvB,KAAK,WAAY,KACjB,KAAK,kBAAmB,KAGxB,KAAK,QAAS,KACd,KAAK,SAAU,KACf,KAAK,WAAY,KAGjB,KAAK,MAAO,IAAK,OAAQ,IAAK,OAAQ,IAAK,WAAY,KACvD,KAAK,SAAU,KAGf,KAAK,aAAc,KACnB,KAAK,aAAc,IAAK,iBAAkB,KAC1C,KAAK,eAAgB,KACrB,KAAK,iBAAkB,KACvB,KAAK,OAAQ,KACb,KAAK,WAAY,KAGjB,KAAK,mBAAoB,KACzB,KAAK,aAAc,IAAK,kBAAmB,IAAK,sBAAuB,KACvE,KAAK,SAAU,KAEf,KAAK,SAAU,IAAK,aAGpB,IAAK,cAAe,IAAK,aAAc,IAAK,YAAa,IAAK,eAC9D,IAAK,eAAgB,IAAK,YAAa,IAAK,MAC5C,IAAK,uBAAwB,IAAK,qBAElC,IAAK,SAAU,IAAK,mBAAoB,IAAK,WAAY,KAGzD,KAAK,WAAY,IAAK,gBAAiB,KAGvC,KAAK,cAAe,IAAK,aAAc,KAGvC,KAAK,cAAe,KACpB,KAAK,UAAW,KAChB,KAAK,YAAa,IAAK,QAAS,IAAK,YAAa,IAAK,UAAW,IAAK,OAAQ,IAAK,YAAa,IAAK,eAAgB,KAEtH,SAAS,OAAOzW,EAAEyW,GAElB,IAAK,WAAY,IAAK,UAAW,IAAK,OAAQ,IAAK,aACnD,IAAK,MAAO,IAAK,SAAU,IAAK,eAAgB,IAAK,eACrD,IAAK,OAAQ,KACb,SAAS,GAAG7T,QAAQqd,IAAK,KAAM,uBAAyBjgB,EAAEyW,UAErDhZ,MAAKtP,GAAKhD,OAElB,GAAIytF,eAAgBtpF,KAAKg6B,OAAS,GAAK,UAAY1lB,OAAOD,KAAK+xE,WAAWmD,KAAK,SAAS3sE,EAAElB,GAAK,MAAO8tE,QAAO5sE,GAAK4sE,OAAO9tE,KAAO/e,IAAI,SAAST,GAAG,MAAOkqF,WAAUlqF,GAAGgT,MACpK,IAAIk1E,YAAakF,cAAcl7E,OAC/By5C,IAAGu+B,UAAUkD,aACbzhC,IAAGjzB,WAAW00D,aACd,KAAIh2E,QAAQ+xE,WAAYx9B,GAAGq0B,OAAOA,MAClCr0B,IAAG2+B,SAASA,QACZ3+B,IAAG2yB,QAAUzpD,GACb82B,IAAGrpD,IAAMA,IAAIyN,WACb,IAAGjM,KAAK4+B,IAAKipB,GAAG4hC,WAAazpF,KAAK4+B,GAClCipB,IAAG6hC,WACH,IAAGzC,UAAYlnF,UAAW8nD,GAAG6hC,SAASC,QAAU1C,OAChD,OAAOp/B,IAGR,QAAS+hC,cAAaC,IAAKv2E,SAC3B,IAAIA,QAASA,UACbkyE,eAAclyE,QACdjY,WACA,IAAIyuF,SAASC,QAAS9J,QACtB,IAAG4J,IAAI55E,KAAM,CACZ65E,QAAUD,IAAI55E,KAAK,WACnB85E,SAAUF,IAAI55E,KAAK,sBACnBgwE,UAAW4J,IAAI55E,KAAK,iBACd,CACN5B,UAAUw7E,IAAK,EACf5J,WAAYltE,QAAS82E,KAGtB,IAAI5J,SAAUA,SAAW4J,IAAI55E,KAAK,QAClC,IAAI+5E,UAAUC,SAAUC,SAExB,IAAGJ,QAASE,SAAWtE,cAAcoE,QACrC,IAAGx2E,QAAQgyE,YAAchyE,QAAQ+xE,WAAY6E,iBACxC,CACJ,GAAGjK,SAAUiK,UAAY/D,eAAelG,SAASltE,QAASO,UAAW2sE,SAAShwE,UACzE,MAAM,IAAI1L,OAAM,+BAGtB,GAAGslF,IAAI55E,KAAMk6E,YAAYN,IAEzB,IAAIO,SACJ,KAAI,GAAItqF,KAAK+pF,KAAIE,QAASK,MAAMtqF,GAAK+pF,IAAIE,QAAQjqF,EACjD,KAAIA,IAAK+pF,KAAIQ,WAAYD,MAAMtqF,GAAK+pF,IAAIQ,WAAWvqF,EACnDoqF,WAAUt2D,MAAQs2D,UAAUrH,UAAYuH,KACxC,IAAG92E,QAAQg3E,UAAWJ,UAAUL,IAAMA,GACtCK,WAAUF,SAAWA,QACrB,OAAOE,WAIP,QAASC,aAAYN,KAEpB,GAAIU,KAAMV,IAAI55E,KAAK,8BACnB,IAAGs6E,IAAK,IAAMV,IAAIQ,WAAa7xD,wBAAwB+xD,IAAKrjE,kBAAqB,MAAMlR,IAGvF,GAAIw0E,IAAKX,IAAI55E,KAAK,sBAClB,IAAGu6E,GAAI,IAAMX,IAAIE,QAAUvxD,wBAAwBgyD,GAAI9iE,cAAiB,MAAM1R,KAI/E,GAAIiJ,iBACH/e,GAAUinB,EAAE,YAAa3b,EAAE4xE,iBAC3Bj9E,GAAUgnB,EAAE,eAAgB3b,EAAEgyE,oBAC9Bp9E,GAAU+mB,EAAE,YAAa3b,EAAEuyE,iBAC3B19E,GAAU8mB,EAAE,eAAgB3b,EAAEoyE,oBAC9Bt9E,GAAU6mB,EAAE,cAAe3b,EAAEkyE,mBAC7Bt2D,GAAUD,EAAE,cAAe3b,EAAEsyE,mBAC7Bz2D,GAAUF,EAAE,YAAa3b,EAAEwyE,iBAC3B56D,GAAU+D,EAAE,cAAe3b,EAAEqyE,mBAC7Bv2D,GAAUH,EAAE,gBAAiB3b,EAAE4yE,qBAC/B79E,GAAU4mB,EAAE,aAAc3b,EAAE2yE,kBAC5B39E,IAAU2mB,EAAE,cAAe3b,EAAEyyE,mBAC7Bx9E,IAAU0mB,EAAE,eAAgB3b,EAAE0yE,oBAC9Bp9E,IAAUqmB,EAAE,gBAAiB3b,EAAEy1E,qBAC/BhgF,IAAUkmB,EAAE,aAAc3b,EAAEiW,eAC5BvgB,IAAUimB,EAAE,iBAAkB3b,EAAEgT,WAChCrd,IAAUgmB,EAAE,gBAAiB3b,EAAEgT,WAC/Bpd,IAAU+lB,EAAE,iBAAkB3b,EAAEgT,WAChC6E,IAAU8D,EAAE,eAAgB3b,EAAEgT,WAC9B05C,IAAU/wC,EAAE,gBAAiB3b,EAAEgT,WAC/B25C,IAAUhxC,EAAE,kBAAmB3b,EAAEgT,WACjC+I,IAAUJ,EAAE,eAAgB3b,EAAEgT,WAC9BgJ,IAAUL,EAAE,kBAAmB3b,EAAEgT,WACjCiJ,IAAUN,EAAE,iBAAkB3b,EAAEgT,WAChC8E,IAAU6D,EAAE,kBAAmB3b,EAAEgT,WACjCyJ,IAAUd,EAAE,gBAAiB3b,EAAEgT,WAC/B0J,IAAUf,EAAE,iBAAkB3b,EAAEgT,WAChC2J,IAAUhB,EAAE,mBAAoB3b,EAAEgT,WAClC4J,IAAUjB,EAAE,eAAgB3b,EAAEgT,WAC9B6J,IAAUlB,EAAE,iBAAkB3b,EAAEgT,WAChCm1C,IAAUxsC,EAAE,cAAe3b,EAAEgT,WAC7B+E,IAAU4D,EAAE,YAAa3b,EAAEgT,WAC3Bnd,IAAU8lB,EAAE,aAAc3b,EAAEgT,WAC5Bld,IAAU6lB,EAAE,WAAY3b,EAAEgT,WAC1Bjd,IAAU4lB,EAAE,UAAW3b,EAAEgT,WACzBhd,IAAU2lB,EAAE,mBAAoB3b,EAAEgT,WAClCgF,IAAU2D,EAAE,gBAAiB3b,EAAEgT,WAC/BiF,IAAU0D,EAAE,UAAW3b,EAAE08C,eACzB3/B,IAAUpB,EAAE,SAAU3b,EAAEw8C,cACxBvmD,IAAU0lB,EAAE,UAAW3b,EAAEgT,WACzB9c,IAAUylB,EAAE,YAAa3b,EAAEgT,WAC3B7c,IAAUwlB,EAAE,QAAS3b,EAAE69C,aACvBznD,IAAUulB,EAAE,WAAY3b,EAAEgT,WAC1B3c,IAAUslB,EAAE,cAAe3b,EAAEgT,WAC7B45C,IAAUjxC,EAAE,eAAgB3b,EAAEgT,WAC9B65C,IAAUlxC,EAAE,SAAU3b,EAAEgT,WACxBgK,IAAUrB,EAAE,cAAe3b,EAAEgT,WAC7B85C,IAAUnxC,EAAE,YAAa3b,EAAEgT,WAC3B+5C,IAAUpxC,EAAE,cAAe3b,EAAEgT,WAC7BiK,IAAUtB,EAAE,YAAa3b,EAAEgT,WAC3B1c,IAAUqlB,EAAE,mBAAoB3b,EAAEgT,WAClCo1C,IAAUzsC,EAAE,iBAAkB3b,EAAEgT,WAChCq1C,IAAU1sC,EAAE,gBAAiB3b,EAAEgT,WAC/Bs1C,IAAU3sC,EAAE,SAAU3b,EAAEgT,WACxBu1C,IAAU5sC,EAAE,aAAc3b,EAAEgT,WAC5Bg6C,IAAUrxC,EAAE,iBAAkB3b,EAAEgT,WAChCi6C,IAAUtxC,EAAE,oBAAqB3b,EAAEkgD,yBACnC/iC,IAAUxB,EAAE,UAAW3b,EAAEgT,WACzB01C,IAAU/sC,EAAE,gBAAiB3b,EAAEgT,WAC/BoK,IAAUzB,EAAE,gBAAiB3b,EAAEgT,WAC/B61C,IAAUltC,EAAE,iBAAkB3b,EAAEgT,WAChC+1C,IAAUptC,EAAE,gBAAiB3b,EAAEgT,WAC/B+8B,IAAUp0B,EAAE,iBAAkB3b,EAAEgT,WAChCk2C,IAAUvtC,EAAE,gBAAiB3b,EAAEgT,WAC/Bi8B,KAAUtzB,EAAE,iBAAkB3b,EAAEgT,WAChCk8B,KAAUvzB,EAAE,gBAAiB3b,EAAEgT,WAC/Bm8B,KAAUxzB,EAAE,cAAe3b,EAAEgT,WAC7Bw7C,KAAU7yC,EAAE,eAAgB3b,EAAEgT,UAAW2B,EAAE,GAC3C85C,KAAU9yC,EAAE,aAAc3b,EAAEgT,WAC5B07C,KAAU/yC,EAAE,kBAAmB3b,EAAEgT,WACjCo8B,KAAUzzB,EAAE,gBAAiB3b,EAAEgT,WAC/B27C,KAAUhzC,EAAE,oBAAqB3b,EAAEgT,WACnCq8B,KAAU1zB,EAAE,kBAAmB3b,EAAEgT,WACjC47C,KAAUjzC,EAAE,iBAAkB3b,EAAEgT,WAChC67C,KAAUlzC,EAAE,eAAgB3b,EAAEgT,WAC9B87C,KAAUnzC,EAAE,kBAAmB3b,EAAEgT,WACjC+7C,KAAUpzC,EAAE,gBAAiB3b,EAAEgT,WAC/B6rD,KAAUljD,EAAE,iBAAkB3b,EAAEgT,WAChCg8C,KAAUrzC,EAAE,eAAgB3b,EAAEgT,WAC9Bi8C,KAAUtzC,EAAE,oBAAqB3b,EAAEgT,WACnCk8C,KAAUvzC,EAAE,kBAAmB3b,EAAEgT,WACjCm8C,KAAUxzC,EAAE,oBAAqB3b,EAAEgT,WACnCo8C,KAAUzzC,EAAE,kBAAmB3b,EAAEgT,WACjCq8C,KAAU1zC,EAAE,YAAa3b,EAAE+xE,iBAC3BziB,KAAU3zC,EAAE,WAAY3b,EAAE6xE,eAAgBl9D,EAAE,IAC5C86C,KAAU9zC,EAAE,UAAW3b,EAAEgT,WACzB08C,KAAU/zC,EAAE,SAAU3b,EAAEgT,WACxB28C,KAAUh0C,EAAE,YAAa3b,EAAEs1E,iBAC3BxW,KAAUnjD,EAAE,eAAgB3b,EAAEgT,WAC9B48C,KAAUj0C,EAAE,iBAAkB3b,EAAEgT,WAChC+rD,KAAUpjD,EAAE,cAAe3b,EAAEi1E,mBAC7BjW,KAAUrjD,EAAE,cAAe3b,EAAEgT,WAC7BisD,KAAUtjD,EAAE,cAAe3b,EAAEgT,WAC7B68C,KAAUl0C,EAAE,cAAe3b,EAAEkyC,mBAC7BgtB,KAAUvjD,EAAE,YAAa3b,EAAEgT,WAC3Bs8B,KAAU3zB,EAAE,kBAAmB3b,EAAEgT,WACjCu8B,KAAU5zB,EAAE,gBAAiB3b,EAAEgT,WAC/Bw8B,KAAU7zB,EAAE,uBAAwB3b,EAAEgT,WACtC88C,KAAUn0C,EAAE,qBAAsB3b,EAAEgT,WACpCmsD,KAAUxjD,EAAE,kBAAmB3b,EAAEgT,WACjC+8C,KAAUp0C,EAAE,gBAAiB3b,EAAEgT,WAC/Bg9C,KAAUr0C,EAAE,YAAa3b,EAAEgT,WAC3Bi9C,KAAUt0C,EAAE,iBAAkB3b,EAAEgT,WAChCk9C,KAAUv0C,EAAE,gBAAiB3b,EAAEgT,WAC/Bm9C,KAAUx0C,EAAE,iBAAkB3b,EAAEgT,WAChCo9C,KAAUz0C,EAAE,mBAAoB3b,EAAEgT,WAClCq9C,KAAU10C,EAAE,wBAAyB3b,EAAEgT,WACvCs9C,KAAU30C,EAAE,sBAAuB3b,EAAEgT,WACrCu9C,KAAU50C,EAAE,kBAAmB3b,EAAEgT,WACjCw9C,KAAU70C,EAAE,0BAA2B3b,EAAEgT,WACzCosD,KAAUzjD,EAAE,eAAgB3b,EAAE6yE,oBAC9BpjC,KAAU9zB,EAAE,qBAAsB3b,EAAEgT,WACpC08B,KAAU/zB,EAAE,mBAAoB3b,EAAEgT,WAClCqsD,KAAU1jD,EAAE,wBAAyB3b,EAAEgT,WACvCssD,KAAU3jD,EAAE,sBAAuB3b,EAAEgT,WACrCusD,KAAU5jD,EAAE,oBAAqB3b,EAAEgT,WACnCwsD,KAAU7jD,EAAE,kBAAmB3b,EAAEgT,WACjCysD,KAAU9jD,EAAE,mBAAoB3b,EAAEgT,WAClC0sD,KAAU/jD,EAAE,iBAAkB3b,EAAEgT,WAChCy9C,KAAU90C,EAAE,oBAAqB3b,EAAEgT,WACnC28B,KAAUh0B,EAAE,kBAAmB3b,EAAEgT,WACjC09C,KAAU/0C,EAAE,oBAAqB3b,EAAEgT,WACnC29C,KAAUh1C,EAAE,kBAAmB3b,EAAEgT,WACjC49C,KAAUj1C,EAAE,mBAAoB3b,EAAEgT,WAClC69C,KAAUl1C,EAAE,iBAAkB3b,EAAEgT,WAChC89C,KAAUn1C,EAAE,kBAAmB3b,EAAEgT,WACjC+9C,KAAUp1C,EAAE,gBAAiB3b,EAAEgT,WAC/Bg+C,KAAUr1C,EAAE,4BAA6B3b,EAAEgT,WAC3Ci+C,KAAUt1C,EAAE,0BAA2B3b,EAAEgT,WACzCk+C,KAAUv1C,EAAE,yBAA0B3b,EAAEgT,WACxCm+C,KAAUx1C,EAAE,uBAAwB3b,EAAEgT,WACtCo+C,KAAUz1C,EAAE,uBAAwB3b,EAAEgT,WACtCq+C,KAAU11C,EAAE,qBAAsB3b,EAAEgT,WACpCs+C,KAAU31C,EAAE,0BAA2B3b,EAAEgT,WACzCu+C,KAAU51C,EAAE,wBAAyB3b,EAAEgT,WACvCw+C,KAAU71C,EAAE,wBAAyB3b,EAAEgT,WACvCy+C,KAAU91C,EAAE,sBAAuB3b,EAAEgT,WACrC0+C,KAAU/1C,EAAE,oBAAqB3b,EAAEgT,WACnC48B,KAAUj0B,EAAE,kBAAmB3b,EAAEgT,WACjC2sD,KAAUhkD,EAAE,sBAAuB3b,EAAEgT,WACrC2+C,KAAUh2C,EAAE,oBAAqB3b,EAAEgT,WACnC4+C,KAAUj2C,EAAE,qBAAsB3b,EAAEgT,WACpC6+C,KAAUl2C,EAAE,mBAAoB3b,EAAEgT,WAClC8+C,KAAUn2C,EAAE,qBAAsB3b,EAAEgT,WACpC++C,KAAUp2C,EAAE,mBAAoB3b,EAAEgT,WAClCg/C,KAAUr2C,EAAE,oBAAqB3b,EAAEgT,WACnCi/C,KAAUt2C,EAAE,kBAAmB3b,EAAEgT,WACjC2K,KAAUhC,EAAE,qBAAsB3b,EAAEgT,WACpCk/C,KAAUv2C,EAAE,mBAAoB3b,EAAEgT,WAClCm/C,KAAUx2C,EAAE,oBAAqB3b,EAAEgT,WACnC4K,KAAUjC,EAAE,kBAAmB3b,EAAEgT,WACjCo/C,KAAUz2C,EAAE,mBAAoB3b,EAAEgT,WAClC6K,KAAUlC,EAAE,iBAAkB3b,EAAEgT,WAChCq/C,KAAU12C,EAAE,oBAAqB3b,EAAEgT,WACnCs/C,KAAU32C,EAAE,kBAAmB3b,EAAEgT,WACjC4sD,KAAUjkD,EAAE,qBAAsB3b,EAAEgT,WACpC68B,KAAUl0B,EAAE,mBAAoB3b,EAAEgT,WAClCu/C,KAAU52C,EAAE,qBAAsB3b,EAAEgT,WACpCw/C,KAAU72C,EAAE,mBAAoB3b,EAAEgT,WAClCy/C,KAAU92C,EAAE,wBAAyB3b,EAAEgT,WACvC0/C,KAAU/2C,EAAE,sBAAuB3b,EAAEgT,WACrC2/C,KAAUh3C,EAAE,0BAA2B3b,EAAEgT,WACzC4/C,KAAUj3C,EAAE,wBAAyB3b,EAAEgT,WACvC6/C,KAAUl3C,EAAE,yBAA0B3b,EAAEgT,WACxC6sD,KAAUlkD,EAAE,uBAAwB3b,EAAEgT,WACtC8sD,KAAUnkD,EAAE,0BAA2B3b,EAAEgT,WACzC+sD,KAAUpkD,EAAE,wBAAyB3b,EAAEgT,WACvCgtD,KAAUrkD,EAAE,yBAA0B3b,EAAEgT,WACxCitD,KAAUtkD,EAAE,uBAAwB3b,EAAEgT,WACtCktD,KAAUvkD,EAAE,yBAA0B3b,EAAEgT,WACxCmtD,KAAUxkD,EAAE,uBAAwB3b,EAAEgT,WACtCotD,KAAUzkD,EAAE,uBAAwB3b,EAAEgT,WACtC88B,KAAUn0B,EAAE,qBAAsB3b,EAAEgT,WACpCqtD,KAAU1kD,EAAE,sBAAuB3b,EAAEgT,WACrC8/C,KAAUn3C,EAAE,oBAAqB3b,EAAEgT,WACnCstD,KAAU3kD,EAAE,qBAAsB3b,EAAEgT,WACpCutD,KAAU5kD,EAAE,mBAAoB3b,EAAEgT,WAClC+/C,KAAUp3C,EAAE,uBAAwB3b,EAAEgT,WACtCwtD,KAAU7kD,EAAE,qBAAsB3b,EAAEgT,WACpCytD,KAAU9kD,EAAE,sBAAuB3b,EAAEgT,WACrC0tD,KAAU/kD,EAAE,oBAAqB3b,EAAEgT,WACnC2tD,KAAUhlD,EAAE,gBAAiB3b,EAAEgT,WAC/B4tD,KAAUjlD,EAAE,cAAe3b,EAAEgT,WAC7BggD,KAAUr3C,EAAE,oBAAqB3b,EAAEgT,WACnCigD,KAAUt3C,EAAE,kBAAmB3b,EAAEgT,WACjCkgD,KAAUv3C,EAAE,mBAAoB3b,EAAEgT,WAClCmgD,KAAUx3C,EAAE,iBAAkB3b,EAAEgT,WAChCogD,KAAUz3C,EAAE,iBAAkB3b,EAAEgT,WAChCqgD,KAAU13C,EAAE,eAAgB3b,EAAEgT,WAC9BkF,KAAUyD,EAAE,gBAAiB3b,EAAEgT,WAC/BsgD,KAAU33C,EAAE,cAAe3b,EAAEgT,WAC7B6tD,KAAUllD,EAAE,kBAAmB3b,EAAEgT,WACjC8tD,KAAUnlD,EAAE,gBAAiB3b,EAAEgT,WAC/BugD,KAAU53C,EAAE,iBAAkB3b,EAAEgT,WAChCwgD,KAAU73C,EAAE,eAAgB3b,EAAEgT,WAC9B+tD,KAAUplD,EAAE,qBAAsB3b,EAAEgT,WACpCguD,KAAUrlD,EAAE,mBAAoB3b,EAAEgT,WAClCiuD,KAAUtlD,EAAE,qBAAsB3b,EAAEgT,WACpCkuD,KAAUvlD,EAAE,mBAAoB3b,EAAEgT,WAClCygD,KAAU93C,EAAE,mBAAoB3b,EAAEgT,WAClC0gD,KAAU/3C,EAAE,iBAAkB3b,EAAEgT,WAChC2gD,KAAUh4C,EAAE,kBAAmB3b,EAAEgT,WACjC4gD,KAAUj4C,EAAE,gBAAiB3b,EAAEgT,WAC/B6gD,KAAUl4C,EAAE,kBAAmB3b,EAAEgT,WACjCmuD,KAAUxlD,EAAE,gBAAiB3b,EAAEgT,WAC/BouD,KAAUzlD,EAAE,iBAAkB3b,EAAEgT,WAChC8gD,KAAUn4C,EAAE,eAAgB3b,EAAEgT,WAC9B+gD,KAAUp4C,EAAE,eAAgB3b,EAAEgT,WAC9BghD,KAAUr4C,EAAE,aAAc3b,EAAEgT,WAC5BquD,KAAU1lD,EAAE,cAAe3b,EAAEgT,WAC7BihD,KAAUt4C,EAAE,YAAa3b,EAAEgT,WAC3BkhD,KAAUv4C,EAAE,kBAAmB3b,EAAEgT,WACjCmhD,KAAUx4C,EAAE,qBAAsB3b,EAAEgT,WACpCohD,KAAUz4C,EAAE,mBAAoB3b,EAAEgT,WAClCqhD,KAAU14C,EAAE,iBAAkB3b,EAAEgT,WAChCshD,KAAU34C,EAAE,aAAc3b,EAAEgT,WAC5BuhD,KAAU54C,EAAE,eAAgB3b,EAAEgT,WAC9BwhD,KAAU74C,EAAE,gBAAiB3b,EAAEgT,WAC/ByhD,KAAU94C,EAAE,cAAe3b,EAAEgT,WAC7B0hD,KAAU/4C,EAAE,eAAgB3b,EAAEgT,WAC9BsuD,KAAU3lD,EAAE,aAAc3b,EAAEgT,WAC5BuuD,KAAU5lD,EAAE,gBAAiB3b,EAAEgT,WAC/B2hD,KAAUh5C,EAAE,cAAe3b,EAAEgT,WAC7B4hD,KAAUj5C,EAAE,eAAgB3b,EAAEgT,WAC9B6hD,KAAUl5C,EAAE,aAAc3b,EAAEgT,WAC5B8hD,KAAUn5C,EAAE,gBAAiB3b,EAAEgT,WAC/B+hD,KAAUp5C,EAAE,cAAe3b,EAAEgT,WAC7BgiD,KAAUr5C,EAAE,eAAgB3b,EAAEgT,WAC9BwuD,KAAU7lD,EAAE,aAAc3b,EAAEgT,WAC5BiiD,KAAUt5C,EAAE,gBAAiB3b,EAAEgT,WAC/BkiD,KAAUv5C,EAAE,cAAe3b,EAAEgT,WAC7BmiD,KAAUx5C,EAAE,eAAgB3b,EAAEgT,WAC9BoiD,KAAUz5C,EAAE,aAAc3b,EAAEgT,WAC5ByuD,KAAU9lD,EAAE,kBAAmB3b,EAAEgT,WACjC0uD,KAAU/lD,EAAE,gBAAiB3b,EAAEgT,WAC/B2uD,KAAUhmD,EAAE,mBAAoB3b,EAAEgT,WAClCqiD,KAAU15C,EAAE,iBAAkB3b,EAAEgT,WAChC4uD,KAAUjmD,EAAE,mBAAoB3b,EAAEgT,WAClC6uD,KAAUlmD,EAAE,iBAAkB3b,EAAEgT,WAChCsiD,KAAU35C,EAAE,oBAAqB3b,EAAEgT,WACnCuiD,KAAU55C,EAAE,kBAAmB3b,EAAEgT,WACjCwiD,KAAU75C,EAAE,mBAAoB3b,EAAEgT,WAClCyiD,KAAU95C,EAAE,iBAAkB3b,EAAEgT,WAChC0iD,KAAU/5C,EAAE,mBAAoB3b,EAAEgT,WAClC2iD,KAAUh6C,EAAE,iBAAkB3b,EAAEgT,WAChC4iD,KAAUj6C,EAAE,oBAAqB3b,EAAEgT,WACnC6iD,KAAUl6C,EAAE,kBAAmB3b,EAAEgT,WACjC8iD,KAAUn6C,EAAE,mBAAoB3b,EAAEgT,WAClC+iD,KAAUp6C,EAAE,qBAAsB3b,EAAEgT,WACpCgjD,KAAUr6C,EAAE,eAAgB3b,EAAEgT,WAC9BijD,KAAUt6C,EAAE,gBAAiB3b,EAAEgT,WAC/B8uD,KAAUnmD,EAAE,cAAe3b,EAAEgT,WAC7BkjD,KAAUv6C,EAAE,eAAgB3b,EAAEgT,WAC9BmjD,KAAUx6C,EAAE,aAAc3b,EAAEgT,WAC5BojD,KAAUz6C,EAAE,mBAAoB3b,EAAEgT,WAClCqjD,KAAU16C,EAAE,iBAAkB3b,EAAEgT,WAChCsjD,KAAU36C,EAAE,oBAAqB3b,EAAEgT,WACnCujD,KAAU56C,EAAE,kBAAmB3b,EAAEgT,WACjCwjD,KAAU76C,EAAE,kBAAmB3b,EAAEgT,WACjCyjD,KAAU96C,EAAE,gBAAiB3b,EAAEgT,WAC/B+uD,KAAUpmD,EAAE,iBAAkB3b,EAAEgT,WAChCgvD,KAAUrmD,EAAE,eAAgB3b,EAAEgT,WAC9B0jD,KAAU/6C,EAAE,oBAAqB3b,EAAEgT,WACnCivD,KAAUtmD,EAAE,kBAAmB3b,EAAEgT,WACjC2jD,KAAUh7C,EAAE,mBAAoB3b,EAAEgT,WAClCkvD,KAAUvmD,EAAE,iBAAkB3b,EAAEgT,WAChCmvD,KAAUxmD,EAAE,mBAAoB3b,EAAEgT,WAClCisE,KAAUtjE,EAAE,iBAAkB3b,EAAEgT,WAChCovD,KAAUzmD,EAAE,oBAAqB3b,EAAEgT,WACnCqvD,KAAU1mD,EAAE,aAAc3b,EAAEgT,WAC5B4jD,KAAUj7C,EAAE,kBAAmB3b,EAAEgT,WACjCsvD,KAAU3mD,EAAE,gBAAiB3b,EAAEgT,WAC/B6jD,KAAUl7C,EAAE,cAAe3b,EAAEgT,WAC7B8jD,KAAUn7C,EAAE,gBAAiB3b,EAAEgT,WAC/BuvD,KAAU5mD,EAAE,cAAe3b,EAAEgT,WAC7BwvD,KAAU7mD,EAAE,sBAAuB3b,EAAEgT,WACrC+jD,KAAUp7C,EAAE,oBAAqB3b,EAAEgT,WACnCgkD,KAAUr7C,EAAE,eAAgB3b,EAAEgT,WAC9BikD,KAAUt7C,EAAE,aAAc3b,EAAEgT,WAC5ByvD,KAAU9mD,EAAE,mBAAoB3b,EAAEgT,WAClC0vD,KAAU/mD,EAAE,iBAAkB3b,EAAEgT,WAChC2vD,KAAUhnD,EAAE,kBAAmB3b,EAAEgT,WACjC4vD,KAAUjnD,EAAE,gBAAiB3b,EAAEgT,WAC/B6vD,KAAUlnD,EAAE,qBAAsB3b,EAAEgT,WACpCkkD,KAAUv7C,EAAE,mBAAoB3b,EAAEgT,WAClC8K,KAAUnC,EAAE,gBAAiB3b,EAAEgT,WAC/BmkD,KAAUx7C,EAAE,gBAAiB3b,EAAEgT,WAC/B8vD,KAAUnnD,EAAE,oBAAqB3b,EAAEgT,WACnC+K,KAAUpC,EAAE,kBAAmB3b,EAAEgT,WACjCokD,KAAUz7C,EAAE,gBAAiB3b,EAAEgT,WAC/B+vD,KAAUpnD,EAAE,aAAc3b,EAAEgT,WAC5BgL,KAAUrC,EAAE,aAAc3b,EAAEgT,WAC5BgwD,KAAUrnD,EAAE,aAAc3b,EAAEgT,WAC5BiwD,KAAUtnD,EAAE,kBAAmB3b,EAAEgT,WACjCkwD,KAAUvnD,EAAE,qBAAsB3b,EAAEgT,WACpCmwD,KAAUxnD,EAAE,iBAAkB3b,EAAEgT,WAChCowD,KAAUznD,EAAE,sBAAuB3b,EAAEgT,WACrCqwD,KAAU1nD,EAAE,oBAAqB3b,EAAEgT,WACnCuwD,KAAU5nD,EAAE,kBAAmB3b,EAAEgT,WACjCwwD,KAAU7nD,EAAE,qBAAsB3b,EAAEgT,WACpCywD,KAAU9nD,EAAE,oBAAqB3b,EAAEgT,WACnC0wD,KAAU/nD,EAAE,oBAAqB3b,EAAEgT,WACnCskD,KAAU37C,EAAE,qBAAsB3b,EAAEgT,WACpC2wD,KAAUhoD,EAAE,sBAAuB3b,EAAEgT,WACrC4wD,KAAUjoD,EAAE,gBAAiB3b,EAAEgT,WAC/BukD,KAAU57C,EAAE,cAAe3b,EAAEgT,WAC7BwkD,KAAU77C,EAAE,iBAAkB3b,EAAEgT,WAChCykD,KAAU97C,EAAE,eAAgB3b,EAAEgT,WAC9B0kD,KAAU/7C,EAAE,qBAAsB3b,EAAEgT,WACpC2kD,KAAUh8C,EAAE,mBAAoB3b,EAAEgT,WAClC4kD,KAAUj8C,EAAE,iBAAkB3b,EAAEgT,WAChC6kD,KAAUl8C,EAAE,eAAgB3b,EAAEgT,WAC9B8kD,KAAUn8C,EAAE,gBAAiB3b,EAAEgT,WAC/B+kD,KAAUp8C,EAAE,cAAe3b,EAAEgT,WAC7BglD,KAAUr8C,EAAE,kBAAmB3b,EAAEgT,WACjCilD,KAAUt8C,EAAE,gBAAiB3b,EAAEgT,WAC/BklD,KAAUv8C,EAAE,wBAAyB3b,EAAEgT,WACvCmlD,KAAUx8C,EAAE,sBAAuB3b,EAAEgT,WACrColD,KAAUz8C,EAAE,uBAAwB3b,EAAEgT,WACtCksE,KAAUvjE,EAAE,qBAAsB3b,EAAEgT,WACpCqlD,KAAU18C,EAAE,iBAAkB3b,EAAEgT,WAChCmsE,KAAUxjE,EAAE,eAAgB3b,EAAEgT,WAC9BslD,KAAU38C,EAAE,mBAAoB3b,EAAEgT,WAClCulD,KAAU58C,EAAE,iBAAkB3b,EAAEgT,WAChCwlD,KAAU78C,EAAE,gBAAiB3b,EAAEgT,WAC/BylD,KAAU98C,EAAE,cAAe3b,EAAEgT,WAC7B0lD,KAAU/8C,EAAE,iBAAkB3b,EAAEgT,WAChC2lD,KAAUh9C,EAAE,eAAgB3b,EAAEgT,WAC9B4lD,KAAUj9C,EAAE,SAAU3b,EAAEgT,WACxB6lD,KAAUl9C,EAAE,kBAAmB3b,EAAEgT,WACjC8lD,KAAUn9C,EAAE,UAAW3b,EAAEgT,WACzB+lD,KAAUp9C,EAAE,UAAW3b,EAAEgT,WACzBgmD,KAAUr9C,EAAE,SAAU3b,EAAEgT,WACxBosE,KAAUzjE,EAAE,gBAAiB3b,EAAEgT,WAC/BqsE,KAAU1jE,EAAE,SAAU3b,EAAEgT,WACxBssE,KAAU3jE,EAAE,SAAU3b,EAAEgT,WACxBusE,KAAU5jE,EAAE,cAAe3b,EAAEgT,WAC7BwsE,KAAU7jE,EAAE,iBAAkB3b,EAAEgT,WAChCysE,KAAU9jE,EAAE,YAAa3b,EAAEgT,WAC3B0sE,KAAU/jE,EAAE,eAAgB3b,EAAEgT,WAC9B2sE,KAAUhkE,EAAE,eAAgB3b,EAAEgT,WAC9B4sE,KAAUjkE,EAAE,kBAAmB3b,EAAEgT,WACjC6sE,KAAUlkE,EAAE,cAAe3b,EAAEgT,WAC7BimD,KAAUt9C,EAAE,gBAAiB3b,EAAEgT,WAC/BkmD,KAAUv9C,EAAE,gBAAiB3b,EAAEgT,WAC/BmmD,KAAUx9C,EAAE,gBAAiB3b,EAAEgT,WAC/BomD,KAAUz9C,EAAE,eAAgB3b,EAAEgT,WAC9BqmD,KAAU19C,EAAE,YAAa3b,EAAEgT,WAC3BsmD,KAAU39C,EAAE,gBAAiB3b,EAAEgT,WAC/B8sE,KAAUnkE,EAAE,aAAc3b,EAAEgT,WAC5B+sE,KAAUpkE,EAAE,cAAe3b,EAAEgT,WAC7BiL,KAAUtC,EAAE,iBAAkB3b,EAAEgT,WAChCumD,KAAU59C,EAAE,eAAgB3b,EAAEgT,WAC9BwmD,KAAU79C,EAAE,sBAAuB3b,EAAEgT,WACrCymD,KAAU99C,EAAE,qBAAsB3b,EAAEgT,WACpC0mD,KAAU/9C,EAAE,mBAAoB3b,EAAEgT,WAClC2mD,KAAUh+C,EAAE,oBAAqB3b,EAAEgT,WACnCgtE,KAAUrkE,EAAE,aAAc3b,EAAEgT,WAC5BitE,KAAUtkE,EAAE,aAAc3b,EAAEgT,WAC5BktE,KAAUvkE,EAAE,WAAY3b,EAAEgT,WAC1BmtE,KAAUxkE,EAAE,yBAA0B3b,EAAEgT,WACxC4mD,KAAUj+C,EAAE,uBAAwB3b,EAAEgT,WACtC6mD,KAAUl+C,EAAE,sBAAuB3b,EAAEgT,WACrC8mD,KAAUn+C,EAAE,oBAAqB3b,EAAEgT,WACnC+mD,KAAUp+C,EAAE,qBAAsB3b,EAAEgT,WACpCgnD,KAAUr+C,EAAE,mBAAoB3b,EAAEgT,WAClCinD,KAAUt+C,EAAE,sBAAuB3b,EAAEgT,WACrCknD,KAAUv+C,EAAE,oBAAqB3b,EAAEgT,WACnCmnD,KAAUx+C,EAAE,qBAAsB3b,EAAEgT,WACpConD,KAAUz+C,EAAE,mBAAoB3b,EAAEgT,WAClCqnD,KAAU1+C,EAAE,uBAAwB3b,EAAEgT,WACtCsnD,KAAU3+C,EAAE,qBAAsB3b,EAAEgT,WACpCunD,KAAU5+C,EAAE,sBAAuB3b,EAAEgT,WACrCwnD,KAAU7+C,EAAE,oBAAqB3b,EAAEgT,WACnCynD,KAAU9+C,EAAE,yBAA0B3b,EAAEgT,WACxC0nD,KAAU/+C,EAAE,uBAAwB3b,EAAEgT,WACtC2nD,KAAUh/C,EAAE,wBAAyB3b,EAAEgT,WACvC4nD,KAAUj/C,EAAE,sBAAuB3b,EAAEgT,WACrC6nD,KAAUl/C,EAAE,cAAe3b,EAAEgT,WAC7B8nD,KAAUn/C,EAAE,YAAa3b,EAAEgT,WAC3B+nD,KAAUp/C,EAAE,eAAgB3b,EAAEgT,WAC9BgoD,KAAUr/C,EAAE,aAAc3b,EAAEgT,WAC5BioD,KAAUt/C,EAAE,uBAAwB3b,EAAEgT,WACtCkoD,KAAUv/C,EAAE,qBAAsB3b,EAAEgT,WACpCmoD,KAAUx/C,EAAE,sBAAuB3b,EAAEgT,WACrCooD,KAAUz/C,EAAE,oBAAqB3b,EAAEgT,WACnCqoD,KAAU1/C,EAAE,gBAAiB3b,EAAEgT,WAC/BsoD,KAAU3/C,EAAE,cAAe3b,EAAEgT,WAC7BotE,KAAUzkE,EAAE,eAAgB3b,EAAEgT,WAC9BuoD,KAAU5/C,EAAE,aAAc3b,EAAEgT,WAC5BwoD,KAAU7/C,EAAE,wBAAyB3b,EAAEgT,WACvCyoD,KAAU9/C,EAAE,sBAAuB3b,EAAEgT,WACrC0oD,KAAU//C,EAAE,gCAAiC3b,EAAEgT,WAC/C2oD,KAAUhgD,EAAE,8BAA+B3b,EAAEgT,WAC7C4oD,KAAUjgD,EAAE,iBAAkB3b,EAAEgT,WAChC6oD,KAAUlgD,EAAE,eAAgB3b,EAAEgT,WAC9B8oD,KAAUngD,EAAE,kBAAmB3b,EAAEgT,WACjC+oD,KAAUpgD,EAAE,gBAAiB3b,EAAEgT,WAC/BgpD,KAAUrgD,EAAE,kBAAmB3b,EAAEgT,WACjCipD,KAAUtgD,EAAE,gBAAiB3b,EAAEgT,WAC/BkpD,KAAUvgD,EAAE,qBAAsB3b,EAAEgT,WACpCmpD,KAAUxgD,EAAE,mBAAoB3b,EAAEgT,WAClCopD,KAAUzgD,EAAE,UAAW3b,EAAEgT,WACzBqpD,KAAU1gD,EAAE,qBAAsB3b,EAAEgT,WACpCspD,KAAU3gD,EAAE,uBAAwB3b,EAAEgT,WACtCupD,KAAU5gD,EAAE,qBAAsB3b,EAAEgT,WACpCwpD,KAAU7gD,EAAE,kBAAmB3b,EAAEgT,WACjCypD,KAAU9gD,EAAE,aAAc3b,EAAEgT,WAC5B0pD,KAAU/gD,EAAE,kBAAmB3b,EAAEgT,WACjC2pD,KAAUhhD,EAAE,eAAgB3b,EAAEgT,WAC9BqtE,KAAU1kE,EAAE,uBAAwB3b,EAAEgT,WACtC4pD,KAAUjhD,EAAE,qBAAsB3b,EAAEgT,WACpC6pD,KAAUlhD,EAAE,sBAAuB3b,EAAEgT,WACrC8pD,KAAUnhD,EAAE,oBAAqB3b,EAAEgT,WACnCstE,KAAU3kE,EAAE,uBAAwB3b,EAAEgT,WACtCutE,KAAU5kE,EAAE,qBAAsB3b,EAAEgT,WACpC+pD,KAAUphD,EAAE,eAAgB3b,EAAEgT,WAC9BwtE,KAAU7kE,EAAE,cAAe3b,EAAEgT,WAC7BytE,KAAU9kE,EAAE,YAAa3b,EAAEgT,WAC3B0tE,KAAU/kE,EAAE,iBAAkB3b,EAAEgT,WAChCgqD,KAAUrhD,EAAE,eAAgB3b,EAAEgT,WAC9B2tE,KAAUhlE,EAAE,aAAc3b,EAAEgT,WAC5BiqD,KAAUthD,EAAE,WAAY3b,EAAEgT,WAC1B4tE,KAAUjlE,EAAE,cAAe3b,EAAEgT,WAC7BkqD,KAAUvhD,EAAE,YAAa3b,EAAEgT,WAC3BmqD,KAAUxhD,EAAE,WAAY3b,EAAE8yE,gBAC1B1V,KAAUzhD,EAAE,eAAgB3b,EAAEgT,WAC9B6tE,KAAUllE,EAAE,aAAc3b,EAAEgT,WAC5B8tE,KAAUnlE,EAAE,gBAAiB3b,EAAEgT,WAC/B+tE,KAAUplE,EAAE,cAAe3b,EAAEgT,WAC7BguE,KAAUrlE,EAAE,UAAW3b,EAAEgT,WACzBiuE,KAAUtlE,EAAE,kBAAmB3b,EAAEgT,WACjCkuE,KAAUvlE,EAAE,gBAAiB3b,EAAEgT,WAC/BmuE,KAAUxlE,EAAE,cAAe3b,EAAEgT,WAC7BouE,KAAUzlE,EAAE,YAAa3b,EAAEgT,WAC3BquE,KAAU1lE,EAAE,SAAU3b,EAAEgT,WACxBsuE,KAAU3lE,EAAE,eAAgB3b,EAAEgT,WAC9BuuE,KAAU5lE,EAAE,aAAc3b,EAAEgT,WAC5BwuE,KAAU7lE,EAAE,SAAU3b,EAAEgT,WACxByuE,KAAU9lE,EAAE,sBAAuB3b,EAAEgT,WACrCqqD,KAAU1hD,EAAE,oBAAqB3b,EAAEgT,WACnCsqD,KAAU3hD,EAAE,qBAAsB3b,EAAEgT,WACpCuqD,KAAU5hD,EAAE,mBAAoB3b,EAAEgT,WAClC0uE,KAAU/lE,EAAE,uBAAwB3b,EAAEgT,WACtC2uE,KAAUhmE,EAAE,sBAAuB3b,EAAEgT,WACrC4uE,KAAUjmE,EAAE,kBAAmB3b,EAAEgT,WACjC6uE,KAAUlmE,EAAE,gBAAiB3b,EAAEgT,WAC/B8uE,KAAUnmE,EAAE,kBAAmB3b,EAAEgT,WACjCwqD,KAAU7hD,EAAE,gBAAiB3b,EAAEgT,WAC/ByqD,KAAU9hD,EAAE,kBAAmB3b,EAAEgT,WACjC0qD,KAAU/hD,EAAE,gBAAiB3b,EAAEgT,WAC/B2qD,KAAUhiD,EAAE,mBAAoB3b,EAAEgT,WAClC4qD,KAAUjiD,EAAE,iBAAkB3b,EAAEgT,WAChC6qD,KAAUliD,EAAE,iBAAkB3b,EAAEgT,WAChC8qD,KAAUniD,EAAE,YAAa3b,EAAEgT,WAC3B+uE,KAAUpmE,EAAE,YAAa3b,EAAEgT,WAC3BgvE,KAAUrmE,EAAE,YAAa3b,EAAEgT,WAC3BivE,KAAUtmE,EAAE,YAAa3b,EAAEgT,WAC3BkvE,KAAUvmE,EAAE,aAAc3b,EAAEgT,WAC5BmvE,KAAUxmE,EAAE,qBAAsB3b,EAAEgT,WACpCovE,KAAUzmE,EAAE,mBAAoB3b,EAAEgT,WAClCqvE,KAAU1mE,EAAE,oBAAqB3b,EAAEgT,WACnCsvE,KAAU3mE,EAAE,kBAAmB3b,EAAEgT,WACjCuvE,KAAU5mE,EAAE,mBAAoB3b,EAAEgT,WAClCwvE,KAAU7mE,EAAE,iBAAkB3b,EAAEgT,WAChCyvE,KAAU9mE,EAAE,oBAAqB3b,EAAEgT,WACnC0vE,KAAU/mE,EAAE,qBAAsB3b,EAAEgT,WACpC2vE,KAAUhnE,EAAE,qBAAsB3b,EAAEgT,WACpC4vE,KAAUjnE,EAAE,kBAAmB3b,EAAEgT,WACjC6vE,KAAUlnE,EAAE,mBAAoB3b,EAAEgT,WAClC8vE,KAAUnnE,EAAE;AAAkB3b,EAAEgT,WAChC+vE,KAAUpnE,EAAE,yBAA0B3b,EAAEgT,WACxCgwE,KAAUrnE,EAAE,uBAAwB3b,EAAEgT,WACtCiwE,KAAUtnE,EAAE,sBAAuB3b,EAAEgT,WACrCkrD,KAAUviD,EAAE,iBAAkB3b,EAAEgT,WAChCmrD,KAAUxiD,EAAE,aAAc3b,EAAEgT,WAC5BkwE,KAAUvnE,EAAE,aAAc3b,EAAEgT,WAC5BmwE,KAAUxnE,EAAE,mBAAoB3b,EAAEgT,WAClCowE,KAAUznE,EAAE,qBAAsB3b,EAAEgT,WACpCqwE,KAAU1nE,EAAE,YAAa3b,EAAEgT,WAC3BswE,KAAU3nE,EAAE,sBAAuB3b,EAAEgT,WACrCuwE,KAAU5nE,EAAE,oBAAqB3b,EAAEgT,WACnCwwE,KAAU7nE,EAAE,qBAAsB3b,EAAEgT,WACpCywE,KAAU9nE,EAAE,mBAAoB3b,EAAEgT,WAClC0wE,KAAU/nE,EAAE,oBAAqB3b,EAAEgT,WACnC2wE,KAAUhoE,EAAE,kBAAmB3b,EAAEgT,WACjC4wE,KAAUjoE,EAAE,qBAAsB3b,EAAEgT,WACpC6wE,KAAUloE,EAAE,mBAAoB3b,EAAEgT,WAClC8wE,KAAUnoE,EAAE,WAAY3b,EAAEgT,WAC1B+wE,KAAUpoE,EAAE,WAAY3b,EAAEgT,WAC1BgxE,KAAUroE,EAAE,wBAAyB3b,EAAEgT,WACvCixE,KAAUtoE,EAAE,sBAAuB3b,EAAEgT,WACrCkxE,KAAUvoE,EAAE,oBAAqB3b,EAAEgT,WACnCmxE,KAAUxoE,EAAE,kBAAmB3b,EAAEgT,WACjCoxE,KAAUzoE,EAAE,cAAe3b,EAAEgT,WAC7BqxE,KAAU1oE,EAAE,gBAAiB3b,EAAEgT,WAC/BsxE,KAAU3oE,EAAE,cAAe3b,EAAEgT,WAC7BuxE,KAAU5oE,EAAE,kBAAmB3b,EAAEgT,WACjCwxE,KAAU7oE,EAAE,uBAAwB3b,EAAEgT,WACtCyxE,KAAU9oE,EAAE,qBAAsB3b,EAAEgT,WACpC0xE,KAAU/oE,EAAE,gBAAiB3b,EAAEgT,WAC/B2xE,KAAUhpE,EAAE,gBAAiB3b,EAAEgT,WAC/B4xE,KAAUjpE,EAAE,eAAgB3b,EAAEgT,WAC9B6xE,KAAUlpE,EAAE,gBAAiB3b,EAAEgT,WAC/B8xE,KAAUnpE,EAAE,iBAAkB3b,EAAEgT,WAChC+xE,KAAUppE,EAAE,iBAAkB3b,EAAEgT,WAChCgyE,KAAUrpE,EAAE,iBAAkB3b,EAAEgT,WAChCiyE,KAAUtpE,EAAE,gBAAiB3b,EAAEgT,WAC/BkyE,KAAUvpE,EAAE,gBAAiB3b,EAAEgT,WAC/BmyE,KAAUxpE,EAAE,0BAA2B3b,EAAEgT,WACzCoyE,KAAUzpE,EAAE,uBAAwB3b,EAAEgT,WACtCqyE,KAAU1pE,EAAE,qBAAsB3b,EAAEgT,WACpCsyE,KAAU3pE,EAAE,wBAAyB3b,EAAEgT,WACvCuyE,KAAU5pE,EAAE,sBAAuB3b,EAAEgT,WACrCwyE,KAAU7pE,EAAE,oBAAqB3b,EAAEgT,WACnCyyE,KAAU9pE,EAAE,kBAAmB3b,EAAEgT,WACjC0yE,KAAU/pE,EAAE,kBAAmB3b,EAAEgT,WACjC2yE,KAAUhqE,EAAE,wBAAyB3b,EAAEgT,WACvC4yE,KAAUjqE,EAAE,sBAAuB3b,EAAEgT,WACrC6yE,KAAUlqE,EAAE,oBAAqB3b,EAAEgT,WACnC8yE,KAAUnqE,EAAE,kBAAmB3b,EAAEgT,WACjC+yE,KAAUpqE,EAAE,mBAAoB3b,EAAEgT,WAClCgzE,KAAUrqE,EAAE,iBAAkB3b,EAAEgT,WAChCizE,KAAUtqE,EAAE,gBAAiB3b,EAAEgT,WAC/BkzE,KAAUvqE,EAAE,cAAe3b,EAAEgT,WAC7BmzE,KAAUxqE,EAAE,sBAAuB3b,EAAEgT,WACrCozE,KAAUzqE,EAAE,oBAAqB3b,EAAEgT,WACnCqzE,KAAU1qE,EAAE,eAAgB3b,EAAEgT,WAC9BszE,KAAU3qE,EAAE,iBAAkB3b,EAAEgT,WAChCuzE,KAAU5qE,EAAE,eAAgB3b,EAAEgT,WAC9BwzE,KAAU7qE,EAAE,iBAAkB3b,EAAEgT,WAChCyzE,KAAU9qE,EAAE,gBAAiB3b,EAAEgT,WAC/B0zE,KAAU/qE,EAAE,cAAe3b,EAAEgT,WAC7B2zE,KAAUhrE,EAAE,kBAAmB3b,EAAEgT,WACjC4zE,KAAUjrE,EAAE,gBAAiB3b,EAAEgT,WAC/B6zE,KAAUlrE,EAAE,eAAgB3b,EAAEgT,WAC9B8zE,KAAUnrE,EAAE,aAAc3b,EAAEgT,WAC5B+zE,KAAUprE,EAAE,kBAAmB3b,EAAEgT,WACjCg0E,KAAUrrE,EAAE,gBAAiB3b,EAAEgT,WAC/Bi0E,KAAUtrE,EAAE,iBAAkB3b,EAAEgT,WAChCorD,KAAUziD,EAAE,eAAgB3b,EAAEgT,WAC9Bk0E,KAAUvrE,EAAE,aAAc3b,EAAEgT,WAC5Bm0E,KAAUxrE,EAAE,uBAAwB3b,EAAEgT,WACtCo0E,KAAUzrE,EAAE,qBAAsB3b,EAAEgT,WACpCq0E,KAAU1rE,EAAE,mBAAoB3b,EAAEgT,WAClCs0E,KAAU3rE,EAAE,iBAAkB3b,EAAEgT,WAChCu0E,KAAU5rE,EAAE,yBAA0B3b,EAAEgT,WACxCw0E,KAAU7rE,EAAE,uBAAwB3b,EAAEgT,WACtCy0E,KAAU9rE,EAAE,mBAAoB3b,EAAEiiD,wBAClCylC,KAAU/rE,EAAE,sBAAuB3b,EAAEgT,WACrC20E,KAAUhsE,EAAE,oBAAqB3b,EAAEgT,WACnC40E,KAAUjsE,EAAE,kBAAmB3b,EAAE8hD,uBACjC+lC,KAAUlsE,EAAE,gBAAiB3b,EAAEgT,WAC/B80E,KAAUnsE,EAAE,iBAAkB3b,EAAEkiD,sBAChC6lC,KAAUpsE,EAAE,qBAAsB3b,EAAEgT,WACpCg1E,KAAUrsE,EAAE,eAAgB3b,EAAEgT,WAC9Bi1E,KAAUtsE,EAAE,mBAAoB3b,EAAEgT,WAClCk1E,KAAUvsE,EAAE,kBAAmB3b,EAAEgT,WACjCm1E,KAAUxsE,EAAE,gBAAiB3b,EAAEgT,WAC/Bo1E,KAAUzsE,EAAE,0BAA2B3b,EAAEgT,WACzCq1E,KAAU1sE,EAAE,aAAc3b,EAAEgT,WAC5Bs1E,KAAU3sE,EAAE,wBAAyB3b,EAAEgT,WACvCu1E,KAAU5sE,EAAE,gCAAiC3b,EAAEgT,WAC/Cw1E,KAAU7sE,EAAE,wBAAyB3b,EAAEgT,WACvCy1E,KAAU9sE,EAAE,kBAAmB3b,EAAEgT,WACjC01E,KAAU/sE,EAAE,sBAAuB3b,EAAEgT,WACrC21E,KAAUhtE,EAAE,YAAa3b,EAAEgT,WAC3B41E,KAAUjtE,EAAE,iBAAkB3b,EAAEgT,WAChCurD,KAAU5iD,EAAE,sBAAuB3b,EAAEgT,WACrC61E,KAAUltE,EAAE,oBAAqB3b,EAAEgT,WACnC81E,KAAUntE,EAAE,qBAAsB3b,EAAEgT,WACpC+1E,KAAUptE,EAAE,mBAAoB3b,EAAEgT,WAClCg2E,KAAUrtE,EAAE,yBAA0B3b,EAAEgT,WACxCi2E,KAAUttE,EAAE,uBAAwB3b,EAAEgT,WACtCk2E,KAAUvtE,EAAE,kBAAmB3b,EAAEgT,WACjCm2E,KAAUxtE,EAAE,oBAAqB3b,EAAEgT,WACnCo2E,KAAUztE,EAAE,cAAe3b,EAAEgT,WAC7Bq2E,KAAU1tE,EAAE,kBAAmB3b,EAAEgT,WACjCs2E,KAAU3tE,EAAE,mBAAoB3b,EAAEgT,WAClCu2E,KAAU5tE,EAAE,kBAAmB3b,EAAEgT,WACjCw2E,KAAU7tE,EAAE,aAAc3b,EAAEgT,WAC5By2E,KAAU9tE,EAAE,gBAAiB3b,EAAEgT,WAC/BwrD,KAAU7iD,EAAE,cAAe3b,EAAEgT,WAC7B02E,KAAU/tE,EAAE,iBAAkB3b,EAAEgT,WAChC22E,KAAUhuE,EAAE,kBAAmB3b,EAAEgT,WACjC42E,KAAUjuE,EAAE,oBAAqB3b,EAAEgT,WACnC62E,KAAUluE,EAAE,kBAAmB3b,EAAEgT,WACjCyrD,KAAU9iD,EAAE,iBAAkB3b,EAAEgT,WAChC82E,KAAUnuE,EAAE,eAAgB3b,EAAEgT,WAC9B+2E,KAAUpuE,EAAE,gBAAiB3b,EAAEgT,WAC/Bg3E,KAAUruE,EAAE,oBAAqB3b,EAAEgT,WACnCi3E,KAAUtuE,EAAE,uBAAwB3b,EAAEgT,WACtCk3E,KAAUvuE,EAAE,wBAAyB3b,EAAEgT,WACvCm3E,KAAUxuE,EAAE,qBAAsB3b,EAAEgT,WACpCo3E,KAAUzuE,EAAE,wBAAyB3b,EAAEgT,WACvCq3E,MAAU1uE,EAAE,eAAgB3b,EAAEgT,WAC9Bs3E,MAAU3uE,EAAE,gBAAiB3b,EAAEgT,WAC/Bu3E,MAAU5uE,EAAE,qBAAsB3b,EAAEgT,WACpCw3E,MAAU7uE,EAAE,mBAAoB3b,EAAEgT,WAClCy3E,MAAU9uE,EAAE,2BAA4B3b,EAAEgT,WAC1C03E,MAAU/uE,EAAE,yBAA0B3b,EAAEgT,WACxC23E,MAAUhvE,EAAE,0BAA2B3b,EAAEgT,WACzC43E,MAAUjvE,EAAE,yBAA0B3b,EAAEgT,WACxC63E,MAAUlvE,EAAE,uBAAwB3b,EAAEgT,WACtC83E,MAAUnvE,EAAE,wBAAyB3b,EAAEgT,WACvC+3E,MAAUpvE,EAAE,sBAAuB3b,EAAEgT,WACrCg4E,MAAUrvE,EAAE,uBAAwB3b,EAAEgT,WACtCi4E,MAAUtvE,EAAE,aAAc3b,EAAEgT,WAC5Bk4E,MAAUvvE,EAAE,YAAa3b,EAAEgT,WAC3Bm4E,MAAUxvE,EAAE,uBAAwB3b,EAAEgT,WACtCo4E,MAAUzvE,EAAE,qBAAsB3b,EAAEgT,WACpCq4E,MAAU1vE,EAAE,YAAa3b,EAAEgT,WAC3Bs4E,MAAU3vE,EAAE,yBAA0B3b,EAAEgT,WACxCu4E,MAAU5vE,EAAE,uBAAwB3b,EAAEgT,WACtCw4E,MAAU7vE,EAAE,eAAgB3b,EAAEgT,WAC9By4E,MAAU9vE,EAAE,YAAa3b,EAAEgT,WAC3B04E,MAAU/vE,EAAE,mBAAoB3b,EAAEgT,WAClC24E,MAAUhwE,EAAE,kCAAmC3b,EAAEgT,WACjD44E,MAAUjwE,EAAE,gCAAiC3b,EAAEgT,WAC/C64E,MAAUlwE,EAAE,mBAAoB3b,EAAEgT,WAClC84E,MAAUnwE,EAAE,iBAAkB3b,EAAEgT,WAChC+4E,MAAUpwE,EAAE,YAAa3b,EAAEgT,WAC3Bg5E,MAAUrwE,EAAE,oBAAqB3b,EAAEgT,WACnCi5E,MAAUtwE,EAAE,oBAAqB3b,EAAEgT,WACnCk5E,MAAUvwE,EAAE,YAAa3b,EAAEgT,WAC3Bm5E,MAAUxwE,EAAE,kBAAmB3b,EAAEgT,WACjCo5E,MAAUzwE,EAAE,aAAc3b,EAAEgT,WAC5Bq5E,MAAU1wE,EAAE,qBAAsB3b,EAAEgT,WACpCs5E,MAAU3wE,EAAE,mBAAoB3b,EAAEgT,WAClCu5E,MAAU5wE,EAAE,0BAA2B3b,EAAEgT,WACzCw5E,MAAU7wE,EAAE,wBAAyB3b,EAAEgT,WACvCy5E,MAAU9wE,EAAE,YAAa3b,EAAEgT,WAC3B05E,MAAU/wE,EAAE,mBAAoB3b,EAAEgT,WAClC25E,MAAUhxE,EAAE,iBAAkB3b,EAAEgT,WAChC45E,MAAUjxE,EAAE,gBAAiB3b,EAAEgT,WAC/B65E,MAAUlxE,EAAE,cAAe3b,EAAEgT,WAC7B85E,MAAUnxE,EAAE,oBAAqB3b,EAAEgT,WACnC+5E,MAAUpxE,EAAE,kBAAmB3b,EAAEgT,WACjCg6E,MAAUrxE,EAAE,yBAA0B3b,EAAEgT,WACxCi6E,MAAUtxE,EAAE,uBAAwB3b,EAAEgT,WACtCk6E,MAAUvxE,EAAE,wBAAyB3b,EAAEgT,WACvCm6E,MAAUxxE,EAAE,sBAAuB3b,EAAEgT,WACrCo6E,MAAUzxE,EAAE,sBAAuB3b,EAAEgT,WACrCq6E,MAAU1xE,EAAE,oBAAqB3b,EAAEgT,WACnCs6E,MAAU3xE,EAAE,yBAA0B3b,EAAEgT,WACxCu6E,MAAU5xE,EAAE,uBAAwB3b,EAAEgT,WACtCw6E,MAAU7xE,EAAE,oBAAqB3b,EAAEgT,WACnCy6E,MAAU9xE,EAAE,kBAAmB3b,EAAEgT,WACjC06E,MAAU/xE,EAAE,mBAAoB3b,EAAEgT,WAClC26E,MAAUhyE,EAAE,iBAAkB3b,EAAEgT,WAChC46E,MAAUjyE,EAAE,iBAAkB3b,EAAEgT,WAChC66E,MAAUlyE,EAAE,eAAgB3b,EAAEgT,WAC9B86E,MAAUnyE,EAAE,4BAA6B3b,EAAEgT,WAC3C+6E,MAAUpyE,EAAE,8BAA+B3b,EAAEgT,WAC7Cg7E,MAAUryE,EAAE,4BAA6B3b,EAAEgT,WAC3Ci7E,MAAUtyE,EAAE,gCAAiC3b,EAAEgT,WAC/Ck7E,MAAUvyE,EAAE,8BAA+B3b,EAAEgT,WAC7Cm7E,MAAUxyE,EAAE,+BAAgC3b,EAAEgT,WAC9Co7E,MAAUzyE,EAAE,6BAA8B3b,EAAEgT,WAC5Cq7E,MAAU1yE,EAAE,8BAA+B3b,EAAEgT,WAC7Cs7E,MAAU3yE,EAAE,4BAA6B3b,EAAEgT,WAC3Cu7E,MAAU5yE,EAAE,6BAA8B3b,EAAEgT,WAC5Cw7E,MAAU7yE,EAAE,2BAA4B3b,EAAEgT,WAC1Cy7E,MAAU9yE,EAAE,yBAA0B3b,EAAEgT,WACxC07E,MAAU/yE,EAAE,gCAAiC3b,EAAEgT,WAC/C27E,MAAUhzE,EAAE,0BAA2B3b,EAAEgT,WACzC47E,MAAUjzE,EAAE,8BAA+B3b,EAAEgT,WAC7C67E,MAAUlzE,EAAE,4BAA6B3b,EAAEgT,WAC3C87E,MAAUnzE,EAAE,0BAA2B3b,EAAEgT,WACzC+7E,MAAUpzE,EAAE,2BAA4B3b,EAAEgT,WAC1Cg8E,MAAUrzE,EAAE,uBAAwB3b,EAAEgT,WACtCi8E,MAAUtzE,EAAE,0BAA2B3b,EAAEgT,WACzCk8E,MAAUvzE,EAAE,oBAAqB3b,EAAEgT,WACnCm8E,MAAUxzE,EAAE,YAAa3b,EAAEgT,WAC3Bo8E,MAAUzzE,EAAE,YAAa3b,EAAEgT,WAC3Bq8E,MAAU1zE,EAAE,oCAAqC3b,EAAEgT,WACnDs8E,MAAU3zE,EAAE,kCAAmC3b,EAAEgT,WACjDu8E,MAAU5zE,EAAE,kBAAmB3b,EAAEgT,WACjCw8E,MAAU7zE,EAAE,gBAAiB3b,EAAEgT,WAC/By8E,MAAU9zE,EAAE,cAAe3b,EAAEgT,WAC7B08E,MAAU/zE,EAAE,iBAAkB3b,EAAEgT,WAChC28E,MAAUh0E,EAAE,eAAgB3b,EAAEgT,WAC9B48E,MAAUj0E,EAAE,kBAAmB3b,EAAEgT,WACjC68E,MAAUl0E,EAAE,gBAAiB3b,EAAEgT,WAC/B88E,MAAUn0E,EAAE,mBAAoB3b,EAAEgT,WAClC+8E,MAAUp0E,EAAE,iBAAkB3b,EAAEgT,WAChCg9E,MAAUr0E,EAAE,oBAAqB3b,EAAEgT,WACnCi9E,MAAUt0E,EAAE,kBAAmB3b,EAAEgT,WACjCk9E,MAAUv0E,EAAE,kBAAmB3b,EAAEgT,WACjCm9E,MAAUx0E,EAAE,sBAAuB3b,EAAEgT,WACrCo9E,MAAUz0E,EAAE,oBAAqB3b,EAAEgT,WACnCq9E,MAAU10E,EAAE,wBAAyB3b,EAAEgT,WACvCs9E,MAAU30E,EAAE,0BAA2B3b,EAAEgT,WACzCu9E,MAAU50E,EAAE,wBAAyB3b,EAAEgT,WACvCw9E,MAAU70E,EAAE,mCAAoC3b,EAAEgT,WAClDy9E,MAAU90E,EAAE,iCAAkC3b,EAAEgT,WAChD09E,MAAU/0E,EAAE,iCAAkC3b,EAAEgT,WAChD29E,MAAUh1E,EAAE,+BAAgC3b,EAAEgT,WAC9C49E,MAAUj1E,EAAE,wBAAyB3b,EAAEgT,WACvC69E,MAAUl1E,EAAE,sBAAuB3b,EAAEgT,WACrC89E,MAAUn1E,EAAE,yBAA0B3b,EAAEgT,WACxC+9E,MAAUp1E,EAAE,uBAAwB3b,EAAEgT,WACtCg+E,MAAUr1E,EAAE,gBAAiB3b,EAAEgT,WAC/Bi+E,MAAUt1E,EAAE,uBAAwB3b,EAAEgT,WACtCk+E,MAAUv1E,EAAE,qBAAsB3b,EAAEgT,WACpCm+E,MAAUx1E,EAAE,8BAA+B3b,EAAEgT,WAC7Co+E,MAAUz1E,EAAE,4BAA6B3b,EAAEgT,WAC3Cq+E,MAAU11E,EAAE,eAAgB3b,EAAEgT,WAC9Bs+E,MAAU31E,EAAE,sBAAuB3b,EAAEgT,WACrCu+E,MAAU51E,EAAE,oBAAqB3b,EAAEgT,WACnCw+E,MAAU71E,EAAE,uBAAwB3b,EAAEgT,WACtCy+E,MAAU91E,EAAE,qBAAsB3b,EAAEgT,WACpC0+E,MAAU/1E,EAAE,qBAAsB3b,EAAEgT,WACpC2+E,MAAUh2E,EAAE,mBAAoB3b,EAAEgT,WAClC4+E,MAAUj2E,EAAE,gBAAiB3b,EAAEgT,WAC/B6+E,MAAUl2E,EAAE,kBAAmB3b,EAAEgT,WACjC8+E,MAAUn2E,EAAE,kBAAmB3b,EAAEgT,WACjC++E,MAAUp2E,EAAE,uBAAwB3b,EAAEgT,WACtCg/E,MAAUr2E,EAAE,qBAAsB3b,EAAEgT,WACpCi/E,MAAUt2E,EAAE,oBAAqB3b,EAAEgT,WACnCk/E,MAAUv2E,EAAE,kBAAmB3b,EAAEgT,WACjCm/E,MAAUx2E,EAAE,kBAAmB3b,EAAEgT,WACjCo/E,MAAUz2E,EAAE,gBAAiB3b,EAAEgT,WAC/Bq/E,MAAU12E,EAAE,sBAAuB3b,EAAEgT,WACrCs/E,MAAU32E,EAAE,oBAAqB3b,EAAEgT,WACnCu/E,MAAU52E,EAAE,qBAAsB3b,EAAEgT,WACpCw/E,MAAU72E,EAAE,mBAAoB3b,EAAEgT,WAClCy/E,MAAU92E,EAAE,oBAAqB3b,EAAEgT,WACnC0/E,MAAU/2E,EAAE,kBAAmB3b,EAAEgT,WACjC2/E,MAAUh3E,EAAE,0BAA2B3b,EAAEgT,WACzC4/E,MAAUj3E,EAAE,wBAAyB3b,EAAEgT,WACvC6/E,MAAUl3E,EAAE,WAAY3b,EAAEgT,WAC1B8/E,MAAUn3E,EAAE,iBAAkB3b,EAAEgT,WAChC+/E,MAAUp3E,EAAE,eAAgB3b,EAAEgT,WAC9BggF,MAAUr3E,EAAE,cAAe3b,EAAEgT,WAC7BigF,MAAUt3E,EAAE,0BAA2B3b,EAAEgT,WACzCkgF,MAAUv3E,EAAE,oBAAqB3b,EAAEgT,WACnCmgF,MAAUx3E,EAAE,kBAAmB3b,EAAEgT,WACjCogF,MAAUz3E,EAAE,8BAA+B3b,EAAEgT,WAC7CqgF,MAAU13E,EAAE,iCAAkC3b,EAAEgT,WAChDsgF,MAAU33E,EAAE,+BAAgC3b,EAAEgT,WAC9CugF,MAAU53E,EAAE,2BAA4B3b,EAAEgT,WAC1CwgF,MAAU73E,EAAE,yBAA0B3b,EAAEgT,WACxCygF,MAAU93E,EAAE,uBAAwB3b,EAAEgT,WACtC0gF,MAAU/3E,EAAE,mBAAoB3b,EAAEgT,WAClC2gF,MAAUh4E,EAAE,gCAAiC3b,EAAEgT,WAC/C4gF,MAAUj4E,EAAE,mBAAoB3b,EAAEgT,WAClC6gF,MAAUl4E,EAAE,iBAAkB3b,EAAEgT,WAChC8gF,MAAUn4E,EAAE,gBAAiB3b,EAAEgT,WAC/B+gF,MAAUp4E,EAAE,cAAe3b,EAAEgT,WAC7BghF,MAAUr4E,EAAE,kBAAmB3b,EAAEgT,WACjCihF,MAAUt4E,EAAE,WAAY3b,EAAEgT,WAC1BkhF,MAAUv4E,EAAE,wBAAyB3b,EAAEgT,WACvCmhF,MAAUx4E,EAAE,sBAAuB3b,EAAEgT,WACrCohF,MAAUz4E,EAAE,kBAAmB3b,EAAEgT,WACjCqhF,MAAU14E,EAAE,eAAgB3b,EAAEgT,WAC9BshF,MAAU34E,EAAE,+BAAgC3b,EAAEgT,WAC9CuhF,MAAU54E,EAAE,6BAA8B3b,EAAEgT,WAC5CwhF,MAAU74E,EAAE,yBAA0B3b,EAAEgT,WACxCyhF,MAAU94E,EAAE,wBAAyB3b,EAAEgT,WACvC0hF,MAAU/4E,EAAE,2BAA4B3b,EAAEgT,WAC1C2hF,MAAUh5E,EAAE,yBAA0B3b,EAAEgT,WACxC4hF,MAAUj5E,EAAE,gBAAiB3b,EAAEgT,WAC/B6hF,MAAUl5E,EAAE,qCAAsC3b,EAAEgT,WACpD8hF,MAAUn5E,EAAE,mCAAoC3b,EAAEgT,WAClD+hF,MAAUp5E,EAAE,+BAAgC3b,EAAEgT,WAC9CgiF,MAAUr5E,EAAE,2BAA4B3b,EAAEgT,WAC1CiiF,MAAUt5E,EAAE,yBAA0B3b,EAAEgT,WACxCkiF,MAAUv5E,EAAE,0BAA2B3b,EAAEgT,WACzCmiF,MAAUx5E,EAAE,wBAAyB3b,EAAEgT,WACvCoiF,MAAUz5E,EAAE,sBAAuB3b,EAAEgT,WACrCqiF,MAAU15E,EAAE,oBAAqB3b,EAAEgT,WACnCsiF,MAAU35E,EAAE,qBAAsB3b,EAAEgT,WACpCuiF,MAAU55E,EAAE,mBAAoB3b,EAAEgT,WAClCwiF,MAAU75E,EAAE,kBAAmB3b,EAAEgT,WACjCyiF,MAAU95E,EAAE,YAAa3b,EAAEgT,WAC3B0iF,MAAU/5E,EAAE,wBAAyB3b,EAAEgT,WACvC2iF,MAAUh6E,EAAE,sBAAuB3b,EAAEgT,WACrC4iF,MAAUj6E,EAAE,0BAA2B3b,EAAEgT,WACzC6iF,MAAUl6E,EAAE,kCAAmC3b,EAAEgT,WACjD8iF,MAAUn6E,EAAE,gCAAiC3b,EAAEgT,WAC/C+iF,MAAUp6E,EAAE,yBAA0B3b,EAAEgT,WACxCgjF,MAAUr6E,EAAE,uBAAwB3b,EAAEgT,WACtCijF,MAAUt6E,EAAE,gCAAiC3b,EAAEgT,WAC/CkjF,MAAUv6E,EAAE,8BAA+B3b,EAAEgT,WAC7CmjF,MAAUx6E,EAAE,WAAY3b,EAAEgT,WAC1BojF,MAAUz6E,EAAE,iBAAkB3b,EAAEgT,WAChCqjF,MAAU16E,EAAE,eAAgB3b,EAAEgT,WAC9BsjF,MAAU36E,EAAE,oCAAqC3b,EAAEgT,WACnDujF,MAAU56E,EAAE,0BAA2B3b,EAAEgT,WACzCwjF,MAAU76E,EAAE,wBAAyB3b,EAAEgT,WACvCyjF,MAAU96E,EAAE,oBAAqB3b,EAAEgT,WACnC0jF,MAAU/6E,EAAE,oBAAqB3b,EAAEgT,WACnC2jF,MAAUh7E,EAAE,kBAAmB3b,EAAEgT,WACjC4jF,MAAUj7E,EAAE,oBAAqB3b,EAAEgT,WACnC6jF,MAAUl7E,EAAE,kBAAmB3b,EAAEgT,WACjC8jF,MAAUn7E,EAAE,uBAAwB3b,EAAEgT,WACtC+jF,MAAUp7E,EAAE,qBAAsB3b,EAAEgT,WACpCgkF,MAAUr7E,EAAE,cAAe3b,EAAEgT,WAC7BikF,MAAUt7E,EAAE,eAAgB3b,EAAEgT,WAC9BkkF,MAAUv7E,EAAE,iBAAkB3b,EAAEgT,WAChCmkF,MAAUx7E,EAAE,qBAAsB3b,EAAEgT,WACpCokF,MAAUz7E,EAAE,mBAAoB3b,EAAEgT,WAClCqkF,MAAU17E,EAAE,eAAgB3b,EAAEgT,WAC9BskF,MAAU37E,EAAE,oBAAqB3b,EAAEgT,WACnCukF,MAAU57E,EAAE,kBAAmB3b,EAAEgT,WACjCwkF,MAAU77E,EAAE,sBAAuB3b,EAAEgT,WACrCykF,MAAU97E,EAAE,oBAAqB3b,EAAEgT,WACnC0kF,MAAU/7E,EAAE,gBAAiB3b,EAAEgT,WAC/B2kF,MAAUh8E,EAAE,6BAA8B3b,EAAEgT,WAC5C4kF,MAAUj8E,EAAE,2BAA4B3b,EAAEgT,WAC1C6kF,MAAUl8E,EAAE,uBAAwB3b,EAAEgT,WACtC8kF,MAAUn8E,EAAE,qBAAsB3b,EAAEgT,WACpC+kF,MAAUp8E,EAAE,mBAAoB3b,EAAEgT,WAClCglF,MAAUr8E,EAAE,2BAA4B3b,EAAEgT,WAC1CilF,MAAUt8E,EAAE,yBAA0B3b,EAAEgT,WACxCklF,MAAUv8E,EAAE,wBAAyB3b,EAAEgT,WACvCmlF,MAAUx8E,EAAE,yBAA0B3b,EAAEgT,WACxColF,MAAUz8E,EAAE,yBAA0B3b,EAAEgT,WACxCqlF,MAAU18E,EAAE,YAAa3b,EAAEgT,WAC3Bzc,OAAUolB,EAAE,GAAI3b,EAAEgT,WAGnB,IAAI0B,UAAW3L,UAAU0K,eAAgB,IAGzC,IAAI6mE,gBACHzlF,GAAU8mB,EAAE,WAAY3b,EAAE6uC,gBAC1B/5C,GAAU6mB,EAAE,WAAY3b,EAAE4uC,gBAC1B/yB,GAAUF,EAAE,UAAW3b,EAAE2qD,eACzB51D,GAAU4mB,EAAE,MAAO3b,EAAEgzB,WACrBh+B,IAAU2mB,EAAE,MAAO3b,EAAE28B,WACrBznC,IAAUymB,EAAE,YAAa3b,EAAE87B,iBAC3B3mC,IAAUwmB,EAAE,WAAY3b,EAAEi8B,gBAC1B7mC,IAAUumB,EAAE,gBAAiB3b,EAAEk8B,qBAC/B7mC,IAAUsmB,EAAE,cAAe3b,EAAEm8B,mBAC7B7mC,IAAUqmB,EAAE,YAAa3b,EAAE+7B,iBAC3BxmC,IAAUomB,EAAE,WAAY3b,EAAEg8B,gBAC1BxmC,IAAUmmB,EAAE,UAAW3b,EAAE89B,eACzBroC,IAAUkmB,EAAE,WAAY3b,EAAEw9B,gBAC1B9nC,IAAUimB,EAAE,SAAU3b,EAAEk9B,cACxBvnC,IAAUgmB,EAAE,SAAU3b,EAAE+8B,cACxBllB,IAAU8D,EAAE,cAAe3b,EAAE64B,mBAC7B6zB,IAAU/wC,EAAE,MAAO3b,EAAEs4B,WACrBq0B,IAAUhxC,EAAE,aAAc3b,EAAEy+B,kBAC5B1iB,IAAUJ,EAAE,qBAAsB3b,EAAE2+B,0BACpC3iB,IAAUL,EAAE,uBAAwB3b,EAAE4+B,4BACtC3iB,IAAUN,EAAE,OAAQ3b,EAAE65B,YACtB/hB,IAAU6D,EAAE,YAAa3b,EAAE6+B,iBAC3BhiB,IAAUlB,EAAE,WAAY3b,EAAEu8B,gBAC1B4rB,IAAUxsC,EAAE,aAAc3b,EAAE83B,kBAC5BhiC,IAAU6lB,EAAE,aAAc3b,EAAEq9B,kBAC5BtnC,IAAU4lB,EAAE,cAAe3b,EAAEg+B,mBAC7BhoC,IAAU2lB,EAAE,YAAa3b,EAAEs+B,iBAC3BxhB,IAAUnB,EAAE,eAAgB3b,EAAE47B,oBAC9B5jB,IAAU2D,EAAE,cAAe3b,EAAE09B,mBAC7BzlB,IAAU0D,EAAE,YAAa3b,EAAEy9B,iBAC3BtnC,IAAUwlB,EAAE,WAAY3b,EAAEk2C,gBAC1B7/C,IAAUslB,EAAE,OAAQ3b,EAAE81B,YACtB+2B,IAAUlxC,EAAE,YAAa3b,EAAE29B,iBAC3B4qB,IAAU5sC,EAAE,WAAY3b,EAAE8+B,gBAC1B5hB,IAAUvB,EAAE,UAAW3b,EAAE80B,eACzB3X,IAAUxB,EAAE,SAAU3b,EAAE07B,cACxBgtB,IAAU/sC,EAAE,OAAQ3b,EAAE++B,YACtB3hB,IAAUzB,EAAE,WAAY3b,EAAEq8B,gBAC1B2S,IAAUrzB,EAAE,MAAO3b,EAAEg/B,WACrBouB,IAAUzxC,EAAE,OAAQ3b,EAAEi/B,YACtB5hB,IAAU1B,EAAE,UAAW3b,EAAEk/B,eACzB5hB,IAAU3B,EAAE,WAAY3b,EAAEm/B,gBAC1BmuB,IAAU3xC,EAAE,cAAe3b,EAAEw8B,mBAC7BwtB,IAAUruC,EAAE,MAAO3b,EAAEo/B,WACrB3hB,IAAU9B,EAAE,MAAO3b,EAAEq/B,WACrB8qB,IAAUxuC,EAAE,cAAe3b,EAAEs/B,mBAC7B+qB,IAAU1uC,EAAE,cAAe3b,EAAEmzB,mBAC7Bo3B,IAAU5uC,EAAE,MAAO3b,EAAEi6B,WACrBwzB,IAAU9xC,EAAE,WAAY3b,EAAEu/B,gBAC1BmuB,IAAU/xC,EAAE,iBAAkB3b,EAAEo8B,sBAChCqsB,IAAU9sC,EAAE,WAAY3b,EAAEw/B,gBAC1BmpB,IAAUhtC,EAAE,OAAQ3b,EAAEy/B,YACtBqpB,IAAUntC,EAAE,aAAc3b,EAAEu9B,kBAC5BitB,KAAU7uC,EAAE,UAAW3b,EAAEw7B,eACzByT,KAAUtzB,EAAE,OAAQ3b,EAAEo3B,YACtB8X,KAAUvzB,EAAE,SAAU3b,EAAE0/B,cACxByP,KAAUxzB,EAAE,UAAW3b,EAAEg9B,eACzBwxB,KAAU7yC,EAAE,UAAW3b,EAAEi9B,eACzBwxB,KAAU9yC,EAAE,UAAW3b,EAAEw+B,eACzBkwB,KAAU/yC,EAAE,cAAe3b,EAAEszB,mBAC7B8b,KAAUzzB,EAAE,eAAgB3b,EAAE0+B,oBAC9BqwB,KAAUpzC,EAAE,UAAW3b,EAAE+6B,eACzB8jC,KAAUljD,EAAE,UAAW3b,EAAEm9B,eACzB+xB,KAAUvzC,EAAE,OAAQ3b,EAAE2/B,YACtByvB,KAAUzzC,EAAE,UAAW3b,EAAEk7B,eACzBu0B,KAAU9zC,EAAE,OAAQ3b,EAAE4/B,YACtB8vB,KAAU/zC,EAAE,MAAO3b,EAAE6/B,WACrB8vB,KAAUh0C,EAAE,SAAU3b,EAAE8/B,cACxBg/B,KAAUnjD,EAAE,cAAe3b,EAAE+/B,mBAC7B6vB,KAAUj0C,EAAE,aAAc3b,EAAEggC,kBAC5B++B,KAAUpjD,EAAE,sBAAuB3b,EAAE67B,2BACrCmjC,KAAUrjD,EAAE,iBAAkB3b,EAAEigC,sBAChCg/B,KAAUtjD,EAAE,aAAc3b,EAAEkgC,kBAC5Bg/B,KAAUvjD,EAAE,MAAO3b,EAAEm+B,WACrBmR,KAAU3zB,EAAE,QAAS3b,EAAEmgC,aACvBowB,KAAU50C,EAAE,UAAW3b,EAAEogC,eACzBowB,KAAU70C,EAAE,WAAY3b,EAAEqgC,gBAC1B++B,KAAUzjD,EAAE,SAAU3b,EAAEsgC,cACxBmP,KAAU9zB,EAAE,OAAQ3b,EAAEugC,YACtBmP,KAAU/zB,EAAE,OAAQ3b,EAAEwgC,YACtB8+B,KAAU3jD,EAAE,QAAS3b,EAAEygC,aACvB8+B,KAAU5jD,EAAE,OAAQ3b,EAAE0gC,YACtB8+B,KAAU7jD,EAAE,OAAQ3b,EAAE2gC,YACtB++B,KAAU/jD,EAAE,WAAY3b,EAAE4gC,gBAC1B6vB,KAAU90C,EAAE,YAAa3b,EAAE6gC,iBAC3B+vB,KAAUj1C,EAAE,QAAS3b,EAAEy2B,aACvBo6B,KAAUl1C,EAAE,WAAY3b,EAAE8gC,gBAC1BkwB,KAAUr1C,EAAE,MAAO3b,EAAEs9B,WACrB8zB,KAAUz1C,EAAE,OAAQ3b,EAAE+gC,YACtBswB,KAAU11C,EAAE,OAAQ3b,EAAEghC,YACtBswB,KAAU31C,EAAE,QAAS3b,EAAEihC,aACvBswB,KAAU51C,EAAE,QAAS3b,EAAEkhC,aACvBswB,KAAU71C,EAAE,QAAS3b,EAAEmhC,aACvBswB,KAAU91C,EAAE,SAAU3b,EAAEq+B,cACxBqzB,KAAU/1C,EAAE,QAAS3b,EAAEohC,aACvBwO,KAAUj0B,EAAE,QAAS3b,EAAEqhC,aACvBs+B,KAAUhkD,EAAE,WAAY3b,EAAEshC,gBAC1BqwB,KAAUh2C,EAAE,QAAS3b,EAAEuhC,aACvBqwB,KAAUj2C,EAAE,QAAS3b,EAAEwhC,aACvBqwB,KAAUl2C,EAAE,QAAS3b,EAAEyhC,aACvBqwB,KAAUn2C,EAAE,aAAc3b,EAAE0hC,kBAC5BqwB,KAAUp2C,EAAE,SAAU3b,EAAE2hC,cACxBqwB,KAAUr2C,EAAE,SAAU3b,EAAE4hC,cACxBjkB,KAAUhC,EAAE,aAAc3b,EAAE6hC,kBAC5BswB,KAAUx2C,EAAE,SAAU3b,EAAE8hC,cACxBlkB,KAAUjC,EAAE,QAAS3b,EAAE+hC,aACvBqwB,KAAUz2C,EAAE,YAAa3b,EAAEgiC,iBAC3BnkB,KAAUlC,EAAE,WAAY3b,EAAEiiC,gBAC1BqwB,KAAU32C,EAAE,eAAgB3b,EAAEkiC,oBAC9B09B,KAAUjkD,EAAE,kBAAmB3b,EAAEk+B,uBACjC2R,KAAUl0B,EAAE,gBAAiB3b,EAAEmiC,qBAC/BqwB,KAAU72C,EAAE,KAAM3b,EAAEk3B,UACpBu7B,KAAU92C,EAAE,eAAgB3b,EAAEkzB,oBAC9Bw/B,KAAU/2C,EAAE,eAAgB3b,EAAEo9B,oBAC9Bu1B,KAAUh3C,EAAE,OAAQ3b,EAAEoiC,YACtBywB,KAAUl3C,EAAE,aAAc3b,EAAE85B,kBAC5BkmC,KAAUrkD,EAAE,QAAS3b,EAAEqiC,aACvB69B,KAAUvkD,EAAE,kBAAmB3b,EAAEsiC,uBACjC69B,KAAUxkD,EAAE,aAAc3b,EAAEuiC,kBAC5B69B,KAAUzkD,EAAE,sBAAuB3b,EAAEwiC,2BACrC69B,KAAU1kD,EAAE,eAAgB3b,EAAEyiC,oBAC9BqwB,KAAUn3C,EAAE,SAAU3b,EAAE0iC,cACxB49B,KAAU3kD,EAAE,OAAQ3b,EAAE2iC,YACtB49B,KAAU5kD,EAAE,SAAU3b,EAAE4iC,cACxB49B,KAAU7kD,EAAE,QAAS3b,EAAE6iC,aACvB49B,KAAU9kD,EAAE,QAAS3b,EAAE8iC,aACvB49B,KAAU/kD,EAAE,SAAU3b,EAAE+iC,cACxB49B,KAAUhlD,EAAE,WAAY3b,EAAEgjC,gBAC1B49B,KAAUjlD,EAAE,SAAU3b,EAAEijC,cACxB+vB,KAAUr3C,EAAE,SAAU3b,EAAEkjC,cACxBgwB,KAAUv3C,EAAE,WAAY3b,EAAEmjC,gBAC1BgwB,KAAUx3C,EAAE,MAAO3b,EAAEyzB,WACrB2/B,KAAUz3C,EAAE,WAAY3b,EAAE+1B,gBAC1B7d,KAAUyD,EAAE,SAAU3b,EAAE6zB,cACxBy/B,KAAU33C,EAAE,SAAU3b,EAAEojC,cACxBmwB,KAAU53C,EAAE,YAAa3b,EAAEqjC,iBAC3BwxB,KAAUl5C,EAAE,SAAU3b,EAAEsjC,cACxBsyB,KAAUj6C,EAAE,YAAa3b,EAAEujC,iBAC3BsyB,KAAUl6C,EAAE,UAAW3b,EAAEwjC,eACzBwyB,KAAUr6C,EAAE,aAAc3b,EAAEyjC,kBAC5Bq+B,KAAUnmD,EAAE,UAAW3b,EAAEi+B,eACzBi4B,KAAUv6C,EAAE,cAAe3b,EAAE0jC,mBAC7ByyB,KAAUx6C,EAAE,SAAU3b,EAAE2jC,cACxByyB,KAAUz6C,EAAE,UAAW3b,EAAE4jC,eACzB+yB,KAAUh7C,EAAE,WAAY3b,EAAE6jC,gBAC1Bq+B,KAAUvmD,EAAE,YAAa3b,EAAE8jC,iBAC3Bm7C,KAAUtjE,EAAE,aAAc3b,EAAE+jC,kBAC5Bq+B,KAAUzmD,EAAE,eAAgB3b,EAAEgkC,oBAC9Bq+B,KAAU1mD,EAAE,aAAc3b,EAAEikC,kBAC5B2yB,KAAUj7C,EAAE,iBAAkB3b,EAAEkkC,sBAChCo+B,KAAU3mD,EAAE,eAAgB3b,EAAEmkC,oBAC9B0yB,KAAUl7C,EAAE,cAAe3b,EAAEokC,mBAC7B0yB,KAAUn7C,EAAE,aAAc3b,EAAEqkC,kBAC5Bk+B,KAAU5mD,EAAE,aAAc3b,EAAEskC,kBAC5BxmB,KAAUnC,EAAE,OAAQ3b,EAAEukC,YACtB4yB,KAAUx7C,EAAE,WAAY3b,EAAEu+B,gBAC1BukC,KAAUnnD,EAAE,MAAO3b,EAAEy8B,WACrB2iD,KAAUzjE,EAAE,OAAQ3b,EAAEwkC,YACtB8zD,KAAU38E,EAAE,QAAS3b,EAAEykC,aACvB46C,KAAU1jE,EAAE,UAAW3b,EAAE0kC,eACzB46C,KAAU3jE,EAAE,UAAW3b,EAAE2kC,eACzB46C,KAAU5jE,EAAE,WAAY3b,EAAE4kC,gBAC1B46C,KAAU7jE,EAAE,UAAW3b,EAAE6kC,eACzB46C,KAAU9jE,EAAE,SAAU3b,EAAE8kC,cACxB46C,KAAU/jE,EAAE,SAAU3b,EAAE+kC,cACxB40B,KAAUh+C,EAAE,YAAa3b,EAAEglC,iBAC3Bg7C,KAAUrkE,EAAE,iBAAkB3b,EAAEilC,sBAChCg7C,KAAUtkE,EAAE,eAAgB3b,EAAEklC,oBAC9Bg7C,KAAUvkE,EAAE,cAAe3b,EAAEmlC,mBAC7Bg7C,KAAUxkE,EAAE,MAAO3b,EAAEolC,WACrBw0B,KAAUj+C,EAAE,UAAW3b,EAAEy3B,eACzBoiC,KAAUl+C,EAAE,WAAY3b,EAAE49B,gBAC1Bk8B,KAAUn+C,EAAE,UAAW3b,EAAEqlC,eACzB00B,KAAUp+C,EAAE,KAAM3b,EAAEslC,UACpB00B,KAAUr+C,EAAE,OAAQ3b,EAAEulC,YACtB40B,KAAUx+C,EAAE,UAAW3b,EAAEwlC,eACzB40B,KAAUz+C,EAAE,MAAO3b,EAAEm6B,WACrBkgC,KAAU1+C,EAAE,aAAc3b,EAAE+9B,kBAC5Bu8B,KAAU3+C,EAAE,QAAS3b,EAAE26B,aACvB4/B,KAAU5+C,EAAE,MAAO3b,EAAEylC,WACrB+0B,KAAU7+C,EAAE,WAAY3b,EAAE0lC,mBAC1B+0B,KAAU9+C,EAAE,YAAa3b,EAAE2lC,iBAC3B+0B,KAAU/+C,EAAE,eAAgB3b,EAAE69B,oBAC9B88B,KAAUh/C,EAAE,aAAc3b,EAAE4lC,kBAC5Bg1B,KAAUj/C,EAAE,KAAM3b,EAAE6lC,UACpBi1B,KAAUn/C,EAAE,aAAc3b,EAAE48B,kBAC5Bm+B,KAAUp/C,EAAE,WAAY3b,EAAEs0B,eAAgBn4B,EAAE,GAC5C6+D,KAAUr/C,EAAE,UAAW3b,EAAE08B,eACzBglD,KAAU/lE,EAAE,aAAc3b,EAAEq2B,kBAC5BsrD,KAAUhmE,EAAE,QAAS3b,EAAE27B,aACvBkmD,KAAUlmE,EAAE,SAAU3b,EAAEs3B,cACxBwqD,KAAUnmE,EAAE,QAAS3b,EAAEi2B,aACvBunC,KAAU7hD,EAAE,UAAW3b,EAAEq3B,eACzBqmC,KAAU/hD,EAAE,SAAU3b,EAAEo+B,cACxBu/B,KAAUhiD,EAAE,MAAO3b,EAAEg0B,WACrB8pC,KAAUniD,EAAE,QAAS3b,EAAE8lC,aACvBi4B,KAAUpiD,EAAE,QAAS3b,EAAEm5B,aACvBglC,KAAUxiD,EAAE,mBAAoB3b,EAAEu0B,wBAClC0vD,KAAUtoE,EAAE,QAAS3b,EAAE+lC,aACvBu+C,KAAU3oE,EAAE,UAAW3b,EAAEy7B,eACzBssD,KAAUpsE,EAAE,KAAM3b,EAAEs2B,UACpB4yD,KAAUvtE,EAAE,QAAS3b,EAAEs7B,aACvBuwD,MAAUlwE,EAAE,UAAW3b,EAAEgmC,eACzBmmD,MAAUxwE,EAAE,SAAU3b,EAAEk2B,cACxB23D,MAAUlyE,EAAE,kBAAmB3b,EAAEimC,uBACjCsyD,MAAU58E,EAAE,UAAW3b,EAAE+4B,eACzBs6D,MAAU13E,EAAE,eAAgB3b,EAAE66B,oBAC9By4D,MAAU33E,EAAE,SAAU3b,EAAEkmC,cACxBqtD,MAAU53E,EAAE,WAAY3b,EAAEmmC,gBAC1BqtD,MAAU73E,EAAE,aAAc3b,EAAEomC,kBAC5BqtD,MAAU93E,EAAE,YAAa3b,EAAEqmC,iBAC3BqtD,MAAU/3E,EAAE,SAAU3b,EAAEsmC,cACxBqtD,MAAUh4E,EAAE,OAAQ3b,EAAEumC,YACtBqtD,MAAUj4E,EAAE,OAAQ3b,EAAEwmC,YACtBqtD,MAAUl4E,EAAE,WAAY3b,EAAEymC,gBAC1BqtD,MAAUn4E,EAAE,MAAO3b,EAAEgzB,WACrB+gE,MAAUp4E,EAAE,YAAa3b,EAAE0mC,iBAC3B8xD,MAAU78E,EAAE,OAAQ3b,EAAE2mC,YACtBqtD,MAAUr4E,EAAE,WAAY3b,EAAE4mC,gBAC1B6xD,MAAU98E,EAAE,OAAQ3b,EAAE6mC,YACtB6xD,MAAU/8E,EAAE,SAAU3b,EAAE8mC,cACxB6xD,MAAUh9E,EAAE,UAAW3b,EAAE+mC,eACzB6xD,MAAUj9E,EAAE,YAAa3b,EAAEgnC,iBAC3B6xD,MAAUl9E,EAAE,cAAe3b,EAAEinC,mBAC7BgtD,MAAUt4E,EAAE,eAAgB3b,EAAEknC,oBAC9B2wD,MAAUl8E,EAAE,eAAgB3b,EAAEmnC,oBAC9B2wD,MAAUn8E,EAAE,aAAc3b,EAAEonC,kBAC5B2wD,MAAUp8E,EAAE,aAAc3b,EAAEqnC,kBAC5B2wD,MAAUr8E,EAAE,WAAY3b,EAAEsnC,gBAC1B2wD,MAAUt8E,EAAE,cAAe3b,EAAEunC,mBAC7B2wD,MAAUv8E,EAAE,YAAa3b,EAAEwnC,iBAC3B2wD,MAAUx8E,EAAE,SAAU3b,EAAEynC,cACxB2wD,MAAUz8E,EAAE,QAAS3b,EAAE0nC,aACvB2wD,MAAU18E,EAAE,aAAc3b,EAAE2nC,kBAC5BmxD,MAAUn9E,EAAE,iBAAkB3b,EAAE4nC,sBAChCmxD,MAAUp9E,EAAE,cAAe3b,EAAE6nC,mBAC7BmxD,MAAUr9E,EAAE,WAAY3b,EAAE8nC,gBAC1BmxD,MAAUt9E,EAAE,UAAW3b,EAAE+nC,cAAe5rC,EAAE,IAC1C+8F,MAAUv9E,EAAE,SAAU3b,EAAEgoC,cACxBmxD,MAAUx9E,EAAE,QAAS3b,EAAEioC,aACvBmxD,MAAUz9E,EAAE,YAAa3b,EAAEkoC,iBAC3BmxD,MAAU19E,EAAE,UAAW3b,EAAE68B,eACzBy8D,MAAU39E,EAAE,OAAQ3b,EAAEmoC,YACtBoxD,MAAU59E,EAAE,aAAc3b,EAAEooC,kBAC5BoxD,MAAU79E,EAAE,qBAAsB3b,EAAEqoC,0BACpCoxD,MAAU99E,EAAE,YAAa3b,EAAEsoC,iBAC3BoxD,MAAU/9E,EAAE,YAAa3b,EAAEuoC,iBAC3BoxD,MAAUh+E,EAAE,YAAa3b,EAAEwoC,iBAC3BoxD,MAAUj+E,EAAE,iBAAkB3b,EAAEyoC,sBAChCoxD,MAAUl+E,EAAE,gBAAiB3b,EAAE0oC,qBAC/BoxD,MAAUn+E,EAAE,QAAS3b,EAAE2oC,aACvBoxD,MAAUp+E,EAAE,SAAU3b,EAAE4oC,cACxBoxD,MAAUr+E,EAAE,YAAa3b,EAAE6oC,iBAC3BoxD,MAAUt+E,EAAE,YAAa3b,EAAE8oC,iBAC3BoxD,MAAUv+E,EAAE,OAAQ3b,EAAE+oC,YACtBoxD,MAAUx+E,EAAE,OAAQ3b,EAAEgpC,YACtBoxD,MAAUz+E,EAAE,QAAS3b,EAAEm7B,YAAah/B,EAAE,IACtCk+F,MAAU1+E,EAAE,QAAS3b,EAAE0/C,YAAavjD,EAAE,IACtCm+F,MAAU3+E,EAAE,eAAgB3b,EAAEipC,oBAC9BsxD,MAAU5+E,EAAE,gBAAiB3b,EAAEkpC,qBAC/BsxD,MAAU7+E,EAAE,UAAW3b,EAAEmpC,eACzBsxD,MAAU9+E,EAAE,SAAU3b,EAAEopC,cACxBsxD,MAAU/+E,EAAE,WAAY3b,EAAEqpC,gBAC1BsxD,MAAUh/E,EAAE,SAAU3b,EAAEspC,cACxBsxD,MAAUj/E,EAAE,UAAW3b,EAAEupC,eACzBsxD,MAAUl/E,EAAE,SAAU3b,EAAEwpC,cACxBsxD,MAAUn/E,EAAE,MAAO3b,EAAEypC,WACrBsxD,MAAUp/E,EAAE,MAAO3b,EAAE0pC,WACrBsxD,MAAUr/E,EAAE,WAAY3b,EAAEs8B,eAAgBngC,EAAE,IAC5C8+F,MAAUt/E,EAAE,MAAO3b,EAAE2pC,WACrBuxD,MAAUv/E,EAAE,cAAe3b,EAAE4pC,kBAAmBztC,EAAE,IAClDg/F,MAAUx/E,EAAE,aAAc3b,EAAE6pC,kBAC5BuxD,MAAUz/E,EAAE,oBAAqB3b,EAAE8pC,yBACnCuxD,MAAU1/E,EAAE,WAAY3b,EAAEu7B,gBAC1B+/D,MAAU3/E,EAAE,cAAe3b,EAAE+pC,mBAC7BwxD,MAAU5/E,EAAE,UAAW3b,EAAEgqC,eACzBwxD,MAAU7/E,EAAE,WAAY3b,EAAEiqC,gBAC1BwxD,MAAU9/E,EAAE,QAAS3b,EAAE++C,YAAa5iD,EAAE,IACtCu/F,MAAU//E,EAAE,cAAe3b,EAAEkqC,mBAC7ByxD,MAAUhgF,EAAE,UAAW3b,EAAEmqC,eACzByxD,MAAUjgF,EAAE,cAAe3b,EAAEoqC,mBAC7ByxD,MAAUlgF,EAAE,cAAe3b,EAAEq5B,kBAAmBl9B,EAAE,IAClD2/F,MAAUngF,EAAE,mBAAoB3b,EAAEq0B,wBAClC0nE,MAAUpgF,EAAE,eAAgB3b,EAAEqqC,oBAC9B2xD,MAAUrgF,EAAE,cAAe3b,EAAEsqC,mBAC7B2xD,MAAUtgF,EAAE,WAAY3b,EAAEuqC,gBAC1B2xD,MAAUvgF,EAAE,mBAAoB3b,EAAEwqC,wBAClC2xD,MAAUxgF,EAAE,uBAAwB3b,EAAEm0B,4BACtCioE,MAAUzgF,EAAE,mBAAoB3b,EAAEyqC,wBAClC4xD,MAAU1gF,EAAE,kBAAmB3b,EAAE0qC,uBACjC4xD,MAAU3gF,EAAE,iBAAkB3b,EAAE2qC,sBAChC4xD,MAAU5gF,EAAE,eAAgB3b,EAAE4qC,oBAC9B4xD,MAAU7gF,EAAE,QAAS3b,EAAE6qC,aACvB4xD,MAAU9gF,EAAE,QAAS3b,EAAE8qC,aACvB4xD,MAAU/gF,EAAE,SAAU3b,EAAE+qC,cACxB4xD,MAAUhhF,EAAE,aAAc3b,EAAEgrC,kBAC5B4xD,MAAUjhF,EAAE,aAAc3b,EAAEirC,kBAC5B4xD,MAAUlhF,EAAE,eAAgB3b,EAAEkrC,oBAC9B4xD,MAAUnhF,EAAE,aAAc3b,EAAEmrC,kBAC5B4xD,MAAUphF,EAAE,YAAa3b,EAAEorC,iBAC3B4xD,MAAUrhF,EAAE,gBAAiB3b,EAAEqrC,qBAC/B4xD,MAAUthF,EAAE,aAAc3b,EAAEsrC,kBAC5B4xD,MAAUvhF,EAAE,cAAe3b,EAAEurC,mBAC7B4xD,MAAUxhF,EAAE,SAAU3b,EAAEwrC,cACxB4xD,MAAUzhF,EAAE,aAAc3b,EAAEyrC,kBAC5B4xD,MAAU1hF,EAAE,MAAO3b,EAAE0rC,WACrB4xD,MAAU3hF,EAAE,OAAQ3b,EAAE2rC,YACtB4xD,MAAU5hF,EAAE,MAAO3b,EAAE4rC,WACrB4xD,MAAU7hF,EAAE,OAAQ3b,EAAE6rC,YACtB4xD,MAAU9hF,EAAE,UAAW3b,EAAE8rC,eACzB4xD,MAAU/hF,EAAE,UAAW3b,EAAE+rC,eACzB4xD,MAAUhiF,EAAE,OAAQ3b,EAAEgsC,YACtB4xD,MAAUjiF,EAAE,OAAQ3b,EAAEisC,YACtB4xD,MAAUliF,EAAE,aAAc3b,EAAEksC,kBAC5B4xD,MAAUniF,EAAE,cAAe3b,EAAEmsC,mBAC7B4xD,MAAUpiF,EAAE,WAAY3b,EAAEosC,gBAC1B4xD,MAAUriF,EAAE,UAAW3b,EAAEqsC,eACzB4xD,MAAUtiF,EAAE,cAAe3b,EAAEssC,mBAC7B4xD,MAAUviF,EAAE,OAAQ3b,EAAEusC,YACtB4xD,MAAUxiF,EAAE,QAAS3b,EAAE88B,aACvBshE,MAAUziF,EAAE,aAAc3b,EAAEwsC,kBAC5B6xD,MAAU1iF,EAAE,QAAS3b,EAAEysC,aACvB6xD,MAAU3iF,EAAE,QAAS3b,EAAE0sC,aACvB6xD,MAAU5iF,EAAE,MAAO3b,EAAE2sC,WACrB6xD,MAAU7iF,EAAE,WAAY3b,EAAE4sC,gBAC1B6xD,MAAU9iF,EAAE,UAAW3b,EAAE6sC,eACzB6xD,MAAU/iF,EAAE,OAAQ3b,EAAE8sC,YACtB6xD,MAAUhjF,EAAE,UAAW3b,EAAE+sC,eACzB6xD,MAAUjjF,EAAE,QAAS3b,EAAEgtC,aACvB6xD,MAAUljF,EAAE,OAAQ3b,EAAEitC,YACtB6xD,MAAUnjF,EAAE,YAAa3b,EAAEktC,iBAC3B6xD,MAAUpjF,EAAE,aAAc3b,EAAEmtC,kBAC5B6xD,MAAUrjF,EAAE,kBAAmB3b,EAAEotC,uBACjC6xD,MAAUtjF,EAAE,WAAY3b,EAAEqtC,gBAC1B6xD,MAAUvjF,EAAE,WAAY3b,EAAEstC,gBAC1B6xD,MAAUxjF,EAAE,WAAY3b,EAAEutC,gBAC1B6xD,MAAUzjF,EAAE,WAAY3b,EAAEwtC,gBAC1B6xD,MAAU1jF,EAAE,YAAa3b,EAAEytC,iBAC3B6xD,MAAU3jF,EAAE,cAAe3b,EAAE0tC,mBAC7B6xD,MAAU5jF,EAAE,aAAc3b,EAAE2tC,kBAC5B6xD,MAAU7jF,EAAE,MAAO3b,EAAE4tC,WACrB6xD,MAAU9jF,EAAE,SAAU3b,EAAE6tC,cACxB6xD,MAAU/jF,EAAE,OAAQ3b,EAAE8tC,YACtB6xD,MAAUhkF,EAAE,eAAgB3b,EAAE+tC,oBAC9B6xD,MAAUjkF,EAAE,aAAc3b,EAAEg7B,kBAC5B6kE,MAAUlkF,EAAE,SAAU3b,EAAEguC,cACxB8xD,MAAUnkF,EAAE,kBAAmB3b,EAAEiuC,uBACjC8xD,MAAUpkF,EAAE,MAAO3b,EAAEkuC,WACrB8xD,MAAUrkF,EAAE,SAAU3b,EAAEmuC,cACxB8xD,MAAUtkF,EAAE,SAAU3b,EAAEouC,cACxB8xD,MAAUvkF,EAAE,MAAO3b,EAAEquC,WACrB8xD,MAAUxkF,EAAE,aAAc3b,EAAEsuC,kBAC5B8xD,MAAUzkF,EAAE,UAAW3b,EAAEuuC,eACzB8xD,MAAU1kF,EAAE,WAAY3b,EAAEwuC,gBAC1B8xD,MAAU3kF,EAAE,eAAgB3b,EAAEyuC,oBAC9B8xD,MAAU5kF,EAAE,OAAQ3b,EAAE0uC,YAGtB94C,IAAU+lB,EAAE,cAAe3b,EAAEgT,WAC7Bs7C,KAAU3yC,EAAE,KAAM3b,EAAEgT,WACpBu7C,KAAU5yC,EAAE,SAAU3b,EAAEgT,WACxB27C,KAAUhzC,EAAE,QAAS3b,EAAEgT,WACvBq8B,KAAU1zB,EAAE,MAAO3b,EAAEgT,WACrB47C,KAAUjzC,EAAE,MAAO3b,EAAEgT,WACrBm8C,KAAUxzC,EAAE,MAAO3b,EAAEgT,WACrBs8C,KAAU3zC,EAAE,WAAY3b,EAAEgT,WAC1Bu8C,KAAU5zC,EAAE,WAAY3b,EAAEgT,WAC1Bw8C,KAAU7zC,EAAE,QAAS3b,EAAEgT,WACvBk9C,KAAUv0C,EAAE,YAAa3b,EAAEgT,WAC3Bo9C,KAAUz0C,EAAE,MAAO3b,EAAEgT,WACrB29C,KAAUh1C,EAAE,UAAW3b,EAAEgT,WACzBi+C,KAAUt1C,EAAE,UAAW3b,EAAEgT,WACzBk+C,KAAUv1C,EAAE,UAAW3b,EAAEgT,WACzBk/C,KAAUv2C,EAAE,UAAW3b,EAAEgT,WACzBu/C,KAAU52C,EAAE,SAAU3b,EAAEgT,WACxBitD,KAAUtkD,EAAE,YAAa3b,EAAEgT,WAC3B+K,KAAUpC,EAAE,YAAa3b,EAAEgT,WAC3BumD,KAAU59C,EAAE,eAAgB3b,EAAEgT,WAC9B2vE,KAAUhnE,EAAE,OAAQ3b,EAAEgT,WACtBirD,KAAUtiD,EAAE,aAAc3b,EAAE83B,kBAC5B+rD,KAAUloE,EAAE,OAAQ3b,EAAEgT,WACtB23E,MAAUhvE,EAAE,UAAW3b,EAAE2qD,eACzB61C,MAAU7kF,EAAE,WAAY3b,EAAEgT,WAC1BytF,MAAU9kF,EAAE,aAAc3b,EAAEgT,WAC5B0tF,MAAU/kF,EAAE,WAAY3b,EAAEgT,WAC1B2tF,MAAUhlF,EAAE,aAAc3b,EAAEgT,WAC5B4tF,MAAUjlF,EAAE,UAAW3b,EAAEgT,WACzB6tF,MAAUllF,EAAE,YAAa3b,EAAEgT,WAC3B8tF,MAAUnlF,EAAE,SAAU3b,EAAEgT,WACxB+tF,MAAUplF,EAAE,cAAe3b,EAAEgT,WAC7BguF,MAAUrlF,EAAE,SAAU3b,EAAEgT,WACxBiuF,MAAUtlF,EAAE,QAAS3b,EAAEgT,WACvBkuF,MAAUvlF,EAAE,SAAU3b,EAAEgT,WACxBmuF,MAAUxlF,EAAE,MAAO3b,EAAEgT,WACrBouF,MAAUzlF,EAAE,QAAS3b,EAAEgT,WACvBquF,MAAU1lF,EAAE,SAAU3b,EAAEgT,WACxBsuF,MAAU3lF,EAAE,WAAY3b,EAAEgT,WAE1Bte,KAKD,SAAS6sG,WAAUp3F,IAAK3V,MACvB,SAAU9E,UAAW,mBAAsBC,WAAY,mBAAsB6xG,OAAQ,YAAaA,IAAM7xG,QAAQ,OAAS,IACzH,UAAU6xG,OAAQ,cAAgBA,IAAID,UAAW,KAAM,IAAIxoG,OAAM,kBACjE,OAAOyoG,KAAID,UAAUp3F,IAAK3V,MAE3B,QAASitG,eAAch8E,UACtB,MAAO,SAASi8E,UAASltG,MACxB,IAAI,GAAIrE,GAAI,EAAGA,GAAKs1B,SAASp1B,SAAUF,EAAG,CACzC,GAAIqD,GAAIiyB,SAASt1B,EACjB,IAAGqE,KAAKhB,EAAE,MAAQe,UAAWC,KAAKhB,EAAE,IAAMA,EAAE,EAC5C,IAAGA,EAAE,KAAO,IAAKgB,KAAKhB,EAAE,IAAMwqF,OAAOxpF,KAAKhB,EAAE,OAK/C,GAAIwmF,eAAgBynB,gBAClB,SAAU,QACV,WAAY,OACZ,cAAe,OACf,aAAc,QACd,YAAa,QAEb,aAAc,QACd,YAAa,EAAG,MAEhB,WAAY,QACZ,aAAc,QACd,YAAa,QACb,YAAa,QACb,UAAW,QAEX,WAAW,KACX,MAAO,QAIT,IAAIE,gBAAiBF,gBACnB,YAAa,QAEb,UAAW,QAEX,WAAY,SAEZ,MAAO,QAET,SAASG,mBAAkBC,OAAQ79E,QAClC,IAAI69E,OAAQ,MAAO,EACnB,KACCA,OAAS79E,OAAO7yB,IAAI,QAAS2wG,MAAK5pG,GAAK,OAAQA,EAAEwL,KAAMm+F,OAAO,OAAO3pG,EAAEo6B,IAAIpL,UAC1E,MAAM1c,GAAK,MAAO,MACpB,OAAQq3F,QAAUA,OAAOxxG,SAAW,EAAI,KAAOwxG,OAGhD,QAASE,eAAc53F,IAAKzE,KAAMs8F,SAAUx+E,MAAOi9B,UAAWz8B,OAAQxvB,MACrE,IACCisD,UAAUj9B,OAAO8C,WAAWhc,WAAWH,IAAK63F,SAAU,MAAOt8F,KAC7Dse,QAAOR,OAAO4yD,SAAS9rE,WAAWH,IAAKzE,MAAMA,KAAKlR,KAAKisD,UAAUj9B,QAChE,MAAMhZ,GAAK,GAAGhW,KAAK2wB,IAAK,KAAM3a,IAGjC,GAAIy3F,QAAS,QAASA,QAAOvxG,GAAG,MAAOA,GAAEK,QAAQ,IAAM,IACvD,SAASmxG,WAAU/3F,IAAK3V,MACvBvB,SAASD,IACTwB,MAAOA,QACPwlF,eAAcxlF,KACd3E,WAGA,IAAGqa,eAAeC,IAAK,yBAA0B,MAAOo3F,WAAUp3F,IAAK3V,KAEvE,IAAI2tG,SAAUt5F,KAAKsB,IAAIvG,OAAOw+F,OAAOH,QAAQlkB,MAC7C,IAAIskB,KAAMj+E,SAAS9Z,WAAWH,IAAK,uBAAwB3V,KAC3D,IAAIqvB,MAAO,KACX,IAAIG,QAAQs+E,OACZ,IAAGD,IAAI3+E,UAAUrzB,SAAW,EAAG,CAC9BiyG,QAAU,iBACV,IAAGh4F,WAAWH,IAAIm4F,QAAS,MAAOD,IAAI3+E,UAAUpe,KAAKg9F,SAEtD,GAAGD,IAAI3+E,UAAUrzB,SAAW,EAAG,CAC9BiyG,QAAU,iBACV,KAAIj4F,WAAWF,IAAIm4F,QAAQ,MAAO,KAAM,IAAIvpG,OAAM,0BAClDspG,KAAI3+E,UAAUpe,KAAKg9F,QACnBz+E,MAAO,KAER,GAAGw+E,IAAI3+E,UAAU,GAAG3yB,QAAQ,IAAM,MAAO8yB,KAAO,IAChD,IAAGA,KAAM/zB,OAAO,KAEhB,KAAI0E,KAAKqlF,aAAerlF,KAAKslF,UAAW,CACvC/1D,OACA,IAAGs+E,IAAI98E,IAAKxB,KAAKwyD,UAAUjsE,WAAWH,IAAKk4F,IAAI98E,IAAItzB,QAAQ,MAAM,KAAMowG,IAAI98E,IAAK/wB,KAG9E+vB,UACA,IAAG/vB,KAAK04E,YAAcm1B,IAAI99E,OAAOl0B,OAAQk0B,OAAS+xD,YAAYhsE,WAAWH,IAAKk4F,IAAI99E,OAAO,GAAGtyB,QAAQ,MAAM,IAAK,MAAMowG,IAAI99E,OAAO,GAAI/vB,KAEpIyvB,UACF,IAAGo+E,IAAI78E,MAAOvB,OAASoyD,UAAU/rE,WAAWH,IAAKk4F,IAAI78E,MAAMvzB,QAAQ,MAAM,KAAKowG,IAAI78E,MAAOhxB,MAI1F,GAAI6nD,IAAK85B,SAAS7rE,WAAWH,IAAKk4F,IAAI3+E,UAAU,GAAGzxB,QAAQ,MAAM,KAAMowG,IAAI3+E,UAAU,GAAIlvB,KAEzF,IAAIoqF,UAAY2jB,SAAW,EAE3B,IAAGF,IAAI79E,UAAUn0B,SAAW,EAAG,CAC9BkyG,SAAWj4F,WAAWH,IAAKk4F,IAAI79E,UAAU,GAAGvyB,QAAQ,MAAM,IAAK,KAC/D,IAAGswG,SAAU3jB,MAAQj3D,iBAAiB46E,SACtC,IAAGF,IAAI59E,SAASp0B,SAAW,EAAG,CAC7BkyG,SAAWj4F,WAAWH,IAAKk4F,IAAI59E,SAAS,GAAGxyB,QAAQ,MAAM,IAAK,KAC9D,IAAGswG,SAAUz5E,gBAAgBy5E,SAAU3jB,QAIzC,GAAIl6D,aACJ,KAAIlwB,KAAKqlF,YAAcrlF,KAAKslF,UAAW,CACtC,GAAIuoB,IAAI39E,UAAUr0B,SAAW,EAAG,CAC/BkyG,SAAWj4F,WAAWH,IAAKk4F,IAAI39E,UAAU,GAAGzyB,QAAQ,MAAM,IAAK,KAC/D,IAAGswG,SAAU79E,UAAYkF,iBAAiB24E,SAAU/tG,OAItD,GAAIgF,OACJ,IAAGhF,KAAKqlF,YAAcrlF,KAAKslF,UAAW,CACrC,GAAG8E,MAAM11D,YAAc01D,MAAMx1D,WAAW/4B,OAAS,EAAG2zB,OAAO46D,MAAMx1D,eAC5D,IAAGizB,GAAGq0B,OAAQ1sD,OAASq4B,GAAGq0B,OAAOv/E,IAAI,QAASqxG,OAAM9xG,GAAI,MAAOA,GAAEgT,MACtE,IAAGlP,KAAKslF,UAAW,CAAEtgF,IAAI4uB,MAAQw2D,KAAOplF,KAAI69E,UAAY3yD,UACxD,SAAUV,UAAW,YAAaxqB,IAAI4vB,WAAapF,MACnD,IAAGxvB,KAAKqlF,WAAargF,IAAI4vB,WAAa50B,KAAKslF,UAAW,MAAOtgF,KAE9DwqB;AAEA,GAAIy+E,QACJ,IAAGjuG,KAAKkuG,UAAYL,IAAI/8E,UAAWm9E,KAAKjsB,SAASlsE,WAAWH,IAAKk4F,IAAI/8E,UAAUrzB,QAAQ,MAAM,KAAKowG,IAAI/8E,UAAU9wB,KAEhH,IAAIrE,GAAE,CACN,IAAIswD,aACJ,IAAI/6C,MAAMs8F,QACV,KAAIpjB,MAAM11D,WAAY,CACrB,GAAIy5E,UAAWtmD,GAAGq0B,MAClBkO,OAAM11D,WAAay5E,SAAStyG,MAC5BuuF,OAAMx1D,aACN,KAAI,GAAIruB,GAAI,EAAGA,GAAK4nG,SAAStyG,SAAU0K,EAAG,CACzC6jF,MAAMx1D,WAAWruB,GAAK4nG,SAAS5nG,GAAG2I,MAIpC,GAAIk/F,OAAQ/+E,KAAO,MAAQ,KAC3B,IAAIg/E,YAAa,qBAAuBD,MAAQ,OAChD,IAAIf,QAASv7E,WAAWhc,WAAWH,IAAK04F,WAAY,MAAOA,WAC3D,IAAGhB,OAAQA,OAASD,kBAAkBC,OAAQxlD,GAAGq0B,OAEjD,IAAIoyB,OAASx4F,WAAWH,IAAI,0BAA0B,MAAO,EAAE,CAC/D,KAAIha,EAAI,EAAGA,GAAKyuF,MAAM11D,aAAc/4B,EAAG,CACtC,GAAG0xG,OAAQn8F,KAAO,MAASm8F,OAAO1xG,GAAG,GAAI8B,QAAQ,YAAa,QACzD,CACJyT,KAAO,uBAAuBvV,EAAE,EAAE2yG,OAAO,IAAMF,KAC/Cl9F,MAAOA,KAAKzT,QAAQ,WAAW,UAEhC+vG,SAAWt8F,KAAKzT,QAAQ,qBAAsB,mBAC9C8vG,eAAc53F,IAAKzE,KAAMs8F,SAAUpjB,MAAMx1D,WAAWj5B,GAAIswD,UAAWz8B,OAAQxvB,MAG5E,GAAG6tG,IAAI19E,SAAU47B,eAAep2C,IAAKk4F,IAAI19E,SAAUX,OAAQy8B,UAAWjsD,KAEtEgF,MACCohF,UAAWynB,IACX5tB,SAAUp4B,GACVj0B,MAAOw2D,MACPvH,UAAW3yD,UACXq+E,KAAMN,KACN/xB,OAAQ1sD,OACRoF,WAAYw1D,MAAMx1D,WAClB4lD,QAASjrD,KACTi/E,OAAQ/+E,OACRg/E,OAAQ1+E,OACRvxB,IAAKA,IAAIyN,YAEV,IAAGjM,KAAKsqF,UAAW,CAClBtlF,IAAIqP,KAAOs5F,OACX3oG,KAAIoK,MAAQuG,IAAIvG,MAEjB,GAAGpP,KAAK0uG,QAAS,CAChB,GAAGb,IAAIz9E,IAAIv0B,OAAS,EAAGmJ,IAAI2pG,OAAS74F,WAAWH,IAAIk4F,IAAIz9E,IAAI,GAAG,UACzD,IAAGy9E,IAAI58E,SAAS29E,MAAQ,uCAAwC5pG,IAAI2pG,OAAS74F,WAAWH,IAAI,oBAAoB,MAEtH,MAAO3Q,KAER,QAAS6pG,UAASv+E,KAAMw+E,IAAKtjG,EAAGzF,KAAMgpG,QACrC,IAAIA,OAAQA,SACZ,KAAIz+E,KAAK,OAAQA,KAAK,SACtBy+E,QAAOp8E,GAAK,MAAQm8E,GACpBC,QAAOt8E,KAAO1sB,IACdgpG,QAAOr8E,OAASlnB,CAChB,IAAG8kB,KAAK,OAAOy+E,OAAOp8E,IAAK,KAAM,IAAIpuB,OAAM,sBAAwBuqG,IACnEx+E,MAAK,OAAOy+E,OAAOp8E,IAAMo8E,MACzBz+E,OAAM,IAAMy+E,OAAOr8E,QAAQj1B,QAAQ,KAAK,MAAQsxG,OAGjD,QAASC,WAAUnnD,GAAI7nD,MACtB,GAAG6nD,KAAOA,GAAGrpD,IAAK,CACjBqpD,GAAGrpD,IAAMA,IAAIyN,YAEd,GAAG47C,IAAMA,GAAGrpD,IAAK,CAChBC,SAASD,IAAMA,KAAI0N,WAAW27C,GAAGrpD,IACjCwB,MAAKk3E,OAAStiE,UAAUizC,GAAGrpD,IAAMwB,MAAKk3E,OAAOrvB,GAAGrpD,IAAI,QAAU,EAE/DwB,KAAKswB,OAAWtwB,MAAKqtG,SACrBrtG,MAAKw6E,UAAcx6E,MAAKw6E,QAAQr7C,MAAQ,CAAGn/B,MAAKw6E,QAAQp7C,OAAS,CACjE,IAAIgvE,OAAQpuG,KAAKwxB,UAAY,OAAS,MAAQ,KAC9C,IAAI9e,KAAOwc,aAAeM,UAAYM,cAAgBC,UAAYN,UACjEO,aAAeC,YAAcC,aAAeX,QAASY,YAAcC,OACnEC,QAASC,QAASC,MAAO,GAC1B48E,gBAAentG,KAAOA,SACtB,IAAI2V,KAAM,GAAIO,MACd,IAAI1K,GAAI,GAAIsjG,IAAM,CAElB9uG,MAAKmnD,UACL2vB,gBAAe92E,KAAKmnD,YAAc+vB,QAAQ+3B,QAAU,IAEpDzjG,GAAI,mBACJmK,KAAIjI,KAAKlC,EAAGmoB,iBAAiBk0B,GAAGj0B,MAAO5zB,MACvC0S,IAAGsd,UAAUlf,KAAKtF,EAClBqjG,UAAS7uG,KAAKswB,KAAM,EAAG9kB,EAAGmmB,KAAKsB,WAE/BznB,GAAI,kBACJ,KAAIq8C,GAAGj0B,MAAOi0B,GAAGj0B,QACjBi0B,IAAGj0B,MAAMgB,WAAaizB,GAAGjzB,UACzBizB,IAAGj0B,MAAMc,WAAamzB,GAAGjzB,WAAW/4B,MACpC8Z,KAAIjI,KAAKlC,EAAGupB,gBAAgB8yB,GAAGj0B,MAAO5zB,MACtC0S,IAAGud,SAASnf,KAAKtF,EACjBqjG,UAAS7uG,KAAKswB,KAAM,EAAG9kB,EAAGmmB,KAAK0C,UAE/B,IAAGwzB,GAAGg7B,YAAch7B,GAAGj0B,OAASvf,KAAKwzC,GAAGg7B,eAAehnF,OAAS,EAAG,CAClE2P,EAAI,qBACJmK,KAAIjI,KAAKlC,EAAGiqB,iBAAiBoyB,GAAGg7B,UAAW7iF,MAC3C0S,IAAGwd,UAAUpf,KAAKtF,EAClBqjG,UAAS7uG,KAAKswB,KAAM,EAAG9kB,EAAGmmB,KAAKuD,YAGhC1pB,EAAI,eAAiB4iG,KACrBz4F,KAAIjI,KAAKlC,EAAGy2E,SAASp6B,GAAIr8C,EAAGxL,MAC5B0S,IAAGwc,UAAUpe,KAAKtF,EAClBqjG,UAAS7uG,KAAKswB,KAAM,EAAG9kB,EAAGmmB,KAAKC,GAE/B,KAAIk9E,IAAI,EAAEA,KAAOjnD,GAAGjzB,WAAW/4B,SAAUizG,IAAK,CAC7CtjG,EAAI,sBAAwBsjG,IAAM,IAAMV,KACxCz4F,KAAIjI,KAAKlC,EAAG02E,SAAS4sB,IAAI,EAAGtjG,EAAGxL,KAAM6nD,IACrCn1C,IAAG8c,OAAO1e,KAAKtF,EACfqjG,UAAS7uG,KAAKqtG,OAAQyB,IAAK,mBAAqBA,IAAM,IAAMV,MAAOz8E,KAAKilD,IAGzE,GAAG52E,KAAKw6E,SAAW,MAAQx6E,KAAKw6E,QAAQ3+E,OAAS,EAAG,CACnD2P,EAAI,oBAAsB4iG,KAC1Bz4F,KAAIjI,KAAKlC,EAAG42E,UAAUpiF,KAAKw6E,QAAShvE,EAAGxL,MACvC0S,IAAG6c,KAAKze,KAAKtF,EACbqjG,UAAS7uG,KAAKqtG,SAAUyB,IAAK,iBAAmBV,MAAOz8E,KAAK0rB,KAK7D7xC,EAAI,qBACHmK,KAAIjI,KAAKlC,EAAG6+C,YAAYrqD,MACzB0S,IAAGqd,OAAOjf,KAAKtF,EACfqjG,UAAS7uG,KAAKqtG,SAAUyB,IAAK,mBAAoBn9E,KAAK+3B,MAItDl+C,GAAI,aAAe4iG,KACnBz4F,KAAIjI,KAAKlC,EAAG22E,UAAUt6B,GAAIr8C,EAAGxL,MAC7B0S,IAAG+c,OAAO3e,KAAKtF,EACfqjG,UAAS7uG,KAAKqtG,SAAUyB,IAAK,UAAYV,MAAOz8E,KAAKg2B,IAErDhyC,KAAIjI,KAAK,sBAAuB4jB,SAAS5e,GAAI1S,MAC7C2V,KAAIjI,KAAK,cAAeqlB,WAAW/yB,KAAKswB,MACxC3a,KAAIjI,KAAK,qBAAuB0gG,MAAQ,QAASr7E,WAAW/yB,KAAKqtG,QACjE,OAAO13F,KAER,QAASu5F,WAAU1jG,EAAE9P,GACpB,QAAQA,OAAOqK,MAAQ,UACtB,IAAK,SAAU,MAAOyF,GAAE,EACxB,KAAK,SAAU,MAAO/O,QAAOH,OAAOkP,EAAEjP,OAAO,EAAE,KAAKT,WAAW,EAC/D,KAAK,SAAU,MAAO0P,GAAE1P,WAAW,EACnC,KAAK,QAAS,MAAO0P,GAAE,EACvB,SAAS,KAAM,IAAIjH,OAAM,qBAAuB7I,EAAEqK,OAIpD,QAASopG,UAAS1zG,KAAMuE,MACvB,GAAI2V,KAAK3W,EAAIvD,IACb,IAAIC,GAAIsE,QACR,KAAItE,EAAEqK,KAAMrK,EAAEqK,KAAQpI,SAAWC,OAAOmf,SAASthB,MAAS,SAAW,QACrE,QAAOC,EAAEqK,MACR,IAAK,SAAU4P,IAAM,GAAIO,OAAMlX,GAAKowG,OAAO,MAAS,MACpD,KAAK,SAAU,IAAK,QAASz5F,IAAM,GAAIO,OAAMlX,GAAKowG,OAAO,OAAU,MACnE,KAAK,SAAUz5F,IAAM,GAAIO,OAAMlX,EAAI,MACnC,KAAK,OAAQ2W,IAAI,GAAIO,OAAMlX,EAAEiX,IAAI7C,aAAa3X,MAAQ,MACtD,SAAS,KAAM,IAAI8I,OAAM,qBAAuB7I,EAAEqK,MAEnD,MAAO2nG,WAAU/3F,IAAKja,GAGvB,QAAS6X,UAAS9X,KAAMuE,MACvB,GAAI2V,KAAK3W,EAAIvD,KAAM4zG,OAAS,MAAOloF,CACnC,IAAIzrB,GAAIsE,QACR,KAAItE,EAAEqK,KAAMrK,EAAEqK,KAAQpI,SAAWC,OAAOmf,SAASthB,MAAS,SAAW,QACrE,IAAGC,EAAEqK,MAAQ,OAAQ,CAAEspG,OAAS,IAAM3zG,GAAEqK,KAAO,QAAU/G,GAAIiX,IAAI7C,aAAa3X,MAC9E,OAAQ0rB,EAAI+nF,UAAUlwG,EAAGtD,IACxB,IAAK,KACJ,GAAG2zG,OAAQ3zG,EAAEqK,KAAO,MACpB,OAAO6jF,cAAat8E,IAAI2G,KAAKxY,KAAMC,GAAIA,EACxC,KAAK,GAAM,MAAOkuF,cAAa7rF,IAAIrC,EAAEqK,OAAS,SAAWtJ,OAAOH,OAAOb,MAAQA,MAAOC,EACtF,KAAK,IAAM,MAAO6pF,YAAWvmF,EAAGtD,EAChC,KAAK,IACJ,GAAG2zG,OAAQ3zG,EAAEqK,KAAO,MACpB,OAAOopG,UAAS1zG,KAAMuE,KACvB,SAAS,KAAM,IAAIuE,OAAM,oBAAsB4iB,IAIjD,QAAS/T,cAAa3X,KAAMuE,MAC3B,GAAItE,GAAIsE,QAAUtE,GAAEqK,KAAO,MAC1B,IAAI8hD,IAAKt0C,SAAS9X,KAAMC,EACxBmsD,IAAGynD,SAAW7zG,IACf,OAAOosD,IAER,QAAS0nD,gBAAe1nD,GAAI7nD,MAC3B,GAAItE,GAAIsE,QACP8nD,eAAiB,GAAI0nD,cAAaxvG,KAElC,IAAI2W,GAAIq4F,UAAUnnD,GAAInsD,EACvB,QAAOA,EAAEqK,MACR,IAAK,SAAU,MAAO4Q,GAAE84F,UAAU1pG,KAAK,UACvC,KAAK,SAAU,MAAO4Q,GAAE84F,UAAU1pG,KAAK,UACvC,KAAK,SAAU,MAAO4Q,GAAE84F,UAAU1pG,KAAK,cACvC,KAAK,OAAQ,MAAOkQ,KAAIy5F,cAAch0G,EAAEgS,KAAMiJ,EAAE84F,UAAU1pG,KAAK,eAC/D,SAAS,KAAM,IAAIxB,OAAM,qBAAuB7I,EAAEqK,OAIpD,QAAS4pG,WAAU9nD,GAAI7nD,MACtB,GAAItE,GAAIsE,QACR,QAAOtE,EAAE81B,UACR,IAAK,MAAO,MAAOi0D,YAAW59B,GAAInsD,EAClC,SAAS,MAAO6zG,gBAAe1nD,GAAInsD,IAIrC,QAASg0G,eAAc7nD,GAAIx0C,SAAUrT,MACpC,GAAItE,GAAIsE,QAAUtE,GAAEqK,KAAO,MAE3BrK,GAAEgS,KAAO2F,QACT,QAAO3X,EAAEgS,KAAKnR,QAAQ,GAAG+N,eACxB,IAAK,QAAS5O,EAAE81B,SAAW,MAAQ,MACnC,KAAK,QAAS91B,EAAE81B,SAAW,MAAQ,MACnC,KAAK,QAAS91B,EAAE81B,SAAW,MAAQ,MACpC,SAAS,OAAO91B,EAAEgS,KAAKnR,QAAQ,GAAG+N,eACjC,IAAK,OAAQ5O,EAAE81B,SAAW,KAAO,MACjC,KAAK,OAAQ91B,EAAE81B,SAAW,KAAO,QAElC,MAAOm+E,WAAU9nD,GAAInsD,GAGtB,QAASk0G,YAAWC,QAAU,MAAO9nG,UAAS+nG,UAAUD,QAAQ,IAAM,EACtE,QAASxhD,YAAWnpB,KAAO,MAAO,IAAMA,IAAM,GAC9C,QAAS6qE,SAAQC,MAAQ,MAAOA,MAAKvyG,QAAQ,kBAAkB,UAC/D,QAASqyG,WAAUE,MAAQ,MAAOA,MAAKvyG,QAAQ,WAAW,MAE1D,QAASwyG,YAAWC,QAAU,GAAItxG,GAAIuxG,UAAUD,QAASlxG,EAAI,EAAGrD,EAAI,CAAG,MAAMA,IAAMiD,EAAE/C,SAAUF,EAAGqD,EAAI,GAAGA,EAAIJ,EAAE9C,WAAWH,GAAK,EAAI,OAAOqD,GAAI,EAC9I,QAASovD,YAAWnsC,KAAO,GAAIjkB,GAAE,EAAI,OAAMikB,IAAKA,IAAKA,IAAI5iB,KAAKyD,OAAOmf,IAAI,GAAG,IAAKjkB,EAAI7B,OAAOC,cAAe6lB,IAAI,GAAG,GAAM,IAAMjkB,CAAG,OAAOA,GACxI,QAASoyG,SAAQJ,MAAQ,MAAOA,MAAKvyG,QAAQ,WAAW,QACxD,QAAS0yG,WAAUH,MAAQ,MAAOA,MAAKvyG,QAAQ,aAAa,MAE5D,QAAS4yG,YAAWL,MAAQ,MAAOA,MAAKvyG,QAAQ,sBAAsB,SAASQ,MAAM,KACrF,QAASyuD,aAAYsjD,MAAQ,GAAIM,MAAOD,WAAWL,KAAO,QAASpxG,EAAEqxG,WAAWK,KAAK,IAAK3oG,EAAEioG,WAAWU,KAAK,KAC5G,QAAS3kD,aAAYtrC,MAAQ,MAAO+tC,YAAW/tC,KAAKzhB,GAAKyvD,WAAWhuC,KAAK1Y,GACzE,QAAS4oG,UAASP,MAAQ,MAAOI,SAAQL,QAAQC,OACjD,QAASQ,YAAWR,MAAQ,MAAOG,WAAUL,UAAUE,OACvD,QAASS,cAAa/vF,OAAS,GAAIxkB,GAAGwkB,MAAMziB,MAAM,KAAKtB,IAAI+vD,YAAc,QAAQ1uD,EAAE9B,EAAE,GAAG8Z,EAAE9Z,EAAEA,EAAEL,OAAO,IACrG,QAAS+wD,cAAa8jD,GAAGC,IACxB,GAAGA,KAAO5wG,iBAAoB4wG,MAAO,SAAU,MAAO/jD,cAAa8jD,GAAG1yG,EAAG0yG,GAAG16F,EAC5E,UAAU06F,MAAO,SAAUA,GAAK/kD,YAAY+kD,GAAK,UAAUC,MAAO,SAAUA,GAAKhlD,YAAYglD,GAC7F,OAAOD,KAAMC,GAAKD,GAAKA,GAAK,IAAMC,GAGnC,QAASnkD,mBAAkB9rC,OAC1B,GAAIhlB,IAAKsC,GAAGY,EAAE,EAAE+I,EAAE,GAAGqO,GAAGpX,EAAE,EAAE+I,EAAE,GAC9B,IAAIZ,KAAM,EAAGpL,EAAI,EAAG+M,GAAK,CACzB,IAAI9M,KAAM8kB,MAAM7kB,MAChB,KAAIkL,IAAM,EAAGpL,EAAIC,MAAOD,EAAG,CAC1B,IAAI+M,GAAGgY,MAAM5kB,WAAWH,GAAG,IAAM,GAAK+M,GAAK,GAAI,KAC/C3B,KAAM,GAAGA,IAAM2B,GAEhBhN,EAAEsC,EAAEY,IAAMmI,GAEV,KAAIA,IAAM,EAAGpL,EAAIC,MAAOD,EAAG,CAC1B,IAAI+M,GAAGgY,MAAM5kB,WAAWH,GAAG,IAAM,GAAK+M,GAAK,EAAG,KAC9C3B,KAAM,GAAGA,IAAM2B,GAEhBhN,EAAEsC,EAAE2J,IAAMZ,GAEV,IAAGpL,IAAMC,KAAO8kB,MAAM5kB,aAAaH,KAAO,GAAI,CAAED,EAAEsa,EAAEpX,EAAElD,EAAEsC,EAAEY,CAAGlD,GAAEsa,EAAErO,EAAEjM,EAAEsC,EAAE2J,CAAG,OAAOjM,GAEjF,IAAIqL,IAAM,EAAGpL,GAAKC,MAAOD,EAAG,CAC3B,IAAI+M,GAAGgY,MAAM5kB,WAAWH,GAAG,IAAM,GAAK+M,GAAK,GAAI,KAC/C3B,KAAM,GAAGA,IAAM2B,GAEhBhN,EAAEsa,EAAEpX,IAAMmI,GAEV,KAAIA,IAAM,EAAGpL,GAAKC,MAAOD,EAAG,CAC3B,IAAI+M,GAAGgY,MAAM5kB,WAAWH,GAAG,IAAM,GAAK+M,GAAK,EAAG,KAC9C3B,KAAM,GAAGA,IAAM2B,GAEhBhN,EAAEsa,EAAErO,IAAMZ,GACV,OAAOrL,GAGR,QAASk1G,kBAAiBvwF,KAAMthB,GAC/B,GAAGshB,KAAK1J,IAAM5W,UAAW,IAAM,MAAQsgB,MAAK3c,EAAIlF,IAAIoN,OAAOyU,KAAK1J,EAAG5X,GAAO,MAAMiX,IAChF,IAAIqK,KAAK4lE,GAAI,MAAOlnF,EACpB,KAAM,MAAQshB,MAAK3c,EAAIlF,IAAIoN,OAAOyU,KAAK4lE,GAAGtkD,MAAM,EAAG5iC,GAAO,MAAMiX,GAAK,MAAO,GAAGjX,GAGhF,QAAS8xG,aAAYxwF,KAAMthB,GAC1B,GAAGshB,MAAQ,MAAQA,KAAKphB,GAAK,KAAM,MAAO,EAC1C,IAAGohB,KAAK3c,IAAM3D,UAAW,MAAOsgB,MAAK3c,CACrC,IAAG3E,IAAMgB,UAAW,MAAO6wG,kBAAiBvwF,KAAMA,KAAKthB,EACvD,OAAO6xG,kBAAiBvwF,KAAMthB,GAG/B,QAAS+xG,eAAc9hF,MAAOhvB,MAC7B,GAAIiG,KAAKi/B,IAAKxkB,MAAOlS,OAAS,EAAGyE,OAAS,EAAGtL,EAAGu+B,OAAU6qE,QAASrgG,EAAGC,EAAG5R,CACzE,IAAIrD,GAAIsE,MAAQ,KAAOA,OACvB,IAAIgQ,KAAMtU,EAAEsU,GACZ,IAAGgf,OAAS,MAAQA,MAAM,SAAW,KAAM,QAC3CtO,OAAQhlB,EAAEglB,QAAU3gB,UAAYrE,EAAEglB,MAAQsO,MAAM,OAChD,IAAGtzB,EAAE8S,SAAW,EAAGA,OAAS,MACvB,IAAG9S,EAAE8S,SAAW,IAAKA,OAAS,MAC9B,IAAG1Q,MAAM+e,QAAQnhB,EAAE8S,QAASA,OAAS,CAC1C,cAAckS,QACb,IAAK,SAAU/Y,EAAI6kD,kBAAkB9rC,MAAQ,MAC7C,KAAK,SAAU/Y,EAAI6kD,kBAAkBx9B,MAAM,QAAUrnB,GAAE3J,EAAE2J,EAAI+Y,KAAO,MACpE,SAAS/Y,EAAI+Y,MAEd,GAAGlS,OAAS,EAAGyE,OAAS,CACxB,IAAIjL,IAAKqmD,WAAW1mD,EAAE3J,EAAE2J,EACxB,IAAIgqD,MAAO,GAAI7zD,OAAM6J,EAAEqO,EAAEpX,EAAE+I,EAAE3J,EAAEY,EAAE,EACjC,IAAIoG,KAAM,GAAIlH,OAAM6J,EAAEqO,EAAErO,EAAEA,EAAE3J,EAAE2J,EAAEsL,OAAO,EACvC,IAAI+9F,MAAO,CACX,KAAIrgG,EAAIhJ,EAAE3J,EAAEY,EAAG+R,GAAKhJ,EAAEqO,EAAEpX,IAAK+R,EAAG,CAC/BghD,KAAKhhD,GAAKy9C,WAAWz9C,EACrB1K,KAAM+oB,MAAM2iC,KAAKhhD,GAAK3I,GACtB,QAAOwG,QACN,IAAK,GAAG03B,IAAIv1B,GAAKA,CAAG,MACpB,KAAK,GAAGu1B,IAAIv1B,GAAKghD,KAAKhhD,EAAI,MAC1B,KAAK,GAAGu1B,IAAIv1B,GAAKjV,EAAE8S,OAAOmC,EAAIhJ,EAAE3J,EAAEY,EAAI,MACtC,SACC,GAAGqH,MAAQlG,UAAW,QACtBmmC,KAAIv1B,GAAKkgG,YAAY5qG,MAIxB,IAAKyK,EAAI/I,EAAE3J,EAAE2J,EAAIsL,OAAQvC,GAAK/I,EAAEqO,EAAErO,IAAK+I,EAAG,CACzC1I,GAAKqmD,WAAW39C,EAChBqgG,SAAU,IACV,IAAGviG,SAAW,EAAG02B,WACZ,CACJA,MACA,IAAG5wB,OAAO28F,eAAgB38F,OAAO28F,eAAe/rE,IAAK,cAAehtB,MAAMxH,EAAGwgG,WAAW,YACnFhsE,KAAIisE,WAAazgG,EAEvB,IAAKC,EAAIhJ,EAAE3J,EAAEY,EAAG+R,GAAKhJ,EAAEqO,EAAEpX,IAAK+R,EAAG,CAChC1K,IAAM+oB,MAAM2iC,KAAKhhD,GAAK3I,GACtB,IAAG/B,MAAQlG,WAAakG,IAAIhH,IAAMc,UAAW,QAC7ChB,GAAIkH,IAAIlH,CACR,QAAOkH,IAAIhH,GACV,IAAK,IAAK,QACV,KAAK,IAAK,KACV,KAAK,IAAK,IAAK,IAAK,KACpB,SAAS,KAAM,qBAAuBgH,IAAIhH,EAE3C,GAAGF,IAAMgB,UAAW,CACnBmlC,IAAIgB,IAAIv1B,IAAMX,IAAMjR,EAAI8xG,YAAY5qG,IAAIlH,EACxCgyG,SAAU,OAGZ,GAAGA,UAAY,OAASviG,SAAW,EAAGxJ,IAAIgsG,QAAU9rE,IAErDlgC,IAAInJ,OAASm1G,IACb,OAAOhsG,KAGR,QAASosG,2BAA0BpiF,MAAOhvB,MAAQ,MAAO8wG,eAAc9hF,MAAOhvB,MAAQ,KAAOA,SAE7F,QAASqxG,cAAariF,MAAOhvB,MAC5B,GAAIgF,KAAM,GAAIssG,IAAM,GAAIC,KAAO,IAC/B,IAAI71G,GAAIsE,MAAQ,QAAYA,IAC5B,IAAGgvB,OAAS,MAAQA,MAAM,SAAW,KAAM,MAAO,EAClD,IAAIrnB,GAAI6kD,kBAAkBx9B,MAAM,QAChC,IAAIwiF,IAAK91G,EAAE81G,KAAOzxG,UAAYrE,EAAE81G,GAAK,IAAKr+F,GAAKq+F,GAAG11G,WAAW,EAC7D,IAAI21G,IAAK/1G,EAAE+1G,KAAO1xG,UAAYrE,EAAE+1G,GAAK,KAAMh1D,GAAKg1D,GAAG31G,WAAW,EAC9D,IAAIopC,KAAM,GAAIl9B,GAAK,GAAI2pD,OACvB,IAAIh2D,GAAI,EAAG+M,GAAK,EAAGzC,GACnB,IAAIyK,GAAI,EAAGC,EAAI,CACf,KAAIA,EAAIhJ,EAAE3J,EAAEY,EAAG+R,GAAKhJ,EAAEqO,EAAEpX,IAAK+R,EAAGghD,KAAKhhD,GAAKy9C,WAAWz9C,EACrD,KAAID,EAAI/I,EAAE3J,EAAE2J,EAAG+I,GAAK/I,EAAEqO,EAAErO,IAAK+I,EAAG,CAC/Bw0B,IAAM,EACNl9B,IAAKqmD,WAAW39C,EAChB,KAAIC,EAAIhJ,EAAE3J,EAAEY,EAAG+R,GAAKhJ,EAAEqO,EAAEpX,IAAK+R,EAAG,CAC/B1K,IAAM+oB,MAAM2iC,KAAKhhD,GAAK3I,GACtBspG,KAAMrrG,MAAQlG,UAAY,GAAG8wG,YAAY5qG,KAAO,EAChD,KAAItK,EAAI,EAAG+M,GAAK,EAAG/M,IAAM21G,IAAIz1G,SAAUF,EAAG,IAAI+M,GAAK4oG,IAAIx1G,WAAWH,MAAQwX,IAAMzK,KAAO+zC,IAAM/zC,KAAO,GAAI,CACvG4oG,IAAM,IAAOA,IAAI7zG,QAAQ8zG,KAAM,MAAQ,GAAM,OAC9CrsE,MAAQv0B,IAAMhJ,EAAE3J,EAAEY,EAAI,GAAK4yG,IAAMF,IAElCtsG,KAAOkgC,IAAMusE,GAEd,MAAOzsG,KAER,GAAI0sG,UAAWL,YAEf,SAASM,mBAAkB3iF,OAC1B,GAAI4iF,MAAM9xG,EAAI,GAAI5D,EAAG+J,IAAI,EACzB,IAAG+oB,OAAS,MAAQA,MAAM,SAAW,KAAM,MAAO,EAClD,IAAIrnB,GAAI6kD,kBAAkBx9B,MAAM,SAAUhnB,GAAK,GAAI2pD,QAAWhhD,CAC9DihG,MAAO,GAAI9zG,QAAO6J,EAAEqO,EAAErO,EAAEA,EAAE3J,EAAE2J,EAAE,IAAIA,EAAEqO,EAAEpX,EAAE+I,EAAE3J,EAAEY,EAAE,GAC9C,IAAIjD,GAAI,CACR,KAAIgV,EAAIhJ,EAAE3J,EAAEY,EAAG+R,GAAKhJ,EAAEqO,EAAEpX,IAAK+R,EAAGghD,KAAKhhD,GAAKy9C,WAAWz9C,EACrD,KAAI,GAAID,GAAI/I,EAAE3J,EAAE2J,EAAG+I,GAAK/I,EAAEqO,EAAErO,IAAK+I,EAAG,CACnC1I,GAAKqmD,WAAW39C,EAChB,KAAIC,EAAIhJ,EAAE3J,EAAEY,EAAG+R,GAAKhJ,EAAEqO,EAAEpX,IAAK+R,EAAG,CAC/B7Q,EAAI6xD,KAAKhhD,GAAK3I,EACd9L,GAAI8yB,MAAMlvB,EACVmG,KAAM,EACN,IAAG/J,IAAM6D,UAAW,QACpB,IAAG7D,EAAEsP,GAAK,KAAMvF,IAAM/J,EAAEsP,MACnB,IAAGtP,EAAEwH,IAAM3D,UAAWkG,IAAM,IAAM/J,EAAEwH,MACpC,IAAGxH,EAAE6C,IAAMgB,UAAW,aACtBkG,KAAM,GAAG/J,EAAE6C,CAChB6yG,MAAKj2G,KAAOmE,EAAI,IAAMmG,KAGxB2rG,KAAK/1G,OAASF,CACd,OAAOi2G,MAGR,GAAIv1G,QACH+xD,WAAYA,WACZC,WAAYA,WACZ1C,YAAaA,YACbiB,aAAcA,aACdqjD,WAAYA,WACZL,WAAYA,WACZS,WAAYA,WACZ3jD,YAAaA,YACb+jD,aAAcA,aACdI,YAAaA,YACbgB,aAAcF,kBACdD,SAAUL,aACVS,UAAWhB,cACXiB,cAAeJ,kBACfN,aAAcA,aACdP,cAAeA,cACfa,kBAAmBA,kBACnBP,0BAA2BA,0BAO5B,IAAIY,SAAU,WACZ,QAASA,SAAQC,QAASC,WAAYC,UAEpC,KAAM/0F,eAAgB40F,UAAU,CAC9B,MAAO,IAAIA,SAAQC,QAASC,WAAYC,UAE1C/0F,KAAK60F,QAAUA,OACf70F,MAAKg1F,YAAcF,cACnB90F,MAAKi1F,UAAYF,YACjB/0F,MAAKk1F,QAAU,EACf,OAAOl1F,MAGT40F,QAAQ18F,UAAUi9F,cAAgB,WAChC,MAAO,IAAIP,SAAQQ,WAGrBR,SAAQ18F,UAAU68F,SAAW,WAC3B,MAAO/0F,MAAKi1F,UAGdL,SAAQ18F,UAAUm9F,OAAS,SAAUC,MACnCt1F,KAAKi1F,UAAUvhG,KAAK4hG,KACpB,OAAOt1F,MAGT40F,SAAQ18F,UAAUq9F,OAAS,SAAUA,QACnC,GAAIH,UAAU32G,QAAQ,EAAG,CAAE,MAAOuhB,MAAKk1F,QACvCl1F,KAAKk1F,QAAUK,MACf,OAAOv1F,MAGT40F,SAAQ18F,UAAUs9F,KAAO,SAAUA,KAAM16F,OACvC,GAAIA,OAASnY,UAAW,OACfqd,MAAKg1F,YAAYQ,KACxB,OAAOx1F,MAET,GAAIo1F,UAAU32G,QAAU,EAAG,CACzB,MAAOuhB,MAAKg1F,gBAET,UAAWQ,OAAQ,UAAYJ,UAAU32G,QAAU,EAAG,CACzD,MAAOuhB,MAAKg1F,YAAYQ,KAAKA,MAE/B,SAAWA,OAAQ,UAAYJ,UAAU32G,QAAU,EAAG,CACpD,IAAK,GAAI4Y,OAAOm+F,MAAM,CACpBx1F,KAAKg1F,YAAY39F,KAAOm+F,KAAKn+F,UAG5B,IAAI+9F,UAAU32G,QAAU,SAAY+2G,OAAQ,SAAU,CACzDx1F,KAAKg1F,YAAYQ,MAAQ16F,MAE3B,MAAOkF,MAGT,IAAIy1F,MAAO,GAAKC,OAAQ,GACxB,IAAIC,iBACJA,eAAcD,OAAS,QACvBC,eAAcF,MAAQ,QAEtBb,SAAQ18F,UAAU09F,qBAAuB,SAASC,WAChD,MAAO,IAAMA,UAAUx1G,QAAQ,MAAM,UAAY,IAInDu0G,SAAQ18F,UAAUyyC,MAAQ,SAAU2qD,MAClC,IAAKA,KAAMA,KAAOt1F,IAClB,IAAIomE,KAAMkvB,KAAKJ,OACf9uB,MAAO,IAAMkvB,KAAKT,OAClB,IAAIS,KAAKN,YAAa,CACpB,IAAK,GAAI39F,OAAOi+F,MAAKN,YAAa,CAChC5uB,KAAO,IAAM/uE,IAAM,IAAM2I,KAAK41F,qBAAqB,GAAGN,KAAKN,YAAY39F,MAAQ,IAGnF,GAAIi+F,KAAKL,WAAaK,KAAKL,UAAUx2G,OAAS,EAAG,CAC/C2nF,KAAO,GACP,KAAK,GAAI7nF,GAAI,EAAGA,EAAI+2G,KAAKL,UAAUx2G,OAAQF,IAAK,CAC9C6nF,KAAOpmE,KAAK2qC,MAAM2qD,KAAKL,UAAU12G,IAEnC6nF,KAAO,KAAOkvB,KAAKT,QAAU,QAE1B,CACHzuB,KAAO,KAET,MAAOA,KAET,OAAOwuB,WAIP,IAAIxC,cAAe,SAAUl8F,SAE3B,GAAI4/F,gBAAiB,GAIrB,IAAIjzG,YACFC,EAAI,UACJC,EAAI,IACJC,EAAI,OACJC,EAAI,QACJC,EAAI,WACJC,EAAI,KACJC,GAAI,QACJC,GAAI,WACJC,GAAI,QACJC,GAAI,UACJC,GAAI,SACJC,GAAI,WACJC,GAAI,QACJC,GAAI,SACJC,GAAI,aACJC,GAAI,gBACJC,GAAI,OACJC,GAAI,UACJC,GAAI,cACJC,GAAI,iBACJC,GAAI,sBACJC,GAAI,sBACJC,GAAI,2BACJC,GAAI,QACJC,GAAI,YACJC,GAAI,SACJC,GAAI,WACJC,GAAI,IACJC,GAAI,2BACN,IAAIqxG,aAEJ,KAAK,GAAIpsG,OAAO9G,WAAW,CACzBkzG,UAAUlzG,UAAU8G,MAAQA,IAK9BqsG,aACAC,cAEA,QAEEC,WAAY,SAAUhgG,SAEpB8J,KAAKm2F,OAASvB,QAAQ,SAASY,KAAK,QAAQ,GAAGA,KAAK,mBAAmB,IACvEx1F,MAAKo2F,OAASxB,QAAQ,SAASY,KAAK,QAAQ,EAC5Cx1F,MAAKq2F,SAAWzB,QAAQ,WAAWY,KAAK,QAAQ,EAChDx1F,MAAKs2F,SAAW1B,QAAQ,WAAWY,KAAK,QAAQ,EAChDx1F,MAAKu2F,cAAgB3B,QAAQ,eAC7B50F,MAAKw2F,IAAM5B,QAAQ,MACdY,KAAK,WAAY,GACjBA,KAAK,SAAU,GACfA,KAAK,SAAU,GACfA,KAAK,WAAY,EAEtBx1F,MAAKy2F,SAAW7B,QAAQ,WAAWY,KAAK,QAAQ,EAChDx1F,MAAK02F,YAAc9B,QAAQ,cACtBS,OAAOT,QAAQ,aACXY,KAAK,OAAQ,UACbA,KAAK,OAAO,GACZA,KAAK,YAAY,GAE1Bx1F,MAAK22F,MAAQ/B,QAAQ,QAAQY,KAAK,QAAS,IAC3Cx1F,MAAK42F,aAAehC,QAAQ,eACvBY,KAAK,QAAQ,KACbA,KAAK,oBAAoB,qBACzBA,KAAK,oBAAoB,oBAG9Bx1F,MAAK62F,QAAUjC,QAAQ,cAClBY,KAAK,WAAW,+DAChBA,KAAK,cAAc,+DACnBA,KAAK,QAAQ,6DACbA,KAAK,eAAe,SACpBD,OAAO,2DACPF,OAAOr1F,KAAKs2F,UACZjB,OAAOr1F,KAAKm2F,QACZd,OAAOr1F,KAAKo2F,QACZf,OAAOr1F,KAAKq2F,UACZhB,OAAOr1F,KAAKu2F,cAAclB,OAAOr1F,KAAKw2F,MACtCnB,OAAOr1F,KAAKy2F,UACZpB,OAAOr1F,KAAK02F,aACZrB,OAAOr1F,KAAK22F,OACZtB,OAAOr1F,KAAK42F,aAMjB,IAAIE,cAAe5gG,QAAQ6gG,oBAC3B,KAAKD,aAAa/3D,KAAM+3D,aAAa/3D,MAAQjtC,KAAM,UAAWyP,GAAI,KAClE,KAAKu1F,aAAa/3D,KAAKjtC,KAAMglG,aAAa/3D,KAAKjtC,KAAO,SACtD,KAAKglG,aAAa/3D,KAAKx9B,GAAIu1F,aAAa/3D,KAAKx9B,GAAK,EAClD,KAAKu1F,aAAav1G,KAAMu1G,aAAav1G,MAAU0jC,YAAa,OAAQwiB,WACpE,KAAKqvD,aAAa1uD,OAAQ0uD,aAAa1uD,SACvC,KAAK0uD,aAAal9B,OAAQk9B,aAAal9B,OAAS,CAEhD55D,MAAK82F,aAAeA,YAEpB,IAAIE,cAAe18B,KAAKjqE,MAAMiqE,KAAKC,UAAUu8B,cAC7CE,cAAaz1G,MAAQ0jC,YAAa,UAAWwiB,WAE7CznC,MAAKi3F,WAAWH,aAAcE,cAC9B,OAAOh3F,OAKT65D,SAAU,SAAUi7B,YAElB,GAAIoC,SAAU58B,KAAKC,UAAUu6B,WAC7B,IAAInuF,OAAQqvF,WAAWkB,QACvB,IAAIvwF,OAAShkB,UAAW,CAEtBgkB,MAAQ3G,KAAKm3F,OAAOrC,WACpBkB,YAAWkB,SAAWvwF,UAEnB,CACHA,MAAQqvF,WAAWkB,SAErB,MAAOvwF,QAITswF,UAAW,SAAU5kF,QACnB,GAAI+kF,MAAOp3F,IACX,OAAOqS,QAAO9yB,IAAI,SAAUq0B,OAC1B,MAAOwjF,MAAKv9B,SAASjmD,UAIzByjF,eAAgB,SAASvC,YAEvB,SAAWA,aAAc,WAAaA,WAAWwC,aAAexC,WAAWrtD,SAAU,CACnF,OAAQlmD,KAAMuzG,gBAEX,IAAIA,WAAW/1D,MAAQ+1D,WAAWl7B,QAAUk7B,WAAW1sD,QAAU0sD,WAAWvzG,KAAM,CACrF,MAAOuzG,gBAEJ,CACH,MAAO90F,MAAKu3F,aAAazC,cAI7ByC,aAAc,SAASC,KACrB,MAAOA,MAMTL,OAAQ,SAAUrC,YAGhB,GAAI/6B,QAAS/5D,KAAKy3F,SAAS3C,WAAW/1D,KACtC,IAAIwK,QAASvpC,KAAK03F,SAAS5C,WAAWvzG,KACtC,IAAIy4E,UAAWh6D,KAAK23F,WAAW7C,WAAW1sD,OAC1C,IAAIa,UAAWjpC,KAAK43F,WAAW9C,WAAWl7B,OAE1C,IAAI48B,KAAM5B,QAAQ,MACbY,KAAK,WAAYvsD,UACjBusD,KAAK,SAAUz7B,QACfy7B,KAAK,SAAUjsD,QACfisD,KAAK,WAAYx7B,UACjBw7B,KAAK,OAAQ,IAElB,IAAIz7B,OAAS,EAAG,CACdy8B,IAAIhB,KAAK,YAAa,KAExB,GAAIjsD,OAAS,EAAG,CACditD,IAAIhB,KAAK,YAAa,KAExB,GAAIx7B,SAAW,EAAG,CAChBw8B,IAAIhB,KAAK,cAAe,KAE1B,GAAIvsD,SAAW,EAAG,CAChButD,IAAIhB,KAAK,oBAAqB,KAGhC,GAAIV,WAAWtrD,UAAW,CACxB,GAAIquD,YAAajD,QAAQ,YACzB,IAAIE,WAAWtrD,UAAUE,WAAY,CAAEmuD,WAAWrC,KAAK,aAAcV,WAAWtrD,UAAUE,YAC1F,GAAIorD,WAAWtrD,UAAUC,SAAW,CAAEouD,WAAWrC,KAAK,WAAYV,WAAWtrD,UAAUC,UACvF,GAAIqrD,WAAWtrD,UAAUI,OAAS,CAAEiuD,WAAWrC,KAAK,SAAUV,WAAWtrD,UAAUI,QACnF,GAAIkrD,WAAWtrD,UAAUsuD,aAAe,CAAED,WAAWrC,KAAK,eAAgBV,WAAWtrD,UAAUsuD,cAC/F,GAAIhD,WAAWtrD,UAAUK,SAAW,CAAEguD,WAAWrC,KAAK,WAAYV,WAAWtrD,UAAUK,UACvF,GAAIirD,WAAWtrD,UAAUG,cAAchnD,UAAY,CAAEk1G,WAAWrC,KAAK,eAAgBV,WAAWtrD,UAAUG,cAE1G6sD,IAAInB,OAAOwC,YAAYrC,KAAK,iBAAiB,GAG/Cx1F,KAAKy2F,SAASpB,OAAOmB,IACrB,IAAIz2D,QAAS//B,KAAKy2F,SAAS1B,WAAWt2G,MAEtCuhB,MAAKy2F,SAASjB,KAAK,QAASz1D,MAC5B,OAAOA,OAAQ,GAGjB03D,SAAU,SAAU3C,YAElB,IAAKA,WAAY,CAAG,MAAO,GAE3B,GAAIiD,OAAQnD,QAAQ,QACfS,OAAOT,QAAQ,MAAMY,KAAK,MAAOV,WAAWvzF,IAAMvB,KAAK82F,aAAa/3D,KAAKx9B,KACzE8zF,OAAOT,QAAQ,QAAQY,KAAK,MAAOV,WAAWhjG,MAAQkO,KAAK82F,aAAa/3D,KAAKjtC,MAElF,IAAIgjG,WAAWltD,KAAMmwD,MAAM1C,OAAOT,QAAQ,KAC1C,IAAIE,WAAWjtD,UAAYkwD,MAAM1C,OAAOT,QAAQ,KAChD,IAAIE,WAAWhtD,OAASiwD,MAAM1C,OAAOT,QAAQ,KAC7C,IAAIE,WAAW91D,OAAS+4D,MAAM1C,OAAOT,QAAQ,UAC7C,IAAIE,WAAW/sD,QAAUgwD,MAAM1C,OAAOT,QAAQ,WAC9C,IAAIE,WAAW9sD,OAAS+vD,MAAM1C,OAAOT,QAAQ,UAE7C,IAAIE,WAAW7sD,UAAW,CACxB8vD,MAAM1C,OAAOT,QAAQ,aAAaY,KAAK,MAAOV,WAAW7sD,YAI3D,GAAI6sD,WAAW3/F,MAAO,CACpB,GAAI2/F,WAAW3/F,MAAMkyC,MAAO,CAC1B0wD,MAAM1C,OAAOT,QAAQ,SAASY,KAAK,QAASV,WAAW3/F,MAAMkyC,OAE7D,IAAIytD,WAAW3/F,MAAM+vC,KAAM,CACzB6yD,MAAM1C,OAAOT,QAAQ,QAAQY,KAAK,QAASV,WAAW3/F,MAAM+vC,YAGzD,IAAI4vD,WAAW3/F,MAAM8pC,IAAK,CAC/B84D,MAAM1C,OAAOT,QAAQ,SAASY,KAAK,MAAOV,WAAW3/F,MAAM8pC,OAI/Dj/B,KAAKm2F,OAAOd,OAAO0C,MAEnB,IAAIh4D,OAAQ//B,KAAKm2F,OAAOpB,WAAWt2G,MACnCuhB,MAAKm2F,OAAOX,KAAK,QAASz1D,MAC1B,OAAOA,OAAQ,GAGf63D,WAAY,SAAUh+B,QACtB,IAAKA,OAAQ,CAAE,MAAO,GAEtB,SAAWA,SAAU,SAAU,CAC7B,GAAIo+B,WAAYjC,UAAUn8B,OAC1B,IAAIo+B,WAAa,EAAG,CAClB,MAAOA,YAIX,GAAI,WAAWr+B,KAAKC,QAAS,CAC3B,MAAOA,QAETA,OAASA,OACJv5E,QAAQ,KAAM,SACdA,QAAQ,KAAM,QACdA,QAAQ,KAAM,QACdA,QAAQ,KAAM,UACdA,QAAQ,KAAM,SAEnB,IAAI43G,SAAUrD,QAAQ,UACjBY,KAAK,aAAeM,gBACpBN,KAAK,aAAc57B,OAExB55D,MAAKs2F,SAASjB,OAAO4C,QAErB,IAAIl4D,OAAQ//B,KAAKs2F,SAASvB,WAAWt2G,MACrCuhB,MAAKs2F,SAASd,KAAK,QAASz1D,MAC5B,OAAO+1D,iBAGT4B,SAAU,SAAU5C,YAElB,IAAKA,WAAY,CAAE,MAAO,GAE1B,GAAIoD,cAAetD,QAAQ,eACtBY,KAAK,cAAeV,WAAW7vE,aAAe,QAEnD,IAAI6vE,WAAWrtD,QAAS,CACtB,GAAI0wD,UAAWvD,QAAQ,UAIvB,IAAIE,WAAWrtD,QAAQxI,IAAK,CAE1B,GAAI61D,WAAWrtD,QAAQxI,IAAIxgD,QAAU,EAAG,CACtCq2G,WAAWrtD,QAAQxI,IAAM,KAAO61D,WAAWrtD,QAAQxI,IAGrDk5D,SAAS3C,KAAK,MAAOV,WAAWrtD,QAAQxI,IACxCi5D,cAAa7C,OAAO8C,cAEjB,IAAIrD,WAAWrtD,QAAQJ,MAAO,CACjC8wD,SAAS3C,KAAK,QAASV,WAAWrtD,QAAQJ,MAC1C,IAAIytD,WAAWrtD,QAAQvC,KAAM,CAC3BizD,SAAS3C,KAAK,OAAQV,WAAWrtD,QAAQvC,MAE3CgzD,aAAa7C,OAAO8C,UAGtB,IAAKrD,WAAW3tD,QAAS,CACvB2tD,WAAW3tD,SAAYC,QAAW,OAItC,GAAI0tD,WAAW3tD,QAAS,CACtB,GAAIixD,UAAWxD,QAAQ,WAAWY,KAAKV,WAAW3tD,QAClD+wD,cAAa7C,OAAO+C,UAGtB,GAAIC,OAAQzD,QAAQ,QACfS,OAAO6C,aAEZl4F,MAAKo2F,OAAOf,OAAOgD,MAEnB,IAAIt4D,OAAQ//B,KAAKo2F,OAAOrB,WAAWt2G,MACnCuhB,MAAKo2F,OAAOZ,KAAK,QAASz1D,MAC1B,OAAOA,OAAQ,GAGjBu4D,cAAe,SAASC,UAAWC,MAEjC,GAAIC,YAAa7D,QAAQ2D,UACzB,IAAIC,KAAK,CACP,GAAIA,KAAK5kF,MAAO6kF,WAAWjD,KAAK,QAASgD,KAAK5kF,MAC9C,IAAI4kF,KAAKrjG,MAAO,CACd,GAAIujG,QAAS9D,QAAQ,QACrB,IAAI4D,KAAKrjG,MAAM0zC,KAAM,CACnB6vD,OAAOlD,KAAK,OAAQgD,KAAKrjG,MAAM0zC,UAE5B,IAAI2vD,KAAKrjG,MAAM8pC,IAAK,CACvBy5D,OAAOlD,KAAK,MAAOgD,KAAKrjG,MAAM8pC,SAE3B,IAAIu5D,KAAKrjG,MAAMkyC,OAASmxD,KAAKrjG,MAAM+vC,KAAM,CAC5CwzD,OAAOlD,KAAK,QAASgD,KAAKrjG,MAAMkyC,OAAS,IACzCqxD,QAAOlD,KAAK,OAAQgD,KAAKrjG,MAAM+vC,MAAQ,KAEzCuzD,WAAWpD,OAAOqD,SAGtB,MAAOD,aAGTd,WAAY,SAAU7C,YACpB,IAAKA,WAAY,CAAE,MAAO,GAE1B,GAAIsC,MAAOp3F,IAEX,IAAI24F,SAAU/D,QAAQ,UACjBY,KAAK,aAAaV,WAAWxsD,YAC7BktD,KAAK,eAAeV,WAAWvsD,aAEpC,IAAIqwD,aAAc,OAAO,QAAQ,MAAM,SAAS,WAEhDA,YAAWx8F,QAAQ,SAASm8F,WAC1BI,QAAQtD,OAAO+B,KAAKkB,cAAcC,UAAWzD,WAAWyD,cAE1Dv4F,MAAKq2F,SAAShB,OAAOsD,QAErB,IAAI54D,OAAQ//B,KAAKq2F,SAAStB,WAAWt2G,MACrCuhB,MAAKq2F,SAASb,KAAK,QAASz1D,MAC5B,OAAOA,OAAO,GAGhB4K,MAAO,WACL,MAAO3qC,MAAK62F,QAAQlsD,UAEtBurD,WAAWhgG,aAIjBzY,MAAK+uF,aAAeA,YACpB/uF,MAAK6yG,UAAYA,SACjB7yG,MAAKoZ,KAAOV,QACZ1Y,MAAKo7G,SAAW7iG,YAChBvY,MAAKuY,aAAeA,YACpBvY,MAAKq7G,MAAQvG,SACb90G,MAAKs7G,UAAYzG,aACjB70G,MAAK60G,cAAgBA,aACrB70G,MAAKwB,MAAQA,KACbxB,MAAKyS,IAAMA,GACXzS,MAAK2D,IAAMA,YACDgP,WAAY,YAAcA,QAAU3S,KAC9C,IAAIu7G,KAAMv7G","file":"dist/xlsx.min.js"}
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/example-4.js b/Source/UBCS-WEB/src/config/js-xlsx-master/example-4.js
new file mode 100644
index 0000000..acc85c5
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/example-4.js
@@ -0,0 +1,642 @@
+var XLSX = require('xlsx');
+var OUTFILE = '/tmp/example-style.xlsx';
+
+function JSDateToExcelDate(inDate) {
+  return 25569.0 + ((inDate.getTime() - (inDate.getTimezoneOffset() * 60 * 1000)) / (1000 * 60 * 60 * 24));
+}
+
+var defaultCellStyle = { font: { name: "Verdana", sz: 11, color: "FF00FF88"}, fill: {fgColor: {rgb: "FFFFAA00"}}};
+
+// test to see if everything on the left equals its counterpart on the right
+// but the right hand object may have other attributes which we might not care about
+function basicallyEquals(left, right) {
+  if (Array.isArray(left) && Array.isArray(right)) {
+    for (var i = 0; i < left.length; i++) {
+      if (!basicallyEquals(left[i], right[i])) {
+        return false;
+      }
+    }
+    return true;
+  }
+  else if (typeof left == 'object' && typeof right == 'object') {
+    for (var key in left) {
+      if (key != 'bgColor') {
+        if (!basicallyEquals(left[key], right[key])) {
+          if (JSON.stringify(left[key]) == "{}" && right[key] == undefined) return true;
+          if (JSON.stringify(right[key]) == "{}" && left[key] == undefined) return true;
+          return false;
+        }
+      }
+    }
+    return true;
+  }
+  else {
+    if (left != right) {
+      return false;
+    }
+    return true;
+  }
+}
+
+
+var workbook, wbout, wbin;
+
+workbook = {
+  "SheetNames": [
+    "Main"
+  ],
+  "Sheets": {
+    "Main": {
+      "!merges": [
+        {
+          "s": {
+            "c": 0,
+            "r": 0
+          },
+          "e": {
+            "c": 2,
+            "r": 0
+          }
+        }
+      ],
+      "A1": {
+        "v": "This is a submerged cell",
+        "s": {
+          "border": {
+            "left": {
+              "style": "thick",
+              "color": {
+                "auto": 1
+              }
+            },
+            "top": {
+              "style": "thick",
+              "color": {
+                "auto": 1
+              }
+            },
+            "bottom": {
+              "style": "thick",
+              "color": {
+                "auto": 1
+              }
+            }
+          }
+        },
+        "t": "s"
+      },
+      "B1": {
+        "v": "Pirate ship",
+        "s": {
+          "border": {
+            "top": {
+              "style": "thick",
+              "color": {
+                "auto": 1
+              }
+            },
+            "bottom": {
+              "style": "thick",
+              "color": {
+                "auto": 1
+              }
+            }
+          }
+        },
+        "t": "s"
+      },
+      "C1": {
+        "v": "Sunken treasure",
+        "s": {
+          "border": {
+            "right": {
+              "style": "thick",
+              "color": {
+                "auto": 1
+              }
+            },
+            "top": {
+              "style": "thick",
+              "color": {
+                "auto": 1
+              }
+            },
+            "bottom": {
+              "style": "thick",
+              "color": {
+                "auto": 1
+              }
+            }
+          }
+        },
+        "t": "s"
+      },
+      "A2": {
+        "v": "Blank",
+        "t": "s"
+      },
+      "B2": {
+        "v": "Red",
+        "s": {
+          "fill": {
+            "fgColor": {
+              "rgb": "FFFF0000"
+            }
+          }
+        },
+        "t": "s"
+      },
+      "C2": {
+        "v": "Green",
+        "s": {
+          "fill": {
+            "fgColor": {
+              "rgb": "FF00FF00"
+            }
+          }
+        },
+        "t": "s"
+      },
+      "D2": {
+        "v": "Blue",
+        "s": {
+          "fill": {
+            "fgColor": {
+              "rgb": "FF0000FF"
+            }
+          }
+        },
+        "t": "s"
+      },
+      "E2": {
+        "v": "Theme 5",
+        "s": {
+          "fill": {
+            "fgColor": {
+              "theme": 5
+            }
+          }
+        },
+        "t": "s"
+      },
+      "F2": {
+        "v": "Theme 5 Tint -0.5",
+        "s": {
+          "fill": {
+            "fgColor": {
+              "theme": 5,
+              "tint": -0.5
+            }
+          }
+        },
+        "t": "s"
+      },
+      "A3": {
+        "v": "Default",
+        "t": "s"
+      },
+      "B3": {
+        "v": "Arial",
+        "s": {
+          "font": {
+            "name": "Arial",
+            "sz": 24,
+            "color": {
+              "theme": "5"
+            }
+          }
+        },
+        "t": "s"
+      },
+      "C3": {
+        "v": "Times New Roman",
+        "s": {
+          "font": {
+            "name": "Times New Roman",
+            bold: true,
+            underline: true,
+            italic: true,
+            strike: true,
+            outline: true,
+            shadow: true,
+            vertAlign: "superscript",
+            "sz": 16,
+            "color": {
+              "rgb": "FF2222FF"
+            }
+          }
+        },
+        "t": "s"
+      },
+      "D3": {
+        "v": "Courier New",
+        "s": {
+          "font": {
+            "name": "Courier New",
+            "sz": 14
+          }
+        },
+        "t": "s"
+      },
+      "A4": {
+        "v": 0.618033989,
+        "t": "n"
+      },
+      "B4": {
+        "v": 0.618033989,
+        "t": "n"
+      },
+      "C4": {
+        "v": 0.618033989,
+        "t": "n"
+      },
+      "D4": {
+        "v": 0.618033989,
+        "t": "n",
+        "s": {
+          "numFmt": "0.00%"
+        }
+      },
+      "E4": {
+        "v": 0.618033989,
+        "t": "n",
+        "s": {
+          "numFmt": "0.00%",
+          "fill": {
+            "fgColor": {
+              "rgb": "FFFFCC00"
+            }
+          }
+        }
+      },
+      "A5": {
+        "v": 0.618033989,
+        "t": "n",
+        "s": {
+          "numFmt": "0%"
+        }
+      },
+      "B5": {
+        "v": 0.618033989,
+        "t": "n",
+        "s": {
+          "numFmt": "0.0%"
+        }
+      },
+      "C5": {
+        "v": 0.618033989,
+        "t": "n",
+        "s": {
+          "numFmt": "0.00%"
+        }
+      },
+      "D5": {
+        "v": 0.618033989,
+        "t": "n",
+        "s": {
+          "numFmt": "0.000%"
+        }
+      },
+      "E5": {
+        "v": 0.618033989,
+        "t": "n",
+        "s": {
+          "numFmt": "0.0000%"
+        }
+      },
+      "F5": {
+        "v": 0,
+        "t": "n",
+        "s": {
+          "numFmt": "0.00%;\\(0.00%\\);\\-;@",
+          "fill": {
+            "fgColor": {
+              "rgb": "FFFFCC00"
+            }
+          }
+        }
+      },
+      "A6": {
+        "v": "Sat Mar 21 2015 23:47:34 GMT-0400 (EDT)",
+        "t": "s"
+      },
+      "B6": {
+        "v": 42084.99137416667,
+        "t": "n"
+      },
+      "C6": {
+        "v": 42084.99137416667,
+        "s": {
+          "numFmt": "d-mmm-yy"
+        },
+        "t": "n"
+      },
+      "A7": {
+        "v": "left",
+        "s": {
+          "alignment": {
+            "horizontal": "left"
+          }
+        },
+        "t": "s"
+      },
+      "B7": {
+        "v": "center",
+        "s": {
+          "alignment": {
+            "horizontal": "center"
+          }
+        },
+        "t": "s"
+      },
+      "C7": {
+        "v": "right",
+        "s": {
+          "alignment": {
+            "horizontal": "right"
+          }
+        },
+        "t": "s"
+      },
+      "A8": {
+        "v": "vertical",
+        "s": {
+          "alignment": {
+            "vertical": "top"
+          }
+        },
+        "t": "s"
+      },
+      "B8": {
+        "v": "vertical",
+        "s": {
+          "alignment": {
+            "vertical": "center"
+          }
+        },
+        "t": "s"
+      },
+      "C8": {
+        "v": "vertical",
+        "s": {
+          "alignment": {
+            "vertical": "bottom"
+          }
+        },
+        "t": "s"
+      },
+      "A9": {
+        "v": "indent",
+        "s": {
+          "alignment": {
+            "indent": "1"
+          }
+        },
+        "t": "s"
+      },
+      "B9": {
+        "v": "indent",
+        "s": {
+          "alignment": {
+            "indent": "2"
+          }
+        },
+        "t": "s"
+      },
+      "C9": {
+        "v": "indent",
+        "s": {
+          "alignment": {
+            "indent": "3"
+          }
+        },
+        "t": "s"
+      },
+      "A10": {
+        "v": "In publishing and graphic design, lorem ipsum is a filler text commonly used to demonstrate the graphic elements of a document or visual presentation. ",
+        "s": {
+          "alignment": {
+            "wrapText": 1,
+            "horizontal": "right",
+            "vertical": "center",
+            "indent": 1
+          }
+        },
+        "t": "s"
+      },
+      "A11": {
+        "v": 41684.35264774306,
+        "s": {
+          "numFmt": "m/d/yy"
+        },
+        "t": "n"
+      },
+      "B11": {
+        "v": 41684.35264774306,
+        "s": {
+          "numFmt": "d-mmm-yy"
+        },
+        "t": "n"
+      },
+      "C11": {
+        "v": 41684.35264774306,
+        "s": {
+          "numFmt": "h:mm:ss AM/PM"
+        },
+        "t": "n"
+      },
+      "D11": {
+        "v": 42084.99137416667,
+        "s": {
+          "numFmt": "m/d/yy"
+        },
+        "t": "n"
+      },
+      "E11": {
+        "v": 42065.02247239584,
+        "s": {
+          "numFmt": "m/d/yy"
+        },
+        "t": "n"
+      },
+      "F11": {
+        "v": 42084.99137416667,
+        "s": {
+          "numFmt": "m/d/yy h:mm:ss AM/PM"
+        },
+        "t": "n"
+      },
+      "A12": {
+        "v": "Apple",
+        "s": {
+          "border": {
+            "top": {
+              "style": "thin"
+            },
+            "left": {
+              "style": "thin"
+            },
+            "right": {
+              "style": "thin"
+            },
+            "bottom": {
+              "style": "thin"
+            }
+          }
+        },
+        "t": "s"
+      },
+      "C12": {
+        "v": "Apple",
+        "s": {
+          "border": {
+            "diagonalUp": 1,
+            "diagonalDown": 1,
+            "top": {
+              "style": "dashed",
+              "color": {
+                "auto": 1
+              }
+            },
+            "right": {
+              "style": "medium",
+              "color": {
+                "theme": "5"
+              }
+            },
+            "bottom": {
+              "style": "hair",
+              "color": {
+                "theme": 5,
+                "tint": "-0.3"
+              }
+            },
+            "left": {
+              "style": "thin",
+              "color": {
+                "rgb": "FFFFAA00"
+              }
+            },
+            "diagonal": {
+              "style": "dotted",
+              "color": {
+                "auto": 1
+              }
+            }
+          }
+        },
+        "t": "s"
+      },
+      "E12": {
+        "v": "Pear",
+        "s": {
+          "border": {
+            "diagonalUp": 1,
+            "diagonalDown": 1,
+            "top": {
+              "style": "dashed",
+              "color": {
+                "auto": 1
+              }
+            },
+            "right": {
+              "style": "dotted",
+              "color": {
+                "theme": "5"
+              }
+            },
+            "bottom": {
+              "style": "mediumDashed",
+              "color": {
+                "theme": 5,
+                "tint": "-0.3"
+              }
+            },
+            "left": {
+              "style": "double",
+              "color": {
+                "rgb": "FFFFAA00"
+              }
+            },
+            "diagonal": {
+              "style": "hair",
+              "color": {
+                "auto": 1
+              }
+            }
+          }
+        },
+        "t": "s"
+      },
+      "A13": {
+        "v": "Up 90",
+        "s": {
+          "alignment": {
+            "textRotation": 90
+          }
+        },
+        "t": "s"
+      },
+      "B13": {
+        "v": "Up 45",
+        "s": {
+          "alignment": {
+            "textRotation": 45
+          }
+        },
+        "t": "s"
+      },
+      "C13": {
+        "v": "Horizontal",
+        "s": {
+          "alignment": {
+            "textRotation": 0
+          }
+        },
+        "t": "s"
+      },
+      "D13": {
+        "v": "Down 45",
+        "s": {
+          "alignment": {
+            "textRotation": 135
+          }
+        },
+        "t": "s"
+      },
+      "E13": {
+        "v": "Down 90",
+        "s": {
+          "alignment": {
+            "textRotation": 180
+          }
+        },
+        "t": "s"
+      },
+      "F13": {
+        "v": "Vertical",
+        "s": {
+          "alignment": {
+            "textRotation": 255
+          }
+        },
+        "t": "s"
+      },
+      "A14": {
+        "v": "Font color test",
+        "s": {
+          "font": {
+            "color": {
+              "rgb": "FFC6EFCE"
+            }
+          }
+        },
+        "t": "s"
+      },
+      "!ref": "A1:F14"
+    }
+  }
+}
+XLSX.writeFile(workbook, OUTFILE, { defaultCellStyle: defaultCellStyle });
+console.log("open " + OUTFILE)
+
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/example-style.js b/Source/UBCS-WEB/src/config/js-xlsx-master/example-style.js
new file mode 100644
index 0000000..acc85c5
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/example-style.js
@@ -0,0 +1,642 @@
+var XLSX = require('xlsx');
+var OUTFILE = '/tmp/example-style.xlsx';
+
+function JSDateToExcelDate(inDate) {
+  return 25569.0 + ((inDate.getTime() - (inDate.getTimezoneOffset() * 60 * 1000)) / (1000 * 60 * 60 * 24));
+}
+
+var defaultCellStyle = { font: { name: "Verdana", sz: 11, color: "FF00FF88"}, fill: {fgColor: {rgb: "FFFFAA00"}}};
+
+// test to see if everything on the left equals its counterpart on the right
+// but the right hand object may have other attributes which we might not care about
+function basicallyEquals(left, right) {
+  if (Array.isArray(left) && Array.isArray(right)) {
+    for (var i = 0; i < left.length; i++) {
+      if (!basicallyEquals(left[i], right[i])) {
+        return false;
+      }
+    }
+    return true;
+  }
+  else if (typeof left == 'object' && typeof right == 'object') {
+    for (var key in left) {
+      if (key != 'bgColor') {
+        if (!basicallyEquals(left[key], right[key])) {
+          if (JSON.stringify(left[key]) == "{}" && right[key] == undefined) return true;
+          if (JSON.stringify(right[key]) == "{}" && left[key] == undefined) return true;
+          return false;
+        }
+      }
+    }
+    return true;
+  }
+  else {
+    if (left != right) {
+      return false;
+    }
+    return true;
+  }
+}
+
+
+var workbook, wbout, wbin;
+
+workbook = {
+  "SheetNames": [
+    "Main"
+  ],
+  "Sheets": {
+    "Main": {
+      "!merges": [
+        {
+          "s": {
+            "c": 0,
+            "r": 0
+          },
+          "e": {
+            "c": 2,
+            "r": 0
+          }
+        }
+      ],
+      "A1": {
+        "v": "This is a submerged cell",
+        "s": {
+          "border": {
+            "left": {
+              "style": "thick",
+              "color": {
+                "auto": 1
+              }
+            },
+            "top": {
+              "style": "thick",
+              "color": {
+                "auto": 1
+              }
+            },
+            "bottom": {
+              "style": "thick",
+              "color": {
+                "auto": 1
+              }
+            }
+          }
+        },
+        "t": "s"
+      },
+      "B1": {
+        "v": "Pirate ship",
+        "s": {
+          "border": {
+            "top": {
+              "style": "thick",
+              "color": {
+                "auto": 1
+              }
+            },
+            "bottom": {
+              "style": "thick",
+              "color": {
+                "auto": 1
+              }
+            }
+          }
+        },
+        "t": "s"
+      },
+      "C1": {
+        "v": "Sunken treasure",
+        "s": {
+          "border": {
+            "right": {
+              "style": "thick",
+              "color": {
+                "auto": 1
+              }
+            },
+            "top": {
+              "style": "thick",
+              "color": {
+                "auto": 1
+              }
+            },
+            "bottom": {
+              "style": "thick",
+              "color": {
+                "auto": 1
+              }
+            }
+          }
+        },
+        "t": "s"
+      },
+      "A2": {
+        "v": "Blank",
+        "t": "s"
+      },
+      "B2": {
+        "v": "Red",
+        "s": {
+          "fill": {
+            "fgColor": {
+              "rgb": "FFFF0000"
+            }
+          }
+        },
+        "t": "s"
+      },
+      "C2": {
+        "v": "Green",
+        "s": {
+          "fill": {
+            "fgColor": {
+              "rgb": "FF00FF00"
+            }
+          }
+        },
+        "t": "s"
+      },
+      "D2": {
+        "v": "Blue",
+        "s": {
+          "fill": {
+            "fgColor": {
+              "rgb": "FF0000FF"
+            }
+          }
+        },
+        "t": "s"
+      },
+      "E2": {
+        "v": "Theme 5",
+        "s": {
+          "fill": {
+            "fgColor": {
+              "theme": 5
+            }
+          }
+        },
+        "t": "s"
+      },
+      "F2": {
+        "v": "Theme 5 Tint -0.5",
+        "s": {
+          "fill": {
+            "fgColor": {
+              "theme": 5,
+              "tint": -0.5
+            }
+          }
+        },
+        "t": "s"
+      },
+      "A3": {
+        "v": "Default",
+        "t": "s"
+      },
+      "B3": {
+        "v": "Arial",
+        "s": {
+          "font": {
+            "name": "Arial",
+            "sz": 24,
+            "color": {
+              "theme": "5"
+            }
+          }
+        },
+        "t": "s"
+      },
+      "C3": {
+        "v": "Times New Roman",
+        "s": {
+          "font": {
+            "name": "Times New Roman",
+            bold: true,
+            underline: true,
+            italic: true,
+            strike: true,
+            outline: true,
+            shadow: true,
+            vertAlign: "superscript",
+            "sz": 16,
+            "color": {
+              "rgb": "FF2222FF"
+            }
+          }
+        },
+        "t": "s"
+      },
+      "D3": {
+        "v": "Courier New",
+        "s": {
+          "font": {
+            "name": "Courier New",
+            "sz": 14
+          }
+        },
+        "t": "s"
+      },
+      "A4": {
+        "v": 0.618033989,
+        "t": "n"
+      },
+      "B4": {
+        "v": 0.618033989,
+        "t": "n"
+      },
+      "C4": {
+        "v": 0.618033989,
+        "t": "n"
+      },
+      "D4": {
+        "v": 0.618033989,
+        "t": "n",
+        "s": {
+          "numFmt": "0.00%"
+        }
+      },
+      "E4": {
+        "v": 0.618033989,
+        "t": "n",
+        "s": {
+          "numFmt": "0.00%",
+          "fill": {
+            "fgColor": {
+              "rgb": "FFFFCC00"
+            }
+          }
+        }
+      },
+      "A5": {
+        "v": 0.618033989,
+        "t": "n",
+        "s": {
+          "numFmt": "0%"
+        }
+      },
+      "B5": {
+        "v": 0.618033989,
+        "t": "n",
+        "s": {
+          "numFmt": "0.0%"
+        }
+      },
+      "C5": {
+        "v": 0.618033989,
+        "t": "n",
+        "s": {
+          "numFmt": "0.00%"
+        }
+      },
+      "D5": {
+        "v": 0.618033989,
+        "t": "n",
+        "s": {
+          "numFmt": "0.000%"
+        }
+      },
+      "E5": {
+        "v": 0.618033989,
+        "t": "n",
+        "s": {
+          "numFmt": "0.0000%"
+        }
+      },
+      "F5": {
+        "v": 0,
+        "t": "n",
+        "s": {
+          "numFmt": "0.00%;\\(0.00%\\);\\-;@",
+          "fill": {
+            "fgColor": {
+              "rgb": "FFFFCC00"
+            }
+          }
+        }
+      },
+      "A6": {
+        "v": "Sat Mar 21 2015 23:47:34 GMT-0400 (EDT)",
+        "t": "s"
+      },
+      "B6": {
+        "v": 42084.99137416667,
+        "t": "n"
+      },
+      "C6": {
+        "v": 42084.99137416667,
+        "s": {
+          "numFmt": "d-mmm-yy"
+        },
+        "t": "n"
+      },
+      "A7": {
+        "v": "left",
+        "s": {
+          "alignment": {
+            "horizontal": "left"
+          }
+        },
+        "t": "s"
+      },
+      "B7": {
+        "v": "center",
+        "s": {
+          "alignment": {
+            "horizontal": "center"
+          }
+        },
+        "t": "s"
+      },
+      "C7": {
+        "v": "right",
+        "s": {
+          "alignment": {
+            "horizontal": "right"
+          }
+        },
+        "t": "s"
+      },
+      "A8": {
+        "v": "vertical",
+        "s": {
+          "alignment": {
+            "vertical": "top"
+          }
+        },
+        "t": "s"
+      },
+      "B8": {
+        "v": "vertical",
+        "s": {
+          "alignment": {
+            "vertical": "center"
+          }
+        },
+        "t": "s"
+      },
+      "C8": {
+        "v": "vertical",
+        "s": {
+          "alignment": {
+            "vertical": "bottom"
+          }
+        },
+        "t": "s"
+      },
+      "A9": {
+        "v": "indent",
+        "s": {
+          "alignment": {
+            "indent": "1"
+          }
+        },
+        "t": "s"
+      },
+      "B9": {
+        "v": "indent",
+        "s": {
+          "alignment": {
+            "indent": "2"
+          }
+        },
+        "t": "s"
+      },
+      "C9": {
+        "v": "indent",
+        "s": {
+          "alignment": {
+            "indent": "3"
+          }
+        },
+        "t": "s"
+      },
+      "A10": {
+        "v": "In publishing and graphic design, lorem ipsum is a filler text commonly used to demonstrate the graphic elements of a document or visual presentation. ",
+        "s": {
+          "alignment": {
+            "wrapText": 1,
+            "horizontal": "right",
+            "vertical": "center",
+            "indent": 1
+          }
+        },
+        "t": "s"
+      },
+      "A11": {
+        "v": 41684.35264774306,
+        "s": {
+          "numFmt": "m/d/yy"
+        },
+        "t": "n"
+      },
+      "B11": {
+        "v": 41684.35264774306,
+        "s": {
+          "numFmt": "d-mmm-yy"
+        },
+        "t": "n"
+      },
+      "C11": {
+        "v": 41684.35264774306,
+        "s": {
+          "numFmt": "h:mm:ss AM/PM"
+        },
+        "t": "n"
+      },
+      "D11": {
+        "v": 42084.99137416667,
+        "s": {
+          "numFmt": "m/d/yy"
+        },
+        "t": "n"
+      },
+      "E11": {
+        "v": 42065.02247239584,
+        "s": {
+          "numFmt": "m/d/yy"
+        },
+        "t": "n"
+      },
+      "F11": {
+        "v": 42084.99137416667,
+        "s": {
+          "numFmt": "m/d/yy h:mm:ss AM/PM"
+        },
+        "t": "n"
+      },
+      "A12": {
+        "v": "Apple",
+        "s": {
+          "border": {
+            "top": {
+              "style": "thin"
+            },
+            "left": {
+              "style": "thin"
+            },
+            "right": {
+              "style": "thin"
+            },
+            "bottom": {
+              "style": "thin"
+            }
+          }
+        },
+        "t": "s"
+      },
+      "C12": {
+        "v": "Apple",
+        "s": {
+          "border": {
+            "diagonalUp": 1,
+            "diagonalDown": 1,
+            "top": {
+              "style": "dashed",
+              "color": {
+                "auto": 1
+              }
+            },
+            "right": {
+              "style": "medium",
+              "color": {
+                "theme": "5"
+              }
+            },
+            "bottom": {
+              "style": "hair",
+              "color": {
+                "theme": 5,
+                "tint": "-0.3"
+              }
+            },
+            "left": {
+              "style": "thin",
+              "color": {
+                "rgb": "FFFFAA00"
+              }
+            },
+            "diagonal": {
+              "style": "dotted",
+              "color": {
+                "auto": 1
+              }
+            }
+          }
+        },
+        "t": "s"
+      },
+      "E12": {
+        "v": "Pear",
+        "s": {
+          "border": {
+            "diagonalUp": 1,
+            "diagonalDown": 1,
+            "top": {
+              "style": "dashed",
+              "color": {
+                "auto": 1
+              }
+            },
+            "right": {
+              "style": "dotted",
+              "color": {
+                "theme": "5"
+              }
+            },
+            "bottom": {
+              "style": "mediumDashed",
+              "color": {
+                "theme": 5,
+                "tint": "-0.3"
+              }
+            },
+            "left": {
+              "style": "double",
+              "color": {
+                "rgb": "FFFFAA00"
+              }
+            },
+            "diagonal": {
+              "style": "hair",
+              "color": {
+                "auto": 1
+              }
+            }
+          }
+        },
+        "t": "s"
+      },
+      "A13": {
+        "v": "Up 90",
+        "s": {
+          "alignment": {
+            "textRotation": 90
+          }
+        },
+        "t": "s"
+      },
+      "B13": {
+        "v": "Up 45",
+        "s": {
+          "alignment": {
+            "textRotation": 45
+          }
+        },
+        "t": "s"
+      },
+      "C13": {
+        "v": "Horizontal",
+        "s": {
+          "alignment": {
+            "textRotation": 0
+          }
+        },
+        "t": "s"
+      },
+      "D13": {
+        "v": "Down 45",
+        "s": {
+          "alignment": {
+            "textRotation": 135
+          }
+        },
+        "t": "s"
+      },
+      "E13": {
+        "v": "Down 90",
+        "s": {
+          "alignment": {
+            "textRotation": 180
+          }
+        },
+        "t": "s"
+      },
+      "F13": {
+        "v": "Vertical",
+        "s": {
+          "alignment": {
+            "textRotation": 255
+          }
+        },
+        "t": "s"
+      },
+      "A14": {
+        "v": "Font color test",
+        "s": {
+          "font": {
+            "color": {
+              "rgb": "FFC6EFCE"
+            }
+          }
+        },
+        "t": "s"
+      },
+      "!ref": "A1:F14"
+    }
+  }
+}
+XLSX.writeFile(workbook, OUTFILE, { defaultCellStyle: defaultCellStyle });
+console.log("open " + OUTFILE)
+
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/example1.js b/Source/UBCS-WEB/src/config/js-xlsx-master/example1.js
new file mode 100644
index 0000000..d6fd055
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/example1.js
@@ -0,0 +1,89 @@
+var XLSX = require('./');
+var sheetName = 'test &amp; debug';
+
+
+  var ATTRIBUTE_VALUE_STYLE={
+      font: {
+      name:   "Arial",
+      sz:     10
+      }
+  };
+
+  var Workbook = function(){
+      this.SheetNames = [];
+      this.Sheets = {};
+  };
+
+  var range = {s: {c:10000000, r:10000000}, e:{c:0, r:0}};
+
+  function updateRange(row, col) {
+      if (range.s.r > row) { range.s.r = row;}
+  if (range.s.c > col) { range.s.c = col; }
+  if (range.e.r < row) { range.e.r = row; }
+  if (range.e.c < col) { range.e.c = col; }
+    }
+
+    function addCell(wb, ws, value, type, row, col, styles) {
+
+        updateRange(row, col);
+
+        var cell = {t: type, v: value, s:styles};
+
+    // i use d to recognize that the format is a date, and if it is, i use z attribute to format it
+    if (cell.t === 'd') {
+        cell.t = 'n';
+        cell.z = XLSX.SSF._table[14];
+        }
+
+    var cell_ref = XLSX.utils.encode_cell({c: col, r:row});
+
+    ws[cell_ref] = cell;
+    }
+
+    function s2ab(s) {
+        var buf = new ArrayBuffer(s.length);
+        var view = new Uint8Array(buf);
+        for (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
+        return buf;
+        }
+
+    function datenum(v, date1904) {
+        if(date1904) v+=1462;
+        var epoch = Date.parse(v);
+        return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);
+        }
+
+    var wb = new Workbook();
+    var ws = {};
+
+    /* Here i add a cell with format number with value 10*/
+    addCell(wb, ws, 10, 'n', 0, 0, ATTRIBUTE_VALUE_STYLE);
+
+/* Here i add a cell with format number that is current date*/
+addCell(wb, ws, datenum(new Date()), 'd', 0, 1, ATTRIBUTE_VALUE_STYLE);
+
+/* Here i add a cell with format number with value 10, again another number*/
+addCell(wb, ws, 10, 'd', 0, 2, ATTRIBUTE_VALUE_STYLE);
+
+/* Here i add a cell with format number with value 10, again another number*/
+addCell(wb, ws, "Hello null\u0000world", 's', 0, 3);
+
+
+ws['!ref'] = XLSX.utils.encode_range(range);
+
+wb.SheetNames.push(sheetName);
+wb.Sheets[sheetName] = ws;
+
+
+ws['!rowBreaks'] = [12,24];
+ws['!colBreaks'] = [3,6];
+ws['!pageSetup'] = {scale: '140'};
+
+/* bookType can be 'xszlsx' or 'xlsm' or 'xlsb' */
+var defaultCellStyle =  { font: { name: "Verdana", sz: 11, color: "FF00FF88"}, fill: {fgColor: {rgb: "FFFFAA00"}}};
+var wopts = { bookType:'xlsx', bookSST:false, type:'binary', defaultCellStyle: defaultCellStyle, showGridLines: false};
+
+//console.log(JSON.stringify(wb, null,4))
+var OUTFILE = '/tmp/wb.xlsx';
+XLSX.writeFile(wb, OUTFILE, wopts);
+console.log("Results written to " + OUTFILE)
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/example3.js b/Source/UBCS-WEB/src/config/js-xlsx-master/example3.js
new file mode 100644
index 0000000..43fd254
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/example3.js
@@ -0,0 +1,42 @@
+var XLSX = require('./');
+
+var wb = {};
+wb.Sheets = {};
+wb.Props = {};
+wb.SSF = {};
+wb.SheetNames = [];
+
+var ws = {
+  "!cols": []
+};
+
+var range = {
+  s: {c: 0, r: 0},
+  e: {c: 0, r: 0}
+};
+
+var cell;
+for (var r = 0; r < 6; r++) {
+  ws["!cols"].push({wch: 6});
+  if (range.e.r < r + 1) range.e.r = r + 1;
+  for (var c = 0; c < 6; c++) {
+    if (range.e.c < c) range.e.c = c;
+    cell_ref = XLSX.utils.encode_cell({c: c, r: r});
+    cell = {v: cell_ref};
+    ws[cell_ref] = cell;
+  }
+}
+
+ws["!ref"] = XLSX.utils.encode_range(range);
+wb.SheetNames.push("Sheet1");
+wb.Sheets["Sheet1"] = ws;
+wb.SheetNames.push("Sheet2");
+wb.Sheets["Sheet2"] = JSON.parse(JSON.stringify(ws))
+// workbook options
+var wopts = {bookType: "xlsx"};
+
+
+//console.log(JSON.stringify(wb, null,4))
+var OUTFILE = '/tmp/example.xlsx';
+XLSX.writeFile(wb, OUTFILE, wopts);
+console.log("Results written to " + OUTFILE)
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/jszip.js b/Source/UBCS-WEB/src/config/js-xlsx-master/jszip.js
new file mode 100644
index 0000000..51ef5da
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/jszip.js
@@ -0,0 +1,8982 @@
+/*!
+
+JSZip - A Javascript class for generating and reading zip files
+<http://stuartk.com/jszip>
+
+(c) 2009-2014 Stuart Knightley <stuart [at] stuartk.com>
+Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/master/LICENSE.markdown.
+
+JSZip uses the library pako released under the MIT license :
+https://github.com/nodeca/pako/blob/master/LICENSE
+*/
+!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.JSZip=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
+'use strict';
+// private property
+var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
+
+
+// public method for encoding
+exports.encode = function(input, utf8) {
+    var output = "";
+    var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
+    var i = 0;
+
+    while (i < input.length) {
+
+        chr1 = input.charCodeAt(i++);
+        chr2 = input.charCodeAt(i++);
+        chr3 = input.charCodeAt(i++);
+
+        enc1 = chr1 >> 2;
+        enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
+        enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
+        enc4 = chr3 & 63;
+
+        if (isNaN(chr2)) {
+            enc3 = enc4 = 64;
+        }
+        else if (isNaN(chr3)) {
+            enc4 = 64;
+        }
+
+        output = output + _keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4);
+
+    }
+
+    return output;
+};
+
+// public method for decoding
+exports.decode = function(input, utf8) {
+    var output = "";
+    var chr1, chr2, chr3;
+    var enc1, enc2, enc3, enc4;
+    var i = 0;
+
+    input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
+
+    while (i < input.length) {
+
+        enc1 = _keyStr.indexOf(input.charAt(i++));
+        enc2 = _keyStr.indexOf(input.charAt(i++));
+        enc3 = _keyStr.indexOf(input.charAt(i++));
+        enc4 = _keyStr.indexOf(input.charAt(i++));
+
+        chr1 = (enc1 << 2) | (enc2 >> 4);
+        chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
+        chr3 = ((enc3 & 3) << 6) | enc4;
+
+        output = output + String.fromCharCode(chr1);
+
+        if (enc3 != 64) {
+            output = output + String.fromCharCode(chr2);
+        }
+        if (enc4 != 64) {
+            output = output + String.fromCharCode(chr3);
+        }
+
+    }
+
+    return output;
+
+};
+
+},{}],2:[function(_dereq_,module,exports){
+'use strict';
+function CompressedObject() {
+    this.compressedSize = 0;
+    this.uncompressedSize = 0;
+    this.crc32 = 0;
+    this.compressionMethod = null;
+    this.compressedContent = null;
+}
+
+CompressedObject.prototype = {
+    /**
+     * Return the decompressed content in an unspecified format.
+     * The format will depend on the decompressor.
+     * @return {Object} the decompressed content.
+     */
+    getContent: function() {
+        return null; // see implementation
+    },
+    /**
+     * Return the compressed content in an unspecified format.
+     * The format will depend on the compressed conten source.
+     * @return {Object} the compressed content.
+     */
+    getCompressedContent: function() {
+        return null; // see implementation
+    }
+};
+module.exports = CompressedObject;
+
+},{}],3:[function(_dereq_,module,exports){
+'use strict';
+exports.STORE = {
+    magic: "\x00\x00",
+    compress: function(content) {
+        return content; // no compression
+    },
+    uncompress: function(content) {
+        return content; // no compression
+    },
+    compressInputType: null,
+    uncompressInputType: null
+};
+exports.DEFLATE = _dereq_('./flate');
+
+},{"./flate":8}],4:[function(_dereq_,module,exports){
+'use strict';
+
+var utils = _dereq_('./utils');
+
+var table = [
+    0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA,
+    0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,
+    0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,
+    0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,
+    0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,
+    0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
+    0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,
+    0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,
+    0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,
+    0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
+    0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940,
+    0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
+    0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116,
+    0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,
+    0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,
+    0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,
+    0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A,
+    0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
+    0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818,
+    0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
+    0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,
+    0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,
+    0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C,
+    0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
+    0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,
+    0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,
+    0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,
+    0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,
+    0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086,
+    0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
+    0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4,
+    0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,
+    0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,
+    0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,
+    0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,
+    0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
+    0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE,
+    0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,
+    0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,
+    0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
+    0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252,
+    0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
+    0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60,
+    0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,
+    0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
+    0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,
+    0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04,
+    0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
+    0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,
+    0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
+    0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,
+    0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,
+    0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E,
+    0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
+    0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,
+    0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,
+    0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,
+    0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,
+    0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0,
+    0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
+    0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6,
+    0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
+    0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,
+    0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D
+];
+
+/**
+ *
+ *  Javascript crc32
+ *  http://www.webtoolkit.info/
+ *
+ */
+module.exports = function crc32(input, crc) {
+    if (typeof input === "undefined" || !input.length) {
+        return 0;
+    }
+
+    var isArray = utils.getTypeOf(input) !== "string";
+
+    if (typeof(crc) == "undefined") {
+        crc = 0;
+    }
+    var x = 0;
+    var y = 0;
+    var b = 0;
+
+    crc = crc ^ (-1);
+    for (var i = 0, iTop = input.length; i < iTop; i++) {
+        b = isArray ? input[i] : input.charCodeAt(i);
+        y = (crc ^ b) & 0xFF;
+        x = table[y];
+        crc = (crc >>> 8) ^ x;
+    }
+
+    return crc ^ (-1);
+};
+// vim: set shiftwidth=4 softtabstop=4:
+
+},{"./utils":21}],5:[function(_dereq_,module,exports){
+'use strict';
+var utils = _dereq_('./utils');
+
+function DataReader(data) {
+    this.data = null; // type : see implementation
+    this.length = 0;
+    this.index = 0;
+}
+DataReader.prototype = {
+    /**
+     * Check that the offset will not go too far.
+     * @param {string} offset the additional offset to check.
+     * @throws {Error} an Error if the offset is out of bounds.
+     */
+    checkOffset: function(offset) {
+        this.checkIndex(this.index + offset);
+    },
+    /**
+     * Check that the specifed index will not be too far.
+     * @param {string} newIndex the index to check.
+     * @throws {Error} an Error if the index is out of bounds.
+     */
+    checkIndex: function(newIndex) {
+        if (this.length < newIndex || newIndex < 0) {
+            throw new Error("End of data reached (data length = " + this.length + ", asked index = " + (newIndex) + "). Corrupted zip ?");
+        }
+    },
+    /**
+     * Change the index.
+     * @param {number} newIndex The new index.
+     * @throws {Error} if the new index is out of the data.
+     */
+    setIndex: function(newIndex) {
+        this.checkIndex(newIndex);
+        this.index = newIndex;
+    },
+    /**
+     * Skip the next n bytes.
+     * @param {number} n the number of bytes to skip.
+     * @throws {Error} if the new index is out of the data.
+     */
+    skip: function(n) {
+        this.setIndex(this.index + n);
+    },
+    /**
+     * Get the byte at the specified index.
+     * @param {number} i the index to use.
+     * @return {number} a byte.
+     */
+    byteAt: function(i) {
+        // see implementations
+    },
+    /**
+     * Get the next number with a given byte size.
+     * @param {number} size the number of bytes to read.
+     * @return {number} the corresponding number.
+     */
+    readInt: function(size) {
+        var result = 0,
+            i;
+        this.checkOffset(size);
+        for (i = this.index + size - 1; i >= this.index; i--) {
+            result = (result << 8) + this.byteAt(i);
+        }
+        this.index += size;
+        return result;
+    },
+    /**
+     * Get the next string with a given byte size.
+     * @param {number} size the number of bytes to read.
+     * @return {string} the corresponding string.
+     */
+    readString: function(size) {
+        return utils.transformTo("string", this.readData(size));
+    },
+    /**
+     * Get raw data without conversion, <size> bytes.
+     * @param {number} size the number of bytes to read.
+     * @return {Object} the raw data, implementation specific.
+     */
+    readData: function(size) {
+        // see implementations
+    },
+    /**
+     * Find the last occurence of a zip signature (4 bytes).
+     * @param {string} sig the signature to find.
+     * @return {number} the index of the last occurence, -1 if not found.
+     */
+    lastIndexOfSignature: function(sig) {
+        // see implementations
+    },
+    /**
+     * Get the next date.
+     * @return {Date} the date.
+     */
+    readDate: function() {
+        var dostime = this.readInt(4);
+        return new Date(
+        ((dostime >> 25) & 0x7f) + 1980, // year
+        ((dostime >> 21) & 0x0f) - 1, // month
+        (dostime >> 16) & 0x1f, // day
+        (dostime >> 11) & 0x1f, // hour
+        (dostime >> 5) & 0x3f, // minute
+        (dostime & 0x1f) << 1); // second
+    }
+};
+module.exports = DataReader;
+
+},{"./utils":21}],6:[function(_dereq_,module,exports){
+'use strict';
+exports.base64 = false;
+exports.binary = false;
+exports.dir = false;
+exports.createFolders = false;
+exports.date = null;
+exports.compression = null;
+exports.comment = null;
+
+},{}],7:[function(_dereq_,module,exports){
+'use strict';
+var utils = _dereq_('./utils');
+
+/**
+ * @deprecated
+ * This function will be removed in a future version without replacement.
+ */
+exports.string2binary = function(str) {
+    return utils.string2binary(str);
+};
+
+/**
+ * @deprecated
+ * This function will be removed in a future version without replacement.
+ */
+exports.string2Uint8Array = function(str) {
+    return utils.transformTo("uint8array", str);
+};
+
+/**
+ * @deprecated
+ * This function will be removed in a future version without replacement.
+ */
+exports.uint8Array2String = function(array) {
+    return utils.transformTo("string", array);
+};
+
+/**
+ * @deprecated
+ * This function will be removed in a future version without replacement.
+ */
+exports.string2Blob = function(str) {
+    var buffer = utils.transformTo("arraybuffer", str);
+    return utils.arrayBuffer2Blob(buffer);
+};
+
+/**
+ * @deprecated
+ * This function will be removed in a future version without replacement.
+ */
+exports.arrayBuffer2Blob = function(buffer) {
+    return utils.arrayBuffer2Blob(buffer);
+};
+
+/**
+ * @deprecated
+ * This function will be removed in a future version without replacement.
+ */
+exports.transformTo = function(outputType, input) {
+    return utils.transformTo(outputType, input);
+};
+
+/**
+ * @deprecated
+ * This function will be removed in a future version without replacement.
+ */
+exports.getTypeOf = function(input) {
+    return utils.getTypeOf(input);
+};
+
+/**
+ * @deprecated
+ * This function will be removed in a future version without replacement.
+ */
+exports.checkSupport = function(type) {
+    return utils.checkSupport(type);
+};
+
+/**
+ * @deprecated
+ * This value will be removed in a future version without replacement.
+ */
+exports.MAX_VALUE_16BITS = utils.MAX_VALUE_16BITS;
+
+/**
+ * @deprecated
+ * This value will be removed in a future version without replacement.
+ */
+exports.MAX_VALUE_32BITS = utils.MAX_VALUE_32BITS;
+
+
+/**
+ * @deprecated
+ * This function will be removed in a future version without replacement.
+ */
+exports.pretty = function(str) {
+    return utils.pretty(str);
+};
+
+/**
+ * @deprecated
+ * This function will be removed in a future version without replacement.
+ */
+exports.findCompression = function(compressionMethod) {
+    return utils.findCompression(compressionMethod);
+};
+
+/**
+ * @deprecated
+ * This function will be removed in a future version without replacement.
+ */
+exports.isRegExp = function (object) {
+    return utils.isRegExp(object);
+};
+
+
+},{"./utils":21}],8:[function(_dereq_,module,exports){
+'use strict';
+var USE_TYPEDARRAY = (typeof Uint8Array !== 'undefined') && (typeof Uint16Array !== 'undefined') && (typeof Uint32Array !== 'undefined');
+
+var pako = _dereq_("pako");
+exports.uncompressInputType = USE_TYPEDARRAY ? "uint8array" : "array";
+exports.compressInputType = USE_TYPEDARRAY ? "uint8array" : "array";
+
+exports.magic = "\x08\x00";
+exports.compress = function(input) {
+    return pako.deflateRaw(input);
+};
+exports.uncompress =  function(input) {
+    return pako.inflateRaw(input);
+};
+
+},{"pako":24}],9:[function(_dereq_,module,exports){
+'use strict';
+
+var base64 = _dereq_('./base64');
+
+/**
+Usage:
+   zip = new JSZip();
+   zip.file("hello.txt", "Hello, World!").file("tempfile", "nothing");
+   zip.folder("images").file("smile.gif", base64Data, {base64: true});
+   zip.file("Xmas.txt", "Ho ho ho !", {date : new Date("December 25, 2007 00:00:01")});
+   zip.remove("tempfile");
+
+   base64zip = zip.generate();
+
+**/
+
+/**
+ * Representation a of zip file in js
+ * @constructor
+ * @param {String=|ArrayBuffer=|Uint8Array=} data the data to load, if any (optional).
+ * @param {Object=} options the options for creating this objects (optional).
+ */
+function JSZip(data, options) {
+    // if this constructor is聽used without聽`new`, it聽adds `new` before聽itself:
+    if(!(this instanceof JSZip)) return new JSZip(data, options);
+
+    // object containing the files :
+    // {
+    //   "folder/" : {...},
+    //   "folder/data.txt" : {...}
+    // }
+    this.files = {};
+
+    this.comment = null;
+
+    // Where we are in the hierarchy
+    this.root = "";
+    if (data) {
+        this.load(data, options);
+    }
+    this.clone = function() {
+        var newObj = new JSZip();
+        for (var i in this) {
+            if (typeof this[i] !== "function") {
+                newObj[i] = this[i];
+            }
+        }
+        return newObj;
+    };
+}
+JSZip.prototype = _dereq_('./object');
+JSZip.prototype.load = _dereq_('./load');
+JSZip.support = _dereq_('./support');
+JSZip.defaults = _dereq_('./defaults');
+
+/**
+ * @deprecated
+ * This namespace will be removed in a future version without replacement.
+ */
+JSZip.utils = _dereq_('./deprecatedPublicUtils');
+
+JSZip.base64 = {
+    /**
+     * @deprecated
+     * This method will be removed in a future version without replacement.
+     */
+    encode : function(input) {
+        return base64.encode(input);
+    },
+    /**
+     * @deprecated
+     * This method will be removed in a future version without replacement.
+     */
+    decode : function(input) {
+        return base64.decode(input);
+    }
+};
+JSZip.compressions = _dereq_('./compressions');
+module.exports = JSZip;
+
+},{"./base64":1,"./compressions":3,"./defaults":6,"./deprecatedPublicUtils":7,"./load":10,"./object":13,"./support":17}],10:[function(_dereq_,module,exports){
+'use strict';
+var base64 = _dereq_('./base64');
+var ZipEntries = _dereq_('./zipEntries');
+module.exports = function(data, options) {
+    var files, zipEntries, i, input;
+    options = options || {};
+    if (options.base64) {
+        data = base64.decode(data);
+    }
+
+    zipEntries = new ZipEntries(data, options);
+    files = zipEntries.files;
+    for (i = 0; i < files.length; i++) {
+        input = files[i];
+        this.file(input.fileName, input.decompressed, {
+            binary: true,
+            optimizedBinaryString: true,
+            date: input.date,
+            dir: input.dir,
+            comment : input.fileComment.length ? input.fileComment : null,
+            createFolders: options.createFolders
+        });
+    }
+    if (zipEntries.zipComment.length) {
+        this.comment = zipEntries.zipComment;
+    }
+
+    return this;
+};
+
+},{"./base64":1,"./zipEntries":22}],11:[function(_dereq_,module,exports){
+(function (Buffer){
+'use strict';
+module.exports = function(data, encoding){
+    return new Buffer(data, encoding);
+};
+module.exports.test = function(b){
+    return Buffer.isBuffer(b);
+};
+}).call(this,(typeof Buffer !== "undefined" ? Buffer : undefined))
+},{}],12:[function(_dereq_,module,exports){
+'use strict';
+var Uint8ArrayReader = _dereq_('./uint8ArrayReader');
+
+function NodeBufferReader(data) {
+    this.data = data;
+    this.length = this.data.length;
+    this.index = 0;
+}
+NodeBufferReader.prototype = new Uint8ArrayReader();
+
+/**
+ * @see DataReader.readData
+ */
+NodeBufferReader.prototype.readData = function(size) {
+    this.checkOffset(size);
+    var result = this.data.slice(this.index, this.index + size);
+    this.index += size;
+    return result;
+};
+module.exports = NodeBufferReader;
+
+},{"./uint8ArrayReader":18}],13:[function(_dereq_,module,exports){
+'use strict';
+var support = _dereq_('./support');
+var utils = _dereq_('./utils');
+var crc32 = _dereq_('./crc32');
+var signature = _dereq_('./signature');
+var defaults = _dereq_('./defaults');
+var base64 = _dereq_('./base64');
+var compressions = _dereq_('./compressions');
+var CompressedObject = _dereq_('./compressedObject');
+var nodeBuffer = _dereq_('./nodeBuffer');
+var utf8 = _dereq_('./utf8');
+var StringWriter = _dereq_('./stringWriter');
+var Uint8ArrayWriter = _dereq_('./uint8ArrayWriter');
+
+/**
+ * Returns the raw data of a ZipObject, decompress the content if necessary.
+ * @param {ZipObject} file the file to use.
+ * @return {String|ArrayBuffer|Uint8Array|Buffer} the data.
+ */
+var getRawData = function(file) {
+    if (file._data instanceof CompressedObject) {
+        file._data = file._data.getContent();
+        file.options.binary = true;
+        file.options.base64 = false;
+
+        if (utils.getTypeOf(file._data) === "uint8array") {
+            var copy = file._data;
+            // when reading an arraybuffer, the CompressedObject mechanism will keep it and subarray() a Uint8Array.
+            // if we request a file in the same format, we might get the same Uint8Array or its ArrayBuffer (the original zip file).
+            file._data = new Uint8Array(copy.length);
+            // with an empty Uint8Array, Opera fails with a "Offset larger than array size"
+            if (copy.length !== 0) {
+                file._data.set(copy, 0);
+            }
+        }
+    }
+    return file._data;
+};
+
+/**
+ * Returns the data of a ZipObject in a binary form. If the content is an unicode string, encode it.
+ * @param {ZipObject} file the file to use.
+ * @return {String|ArrayBuffer|Uint8Array|Buffer} the data.
+ */
+var getBinaryData = function(file) {
+    var result = getRawData(file),
+        type = utils.getTypeOf(result);
+    if (type === "string") {
+        if (!file.options.binary) {
+            // unicode text !
+            // unicode string => binary string is a painful process, check if we can avoid it.
+            if (support.nodebuffer) {
+                return nodeBuffer(result, "utf-8");
+            }
+        }
+        return file.asBinary();
+    }
+    return result;
+};
+
+/**
+ * Transform this._data into a string.
+ * @param {function} filter a function String -> String, applied if not null on the result.
+ * @return {String} the string representing this._data.
+ */
+var dataToString = function(asUTF8) {
+    var result = getRawData(this);
+    if (result === null || typeof result === "undefined") {
+        return "";
+    }
+    // if the data is a base64 string, we decode it before checking the encoding !
+    if (this.options.base64) {
+        result = base64.decode(result);
+    }
+    if (asUTF8 && this.options.binary) {
+        // JSZip.prototype.utf8decode supports arrays as input
+        // skip to array => string step, utf8decode will do it.
+        result = out.utf8decode(result);
+    }
+    else {
+        // no utf8 transformation, do the array => string step.
+        result = utils.transformTo("string", result);
+    }
+
+    if (!asUTF8 && !this.options.binary) {
+        result = utils.transformTo("string", out.utf8encode(result));
+    }
+    return result;
+};
+/**
+ * A simple object representing a file in the zip file.
+ * @constructor
+ * @param {string} name the name of the file
+ * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data
+ * @param {Object} options the options of the file
+ */
+var ZipObject = function(name, data, options) {
+    this.name = name;
+    this.dir = options.dir;
+    this.date = options.date;
+    this.comment = options.comment;
+
+    this._data = data;
+    this.options = options;
+
+    /*
+     * This object contains initial values for dir and date.
+     * With them, we can check if the user changed the deprecated metadata in
+     * `ZipObject#options` or not.
+     */
+    this._initialMetadata = {
+      dir : options.dir,
+      date : options.date
+    };
+};
+
+ZipObject.prototype = {
+    /**
+     * Return the content as UTF8 string.
+     * @return {string} the UTF8 string.
+     */
+    asText: function() {
+        return dataToString.call(this, true);
+    },
+    /**
+     * Returns the binary content.
+     * @return {string} the content as binary.
+     */
+    asBinary: function() {
+        return dataToString.call(this, false);
+    },
+    /**
+     * Returns the content as a nodejs Buffer.
+     * @return {Buffer} the content as a Buffer.
+     */
+    asNodeBuffer: function() {
+        var result = getBinaryData(this);
+        return utils.transformTo("nodebuffer", result);
+    },
+    /**
+     * Returns the content as an Uint8Array.
+     * @return {Uint8Array} the content as an Uint8Array.
+     */
+    asUint8Array: function() {
+        var result = getBinaryData(this);
+        return utils.transformTo("uint8array", result);
+    },
+    /**
+     * Returns the content as an ArrayBuffer.
+     * @return {ArrayBuffer} the content as an ArrayBufer.
+     */
+    asArrayBuffer: function() {
+        return this.asUint8Array().buffer;
+    }
+};
+
+/**
+ * Transform an integer into a string in hexadecimal.
+ * @private
+ * @param {number} dec the number to convert.
+ * @param {number} bytes the number of bytes to generate.
+ * @returns {string} the result.
+ */
+var decToHex = function(dec, bytes) {
+    var hex = "",
+        i;
+    for (i = 0; i < bytes; i++) {
+        hex += String.fromCharCode(dec & 0xff);
+        dec = dec >>> 8;
+    }
+    return hex;
+};
+
+/**
+ * Merge the objects passed as parameters into a new one.
+ * @private
+ * @param {...Object} var_args All objects to merge.
+ * @return {Object} a new object with the data of the others.
+ */
+var extend = function() {
+    var result = {}, i, attr;
+    for (i = 0; i < arguments.length; i++) { // arguments is not enumerable in some browsers
+        for (attr in arguments[i]) {
+            if (arguments[i].hasOwnProperty(attr) && typeof result[attr] === "undefined") {
+                result[attr] = arguments[i][attr];
+            }
+        }
+    }
+    return result;
+};
+
+/**
+ * Transforms the (incomplete) options from the user into the complete
+ * set of options to create a file.
+ * @private
+ * @param {Object} o the options from the user.
+ * @return {Object} the complete set of options.
+ */
+var prepareFileAttrs = function(o) {
+    o = o || {};
+    if (o.base64 === true && (o.binary === null || o.binary === undefined)) {
+        o.binary = true;
+    }
+    o = extend(o, defaults);
+    o.date = o.date || new Date();
+    if (o.compression !== null) o.compression = o.compression.toUpperCase();
+
+    return o;
+};
+
+/**
+ * Add a file in the current folder.
+ * @private
+ * @param {string} name the name of the file
+ * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data of the file
+ * @param {Object} o the options of the file
+ * @return {Object} the new file.
+ */
+var fileAdd = function(name, data, o) {
+    // be sure sub folders exist
+    var dataType = utils.getTypeOf(data),
+        parent;
+
+    o = prepareFileAttrs(o);
+
+    if (o.createFolders && (parent = parentFolder(name))) {
+        folderAdd.call(this, parent, true);
+    }
+
+    if (o.dir || data === null || typeof data === "undefined") {
+        o.base64 = false;
+        o.binary = false;
+        data = null;
+    }
+    else if (dataType === "string") {
+        if (o.binary && !o.base64) {
+            // optimizedBinaryString == true means that the file has already been filtered with a 0xFF mask
+            if (o.optimizedBinaryString !== true) {
+                // this is a string, not in a base64 format.
+                // Be sure that this is a correct "binary string"
+                data = utils.string2binary(data);
+            }
+        }
+    }
+    else { // arraybuffer, uint8array, ...
+        o.base64 = false;
+        o.binary = true;
+
+        if (!dataType && !(data instanceof CompressedObject)) {
+            throw new Error("The data of '" + name + "' is in an unsupported format !");
+        }
+
+        // special case : it's way easier to work with Uint8Array than with ArrayBuffer
+        if (dataType === "arraybuffer") {
+            data = utils.transformTo("uint8array", data);
+        }
+    }
+
+    var object = new ZipObject(name, data, o);
+    this.files[name] = object;
+    return object;
+};
+
+/**
+ * Find the parent folder of the path.
+ * @private
+ * @param {string} path the path to use
+ * @return {string} the parent folder, or ""
+ */
+var parentFolder = function (path) {
+    if (path.slice(-1) == '/') {
+        path = path.substring(0, path.length - 1);
+    }
+    var lastSlash = path.lastIndexOf('/');
+    return (lastSlash > 0) ? path.substring(0, lastSlash) : "";
+};
+
+/**
+ * Add a (sub) folder in the current folder.
+ * @private
+ * @param {string} name the folder's name
+ * @param {boolean=} [createFolders] If true, automatically create sub
+ *  folders. Defaults to false.
+ * @return {Object} the new folder.
+ */
+var folderAdd = function(name, createFolders) {
+    // Check the name ends with a /
+    if (name.slice(-1) != "/") {
+        name += "/"; // IE doesn't like substr(-1)
+    }
+
+    createFolders = (typeof createFolders !== 'undefined') ? createFolders : false;
+
+    // Does this folder already exist?
+    if (!this.files[name]) {
+        fileAdd.call(this, name, null, {
+            dir: true,
+            createFolders: createFolders
+        });
+    }
+    return this.files[name];
+};
+
+/**
+ * Generate a JSZip.CompressedObject for a given zipOject.
+ * @param {ZipObject} file the object to read.
+ * @param {JSZip.compression} compression the compression to use.
+ * @return {JSZip.CompressedObject} the compressed result.
+ */
+var generateCompressedObjectFrom = function(file, compression) {
+    var result = new CompressedObject(),
+        content;
+
+    // the data has not been decompressed, we might reuse things !
+    if (file._data instanceof CompressedObject) {
+        result.uncompressedSize = file._data.uncompressedSize;
+        result.crc32 = file._data.crc32;
+
+        if (result.uncompressedSize === 0 || file.dir) {
+            compression = compressions['STORE'];
+            result.compressedContent = "";
+            result.crc32 = 0;
+        }
+        else if (file._data.compressionMethod === compression.magic) {
+            result.compressedContent = file._data.getCompressedContent();
+        }
+        else {
+            content = file._data.getContent();
+            // need to decompress / recompress
+            result.compressedContent = compression.compress(utils.transformTo(compression.compressInputType, content));
+        }
+    }
+    else {
+        // have uncompressed data
+        content = getBinaryData(file);
+        if (!content || content.length === 0 || file.dir) {
+            compression = compressions['STORE'];
+            content = "";
+        }
+        result.uncompressedSize = content.length;
+        result.crc32 = crc32(content);
+        result.compressedContent = compression.compress(utils.transformTo(compression.compressInputType, content));
+    }
+
+    result.compressedSize = result.compressedContent.length;
+    result.compressionMethod = compression.magic;
+
+    return result;
+};
+
+/**
+ * Generate the various parts used in the construction of the final zip file.
+ * @param {string} name the file name.
+ * @param {ZipObject} file the file content.
+ * @param {JSZip.CompressedObject} compressedObject the compressed object.
+ * @param {number} offset the current offset from the start of the zip file.
+ * @return {object} the zip parts.
+ */
+var generateZipParts = function(name, file, compressedObject, offset) {
+    var data = compressedObject.compressedContent,
+        utfEncodedFileName = utils.transformTo("string", utf8.utf8encode(file.name)),
+        comment = file.comment || "",
+        utfEncodedComment = utils.transformTo("string", utf8.utf8encode(comment)),
+        useUTF8ForFileName = utfEncodedFileName.length !== file.name.length,
+        useUTF8ForComment = utfEncodedComment.length !== comment.length,
+        o = file.options,
+        dosTime,
+        dosDate,
+        extraFields = "",
+        unicodePathExtraField = "",
+        unicodeCommentExtraField = "",
+        dir, date;
+
+
+    // handle the deprecated options.dir
+    if (file._initialMetadata.dir !== file.dir) {
+        dir = file.dir;
+    } else {
+        dir = o.dir;
+    }
+
+    // handle the deprecated options.date
+    if(file._initialMetadata.date !== file.date) {
+        date = file.date;
+    } else {
+        date = o.date;
+    }
+
+    // date
+    // @see http://www.delorie.com/djgpp/doc/rbinter/it/52/13.html
+    // @see http://www.delorie.com/djgpp/doc/rbinter/it/65/16.html
+    // @see http://www.delorie.com/djgpp/doc/rbinter/it/66/16.html
+
+    dosTime = date.getHours();
+    dosTime = dosTime << 6;
+    dosTime = dosTime | date.getMinutes();
+    dosTime = dosTime << 5;
+    dosTime = dosTime | date.getSeconds() / 2;
+
+    dosDate = date.getFullYear() - 1980;
+    dosDate = dosDate << 4;
+    dosDate = dosDate | (date.getMonth() + 1);
+    dosDate = dosDate << 5;
+    dosDate = dosDate | date.getDate();
+
+    if (useUTF8ForFileName) {
+        // set the unicode path extra field. unzip needs at least one extra
+        // field to correctly handle unicode path, so using the path is as good
+        // as any other information. This could improve the situation with
+        // other archive managers too.
+        // This field is usually used without the utf8 flag, with a non
+        // unicode path in the header (winrar, winzip). This helps (a bit)
+        // with the messy Windows' default compressed folders feature but
+        // breaks on p7zip which doesn't seek the unicode path extra field.
+        // So for now, UTF-8 everywhere !
+        unicodePathExtraField =
+            // Version
+            decToHex(1, 1) +
+            // NameCRC32
+            decToHex(crc32(utfEncodedFileName), 4) +
+            // UnicodeName
+            utfEncodedFileName;
+
+        extraFields +=
+            // Info-ZIP Unicode Path Extra Field
+            "\x75\x70" +
+            // size
+            decToHex(unicodePathExtraField.length, 2) +
+            // content
+            unicodePathExtraField;
+    }
+
+    if(useUTF8ForComment) {
+
+        unicodeCommentExtraField =
+            // Version
+            decToHex(1, 1) +
+            // CommentCRC32
+            decToHex(this.crc32(utfEncodedComment), 4) +
+            // UnicodeName
+            utfEncodedComment;
+
+        extraFields +=
+            // Info-ZIP Unicode Path Extra Field
+            "\x75\x63" +
+            // size
+            decToHex(unicodeCommentExtraField.length, 2) +
+            // content
+            unicodeCommentExtraField;
+    }
+
+    var header = "";
+
+    // version needed to extract
+    header += "\x0A\x00";
+    // general purpose bit flag
+    // set bit 11 if utf8
+    header += (useUTF8ForFileName || useUTF8ForComment) ? "\x00\x08" : "\x00\x00";
+    // compression method
+    header += compressedObject.compressionMethod;
+    // last mod file time
+    header += decToHex(dosTime, 2);
+    // last mod file date
+    header += decToHex(dosDate, 2);
+    // crc-32
+    header += decToHex(compressedObject.crc32, 4);
+    // compressed size
+    header += decToHex(compressedObject.compressedSize, 4);
+    // uncompressed size
+    header += decToHex(compressedObject.uncompressedSize, 4);
+    // file name length
+    header += decToHex(utfEncodedFileName.length, 2);
+    // extra field length
+    header += decToHex(extraFields.length, 2);
+
+
+    var fileRecord = signature.LOCAL_FILE_HEADER + header + utfEncodedFileName + extraFields;
+
+    var dirRecord = signature.CENTRAL_FILE_HEADER +
+    // version made by (00: DOS)
+    "\x14\x00" +
+    // file header (common to file and central directory)
+    header +
+    // file comment length
+    decToHex(utfEncodedComment.length, 2) +
+    // disk number start
+    "\x00\x00" +
+    // internal file attributes TODO
+    "\x00\x00" +
+    // external file attributes
+    (dir === true ? "\x10\x00\x00\x00" : "\x00\x00\x00\x00") +
+    // relative offset of local header
+    decToHex(offset, 4) +
+    // file name
+    utfEncodedFileName +
+    // extra field
+    extraFields +
+    // file comment
+    utfEncodedComment;
+
+    return {
+        fileRecord: fileRecord,
+        dirRecord: dirRecord,
+        compressedObject: compressedObject
+    };
+};
+
+
+// return the actual prototype of JSZip
+var out = {
+    /**
+     * Read an existing zip and merge the data in the current JSZip object.
+     * The implementation is in jszip-load.js, don't forget to include it.
+     * @param {String|ArrayBuffer|Uint8Array|Buffer} stream  The stream to load
+     * @param {Object} options Options for loading the stream.
+     *  options.base64 : is the stream in base64 ? default : false
+     * @return {JSZip} the current JSZip object
+     */
+    load: function(stream, options) {
+        throw new Error("Load method is not defined. Is the file jszip-load.js included ?");
+    },
+
+    /**
+     * Filter nested files/folders with the specified function.
+     * @param {Function} search the predicate to use :
+     * function (relativePath, file) {...}
+     * It takes 2 arguments : the relative path and the file.
+     * @return {Array} An array of matching elements.
+     */
+    filter: function(search) {
+        var result = [],
+            filename, relativePath, file, fileClone;
+        for (filename in this.files) {
+            if (!this.files.hasOwnProperty(filename)) {
+                continue;
+            }
+            file = this.files[filename];
+            // return a new object, don't let the user mess with our internal objects :)
+            fileClone = new ZipObject(file.name, file._data, extend(file.options));
+            relativePath = filename.slice(this.root.length, filename.length);
+            if (filename.slice(0, this.root.length) === this.root && // the file is in the current root
+            search(relativePath, fileClone)) { // and the file matches the function
+                result.push(fileClone);
+            }
+        }
+        return result;
+    },
+
+    /**
+     * Add a file to the zip file, or search a file.
+     * @param   {string|RegExp} name The name of the file to add (if data is defined),
+     * the name of the file to find (if no data) or a regex to match files.
+     * @param   {String|ArrayBuffer|Uint8Array|Buffer} data  The file data, either raw or base64 encoded
+     * @param   {Object} o     File options
+     * @return  {JSZip|Object|Array} this JSZip object (when adding a file),
+     * a file (when searching by string) or an array of files (when searching by regex).
+     */
+    file: function(name, data, o) {
+        if (arguments.length === 1) {
+            if (utils.isRegExp(name)) {
+                var regexp = name;
+                return this.filter(function(relativePath, file) {
+                    return !file.dir && regexp.test(relativePath);
+                });
+            }
+            else { // text
+                return this.filter(function(relativePath, file) {
+                    return !file.dir && relativePath === name;
+                })[0] || null;
+            }
+        }
+        else { // more than one argument : we have data !
+            name = this.root + name;
+            fileAdd.call(this, name, data, o);
+        }
+        return this;
+    },
+
+    /**
+     * Add a directory to the zip file, or search.
+     * @param   {String|RegExp} arg The name of the directory to add, or a regex to search folders.
+     * @return  {JSZip} an object with the new directory as the root, or an array containing matching folders.
+     */
+    folder: function(arg) {
+        if (!arg) {
+            return this;
+        }
+
+        if (utils.isRegExp(arg)) {
+            return this.filter(function(relativePath, file) {
+                return file.dir && arg.test(relativePath);
+            });
+        }
+
+        // else, name is a new folder
+        var name = this.root + arg;
+        var newFolder = folderAdd.call(this, name);
+
+        // Allow chaining by returning a new object with this folder as the root
+        var ret = this.clone();
+        ret.root = newFolder.name;
+        return ret;
+    },
+
+    /**
+     * Delete a file, or a directory and all sub-files, from the zip
+     * @param {string} name the name of the file to delete
+     * @return {JSZip} this JSZip object
+     */
+    remove: function(name) {
+        name = this.root + name;
+        var file = this.files[name];
+        if (!file) {
+            // Look for any folders
+            if (name.slice(-1) != "/") {
+                name += "/";
+            }
+            file = this.files[name];
+        }
+
+        if (file && !file.dir) {
+            // file
+            delete this.files[name];
+        } else {
+            // maybe a folder, delete recursively
+            var kids = this.filter(function(relativePath, file) {
+                return file.name.slice(0, name.length) === name;
+            });
+            for (var i = 0; i < kids.length; i++) {
+                delete this.files[kids[i].name];
+            }
+        }
+
+        return this;
+    },
+
+    /**
+     * Generate the complete zip file
+     * @param {Object} options the options to generate the zip file :
+     * - base64, (deprecated, use type instead) true to generate base64.
+     * - compression, "STORE" by default.
+     * - type, "base64" by default. Values are : string, base64, uint8array, arraybuffer, blob.
+     * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the zip file
+     */
+    generate: function(options) {
+        options = extend(options || {}, {
+            base64: true,
+            compression: "STORE",
+            type: "base64",
+            comment: null
+        });
+
+        utils.checkSupport(options.type);
+
+        var zipData = [],
+            localDirLength = 0,
+            centralDirLength = 0,
+            writer, i,
+            utfEncodedComment = utils.transformTo("string", this.utf8encode(options.comment || this.comment || ""));
+
+        // first, generate all the zip parts.
+        for (var name in this.files) {
+            if (!this.files.hasOwnProperty(name)) {
+                continue;
+            }
+            var file = this.files[name];
+
+            var compressionName = file.options.compression || options.compression.toUpperCase();
+            var compression = compressions[compressionName];
+            if (!compression) {
+                throw new Error(compressionName + " is not a valid compression method !");
+            }
+
+            var compressedObject = generateCompressedObjectFrom.call(this, file, compression);
+
+            var zipPart = generateZipParts.call(this, name, file, compressedObject, localDirLength);
+            localDirLength += zipPart.fileRecord.length + compressedObject.compressedSize;
+            centralDirLength += zipPart.dirRecord.length;
+            zipData.push(zipPart);
+        }
+
+        var dirEnd = "";
+
+        // end of central dir signature
+        dirEnd = signature.CENTRAL_DIRECTORY_END +
+        // number of this disk
+        "\x00\x00" +
+        // number of the disk with the start of the central directory
+        "\x00\x00" +
+        // total number of entries in the central directory on this disk
+        decToHex(zipData.length, 2) +
+        // total number of entries in the central directory
+        decToHex(zipData.length, 2) +
+        // size of the central directory   4 bytes
+        decToHex(centralDirLength, 4) +
+        // offset of start of central directory with respect to the starting disk number
+        decToHex(localDirLength, 4) +
+        // .ZIP file comment length
+        decToHex(utfEncodedComment.length, 2) +
+        // .ZIP file comment
+        utfEncodedComment;
+
+
+        // we have all the parts (and the total length)
+        // time to create a writer !
+        var typeName = options.type.toLowerCase();
+        if(typeName==="uint8array"||typeName==="arraybuffer"||typeName==="blob"||typeName==="nodebuffer") {
+            writer = new Uint8ArrayWriter(localDirLength + centralDirLength + dirEnd.length);
+        }else{
+            writer = new StringWriter(localDirLength + centralDirLength + dirEnd.length);
+        }
+
+        for (i = 0; i < zipData.length; i++) {
+            writer.append(zipData[i].fileRecord);
+            writer.append(zipData[i].compressedObject.compressedContent);
+        }
+        for (i = 0; i < zipData.length; i++) {
+            writer.append(zipData[i].dirRecord);
+        }
+
+        writer.append(dirEnd);
+
+        var zip = writer.finalize();
+
+
+
+        switch(options.type.toLowerCase()) {
+            // case "zip is an Uint8Array"
+            case "uint8array" :
+            case "arraybuffer" :
+            case "nodebuffer" :
+               return utils.transformTo(options.type.toLowerCase(), zip);
+            case "blob" :
+               return utils.arrayBuffer2Blob(utils.transformTo("arraybuffer", zip));
+            // case "zip is a string"
+            case "base64" :
+               return (options.base64) ? base64.encode(zip) : zip;
+            default : // case "string" :
+               return zip;
+         }
+
+    },
+
+    /**
+     * @deprecated
+     * This method will be removed in a future version without replacement.
+     */
+    crc32: function (input, crc) {
+        return crc32(input, crc);
+    },
+
+    /**
+     * @deprecated
+     * This method will be removed in a future version without replacement.
+     */
+    utf8encode: function (string) {
+        return utils.transformTo("string", utf8.utf8encode(string));
+    },
+
+    /**
+     * @deprecated
+     * This method will be removed in a future version without replacement.
+     */
+    utf8decode: function (input) {
+        return utf8.utf8decode(input);
+    }
+};
+module.exports = out;
+
+},{"./base64":1,"./compressedObject":2,"./compressions":3,"./crc32":4,"./defaults":6,"./nodeBuffer":11,"./signature":14,"./stringWriter":16,"./support":17,"./uint8ArrayWriter":19,"./utf8":20,"./utils":21}],14:[function(_dereq_,module,exports){
+'use strict';
+exports.LOCAL_FILE_HEADER = "PK\x03\x04";
+exports.CENTRAL_FILE_HEADER = "PK\x01\x02";
+exports.CENTRAL_DIRECTORY_END = "PK\x05\x06";
+exports.ZIP64_CENTRAL_DIRECTORY_LOCATOR = "PK\x06\x07";
+exports.ZIP64_CENTRAL_DIRECTORY_END = "PK\x06\x06";
+exports.DATA_DESCRIPTOR = "PK\x07\x08";
+
+},{}],15:[function(_dereq_,module,exports){
+'use strict';
+var DataReader = _dereq_('./dataReader');
+var utils = _dereq_('./utils');
+
+function StringReader(data, optimizedBinaryString) {
+    this.data = data;
+    if (!optimizedBinaryString) {
+        this.data = utils.string2binary(this.data);
+    }
+    this.length = this.data.length;
+    this.index = 0;
+}
+StringReader.prototype = new DataReader();
+/**
+ * @see DataReader.byteAt
+ */
+StringReader.prototype.byteAt = function(i) {
+    return this.data.charCodeAt(i);
+};
+/**
+ * @see DataReader.lastIndexOfSignature
+ */
+StringReader.prototype.lastIndexOfSignature = function(sig) {
+    return this.data.lastIndexOf(sig);
+};
+/**
+ * @see DataReader.readData
+ */
+StringReader.prototype.readData = function(size) {
+    this.checkOffset(size);
+    // this will work because the constructor applied the "& 0xff" mask.
+    var result = this.data.slice(this.index, this.index + size);
+    this.index += size;
+    return result;
+};
+module.exports = StringReader;
+
+},{"./dataReader":5,"./utils":21}],16:[function(_dereq_,module,exports){
+'use strict';
+
+var utils = _dereq_('./utils');
+
+/**
+ * An object to write any content to a string.
+ * @constructor
+ */
+var StringWriter = function() {
+    this.data = [];
+};
+StringWriter.prototype = {
+    /**
+     * Append any content to the current string.
+     * @param {Object} input the content to add.
+     */
+    append: function(input) {
+        input = utils.transformTo("string", input);
+        this.data.push(input);
+    },
+    /**
+     * Finalize the construction an return the result.
+     * @return {string} the generated string.
+     */
+    finalize: function() {
+        return this.data.join("");
+    }
+};
+
+module.exports = StringWriter;
+
+},{"./utils":21}],17:[function(_dereq_,module,exports){
+(function (Buffer){
+'use strict';
+exports.base64 = true;
+exports.array = true;
+exports.string = true;
+exports.arraybuffer = typeof ArrayBuffer !== "undefined" && typeof Uint8Array !== "undefined";
+// contains true if JSZip can read/generate nodejs Buffer, false otherwise.
+// Browserify will provide a Buffer implementation for browsers, which is
+// an augmented Uint8Array (i.e., can be used as either Buffer or U8).
+exports.nodebuffer = typeof Buffer !== "undefined";
+// contains true if JSZip can read/generate Uint8Array, false otherwise.
+exports.uint8array = typeof Uint8Array !== "undefined";
+
+if (typeof ArrayBuffer === "undefined") {
+    exports.blob = false;
+}
+else {
+    var buffer = new ArrayBuffer(0);
+    try {
+        exports.blob = new Blob([buffer], {
+            type: "application/zip"
+        }).size === 0;
+    }
+    catch (e) {
+        try {
+            var Builder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder;
+            var builder = new Builder();
+            builder.append(buffer);
+            exports.blob = builder.getBlob('application/zip').size === 0;
+        }
+        catch (e) {
+            exports.blob = false;
+        }
+    }
+}
+
+}).call(this,(typeof Buffer !== "undefined" ? Buffer : undefined))
+},{}],18:[function(_dereq_,module,exports){
+'use strict';
+var DataReader = _dereq_('./dataReader');
+
+function Uint8ArrayReader(data) {
+    if (data) {
+        this.data = data;
+        this.length = this.data.length;
+        this.index = 0;
+    }
+}
+Uint8ArrayReader.prototype = new DataReader();
+/**
+ * @see DataReader.byteAt
+ */
+Uint8ArrayReader.prototype.byteAt = function(i) {
+    return this.data[i];
+};
+/**
+ * @see DataReader.lastIndexOfSignature
+ */
+Uint8ArrayReader.prototype.lastIndexOfSignature = function(sig) {
+    var sig0 = sig.charCodeAt(0),
+        sig1 = sig.charCodeAt(1),
+        sig2 = sig.charCodeAt(2),
+        sig3 = sig.charCodeAt(3);
+    for (var i = this.length - 4; i >= 0; --i) {
+        if (this.data[i] === sig0 && this.data[i + 1] === sig1 && this.data[i + 2] === sig2 && this.data[i + 3] === sig3) {
+            return i;
+        }
+    }
+
+    return -1;
+};
+/**
+ * @see DataReader.readData
+ */
+Uint8ArrayReader.prototype.readData = function(size) {
+    this.checkOffset(size);
+    if(size === 0) {
+        // in IE10, when using subarray(idx, idx), we get the array [0x00] instead of [].
+        return new Uint8Array(0);
+    }
+    var result = this.data.subarray(this.index, this.index + size);
+    this.index += size;
+    return result;
+};
+module.exports = Uint8ArrayReader;
+
+},{"./dataReader":5}],19:[function(_dereq_,module,exports){
+'use strict';
+
+var utils = _dereq_('./utils');
+
+/**
+ * An object to write any content to an Uint8Array.
+ * @constructor
+ * @param {number} length The length of the array.
+ */
+var Uint8ArrayWriter = function(length) {
+    this.data = new Uint8Array(length);
+    this.index = 0;
+};
+Uint8ArrayWriter.prototype = {
+    /**
+     * Append any content to the current array.
+     * @param {Object} input the content to add.
+     */
+    append: function(input) {
+        if (input.length !== 0) {
+            // with an empty Uint8Array, Opera fails with a "Offset larger than array size"
+            input = utils.transformTo("uint8array", input);
+            this.data.set(input, this.index);
+            this.index += input.length;
+        }
+    },
+    /**
+     * Finalize the construction an return the result.
+     * @return {Uint8Array} the generated array.
+     */
+    finalize: function() {
+        return this.data;
+    }
+};
+
+module.exports = Uint8ArrayWriter;
+
+},{"./utils":21}],20:[function(_dereq_,module,exports){
+'use strict';
+
+var utils = _dereq_('./utils');
+var support = _dereq_('./support');
+var nodeBuffer = _dereq_('./nodeBuffer');
+
+/**
+ * The following functions come from pako, from pako/lib/utils/strings
+ * released under the MIT license, see pako https://github.com/nodeca/pako/
+ */
+
+// Table with utf8 lengths (calculated by first byte of sequence)
+// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,
+// because max possible codepoint is 0x10ffff
+var _utf8len = new Array(256);
+for (var i=0; i<256; i++) {
+  _utf8len[i] = (i >= 252 ? 6 : i >= 248 ? 5 : i >= 240 ? 4 : i >= 224 ? 3 : i >= 192 ? 2 : 1);
+}
+_utf8len[254]=_utf8len[254]=1; // Invalid sequence start
+
+// convert string to array (typed, when possible)
+var string2buf = function (str) {
+    var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;
+
+    // count binary size
+    for (m_pos = 0; m_pos < str_len; m_pos++) {
+        c = str.charCodeAt(m_pos);
+        if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) {
+            c2 = str.charCodeAt(m_pos+1);
+            if ((c2 & 0xfc00) === 0xdc00) {
+                c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);
+                m_pos++;
+            }
+        }
+        buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;
+    }
+
+    // allocate buffer
+    if (support.uint8array) {
+        buf = new Uint8Array(buf_len);
+    } else {
+        buf = new Array(buf_len);
+    }
+
+    // convert
+    for (i=0, m_pos = 0; i < buf_len; m_pos++) {
+        c = str.charCodeAt(m_pos);
+        if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) {
+            c2 = str.charCodeAt(m_pos+1);
+            if ((c2 & 0xfc00) === 0xdc00) {
+                c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);
+                m_pos++;
+            }
+        }
+        if (c < 0x80) {
+            /* one byte */
+            buf[i++] = c;
+        } else if (c < 0x800) {
+            /* two bytes */
+            buf[i++] = 0xC0 | (c >>> 6);
+            buf[i++] = 0x80 | (c & 0x3f);
+        } else if (c < 0x10000) {
+            /* three bytes */
+            buf[i++] = 0xE0 | (c >>> 12);
+            buf[i++] = 0x80 | (c >>> 6 & 0x3f);
+            buf[i++] = 0x80 | (c & 0x3f);
+        } else {
+            /* four bytes */
+            buf[i++] = 0xf0 | (c >>> 18);
+            buf[i++] = 0x80 | (c >>> 12 & 0x3f);
+            buf[i++] = 0x80 | (c >>> 6 & 0x3f);
+            buf[i++] = 0x80 | (c & 0x3f);
+        }
+    }
+
+    return buf;
+};
+
+// Calculate max possible position in utf8 buffer,
+// that will not break sequence. If that's not possible
+// - (very small limits) return max size as is.
+//
+// buf[] - utf8 bytes array
+// max   - length limit (mandatory);
+var utf8border = function(buf, max) {
+    var pos;
+
+    max = max || buf.length;
+    if (max > buf.length) { max = buf.length; }
+
+    // go back from last position, until start of sequence found
+    pos = max-1;
+    while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }
+
+    // Fuckup - very small and broken sequence,
+    // return max, because we should return something anyway.
+    if (pos < 0) { return max; }
+
+    // If we came to start of buffer - that means vuffer is too small,
+    // return max too.
+    if (pos === 0) { return max; }
+
+    return (pos + _utf8len[buf[pos]] > max) ? pos : max;
+};
+
+// convert array to string
+var buf2string = function (buf) {
+    var str, i, out, c, c_len;
+    var len = buf.length;
+
+    // Reserve max possible length (2 words per char)
+    // NB: by unknown reasons, Array is significantly faster for
+    //     String.fromCharCode.apply than Uint16Array.
+    var utf16buf = new Array(len*2);
+
+    for (out=0, i=0; i<len;) {
+        c = buf[i++];
+        // quick process ascii
+        if (c < 0x80) { utf16buf[out++] = c; continue; }
+
+        c_len = _utf8len[c];
+        // skip 5 & 6 byte codes
+        if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len-1; continue; }
+
+        // apply mask on first byte
+        c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;
+        // join the rest
+        while (c_len > 1 && i < len) {
+            c = (c << 6) | (buf[i++] & 0x3f);
+            c_len--;
+        }
+
+        // terminated by end of string?
+        if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }
+
+        if (c < 0x10000) {
+            utf16buf[out++] = c;
+        } else {
+            c -= 0x10000;
+            utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);
+            utf16buf[out++] = 0xdc00 | (c & 0x3ff);
+        }
+    }
+
+    // shrinkBuf(utf16buf, out)
+    if (utf16buf.length !== out) {
+        if(utf16buf.subarray) {
+            utf16buf = utf16buf.subarray(0, out);
+        } else {
+            utf16buf.length = out;
+        }
+    }
+
+    // return String.fromCharCode.apply(null, utf16buf);
+    return utils.applyFromCharCode(utf16buf);
+};
+
+
+// That's all for the pako functions.
+
+
+/**
+ * Transform a javascript string into an array (typed if possible) of bytes,
+ * UTF-8 encoded.
+ * @param {String} str the string to encode
+ * @return {Array|Uint8Array|Buffer} the UTF-8 encoded string.
+ */
+exports.utf8encode = function utf8encode(str) {
+    if (support.nodebuffer) {
+        return nodeBuffer(str, "utf-8");
+    }
+
+    return string2buf(str);
+};
+
+
+/**
+ * Transform a bytes array (or a representation) representing an UTF-8 encoded
+ * string into a javascript string.
+ * @param {Array|Uint8Array|Buffer} buf the data de decode
+ * @return {String} the decoded string.
+ */
+exports.utf8decode = function utf8decode(buf) {
+    if (support.nodebuffer) {
+        return utils.transformTo("nodebuffer", buf).toString("utf-8");
+    }
+
+    buf = utils.transformTo(support.uint8array ? "uint8array" : "array", buf);
+
+    // return buf2string(buf);
+    // Chrome prefers to work with "small" chunks of data
+    // for the method buf2string.
+    // Firefox and Chrome has their own shortcut, IE doesn't seem to really care.
+    var result = [], k = 0, len = buf.length, chunk = 65536;
+    while (k < len) {
+        var nextBoundary = utf8border(buf, Math.min(k + chunk, len));
+        if (support.uint8array) {
+            result.push(buf2string(buf.subarray(k, nextBoundary)));
+        } else {
+            result.push(buf2string(buf.slice(k, nextBoundary)));
+        }
+        k = nextBoundary;
+    }
+    return result.join("");
+
+};
+// vim: set shiftwidth=4 softtabstop=4:
+
+},{"./nodeBuffer":11,"./support":17,"./utils":21}],21:[function(_dereq_,module,exports){
+'use strict';
+var support = _dereq_('./support');
+var compressions = _dereq_('./compressions');
+var nodeBuffer = _dereq_('./nodeBuffer');
+/**
+ * Convert a string to a "binary string" : a string containing only char codes between 0 and 255.
+ * @param {string} str the string to transform.
+ * @return {String} the binary string.
+ */
+exports.string2binary = function(str) {
+    var result = "";
+    for (var i = 0; i < str.length; i++) {
+        result += String.fromCharCode(str.charCodeAt(i) & 0xff);
+    }
+    return result;
+};
+exports.arrayBuffer2Blob = function(buffer) {
+    exports.checkSupport("blob");
+
+    try {
+        // Blob constructor
+        return new Blob([buffer], {
+            type: "application/zip"
+        });
+    }
+    catch (e) {
+
+        try {
+            // deprecated, browser only, old way
+            var Builder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder;
+            var builder = new Builder();
+            builder.append(buffer);
+            return builder.getBlob('application/zip');
+        }
+        catch (e) {
+
+            // well, fuck ?!
+            throw new Error("Bug : can't construct the Blob.");
+        }
+    }
+
+
+};
+/**
+ * The identity function.
+ * @param {Object} input the input.
+ * @return {Object} the same input.
+ */
+function identity(input) {
+    return input;
+}
+
+/**
+ * Fill in an array with a string.
+ * @param {String} str the string to use.
+ * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to fill in (will be mutated).
+ * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated array.
+ */
+function stringToArrayLike(str, array) {
+    for (var i = 0; i < str.length; ++i) {
+        array[i] = str.charCodeAt(i) & 0xFF;
+    }
+    return array;
+}
+
+/**
+ * Transform an array-like object to a string.
+ * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.
+ * @return {String} the result.
+ */
+function arrayLikeToString(array) {
+    // Performances notes :
+    // --------------------
+    // String.fromCharCode.apply(null, array) is the fastest, see
+    // see http://jsperf.com/converting-a-uint8array-to-a-string/2
+    // but the stack is limited (and we can get huge arrays !).
+    //
+    // result += String.fromCharCode(array[i]); generate too many strings !
+    //
+    // This code is inspired by http://jsperf.com/arraybuffer-to-string-apply-performance/2
+    var chunk = 65536;
+    var result = [],
+        len = array.length,
+        type = exports.getTypeOf(array),
+        k = 0,
+        canUseApply = true;
+      try {
+         switch(type) {
+            case "uint8array":
+               String.fromCharCode.apply(null, new Uint8Array(0));
+               break;
+            case "nodebuffer":
+               String.fromCharCode.apply(null, nodeBuffer(0));
+               break;
+         }
+      } catch(e) {
+         canUseApply = false;
+      }
+
+      // no apply : slow and painful algorithm
+      // default browser on android 4.*
+      if (!canUseApply) {
+         var resultStr = "";
+         for(var i = 0; i < array.length;i++) {
+            resultStr += String.fromCharCode(array[i]);
+         }
+    return resultStr;
+    }
+    while (k < len && chunk > 1) {
+        try {
+            if (type === "array" || type === "nodebuffer") {
+                result.push(String.fromCharCode.apply(null, array.slice(k, Math.min(k + chunk, len))));
+            }
+            else {
+                result.push(String.fromCharCode.apply(null, array.subarray(k, Math.min(k + chunk, len))));
+            }
+            k += chunk;
+        }
+        catch (e) {
+            chunk = Math.floor(chunk / 2);
+        }
+    }
+    return result.join("");
+}
+
+exports.applyFromCharCode = arrayLikeToString;
+
+
+/**
+ * Copy the data from an array-like to an other array-like.
+ * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayFrom the origin array.
+ * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayTo the destination array which will be mutated.
+ * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated destination array.
+ */
+function arrayLikeToArrayLike(arrayFrom, arrayTo) {
+    for (var i = 0; i < arrayFrom.length; i++) {
+        arrayTo[i] = arrayFrom[i];
+    }
+    return arrayTo;
+}
+
+// a matrix containing functions to transform everything into everything.
+var transform = {};
+
+// string to ?
+transform["string"] = {
+    "string": identity,
+    "array": function(input) {
+        return stringToArrayLike(input, new Array(input.length));
+    },
+    "arraybuffer": function(input) {
+        return transform["string"]["uint8array"](input).buffer;
+    },
+    "uint8array": function(input) {
+        return stringToArrayLike(input, new Uint8Array(input.length));
+    },
+    "nodebuffer": function(input) {
+        return stringToArrayLike(input, nodeBuffer(input.length));
+    }
+};
+
+// array to ?
+transform["array"] = {
+    "string": arrayLikeToString,
+    "array": identity,
+    "arraybuffer": function(input) {
+        return (new Uint8Array(input)).buffer;
+    },
+    "uint8array": function(input) {
+        return new Uint8Array(input);
+    },
+    "nodebuffer": function(input) {
+        return nodeBuffer(input);
+    }
+};
+
+// arraybuffer to ?
+transform["arraybuffer"] = {
+    "string": function(input) {
+        return arrayLikeToString(new Uint8Array(input));
+    },
+    "array": function(input) {
+        return arrayLikeToArrayLike(new Uint8Array(input), new Array(input.byteLength));
+    },
+    "arraybuffer": identity,
+    "uint8array": function(input) {
+        return new Uint8Array(input);
+    },
+    "nodebuffer": function(input) {
+        return nodeBuffer(new Uint8Array(input));
+    }
+};
+
+// uint8array to ?
+transform["uint8array"] = {
+    "string": arrayLikeToString,
+    "array": function(input) {
+        return arrayLikeToArrayLike(input, new Array(input.length));
+    },
+    "arraybuffer": function(input) {
+        return input.buffer;
+    },
+    "uint8array": identity,
+    "nodebuffer": function(input) {
+        return nodeBuffer(input);
+    }
+};
+
+// nodebuffer to ?
+transform["nodebuffer"] = {
+    "string": arrayLikeToString,
+    "array": function(input) {
+        return arrayLikeToArrayLike(input, new Array(input.length));
+    },
+    "arraybuffer": function(input) {
+        return transform["nodebuffer"]["uint8array"](input).buffer;
+    },
+    "uint8array": function(input) {
+        return arrayLikeToArrayLike(input, new Uint8Array(input.length));
+    },
+    "nodebuffer": identity
+};
+
+/**
+ * Transform an input into any type.
+ * The supported output type are : string, array, uint8array, arraybuffer, nodebuffer.
+ * If no output type is specified, the unmodified input will be returned.
+ * @param {String} outputType the output type.
+ * @param {String|Array|ArrayBuffer|Uint8Array|Buffer} input the input to convert.
+ * @throws {Error} an Error if the browser doesn't support the requested output type.
+ */
+exports.transformTo = function(outputType, input) {
+    if (!input) {
+        // undefined, null, etc
+        // an empty string won't harm.
+        input = "";
+    }
+    if (!outputType) {
+        return input;
+    }
+    exports.checkSupport(outputType);
+    var inputType = exports.getTypeOf(input);
+    var result = transform[inputType][outputType](input);
+    return result;
+};
+
+/**
+ * Return the type of the input.
+ * The type will be in a format valid for JSZip.utils.transformTo : string, array, uint8array, arraybuffer.
+ * @param {Object} input the input to identify.
+ * @return {String} the (lowercase) type of the input.
+ */
+exports.getTypeOf = function(input) {
+    if (typeof input === "string") {
+        return "string";
+    }
+    if (Object.prototype.toString.call(input) === "[object Array]") {
+        return "array";
+    }
+    if (support.nodebuffer && nodeBuffer.test(input)) {
+        return "nodebuffer";
+    }
+    if (support.uint8array && input instanceof Uint8Array) {
+        return "uint8array";
+    }
+    if (support.arraybuffer && input instanceof ArrayBuffer) {
+        return "arraybuffer";
+    }
+};
+
+/**
+ * Throw an exception if the type is not supported.
+ * @param {String} type the type to check.
+ * @throws {Error} an Error if the browser doesn't support the requested type.
+ */
+exports.checkSupport = function(type) {
+    var supported = support[type.toLowerCase()];
+    if (!supported) {
+        throw new Error(type + " is not supported by this browser");
+    }
+};
+exports.MAX_VALUE_16BITS = 65535;
+exports.MAX_VALUE_32BITS = -1; // well, "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" is parsed as -1
+
+/**
+ * Prettify a string read as binary.
+ * @param {string} str the string to prettify.
+ * @return {string} a pretty string.
+ */
+exports.pretty = function(str) {
+    var res = '',
+        code, i;
+    for (i = 0; i < (str || "").length; i++) {
+        code = str.charCodeAt(i);
+        res += '\\x' + (code < 16 ? "0" : "") + code.toString(16).toUpperCase();
+    }
+    return res;
+};
+
+/**
+ * Find a compression registered in JSZip.
+ * @param {string} compressionMethod the method magic to find.
+ * @return {Object|null} the JSZip compression object, null if none found.
+ */
+exports.findCompression = function(compressionMethod) {
+    for (var method in compressions) {
+        if (!compressions.hasOwnProperty(method)) {
+            continue;
+        }
+        if (compressions[method].magic === compressionMethod) {
+            return compressions[method];
+        }
+    }
+    return null;
+};
+/**
+* Cross-window, cross-Node-context regular expression detection
+* @param  {Object}  object Anything
+* @return {Boolean}        true if the object is a regular expression,
+* false otherwise
+*/
+exports.isRegExp = function (object) {
+    return Object.prototype.toString.call(object) === "[object RegExp]";
+};
+
+
+},{"./compressions":3,"./nodeBuffer":11,"./support":17}],22:[function(_dereq_,module,exports){
+'use strict';
+var StringReader = _dereq_('./stringReader');
+var NodeBufferReader = _dereq_('./nodeBufferReader');
+var Uint8ArrayReader = _dereq_('./uint8ArrayReader');
+var utils = _dereq_('./utils');
+var sig = _dereq_('./signature');
+var ZipEntry = _dereq_('./zipEntry');
+var support = _dereq_('./support');
+var jszipProto = _dereq_('./object');
+//  class ZipEntries {{{
+/**
+ * All the entries in the zip file.
+ * @constructor
+ * @param {String|ArrayBuffer|Uint8Array} data the binary stream to load.
+ * @param {Object} loadOptions Options for loading the stream.
+ */
+function ZipEntries(data, loadOptions) {
+    this.files = [];
+    this.loadOptions = loadOptions;
+    if (data) {
+        this.load(data);
+    }
+}
+ZipEntries.prototype = {
+    /**
+     * Check that the reader is on the speficied signature.
+     * @param {string} expectedSignature the expected signature.
+     * @throws {Error} if it is an other signature.
+     */
+    checkSignature: function(expectedSignature) {
+        var signature = this.reader.readString(4);
+        if (signature !== expectedSignature) {
+            throw new Error("Corrupted zip or bug : unexpected signature " + "(" + utils.pretty(signature) + ", expected " + utils.pretty(expectedSignature) + ")");
+        }
+    },
+    /**
+     * Read the end of the central directory.
+     */
+    readBlockEndOfCentral: function() {
+        this.diskNumber = this.reader.readInt(2);
+        this.diskWithCentralDirStart = this.reader.readInt(2);
+        this.centralDirRecordsOnThisDisk = this.reader.readInt(2);
+        this.centralDirRecords = this.reader.readInt(2);
+        this.centralDirSize = this.reader.readInt(4);
+        this.centralDirOffset = this.reader.readInt(4);
+
+        this.zipCommentLength = this.reader.readInt(2);
+        // warning : the encoding depends of the system locale
+        // On a linux machine with LANG=en_US.utf8, this field is utf8 encoded.
+        // On a windows machine, this field is encoded with the localized windows code page.
+        this.zipComment = this.reader.readString(this.zipCommentLength);
+        // To get consistent behavior with the generation part, we will assume that
+        // this is utf8 encoded.
+        this.zipComment = jszipProto.utf8decode(this.zipComment);
+    },
+    /**
+     * Read the end of the Zip 64 central directory.
+     * Not merged with the method readEndOfCentral :
+     * The end of central can coexist with its Zip64 brother,
+     * I don't want to read the wrong number of bytes !
+     */
+    readBlockZip64EndOfCentral: function() {
+        this.zip64EndOfCentralSize = this.reader.readInt(8);
+        this.versionMadeBy = this.reader.readString(2);
+        this.versionNeeded = this.reader.readInt(2);
+        this.diskNumber = this.reader.readInt(4);
+        this.diskWithCentralDirStart = this.reader.readInt(4);
+        this.centralDirRecordsOnThisDisk = this.reader.readInt(8);
+        this.centralDirRecords = this.reader.readInt(8);
+        this.centralDirSize = this.reader.readInt(8);
+        this.centralDirOffset = this.reader.readInt(8);
+
+        this.zip64ExtensibleData = {};
+        var extraDataSize = this.zip64EndOfCentralSize - 44,
+            index = 0,
+            extraFieldId,
+            extraFieldLength,
+            extraFieldValue;
+        while (index < extraDataSize) {
+            extraFieldId = this.reader.readInt(2);
+            extraFieldLength = this.reader.readInt(4);
+            extraFieldValue = this.reader.readString(extraFieldLength);
+            this.zip64ExtensibleData[extraFieldId] = {
+                id: extraFieldId,
+                length: extraFieldLength,
+                value: extraFieldValue
+            };
+        }
+    },
+    /**
+     * Read the end of the Zip 64 central directory locator.
+     */
+    readBlockZip64EndOfCentralLocator: function() {
+        this.diskWithZip64CentralDirStart = this.reader.readInt(4);
+        this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8);
+        this.disksCount = this.reader.readInt(4);
+        if (this.disksCount > 1) {
+            throw new Error("Multi-volumes zip are not supported");
+        }
+    },
+    /**
+     * Read the local files, based on the offset read in the central part.
+     */
+    readLocalFiles: function() {
+        var i, file;
+        for (i = 0; i < this.files.length; i++) {
+            file = this.files[i];
+            this.reader.setIndex(file.localHeaderOffset);
+            this.checkSignature(sig.LOCAL_FILE_HEADER);
+            file.readLocalPart(this.reader);
+            file.handleUTF8();
+        }
+    },
+    /**
+     * Read the central directory.
+     */
+    readCentralDir: function() {
+        var file;
+
+        this.reader.setIndex(this.centralDirOffset);
+        while (this.reader.readString(4) === sig.CENTRAL_FILE_HEADER) {
+            file = new ZipEntry({
+                zip64: this.zip64
+            }, this.loadOptions);
+            file.readCentralPart(this.reader);
+            this.files.push(file);
+        }
+    },
+    /**
+     * Read the end of central directory.
+     */
+    readEndOfCentral: function() {
+        var offset = this.reader.lastIndexOfSignature(sig.CENTRAL_DIRECTORY_END);
+        if (offset === -1) {
+            throw new Error("Corrupted zip : can't find end of central directory");
+        }
+        this.reader.setIndex(offset);
+        this.checkSignature(sig.CENTRAL_DIRECTORY_END);
+        this.readBlockEndOfCentral();
+
+
+        /* extract from the zip spec :
+            4)  If one of the fields in the end of central directory
+                record is too small to hold required data, the field
+                should be set to -1 (0xFFFF or 0xFFFFFFFF) and the
+                ZIP64 format record should be created.
+            5)  The end of central directory record and the
+                Zip64 end of central directory locator record must
+                reside on the same disk when splitting or spanning
+                an archive.
+         */
+        if (this.diskNumber === utils.MAX_VALUE_16BITS || this.diskWithCentralDirStart === utils.MAX_VALUE_16BITS || this.centralDirRecordsOnThisDisk === utils.MAX_VALUE_16BITS || this.centralDirRecords === utils.MAX_VALUE_16BITS || this.centralDirSize === utils.MAX_VALUE_32BITS || this.centralDirOffset === utils.MAX_VALUE_32BITS) {
+            this.zip64 = true;
+
+            /*
+            Warning : the zip64 extension is supported, but ONLY if the 64bits integer read from
+            the zip file can fit into a 32bits integer. This cannot be solved : Javascript represents
+            all numbers as 64-bit double precision IEEE 754 floating point numbers.
+            So, we have 53bits for integers and bitwise operations treat everything as 32bits.
+            see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators
+            and http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf section 8.5
+            */
+
+            // should look for a zip64 EOCD locator
+            offset = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);
+            if (offset === -1) {
+                throw new Error("Corrupted zip : can't find the ZIP64 end of central directory locator");
+            }
+            this.reader.setIndex(offset);
+            this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);
+            this.readBlockZip64EndOfCentralLocator();
+
+            // now the zip64 EOCD record
+            this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir);
+            this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_END);
+            this.readBlockZip64EndOfCentral();
+        }
+    },
+    prepareReader: function(data) {
+        var type = utils.getTypeOf(data);
+        if (type === "string" && !support.uint8array) {
+            this.reader = new StringReader(data, this.loadOptions.optimizedBinaryString);
+        }
+        else if (type === "nodebuffer") {
+            this.reader = new NodeBufferReader(data);
+        }
+        else {
+            this.reader = new Uint8ArrayReader(utils.transformTo("uint8array", data));
+        }
+    },
+    /**
+     * Read a zip file and create ZipEntries.
+     * @param {String|ArrayBuffer|Uint8Array|Buffer} data the binary string representing a zip file.
+     */
+    load: function(data) {
+        this.prepareReader(data);
+        this.readEndOfCentral();
+        this.readCentralDir();
+        this.readLocalFiles();
+    }
+};
+// }}} end of ZipEntries
+module.exports = ZipEntries;
+
+},{"./nodeBufferReader":12,"./object":13,"./signature":14,"./stringReader":15,"./support":17,"./uint8ArrayReader":18,"./utils":21,"./zipEntry":23}],23:[function(_dereq_,module,exports){
+'use strict';
+var StringReader = _dereq_('./stringReader');
+var utils = _dereq_('./utils');
+var CompressedObject = _dereq_('./compressedObject');
+var jszipProto = _dereq_('./object');
+// class ZipEntry {{{
+/**
+ * An entry in the zip file.
+ * @constructor
+ * @param {Object} options Options of the current file.
+ * @param {Object} loadOptions Options for loading the stream.
+ */
+function ZipEntry(options, loadOptions) {
+    this.options = options;
+    this.loadOptions = loadOptions;
+}
+ZipEntry.prototype = {
+    /**
+     * say if the file is encrypted.
+     * @return {boolean} true if the file is encrypted, false otherwise.
+     */
+    isEncrypted: function() {
+        // bit 1 is set
+        return (this.bitFlag & 0x0001) === 0x0001;
+    },
+    /**
+     * say if the file has utf-8 filename/comment.
+     * @return {boolean} true if the filename/comment is in utf-8, false otherwise.
+     */
+    useUTF8: function() {
+        // bit 11 is set
+        return (this.bitFlag & 0x0800) === 0x0800;
+    },
+    /**
+     * Prepare the function used to generate the compressed content from this ZipFile.
+     * @param {DataReader} reader the reader to use.
+     * @param {number} from the offset from where we should read the data.
+     * @param {number} length the length of the data to read.
+     * @return {Function} the callback to get the compressed content (the type depends of the DataReader class).
+     */
+    prepareCompressedContent: function(reader, from, length) {
+        return function() {
+            var previousIndex = reader.index;
+            reader.setIndex(from);
+            var compressedFileData = reader.readData(length);
+            reader.setIndex(previousIndex);
+
+            return compressedFileData;
+        };
+    },
+    /**
+     * Prepare the function used to generate the uncompressed content from this ZipFile.
+     * @param {DataReader} reader the reader to use.
+     * @param {number} from the offset from where we should read the data.
+     * @param {number} length the length of the data to read.
+     * @param {JSZip.compression} compression the compression used on this file.
+     * @param {number} uncompressedSize the uncompressed size to expect.
+     * @return {Function} the callback to get the uncompressed content (the type depends of the DataReader class).
+     */
+    prepareContent: function(reader, from, length, compression, uncompressedSize) {
+        return function() {
+
+            var compressedFileData = utils.transformTo(compression.uncompressInputType, this.getCompressedContent());
+            var uncompressedFileData = compression.uncompress(compressedFileData);
+
+            if (uncompressedFileData.length !== uncompressedSize) {
+                throw new Error("Bug : uncompressed data size mismatch");
+            }
+
+            return uncompressedFileData;
+        };
+    },
+    /**
+     * Read the local part of a zip file and add the info in this object.
+     * @param {DataReader} reader the reader to use.
+     */
+    readLocalPart: function(reader) {
+        var compression, localExtraFieldsLength;
+
+        // we already know everything from the central dir !
+        // If the central dir data are false, we are doomed.
+        // On the bright side, the local part is scary  : zip64, data descriptors, both, etc.
+        // The less data we get here, the more reliable this should be.
+        // Let's skip the whole header and dash to the data !
+        reader.skip(22);
+        // in some zip created on windows, the filename stored in the central dir contains \ instead of /.
+        // Strangely, the filename here is OK.
+        // I would love to treat these zip files as corrupted (see http://www.info-zip.org/FAQ.html#backslashes
+        // or APPNOTE#4.4.17.1, "All slashes MUST be forward slashes '/'") but there are a lot of bad zip generators...
+        // Search "unzip mismatching "local" filename continuing with "central" filename version" on
+        // the internet.
+        //
+        // I think I see the logic here : the central directory is used to display
+        // content and the local directory is used to extract the files. Mixing / and \
+        // may be used to display \ to windows users and use / when extracting the files.
+        // Unfortunately, this lead also to some issues : http://seclists.org/fulldisclosure/2009/Sep/394
+        this.fileNameLength = reader.readInt(2);
+        localExtraFieldsLength = reader.readInt(2); // can't be sure this will be the same as the central dir
+        this.fileName = reader.readString(this.fileNameLength);
+        reader.skip(localExtraFieldsLength);
+
+        if (this.compressedSize == -1 || this.uncompressedSize == -1) {
+            throw new Error("Bug or corrupted zip : didn't get enough informations from the central directory " + "(compressedSize == -1 || uncompressedSize == -1)");
+        }
+
+        compression = utils.findCompression(this.compressionMethod);
+        if (compression === null) { // no compression found
+            throw new Error("Corrupted zip : compression " + utils.pretty(this.compressionMethod) + " unknown (inner file : " + this.fileName + ")");
+        }
+        this.decompressed = new CompressedObject();
+        this.decompressed.compressedSize = this.compressedSize;
+        this.decompressed.uncompressedSize = this.uncompressedSize;
+        this.decompressed.crc32 = this.crc32;
+        this.decompressed.compressionMethod = this.compressionMethod;
+        this.decompressed.getCompressedContent = this.prepareCompressedContent(reader, reader.index, this.compressedSize, compression);
+        this.decompressed.getContent = this.prepareContent(reader, reader.index, this.compressedSize, compression, this.uncompressedSize);
+
+        // we need to compute the crc32...
+        if (this.loadOptions.checkCRC32) {
+            this.decompressed = utils.transformTo("string", this.decompressed.getContent());
+            if (jszipProto.crc32(this.decompressed) !== this.crc32) {
+                throw new Error("Corrupted zip : CRC32 mismatch");
+            }
+        }
+    },
+
+    /**
+     * Read the central part of a zip file and add the info in this object.
+     * @param {DataReader} reader the reader to use.
+     */
+    readCentralPart: function(reader) {
+        this.versionMadeBy = reader.readString(2);
+        this.versionNeeded = reader.readInt(2);
+        this.bitFlag = reader.readInt(2);
+        this.compressionMethod = reader.readString(2);
+        this.date = reader.readDate();
+        this.crc32 = reader.readInt(4);
+        this.compressedSize = reader.readInt(4);
+        this.uncompressedSize = reader.readInt(4);
+        this.fileNameLength = reader.readInt(2);
+        this.extraFieldsLength = reader.readInt(2);
+        this.fileCommentLength = reader.readInt(2);
+        this.diskNumberStart = reader.readInt(2);
+        this.internalFileAttributes = reader.readInt(2);
+        this.externalFileAttributes = reader.readInt(4);
+        this.localHeaderOffset = reader.readInt(4);
+
+        if (this.isEncrypted()) {
+            throw new Error("Encrypted zip are not supported");
+        }
+
+        this.fileName = reader.readString(this.fileNameLength);
+        this.readExtraFields(reader);
+        this.parseZIP64ExtraField(reader);
+        this.fileComment = reader.readString(this.fileCommentLength);
+
+        // warning, this is true only for zip with madeBy == DOS (plateform dependent feature)
+        this.dir = this.externalFileAttributes & 0x00000010 ? true : false;
+    },
+    /**
+     * Parse the ZIP64 extra field and merge the info in the current ZipEntry.
+     * @param {DataReader} reader the reader to use.
+     */
+    parseZIP64ExtraField: function(reader) {
+
+        if (!this.extraFields[0x0001]) {
+            return;
+        }
+
+        // should be something, preparing the extra reader
+        var extraReader = new StringReader(this.extraFields[0x0001].value);
+
+        // I really hope that these 64bits integer can fit in 32 bits integer, because js
+        // won't let us have more.
+        if (this.uncompressedSize === utils.MAX_VALUE_32BITS) {
+            this.uncompressedSize = extraReader.readInt(8);
+        }
+        if (this.compressedSize === utils.MAX_VALUE_32BITS) {
+            this.compressedSize = extraReader.readInt(8);
+        }
+        if (this.localHeaderOffset === utils.MAX_VALUE_32BITS) {
+            this.localHeaderOffset = extraReader.readInt(8);
+        }
+        if (this.diskNumberStart === utils.MAX_VALUE_32BITS) {
+            this.diskNumberStart = extraReader.readInt(4);
+        }
+    },
+    /**
+     * Read the central part of a zip file and add the info in this object.
+     * @param {DataReader} reader the reader to use.
+     */
+    readExtraFields: function(reader) {
+        var start = reader.index,
+            extraFieldId,
+            extraFieldLength,
+            extraFieldValue;
+
+        this.extraFields = this.extraFields || {};
+
+        while (reader.index < start + this.extraFieldsLength) {
+            extraFieldId = reader.readInt(2);
+            extraFieldLength = reader.readInt(2);
+            extraFieldValue = reader.readString(extraFieldLength);
+
+            this.extraFields[extraFieldId] = {
+                id: extraFieldId,
+                length: extraFieldLength,
+                value: extraFieldValue
+            };
+        }
+    },
+    /**
+     * Apply an UTF8 transformation if needed.
+     */
+    handleUTF8: function() {
+        if (this.useUTF8()) {
+            this.fileName = jszipProto.utf8decode(this.fileName);
+            this.fileComment = jszipProto.utf8decode(this.fileComment);
+        } else {
+            var upath = this.findExtraFieldUnicodePath();
+            if (upath !== null) {
+                this.fileName = upath;
+            }
+            var ucomment = this.findExtraFieldUnicodeComment();
+            if (ucomment !== null) {
+                this.fileComment = ucomment;
+            }
+        }
+    },
+
+    /**
+     * Find the unicode path declared in the extra field, if any.
+     * @return {String} the unicode path, null otherwise.
+     */
+    findExtraFieldUnicodePath: function() {
+        var upathField = this.extraFields[0x7075];
+        if (upathField) {
+            var extraReader = new StringReader(upathField.value);
+
+            // wrong version
+            if (extraReader.readInt(1) !== 1) {
+                return null;
+            }
+
+            // the crc of the filename changed, this field is out of date.
+            if (jszipProto.crc32(this.fileName) !== extraReader.readInt(4)) {
+                return null;
+            }
+
+            return jszipProto.utf8decode(extraReader.readString(upathField.length - 5));
+        }
+        return null;
+    },
+
+    /**
+     * Find the unicode comment declared in the extra field, if any.
+     * @return {String} the unicode comment, null otherwise.
+     */
+    findExtraFieldUnicodeComment: function() {
+        var ucommentField = this.extraFields[0x6375];
+        if (ucommentField) {
+            var extraReader = new StringReader(ucommentField.value);
+
+            // wrong version
+            if (extraReader.readInt(1) !== 1) {
+                return null;
+            }
+
+            // the crc of the comment changed, this field is out of date.
+            if (jszipProto.crc32(this.fileComment) !== extraReader.readInt(4)) {
+                return null;
+            }
+
+            return jszipProto.utf8decode(extraReader.readString(ucommentField.length - 5));
+        }
+        return null;
+    }
+};
+module.exports = ZipEntry;
+
+},{"./compressedObject":2,"./object":13,"./stringReader":15,"./utils":21}],24:[function(_dereq_,module,exports){
+// Top level file is just a mixin of submodules & constants
+'use strict';
+
+var assign    = _dereq_('./lib/utils/common').assign;
+
+var deflate   = _dereq_('./lib/deflate');
+var inflate   = _dereq_('./lib/inflate');
+var constants = _dereq_('./lib/zlib/constants');
+
+var pako = {};
+
+assign(pako, deflate, inflate, constants);
+
+module.exports = pako;
+},{"./lib/deflate":25,"./lib/inflate":26,"./lib/utils/common":27,"./lib/zlib/constants":30}],25:[function(_dereq_,module,exports){
+'use strict';
+
+
+var zlib_deflate = _dereq_('./zlib/deflate.js');
+var utils = _dereq_('./utils/common');
+var strings = _dereq_('./utils/strings');
+var msg = _dereq_('./zlib/messages');
+var zstream = _dereq_('./zlib/zstream');
+
+
+/* Public constants ==========================================================*/
+/* ===========================================================================*/
+
+var Z_NO_FLUSH      = 0;
+var Z_FINISH        = 4;
+
+var Z_OK            = 0;
+var Z_STREAM_END    = 1;
+
+var Z_DEFAULT_COMPRESSION = -1;
+
+var Z_DEFAULT_STRATEGY    = 0;
+
+var Z_DEFLATED  = 8;
+
+/* ===========================================================================*/
+
+
+/**
+ * class Deflate
+ *
+ * Generic JS-style wrapper for zlib calls. If you don't need
+ * streaming behaviour - use more simple functions: [[deflate]],
+ * [[deflateRaw]] and [[gzip]].
+ **/
+
+/* internal
+ * Deflate.chunks -> Array
+ *
+ * Chunks of output data, if [[Deflate#onData]] not overriden.
+ **/
+
+/**
+ * Deflate.result -> Uint8Array|Array
+ *
+ * Compressed result, generated by default [[Deflate#onData]]
+ * and [[Deflate#onEnd]] handlers. Filled after you push last chunk
+ * (call [[Deflate#push]] with `Z_FINISH` / `true` param).
+ **/
+
+/**
+ * Deflate.err -> Number
+ *
+ * Error code after deflate finished. 0 (Z_OK) on success.
+ * You will not need it in real life, because deflate errors
+ * are possible only on wrong options or bad `onData` / `onEnd`
+ * custom handlers.
+ **/
+
+/**
+ * Deflate.msg -> String
+ *
+ * Error message, if [[Deflate.err]] != 0
+ **/
+
+
+/**
+ * new Deflate(options)
+ * - options (Object): zlib deflate options.
+ *
+ * Creates new deflator instance with specified params. Throws exception
+ * on bad params. Supported options:
+ *
+ * - `level`
+ * - `windowBits`
+ * - `memLevel`
+ * - `strategy`
+ *
+ * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
+ * for more information on these.
+ *
+ * Additional options, for internal needs:
+ *
+ * - `chunkSize` - size of generated data chunks (16K by default)
+ * - `raw` (Boolean) - do raw deflate
+ * - `gzip` (Boolean) - create gzip wrapper
+ * - `to` (String) - if equal to 'string', then result will be "binary string"
+ *    (each char code [0..255])
+ * - `header` (Object) - custom header for gzip
+ *   - `text` (Boolean) - true if compressed data believed to be text
+ *   - `time` (Number) - modification time, unix timestamp
+ *   - `os` (Number) - operation system code
+ *   - `extra` (Array) - array of bytes with extra data (max 65536)
+ *   - `name` (String) - file name (binary string)
+ *   - `comment` (String) - comment (binary string)
+ *   - `hcrc` (Boolean) - true if header crc should be added
+ *
+ * ##### Example:
+ *
+ * ```javascript
+ * var pako = require('pako')
+ *   , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])
+ *   , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);
+ *
+ * var deflate = new pako.Deflate({ level: 3});
+ *
+ * deflate.push(chunk1, false);
+ * deflate.push(chunk2, true);  // true -> last chunk
+ *
+ * if (deflate.err) { throw new Error(deflate.err); }
+ *
+ * console.log(deflate.result);
+ * ```
+ **/
+var Deflate = function(options) {
+
+  this.options = utils.assign({
+    level: Z_DEFAULT_COMPRESSION,
+    method: Z_DEFLATED,
+    chunkSize: 16384,
+    windowBits: 15,
+    memLevel: 8,
+    strategy: Z_DEFAULT_STRATEGY,
+    to: ''
+  }, options || {});
+
+  var opt = this.options;
+
+  if (opt.raw && (opt.windowBits > 0)) {
+    opt.windowBits = -opt.windowBits;
+  }
+
+  else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {
+    opt.windowBits += 16;
+  }
+
+  this.err    = 0;      // error code, if happens (0 = Z_OK)
+  this.msg    = '';     // error message
+  this.ended  = false;  // used to avoid multiple onEnd() calls
+  this.chunks = [];     // chunks of compressed data
+
+  this.strm = new zstream();
+  this.strm.avail_out = 0;
+
+  var status = zlib_deflate.deflateInit2(
+    this.strm,
+    opt.level,
+    opt.method,
+    opt.windowBits,
+    opt.memLevel,
+    opt.strategy
+  );
+
+  if (status !== Z_OK) {
+    throw new Error(msg[status]);
+  }
+
+  if (opt.header) {
+    zlib_deflate.deflateSetHeader(this.strm, opt.header);
+  }
+};
+
+/**
+ * Deflate#push(data[, mode]) -> Boolean
+ * - data (Uint8Array|Array|String): input data. Strings will be converted to
+ *   utf8 byte sequence.
+ * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.
+ *   See constants. Skipped or `false` means Z_NO_FLUSH, `true` meansh Z_FINISH.
+ *
+ * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with
+ * new compressed chunks. Returns `true` on success. The last data block must have
+ * mode Z_FINISH (or `true`). That flush internal pending buffers and call
+ * [[Deflate#onEnd]].
+ *
+ * On fail call [[Deflate#onEnd]] with error code and return false.
+ *
+ * We strongly recommend to use `Uint8Array` on input for best speed (output
+ * array format is detected automatically). Also, don't skip last param and always
+ * use the same type in your code (boolean or number). That will improve JS speed.
+ *
+ * For regular `Array`-s make sure all elements are [0..255].
+ *
+ * ##### Example
+ *
+ * ```javascript
+ * push(chunk, false); // push one of data chunks
+ * ...
+ * push(chunk, true);  // push last chunk
+ * ```
+ **/
+Deflate.prototype.push = function(data, mode) {
+  var strm = this.strm;
+  var chunkSize = this.options.chunkSize;
+  var status, _mode;
+
+  if (this.ended) { return false; }
+
+  _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH : Z_NO_FLUSH);
+
+  // Convert data if needed
+  if (typeof data === 'string') {
+    // If we need to compress text, change encoding to utf8.
+    strm.input = strings.string2buf(data);
+  } else {
+    strm.input = data;
+  }
+
+  strm.next_in = 0;
+  strm.avail_in = strm.input.length;
+
+  do {
+    if (strm.avail_out === 0) {
+      strm.output = new utils.Buf8(chunkSize);
+      strm.next_out = 0;
+      strm.avail_out = chunkSize;
+    }
+    status = zlib_deflate.deflate(strm, _mode);    /* no bad return value */
+
+    if (status !== Z_STREAM_END && status !== Z_OK) {
+      this.onEnd(status);
+      this.ended = true;
+      return false;
+    }
+    if (strm.avail_out === 0 || (strm.avail_in === 0 && _mode === Z_FINISH)) {
+      if (this.options.to === 'string') {
+        this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out)));
+      } else {
+        this.onData(utils.shrinkBuf(strm.output, strm.next_out));
+      }
+    }
+  } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END);
+
+  // Finalize on the last chunk.
+  if (_mode === Z_FINISH) {
+    status = zlib_deflate.deflateEnd(this.strm);
+    this.onEnd(status);
+    this.ended = true;
+    return status === Z_OK;
+  }
+
+  return true;
+};
+
+
+/**
+ * Deflate#onData(chunk) -> Void
+ * - chunk (Uint8Array|Array|String): ouput data. Type of array depends
+ *   on js engine support. When string output requested, each chunk
+ *   will be string.
+ *
+ * By default, stores data blocks in `chunks[]` property and glue
+ * those in `onEnd`. Override this handler, if you need another behaviour.
+ **/
+Deflate.prototype.onData = function(chunk) {
+  this.chunks.push(chunk);
+};
+
+
+/**
+ * Deflate#onEnd(status) -> Void
+ * - status (Number): deflate status. 0 (Z_OK) on success,
+ *   other if not.
+ *
+ * Called once after you tell deflate that input stream complete
+ * or error happenned. By default - join collected chunks,
+ * free memory and fill `results` / `err` properties.
+ **/
+Deflate.prototype.onEnd = function(status) {
+  // On success - join
+  if (status === Z_OK) {
+    if (this.options.to === 'string') {
+      this.result = this.chunks.join('');
+    } else {
+      this.result = utils.flattenChunks(this.chunks);
+    }
+  }
+  this.chunks = [];
+  this.err = status;
+  this.msg = this.strm.msg;
+};
+
+
+/**
+ * deflate(data[, options]) -> Uint8Array|Array|String
+ * - data (Uint8Array|Array|String): input data to compress.
+ * - options (Object): zlib deflate options.
+ *
+ * Compress `data` with deflate alrorythm and `options`.
+ *
+ * Supported options are:
+ *
+ * - level
+ * - windowBits
+ * - memLevel
+ * - strategy
+ *
+ * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
+ * for more information on these.
+ *
+ * Sugar (options):
+ *
+ * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify
+ *   negative windowBits implicitly.
+ * - `to` (String) - if equal to 'string', then result will be "binary string"
+ *    (each char code [0..255])
+ *
+ * ##### Example:
+ *
+ * ```javascript
+ * var pako = require('pako')
+ *   , data = Uint8Array([1,2,3,4,5,6,7,8,9]);
+ *
+ * console.log(pako.deflate(data));
+ * ```
+ **/
+function deflate(input, options) {
+  var deflator = new Deflate(options);
+
+  deflator.push(input, true);
+
+  // That will never happens, if you don't cheat with options :)
+  if (deflator.err) { throw deflator.msg; }
+
+  return deflator.result;
+}
+
+
+/**
+ * deflateRaw(data[, options]) -> Uint8Array|Array|String
+ * - data (Uint8Array|Array|String): input data to compress.
+ * - options (Object): zlib deflate options.
+ *
+ * The same as [[deflate]], but creates raw data, without wrapper
+ * (header and adler32 crc).
+ **/
+function deflateRaw(input, options) {
+  options = options || {};
+  options.raw = true;
+  return deflate(input, options);
+}
+
+
+/**
+ * gzip(data[, options]) -> Uint8Array|Array|String
+ * - data (Uint8Array|Array|String): input data to compress.
+ * - options (Object): zlib deflate options.
+ *
+ * The same as [[deflate]], but create gzip wrapper instead of
+ * deflate one.
+ **/
+function gzip(input, options) {
+  options = options || {};
+  options.gzip = true;
+  return deflate(input, options);
+}
+
+
+exports.Deflate = Deflate;
+exports.deflate = deflate;
+exports.deflateRaw = deflateRaw;
+exports.gzip = gzip;
+},{"./utils/common":27,"./utils/strings":28,"./zlib/deflate.js":32,"./zlib/messages":37,"./zlib/zstream":39}],26:[function(_dereq_,module,exports){
+'use strict';
+
+
+var zlib_inflate = _dereq_('./zlib/inflate.js');
+var utils = _dereq_('./utils/common');
+var strings = _dereq_('./utils/strings');
+var c = _dereq_('./zlib/constants');
+var msg = _dereq_('./zlib/messages');
+var zstream = _dereq_('./zlib/zstream');
+var gzheader = _dereq_('./zlib/gzheader');
+
+
+/**
+ * class Inflate
+ *
+ * Generic JS-style wrapper for zlib calls. If you don't need
+ * streaming behaviour - use more simple functions: [[inflate]]
+ * and [[inflateRaw]].
+ **/
+
+/* internal
+ * inflate.chunks -> Array
+ *
+ * Chunks of output data, if [[Inflate#onData]] not overriden.
+ **/
+
+/**
+ * Inflate.result -> Uint8Array|Array|String
+ *
+ * Uncompressed result, generated by default [[Inflate#onData]]
+ * and [[Inflate#onEnd]] handlers. Filled after you push last chunk
+ * (call [[Inflate#push]] with `Z_FINISH` / `true` param).
+ **/
+
+/**
+ * Inflate.err -> Number
+ *
+ * Error code after inflate finished. 0 (Z_OK) on success.
+ * Should be checked if broken data possible.
+ **/
+
+/**
+ * Inflate.msg -> String
+ *
+ * Error message, if [[Inflate.err]] != 0
+ **/
+
+
+/**
+ * new Inflate(options)
+ * - options (Object): zlib inflate options.
+ *
+ * Creates new inflator instance with specified params. Throws exception
+ * on bad params. Supported options:
+ *
+ * - `windowBits`
+ *
+ * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
+ * for more information on these.
+ *
+ * Additional options, for internal needs:
+ *
+ * - `chunkSize` - size of generated data chunks (16K by default)
+ * - `raw` (Boolean) - do raw inflate
+ * - `to` (String) - if equal to 'string', then result will be converted
+ *   from utf8 to utf16 (javascript) string. When string output requested,
+ *   chunk length can differ from `chunkSize`, depending on content.
+ *
+ * By default, when no options set, autodetect deflate/gzip data format via
+ * wrapper header.
+ *
+ * ##### Example:
+ *
+ * ```javascript
+ * var pako = require('pako')
+ *   , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])
+ *   , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);
+ *
+ * var inflate = new pako.Inflate({ level: 3});
+ *
+ * inflate.push(chunk1, false);
+ * inflate.push(chunk2, true);  // true -> last chunk
+ *
+ * if (inflate.err) { throw new Error(inflate.err); }
+ *
+ * console.log(inflate.result);
+ * ```
+ **/
+var Inflate = function(options) {
+
+  this.options = utils.assign({
+    chunkSize: 16384,
+    windowBits: 0,
+    to: ''
+  }, options || {});
+
+  var opt = this.options;
+
+  // Force window size for `raw` data, if not set directly,
+  // because we have no header for autodetect.
+  if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {
+    opt.windowBits = -opt.windowBits;
+    if (opt.windowBits === 0) { opt.windowBits = -15; }
+  }
+
+  // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate
+  if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&
+      !(options && options.windowBits)) {
+    opt.windowBits += 32;
+  }
+
+  // Gzip header has no info about windows size, we can do autodetect only
+  // for deflate. So, if window size not set, force it to max when gzip possible
+  if ((opt.windowBits > 15) && (opt.windowBits < 48)) {
+    // bit 3 (16) -> gzipped data
+    // bit 4 (32) -> autodetect gzip/deflate
+    if ((opt.windowBits & 15) === 0) {
+      opt.windowBits |= 15;
+    }
+  }
+
+  this.err    = 0;      // error code, if happens (0 = Z_OK)
+  this.msg    = '';     // error message
+  this.ended  = false;  // used to avoid multiple onEnd() calls
+  this.chunks = [];     // chunks of compressed data
+
+  this.strm   = new zstream();
+  this.strm.avail_out = 0;
+
+  var status  = zlib_inflate.inflateInit2(
+    this.strm,
+    opt.windowBits
+  );
+
+  if (status !== c.Z_OK) {
+    throw new Error(msg[status]);
+  }
+
+  this.header = new gzheader();
+
+  zlib_inflate.inflateGetHeader(this.strm, this.header);
+};
+
+/**
+ * Inflate#push(data[, mode]) -> Boolean
+ * - data (Uint8Array|Array|String): input data
+ * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.
+ *   See constants. Skipped or `false` means Z_NO_FLUSH, `true` meansh Z_FINISH.
+ *
+ * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with
+ * new output chunks. Returns `true` on success. The last data block must have
+ * mode Z_FINISH (or `true`). That flush internal pending buffers and call
+ * [[Inflate#onEnd]].
+ *
+ * On fail call [[Inflate#onEnd]] with error code and return false.
+ *
+ * We strongly recommend to use `Uint8Array` on input for best speed (output
+ * format is detected automatically). Also, don't skip last param and always
+ * use the same type in your code (boolean or number). That will improve JS speed.
+ *
+ * For regular `Array`-s make sure all elements are [0..255].
+ *
+ * ##### Example
+ *
+ * ```javascript
+ * push(chunk, false); // push one of data chunks
+ * ...
+ * push(chunk, true);  // push last chunk
+ * ```
+ **/
+Inflate.prototype.push = function(data, mode) {
+  var strm = this.strm;
+  var chunkSize = this.options.chunkSize;
+  var status, _mode;
+  var next_out_utf8, tail, utf8str;
+
+  if (this.ended) { return false; }
+  _mode = (mode === ~~mode) ? mode : ((mode === true) ? c.Z_FINISH : c.Z_NO_FLUSH);
+
+  // Convert data if needed
+  if (typeof data === 'string') {
+    // Only binary strings can be decompressed on practice
+    strm.input = strings.binstring2buf(data);
+  } else {
+    strm.input = data;
+  }
+
+  strm.next_in = 0;
+  strm.avail_in = strm.input.length;
+
+  do {
+    if (strm.avail_out === 0) {
+      strm.output = new utils.Buf8(chunkSize);
+      strm.next_out = 0;
+      strm.avail_out = chunkSize;
+    }
+
+    status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH);    /* no bad return value */
+
+    if (status !== c.Z_STREAM_END && status !== c.Z_OK) {
+      this.onEnd(status);
+      this.ended = true;
+      return false;
+    }
+
+    if (strm.next_out) {
+      if (strm.avail_out === 0 || status === c.Z_STREAM_END || (strm.avail_in === 0 && _mode === c.Z_FINISH)) {
+
+        if (this.options.to === 'string') {
+
+          next_out_utf8 = strings.utf8border(strm.output, strm.next_out);
+
+          tail = strm.next_out - next_out_utf8;
+          utf8str = strings.buf2string(strm.output, next_out_utf8);
+
+          // move tail
+          strm.next_out = tail;
+          strm.avail_out = chunkSize - tail;
+          if (tail) { utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); }
+
+          this.onData(utf8str);
+
+        } else {
+          this.onData(utils.shrinkBuf(strm.output, strm.next_out));
+        }
+      }
+    }
+  } while ((strm.avail_in > 0) && status !== c.Z_STREAM_END);
+
+  if (status === c.Z_STREAM_END) {
+    _mode = c.Z_FINISH;
+  }
+  // Finalize on the last chunk.
+  if (_mode === c.Z_FINISH) {
+    status = zlib_inflate.inflateEnd(this.strm);
+    this.onEnd(status);
+    this.ended = true;
+    return status === c.Z_OK;
+  }
+
+  return true;
+};
+
+
+/**
+ * Inflate#onData(chunk) -> Void
+ * - chunk (Uint8Array|Array|String): ouput data. Type of array depends
+ *   on js engine support. When string output requested, each chunk
+ *   will be string.
+ *
+ * By default, stores data blocks in `chunks[]` property and glue
+ * those in `onEnd`. Override this handler, if you need another behaviour.
+ **/
+Inflate.prototype.onData = function(chunk) {
+  this.chunks.push(chunk);
+};
+
+
+/**
+ * Inflate#onEnd(status) -> Void
+ * - status (Number): inflate status. 0 (Z_OK) on success,
+ *   other if not.
+ *
+ * Called once after you tell inflate that input stream complete
+ * or error happenned. By default - join collected chunks,
+ * free memory and fill `results` / `err` properties.
+ **/
+Inflate.prototype.onEnd = function(status) {
+  // On success - join
+  if (status === c.Z_OK) {
+    if (this.options.to === 'string') {
+      // Glue & convert here, until we teach pako to send
+      // utf8 alligned strings to onData
+      this.result = this.chunks.join('');
+    } else {
+      this.result = utils.flattenChunks(this.chunks);
+    }
+  }
+  this.chunks = [];
+  this.err = status;
+  this.msg = this.strm.msg;
+};
+
+
+/**
+ * inflate(data[, options]) -> Uint8Array|Array|String
+ * - data (Uint8Array|Array|String): input data to decompress.
+ * - options (Object): zlib inflate options.
+ *
+ * Decompress `data` with inflate/ungzip and `options`. Autodetect
+ * format via wrapper header by default. That's why we don't provide
+ * separate `ungzip` method.
+ *
+ * Supported options are:
+ *
+ * - windowBits
+ *
+ * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
+ * for more information.
+ *
+ * Sugar (options):
+ *
+ * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify
+ *   negative windowBits implicitly.
+ * - `to` (String) - if equal to 'string', then result will be converted
+ *   from utf8 to utf16 (javascript) string. When string output requested,
+ *   chunk length can differ from `chunkSize`, depending on content.
+ *
+ *
+ * ##### Example:
+ *
+ * ```javascript
+ * var pako = require('pako')
+ *   , input = pako.deflate([1,2,3,4,5,6,7,8,9])
+ *   , output;
+ *
+ * try {
+ *   output = pako.inflate(input);
+ * } catch (err)
+ *   console.log(err);
+ * }
+ * ```
+ **/
+function inflate(input, options) {
+  var inflator = new Inflate(options);
+
+  inflator.push(input, true);
+
+  // That will never happens, if you don't cheat with options :)
+  if (inflator.err) { throw inflator.msg; }
+
+  return inflator.result;
+}
+
+
+/**
+ * inflateRaw(data[, options]) -> Uint8Array|Array|String
+ * - data (Uint8Array|Array|String): input data to decompress.
+ * - options (Object): zlib inflate options.
+ *
+ * The same as [[inflate]], but creates raw data, without wrapper
+ * (header and adler32 crc).
+ **/
+function inflateRaw(input, options) {
+  options = options || {};
+  options.raw = true;
+  return inflate(input, options);
+}
+
+
+/**
+ * ungzip(data[, options]) -> Uint8Array|Array|String
+ * - data (Uint8Array|Array|String): input data to decompress.
+ * - options (Object): zlib inflate options.
+ *
+ * Just shortcut to [[inflate]], because it autodetects format
+ * by header.content. Done for convenience.
+ **/
+
+
+exports.Inflate = Inflate;
+exports.inflate = inflate;
+exports.inflateRaw = inflateRaw;
+exports.ungzip  = inflate;
+
+},{"./utils/common":27,"./utils/strings":28,"./zlib/constants":30,"./zlib/gzheader":33,"./zlib/inflate.js":35,"./zlib/messages":37,"./zlib/zstream":39}],27:[function(_dereq_,module,exports){
+'use strict';
+
+
+var TYPED_OK =  (typeof Uint8Array !== 'undefined') &&
+                (typeof Uint16Array !== 'undefined') &&
+                (typeof Int32Array !== 'undefined');
+
+
+exports.assign = function (obj /*from1, from2, from3, ...*/) {
+  var sources = Array.prototype.slice.call(arguments, 1);
+  while (sources.length) {
+    var source = sources.shift();
+    if (!source) { continue; }
+
+    if (typeof(source) !== 'object') {
+      throw new TypeError(source + 'must be non-object');
+    }
+
+    for (var p in source) {
+      if (source.hasOwnProperty(p)) {
+        obj[p] = source[p];
+      }
+    }
+  }
+
+  return obj;
+};
+
+
+// reduce buffer size, avoiding mem copy
+exports.shrinkBuf = function (buf, size) {
+  if (buf.length === size) { return buf; }
+  if (buf.subarray) { return buf.subarray(0, size); }
+  buf.length = size;
+  return buf;
+};
+
+
+var fnTyped = {
+  arraySet: function (dest, src, src_offs, len, dest_offs) {
+    if (src.subarray && dest.subarray) {
+      dest.set(src.subarray(src_offs, src_offs+len), dest_offs);
+      return;
+    }
+    // Fallback to ordinary array
+    for(var i=0; i<len; i++) {
+      dest[dest_offs + i] = src[src_offs + i];
+    }
+  },
+  // Join array of chunks to single array.
+  flattenChunks: function(chunks) {
+    var i, l, len, pos, chunk, result;
+
+    // calculate data length
+    len = 0;
+    for (i=0, l=chunks.length; i<l; i++) {
+      len += chunks[i].length;
+    }
+
+    // join chunks
+    result = new Uint8Array(len);
+    pos = 0;
+    for (i=0, l=chunks.length; i<l; i++) {
+      chunk = chunks[i];
+      result.set(chunk, pos);
+      pos += chunk.length;
+    }
+
+    return result;
+  }
+};
+
+var fnUntyped = {
+  arraySet: function (dest, src, src_offs, len, dest_offs) {
+    for(var i=0; i<len; i++) {
+      dest[dest_offs + i] = src[src_offs + i];
+    }
+  },
+  // Join array of chunks to single array.
+  flattenChunks: function(chunks) {
+    return [].concat.apply([], chunks);
+  }
+};
+
+
+// Enable/Disable typed arrays use, for testing
+//
+exports.setTyped = function (on) {
+  if (on) {
+    exports.Buf8  = Uint8Array;
+    exports.Buf16 = Uint16Array;
+    exports.Buf32 = Int32Array;
+    exports.assign(exports, fnTyped);
+  } else {
+    exports.Buf8  = Array;
+    exports.Buf16 = Array;
+    exports.Buf32 = Array;
+    exports.assign(exports, fnUntyped);
+  }
+};
+
+exports.setTyped(TYPED_OK);
+},{}],28:[function(_dereq_,module,exports){
+// String encode/decode helpers
+'use strict';
+
+
+var utils = _dereq_('./common');
+
+
+// Quick check if we can use fast array to bin string conversion
+//
+// - apply(Array) can fail on Android 2.2
+// - apply(Uint8Array) can fail on iOS 5.1 Safary
+//
+var STR_APPLY_OK = true;
+var STR_APPLY_UIA_OK = true;
+
+try { String.fromCharCode.apply(null, [0]); } catch(__) { STR_APPLY_OK = false; }
+try { String.fromCharCode.apply(null, new Uint8Array(1)); } catch(__) { STR_APPLY_UIA_OK = false; }
+
+
+// Table with utf8 lengths (calculated by first byte of sequence)
+// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,
+// because max possible codepoint is 0x10ffff
+var _utf8len = new utils.Buf8(256);
+for (var i=0; i<256; i++) {
+  _utf8len[i] = (i >= 252 ? 6 : i >= 248 ? 5 : i >= 240 ? 4 : i >= 224 ? 3 : i >= 192 ? 2 : 1);
+}
+_utf8len[254]=_utf8len[254]=1; // Invalid sequence start
+
+
+// convert string to array (typed, when possible)
+exports.string2buf = function (str) {
+  var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;
+
+  // count binary size
+  for (m_pos = 0; m_pos < str_len; m_pos++) {
+    c = str.charCodeAt(m_pos);
+    if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) {
+      c2 = str.charCodeAt(m_pos+1);
+      if ((c2 & 0xfc00) === 0xdc00) {
+        c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);
+        m_pos++;
+      }
+    }
+    buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;
+  }
+
+  // allocate buffer
+  buf = new utils.Buf8(buf_len);
+
+  // convert
+  for (i=0, m_pos = 0; i < buf_len; m_pos++) {
+    c = str.charCodeAt(m_pos);
+    if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) {
+      c2 = str.charCodeAt(m_pos+1);
+      if ((c2 & 0xfc00) === 0xdc00) {
+        c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);
+        m_pos++;
+      }
+    }
+    if (c < 0x80) {
+      /* one byte */
+      buf[i++] = c;
+    } else if (c < 0x800) {
+      /* two bytes */
+      buf[i++] = 0xC0 | (c >>> 6);
+      buf[i++] = 0x80 | (c & 0x3f);
+    } else if (c < 0x10000) {
+      /* three bytes */
+      buf[i++] = 0xE0 | (c >>> 12);
+      buf[i++] = 0x80 | (c >>> 6 & 0x3f);
+      buf[i++] = 0x80 | (c & 0x3f);
+    } else {
+      /* four bytes */
+      buf[i++] = 0xf0 | (c >>> 18);
+      buf[i++] = 0x80 | (c >>> 12 & 0x3f);
+      buf[i++] = 0x80 | (c >>> 6 & 0x3f);
+      buf[i++] = 0x80 | (c & 0x3f);
+    }
+  }
+
+  return buf;
+};
+
+// Helper (used in 2 places)
+function buf2binstring(buf, len) {
+  // use fallback for big arrays to avoid stack overflow
+  if (len < 65537) {
+    if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) {
+      return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len));
+    }
+  }
+
+  var result = '';
+  for(var i=0; i < len; i++) {
+    result += String.fromCharCode(buf[i]);
+  }
+  return result;
+}
+
+
+// Convert byte array to binary string
+exports.buf2binstring = function(buf) {
+  return buf2binstring(buf, buf.length);
+};
+
+
+// Convert binary string (typed, when possible)
+exports.binstring2buf = function(str) {
+  var buf = new utils.Buf8(str.length);
+  for(var i=0, len=buf.length; i < len; i++) {
+    buf[i] = str.charCodeAt(i);
+  }
+  return buf;
+};
+
+
+// convert array to string
+exports.buf2string = function (buf, max) {
+  var i, out, c, c_len;
+  var len = max || buf.length;
+
+  // Reserve max possible length (2 words per char)
+  // NB: by unknown reasons, Array is significantly faster for
+  //     String.fromCharCode.apply than Uint16Array.
+  var utf16buf = new Array(len*2);
+
+  for (out=0, i=0; i<len;) {
+    c = buf[i++];
+    // quick process ascii
+    if (c < 0x80) { utf16buf[out++] = c; continue; }
+
+    c_len = _utf8len[c];
+    // skip 5 & 6 byte codes
+    if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len-1; continue; }
+
+    // apply mask on first byte
+    c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;
+    // join the rest
+    while (c_len > 1 && i < len) {
+      c = (c << 6) | (buf[i++] & 0x3f);
+      c_len--;
+    }
+
+    // terminated by end of string?
+    if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }
+
+    if (c < 0x10000) {
+      utf16buf[out++] = c;
+    } else {
+      c -= 0x10000;
+      utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);
+      utf16buf[out++] = 0xdc00 | (c & 0x3ff);
+    }
+  }
+
+  return buf2binstring(utf16buf, out);
+};
+
+
+// Calculate max possible position in utf8 buffer,
+// that will not break sequence. If that's not possible
+// - (very small limits) return max size as is.
+//
+// buf[] - utf8 bytes array
+// max   - length limit (mandatory);
+exports.utf8border = function(buf, max) {
+  var pos;
+
+  max = max || buf.length;
+  if (max > buf.length) { max = buf.length; }
+
+  // go back from last position, until start of sequence found
+  pos = max-1;
+  while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }
+
+  // Fuckup - very small and broken sequence,
+  // return max, because we should return something anyway.
+  if (pos < 0) { return max; }
+
+  // If we came to start of buffer - that means vuffer is too small,
+  // return max too.
+  if (pos === 0) { return max; }
+
+  return (pos + _utf8len[buf[pos]] > max) ? pos : max;
+};
+
+},{"./common":27}],29:[function(_dereq_,module,exports){
+'use strict';
+
+// Note: adler32 takes 12% for level 0 and 2% for level 6.
+// It doesn't worth to make additional optimizationa as in original.
+// Small size is preferable.
+
+function adler32(adler, buf, len, pos) {
+  var s1 = (adler & 0xffff) |0
+    , s2 = ((adler >>> 16) & 0xffff) |0
+    , n = 0;
+
+  while (len !== 0) {
+    // Set limit ~ twice less than 5552, to keep
+    // s2 in 31-bits, because we force signed ints.
+    // in other case %= will fail.
+    n = len > 2000 ? 2000 : len;
+    len -= n;
+
+    do {
+      s1 = (s1 + buf[pos++]) |0;
+      s2 = (s2 + s1) |0;
+    } while (--n);
+
+    s1 %= 65521;
+    s2 %= 65521;
+  }
+
+  return (s1 | (s2 << 16)) |0;
+}
+
+
+module.exports = adler32;
+},{}],30:[function(_dereq_,module,exports){
+module.exports = {
+
+  /* Allowed flush values; see deflate() and inflate() below for details */
+  Z_NO_FLUSH:         0,
+  Z_PARTIAL_FLUSH:    1,
+  Z_SYNC_FLUSH:       2,
+  Z_FULL_FLUSH:       3,
+  Z_FINISH:           4,
+  Z_BLOCK:            5,
+  Z_TREES:            6,
+
+  /* Return codes for the compression/decompression functions. Negative values
+  * are errors, positive values are used for special but normal events.
+  */
+  Z_OK:               0,
+  Z_STREAM_END:       1,
+  Z_NEED_DICT:        2,
+  Z_ERRNO:           -1,
+  Z_STREAM_ERROR:    -2,
+  Z_DATA_ERROR:      -3,
+  //Z_MEM_ERROR:     -4,
+  Z_BUF_ERROR:       -5,
+  //Z_VERSION_ERROR: -6,
+
+  /* compression levels */
+  Z_NO_COMPRESSION:         0,
+  Z_BEST_SPEED:             1,
+  Z_BEST_COMPRESSION:       9,
+  Z_DEFAULT_COMPRESSION:   -1,
+
+
+  Z_FILTERED:               1,
+  Z_HUFFMAN_ONLY:           2,
+  Z_RLE:                    3,
+  Z_FIXED:                  4,
+  Z_DEFAULT_STRATEGY:       0,
+
+  /* Possible values of the data_type field (though see inflate()) */
+  Z_BINARY:                 0,
+  Z_TEXT:                   1,
+  //Z_ASCII:                1, // = Z_TEXT (deprecated)
+  Z_UNKNOWN:                2,
+
+  /* The deflate compression method */
+  Z_DEFLATED:               8
+  //Z_NULL:                 null // Use -1 or null inline, depending on var type
+};
+},{}],31:[function(_dereq_,module,exports){
+'use strict';
+
+// Note: we can't get significant speed boost here.
+// So write code to minimize size - no pregenerated tables
+// and array tools dependencies.
+
+
+// Use ordinary array, since untyped makes no boost here
+function makeTable() {
+  var c, table = [];
+
+  for(var n =0; n < 256; n++){
+    c = n;
+    for(var k =0; k < 8; k++){
+      c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));
+    }
+    table[n] = c;
+  }
+
+  return table;
+}
+
+// Create table on load. Just 255 signed longs. Not a problem.
+var crcTable = makeTable();
+
+
+function crc32(crc, buf, len, pos) {
+  var t = crcTable
+    , end = pos + len;
+
+  crc = crc ^ (-1);
+
+  for (var i = pos; i < end; i++ ) {
+    crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];
+  }
+
+  return (crc ^ (-1)); // >>> 0;
+}
+
+
+module.exports = crc32;
+},{}],32:[function(_dereq_,module,exports){
+'use strict';
+
+var utils   = _dereq_('../utils/common');
+var trees   = _dereq_('./trees');
+var adler32 = _dereq_('./adler32');
+var crc32   = _dereq_('./crc32');
+var msg   = _dereq_('./messages');
+
+/* Public constants ==========================================================*/
+/* ===========================================================================*/
+
+
+/* Allowed flush values; see deflate() and inflate() below for details */
+var Z_NO_FLUSH      = 0;
+var Z_PARTIAL_FLUSH = 1;
+//var Z_SYNC_FLUSH    = 2;
+var Z_FULL_FLUSH    = 3;
+var Z_FINISH        = 4;
+var Z_BLOCK         = 5;
+//var Z_TREES         = 6;
+
+
+/* Return codes for the compression/decompression functions. Negative values
+ * are errors, positive values are used for special but normal events.
+ */
+var Z_OK            = 0;
+var Z_STREAM_END    = 1;
+//var Z_NEED_DICT     = 2;
+//var Z_ERRNO         = -1;
+var Z_STREAM_ERROR  = -2;
+var Z_DATA_ERROR    = -3;
+//var Z_MEM_ERROR     = -4;
+var Z_BUF_ERROR     = -5;
+//var Z_VERSION_ERROR = -6;
+
+
+/* compression levels */
+//var Z_NO_COMPRESSION      = 0;
+//var Z_BEST_SPEED          = 1;
+//var Z_BEST_COMPRESSION    = 9;
+var Z_DEFAULT_COMPRESSION = -1;
+
+
+var Z_FILTERED            = 1;
+var Z_HUFFMAN_ONLY        = 2;
+var Z_RLE                 = 3;
+var Z_FIXED               = 4;
+var Z_DEFAULT_STRATEGY    = 0;
+
+/* Possible values of the data_type field (though see inflate()) */
+//var Z_BINARY              = 0;
+//var Z_TEXT                = 1;
+//var Z_ASCII               = 1; // = Z_TEXT
+var Z_UNKNOWN             = 2;
+
+
+/* The deflate compression method */
+var Z_DEFLATED  = 8;
+
+/*============================================================================*/
+
+
+var MAX_MEM_LEVEL = 9;
+/* Maximum value for memLevel in deflateInit2 */
+var MAX_WBITS = 15;
+/* 32K LZ77 window */
+var DEF_MEM_LEVEL = 8;
+
+
+var LENGTH_CODES  = 29;
+/* number of length codes, not counting the special END_BLOCK code */
+var LITERALS      = 256;
+/* number of literal bytes 0..255 */
+var L_CODES       = LITERALS + 1 + LENGTH_CODES;
+/* number of Literal or Length codes, including the END_BLOCK code */
+var D_CODES       = 30;
+/* number of distance codes */
+var BL_CODES      = 19;
+/* number of codes used to transfer the bit lengths */
+var HEAP_SIZE     = 2*L_CODES + 1;
+/* maximum heap size */
+var MAX_BITS  = 15;
+/* All codes must not exceed MAX_BITS bits */
+
+var MIN_MATCH = 3;
+var MAX_MATCH = 258;
+var MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);
+
+var PRESET_DICT = 0x20;
+
+var INIT_STATE = 42;
+var EXTRA_STATE = 69;
+var NAME_STATE = 73;
+var COMMENT_STATE = 91;
+var HCRC_STATE = 103;
+var BUSY_STATE = 113;
+var FINISH_STATE = 666;
+
+var BS_NEED_MORE      = 1; /* block not completed, need more input or more output */
+var BS_BLOCK_DONE     = 2; /* block flush performed */
+var BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */
+var BS_FINISH_DONE    = 4; /* finish done, accept no more input or output */
+
+var OS_CODE = 0x03; // Unix :) . Don't detect, use this default.
+
+function err(strm, errorCode) {
+  strm.msg = msg[errorCode];
+  return errorCode;
+}
+
+function rank(f) {
+  return ((f) << 1) - ((f) > 4 ? 9 : 0);
+}
+
+function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }
+
+
+/* =========================================================================
+ * Flush as much pending output as possible. All deflate() output goes
+ * through this function so some applications may wish to modify it
+ * to avoid allocating a large strm->output buffer and copying into it.
+ * (See also read_buf()).
+ */
+function flush_pending(strm) {
+  var s = strm.state;
+
+  //_tr_flush_bits(s);
+  var len = s.pending;
+  if (len > strm.avail_out) {
+    len = strm.avail_out;
+  }
+  if (len === 0) { return; }
+
+  utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);
+  strm.next_out += len;
+  s.pending_out += len;
+  strm.total_out += len;
+  strm.avail_out -= len;
+  s.pending -= len;
+  if (s.pending === 0) {
+    s.pending_out = 0;
+  }
+}
+
+
+function flush_block_only (s, last) {
+  trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);
+  s.block_start = s.strstart;
+  flush_pending(s.strm);
+}
+
+
+function put_byte(s, b) {
+  s.pending_buf[s.pending++] = b;
+}
+
+
+/* =========================================================================
+ * Put a short in the pending buffer. The 16-bit value is put in MSB order.
+ * IN assertion: the stream state is correct and there is enough room in
+ * pending_buf.
+ */
+function putShortMSB(s, b) {
+//  put_byte(s, (Byte)(b >> 8));
+//  put_byte(s, (Byte)(b & 0xff));
+  s.pending_buf[s.pending++] = (b >>> 8) & 0xff;
+  s.pending_buf[s.pending++] = b & 0xff;
+}
+
+
+/* ===========================================================================
+ * Read a new buffer from the current input stream, update the adler32
+ * and total number of bytes read.  All deflate() input goes through
+ * this function so some applications may wish to modify it to avoid
+ * allocating a large strm->input buffer and copying from it.
+ * (See also flush_pending()).
+ */
+function read_buf(strm, buf, start, size) {
+  var len = strm.avail_in;
+
+  if (len > size) { len = size; }
+  if (len === 0) { return 0; }
+
+  strm.avail_in -= len;
+
+  utils.arraySet(buf, strm.input, strm.next_in, len, start);
+  if (strm.state.wrap === 1) {
+    strm.adler = adler32(strm.adler, buf, len, start);
+  }
+
+  else if (strm.state.wrap === 2) {
+    strm.adler = crc32(strm.adler, buf, len, start);
+  }
+
+  strm.next_in += len;
+  strm.total_in += len;
+
+  return len;
+}
+
+
+/* ===========================================================================
+ * Set match_start to the longest match starting at the given string and
+ * return its length. Matches shorter or equal to prev_length are discarded,
+ * in which case the result is equal to prev_length and match_start is
+ * garbage.
+ * IN assertions: cur_match is the head of the hash chain for the current
+ *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
+ * OUT assertion: the match length is not greater than s->lookahead.
+ */
+function longest_match(s, cur_match) {
+  var chain_length = s.max_chain_length;      /* max hash chain length */
+  var scan = s.strstart; /* current string */
+  var match;                       /* matched string */
+  var len;                           /* length of current match */
+  var best_len = s.prev_length;              /* best match length so far */
+  var nice_match = s.nice_match;             /* stop if match long enough */
+  var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?
+      s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;
+
+  var _win = s.window; // shortcut
+
+  var wmask = s.w_mask;
+  var prev  = s.prev;
+
+  /* Stop when cur_match becomes <= limit. To simplify the code,
+   * we prevent matches with the string of window index 0.
+   */
+
+  var strend = s.strstart + MAX_MATCH;
+  var scan_end1  = _win[scan + best_len - 1];
+  var scan_end   = _win[scan + best_len];
+
+  /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
+   * It is easy to get rid of this optimization if necessary.
+   */
+  // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
+
+  /* Do not waste too much time if we already have a good match: */
+  if (s.prev_length >= s.good_match) {
+    chain_length >>= 2;
+  }
+  /* Do not look for matches beyond the end of the input. This is necessary
+   * to make deflate deterministic.
+   */
+  if (nice_match > s.lookahead) { nice_match = s.lookahead; }
+
+  // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
+
+  do {
+    // Assert(cur_match < s->strstart, "no future");
+    match = cur_match;
+
+    /* Skip to next match if the match length cannot increase
+     * or if the match length is less than 2.  Note that the checks below
+     * for insufficient lookahead only occur occasionally for performance
+     * reasons.  Therefore uninitialized memory will be accessed, and
+     * conditional jumps will be made that depend on those values.
+     * However the length of the match is limited to the lookahead, so
+     * the output of deflate is not affected by the uninitialized values.
+     */
+
+    if (_win[match + best_len]     !== scan_end  ||
+        _win[match + best_len - 1] !== scan_end1 ||
+        _win[match]                !== _win[scan] ||
+        _win[++match]              !== _win[scan + 1]) {
+      continue;
+    }
+
+    /* The check at best_len-1 can be removed because it will be made
+     * again later. (This heuristic is not always a win.)
+     * It is not necessary to compare scan[2] and match[2] since they
+     * are always equal when the other bytes match, given that
+     * the hash keys are equal and that HASH_BITS >= 8.
+     */
+    scan += 2;
+    match++;
+    // Assert(*scan == *match, "match[2]?");
+
+    /* We check for insufficient lookahead only every 8th comparison;
+     * the 256th check will be made at strstart+258.
+     */
+    do {
+      /*jshint noempty:false*/
+    } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
+             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
+             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
+             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
+             scan < strend);
+
+    // Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
+
+    len = MAX_MATCH - (strend - scan);
+    scan = strend - MAX_MATCH;
+
+    if (len > best_len) {
+      s.match_start = cur_match;
+      best_len = len;
+      if (len >= nice_match) {
+        break;
+      }
+      scan_end1  = _win[scan + best_len - 1];
+      scan_end   = _win[scan + best_len];
+    }
+  } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);
+
+  if (best_len <= s.lookahead) {
+    return best_len;
+  }
+  return s.lookahead;
+}
+
+
+/* ===========================================================================
+ * Fill the window when the lookahead becomes insufficient.
+ * Updates strstart and lookahead.
+ *
+ * IN assertion: lookahead < MIN_LOOKAHEAD
+ * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
+ *    At least one byte has been read, or avail_in == 0; reads are
+ *    performed for at least two bytes (required for the zip translate_eol
+ *    option -- not supported here).
+ */
+function fill_window(s) {
+  var _w_size = s.w_size;
+  var p, n, m, more, str;
+
+  //Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead");
+
+  do {
+    more = s.window_size - s.lookahead - s.strstart;
+
+    // JS ints have 32 bit, block below not needed
+    /* Deal with !@#$% 64K limit: */
+    //if (sizeof(int) <= 2) {
+    //    if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
+    //        more = wsize;
+    //
+    //  } else if (more == (unsigned)(-1)) {
+    //        /* Very unlikely, but possible on 16 bit machine if
+    //         * strstart == 0 && lookahead == 1 (input done a byte at time)
+    //         */
+    //        more--;
+    //    }
+    //}
+
+
+    /* If the window is almost full and there is insufficient lookahead,
+     * move the upper half to the lower one to make room in the upper half.
+     */
+    if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {
+
+      utils.arraySet(s.window, s.window, _w_size, _w_size, 0);
+      s.match_start -= _w_size;
+      s.strstart -= _w_size;
+      /* we now have strstart >= MAX_DIST */
+      s.block_start -= _w_size;
+
+      /* Slide the hash table (could be avoided with 32 bit values
+       at the expense of memory usage). We slide even when level == 0
+       to keep the hash table consistent if we switch back to level > 0
+       later. (Using level 0 permanently is not an optimal usage of
+       zlib, so we don't care about this pathological case.)
+       */
+
+      n = s.hash_size;
+      p = n;
+      do {
+        m = s.head[--p];
+        s.head[p] = (m >= _w_size ? m - _w_size : 0);
+      } while (--n);
+
+      n = _w_size;
+      p = n;
+      do {
+        m = s.prev[--p];
+        s.prev[p] = (m >= _w_size ? m - _w_size : 0);
+        /* If n is not on any hash chain, prev[n] is garbage but
+         * its value will never be used.
+         */
+      } while (--n);
+
+      more += _w_size;
+    }
+    if (s.strm.avail_in === 0) {
+      break;
+    }
+
+    /* If there was no sliding:
+     *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
+     *    more == window_size - lookahead - strstart
+     * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
+     * => more >= window_size - 2*WSIZE + 2
+     * In the BIG_MEM or MMAP case (not yet supported),
+     *   window_size == input_size + MIN_LOOKAHEAD  &&
+     *   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
+     * Otherwise, window_size == 2*WSIZE so more >= 2.
+     * If there was sliding, more >= WSIZE. So in all cases, more >= 2.
+     */
+    //Assert(more >= 2, "more < 2");
+    n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);
+    s.lookahead += n;
+
+    /* Initialize the hash value now that we have some input: */
+    if (s.lookahead + s.insert >= MIN_MATCH) {
+      str = s.strstart - s.insert;
+      s.ins_h = s.window[str];
+
+      /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */
+      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;
+//#if MIN_MATCH != 3
+//        Call update_hash() MIN_MATCH-3 more times
+//#endif
+      while (s.insert) {
+        /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */
+        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH-1]) & s.hash_mask;
+
+        s.prev[str & s.w_mask] = s.head[s.ins_h];
+        s.head[s.ins_h] = str;
+        str++;
+        s.insert--;
+        if (s.lookahead + s.insert < MIN_MATCH) {
+          break;
+        }
+      }
+    }
+    /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
+     * but this is not important since only literal bytes will be emitted.
+     */
+
+  } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);
+
+  /* If the WIN_INIT bytes after the end of the current data have never been
+   * written, then zero those bytes in order to avoid memory check reports of
+   * the use of uninitialized (or uninitialised as Julian writes) bytes by
+   * the longest match routines.  Update the high water mark for the next
+   * time through here.  WIN_INIT is set to MAX_MATCH since the longest match
+   * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.
+   */
+//  if (s.high_water < s.window_size) {
+//    var curr = s.strstart + s.lookahead;
+//    var init = 0;
+//
+//    if (s.high_water < curr) {
+//      /* Previous high water mark below current data -- zero WIN_INIT
+//       * bytes or up to end of window, whichever is less.
+//       */
+//      init = s.window_size - curr;
+//      if (init > WIN_INIT)
+//        init = WIN_INIT;
+//      zmemzero(s->window + curr, (unsigned)init);
+//      s->high_water = curr + init;
+//    }
+//    else if (s->high_water < (ulg)curr + WIN_INIT) {
+//      /* High water mark at or above current data, but below current data
+//       * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up
+//       * to end of window, whichever is less.
+//       */
+//      init = (ulg)curr + WIN_INIT - s->high_water;
+//      if (init > s->window_size - s->high_water)
+//        init = s->window_size - s->high_water;
+//      zmemzero(s->window + s->high_water, (unsigned)init);
+//      s->high_water += init;
+//    }
+//  }
+//
+//  Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,
+//    "not enough room for search");
+}
+
+/* ===========================================================================
+ * Copy without compression as much as possible from the input stream, return
+ * the current block state.
+ * This function does not insert new strings in the dictionary since
+ * uncompressible data is probably not useful. This function is used
+ * only for the level=0 compression option.
+ * NOTE: this function should be optimized to avoid extra copying from
+ * window to pending_buf.
+ */
+function deflate_stored(s, flush) {
+  /* Stored blocks are limited to 0xffff bytes, pending_buf is limited
+   * to pending_buf_size, and each stored block has a 5 byte header:
+   */
+  var max_block_size = 0xffff;
+
+  if (max_block_size > s.pending_buf_size - 5) {
+    max_block_size = s.pending_buf_size - 5;
+  }
+
+  /* Copy as much as possible from input to output: */
+  for (;;) {
+    /* Fill the window as much as possible: */
+    if (s.lookahead <= 1) {
+
+      //Assert(s->strstart < s->w_size+MAX_DIST(s) ||
+      //  s->block_start >= (long)s->w_size, "slide too late");
+//      if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||
+//        s.block_start >= s.w_size)) {
+//        throw  new Error("slide too late");
+//      }
+
+      fill_window(s);
+      if (s.lookahead === 0 && flush === Z_NO_FLUSH) {
+        return BS_NEED_MORE;
+      }
+
+      if (s.lookahead === 0) {
+        break;
+      }
+      /* flush the current block */
+    }
+    //Assert(s->block_start >= 0L, "block gone");
+//    if (s.block_start < 0) throw new Error("block gone");
+
+    s.strstart += s.lookahead;
+    s.lookahead = 0;
+
+    /* Emit a stored block if pending_buf will be full: */
+    var max_start = s.block_start + max_block_size;
+
+    if (s.strstart === 0 || s.strstart >= max_start) {
+      /* strstart == 0 is possible when wraparound on 16-bit machine */
+      s.lookahead = s.strstart - max_start;
+      s.strstart = max_start;
+      /*** FLUSH_BLOCK(s, 0); ***/
+      flush_block_only(s, false);
+      if (s.strm.avail_out === 0) {
+        return BS_NEED_MORE;
+      }
+      /***/
+
+
+    }
+    /* Flush if we may have to slide, otherwise block_start may become
+     * negative and the data will be gone:
+     */
+    if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {
+      /*** FLUSH_BLOCK(s, 0); ***/
+      flush_block_only(s, false);
+      if (s.strm.avail_out === 0) {
+        return BS_NEED_MORE;
+      }
+      /***/
+    }
+  }
+
+  s.insert = 0;
+
+  if (flush === Z_FINISH) {
+    /*** FLUSH_BLOCK(s, 1); ***/
+    flush_block_only(s, true);
+    if (s.strm.avail_out === 0) {
+      return BS_FINISH_STARTED;
+    }
+    /***/
+    return BS_FINISH_DONE;
+  }
+
+  if (s.strstart > s.block_start) {
+    /*** FLUSH_BLOCK(s, 0); ***/
+    flush_block_only(s, false);
+    if (s.strm.avail_out === 0) {
+      return BS_NEED_MORE;
+    }
+    /***/
+  }
+
+  return BS_NEED_MORE;
+}
+
+/* ===========================================================================
+ * Compress as much as possible from the input stream, return the current
+ * block state.
+ * This function does not perform lazy evaluation of matches and inserts
+ * new strings in the dictionary only for unmatched strings or for short
+ * matches. It is used only for the fast compression options.
+ */
+function deflate_fast(s, flush) {
+  var hash_head;        /* head of the hash chain */
+  var bflush;           /* set if current block must be flushed */
+
+  for (;;) {
+    /* Make sure that we always have enough lookahead, except
+     * at the end of the input file. We need MAX_MATCH bytes
+     * for the next match, plus MIN_MATCH bytes to insert the
+     * string following the next match.
+     */
+    if (s.lookahead < MIN_LOOKAHEAD) {
+      fill_window(s);
+      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {
+        return BS_NEED_MORE;
+      }
+      if (s.lookahead === 0) {
+        break; /* flush the current block */
+      }
+    }
+
+    /* Insert the string window[strstart .. strstart+2] in the
+     * dictionary, and set hash_head to the head of the hash chain:
+     */
+    hash_head = 0/*NIL*/;
+    if (s.lookahead >= MIN_MATCH) {
+      /*** INSERT_STRING(s, s.strstart, hash_head); ***/
+      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
+      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
+      s.head[s.ins_h] = s.strstart;
+      /***/
+    }
+
+    /* Find the longest match, discarding those <= prev_length.
+     * At this point we have always match_length < MIN_MATCH
+     */
+    if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {
+      /* To simplify the code, we prevent matches with the string
+       * of window index 0 (in particular we have to avoid a match
+       * of the string with itself at the start of the input file).
+       */
+      s.match_length = longest_match(s, hash_head);
+      /* longest_match() sets match_start */
+    }
+    if (s.match_length >= MIN_MATCH) {
+      // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only
+
+      /*** _tr_tally_dist(s, s.strstart - s.match_start,
+                     s.match_length - MIN_MATCH, bflush); ***/
+      bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);
+
+      s.lookahead -= s.match_length;
+
+      /* Insert new strings in the hash table only if the match length
+       * is not too large. This saves time but degrades compression.
+       */
+      if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {
+        s.match_length--; /* string at strstart already in table */
+        do {
+          s.strstart++;
+          /*** INSERT_STRING(s, s.strstart, hash_head); ***/
+          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
+          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
+          s.head[s.ins_h] = s.strstart;
+          /***/
+          /* strstart never exceeds WSIZE-MAX_MATCH, so there are
+           * always MIN_MATCH bytes ahead.
+           */
+        } while (--s.match_length !== 0);
+        s.strstart++;
+      } else
+      {
+        s.strstart += s.match_length;
+        s.match_length = 0;
+        s.ins_h = s.window[s.strstart];
+        /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */
+        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;
+
+//#if MIN_MATCH != 3
+//                Call UPDATE_HASH() MIN_MATCH-3 more times
+//#endif
+        /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not
+         * matter since it will be recomputed at next deflate call.
+         */
+      }
+    } else {
+      /* No match, output a literal byte */
+      //Tracevv((stderr,"%c", s.window[s.strstart]));
+      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
+      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
+
+      s.lookahead--;
+      s.strstart++;
+    }
+    if (bflush) {
+      /*** FLUSH_BLOCK(s, 0); ***/
+      flush_block_only(s, false);
+      if (s.strm.avail_out === 0) {
+        return BS_NEED_MORE;
+      }
+      /***/
+    }
+  }
+  s.insert = ((s.strstart < (MIN_MATCH-1)) ? s.strstart : MIN_MATCH-1);
+  if (flush === Z_FINISH) {
+    /*** FLUSH_BLOCK(s, 1); ***/
+    flush_block_only(s, true);
+    if (s.strm.avail_out === 0) {
+      return BS_FINISH_STARTED;
+    }
+    /***/
+    return BS_FINISH_DONE;
+  }
+  if (s.last_lit) {
+    /*** FLUSH_BLOCK(s, 0); ***/
+    flush_block_only(s, false);
+    if (s.strm.avail_out === 0) {
+      return BS_NEED_MORE;
+    }
+    /***/
+  }
+  return BS_BLOCK_DONE;
+}
+
+/* ===========================================================================
+ * Same as above, but achieves better compression. We use a lazy
+ * evaluation for matches: a match is finally adopted only if there is
+ * no better match at the next window position.
+ */
+function deflate_slow(s, flush) {
+  var hash_head;          /* head of hash chain */
+  var bflush;              /* set if current block must be flushed */
+
+  var max_insert;
+
+  /* Process the input block. */
+  for (;;) {
+    /* Make sure that we always have enough lookahead, except
+     * at the end of the input file. We need MAX_MATCH bytes
+     * for the next match, plus MIN_MATCH bytes to insert the
+     * string following the next match.
+     */
+    if (s.lookahead < MIN_LOOKAHEAD) {
+      fill_window(s);
+      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {
+        return BS_NEED_MORE;
+      }
+      if (s.lookahead === 0) { break; } /* flush the current block */
+    }
+
+    /* Insert the string window[strstart .. strstart+2] in the
+     * dictionary, and set hash_head to the head of the hash chain:
+     */
+    hash_head = 0/*NIL*/;
+    if (s.lookahead >= MIN_MATCH) {
+      /*** INSERT_STRING(s, s.strstart, hash_head); ***/
+      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
+      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
+      s.head[s.ins_h] = s.strstart;
+      /***/
+    }
+
+    /* Find the longest match, discarding those <= prev_length.
+     */
+    s.prev_length = s.match_length;
+    s.prev_match = s.match_start;
+    s.match_length = MIN_MATCH-1;
+
+    if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&
+        s.strstart - hash_head <= (s.w_size-MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {
+      /* To simplify the code, we prevent matches with the string
+       * of window index 0 (in particular we have to avoid a match
+       * of the string with itself at the start of the input file).
+       */
+      s.match_length = longest_match(s, hash_head);
+      /* longest_match() sets match_start */
+
+      if (s.match_length <= 5 &&
+         (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {
+
+        /* If prev_match is also MIN_MATCH, match_start is garbage
+         * but we will ignore the current match anyway.
+         */
+        s.match_length = MIN_MATCH-1;
+      }
+    }
+    /* If there was a match at the previous step and the current
+     * match is not better, output the previous match:
+     */
+    if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {
+      max_insert = s.strstart + s.lookahead - MIN_MATCH;
+      /* Do not insert strings in hash table beyond this. */
+
+      //check_match(s, s.strstart-1, s.prev_match, s.prev_length);
+
+      /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,
+                     s.prev_length - MIN_MATCH, bflush);***/
+      bflush = trees._tr_tally(s, s.strstart - 1- s.prev_match, s.prev_length - MIN_MATCH);
+      /* Insert in hash table all strings up to the end of the match.
+       * strstart-1 and strstart are already inserted. If there is not
+       * enough lookahead, the last two strings are not inserted in
+       * the hash table.
+       */
+      s.lookahead -= s.prev_length-1;
+      s.prev_length -= 2;
+      do {
+        if (++s.strstart <= max_insert) {
+          /*** INSERT_STRING(s, s.strstart, hash_head); ***/
+          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
+          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
+          s.head[s.ins_h] = s.strstart;
+          /***/
+        }
+      } while (--s.prev_length !== 0);
+      s.match_available = 0;
+      s.match_length = MIN_MATCH-1;
+      s.strstart++;
+
+      if (bflush) {
+        /*** FLUSH_BLOCK(s, 0); ***/
+        flush_block_only(s, false);
+        if (s.strm.avail_out === 0) {
+          return BS_NEED_MORE;
+        }
+        /***/
+      }
+
+    } else if (s.match_available) {
+      /* If there was no match at the previous position, output a
+       * single literal. If there was a match but the current match
+       * is longer, truncate the previous match to a single literal.
+       */
+      //Tracevv((stderr,"%c", s->window[s->strstart-1]));
+      /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/
+      bflush = trees._tr_tally(s, 0, s.window[s.strstart-1]);
+
+      if (bflush) {
+        /*** FLUSH_BLOCK_ONLY(s, 0) ***/
+        flush_block_only(s, false);
+        /***/
+      }
+      s.strstart++;
+      s.lookahead--;
+      if (s.strm.avail_out === 0) {
+        return BS_NEED_MORE;
+      }
+    } else {
+      /* There is no previous match to compare with, wait for
+       * the next step to decide.
+       */
+      s.match_available = 1;
+      s.strstart++;
+      s.lookahead--;
+    }
+  }
+  //Assert (flush != Z_NO_FLUSH, "no flush?");
+  if (s.match_available) {
+    //Tracevv((stderr,"%c", s->window[s->strstart-1]));
+    /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/
+    bflush = trees._tr_tally(s, 0, s.window[s.strstart-1]);
+
+    s.match_available = 0;
+  }
+  s.insert = s.strstart < MIN_MATCH-1 ? s.strstart : MIN_MATCH-1;
+  if (flush === Z_FINISH) {
+    /*** FLUSH_BLOCK(s, 1); ***/
+    flush_block_only(s, true);
+    if (s.strm.avail_out === 0) {
+      return BS_FINISH_STARTED;
+    }
+    /***/
+    return BS_FINISH_DONE;
+  }
+  if (s.last_lit) {
+    /*** FLUSH_BLOCK(s, 0); ***/
+    flush_block_only(s, false);
+    if (s.strm.avail_out === 0) {
+      return BS_NEED_MORE;
+    }
+    /***/
+  }
+
+  return BS_BLOCK_DONE;
+}
+
+
+/* ===========================================================================
+ * For Z_RLE, simply look for runs of bytes, generate matches only of distance
+ * one.  Do not maintain a hash table.  (It will be regenerated if this run of
+ * deflate switches away from Z_RLE.)
+ */
+function deflate_rle(s, flush) {
+  var bflush;            /* set if current block must be flushed */
+  var prev;              /* byte at distance one to match */
+  var scan, strend;      /* scan goes up to strend for length of run */
+
+  var _win = s.window;
+
+  for (;;) {
+    /* Make sure that we always have enough lookahead, except
+     * at the end of the input file. We need MAX_MATCH bytes
+     * for the longest run, plus one for the unrolled loop.
+     */
+    if (s.lookahead <= MAX_MATCH) {
+      fill_window(s);
+      if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {
+        return BS_NEED_MORE;
+      }
+      if (s.lookahead === 0) { break; } /* flush the current block */
+    }
+
+    /* See how many times the previous byte repeats */
+    s.match_length = 0;
+    if (s.lookahead >= MIN_MATCH && s.strstart > 0) {
+      scan = s.strstart - 1;
+      prev = _win[scan];
+      if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {
+        strend = s.strstart + MAX_MATCH;
+        do {
+          /*jshint noempty:false*/
+        } while (prev === _win[++scan] && prev === _win[++scan] &&
+                 prev === _win[++scan] && prev === _win[++scan] &&
+                 prev === _win[++scan] && prev === _win[++scan] &&
+                 prev === _win[++scan] && prev === _win[++scan] &&
+                 scan < strend);
+        s.match_length = MAX_MATCH - (strend - scan);
+        if (s.match_length > s.lookahead) {
+          s.match_length = s.lookahead;
+        }
+      }
+      //Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan");
+    }
+
+    /* Emit match if have run of MIN_MATCH or longer, else emit literal */
+    if (s.match_length >= MIN_MATCH) {
+      //check_match(s, s.strstart, s.strstart - 1, s.match_length);
+
+      /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/
+      bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);
+
+      s.lookahead -= s.match_length;
+      s.strstart += s.match_length;
+      s.match_length = 0;
+    } else {
+      /* No match, output a literal byte */
+      //Tracevv((stderr,"%c", s->window[s->strstart]));
+      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
+      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
+
+      s.lookahead--;
+      s.strstart++;
+    }
+    if (bflush) {
+      /*** FLUSH_BLOCK(s, 0); ***/
+      flush_block_only(s, false);
+      if (s.strm.avail_out === 0) {
+        return BS_NEED_MORE;
+      }
+      /***/
+    }
+  }
+  s.insert = 0;
+  if (flush === Z_FINISH) {
+    /*** FLUSH_BLOCK(s, 1); ***/
+    flush_block_only(s, true);
+    if (s.strm.avail_out === 0) {
+      return BS_FINISH_STARTED;
+    }
+    /***/
+    return BS_FINISH_DONE;
+  }
+  if (s.last_lit) {
+    /*** FLUSH_BLOCK(s, 0); ***/
+    flush_block_only(s, false);
+    if (s.strm.avail_out === 0) {
+      return BS_NEED_MORE;
+    }
+    /***/
+  }
+  return BS_BLOCK_DONE;
+}
+
+/* ===========================================================================
+ * For Z_HUFFMAN_ONLY, do not look for matches.  Do not maintain a hash table.
+ * (It will be regenerated if this run of deflate switches away from Huffman.)
+ */
+function deflate_huff(s, flush) {
+  var bflush;             /* set if current block must be flushed */
+
+  for (;;) {
+    /* Make sure that we have a literal to write. */
+    if (s.lookahead === 0) {
+      fill_window(s);
+      if (s.lookahead === 0) {
+        if (flush === Z_NO_FLUSH) {
+          return BS_NEED_MORE;
+        }
+        break;      /* flush the current block */
+      }
+    }
+
+    /* Output a literal byte */
+    s.match_length = 0;
+    //Tracevv((stderr,"%c", s->window[s->strstart]));
+    /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
+    bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
+    s.lookahead--;
+    s.strstart++;
+    if (bflush) {
+      /*** FLUSH_BLOCK(s, 0); ***/
+      flush_block_only(s, false);
+      if (s.strm.avail_out === 0) {
+        return BS_NEED_MORE;
+      }
+      /***/
+    }
+  }
+  s.insert = 0;
+  if (flush === Z_FINISH) {
+    /*** FLUSH_BLOCK(s, 1); ***/
+    flush_block_only(s, true);
+    if (s.strm.avail_out === 0) {
+      return BS_FINISH_STARTED;
+    }
+    /***/
+    return BS_FINISH_DONE;
+  }
+  if (s.last_lit) {
+    /*** FLUSH_BLOCK(s, 0); ***/
+    flush_block_only(s, false);
+    if (s.strm.avail_out === 0) {
+      return BS_NEED_MORE;
+    }
+    /***/
+  }
+  return BS_BLOCK_DONE;
+}
+
+/* Values for max_lazy_match, good_match and max_chain_length, depending on
+ * the desired pack level (0..9). The values given below have been tuned to
+ * exclude worst case performance for pathological files. Better values may be
+ * found for specific files.
+ */
+var Config = function (good_length, max_lazy, nice_length, max_chain, func) {
+  this.good_length = good_length;
+  this.max_lazy = max_lazy;
+  this.nice_length = nice_length;
+  this.max_chain = max_chain;
+  this.func = func;
+};
+
+var configuration_table;
+
+configuration_table = [
+  /*      good lazy nice chain */
+  new Config(0, 0, 0, 0, deflate_stored),          /* 0 store only */
+  new Config(4, 4, 8, 4, deflate_fast),            /* 1 max speed, no lazy matches */
+  new Config(4, 5, 16, 8, deflate_fast),           /* 2 */
+  new Config(4, 6, 32, 32, deflate_fast),          /* 3 */
+
+  new Config(4, 4, 16, 16, deflate_slow),          /* 4 lazy matches */
+  new Config(8, 16, 32, 32, deflate_slow),         /* 5 */
+  new Config(8, 16, 128, 128, deflate_slow),       /* 6 */
+  new Config(8, 32, 128, 256, deflate_slow),       /* 7 */
+  new Config(32, 128, 258, 1024, deflate_slow),    /* 8 */
+  new Config(32, 258, 258, 4096, deflate_slow)     /* 9 max compression */
+];
+
+
+/* ===========================================================================
+ * Initialize the "longest match" routines for a new zlib stream
+ */
+function lm_init(s) {
+  s.window_size = 2 * s.w_size;
+
+  /*** CLEAR_HASH(s); ***/
+  zero(s.head); // Fill with NIL (= 0);
+
+  /* Set the default configuration parameters:
+   */
+  s.max_lazy_match = configuration_table[s.level].max_lazy;
+  s.good_match = configuration_table[s.level].good_length;
+  s.nice_match = configuration_table[s.level].nice_length;
+  s.max_chain_length = configuration_table[s.level].max_chain;
+
+  s.strstart = 0;
+  s.block_start = 0;
+  s.lookahead = 0;
+  s.insert = 0;
+  s.match_length = s.prev_length = MIN_MATCH - 1;
+  s.match_available = 0;
+  s.ins_h = 0;
+}
+
+
+function DeflateState() {
+  this.strm = null;            /* pointer back to this zlib stream */
+  this.status = 0;            /* as the name implies */
+  this.pending_buf = null;      /* output still pending */
+  this.pending_buf_size = 0;  /* size of pending_buf */
+  this.pending_out = 0;       /* next pending byte to output to the stream */
+  this.pending = 0;           /* nb of bytes in the pending buffer */
+  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */
+  this.gzhead = null;         /* gzip header information to write */
+  this.gzindex = 0;           /* where in extra, name, or comment */
+  this.method = Z_DEFLATED; /* can only be DEFLATED */
+  this.last_flush = -1;   /* value of flush param for previous deflate call */
+
+  this.w_size = 0;  /* LZ77 window size (32K by default) */
+  this.w_bits = 0;  /* log2(w_size)  (8..16) */
+  this.w_mask = 0;  /* w_size - 1 */
+
+  this.window = null;
+  /* Sliding window. Input bytes are read into the second half of the window,
+   * and move to the first half later to keep a dictionary of at least wSize
+   * bytes. With this organization, matches are limited to a distance of
+   * wSize-MAX_MATCH bytes, but this ensures that IO is always
+   * performed with a length multiple of the block size.
+   */
+
+  this.window_size = 0;
+  /* Actual size of window: 2*wSize, except when the user input buffer
+   * is directly used as sliding window.
+   */
+
+  this.prev = null;
+  /* Link to older string with same hash index. To limit the size of this
+   * array to 64K, this link is maintained only for the last 32K strings.
+   * An index in this array is thus a window index modulo 32K.
+   */
+
+  this.head = null;   /* Heads of the hash chains or NIL. */
+
+  this.ins_h = 0;       /* hash index of string to be inserted */
+  this.hash_size = 0;   /* number of elements in hash table */
+  this.hash_bits = 0;   /* log2(hash_size) */
+  this.hash_mask = 0;   /* hash_size-1 */
+
+  this.hash_shift = 0;
+  /* Number of bits by which ins_h must be shifted at each input
+   * step. It must be such that after MIN_MATCH steps, the oldest
+   * byte no longer takes part in the hash key, that is:
+   *   hash_shift * MIN_MATCH >= hash_bits
+   */
+
+  this.block_start = 0;
+  /* Window position at the beginning of the current output block. Gets
+   * negative when the window is moved backwards.
+   */
+
+  this.match_length = 0;      /* length of best match */
+  this.prev_match = 0;        /* previous match */
+  this.match_available = 0;   /* set if previous match exists */
+  this.strstart = 0;          /* start of string to insert */
+  this.match_start = 0;       /* start of matching string */
+  this.lookahead = 0;         /* number of valid bytes ahead in window */
+
+  this.prev_length = 0;
+  /* Length of the best match at previous step. Matches not greater than this
+   * are discarded. This is used in the lazy match evaluation.
+   */
+
+  this.max_chain_length = 0;
+  /* To speed up deflation, hash chains are never searched beyond this
+   * length.  A higher limit improves compression ratio but degrades the
+   * speed.
+   */
+
+  this.max_lazy_match = 0;
+  /* Attempt to find a better match only when the current match is strictly
+   * smaller than this value. This mechanism is used only for compression
+   * levels >= 4.
+   */
+  // That's alias to max_lazy_match, don't use directly
+  //this.max_insert_length = 0;
+  /* Insert new strings in the hash table only if the match length is not
+   * greater than this length. This saves time but degrades compression.
+   * max_insert_length is used only for compression levels <= 3.
+   */
+
+  this.level = 0;     /* compression level (1..9) */
+  this.strategy = 0;  /* favor or force Huffman coding*/
+
+  this.good_match = 0;
+  /* Use a faster search when the previous match is longer than this */
+
+  this.nice_match = 0; /* Stop searching when current match exceeds this */
+
+              /* used by trees.c: */
+
+  /* Didn't use ct_data typedef below to suppress compiler warning */
+
+  // struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */
+  // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
+  // struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */
+
+  // Use flat array of DOUBLE size, with interleaved fata,
+  // because JS does not support effective
+  this.dyn_ltree  = new utils.Buf16(HEAP_SIZE * 2);
+  this.dyn_dtree  = new utils.Buf16((2*D_CODES+1) * 2);
+  this.bl_tree    = new utils.Buf16((2*BL_CODES+1) * 2);
+  zero(this.dyn_ltree);
+  zero(this.dyn_dtree);
+  zero(this.bl_tree);
+
+  this.l_desc   = null;         /* desc. for literal tree */
+  this.d_desc   = null;         /* desc. for distance tree */
+  this.bl_desc  = null;         /* desc. for bit length tree */
+
+  //ush bl_count[MAX_BITS+1];
+  this.bl_count = new utils.Buf16(MAX_BITS+1);
+  /* number of codes at each bit length for an optimal tree */
+
+  //int heap[2*L_CODES+1];      /* heap used to build the Huffman trees */
+  this.heap = new utils.Buf16(2*L_CODES+1);  /* heap used to build the Huffman trees */
+  zero(this.heap);
+
+  this.heap_len = 0;               /* number of elements in the heap */
+  this.heap_max = 0;               /* element of largest frequency */
+  /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
+   * The same heap array is used to build all trees.
+   */
+
+  this.depth = new utils.Buf16(2*L_CODES+1); //uch depth[2*L_CODES+1];
+  zero(this.depth);
+  /* Depth of each subtree used as tie breaker for trees of equal frequency
+   */
+
+  this.l_buf = 0;          /* buffer index for literals or lengths */
+
+  this.lit_bufsize = 0;
+  /* Size of match buffer for literals/lengths.  There are 4 reasons for
+   * limiting lit_bufsize to 64K:
+   *   - frequencies can be kept in 16 bit counters
+   *   - if compression is not successful for the first block, all input
+   *     data is still in the window so we can still emit a stored block even
+   *     when input comes from standard input.  (This can also be done for
+   *     all blocks if lit_bufsize is not greater than 32K.)
+   *   - if compression is not successful for a file smaller than 64K, we can
+   *     even emit a stored file instead of a stored block (saving 5 bytes).
+   *     This is applicable only for zip (not gzip or zlib).
+   *   - creating new Huffman trees less frequently may not provide fast
+   *     adaptation to changes in the input data statistics. (Take for
+   *     example a binary file with poorly compressible code followed by
+   *     a highly compressible string table.) Smaller buffer sizes give
+   *     fast adaptation but have of course the overhead of transmitting
+   *     trees more frequently.
+   *   - I can't count above 4
+   */
+
+  this.last_lit = 0;      /* running index in l_buf */
+
+  this.d_buf = 0;
+  /* Buffer index for distances. To simplify the code, d_buf and l_buf have
+   * the same number of elements. To use different lengths, an extra flag
+   * array would be necessary.
+   */
+
+  this.opt_len = 0;       /* bit length of current block with optimal trees */
+  this.static_len = 0;    /* bit length of current block with static trees */
+  this.matches = 0;       /* number of string matches in current block */
+  this.insert = 0;        /* bytes at end of window left to insert */
+
+
+  this.bi_buf = 0;
+  /* Output buffer. bits are inserted starting at the bottom (least
+   * significant bits).
+   */
+  this.bi_valid = 0;
+  /* Number of valid bits in bi_buf.  All bits above the last valid bit
+   * are always zero.
+   */
+
+  // Used for window memory init. We safely ignore it for JS. That makes
+  // sense only for pointers and memory check tools.
+  //this.high_water = 0;
+  /* High water mark offset in window for initialized bytes -- bytes above
+   * this are set to zero in order to avoid memory check warnings when
+   * longest match routines access bytes past the input.  This is then
+   * updated to the new high water mark.
+   */
+}
+
+
+function deflateResetKeep(strm) {
+  var s;
+
+  if (!strm || !strm.state) {
+    return err(strm, Z_STREAM_ERROR);
+  }
+
+  strm.total_in = strm.total_out = 0;
+  strm.data_type = Z_UNKNOWN;
+
+  s = strm.state;
+  s.pending = 0;
+  s.pending_out = 0;
+
+  if (s.wrap < 0) {
+    s.wrap = -s.wrap;
+    /* was made negative by deflate(..., Z_FINISH); */
+  }
+  s.status = (s.wrap ? INIT_STATE : BUSY_STATE);
+  strm.adler = (s.wrap === 2) ?
+    0  // crc32(0, Z_NULL, 0)
+  :
+    1; // adler32(0, Z_NULL, 0)
+  s.last_flush = Z_NO_FLUSH;
+  trees._tr_init(s);
+  return Z_OK;
+}
+
+
+function deflateReset(strm) {
+  var ret = deflateResetKeep(strm);
+  if (ret === Z_OK) {
+    lm_init(strm.state);
+  }
+  return ret;
+}
+
+
+function deflateSetHeader(strm, head) {
+  if (!strm || !strm.state) { return Z_STREAM_ERROR; }
+  if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }
+  strm.state.gzhead = head;
+  return Z_OK;
+}
+
+
+function deflateInit2(strm, level, method, windowBits, memLevel, strategy) {
+  if (!strm) { // === Z_NULL
+    return Z_STREAM_ERROR;
+  }
+  var wrap = 1;
+
+  if (level === Z_DEFAULT_COMPRESSION) {
+    level = 6;
+  }
+
+  if (windowBits < 0) { /* suppress zlib wrapper */
+    wrap = 0;
+    windowBits = -windowBits;
+  }
+
+  else if (windowBits > 15) {
+    wrap = 2;           /* write gzip wrapper instead */
+    windowBits -= 16;
+  }
+
+
+  if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||
+    windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||
+    strategy < 0 || strategy > Z_FIXED) {
+    return err(strm, Z_STREAM_ERROR);
+  }
+
+
+  if (windowBits === 8) {
+    windowBits = 9;
+  }
+  /* until 256-byte window bug fixed */
+
+  var s = new DeflateState();
+
+  strm.state = s;
+  s.strm = strm;
+
+  s.wrap = wrap;
+  s.gzhead = null;
+  s.w_bits = windowBits;
+  s.w_size = 1 << s.w_bits;
+  s.w_mask = s.w_size - 1;
+
+  s.hash_bits = memLevel + 7;
+  s.hash_size = 1 << s.hash_bits;
+  s.hash_mask = s.hash_size - 1;
+  s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);
+
+  s.window = new utils.Buf8(s.w_size * 2);
+  s.head = new utils.Buf16(s.hash_size);
+  s.prev = new utils.Buf16(s.w_size);
+
+  // Don't need mem init magic for JS.
+  //s.high_water = 0;  /* nothing written to s->window yet */
+
+  s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */
+
+  s.pending_buf_size = s.lit_bufsize * 4;
+  s.pending_buf = new utils.Buf8(s.pending_buf_size);
+
+  s.d_buf = s.lit_bufsize >> 1;
+  s.l_buf = (1 + 2) * s.lit_bufsize;
+
+  s.level = level;
+  s.strategy = strategy;
+  s.method = method;
+
+  return deflateReset(strm);
+}
+
+function deflateInit(strm, level) {
+  return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);
+}
+
+
+function deflate(strm, flush) {
+  var old_flush, s;
+  var beg, val; // for gzip header write only
+
+  if (!strm || !strm.state ||
+    flush > Z_BLOCK || flush < 0) {
+    return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;
+  }
+
+  s = strm.state;
+
+  if (!strm.output ||
+      (!strm.input && strm.avail_in !== 0) ||
+      (s.status === FINISH_STATE && flush !== Z_FINISH)) {
+    return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);
+  }
+
+  s.strm = strm; /* just in case */
+  old_flush = s.last_flush;
+  s.last_flush = flush;
+
+  /* Write the header */
+  if (s.status === INIT_STATE) {
+
+    if (s.wrap === 2) { // GZIP header
+      strm.adler = 0;  //crc32(0L, Z_NULL, 0);
+      put_byte(s, 31);
+      put_byte(s, 139);
+      put_byte(s, 8);
+      if (!s.gzhead) { // s->gzhead == Z_NULL
+        put_byte(s, 0);
+        put_byte(s, 0);
+        put_byte(s, 0);
+        put_byte(s, 0);
+        put_byte(s, 0);
+        put_byte(s, s.level === 9 ? 2 :
+                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?
+                     4 : 0));
+        put_byte(s, OS_CODE);
+        s.status = BUSY_STATE;
+      }
+      else {
+        put_byte(s, (s.gzhead.text ? 1 : 0) +
+                    (s.gzhead.hcrc ? 2 : 0) +
+                    (!s.gzhead.extra ? 0 : 4) +
+                    (!s.gzhead.name ? 0 : 8) +
+                    (!s.gzhead.comment ? 0 : 16)
+                );
+        put_byte(s, s.gzhead.time & 0xff);
+        put_byte(s, (s.gzhead.time >> 8) & 0xff);
+        put_byte(s, (s.gzhead.time >> 16) & 0xff);
+        put_byte(s, (s.gzhead.time >> 24) & 0xff);
+        put_byte(s, s.level === 9 ? 2 :
+                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?
+                     4 : 0));
+        put_byte(s, s.gzhead.os & 0xff);
+        if (s.gzhead.extra && s.gzhead.extra.length) {
+          put_byte(s, s.gzhead.extra.length & 0xff);
+          put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);
+        }
+        if (s.gzhead.hcrc) {
+          strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);
+        }
+        s.gzindex = 0;
+        s.status = EXTRA_STATE;
+      }
+    }
+    else // DEFLATE header
+    {
+      var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;
+      var level_flags = -1;
+
+      if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {
+        level_flags = 0;
+      } else if (s.level < 6) {
+        level_flags = 1;
+      } else if (s.level === 6) {
+        level_flags = 2;
+      } else {
+        level_flags = 3;
+      }
+      header |= (level_flags << 6);
+      if (s.strstart !== 0) { header |= PRESET_DICT; }
+      header += 31 - (header % 31);
+
+      s.status = BUSY_STATE;
+      putShortMSB(s, header);
+
+      /* Save the adler32 of the preset dictionary: */
+      if (s.strstart !== 0) {
+        putShortMSB(s, strm.adler >>> 16);
+        putShortMSB(s, strm.adler & 0xffff);
+      }
+      strm.adler = 1; // adler32(0L, Z_NULL, 0);
+    }
+  }
+
+//#ifdef GZIP
+  if (s.status === EXTRA_STATE) {
+    if (s.gzhead.extra/* != Z_NULL*/) {
+      beg = s.pending;  /* start of bytes to update crc */
+
+      while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {
+        if (s.pending === s.pending_buf_size) {
+          if (s.gzhead.hcrc && s.pending > beg) {
+            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
+          }
+          flush_pending(strm);
+          beg = s.pending;
+          if (s.pending === s.pending_buf_size) {
+            break;
+          }
+        }
+        put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);
+        s.gzindex++;
+      }
+      if (s.gzhead.hcrc && s.pending > beg) {
+        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
+      }
+      if (s.gzindex === s.gzhead.extra.length) {
+        s.gzindex = 0;
+        s.status = NAME_STATE;
+      }
+    }
+    else {
+      s.status = NAME_STATE;
+    }
+  }
+  if (s.status === NAME_STATE) {
+    if (s.gzhead.name/* != Z_NULL*/) {
+      beg = s.pending;  /* start of bytes to update crc */
+      //int val;
+
+      do {
+        if (s.pending === s.pending_buf_size) {
+          if (s.gzhead.hcrc && s.pending > beg) {
+            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
+          }
+          flush_pending(strm);
+          beg = s.pending;
+          if (s.pending === s.pending_buf_size) {
+            val = 1;
+            break;
+          }
+        }
+        // JS specific: little magic to add zero terminator to end of string
+        if (s.gzindex < s.gzhead.name.length) {
+          val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;
+        } else {
+          val = 0;
+        }
+        put_byte(s, val);
+      } while (val !== 0);
+
+      if (s.gzhead.hcrc && s.pending > beg){
+        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
+      }
+      if (val === 0) {
+        s.gzindex = 0;
+        s.status = COMMENT_STATE;
+      }
+    }
+    else {
+      s.status = COMMENT_STATE;
+    }
+  }
+  if (s.status === COMMENT_STATE) {
+    if (s.gzhead.comment/* != Z_NULL*/) {
+      beg = s.pending;  /* start of bytes to update crc */
+      //int val;
+
+      do {
+        if (s.pending === s.pending_buf_size) {
+          if (s.gzhead.hcrc && s.pending > beg) {
+            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
+          }
+          flush_pending(strm);
+          beg = s.pending;
+          if (s.pending === s.pending_buf_size) {
+            val = 1;
+            break;
+          }
+        }
+        // JS specific: little magic to add zero terminator to end of string
+        if (s.gzindex < s.gzhead.comment.length) {
+          val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;
+        } else {
+          val = 0;
+        }
+        put_byte(s, val);
+      } while (val !== 0);
+
+      if (s.gzhead.hcrc && s.pending > beg) {
+        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
+      }
+      if (val === 0) {
+        s.status = HCRC_STATE;
+      }
+    }
+    else {
+      s.status = HCRC_STATE;
+    }
+  }
+  if (s.status === HCRC_STATE) {
+    if (s.gzhead.hcrc) {
+      if (s.pending + 2 > s.pending_buf_size) {
+        flush_pending(strm);
+      }
+      if (s.pending + 2 <= s.pending_buf_size) {
+        put_byte(s, strm.adler & 0xff);
+        put_byte(s, (strm.adler >> 8) & 0xff);
+        strm.adler = 0; //crc32(0L, Z_NULL, 0);
+        s.status = BUSY_STATE;
+      }
+    }
+    else {
+      s.status = BUSY_STATE;
+    }
+  }
+//#endif
+
+  /* Flush as much pending output as possible */
+  if (s.pending !== 0) {
+    flush_pending(strm);
+    if (strm.avail_out === 0) {
+      /* Since avail_out is 0, deflate will be called again with
+       * more output space, but possibly with both pending and
+       * avail_in equal to zero. There won't be anything to do,
+       * but this is not an error situation so make sure we
+       * return OK instead of BUF_ERROR at next call of deflate:
+       */
+      s.last_flush = -1;
+      return Z_OK;
+    }
+
+    /* Make sure there is something to do and avoid duplicate consecutive
+     * flushes. For repeated and useless calls with Z_FINISH, we keep
+     * returning Z_STREAM_END instead of Z_BUF_ERROR.
+     */
+  } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&
+    flush !== Z_FINISH) {
+    return err(strm, Z_BUF_ERROR);
+  }
+
+  /* User must not provide more input after the first FINISH: */
+  if (s.status === FINISH_STATE && strm.avail_in !== 0) {
+    return err(strm, Z_BUF_ERROR);
+  }
+
+  /* Start a new block or continue the current one.
+   */
+  if (strm.avail_in !== 0 || s.lookahead !== 0 ||
+    (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {
+    var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :
+      (s.strategy === Z_RLE ? deflate_rle(s, flush) :
+        configuration_table[s.level].func(s, flush));
+
+    if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {
+      s.status = FINISH_STATE;
+    }
+    if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {
+      if (strm.avail_out === 0) {
+        s.last_flush = -1;
+        /* avoid BUF_ERROR next call, see above */
+      }
+      return Z_OK;
+      /* If flush != Z_NO_FLUSH && avail_out == 0, the next call
+       * of deflate should use the same flush parameter to make sure
+       * that the flush is complete. So we don't have to output an
+       * empty block here, this will be done at next call. This also
+       * ensures that for a very small output buffer, we emit at most
+       * one empty block.
+       */
+    }
+    if (bstate === BS_BLOCK_DONE) {
+      if (flush === Z_PARTIAL_FLUSH) {
+        trees._tr_align(s);
+      }
+      else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */
+
+        trees._tr_stored_block(s, 0, 0, false);
+        /* For a full flush, this empty block will be recognized
+         * as a special marker by inflate_sync().
+         */
+        if (flush === Z_FULL_FLUSH) {
+          /*** CLEAR_HASH(s); ***/             /* forget history */
+          zero(s.head); // Fill with NIL (= 0);
+
+          if (s.lookahead === 0) {
+            s.strstart = 0;
+            s.block_start = 0;
+            s.insert = 0;
+          }
+        }
+      }
+      flush_pending(strm);
+      if (strm.avail_out === 0) {
+        s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */
+        return Z_OK;
+      }
+    }
+  }
+  //Assert(strm->avail_out > 0, "bug2");
+  //if (strm.avail_out <= 0) { throw new Error("bug2");}
+
+  if (flush !== Z_FINISH) { return Z_OK; }
+  if (s.wrap <= 0) { return Z_STREAM_END; }
+
+  /* Write the trailer */
+  if (s.wrap === 2) {
+    put_byte(s, strm.adler & 0xff);
+    put_byte(s, (strm.adler >> 8) & 0xff);
+    put_byte(s, (strm.adler >> 16) & 0xff);
+    put_byte(s, (strm.adler >> 24) & 0xff);
+    put_byte(s, strm.total_in & 0xff);
+    put_byte(s, (strm.total_in >> 8) & 0xff);
+    put_byte(s, (strm.total_in >> 16) & 0xff);
+    put_byte(s, (strm.total_in >> 24) & 0xff);
+  }
+  else
+  {
+    putShortMSB(s, strm.adler >>> 16);
+    putShortMSB(s, strm.adler & 0xffff);
+  }
+
+  flush_pending(strm);
+  /* If avail_out is zero, the application will call deflate again
+   * to flush the rest.
+   */
+  if (s.wrap > 0) { s.wrap = -s.wrap; }
+  /* write the trailer only once! */
+  return s.pending !== 0 ? Z_OK : Z_STREAM_END;
+}
+
+function deflateEnd(strm) {
+  var status;
+
+  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {
+    return Z_STREAM_ERROR;
+  }
+
+  status = strm.state.status;
+  if (status !== INIT_STATE &&
+    status !== EXTRA_STATE &&
+    status !== NAME_STATE &&
+    status !== COMMENT_STATE &&
+    status !== HCRC_STATE &&
+    status !== BUSY_STATE &&
+    status !== FINISH_STATE
+  ) {
+    return err(strm, Z_STREAM_ERROR);
+  }
+
+  strm.state = null;
+
+  return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;
+}
+
+/* =========================================================================
+ * Copy the source state to the destination state
+ */
+//function deflateCopy(dest, source) {
+//
+//}
+
+exports.deflateInit = deflateInit;
+exports.deflateInit2 = deflateInit2;
+exports.deflateReset = deflateReset;
+exports.deflateResetKeep = deflateResetKeep;
+exports.deflateSetHeader = deflateSetHeader;
+exports.deflate = deflate;
+exports.deflateEnd = deflateEnd;
+exports.deflateInfo = 'pako deflate (from Nodeca project)';
+
+/* Not implemented
+exports.deflateBound = deflateBound;
+exports.deflateCopy = deflateCopy;
+exports.deflateSetDictionary = deflateSetDictionary;
+exports.deflateParams = deflateParams;
+exports.deflatePending = deflatePending;
+exports.deflatePrime = deflatePrime;
+exports.deflateTune = deflateTune;
+*/
+},{"../utils/common":27,"./adler32":29,"./crc32":31,"./messages":37,"./trees":38}],33:[function(_dereq_,module,exports){
+'use strict';
+
+
+function GZheader() {
+  /* true if compressed data believed to be text */
+  this.text       = 0;
+  /* modification time */
+  this.time       = 0;
+  /* extra flags (not used when writing a gzip file) */
+  this.xflags     = 0;
+  /* operating system */
+  this.os         = 0;
+  /* pointer to extra field or Z_NULL if none */
+  this.extra      = null;
+  /* extra field length (valid if extra != Z_NULL) */
+  this.extra_len  = 0; // Actually, we don't need it in JS,
+                       // but leave for few code modifications
+
+  //
+  // Setup limits is not necessary because in js we should not preallocate memory
+  // for inflate use constant limit in 65536 bytes
+  //
+
+  /* space at extra (only when reading header) */
+  // this.extra_max  = 0;
+  /* pointer to zero-terminated file name or Z_NULL */
+  this.name       = '';
+  /* space at name (only when reading header) */
+  // this.name_max   = 0;
+  /* pointer to zero-terminated comment or Z_NULL */
+  this.comment    = '';
+  /* space at comment (only when reading header) */
+  // this.comm_max   = 0;
+  /* true if there was or will be a header crc */
+  this.hcrc       = 0;
+  /* true when done reading gzip header (not used when writing a gzip file) */
+  this.done       = false;
+}
+
+module.exports = GZheader;
+},{}],34:[function(_dereq_,module,exports){
+'use strict';
+
+// See state defs from inflate.js
+var BAD = 30;       /* got a data error -- remain here until reset */
+var TYPE = 12;      /* i: waiting for type bits, including last-flag bit */
+
+/*
+   Decode literal, length, and distance codes and write out the resulting
+   literal and match bytes until either not enough input or output is
+   available, an end-of-block is encountered, or a data error is encountered.
+   When large enough input and output buffers are supplied to inflate(), for
+   example, a 16K input buffer and a 64K output buffer, more than 95% of the
+   inflate execution time is spent in this routine.
+
+   Entry assumptions:
+
+        state.mode === LEN
+        strm.avail_in >= 6
+        strm.avail_out >= 258
+        start >= strm.avail_out
+        state.bits < 8
+
+   On return, state.mode is one of:
+
+        LEN -- ran out of enough output space or enough available input
+        TYPE -- reached end of block code, inflate() to interpret next block
+        BAD -- error in block data
+
+   Notes:
+
+    - The maximum input bits used by a length/distance pair is 15 bits for the
+      length code, 5 bits for the length extra, 15 bits for the distance code,
+      and 13 bits for the distance extra.  This totals 48 bits, or six bytes.
+      Therefore if strm.avail_in >= 6, then there is enough input to avoid
+      checking for available input while decoding.
+
+    - The maximum bytes that a single length/distance pair can output is 258
+      bytes, which is the maximum length that can be coded.  inflate_fast()
+      requires strm.avail_out >= 258 for each loop to avoid checking for
+      output space.
+ */
+module.exports = function inflate_fast(strm, start) {
+  var state;
+  var _in;                    /* local strm.input */
+  var last;                   /* have enough input while in < last */
+  var _out;                   /* local strm.output */
+  var beg;                    /* inflate()'s initial strm.output */
+  var end;                    /* while out < end, enough space available */
+//#ifdef INFLATE_STRICT
+  var dmax;                   /* maximum distance from zlib header */
+//#endif
+  var wsize;                  /* window size or zero if not using window */
+  var whave;                  /* valid bytes in the window */
+  var wnext;                  /* window write index */
+  var window;                 /* allocated sliding window, if wsize != 0 */
+  var hold;                   /* local strm.hold */
+  var bits;                   /* local strm.bits */
+  var lcode;                  /* local strm.lencode */
+  var dcode;                  /* local strm.distcode */
+  var lmask;                  /* mask for first level of length codes */
+  var dmask;                  /* mask for first level of distance codes */
+  var here;                   /* retrieved table entry */
+  var op;                     /* code bits, operation, extra bits, or */
+                              /*  window position, window bytes to copy */
+  var len;                    /* match length, unused bytes */
+  var dist;                   /* match distance */
+  var from;                   /* where to copy match from */
+  var from_source;
+
+
+  var input, output; // JS specific, because we have no pointers
+
+  /* copy state to local variables */
+  state = strm.state;
+  //here = state.here;
+  _in = strm.next_in;
+  input = strm.input;
+  last = _in + (strm.avail_in - 5);
+  _out = strm.next_out;
+  output = strm.output;
+  beg = _out - (start - strm.avail_out);
+  end = _out + (strm.avail_out - 257);
+//#ifdef INFLATE_STRICT
+  dmax = state.dmax;
+//#endif
+  wsize = state.wsize;
+  whave = state.whave;
+  wnext = state.wnext;
+  window = state.window;
+  hold = state.hold;
+  bits = state.bits;
+  lcode = state.lencode;
+  dcode = state.distcode;
+  lmask = (1 << state.lenbits) - 1;
+  dmask = (1 << state.distbits) - 1;
+
+
+  /* decode literals and length/distances until end-of-block or not enough
+     input data or output space */
+
+  top:
+  do {
+    if (bits < 15) {
+      hold += input[_in++] << bits;
+      bits += 8;
+      hold += input[_in++] << bits;
+      bits += 8;
+    }
+
+    here = lcode[hold & lmask];
+
+    dolen:
+    for (;;) { // Goto emulation
+      op = here >>> 24/*here.bits*/;
+      hold >>>= op;
+      bits -= op;
+      op = (here >>> 16) & 0xff/*here.op*/;
+      if (op === 0) {                          /* literal */
+        //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
+        //        "inflate:         literal '%c'\n" :
+        //        "inflate:         literal 0x%02x\n", here.val));
+        output[_out++] = here & 0xffff/*here.val*/;
+      }
+      else if (op & 16) {                     /* length base */
+        len = here & 0xffff/*here.val*/;
+        op &= 15;                           /* number of extra bits */
+        if (op) {
+          if (bits < op) {
+            hold += input[_in++] << bits;
+            bits += 8;
+          }
+          len += hold & ((1 << op) - 1);
+          hold >>>= op;
+          bits -= op;
+        }
+        //Tracevv((stderr, "inflate:         length %u\n", len));
+        if (bits < 15) {
+          hold += input[_in++] << bits;
+          bits += 8;
+          hold += input[_in++] << bits;
+          bits += 8;
+        }
+        here = dcode[hold & dmask];
+
+        dodist:
+        for (;;) { // goto emulation
+          op = here >>> 24/*here.bits*/;
+          hold >>>= op;
+          bits -= op;
+          op = (here >>> 16) & 0xff/*here.op*/;
+
+          if (op & 16) {                      /* distance base */
+            dist = here & 0xffff/*here.val*/;
+            op &= 15;                       /* number of extra bits */
+            if (bits < op) {
+              hold += input[_in++] << bits;
+              bits += 8;
+              if (bits < op) {
+                hold += input[_in++] << bits;
+                bits += 8;
+              }
+            }
+            dist += hold & ((1 << op) - 1);
+//#ifdef INFLATE_STRICT
+            if (dist > dmax) {
+              strm.msg = 'invalid distance too far back';
+              state.mode = BAD;
+              break top;
+            }
+//#endif
+            hold >>>= op;
+            bits -= op;
+            //Tracevv((stderr, "inflate:         distance %u\n", dist));
+            op = _out - beg;                /* max distance in output */
+            if (dist > op) {                /* see if copy from window */
+              op = dist - op;               /* distance back in window */
+              if (op > whave) {
+                if (state.sane) {
+                  strm.msg = 'invalid distance too far back';
+                  state.mode = BAD;
+                  break top;
+                }
+
+// (!) This block is disabled in zlib defailts,
+// don't enable it for binary compatibility
+//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
+//                if (len <= op - whave) {
+//                  do {
+//                    output[_out++] = 0;
+//                  } while (--len);
+//                  continue top;
+//                }
+//                len -= op - whave;
+//                do {
+//                  output[_out++] = 0;
+//                } while (--op > whave);
+//                if (op === 0) {
+//                  from = _out - dist;
+//                  do {
+//                    output[_out++] = output[from++];
+//                  } while (--len);
+//                  continue top;
+//                }
+//#endif
+              }
+              from = 0; // window index
+              from_source = window;
+              if (wnext === 0) {           /* very common case */
+                from += wsize - op;
+                if (op < len) {         /* some from window */
+                  len -= op;
+                  do {
+                    output[_out++] = window[from++];
+                  } while (--op);
+                  from = _out - dist;  /* rest from output */
+                  from_source = output;
+                }
+              }
+              else if (wnext < op) {      /* wrap around window */
+                from += wsize + wnext - op;
+                op -= wnext;
+                if (op < len) {         /* some from end of window */
+                  len -= op;
+                  do {
+                    output[_out++] = window[from++];
+                  } while (--op);
+                  from = 0;
+                  if (wnext < len) {  /* some from start of window */
+                    op = wnext;
+                    len -= op;
+                    do {
+                      output[_out++] = window[from++];
+                    } while (--op);
+                    from = _out - dist;      /* rest from output */
+                    from_source = output;
+                  }
+                }
+              }
+              else {                      /* contiguous in window */
+                from += wnext - op;
+                if (op < len) {         /* some from window */
+                  len -= op;
+                  do {
+                    output[_out++] = window[from++];
+                  } while (--op);
+                  from = _out - dist;  /* rest from output */
+                  from_source = output;
+                }
+              }
+              while (len > 2) {
+                output[_out++] = from_source[from++];
+                output[_out++] = from_source[from++];
+                output[_out++] = from_source[from++];
+                len -= 3;
+              }
+              if (len) {
+                output[_out++] = from_source[from++];
+                if (len > 1) {
+                  output[_out++] = from_source[from++];
+                }
+              }
+            }
+            else {
+              from = _out - dist;          /* copy direct from output */
+              do {                        /* minimum length is three */
+                output[_out++] = output[from++];
+                output[_out++] = output[from++];
+                output[_out++] = output[from++];
+                len -= 3;
+              } while (len > 2);
+              if (len) {
+                output[_out++] = output[from++];
+                if (len > 1) {
+                  output[_out++] = output[from++];
+                }
+              }
+            }
+          }
+          else if ((op & 64) === 0) {          /* 2nd level distance code */
+            here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];
+            continue dodist;
+          }
+          else {
+            strm.msg = 'invalid distance code';
+            state.mode = BAD;
+            break top;
+          }
+
+          break; // need to emulate goto via "continue"
+        }
+      }
+      else if ((op & 64) === 0) {              /* 2nd level length code */
+        here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];
+        continue dolen;
+      }
+      else if (op & 32) {                     /* end-of-block */
+        //Tracevv((stderr, "inflate:         end of block\n"));
+        state.mode = TYPE;
+        break top;
+      }
+      else {
+        strm.msg = 'invalid literal/length code';
+        state.mode = BAD;
+        break top;
+      }
+
+      break; // need to emulate goto via "continue"
+    }
+  } while (_in < last && _out < end);
+
+  /* return unused bytes (on entry, bits < 8, so in won't go too far back) */
+  len = bits >> 3;
+  _in -= len;
+  bits -= len << 3;
+  hold &= (1 << bits) - 1;
+
+  /* update state and return */
+  strm.next_in = _in;
+  strm.next_out = _out;
+  strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));
+  strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));
+  state.hold = hold;
+  state.bits = bits;
+  return;
+};
+
+},{}],35:[function(_dereq_,module,exports){
+'use strict';
+
+
+var utils = _dereq_('../utils/common');
+var adler32 = _dereq_('./adler32');
+var crc32   = _dereq_('./crc32');
+var inflate_fast = _dereq_('./inffast');
+var inflate_table = _dereq_('./inftrees');
+
+var CODES = 0;
+var LENS = 1;
+var DISTS = 2;
+
+/* Public constants ==========================================================*/
+/* ===========================================================================*/
+
+
+/* Allowed flush values; see deflate() and inflate() below for details */
+//var Z_NO_FLUSH      = 0;
+//var Z_PARTIAL_FLUSH = 1;
+//var Z_SYNC_FLUSH    = 2;
+//var Z_FULL_FLUSH    = 3;
+var Z_FINISH        = 4;
+var Z_BLOCK         = 5;
+var Z_TREES         = 6;
+
+
+/* Return codes for the compression/decompression functions. Negative values
+ * are errors, positive values are used for special but normal events.
+ */
+var Z_OK            = 0;
+var Z_STREAM_END    = 1;
+var Z_NEED_DICT     = 2;
+//var Z_ERRNO         = -1;
+var Z_STREAM_ERROR  = -2;
+var Z_DATA_ERROR    = -3;
+var Z_MEM_ERROR     = -4;
+var Z_BUF_ERROR     = -5;
+//var Z_VERSION_ERROR = -6;
+
+/* The deflate compression method */
+var Z_DEFLATED  = 8;
+
+
+/* STATES ====================================================================*/
+/* ===========================================================================*/
+
+
+var    HEAD = 1;       /* i: waiting for magic header */
+var    FLAGS = 2;      /* i: waiting for method and flags (gzip) */
+var    TIME = 3;       /* i: waiting for modification time (gzip) */
+var    OS = 4;         /* i: waiting for extra flags and operating system (gzip) */
+var    EXLEN = 5;      /* i: waiting for extra length (gzip) */
+var    EXTRA = 6;      /* i: waiting for extra bytes (gzip) */
+var    NAME = 7;       /* i: waiting for end of file name (gzip) */
+var    COMMENT = 8;    /* i: waiting for end of comment (gzip) */
+var    HCRC = 9;       /* i: waiting for header crc (gzip) */
+var    DICTID = 10;    /* i: waiting for dictionary check value */
+var    DICT = 11;      /* waiting for inflateSetDictionary() call */
+var        TYPE = 12;      /* i: waiting for type bits, including last-flag bit */
+var        TYPEDO = 13;    /* i: same, but skip check to exit inflate on new block */
+var        STORED = 14;    /* i: waiting for stored size (length and complement) */
+var        COPY_ = 15;     /* i/o: same as COPY below, but only first time in */
+var        COPY = 16;      /* i/o: waiting for input or output to copy stored block */
+var        TABLE = 17;     /* i: waiting for dynamic block table lengths */
+var        LENLENS = 18;   /* i: waiting for code length code lengths */
+var        CODELENS = 19;  /* i: waiting for length/lit and distance code lengths */
+var            LEN_ = 20;      /* i: same as LEN below, but only first time in */
+var            LEN = 21;       /* i: waiting for length/lit/eob code */
+var            LENEXT = 22;    /* i: waiting for length extra bits */
+var            DIST = 23;      /* i: waiting for distance code */
+var            DISTEXT = 24;   /* i: waiting for distance extra bits */
+var            MATCH = 25;     /* o: waiting for output space to copy string */
+var            LIT = 26;       /* o: waiting for output space to write literal */
+var    CHECK = 27;     /* i: waiting for 32-bit check value */
+var    LENGTH = 28;    /* i: waiting for 32-bit length (gzip) */
+var    DONE = 29;      /* finished check, done -- remain here until reset */
+var    BAD = 30;       /* got a data error -- remain here until reset */
+var    MEM = 31;       /* got an inflate() memory error -- remain here until reset */
+var    SYNC = 32;      /* looking for synchronization bytes to restart inflate() */
+
+/* ===========================================================================*/
+
+
+
+var ENOUGH_LENS = 852;
+var ENOUGH_DISTS = 592;
+//var ENOUGH =  (ENOUGH_LENS+ENOUGH_DISTS);
+
+var MAX_WBITS = 15;
+/* 32K LZ77 window */
+var DEF_WBITS = MAX_WBITS;
+
+
+function ZSWAP32(q) {
+  return  (((q >>> 24) & 0xff) +
+          ((q >>> 8) & 0xff00) +
+          ((q & 0xff00) << 8) +
+          ((q & 0xff) << 24));
+}
+
+
+function InflateState() {
+  this.mode = 0;             /* current inflate mode */
+  this.last = false;          /* true if processing last block */
+  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */
+  this.havedict = false;      /* true if dictionary provided */
+  this.flags = 0;             /* gzip header method and flags (0 if zlib) */
+  this.dmax = 0;              /* zlib header max distance (INFLATE_STRICT) */
+  this.check = 0;             /* protected copy of check value */
+  this.total = 0;             /* protected copy of output count */
+  // TODO: may be {}
+  this.head = null;           /* where to save gzip header information */
+
+  /* sliding window */
+  this.wbits = 0;             /* log base 2 of requested window size */
+  this.wsize = 0;             /* window size or zero if not using window */
+  this.whave = 0;             /* valid bytes in the window */
+  this.wnext = 0;             /* window write index */
+  this.window = null;         /* allocated sliding window, if needed */
+
+  /* bit accumulator */
+  this.hold = 0;              /* input bit accumulator */
+  this.bits = 0;              /* number of bits in "in" */
+
+  /* for string and stored block copying */
+  this.length = 0;            /* literal or length of data to copy */
+  this.offset = 0;            /* distance back to copy string from */
+
+  /* for table and code decoding */
+  this.extra = 0;             /* extra bits needed */
+
+  /* fixed and dynamic code tables */
+  this.lencode = null;          /* starting table for length/literal codes */
+  this.distcode = null;         /* starting table for distance codes */
+  this.lenbits = 0;           /* index bits for lencode */
+  this.distbits = 0;          /* index bits for distcode */
+
+  /* dynamic table building */
+  this.ncode = 0;             /* number of code length code lengths */
+  this.nlen = 0;              /* number of length code lengths */
+  this.ndist = 0;             /* number of distance code lengths */
+  this.have = 0;              /* number of code lengths in lens[] */
+  this.next = null;              /* next available space in codes[] */
+
+  this.lens = new utils.Buf16(320); /* temporary storage for code lengths */
+  this.work = new utils.Buf16(288); /* work area for code table building */
+
+  /*
+   because we don't have pointers in js, we use lencode and distcode directly
+   as buffers so we don't need codes
+  */
+  //this.codes = new utils.Buf32(ENOUGH);       /* space for code tables */
+  this.lendyn = null;              /* dynamic table for length/literal codes (JS specific) */
+  this.distdyn = null;             /* dynamic table for distance codes (JS specific) */
+  this.sane = 0;                   /* if false, allow invalid distance too far */
+  this.back = 0;                   /* bits back of last unprocessed length/lit */
+  this.was = 0;                    /* initial length of match */
+}
+
+function inflateResetKeep(strm) {
+  var state;
+
+  if (!strm || !strm.state) { return Z_STREAM_ERROR; }
+  state = strm.state;
+  strm.total_in = strm.total_out = state.total = 0;
+  strm.msg = ''; /*Z_NULL*/
+  if (state.wrap) {       /* to support ill-conceived Java test suite */
+    strm.adler = state.wrap & 1;
+  }
+  state.mode = HEAD;
+  state.last = 0;
+  state.havedict = 0;
+  state.dmax = 32768;
+  state.head = null/*Z_NULL*/;
+  state.hold = 0;
+  state.bits = 0;
+  //state.lencode = state.distcode = state.next = state.codes;
+  state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);
+  state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);
+
+  state.sane = 1;
+  state.back = -1;
+  //Tracev((stderr, "inflate: reset\n"));
+  return Z_OK;
+}
+
+function inflateReset(strm) {
+  var state;
+
+  if (!strm || !strm.state) { return Z_STREAM_ERROR; }
+  state = strm.state;
+  state.wsize = 0;
+  state.whave = 0;
+  state.wnext = 0;
+  return inflateResetKeep(strm);
+
+}
+
+function inflateReset2(strm, windowBits) {
+  var wrap;
+  var state;
+
+  /* get the state */
+  if (!strm || !strm.state) { return Z_STREAM_ERROR; }
+  state = strm.state;
+
+  /* extract wrap request from windowBits parameter */
+  if (windowBits < 0) {
+    wrap = 0;
+    windowBits = -windowBits;
+  }
+  else {
+    wrap = (windowBits >> 4) + 1;
+    if (windowBits < 48) {
+      windowBits &= 15;
+    }
+  }
+
+  /* set number of window bits, free window if different */
+  if (windowBits && (windowBits < 8 || windowBits > 15)) {
+    return Z_STREAM_ERROR;
+  }
+  if (state.window !== null && state.wbits !== windowBits) {
+    state.window = null;
+  }
+
+  /* update state and reset the rest of it */
+  state.wrap = wrap;
+  state.wbits = windowBits;
+  return inflateReset(strm);
+}
+
+function inflateInit2(strm, windowBits) {
+  var ret;
+  var state;
+
+  if (!strm) { return Z_STREAM_ERROR; }
+  //strm.msg = Z_NULL;                 /* in case we return an error */
+
+  state = new InflateState();
+
+  //if (state === Z_NULL) return Z_MEM_ERROR;
+  //Tracev((stderr, "inflate: allocated\n"));
+  strm.state = state;
+  state.window = null/*Z_NULL*/;
+  ret = inflateReset2(strm, windowBits);
+  if (ret !== Z_OK) {
+    strm.state = null/*Z_NULL*/;
+  }
+  return ret;
+}
+
+function inflateInit(strm) {
+  return inflateInit2(strm, DEF_WBITS);
+}
+
+
+/*
+ Return state with length and distance decoding tables and index sizes set to
+ fixed code decoding.  Normally this returns fixed tables from inffixed.h.
+ If BUILDFIXED is defined, then instead this routine builds the tables the
+ first time it's called, and returns those tables the first time and
+ thereafter.  This reduces the size of the code by about 2K bytes, in
+ exchange for a little execution time.  However, BUILDFIXED should not be
+ used for threaded applications, since the rewriting of the tables and virgin
+ may not be thread-safe.
+ */
+var virgin = true;
+
+var lenfix, distfix; // We have no pointers in JS, so keep tables separate
+
+function fixedtables(state) {
+  /* build fixed huffman tables if first call (may not be thread safe) */
+  if (virgin) {
+    var sym;
+
+    lenfix = new utils.Buf32(512);
+    distfix = new utils.Buf32(32);
+
+    /* literal/length table */
+    sym = 0;
+    while (sym < 144) { state.lens[sym++] = 8; }
+    while (sym < 256) { state.lens[sym++] = 9; }
+    while (sym < 280) { state.lens[sym++] = 7; }
+    while (sym < 288) { state.lens[sym++] = 8; }
+
+    inflate_table(LENS,  state.lens, 0, 288, lenfix,   0, state.work, {bits: 9});
+
+    /* distance table */
+    sym = 0;
+    while (sym < 32) { state.lens[sym++] = 5; }
+
+    inflate_table(DISTS, state.lens, 0, 32,   distfix, 0, state.work, {bits: 5});
+
+    /* do this just once */
+    virgin = false;
+  }
+
+  state.lencode = lenfix;
+  state.lenbits = 9;
+  state.distcode = distfix;
+  state.distbits = 5;
+}
+
+
+/*
+ Update the window with the last wsize (normally 32K) bytes written before
+ returning.  If window does not exist yet, create it.  This is only called
+ when a window is already in use, or when output has been written during this
+ inflate call, but the end of the deflate stream has not been reached yet.
+ It is also called to create a window for dictionary data when a dictionary
+ is loaded.
+
+ Providing output buffers larger than 32K to inflate() should provide a speed
+ advantage, since only the last 32K of output is copied to the sliding window
+ upon return from inflate(), and since all distances after the first 32K of
+ output will fall in the output data, making match copies simpler and faster.
+ The advantage may be dependent on the size of the processor's data caches.
+ */
+function updatewindow(strm, src, end, copy) {
+  var dist;
+  var state = strm.state;
+
+  /* if it hasn't been done already, allocate space for the window */
+  if (state.window === null) {
+    state.wsize = 1 << state.wbits;
+    state.wnext = 0;
+    state.whave = 0;
+
+    state.window = new utils.Buf8(state.wsize);
+  }
+
+  /* copy state->wsize or less output bytes into the circular window */
+  if (copy >= state.wsize) {
+    utils.arraySet(state.window,src, end - state.wsize, state.wsize, 0);
+    state.wnext = 0;
+    state.whave = state.wsize;
+  }
+  else {
+    dist = state.wsize - state.wnext;
+    if (dist > copy) {
+      dist = copy;
+    }
+    //zmemcpy(state->window + state->wnext, end - copy, dist);
+    utils.arraySet(state.window,src, end - copy, dist, state.wnext);
+    copy -= dist;
+    if (copy) {
+      //zmemcpy(state->window, end - copy, copy);
+      utils.arraySet(state.window,src, end - copy, copy, 0);
+      state.wnext = copy;
+      state.whave = state.wsize;
+    }
+    else {
+      state.wnext += dist;
+      if (state.wnext === state.wsize) { state.wnext = 0; }
+      if (state.whave < state.wsize) { state.whave += dist; }
+    }
+  }
+  return 0;
+}
+
+function inflate(strm, flush) {
+  var state;
+  var input, output;          // input/output buffers
+  var next;                   /* next input INDEX */
+  var put;                    /* next output INDEX */
+  var have, left;             /* available input and output */
+  var hold;                   /* bit buffer */
+  var bits;                   /* bits in bit buffer */
+  var _in, _out;              /* save starting available input and output */
+  var copy;                   /* number of stored or match bytes to copy */
+  var from;                   /* where to copy match bytes from */
+  var from_source;
+  var here = 0;               /* current decoding table entry */
+  var here_bits, here_op, here_val; // paked "here" denormalized (JS specific)
+  //var last;                   /* parent table entry */
+  var last_bits, last_op, last_val; // paked "last" denormalized (JS specific)
+  var len;                    /* length to copy for repeats, bits to drop */
+  var ret;                    /* return code */
+  var hbuf = new utils.Buf8(4);    /* buffer for gzip header crc calculation */
+  var opts;
+
+  var n; // temporary var for NEED_BITS
+
+  var order = /* permutation of code lengths */
+    [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];
+
+
+  if (!strm || !strm.state || !strm.output ||
+      (!strm.input && strm.avail_in !== 0)) {
+    return Z_STREAM_ERROR;
+  }
+
+  state = strm.state;
+  if (state.mode === TYPE) { state.mode = TYPEDO; }    /* skip check */
+
+
+  //--- LOAD() ---
+  put = strm.next_out;
+  output = strm.output;
+  left = strm.avail_out;
+  next = strm.next_in;
+  input = strm.input;
+  have = strm.avail_in;
+  hold = state.hold;
+  bits = state.bits;
+  //---
+
+  _in = have;
+  _out = left;
+  ret = Z_OK;
+
+  inf_leave: // goto emulation
+  for (;;) {
+    switch (state.mode) {
+    case HEAD:
+      if (state.wrap === 0) {
+        state.mode = TYPEDO;
+        break;
+      }
+      //=== NEEDBITS(16);
+      while (bits < 16) {
+        if (have === 0) { break inf_leave; }
+        have--;
+        hold += input[next++] << bits;
+        bits += 8;
+      }
+      //===//
+      if ((state.wrap & 2) && hold === 0x8b1f) {  /* gzip header */
+        state.check = 0/*crc32(0L, Z_NULL, 0)*/;
+        //=== CRC2(state.check, hold);
+        hbuf[0] = hold & 0xff;
+        hbuf[1] = (hold >>> 8) & 0xff;
+        state.check = crc32(state.check, hbuf, 2, 0);
+        //===//
+
+        //=== INITBITS();
+        hold = 0;
+        bits = 0;
+        //===//
+        state.mode = FLAGS;
+        break;
+      }
+      state.flags = 0;           /* expect zlib header */
+      if (state.head) {
+        state.head.done = false;
+      }
+      if (!(state.wrap & 1) ||   /* check if zlib header allowed */
+        (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {
+        strm.msg = 'incorrect header check';
+        state.mode = BAD;
+        break;
+      }
+      if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {
+        strm.msg = 'unknown compression method';
+        state.mode = BAD;
+        break;
+      }
+      //--- DROPBITS(4) ---//
+      hold >>>= 4;
+      bits -= 4;
+      //---//
+      len = (hold & 0x0f)/*BITS(4)*/ + 8;
+      if (state.wbits === 0) {
+        state.wbits = len;
+      }
+      else if (len > state.wbits) {
+        strm.msg = 'invalid window size';
+        state.mode = BAD;
+        break;
+      }
+      state.dmax = 1 << len;
+      //Tracev((stderr, "inflate:   zlib header ok\n"));
+      strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;
+      state.mode = hold & 0x200 ? DICTID : TYPE;
+      //=== INITBITS();
+      hold = 0;
+      bits = 0;
+      //===//
+      break;
+    case FLAGS:
+      //=== NEEDBITS(16); */
+      while (bits < 16) {
+        if (have === 0) { break inf_leave; }
+        have--;
+        hold += input[next++] << bits;
+        bits += 8;
+      }
+      //===//
+      state.flags = hold;
+      if ((state.flags & 0xff) !== Z_DEFLATED) {
+        strm.msg = 'unknown compression method';
+        state.mode = BAD;
+        break;
+      }
+      if (state.flags & 0xe000) {
+        strm.msg = 'unknown header flags set';
+        state.mode = BAD;
+        break;
+      }
+      if (state.head) {
+        state.head.text = ((hold >> 8) & 1);
+      }
+      if (state.flags & 0x0200) {
+        //=== CRC2(state.check, hold);
+        hbuf[0] = hold & 0xff;
+        hbuf[1] = (hold >>> 8) & 0xff;
+        state.check = crc32(state.check, hbuf, 2, 0);
+        //===//
+      }
+      //=== INITBITS();
+      hold = 0;
+      bits = 0;
+      //===//
+      state.mode = TIME;
+      /* falls through */
+    case TIME:
+      //=== NEEDBITS(32); */
+      while (bits < 32) {
+        if (have === 0) { break inf_leave; }
+        have--;
+        hold += input[next++] << bits;
+        bits += 8;
+      }
+      //===//
+      if (state.head) {
+        state.head.time = hold;
+      }
+      if (state.flags & 0x0200) {
+        //=== CRC4(state.check, hold)
+        hbuf[0] = hold & 0xff;
+        hbuf[1] = (hold >>> 8) & 0xff;
+        hbuf[2] = (hold >>> 16) & 0xff;
+        hbuf[3] = (hold >>> 24) & 0xff;
+        state.check = crc32(state.check, hbuf, 4, 0);
+        //===
+      }
+      //=== INITBITS();
+      hold = 0;
+      bits = 0;
+      //===//
+      state.mode = OS;
+      /* falls through */
+    case OS:
+      //=== NEEDBITS(16); */
+      while (bits < 16) {
+        if (have === 0) { break inf_leave; }
+        have--;
+        hold += input[next++] << bits;
+        bits += 8;
+      }
+      //===//
+      if (state.head) {
+        state.head.xflags = (hold & 0xff);
+        state.head.os = (hold >> 8);
+      }
+      if (state.flags & 0x0200) {
+        //=== CRC2(state.check, hold);
+        hbuf[0] = hold & 0xff;
+        hbuf[1] = (hold >>> 8) & 0xff;
+        state.check = crc32(state.check, hbuf, 2, 0);
+        //===//
+      }
+      //=== INITBITS();
+      hold = 0;
+      bits = 0;
+      //===//
+      state.mode = EXLEN;
+      /* falls through */
+    case EXLEN:
+      if (state.flags & 0x0400) {
+        //=== NEEDBITS(16); */
+        while (bits < 16) {
+          if (have === 0) { break inf_leave; }
+          have--;
+          hold += input[next++] << bits;
+          bits += 8;
+        }
+        //===//
+        state.length = hold;
+        if (state.head) {
+          state.head.extra_len = hold;
+        }
+        if (state.flags & 0x0200) {
+          //=== CRC2(state.check, hold);
+          hbuf[0] = hold & 0xff;
+          hbuf[1] = (hold >>> 8) & 0xff;
+          state.check = crc32(state.check, hbuf, 2, 0);
+          //===//
+        }
+        //=== INITBITS();
+        hold = 0;
+        bits = 0;
+        //===//
+      }
+      else if (state.head) {
+        state.head.extra = null/*Z_NULL*/;
+      }
+      state.mode = EXTRA;
+      /* falls through */
+    case EXTRA:
+      if (state.flags & 0x0400) {
+        copy = state.length;
+        if (copy > have) { copy = have; }
+        if (copy) {
+          if (state.head) {
+            len = state.head.extra_len - state.length;
+            if (!state.head.extra) {
+              // Use untyped array for more conveniend processing later
+              state.head.extra = new Array(state.head.extra_len);
+            }
+            utils.arraySet(
+              state.head.extra,
+              input,
+              next,
+              // extra field is limited to 65536 bytes
+              // - no need for additional size check
+              copy,
+              /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/
+              len
+            );
+            //zmemcpy(state.head.extra + len, next,
+            //        len + copy > state.head.extra_max ?
+            //        state.head.extra_max - len : copy);
+          }
+          if (state.flags & 0x0200) {
+            state.check = crc32(state.check, input, copy, next);
+          }
+          have -= copy;
+          next += copy;
+          state.length -= copy;
+        }
+        if (state.length) { break inf_leave; }
+      }
+      state.length = 0;
+      state.mode = NAME;
+      /* falls through */
+    case NAME:
+      if (state.flags & 0x0800) {
+        if (have === 0) { break inf_leave; }
+        copy = 0;
+        do {
+          // TODO: 2 or 1 bytes?
+          len = input[next + copy++];
+          /* use constant limit because in js we should not preallocate memory */
+          if (state.head && len &&
+              (state.length < 65536 /*state.head.name_max*/)) {
+            state.head.name += String.fromCharCode(len);
+          }
+        } while (len && copy < have);
+
+        if (state.flags & 0x0200) {
+          state.check = crc32(state.check, input, copy, next);
+        }
+        have -= copy;
+        next += copy;
+        if (len) { break inf_leave; }
+      }
+      else if (state.head) {
+        state.head.name = null;
+      }
+      state.length = 0;
+      state.mode = COMMENT;
+      /* falls through */
+    case COMMENT:
+      if (state.flags & 0x1000) {
+        if (have === 0) { break inf_leave; }
+        copy = 0;
+        do {
+          len = input[next + copy++];
+          /* use constant limit because in js we should not preallocate memory */
+          if (state.head && len &&
+              (state.length < 65536 /*state.head.comm_max*/)) {
+            state.head.comment += String.fromCharCode(len);
+          }
+        } while (len && copy < have);
+        if (state.flags & 0x0200) {
+          state.check = crc32(state.check, input, copy, next);
+        }
+        have -= copy;
+        next += copy;
+        if (len) { break inf_leave; }
+      }
+      else if (state.head) {
+        state.head.comment = null;
+      }
+      state.mode = HCRC;
+      /* falls through */
+    case HCRC:
+      if (state.flags & 0x0200) {
+        //=== NEEDBITS(16); */
+        while (bits < 16) {
+          if (have === 0) { break inf_leave; }
+          have--;
+          hold += input[next++] << bits;
+          bits += 8;
+        }
+        //===//
+        if (hold !== (state.check & 0xffff)) {
+          strm.msg = 'header crc mismatch';
+          state.mode = BAD;
+          break;
+        }
+        //=== INITBITS();
+        hold = 0;
+        bits = 0;
+        //===//
+      }
+      if (state.head) {
+        state.head.hcrc = ((state.flags >> 9) & 1);
+        state.head.done = true;
+      }
+      strm.adler = state.check = 0 /*crc32(0L, Z_NULL, 0)*/;
+      state.mode = TYPE;
+      break;
+    case DICTID:
+      //=== NEEDBITS(32); */
+      while (bits < 32) {
+        if (have === 0) { break inf_leave; }
+        have--;
+        hold += input[next++] << bits;
+        bits += 8;
+      }
+      //===//
+      strm.adler = state.check = ZSWAP32(hold);
+      //=== INITBITS();
+      hold = 0;
+      bits = 0;
+      //===//
+      state.mode = DICT;
+      /* falls through */
+    case DICT:
+      if (state.havedict === 0) {
+        //--- RESTORE() ---
+        strm.next_out = put;
+        strm.avail_out = left;
+        strm.next_in = next;
+        strm.avail_in = have;
+        state.hold = hold;
+        state.bits = bits;
+        //---
+        return Z_NEED_DICT;
+      }
+      strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;
+      state.mode = TYPE;
+      /* falls through */
+    case TYPE:
+      if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }
+      /* falls through */
+    case TYPEDO:
+      if (state.last) {
+        //--- BYTEBITS() ---//
+        hold >>>= bits & 7;
+        bits -= bits & 7;
+        //---//
+        state.mode = CHECK;
+        break;
+      }
+      //=== NEEDBITS(3); */
+      while (bits < 3) {
+        if (have === 0) { break inf_leave; }
+        have--;
+        hold += input[next++] << bits;
+        bits += 8;
+      }
+      //===//
+      state.last = (hold & 0x01)/*BITS(1)*/;
+      //--- DROPBITS(1) ---//
+      hold >>>= 1;
+      bits -= 1;
+      //---//
+
+      switch ((hold & 0x03)/*BITS(2)*/) {
+      case 0:                             /* stored block */
+        //Tracev((stderr, "inflate:     stored block%s\n",
+        //        state.last ? " (last)" : ""));
+        state.mode = STORED;
+        break;
+      case 1:                             /* fixed block */
+        fixedtables(state);
+        //Tracev((stderr, "inflate:     fixed codes block%s\n",
+        //        state.last ? " (last)" : ""));
+        state.mode = LEN_;             /* decode codes */
+        if (flush === Z_TREES) {
+          //--- DROPBITS(2) ---//
+          hold >>>= 2;
+          bits -= 2;
+          //---//
+          break inf_leave;
+        }
+        break;
+      case 2:                             /* dynamic block */
+        //Tracev((stderr, "inflate:     dynamic codes block%s\n",
+        //        state.last ? " (last)" : ""));
+        state.mode = TABLE;
+        break;
+      case 3:
+        strm.msg = 'invalid block type';
+        state.mode = BAD;
+      }
+      //--- DROPBITS(2) ---//
+      hold >>>= 2;
+      bits -= 2;
+      //---//
+      break;
+    case STORED:
+      //--- BYTEBITS() ---// /* go to byte boundary */
+      hold >>>= bits & 7;
+      bits -= bits & 7;
+      //---//
+      //=== NEEDBITS(32); */
+      while (bits < 32) {
+        if (have === 0) { break inf_leave; }
+        have--;
+        hold += input[next++] << bits;
+        bits += 8;
+      }
+      //===//
+      if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {
+        strm.msg = 'invalid stored block lengths';
+        state.mode = BAD;
+        break;
+      }
+      state.length = hold & 0xffff;
+      //Tracev((stderr, "inflate:       stored length %u\n",
+      //        state.length));
+      //=== INITBITS();
+      hold = 0;
+      bits = 0;
+      //===//
+      state.mode = COPY_;
+      if (flush === Z_TREES) { break inf_leave; }
+      /* falls through */
+    case COPY_:
+      state.mode = COPY;
+      /* falls through */
+    case COPY:
+      copy = state.length;
+      if (copy) {
+        if (copy > have) { copy = have; }
+        if (copy > left) { copy = left; }
+        if (copy === 0) { break inf_leave; }
+        //--- zmemcpy(put, next, copy); ---
+        utils.arraySet(output, input, next, copy, put);
+        //---//
+        have -= copy;
+        next += copy;
+        left -= copy;
+        put += copy;
+        state.length -= copy;
+        break;
+      }
+      //Tracev((stderr, "inflate:       stored end\n"));
+      state.mode = TYPE;
+      break;
+    case TABLE:
+      //=== NEEDBITS(14); */
+      while (bits < 14) {
+        if (have === 0) { break inf_leave; }
+        have--;
+        hold += input[next++] << bits;
+        bits += 8;
+      }
+      //===//
+      state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;
+      //--- DROPBITS(5) ---//
+      hold >>>= 5;
+      bits -= 5;
+      //---//
+      state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;
+      //--- DROPBITS(5) ---//
+      hold >>>= 5;
+      bits -= 5;
+      //---//
+      state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;
+      //--- DROPBITS(4) ---//
+      hold >>>= 4;
+      bits -= 4;
+      //---//
+//#ifndef PKZIP_BUG_WORKAROUND
+      if (state.nlen > 286 || state.ndist > 30) {
+        strm.msg = 'too many length or distance symbols';
+        state.mode = BAD;
+        break;
+      }
+//#endif
+      //Tracev((stderr, "inflate:       table sizes ok\n"));
+      state.have = 0;
+      state.mode = LENLENS;
+      /* falls through */
+    case LENLENS:
+      while (state.have < state.ncode) {
+        //=== NEEDBITS(3);
+        while (bits < 3) {
+          if (have === 0) { break inf_leave; }
+          have--;
+          hold += input[next++] << bits;
+          bits += 8;
+        }
+        //===//
+        state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);
+        //--- DROPBITS(3) ---//
+        hold >>>= 3;
+        bits -= 3;
+        //---//
+      }
+      while (state.have < 19) {
+        state.lens[order[state.have++]] = 0;
+      }
+      // We have separate tables & no pointers. 2 commented lines below not needed.
+      //state.next = state.codes;
+      //state.lencode = state.next;
+      // Switch to use dynamic table
+      state.lencode = state.lendyn;
+      state.lenbits = 7;
+
+      opts = {bits: state.lenbits};
+      ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);
+      state.lenbits = opts.bits;
+
+      if (ret) {
+        strm.msg = 'invalid code lengths set';
+        state.mode = BAD;
+        break;
+      }
+      //Tracev((stderr, "inflate:       code lengths ok\n"));
+      state.have = 0;
+      state.mode = CODELENS;
+      /* falls through */
+    case CODELENS:
+      while (state.have < state.nlen + state.ndist) {
+        for (;;) {
+          here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/
+          here_bits = here >>> 24;
+          here_op = (here >>> 16) & 0xff;
+          here_val = here & 0xffff;
+
+          if ((here_bits) <= bits) { break; }
+          //--- PULLBYTE() ---//
+          if (have === 0) { break inf_leave; }
+          have--;
+          hold += input[next++] << bits;
+          bits += 8;
+          //---//
+        }
+        if (here_val < 16) {
+          //--- DROPBITS(here.bits) ---//
+          hold >>>= here_bits;
+          bits -= here_bits;
+          //---//
+          state.lens[state.have++] = here_val;
+        }
+        else {
+          if (here_val === 16) {
+            //=== NEEDBITS(here.bits + 2);
+            n = here_bits + 2;
+            while (bits < n) {
+              if (have === 0) { break inf_leave; }
+              have--;
+              hold += input[next++] << bits;
+              bits += 8;
+            }
+            //===//
+            //--- DROPBITS(here.bits) ---//
+            hold >>>= here_bits;
+            bits -= here_bits;
+            //---//
+            if (state.have === 0) {
+              strm.msg = 'invalid bit length repeat';
+              state.mode = BAD;
+              break;
+            }
+            len = state.lens[state.have - 1];
+            copy = 3 + (hold & 0x03);//BITS(2);
+            //--- DROPBITS(2) ---//
+            hold >>>= 2;
+            bits -= 2;
+            //---//
+          }
+          else if (here_val === 17) {
+            //=== NEEDBITS(here.bits + 3);
+            n = here_bits + 3;
+            while (bits < n) {
+              if (have === 0) { break inf_leave; }
+              have--;
+              hold += input[next++] << bits;
+              bits += 8;
+            }
+            //===//
+            //--- DROPBITS(here.bits) ---//
+            hold >>>= here_bits;
+            bits -= here_bits;
+            //---//
+            len = 0;
+            copy = 3 + (hold & 0x07);//BITS(3);
+            //--- DROPBITS(3) ---//
+            hold >>>= 3;
+            bits -= 3;
+            //---//
+          }
+          else {
+            //=== NEEDBITS(here.bits + 7);
+            n = here_bits + 7;
+            while (bits < n) {
+              if (have === 0) { break inf_leave; }
+              have--;
+              hold += input[next++] << bits;
+              bits += 8;
+            }
+            //===//
+            //--- DROPBITS(here.bits) ---//
+            hold >>>= here_bits;
+            bits -= here_bits;
+            //---//
+            len = 0;
+            copy = 11 + (hold & 0x7f);//BITS(7);
+            //--- DROPBITS(7) ---//
+            hold >>>= 7;
+            bits -= 7;
+            //---//
+          }
+          if (state.have + copy > state.nlen + state.ndist) {
+            strm.msg = 'invalid bit length repeat';
+            state.mode = BAD;
+            break;
+          }
+          while (copy--) {
+            state.lens[state.have++] = len;
+          }
+        }
+      }
+
+      /* handle error breaks in while */
+      if (state.mode === BAD) { break; }
+
+      /* check for end-of-block code (better have one) */
+      if (state.lens[256] === 0) {
+        strm.msg = 'invalid code -- missing end-of-block';
+        state.mode = BAD;
+        break;
+      }
+
+      /* build code tables -- note: do not change the lenbits or distbits
+         values here (9 and 6) without reading the comments in inftrees.h
+         concerning the ENOUGH constants, which depend on those values */
+      state.lenbits = 9;
+
+      opts = {bits: state.lenbits};
+      ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);
+      // We have separate tables & no pointers. 2 commented lines below not needed.
+      // state.next_index = opts.table_index;
+      state.lenbits = opts.bits;
+      // state.lencode = state.next;
+
+      if (ret) {
+        strm.msg = 'invalid literal/lengths set';
+        state.mode = BAD;
+        break;
+      }
+
+      state.distbits = 6;
+      //state.distcode.copy(state.codes);
+      // Switch to use dynamic table
+      state.distcode = state.distdyn;
+      opts = {bits: state.distbits};
+      ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);
+      // We have separate tables & no pointers. 2 commented lines below not needed.
+      // state.next_index = opts.table_index;
+      state.distbits = opts.bits;
+      // state.distcode = state.next;
+
+      if (ret) {
+        strm.msg = 'invalid distances set';
+        state.mode = BAD;
+        break;
+      }
+      //Tracev((stderr, 'inflate:       codes ok\n'));
+      state.mode = LEN_;
+      if (flush === Z_TREES) { break inf_leave; }
+      /* falls through */
+    case LEN_:
+      state.mode = LEN;
+      /* falls through */
+    case LEN:
+      if (have >= 6 && left >= 258) {
+        //--- RESTORE() ---
+        strm.next_out = put;
+        strm.avail_out = left;
+        strm.next_in = next;
+        strm.avail_in = have;
+        state.hold = hold;
+        state.bits = bits;
+        //---
+        inflate_fast(strm, _out);
+        //--- LOAD() ---
+        put = strm.next_out;
+        output = strm.output;
+        left = strm.avail_out;
+        next = strm.next_in;
+        input = strm.input;
+        have = strm.avail_in;
+        hold = state.hold;
+        bits = state.bits;
+        //---
+
+        if (state.mode === TYPE) {
+          state.back = -1;
+        }
+        break;
+      }
+      state.back = 0;
+      for (;;) {
+        here = state.lencode[hold & ((1 << state.lenbits) -1)];  /*BITS(state.lenbits)*/
+        here_bits = here >>> 24;
+        here_op = (here >>> 16) & 0xff;
+        here_val = here & 0xffff;
+
+        if (here_bits <= bits) { break; }
+        //--- PULLBYTE() ---//
+        if (have === 0) { break inf_leave; }
+        have--;
+        hold += input[next++] << bits;
+        bits += 8;
+        //---//
+      }
+      if (here_op && (here_op & 0xf0) === 0) {
+        last_bits = here_bits;
+        last_op = here_op;
+        last_val = here_val;
+        for (;;) {
+          here = state.lencode[last_val +
+                  ((hold & ((1 << (last_bits + last_op)) -1))/*BITS(last.bits + last.op)*/ >> last_bits)];
+          here_bits = here >>> 24;
+          here_op = (here >>> 16) & 0xff;
+          here_val = here & 0xffff;
+
+          if ((last_bits + here_bits) <= bits) { break; }
+          //--- PULLBYTE() ---//
+          if (have === 0) { break inf_leave; }
+          have--;
+          hold += input[next++] << bits;
+          bits += 8;
+          //---//
+        }
+        //--- DROPBITS(last.bits) ---//
+        hold >>>= last_bits;
+        bits -= last_bits;
+        //---//
+        state.back += last_bits;
+      }
+      //--- DROPBITS(here.bits) ---//
+      hold >>>= here_bits;
+      bits -= here_bits;
+      //---//
+      state.back += here_bits;
+      state.length = here_val;
+      if (here_op === 0) {
+        //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
+        //        "inflate:         literal '%c'\n" :
+        //        "inflate:         literal 0x%02x\n", here.val));
+        state.mode = LIT;
+        break;
+      }
+      if (here_op & 32) {
+        //Tracevv((stderr, "inflate:         end of block\n"));
+        state.back = -1;
+        state.mode = TYPE;
+        break;
+      }
+      if (here_op & 64) {
+        strm.msg = 'invalid literal/length code';
+        state.mode = BAD;
+        break;
+      }
+      state.extra = here_op & 15;
+      state.mode = LENEXT;
+      /* falls through */
+    case LENEXT:
+      if (state.extra) {
+        //=== NEEDBITS(state.extra);
+        n = state.extra;
+        while (bits < n) {
+          if (have === 0) { break inf_leave; }
+          have--;
+          hold += input[next++] << bits;
+          bits += 8;
+        }
+        //===//
+        state.length += hold & ((1 << state.extra) -1)/*BITS(state.extra)*/;
+        //--- DROPBITS(state.extra) ---//
+        hold >>>= state.extra;
+        bits -= state.extra;
+        //---//
+        state.back += state.extra;
+      }
+      //Tracevv((stderr, "inflate:         length %u\n", state.length));
+      state.was = state.length;
+      state.mode = DIST;
+      /* falls through */
+    case DIST:
+      for (;;) {
+        here = state.distcode[hold & ((1 << state.distbits) -1)];/*BITS(state.distbits)*/
+        here_bits = here >>> 24;
+        here_op = (here >>> 16) & 0xff;
+        here_val = here & 0xffff;
+
+        if ((here_bits) <= bits) { break; }
+        //--- PULLBYTE() ---//
+        if (have === 0) { break inf_leave; }
+        have--;
+        hold += input[next++] << bits;
+        bits += 8;
+        //---//
+      }
+      if ((here_op & 0xf0) === 0) {
+        last_bits = here_bits;
+        last_op = here_op;
+        last_val = here_val;
+        for (;;) {
+          here = state.distcode[last_val +
+                  ((hold & ((1 << (last_bits + last_op)) -1))/*BITS(last.bits + last.op)*/ >> last_bits)];
+          here_bits = here >>> 24;
+          here_op = (here >>> 16) & 0xff;
+          here_val = here & 0xffff;
+
+          if ((last_bits + here_bits) <= bits) { break; }
+          //--- PULLBYTE() ---//
+          if (have === 0) { break inf_leave; }
+          have--;
+          hold += input[next++] << bits;
+          bits += 8;
+          //---//
+        }
+        //--- DROPBITS(last.bits) ---//
+        hold >>>= last_bits;
+        bits -= last_bits;
+        //---//
+        state.back += last_bits;
+      }
+      //--- DROPBITS(here.bits) ---//
+      hold >>>= here_bits;
+      bits -= here_bits;
+      //---//
+      state.back += here_bits;
+      if (here_op & 64) {
+        strm.msg = 'invalid distance code';
+        state.mode = BAD;
+        break;
+      }
+      state.offset = here_val;
+      state.extra = (here_op) & 15;
+      state.mode = DISTEXT;
+      /* falls through */
+    case DISTEXT:
+      if (state.extra) {
+        //=== NEEDBITS(state.extra);
+        n = state.extra;
+        while (bits < n) {
+          if (have === 0) { break inf_leave; }
+          have--;
+          hold += input[next++] << bits;
+          bits += 8;
+        }
+        //===//
+        state.offset += hold & ((1 << state.extra) -1)/*BITS(state.extra)*/;
+        //--- DROPBITS(state.extra) ---//
+        hold >>>= state.extra;
+        bits -= state.extra;
+        //---//
+        state.back += state.extra;
+      }
+//#ifdef INFLATE_STRICT
+      if (state.offset > state.dmax) {
+        strm.msg = 'invalid distance too far back';
+        state.mode = BAD;
+        break;
+      }
+//#endif
+      //Tracevv((stderr, "inflate:         distance %u\n", state.offset));
+      state.mode = MATCH;
+      /* falls through */
+    case MATCH:
+      if (left === 0) { break inf_leave; }
+      copy = _out - left;
+      if (state.offset > copy) {         /* copy from window */
+        copy = state.offset - copy;
+        if (copy > state.whave) {
+          if (state.sane) {
+            strm.msg = 'invalid distance too far back';
+            state.mode = BAD;
+            break;
+          }
+// (!) This block is disabled in zlib defailts,
+// don't enable it for binary compatibility
+//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
+//          Trace((stderr, "inflate.c too far\n"));
+//          copy -= state.whave;
+//          if (copy > state.length) { copy = state.length; }
+//          if (copy > left) { copy = left; }
+//          left -= copy;
+//          state.length -= copy;
+//          do {
+//            output[put++] = 0;
+//          } while (--copy);
+//          if (state.length === 0) { state.mode = LEN; }
+//          break;
+//#endif
+        }
+        if (copy > state.wnext) {
+          copy -= state.wnext;
+          from = state.wsize - copy;
+        }
+        else {
+          from = state.wnext - copy;
+        }
+        if (copy > state.length) { copy = state.length; }
+        from_source = state.window;
+      }
+      else {                              /* copy from output */
+        from_source = output;
+        from = put - state.offset;
+        copy = state.length;
+      }
+      if (copy > left) { copy = left; }
+      left -= copy;
+      state.length -= copy;
+      do {
+        output[put++] = from_source[from++];
+      } while (--copy);
+      if (state.length === 0) { state.mode = LEN; }
+      break;
+    case LIT:
+      if (left === 0) { break inf_leave; }
+      output[put++] = state.length;
+      left--;
+      state.mode = LEN;
+      break;
+    case CHECK:
+      if (state.wrap) {
+        //=== NEEDBITS(32);
+        while (bits < 32) {
+          if (have === 0) { break inf_leave; }
+          have--;
+          // Use '|' insdead of '+' to make sure that result is signed
+          hold |= input[next++] << bits;
+          bits += 8;
+        }
+        //===//
+        _out -= left;
+        strm.total_out += _out;
+        state.total += _out;
+        if (_out) {
+          strm.adler = state.check =
+              /*UPDATE(state.check, put - _out, _out);*/
+              (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));
+
+        }
+        _out = left;
+        // NB: crc32 stored as signed 32-bit int, ZSWAP32 returns signed too
+        if ((state.flags ? hold : ZSWAP32(hold)) !== state.check) {
+          strm.msg = 'incorrect data check';
+          state.mode = BAD;
+          break;
+        }
+        //=== INITBITS();
+        hold = 0;
+        bits = 0;
+        //===//
+        //Tracev((stderr, "inflate:   check matches trailer\n"));
+      }
+      state.mode = LENGTH;
+      /* falls through */
+    case LENGTH:
+      if (state.wrap && state.flags) {
+        //=== NEEDBITS(32);
+        while (bits < 32) {
+          if (have === 0) { break inf_leave; }
+          have--;
+          hold += input[next++] << bits;
+          bits += 8;
+        }
+        //===//
+        if (hold !== (state.total & 0xffffffff)) {
+          strm.msg = 'incorrect length check';
+          state.mode = BAD;
+          break;
+        }
+        //=== INITBITS();
+        hold = 0;
+        bits = 0;
+        //===//
+        //Tracev((stderr, "inflate:   length matches trailer\n"));
+      }
+      state.mode = DONE;
+      /* falls through */
+    case DONE:
+      ret = Z_STREAM_END;
+      break inf_leave;
+    case BAD:
+      ret = Z_DATA_ERROR;
+      break inf_leave;
+    case MEM:
+      return Z_MEM_ERROR;
+    case SYNC:
+      /* falls through */
+    default:
+      return Z_STREAM_ERROR;
+    }
+  }
+
+  // inf_leave <- here is real place for "goto inf_leave", emulated via "break inf_leave"
+
+  /*
+     Return from inflate(), updating the total counts and the check value.
+     If there was no progress during the inflate() call, return a buffer
+     error.  Call updatewindow() to create and/or update the window state.
+     Note: a memory error from inflate() is non-recoverable.
+   */
+
+  //--- RESTORE() ---
+  strm.next_out = put;
+  strm.avail_out = left;
+  strm.next_in = next;
+  strm.avail_in = have;
+  state.hold = hold;
+  state.bits = bits;
+  //---
+
+  if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&
+                      (state.mode < CHECK || flush !== Z_FINISH))) {
+    if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {
+      state.mode = MEM;
+      return Z_MEM_ERROR;
+    }
+  }
+  _in -= strm.avail_in;
+  _out -= strm.avail_out;
+  strm.total_in += _in;
+  strm.total_out += _out;
+  state.total += _out;
+  if (state.wrap && _out) {
+    strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/
+      (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));
+  }
+  strm.data_type = state.bits + (state.last ? 64 : 0) +
+                    (state.mode === TYPE ? 128 : 0) +
+                    (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);
+  if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {
+    ret = Z_BUF_ERROR;
+  }
+  return ret;
+}
+
+function inflateEnd(strm) {
+
+  if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {
+    return Z_STREAM_ERROR;
+  }
+
+  var state = strm.state;
+  if (state.window) {
+    state.window = null;
+  }
+  strm.state = null;
+  return Z_OK;
+}
+
+function inflateGetHeader(strm, head) {
+  var state;
+
+  /* check state */
+  if (!strm || !strm.state) { return Z_STREAM_ERROR; }
+  state = strm.state;
+  if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }
+
+  /* save header structure */
+  state.head = head;
+  head.done = false;
+  return Z_OK;
+}
+
+
+exports.inflateReset = inflateReset;
+exports.inflateReset2 = inflateReset2;
+exports.inflateResetKeep = inflateResetKeep;
+exports.inflateInit = inflateInit;
+exports.inflateInit2 = inflateInit2;
+exports.inflate = inflate;
+exports.inflateEnd = inflateEnd;
+exports.inflateGetHeader = inflateGetHeader;
+exports.inflateInfo = 'pako inflate (from Nodeca project)';
+
+/* Not implemented
+exports.inflateCopy = inflateCopy;
+exports.inflateGetDictionary = inflateGetDictionary;
+exports.inflateMark = inflateMark;
+exports.inflatePrime = inflatePrime;
+exports.inflateSetDictionary = inflateSetDictionary;
+exports.inflateSync = inflateSync;
+exports.inflateSyncPoint = inflateSyncPoint;
+exports.inflateUndermine = inflateUndermine;
+*/
+},{"../utils/common":27,"./adler32":29,"./crc32":31,"./inffast":34,"./inftrees":36}],36:[function(_dereq_,module,exports){
+'use strict';
+
+
+var utils = _dereq_('../utils/common');
+
+var MAXBITS = 15;
+var ENOUGH_LENS = 852;
+var ENOUGH_DISTS = 592;
+//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);
+
+var CODES = 0;
+var LENS = 1;
+var DISTS = 2;
+
+var lbase = [ /* Length codes 257..285 base */
+  3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
+  35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0
+];
+
+var lext = [ /* Length codes 257..285 extra */
+  16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
+  19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78
+];
+
+var dbase = [ /* Distance codes 0..29 base */
+  1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
+  257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
+  8193, 12289, 16385, 24577, 0, 0
+];
+
+var dext = [ /* Distance codes 0..29 extra */
+  16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,
+  23, 23, 24, 24, 25, 25, 26, 26, 27, 27,
+  28, 28, 29, 29, 64, 64
+];
+
+module.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)
+{
+  var bits = opts.bits;
+      //here = opts.here; /* table entry for duplication */
+
+  var len = 0;               /* a code's length in bits */
+  var sym = 0;               /* index of code symbols */
+  var min = 0, max = 0;          /* minimum and maximum code lengths */
+  var root = 0;              /* number of index bits for root table */
+  var curr = 0;              /* number of index bits for current table */
+  var drop = 0;              /* code bits to drop for sub-table */
+  var left = 0;                   /* number of prefix codes available */
+  var used = 0;              /* code entries in table used */
+  var huff = 0;              /* Huffman code */
+  var incr;              /* for incrementing code, index */
+  var fill;              /* index for replicating entries */
+  var low;               /* low bits for current root entry */
+  var mask;              /* mask for low root bits */
+  var next;             /* next available space in table */
+  var base = null;     /* base value table to use */
+  var base_index = 0;
+//  var shoextra;    /* extra bits table to use */
+  var end;                    /* use base and extra for symbol > end */
+  var count = new utils.Buf16(MAXBITS+1); //[MAXBITS+1];    /* number of codes of each length */
+  var offs = new utils.Buf16(MAXBITS+1); //[MAXBITS+1];     /* offsets in table for each length */
+  var extra = null;
+  var extra_index = 0;
+
+  var here_bits, here_op, here_val;
+
+  /*
+   Process a set of code lengths to create a canonical Huffman code.  The
+   code lengths are lens[0..codes-1].  Each length corresponds to the
+   symbols 0..codes-1.  The Huffman code is generated by first sorting the
+   symbols by length from short to long, and retaining the symbol order
+   for codes with equal lengths.  Then the code starts with all zero bits
+   for the first code of the shortest length, and the codes are integer
+   increments for the same length, and zeros are appended as the length
+   increases.  For the deflate format, these bits are stored backwards
+   from their more natural integer increment ordering, and so when the
+   decoding tables are built in the large loop below, the integer codes
+   are incremented backwards.
+
+   This routine assumes, but does not check, that all of the entries in
+   lens[] are in the range 0..MAXBITS.  The caller must assure this.
+   1..MAXBITS is interpreted as that code length.  zero means that that
+   symbol does not occur in this code.
+
+   The codes are sorted by computing a count of codes for each length,
+   creating from that a table of starting indices for each length in the
+   sorted table, and then entering the symbols in order in the sorted
+   table.  The sorted table is work[], with that space being provided by
+   the caller.
+
+   The length counts are used for other purposes as well, i.e. finding
+   the minimum and maximum length codes, determining if there are any
+   codes at all, checking for a valid set of lengths, and looking ahead
+   at length counts to determine sub-table sizes when building the
+   decoding tables.
+   */
+
+  /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */
+  for (len = 0; len <= MAXBITS; len++) {
+    count[len] = 0;
+  }
+  for (sym = 0; sym < codes; sym++) {
+    count[lens[lens_index + sym]]++;
+  }
+
+  /* bound code lengths, force root to be within code lengths */
+  root = bits;
+  for (max = MAXBITS; max >= 1; max--) {
+    if (count[max] !== 0) { break; }
+  }
+  if (root > max) {
+    root = max;
+  }
+  if (max === 0) {                     /* no symbols to code at all */
+    //table.op[opts.table_index] = 64;  //here.op = (var char)64;    /* invalid code marker */
+    //table.bits[opts.table_index] = 1;   //here.bits = (var char)1;
+    //table.val[opts.table_index++] = 0;   //here.val = (var short)0;
+    table[table_index++] = (1 << 24) | (64 << 16) | 0;
+
+
+    //table.op[opts.table_index] = 64;
+    //table.bits[opts.table_index] = 1;
+    //table.val[opts.table_index++] = 0;
+    table[table_index++] = (1 << 24) | (64 << 16) | 0;
+
+    opts.bits = 1;
+    return 0;     /* no symbols, but wait for decoding to report error */
+  }
+  for (min = 1; min < max; min++) {
+    if (count[min] !== 0) { break; }
+  }
+  if (root < min) {
+    root = min;
+  }
+
+  /* check for an over-subscribed or incomplete set of lengths */
+  left = 1;
+  for (len = 1; len <= MAXBITS; len++) {
+    left <<= 1;
+    left -= count[len];
+    if (left < 0) {
+      return -1;
+    }        /* over-subscribed */
+  }
+  if (left > 0 && (type === CODES || max !== 1)) {
+    return -1;                      /* incomplete set */
+  }
+
+  /* generate offsets into symbol table for each length for sorting */
+  offs[1] = 0;
+  for (len = 1; len < MAXBITS; len++) {
+    offs[len + 1] = offs[len] + count[len];
+  }
+
+  /* sort symbols by length, by symbol order within each length */
+  for (sym = 0; sym < codes; sym++) {
+    if (lens[lens_index + sym] !== 0) {
+      work[offs[lens[lens_index + sym]]++] = sym;
+    }
+  }
+
+  /*
+   Create and fill in decoding tables.  In this loop, the table being
+   filled is at next and has curr index bits.  The code being used is huff
+   with length len.  That code is converted to an index by dropping drop
+   bits off of the bottom.  For codes where len is less than drop + curr,
+   those top drop + curr - len bits are incremented through all values to
+   fill the table with replicated entries.
+
+   root is the number of index bits for the root table.  When len exceeds
+   root, sub-tables are created pointed to by the root entry with an index
+   of the low root bits of huff.  This is saved in low to check for when a
+   new sub-table should be started.  drop is zero when the root table is
+   being filled, and drop is root when sub-tables are being filled.
+
+   When a new sub-table is needed, it is necessary to look ahead in the
+   code lengths to determine what size sub-table is needed.  The length
+   counts are used for this, and so count[] is decremented as codes are
+   entered in the tables.
+
+   used keeps track of how many table entries have been allocated from the
+   provided *table space.  It is checked for LENS and DIST tables against
+   the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in
+   the initial root table size constants.  See the comments in inftrees.h
+   for more information.
+
+   sym increments through all symbols, and the loop terminates when
+   all codes of length max, i.e. all codes, have been processed.  This
+   routine permits incomplete codes, so another loop after this one fills
+   in the rest of the decoding tables with invalid code markers.
+   */
+
+  /* set up for code type */
+  // poor man optimization - use if-else instead of switch,
+  // to avoid deopts in old v8
+  if (type === CODES) {
+      base = extra = work;    /* dummy value--not used */
+      end = 19;
+  } else if (type === LENS) {
+      base = lbase;
+      base_index -= 257;
+      extra = lext;
+      extra_index -= 257;
+      end = 256;
+  } else {                    /* DISTS */
+      base = dbase;
+      extra = dext;
+      end = -1;
+  }
+
+  /* initialize opts for loop */
+  huff = 0;                   /* starting code */
+  sym = 0;                    /* starting code symbol */
+  len = min;                  /* starting code length */
+  next = table_index;              /* current table to fill in */
+  curr = root;                /* current table index bits */
+  drop = 0;                   /* current bits to drop from code for index */
+  low = -1;                   /* trigger new sub-table when len > root */
+  used = 1 << root;          /* use root table entries */
+  mask = used - 1;            /* mask for comparing low */
+
+  /* check available table space */
+  if ((type === LENS && used > ENOUGH_LENS) ||
+    (type === DISTS && used > ENOUGH_DISTS)) {
+    return 1;
+  }
+
+  var i=0;
+  /* process all codes and make table entries */
+  for (;;) {
+    i++;
+    /* create table entry */
+    here_bits = len - drop;
+    if (work[sym] < end) {
+      here_op = 0;
+      here_val = work[sym];
+    }
+    else if (work[sym] > end) {
+      here_op = extra[extra_index + work[sym]];
+      here_val = base[base_index + work[sym]];
+    }
+    else {
+      here_op = 32 + 64;         /* end of block */
+      here_val = 0;
+    }
+
+    /* replicate for those indices with low len bits equal to huff */
+    incr = 1 << (len - drop);
+    fill = 1 << curr;
+    min = fill;                 /* save offset to next table */
+    do {
+      fill -= incr;
+      table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;
+    } while (fill !== 0);
+
+    /* backwards increment the len-bit code huff */
+    incr = 1 << (len - 1);
+    while (huff & incr) {
+      incr >>= 1;
+    }
+    if (incr !== 0) {
+      huff &= incr - 1;
+      huff += incr;
+    } else {
+      huff = 0;
+    }
+
+    /* go to next symbol, update count, len */
+    sym++;
+    if (--count[len] === 0) {
+      if (len === max) { break; }
+      len = lens[lens_index + work[sym]];
+    }
+
+    /* create new sub-table if needed */
+    if (len > root && (huff & mask) !== low) {
+      /* if first time, transition to sub-tables */
+      if (drop === 0) {
+        drop = root;
+      }
+
+      /* increment past last table */
+      next += min;            /* here min is 1 << curr */
+
+      /* determine length of next table */
+      curr = len - drop;
+      left = 1 << curr;
+      while (curr + drop < max) {
+        left -= count[curr + drop];
+        if (left <= 0) { break; }
+        curr++;
+        left <<= 1;
+      }
+
+      /* check for enough space */
+      used += 1 << curr;
+      if ((type === LENS && used > ENOUGH_LENS) ||
+        (type === DISTS && used > ENOUGH_DISTS)) {
+        return 1;
+      }
+
+      /* point entry in root table to sub-table */
+      low = huff & mask;
+      /*table.op[low] = curr;
+      table.bits[low] = root;
+      table.val[low] = next - opts.table_index;*/
+      table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;
+    }
+  }
+
+  /* fill in remaining table entry if code is incomplete (guaranteed to have
+   at most one remaining entry, since if the code is incomplete, the
+   maximum code length that was allowed to get this far is one bit) */
+  if (huff !== 0) {
+    //table.op[next + huff] = 64;            /* invalid code marker */
+    //table.bits[next + huff] = len - drop;
+    //table.val[next + huff] = 0;
+    table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;
+  }
+
+  /* set return parameters */
+  //opts.table_index += used;
+  opts.bits = root;
+  return 0;
+};
+
+},{"../utils/common":27}],37:[function(_dereq_,module,exports){
+'use strict';
+
+module.exports = {
+  '2':    'need dictionary',     /* Z_NEED_DICT       2  */
+  '1':    'stream end',          /* Z_STREAM_END      1  */
+  '0':    '',                    /* Z_OK              0  */
+  '-1':   'file error',          /* Z_ERRNO         (-1) */
+  '-2':   'stream error',        /* Z_STREAM_ERROR  (-2) */
+  '-3':   'data error',          /* Z_DATA_ERROR    (-3) */
+  '-4':   'insufficient memory', /* Z_MEM_ERROR     (-4) */
+  '-5':   'buffer error',        /* Z_BUF_ERROR     (-5) */
+  '-6':   'incompatible version' /* Z_VERSION_ERROR (-6) */
+};
+},{}],38:[function(_dereq_,module,exports){
+'use strict';
+
+
+var utils = _dereq_('../utils/common');
+
+/* Public constants ==========================================================*/
+/* ===========================================================================*/
+
+
+//var Z_FILTERED          = 1;
+//var Z_HUFFMAN_ONLY      = 2;
+//var Z_RLE               = 3;
+var Z_FIXED               = 4;
+//var Z_DEFAULT_STRATEGY  = 0;
+
+/* Possible values of the data_type field (though see inflate()) */
+var Z_BINARY              = 0;
+var Z_TEXT                = 1;
+//var Z_ASCII             = 1; // = Z_TEXT
+var Z_UNKNOWN             = 2;
+
+/*============================================================================*/
+
+
+function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }
+
+// From zutil.h
+
+var STORED_BLOCK = 0;
+var STATIC_TREES = 1;
+var DYN_TREES    = 2;
+/* The three kinds of block type */
+
+var MIN_MATCH    = 3;
+var MAX_MATCH    = 258;
+/* The minimum and maximum match lengths */
+
+// From deflate.h
+/* ===========================================================================
+ * Internal compression state.
+ */
+
+var LENGTH_CODES  = 29;
+/* number of length codes, not counting the special END_BLOCK code */
+
+var LITERALS      = 256;
+/* number of literal bytes 0..255 */
+
+var L_CODES       = LITERALS + 1 + LENGTH_CODES;
+/* number of Literal or Length codes, including the END_BLOCK code */
+
+var D_CODES       = 30;
+/* number of distance codes */
+
+var BL_CODES      = 19;
+/* number of codes used to transfer the bit lengths */
+
+var HEAP_SIZE     = 2*L_CODES + 1;
+/* maximum heap size */
+
+var MAX_BITS      = 15;
+/* All codes must not exceed MAX_BITS bits */
+
+var Buf_size      = 16;
+/* size of bit buffer in bi_buf */
+
+
+/* ===========================================================================
+ * Constants
+ */
+
+var MAX_BL_BITS = 7;
+/* Bit length codes must not exceed MAX_BL_BITS bits */
+
+var END_BLOCK   = 256;
+/* end of block literal code */
+
+var REP_3_6     = 16;
+/* repeat previous bit length 3-6 times (2 bits of repeat count) */
+
+var REPZ_3_10   = 17;
+/* repeat a zero length 3-10 times  (3 bits of repeat count) */
+
+var REPZ_11_138 = 18;
+/* repeat a zero length 11-138 times  (7 bits of repeat count) */
+
+var extra_lbits =   /* extra bits for each length code */
+  [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];
+
+var extra_dbits =   /* extra bits for each distance code */
+  [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];
+
+var extra_blbits =  /* extra bits for each bit length code */
+  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];
+
+var bl_order =
+  [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];
+/* The lengths of the bit length codes are sent in order of decreasing
+ * probability, to avoid transmitting the lengths for unused bit length codes.
+ */
+
+/* ===========================================================================
+ * Local data. These are initialized only once.
+ */
+
+// We pre-fill arrays with 0 to avoid uninitialized gaps
+
+var DIST_CODE_LEN = 512; /* see definition of array dist_code below */
+
+// !!!! Use flat array insdead of structure, Freq = i*2, Len = i*2+1
+var static_ltree  = new Array((L_CODES+2) * 2);
+zero(static_ltree);
+/* The static literal tree. Since the bit lengths are imposed, there is no
+ * need for the L_CODES extra codes used during heap construction. However
+ * The codes 286 and 287 are needed to build a canonical tree (see _tr_init
+ * below).
+ */
+
+var static_dtree  = new Array(D_CODES * 2);
+zero(static_dtree);
+/* The static distance tree. (Actually a trivial tree since all codes use
+ * 5 bits.)
+ */
+
+var _dist_code    = new Array(DIST_CODE_LEN);
+zero(_dist_code);
+/* Distance codes. The first 256 values correspond to the distances
+ * 3 .. 258, the last 256 values correspond to the top 8 bits of
+ * the 15 bit distances.
+ */
+
+var _length_code  = new Array(MAX_MATCH-MIN_MATCH+1);
+zero(_length_code);
+/* length code for each normalized match length (0 == MIN_MATCH) */
+
+var base_length   = new Array(LENGTH_CODES);
+zero(base_length);
+/* First normalized length for each code (0 = MIN_MATCH) */
+
+var base_dist     = new Array(D_CODES);
+zero(base_dist);
+/* First normalized distance for each code (0 = distance of 1) */
+
+
+var StaticTreeDesc = function (static_tree, extra_bits, extra_base, elems, max_length) {
+
+  this.static_tree  = static_tree;  /* static tree or NULL */
+  this.extra_bits   = extra_bits;   /* extra bits for each code or NULL */
+  this.extra_base   = extra_base;   /* base index for extra_bits */
+  this.elems        = elems;        /* max number of elements in the tree */
+  this.max_length   = max_length;   /* max bit length for the codes */
+
+  // show if `static_tree` has data or dummy - needed for monomorphic objects
+  this.has_stree    = static_tree && static_tree.length;
+};
+
+
+var static_l_desc;
+var static_d_desc;
+var static_bl_desc;
+
+
+var TreeDesc = function(dyn_tree, stat_desc) {
+  this.dyn_tree = dyn_tree;     /* the dynamic tree */
+  this.max_code = 0;            /* largest code with non zero frequency */
+  this.stat_desc = stat_desc;   /* the corresponding static tree */
+};
+
+
+
+function d_code(dist) {
+  return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];
+}
+
+
+/* ===========================================================================
+ * Output a short LSB first on the stream.
+ * IN assertion: there is enough room in pendingBuf.
+ */
+function put_short (s, w) {
+//    put_byte(s, (uch)((w) & 0xff));
+//    put_byte(s, (uch)((ush)(w) >> 8));
+  s.pending_buf[s.pending++] = (w) & 0xff;
+  s.pending_buf[s.pending++] = (w >>> 8) & 0xff;
+}
+
+
+/* ===========================================================================
+ * Send a value on a given number of bits.
+ * IN assertion: length <= 16 and value fits in length bits.
+ */
+function send_bits(s, value, length) {
+  if (s.bi_valid > (Buf_size - length)) {
+    s.bi_buf |= (value << s.bi_valid) & 0xffff;
+    put_short(s, s.bi_buf);
+    s.bi_buf = value >> (Buf_size - s.bi_valid);
+    s.bi_valid += length - Buf_size;
+  } else {
+    s.bi_buf |= (value << s.bi_valid) & 0xffff;
+    s.bi_valid += length;
+  }
+}
+
+
+function send_code(s, c, tree) {
+  send_bits(s, tree[c*2]/*.Code*/, tree[c*2 + 1]/*.Len*/);
+}
+
+
+/* ===========================================================================
+ * Reverse the first len bits of a code, using straightforward code (a faster
+ * method would use a table)
+ * IN assertion: 1 <= len <= 15
+ */
+function bi_reverse(code, len) {
+  var res = 0;
+  do {
+    res |= code & 1;
+    code >>>= 1;
+    res <<= 1;
+  } while (--len > 0);
+  return res >>> 1;
+}
+
+
+/* ===========================================================================
+ * Flush the bit buffer, keeping at most 7 bits in it.
+ */
+function bi_flush(s) {
+  if (s.bi_valid === 16) {
+    put_short(s, s.bi_buf);
+    s.bi_buf = 0;
+    s.bi_valid = 0;
+
+  } else if (s.bi_valid >= 8) {
+    s.pending_buf[s.pending++] = s.bi_buf & 0xff;
+    s.bi_buf >>= 8;
+    s.bi_valid -= 8;
+  }
+}
+
+
+/* ===========================================================================
+ * Compute the optimal bit lengths for a tree and update the total bit length
+ * for the current block.
+ * IN assertion: the fields freq and dad are set, heap[heap_max] and
+ *    above are the tree nodes sorted by increasing frequency.
+ * OUT assertions: the field len is set to the optimal bit length, the
+ *     array bl_count contains the frequencies for each bit length.
+ *     The length opt_len is updated; static_len is also updated if stree is
+ *     not null.
+ */
+function gen_bitlen(s, desc)
+//    deflate_state *s;
+//    tree_desc *desc;    /* the tree descriptor */
+{
+  var tree            = desc.dyn_tree;
+  var max_code        = desc.max_code;
+  var stree           = desc.stat_desc.static_tree;
+  var has_stree       = desc.stat_desc.has_stree;
+  var extra           = desc.stat_desc.extra_bits;
+  var base            = desc.stat_desc.extra_base;
+  var max_length      = desc.stat_desc.max_length;
+  var h;              /* heap index */
+  var n, m;           /* iterate over the tree elements */
+  var bits;           /* bit length */
+  var xbits;          /* extra bits */
+  var f;              /* frequency */
+  var overflow = 0;   /* number of elements with bit length too large */
+
+  for (bits = 0; bits <= MAX_BITS; bits++) {
+    s.bl_count[bits] = 0;
+  }
+
+  /* In a first pass, compute the optimal bit lengths (which may
+   * overflow in the case of the bit length tree).
+   */
+  tree[s.heap[s.heap_max]*2 + 1]/*.Len*/ = 0; /* root of the heap */
+
+  for (h = s.heap_max+1; h < HEAP_SIZE; h++) {
+    n = s.heap[h];
+    bits = tree[tree[n*2 +1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;
+    if (bits > max_length) {
+      bits = max_length;
+      overflow++;
+    }
+    tree[n*2 + 1]/*.Len*/ = bits;
+    /* We overwrite tree[n].Dad which is no longer needed */
+
+    if (n > max_code) { continue; } /* not a leaf node */
+
+    s.bl_count[bits]++;
+    xbits = 0;
+    if (n >= base) {
+      xbits = extra[n-base];
+    }
+    f = tree[n * 2]/*.Freq*/;
+    s.opt_len += f * (bits + xbits);
+    if (has_stree) {
+      s.static_len += f * (stree[n*2 + 1]/*.Len*/ + xbits);
+    }
+  }
+  if (overflow === 0) { return; }
+
+  // Trace((stderr,"\nbit length overflow\n"));
+  /* This happens for example on obj2 and pic of the Calgary corpus */
+
+  /* Find the first bit length which could increase: */
+  do {
+    bits = max_length-1;
+    while (s.bl_count[bits] === 0) { bits--; }
+    s.bl_count[bits]--;      /* move one leaf down the tree */
+    s.bl_count[bits+1] += 2; /* move one overflow item as its brother */
+    s.bl_count[max_length]--;
+    /* The brother of the overflow item also moves one step up,
+     * but this does not affect bl_count[max_length]
+     */
+    overflow -= 2;
+  } while (overflow > 0);
+
+  /* Now recompute all bit lengths, scanning in increasing frequency.
+   * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all
+   * lengths instead of fixing only the wrong ones. This idea is taken
+   * from 'ar' written by Haruhiko Okumura.)
+   */
+  for (bits = max_length; bits !== 0; bits--) {
+    n = s.bl_count[bits];
+    while (n !== 0) {
+      m = s.heap[--h];
+      if (m > max_code) { continue; }
+      if (tree[m*2 + 1]/*.Len*/ !== bits) {
+        // Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits));
+        s.opt_len += (bits - tree[m*2 + 1]/*.Len*/)*tree[m*2]/*.Freq*/;
+        tree[m*2 + 1]/*.Len*/ = bits;
+      }
+      n--;
+    }
+  }
+}
+
+
+/* ===========================================================================
+ * Generate the codes for a given tree and bit counts (which need not be
+ * optimal).
+ * IN assertion: the array bl_count contains the bit length statistics for
+ * the given tree and the field len is set for all tree elements.
+ * OUT assertion: the field code is set for all tree elements of non
+ *     zero code length.
+ */
+function gen_codes(tree, max_code, bl_count)
+//    ct_data *tree;             /* the tree to decorate */
+//    int max_code;              /* largest code with non zero frequency */
+//    ushf *bl_count;            /* number of codes at each bit length */
+{
+  var next_code = new Array(MAX_BITS+1); /* next code value for each bit length */
+  var code = 0;              /* running code value */
+  var bits;                  /* bit index */
+  var n;                     /* code index */
+
+  /* The distribution counts are first used to generate the code values
+   * without bit reversal.
+   */
+  for (bits = 1; bits <= MAX_BITS; bits++) {
+    next_code[bits] = code = (code + bl_count[bits-1]) << 1;
+  }
+  /* Check that the bit counts in bl_count are consistent. The last code
+   * must be all ones.
+   */
+  //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,
+  //        "inconsistent bit counts");
+  //Tracev((stderr,"\ngen_codes: max_code %d ", max_code));
+
+  for (n = 0;  n <= max_code; n++) {
+    var len = tree[n*2 + 1]/*.Len*/;
+    if (len === 0) { continue; }
+    /* Now reverse the bits */
+    tree[n*2]/*.Code*/ = bi_reverse(next_code[len]++, len);
+
+    //Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ",
+    //     n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));
+  }
+}
+
+
+/* ===========================================================================
+ * Initialize the various 'constant' tables.
+ */
+function tr_static_init() {
+  var n;        /* iterates over tree elements */
+  var bits;     /* bit counter */
+  var length;   /* length value */
+  var code;     /* code value */
+  var dist;     /* distance index */
+  var bl_count = new Array(MAX_BITS+1);
+  /* number of codes at each bit length for an optimal tree */
+
+  // do check in _tr_init()
+  //if (static_init_done) return;
+
+  /* For some embedded targets, global variables are not initialized: */
+/*#ifdef NO_INIT_GLOBAL_POINTERS
+  static_l_desc.static_tree = static_ltree;
+  static_l_desc.extra_bits = extra_lbits;
+  static_d_desc.static_tree = static_dtree;
+  static_d_desc.extra_bits = extra_dbits;
+  static_bl_desc.extra_bits = extra_blbits;
+#endif*/
+
+  /* Initialize the mapping length (0..255) -> length code (0..28) */
+  length = 0;
+  for (code = 0; code < LENGTH_CODES-1; code++) {
+    base_length[code] = length;
+    for (n = 0; n < (1<<extra_lbits[code]); n++) {
+      _length_code[length++] = code;
+    }
+  }
+  //Assert (length == 256, "tr_static_init: length != 256");
+  /* Note that the length 255 (match length 258) can be represented
+   * in two different ways: code 284 + 5 bits or code 285, so we
+   * overwrite length_code[255] to use the best encoding:
+   */
+  _length_code[length-1] = code;
+
+  /* Initialize the mapping dist (0..32K) -> dist code (0..29) */
+  dist = 0;
+  for (code = 0 ; code < 16; code++) {
+    base_dist[code] = dist;
+    for (n = 0; n < (1<<extra_dbits[code]); n++) {
+      _dist_code[dist++] = code;
+    }
+  }
+  //Assert (dist == 256, "tr_static_init: dist != 256");
+  dist >>= 7; /* from now on, all distances are divided by 128 */
+  for ( ; code < D_CODES; code++) {
+    base_dist[code] = dist << 7;
+    for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) {
+      _dist_code[256 + dist++] = code;
+    }
+  }
+  //Assert (dist == 256, "tr_static_init: 256+dist != 512");
+
+  /* Construct the codes of the static literal tree */
+  for (bits = 0; bits <= MAX_BITS; bits++) {
+    bl_count[bits] = 0;
+  }
+
+  n = 0;
+  while (n <= 143) {
+    static_ltree[n*2 + 1]/*.Len*/ = 8;
+    n++;
+    bl_count[8]++;
+  }
+  while (n <= 255) {
+    static_ltree[n*2 + 1]/*.Len*/ = 9;
+    n++;
+    bl_count[9]++;
+  }
+  while (n <= 279) {
+    static_ltree[n*2 + 1]/*.Len*/ = 7;
+    n++;
+    bl_count[7]++;
+  }
+  while (n <= 287) {
+    static_ltree[n*2 + 1]/*.Len*/ = 8;
+    n++;
+    bl_count[8]++;
+  }
+  /* Codes 286 and 287 do not exist, but we must include them in the
+   * tree construction to get a canonical Huffman tree (longest code
+   * all ones)
+   */
+  gen_codes(static_ltree, L_CODES+1, bl_count);
+
+  /* The static distance tree is trivial: */
+  for (n = 0; n < D_CODES; n++) {
+    static_dtree[n*2 + 1]/*.Len*/ = 5;
+    static_dtree[n*2]/*.Code*/ = bi_reverse(n, 5);
+  }
+
+  // Now data ready and we can init static trees
+  static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS);
+  static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0,          D_CODES, MAX_BITS);
+  static_bl_desc =new StaticTreeDesc(new Array(0), extra_blbits, 0,         BL_CODES, MAX_BL_BITS);
+
+  //static_init_done = true;
+}
+
+
+/* ===========================================================================
+ * Initialize a new block.
+ */
+function init_block(s) {
+  var n; /* iterates over tree elements */
+
+  /* Initialize the trees. */
+  for (n = 0; n < L_CODES;  n++) { s.dyn_ltree[n*2]/*.Freq*/ = 0; }
+  for (n = 0; n < D_CODES;  n++) { s.dyn_dtree[n*2]/*.Freq*/ = 0; }
+  for (n = 0; n < BL_CODES; n++) { s.bl_tree[n*2]/*.Freq*/ = 0; }
+
+  s.dyn_ltree[END_BLOCK*2]/*.Freq*/ = 1;
+  s.opt_len = s.static_len = 0;
+  s.last_lit = s.matches = 0;
+}
+
+
+/* ===========================================================================
+ * Flush the bit buffer and align the output on a byte boundary
+ */
+function bi_windup(s)
+{
+  if (s.bi_valid > 8) {
+    put_short(s, s.bi_buf);
+  } else if (s.bi_valid > 0) {
+    //put_byte(s, (Byte)s->bi_buf);
+    s.pending_buf[s.pending++] = s.bi_buf;
+  }
+  s.bi_buf = 0;
+  s.bi_valid = 0;
+}
+
+/* ===========================================================================
+ * Copy a stored block, storing first the length and its
+ * one's complement if requested.
+ */
+function copy_block(s, buf, len, header)
+//DeflateState *s;
+//charf    *buf;    /* the input data */
+//unsigned len;     /* its length */
+//int      header;  /* true if block header must be written */
+{
+  bi_windup(s);        /* align on byte boundary */
+
+  if (header) {
+    put_short(s, len);
+    put_short(s, ~len);
+  }
+//  while (len--) {
+//    put_byte(s, *buf++);
+//  }
+  utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);
+  s.pending += len;
+}
+
+/* ===========================================================================
+ * Compares to subtrees, using the tree depth as tie breaker when
+ * the subtrees have equal frequency. This minimizes the worst case length.
+ */
+function smaller(tree, n, m, depth) {
+  var _n2 = n*2;
+  var _m2 = m*2;
+  return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||
+         (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));
+}
+
+/* ===========================================================================
+ * Restore the heap property by moving down the tree starting at node k,
+ * exchanging a node with the smallest of its two sons if necessary, stopping
+ * when the heap property is re-established (each father smaller than its
+ * two sons).
+ */
+function pqdownheap(s, tree, k)
+//    deflate_state *s;
+//    ct_data *tree;  /* the tree to restore */
+//    int k;               /* node to move down */
+{
+  var v = s.heap[k];
+  var j = k << 1;  /* left son of k */
+  while (j <= s.heap_len) {
+    /* Set j to the smallest of the two sons: */
+    if (j < s.heap_len &&
+      smaller(tree, s.heap[j+1], s.heap[j], s.depth)) {
+      j++;
+    }
+    /* Exit if v is smaller than both sons */
+    if (smaller(tree, v, s.heap[j], s.depth)) { break; }
+
+    /* Exchange v with the smallest son */
+    s.heap[k] = s.heap[j];
+    k = j;
+
+    /* And continue down the tree, setting j to the left son of k */
+    j <<= 1;
+  }
+  s.heap[k] = v;
+}
+
+
+// inlined manually
+// var SMALLEST = 1;
+
+/* ===========================================================================
+ * Send the block data compressed using the given Huffman trees
+ */
+function compress_block(s, ltree, dtree)
+//    deflate_state *s;
+//    const ct_data *ltree; /* literal tree */
+//    const ct_data *dtree; /* distance tree */
+{
+  var dist;           /* distance of matched string */
+  var lc;             /* match length or unmatched char (if dist == 0) */
+  var lx = 0;         /* running index in l_buf */
+  var code;           /* the code to send */
+  var extra;          /* number of extra bits to send */
+
+  if (s.last_lit !== 0) {
+    do {
+      dist = (s.pending_buf[s.d_buf + lx*2] << 8) | (s.pending_buf[s.d_buf + lx*2 + 1]);
+      lc = s.pending_buf[s.l_buf + lx];
+      lx++;
+
+      if (dist === 0) {
+        send_code(s, lc, ltree); /* send a literal byte */
+        //Tracecv(isgraph(lc), (stderr," '%c' ", lc));
+      } else {
+        /* Here, lc is the match length - MIN_MATCH */
+        code = _length_code[lc];
+        send_code(s, code+LITERALS+1, ltree); /* send the length code */
+        extra = extra_lbits[code];
+        if (extra !== 0) {
+          lc -= base_length[code];
+          send_bits(s, lc, extra);       /* send the extra length bits */
+        }
+        dist--; /* dist is now the match distance - 1 */
+        code = d_code(dist);
+        //Assert (code < D_CODES, "bad d_code");
+
+        send_code(s, code, dtree);       /* send the distance code */
+        extra = extra_dbits[code];
+        if (extra !== 0) {
+          dist -= base_dist[code];
+          send_bits(s, dist, extra);   /* send the extra distance bits */
+        }
+      } /* literal or match pair ? */
+
+      /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
+      //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,
+      //       "pendingBuf overflow");
+
+    } while (lx < s.last_lit);
+  }
+
+  send_code(s, END_BLOCK, ltree);
+}
+
+
+/* ===========================================================================
+ * Construct one Huffman tree and assigns the code bit strings and lengths.
+ * Update the total bit length for the current block.
+ * IN assertion: the field freq is set for all tree elements.
+ * OUT assertions: the fields len and code are set to the optimal bit length
+ *     and corresponding code. The length opt_len is updated; static_len is
+ *     also updated if stree is not null. The field max_code is set.
+ */
+function build_tree(s, desc)
+//    deflate_state *s;
+//    tree_desc *desc; /* the tree descriptor */
+{
+  var tree     = desc.dyn_tree;
+  var stree    = desc.stat_desc.static_tree;
+  var has_stree = desc.stat_desc.has_stree;
+  var elems    = desc.stat_desc.elems;
+  var n, m;          /* iterate over heap elements */
+  var max_code = -1; /* largest code with non zero frequency */
+  var node;          /* new node being created */
+
+  /* Construct the initial heap, with least frequent element in
+   * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
+   * heap[0] is not used.
+   */
+  s.heap_len = 0;
+  s.heap_max = HEAP_SIZE;
+
+  for (n = 0; n < elems; n++) {
+    if (tree[n * 2]/*.Freq*/ !== 0) {
+      s.heap[++s.heap_len] = max_code = n;
+      s.depth[n] = 0;
+
+    } else {
+      tree[n*2 + 1]/*.Len*/ = 0;
+    }
+  }
+
+  /* The pkzip format requires that at least one distance code exists,
+   * and that at least one bit should be sent even if there is only one
+   * possible code. So to avoid special checks later on we force at least
+   * two codes of non zero frequency.
+   */
+  while (s.heap_len < 2) {
+    node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);
+    tree[node * 2]/*.Freq*/ = 1;
+    s.depth[node] = 0;
+    s.opt_len--;
+
+    if (has_stree) {
+      s.static_len -= stree[node*2 + 1]/*.Len*/;
+    }
+    /* node is 0 or 1 so it does not have extra bits */
+  }
+  desc.max_code = max_code;
+
+  /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,
+   * establish sub-heaps of increasing lengths:
+   */
+  for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }
+
+  /* Construct the Huffman tree by repeatedly combining the least two
+   * frequent nodes.
+   */
+  node = elems;              /* next internal node of the tree */
+  do {
+    //pqremove(s, tree, n);  /* n = node of least frequency */
+    /*** pqremove ***/
+    n = s.heap[1/*SMALLEST*/];
+    s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];
+    pqdownheap(s, tree, 1/*SMALLEST*/);
+    /***/
+
+    m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */
+
+    s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */
+    s.heap[--s.heap_max] = m;
+
+    /* Create a new node father of n and m */
+    tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;
+    s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;
+    tree[n*2 + 1]/*.Dad*/ = tree[m*2 + 1]/*.Dad*/ = node;
+
+    /* and insert the new node in the heap */
+    s.heap[1/*SMALLEST*/] = node++;
+    pqdownheap(s, tree, 1/*SMALLEST*/);
+
+  } while (s.heap_len >= 2);
+
+  s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];
+
+  /* At this point, the fields freq and dad are set. We can now
+   * generate the bit lengths.
+   */
+  gen_bitlen(s, desc);
+
+  /* The field len is now set, we can generate the bit codes */
+  gen_codes(tree, max_code, s.bl_count);
+}
+
+
+/* ===========================================================================
+ * Scan a literal or distance tree to determine the frequencies of the codes
+ * in the bit length tree.
+ */
+function scan_tree(s, tree, max_code)
+//    deflate_state *s;
+//    ct_data *tree;   /* the tree to be scanned */
+//    int max_code;    /* and its largest code of non zero frequency */
+{
+  var n;                     /* iterates over all tree elements */
+  var prevlen = -1;          /* last emitted length */
+  var curlen;                /* length of current code */
+
+  var nextlen = tree[0*2 + 1]/*.Len*/; /* length of next code */
+
+  var count = 0;             /* repeat count of the current code */
+  var max_count = 7;         /* max repeat count */
+  var min_count = 4;         /* min repeat count */
+
+  if (nextlen === 0) {
+    max_count = 138;
+    min_count = 3;
+  }
+  tree[(max_code+1)*2 + 1]/*.Len*/ = 0xffff; /* guard */
+
+  for (n = 0; n <= max_code; n++) {
+    curlen = nextlen;
+    nextlen = tree[(n+1)*2 + 1]/*.Len*/;
+
+    if (++count < max_count && curlen === nextlen) {
+      continue;
+
+    } else if (count < min_count) {
+      s.bl_tree[curlen * 2]/*.Freq*/ += count;
+
+    } else if (curlen !== 0) {
+
+      if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }
+      s.bl_tree[REP_3_6*2]/*.Freq*/++;
+
+    } else if (count <= 10) {
+      s.bl_tree[REPZ_3_10*2]/*.Freq*/++;
+
+    } else {
+      s.bl_tree[REPZ_11_138*2]/*.Freq*/++;
+    }
+
+    count = 0;
+    prevlen = curlen;
+
+    if (nextlen === 0) {
+      max_count = 138;
+      min_count = 3;
+
+    } else if (curlen === nextlen) {
+      max_count = 6;
+      min_count = 3;
+
+    } else {
+      max_count = 7;
+      min_count = 4;
+    }
+  }
+}
+
+
+/* ===========================================================================
+ * Send a literal or distance tree in compressed form, using the codes in
+ * bl_tree.
+ */
+function send_tree(s, tree, max_code)
+//    deflate_state *s;
+//    ct_data *tree; /* the tree to be scanned */
+//    int max_code;       /* and its largest code of non zero frequency */
+{
+  var n;                     /* iterates over all tree elements */
+  var prevlen = -1;          /* last emitted length */
+  var curlen;                /* length of current code */
+
+  var nextlen = tree[0*2 + 1]/*.Len*/; /* length of next code */
+
+  var count = 0;             /* repeat count of the current code */
+  var max_count = 7;         /* max repeat count */
+  var min_count = 4;         /* min repeat count */
+
+  /* tree[max_code+1].Len = -1; */  /* guard already set */
+  if (nextlen === 0) {
+    max_count = 138;
+    min_count = 3;
+  }
+
+  for (n = 0; n <= max_code; n++) {
+    curlen = nextlen;
+    nextlen = tree[(n+1)*2 + 1]/*.Len*/;
+
+    if (++count < max_count && curlen === nextlen) {
+      continue;
+
+    } else if (count < min_count) {
+      do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);
+
+    } else if (curlen !== 0) {
+      if (curlen !== prevlen) {
+        send_code(s, curlen, s.bl_tree);
+        count--;
+      }
+      //Assert(count >= 3 && count <= 6, " 3_6?");
+      send_code(s, REP_3_6, s.bl_tree);
+      send_bits(s, count-3, 2);
+
+    } else if (count <= 10) {
+      send_code(s, REPZ_3_10, s.bl_tree);
+      send_bits(s, count-3, 3);
+
+    } else {
+      send_code(s, REPZ_11_138, s.bl_tree);
+      send_bits(s, count-11, 7);
+    }
+
+    count = 0;
+    prevlen = curlen;
+    if (nextlen === 0) {
+      max_count = 138;
+      min_count = 3;
+
+    } else if (curlen === nextlen) {
+      max_count = 6;
+      min_count = 3;
+
+    } else {
+      max_count = 7;
+      min_count = 4;
+    }
+  }
+}
+
+
+/* ===========================================================================
+ * Construct the Huffman tree for the bit lengths and return the index in
+ * bl_order of the last bit length code to send.
+ */
+function build_bl_tree(s) {
+  var max_blindex;  /* index of last bit length code of non zero freq */
+
+  /* Determine the bit length frequencies for literal and distance trees */
+  scan_tree(s, s.dyn_ltree, s.l_desc.max_code);
+  scan_tree(s, s.dyn_dtree, s.d_desc.max_code);
+
+  /* Build the bit length tree: */
+  build_tree(s, s.bl_desc);
+  /* opt_len now includes the length of the tree representations, except
+   * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
+   */
+
+  /* Determine the number of bit length codes to send. The pkzip format
+   * requires that at least 4 bit length codes be sent. (appnote.txt says
+   * 3 but the actual value used is 4.)
+   */
+  for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) {
+    if (s.bl_tree[bl_order[max_blindex]*2 + 1]/*.Len*/ !== 0) {
+      break;
+    }
+  }
+  /* Update opt_len to include the bit length tree and counts */
+  s.opt_len += 3*(max_blindex+1) + 5+5+4;
+  //Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld",
+  //        s->opt_len, s->static_len));
+
+  return max_blindex;
+}
+
+
+/* ===========================================================================
+ * Send the header for a block using dynamic Huffman trees: the counts, the
+ * lengths of the bit length codes, the literal tree and the distance tree.
+ * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
+ */
+function send_all_trees(s, lcodes, dcodes, blcodes)
+//    deflate_state *s;
+//    int lcodes, dcodes, blcodes; /* number of codes for each tree */
+{
+  var rank;                    /* index in bl_order */
+
+  //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes");
+  //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,
+  //        "too many codes");
+  //Tracev((stderr, "\nbl counts: "));
+  send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */
+  send_bits(s, dcodes-1,   5);
+  send_bits(s, blcodes-4,  4); /* not -3 as stated in appnote.txt */
+  for (rank = 0; rank < blcodes; rank++) {
+    //Tracev((stderr, "\nbl code %2d ", bl_order[rank]));
+    send_bits(s, s.bl_tree[bl_order[rank]*2 + 1]/*.Len*/, 3);
+  }
+  //Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent));
+
+  send_tree(s, s.dyn_ltree, lcodes-1); /* literal tree */
+  //Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent));
+
+  send_tree(s, s.dyn_dtree, dcodes-1); /* distance tree */
+  //Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent));
+}
+
+
+/* ===========================================================================
+ * Check if the data type is TEXT or BINARY, using the following algorithm:
+ * - TEXT if the two conditions below are satisfied:
+ *    a) There are no non-portable control characters belonging to the
+ *       "black list" (0..6, 14..25, 28..31).
+ *    b) There is at least one printable character belonging to the
+ *       "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).
+ * - BINARY otherwise.
+ * - The following partially-portable control characters form a
+ *   "gray list" that is ignored in this detection algorithm:
+ *   (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).
+ * IN assertion: the fields Freq of dyn_ltree are set.
+ */
+function detect_data_type(s) {
+  /* black_mask is the bit mask of black-listed bytes
+   * set bits 0..6, 14..25, and 28..31
+   * 0xf3ffc07f = binary 11110011111111111100000001111111
+   */
+  var black_mask = 0xf3ffc07f;
+  var n;
+
+  /* Check for non-textual ("black-listed") bytes. */
+  for (n = 0; n <= 31; n++, black_mask >>>= 1) {
+    if ((black_mask & 1) && (s.dyn_ltree[n*2]/*.Freq*/ !== 0)) {
+      return Z_BINARY;
+    }
+  }
+
+  /* Check for textual ("white-listed") bytes. */
+  if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||
+      s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {
+    return Z_TEXT;
+  }
+  for (n = 32; n < LITERALS; n++) {
+    if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {
+      return Z_TEXT;
+    }
+  }
+
+  /* There are no "black-listed" or "white-listed" bytes:
+   * this stream either is empty or has tolerated ("gray-listed") bytes only.
+   */
+  return Z_BINARY;
+}
+
+
+var static_init_done = false;
+
+/* ===========================================================================
+ * Initialize the tree data structures for a new zlib stream.
+ */
+function _tr_init(s)
+{
+
+  if (!static_init_done) {
+    tr_static_init();
+    static_init_done = true;
+  }
+
+  s.l_desc  = new TreeDesc(s.dyn_ltree, static_l_desc);
+  s.d_desc  = new TreeDesc(s.dyn_dtree, static_d_desc);
+  s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);
+
+  s.bi_buf = 0;
+  s.bi_valid = 0;
+
+  /* Initialize the first block of the first file: */
+  init_block(s);
+}
+
+
+/* ===========================================================================
+ * Send a stored block
+ */
+function _tr_stored_block(s, buf, stored_len, last)
+//DeflateState *s;
+//charf *buf;       /* input block */
+//ulg stored_len;   /* length of input block */
+//int last;         /* one if this is the last block for a file */
+{
+  send_bits(s, (STORED_BLOCK<<1)+(last ? 1 : 0), 3);    /* send block type */
+  copy_block(s, buf, stored_len, true); /* with header */
+}
+
+
+/* ===========================================================================
+ * Send one empty static block to give enough lookahead for inflate.
+ * This takes 10 bits, of which 7 may remain in the bit buffer.
+ */
+function _tr_align(s) {
+  send_bits(s, STATIC_TREES<<1, 3);
+  send_code(s, END_BLOCK, static_ltree);
+  bi_flush(s);
+}
+
+
+/* ===========================================================================
+ * Determine the best encoding for the current block: dynamic trees, static
+ * trees or store, and output the encoded block to the zip file.
+ */
+function _tr_flush_block(s, buf, stored_len, last)
+//DeflateState *s;
+//charf *buf;       /* input block, or NULL if too old */
+//ulg stored_len;   /* length of input block */
+//int last;         /* one if this is the last block for a file */
+{
+  var opt_lenb, static_lenb;  /* opt_len and static_len in bytes */
+  var max_blindex = 0;        /* index of last bit length code of non zero freq */
+
+  /* Build the Huffman trees unless a stored block is forced */
+  if (s.level > 0) {
+
+    /* Check if the file is binary or text */
+    if (s.strm.data_type === Z_UNKNOWN) {
+      s.strm.data_type = detect_data_type(s);
+    }
+
+    /* Construct the literal and distance trees */
+    build_tree(s, s.l_desc);
+    // Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len,
+    //        s->static_len));
+
+    build_tree(s, s.d_desc);
+    // Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len,
+    //        s->static_len));
+    /* At this point, opt_len and static_len are the total bit lengths of
+     * the compressed block data, excluding the tree representations.
+     */
+
+    /* Build the bit length tree for the above two trees, and get the index
+     * in bl_order of the last bit length code to send.
+     */
+    max_blindex = build_bl_tree(s);
+
+    /* Determine the best encoding. Compute the block lengths in bytes. */
+    opt_lenb = (s.opt_len+3+7) >>> 3;
+    static_lenb = (s.static_len+3+7) >>> 3;
+
+    // Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
+    //        opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
+    //        s->last_lit));
+
+    if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }
+
+  } else {
+    // Assert(buf != (char*)0, "lost buf");
+    opt_lenb = static_lenb = stored_len + 5; /* force a stored block */
+  }
+
+  if ((stored_len+4 <= opt_lenb) && (buf !== -1)) {
+    /* 4: two words for the lengths */
+
+    /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
+     * Otherwise we can't have processed more than WSIZE input bytes since
+     * the last block flush, because compression would have been
+     * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
+     * transform a block into a stored block.
+     */
+    _tr_stored_block(s, buf, stored_len, last);
+
+  } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {
+
+    send_bits(s, (STATIC_TREES<<1) + (last ? 1 : 0), 3);
+    compress_block(s, static_ltree, static_dtree);
+
+  } else {
+    send_bits(s, (DYN_TREES<<1) + (last ? 1 : 0), 3);
+    send_all_trees(s, s.l_desc.max_code+1, s.d_desc.max_code+1, max_blindex+1);
+    compress_block(s, s.dyn_ltree, s.dyn_dtree);
+  }
+  // Assert (s->compressed_len == s->bits_sent, "bad compressed size");
+  /* The above check is made mod 2^32, for files larger than 512 MB
+   * and uLong implemented on 32 bits.
+   */
+  init_block(s);
+
+  if (last) {
+    bi_windup(s);
+  }
+  // Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3,
+  //       s->compressed_len-7*last));
+}
+
+/* ===========================================================================
+ * Save the match info and tally the frequency counts. Return true if
+ * the current block must be flushed.
+ */
+function _tr_tally(s, dist, lc)
+//    deflate_state *s;
+//    unsigned dist;  /* distance of matched string */
+//    unsigned lc;    /* match length-MIN_MATCH or unmatched char (if dist==0) */
+{
+  //var out_length, in_length, dcode;
+
+  s.pending_buf[s.d_buf + s.last_lit * 2]     = (dist >>> 8) & 0xff;
+  s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;
+
+  s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;
+  s.last_lit++;
+
+  if (dist === 0) {
+    /* lc is the unmatched char */
+    s.dyn_ltree[lc*2]/*.Freq*/++;
+  } else {
+    s.matches++;
+    /* Here, lc is the match length - MIN_MATCH */
+    dist--;             /* dist = match distance - 1 */
+    //Assert((ush)dist < (ush)MAX_DIST(s) &&
+    //       (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&
+    //       (ush)d_code(dist) < (ush)D_CODES,  "_tr_tally: bad match");
+
+    s.dyn_ltree[(_length_code[lc]+LITERALS+1) * 2]/*.Freq*/++;
+    s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;
+  }
+
+// (!) This block is disabled in zlib defailts,
+// don't enable it for binary compatibility
+
+//#ifdef TRUNCATE_BLOCK
+//  /* Try to guess if it is profitable to stop the current block here */
+//  if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {
+//    /* Compute an upper bound for the compressed length */
+//    out_length = s.last_lit*8;
+//    in_length = s.strstart - s.block_start;
+//
+//    for (dcode = 0; dcode < D_CODES; dcode++) {
+//      out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);
+//    }
+//    out_length >>>= 3;
+//    //Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ",
+//    //       s->last_lit, in_length, out_length,
+//    //       100L - out_length*100L/in_length));
+//    if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {
+//      return true;
+//    }
+//  }
+//#endif
+
+  return (s.last_lit === s.lit_bufsize-1);
+  /* We avoid equality with lit_bufsize because of wraparound at 64K
+   * on 16 bit machines and because stored blocks are restricted to
+   * 64K-1 bytes.
+   */
+}
+
+exports._tr_init  = _tr_init;
+exports._tr_stored_block = _tr_stored_block;
+exports._tr_flush_block  = _tr_flush_block;
+exports._tr_tally = _tr_tally;
+exports._tr_align = _tr_align;
+},{"../utils/common":27}],39:[function(_dereq_,module,exports){
+'use strict';
+
+
+function ZStream() {
+  /* next input byte */
+  this.input = null; // JS specific, because we have no pointers
+  this.next_in = 0;
+  /* number of bytes available at input */
+  this.avail_in = 0;
+  /* total number of input bytes read so far */
+  this.total_in = 0;
+  /* next output byte should be put there */
+  this.output = null; // JS specific, because we have no pointers
+  this.next_out = 0;
+  /* remaining free space at output */
+  this.avail_out = 0;
+  /* total number of bytes output so far */
+  this.total_out = 0;
+  /* last error message, NULL if no error */
+  this.msg = ''/*Z_NULL*/;
+  /* not visible by applications */
+  this.state = null;
+  /* best guess about the data type: binary or text */
+  this.data_type = 2/*Z_UNKNOWN*/;
+  /* adler32 value of the uncompressed data */
+  this.adler = 0;
+}
+
+module.exports = ZStream;
+},{}]},{},[9])
+(9)
+});
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/misc/_bower.json b/Source/UBCS-WEB/src/config/js-xlsx-master/misc/_bower.json
new file mode 100644
index 0000000..321df52
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/misc/_bower.json
@@ -0,0 +1,23 @@
+{
+  "name": "js-xlsx",
+  "homepage": "https://github.com/SheetJS/js-xlsx",
+  "main": "dist/xlsx.js",
+  "version": "_VERSION_",
+  "ignore": [
+    "bin",
+    "bits",
+    "misc",
+    "**/.*"
+  ],
+  "keywords": [
+    "excel",
+    "xls",
+    "xml",
+    "xlsx",
+    "xlsm",
+    "xlsb",
+    "ods",
+    "js-xls",
+    "js-xlsx"
+  ]
+}
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/misc/cfb.d.ts b/Source/UBCS-WEB/src/config/js-xlsx-master/misc/cfb.d.ts
new file mode 100644
index 0000000..3a46614
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/misc/cfb.d.ts
@@ -0,0 +1,104 @@
+declare enum CFBEntryType { unknown, storage, stream, lockbytes, property, root }
+declare enum CFBStorageType { fat, minifat }
+
+/* CFB Entry Object demanded by write functions */
+interface CFBEntryMin {
+  
+  /* Raw Content (Buffer when available, Array of bytes otherwise) */
+  content:any;
+}
+
+/* CFB Entry Object returned by parse functions */
+interface CFBEntry extends CFBEntryMin {
+  
+  /* Case-sensitive internal name */
+  name:string;
+  
+  /* CFB type (salient types: stream, storage) -- see CFBEntryType */
+  type:string;
+  
+  /* Creation Time */
+  ct:Date;
+  /* Modification Time */
+  mt:Date;
+
+
+  /* Raw creation time -- see [MS-DTYP] 2.3.3 FILETIME */
+  mtime:string;
+  /* Raw modification time -- see [MS-DTYP] 2.3.3 FILETIME */
+  ctime:string;
+
+  /* RBT color: 0 = red, 1 = black */
+  color:number;
+
+  /* Class ID represented as hex string */
+  clsid:string;
+
+  /* User-Defined State Bits */
+  state:number;
+
+  /* Starting Sector */
+  start:number;
+
+  /* Data Size */
+  size:number;
+  
+  /* Storage location -- see CFBStorageType */
+  storage:string;
+}
+
+
+/* cfb.FullPathDir as demanded by write functions */
+interface CFBDirectoryMin {
+
+  /* keys are unix-style paths */
+  [key:string]: CFBEntryMin;
+}
+
+/* cfb.FullPathDir Directory object */
+interface CFBDirectory extends CFBDirectoryMin {
+
+  /* cfb.FullPathDir keys are paths; cfb.Directory keys are file names */
+  [key:string]: CFBEntry;
+}
+
+
+/* cfb object demanded by write functions */
+interface CFBContainerMin {
+
+  /* Path -> CFB object mapping */
+  FullPathDir:CFBDirectoryMin;
+}
+
+/* cfb object returned by read and parse functions */
+interface CFBContainer extends CFBContainerMin {
+
+  /* search by path or file name */
+  find(string):CFBEntry;
+
+  /* list of streams and storages */
+  FullPaths:string[];
+
+  /* Path -> CFB object mapping */
+  FullPathDir:CFBDirectory;
+
+  /* Array of entries in the same order as FullPaths */
+  FileIndex:CFBEntry[];
+
+  /* Raw Content, in chunks (Buffer when available, Array of bytes otherwise) */
+  raw:any[];
+}
+
+
+interface CFB {
+  read(f:any, options:any):CFBContainer;
+  parse(f:any):CFBContainer;
+  utils: {
+    ReadShift(size:any,t?:any):any;
+    WarnField(hexstr:string,fld?:string);
+    CheckField(hexstr:string,fld?:string);
+    prep_blob(blob:any, pos?:number):any;
+    bconcat(bufs:any[]):any;
+  };
+  main;
+}
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/misc/node.d.ts b/Source/UBCS-WEB/src/config/js-xlsx-master/misc/node.d.ts
new file mode 100644
index 0000000..18156c5
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/misc/node.d.ts
@@ -0,0 +1,8 @@
+declare var require: {
+  (id: string): any;
+}
+
+declare var process: {
+  argv: string[];
+  exit(status: number): void;
+}
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/misc/spin.sh b/Source/UBCS-WEB/src/config/js-xlsx-master/misc/spin.sh
new file mode 100644
index 0000000..9951a57
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/misc/spin.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+# spin.sh -- show a spinner (for coverage test)
+# Copyright (C) 2014  SheetJS
+
+wpid=$1
+delay=1
+str="|/-\\"
+while [ $(ps -a|awk '$1=='$wpid' {print $1}') ]; do
+  t=${str#?}
+  printf " [%c]" "$str"
+  str=$t${str%"$t"}
+  sleep $delay
+  printf "\b\b\b\b"
+done
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/misc/ssf.json b/Source/UBCS-WEB/src/config/js-xlsx-master/misc/ssf.json
new file mode 100644
index 0000000..83069ba
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/misc/ssf.json
@@ -0,0 +1,152 @@
+[
+  ["\"foo\";\"bar\";\"baz\";\"qux\"",
+    [1, "foo"], [-1, "bar"], [0, "baz"], ["sheetjs", "qux"]
+  ],
+  ["\"foo\";\"bar\";\"baz\"",
+    [1, "foo"], [-1, "bar"], [0, "baz"], ["sheetjs", "sheetjs"]
+  ],
+  ["\"foo\";\"bar\";@",
+    [1, "foo"], [-1, "bar"], [0, "foo"], ["sheetjs", "sheetjs"]
+  ],
+  ["\"foo\";\"bar\"",
+    [1, "foo"], [-1, "bar"], [0, "foo"], ["sheetjs", "sheetjs"]
+  ],
+  ["@@", [1, "1"], [-1, "-1"], [0, "0"], ["sheetjs", "sheetjssheetjs"]],
+  ["[Blue]General", [1, "1"], [-1, "-1"], [0, "0"], ["sheetjs", "sheetjs"]],
+  ["[Blue]G3neral", [1], [-1], [0], ["TODO","TODO"]],
+  ["A\"TODO\"", [1, "ATODO"], [-1, "ATODO"], [0, "ATODO"], ["TODO","TODO"]],
+  ["r", [1,"r"], [-1,"-r","#"], [0,"r"], ["sheetjs","sheetjs"]],
+  ["((;@", [1,"(("], [0,"(("], ["foo","foo"]],
+  ["\\r", [1, "r"], [-1, "r"], [0, "r"], ["TODO","TODO"]],
+  ["_($* #,##0_);_($* (#,##0);_($* \"-\"_);_(@_)", [1, " $1 "], [-1, " $(1)"], [0," $- "], ["TODO", " TODO "], ["",""]],
+  ["#0.#", [0,"0."], [1,"1."], [12,"12."], [12.34, "12.3"], [-1.23, "-1.2"]],
+  ["#,##0.0", [1,"1.0"], [-1,"-1.0"], [0,"0.0"], ["TODO","TODO"]],
+  ["#,##0.00", [1,"1.00"], [-1,"-1.00"], [0,"0.00"], ["TODO","TODO"]],
+  ["#,##0.000", [1,"1.000"], [-1,"-1.000"], [0,"0.000"], ["TODO","TODO"]],
+  ["#,##0.0000", [1,"1.0000"], [-1,"-1.0000"], [0,"0.0000"], ["TODO","TODO"]],
+  ["#,##0.00000", [1000000, "1,000,000.00000"]],
+  ["#,##0.000000", [1000000, "1,000,000.000000"]],
+  ["#,##0.0000000", [1000000, "1,000,000.0000000"]],
+  ["#,##0.00000000", [1000000, "1,000,000.00000000"]],
+  ["#,##0.000000000", [1000000, "1,000,000.000000000"]],
+  ["#,###", [1, "1"], [-1, "-1"], [0,""], [12345.6789, "12,346"], ["TODO", "TODO"]],
+  ["#.##", [1, "1."], [-1, "-1."], [0,"."], ["sheetjs", "sheetjs"]],
+  ["0;0", [1.1, "1"], [-1.1, "-1"], [0,"0"], ["sheetjs", "sheetjs"]],
+  ["0.0", [1, "1.0"], [-1, "-1.0"], [0,"0.0"], ["sheetjs", "sheetjs"]],
+  ["0.00", [1.0001, "1.00"], [-1, "-1.00"], [0,"0.00"], ["sheetjs", "sheetjs"]],
+  ["0.000", [1, "1.000"], [-1, "-1.000"], [0,"0.000"], ["sheetjs", "sheetjs"]],
+  ["0.0000", [1, "1.0000"], [-1, "-1.0000"], [0,"0.0000"], ["sheetjs", "sheetjs"]],
+  ["hh:mm AM/PM", [0.7, "04:48 PM"]],
+  ["hhh:mm AM/PM", [0.7]],
+  ["hhh:mmm:sss", [0.7]],
+  ["hh:mmm:sss", [0.7]],
+  ["hh:mm:sss", [0.7]],
+  ["hh:mm:ss.000", [0.7,"16:48:00.000"], [0.70707,"16:58:10.848"]],
+  ["hh.000", [0.70707, "16.848"]],
+  ["hh .00", [0.70707, "16 .85"]],
+  ["hh  .0", [0.70707, "16  .8"]],
+  ["hh .00 .000", [0.70707, "16 .84 .848"]],
+  ["[hhh]", [0.7]],
+  ["[", [0.7]],
+  ["A/P", [0.7, "P"]],
+  ["e", [0.7, "1900"]],
+  ["123", [0.7, "123"], [0, "123"], ["sheetjs", "sheetjs"]],
+  ["0.##", [1,"1."], [-1,"-1."], [0, "0."], [1.1, "1.1"], [-1.2, "-1.2"], [1000000000000.01, "1000000000000.01"], [-1000.01, "-1000.01"], [0.1, "0.1"], [1.007, "1.01"], [-1.008, "-1.01"]],
+  ["** #,###,#00,000.00,**",
+    [1.2345,                                    " 00,000.00"],
+    [12.345,                                    " 00,000.01"],
+    [123.45,                                    " 00,000.12"],
+    [1234.56,                                   " 00,001.23"],
+    [12345.67,                                  " 00,012.35"],
+    [123456.78,                                 " 00,123.46"],
+    [1234567.89,                                " 01,234.57"],
+    [12345681.9,                                " 12,345.68"],
+    [123456822,                                " 123,456.82"],
+    [1234568223,                             " 1,234,568.22"],
+    [12345682233,                           " 12,345,682.23"],
+    [123456822333,                         " 123,456,822.33"],
+    [1234568223333,                      " 1,234,568,223.33"],
+    [12345682233333,                    " 12,345,682,233.33"],
+    [123456822333333,                  " 123,456,822,333.33"],
+    [1234568223333330,               " 1,234,568,223,333.33"],
+    [12345682233333300,             " 12,345,682,233,333.30"],
+    [123456822333333000,           " 123,456,822,333,333.00", "#"],
+    [1234568223333330000,        " 1,234,568,223,333,330.00"],
+    [12345682233333300000,      " 12,345,682,233,333,300.00"],
+    [123456822333333000000,    " 123,456,822,333,333,000.00"],
+    [1234568223333330000000, " 1,234,568,223,333,330,000.00"]
+  ],
+  ["00,000.00,", [12345, "00,012.35"] ],
+  ["00,000.00", [12345, "12,345.00"] ],
+  ["000#0#0#0##00##00##0#########", [12345, "0000000000012345"] ],
+  ["##0.0E+0",
+    [1,           "1.0E+0"],
+    [12,         "12.0E+0"],
+    [123,       "123.0E+0"],
+    [1234,        "1.2E+3"],
+    [12345,      "12.3E+3"],
+    [123456,    "123.5E+3"],
+    [1234567,     "1.2E+6"],
+    [12345678,   "12.3E+6"],
+    [123456789, "123.5E+6"]
+  ],
+  ["0#######0.##0##0######00######0",
+    [12.3456789, "012.3456789000"],
+    [123456789, "123456789.00000"]
+  ],
+  ["###\\###\\##0.00",
+    [0.00101,              "##0.00"],
+    [0.0101,               "##0.01"],
+    [0.101,                "##0.10"],
+    [1.01,                 "##1.01"],
+    [10.1,                "##10.10"],
+    [101,                "#1#01.00"],
+    [1010,              "#10#10.00"],
+    [10100,            "1#01#00.00"],
+    [101000,          "10#10#00.00"],
+    [1010000,        "101#00#00.00"],
+    [10100000,      "1010#00#00.00"],
+    [101000000,    "10100#00#00.00"],
+    [123456789.01,    "12345#67#89.01"]
+  ],
+
+  ["###\\\\###\\\\##\\0.00",
+    [0.00101,              "\\\\0.00"],
+    [0.0101,               "\\\\0.01"],
+    [0.101,                "\\\\0.10"],
+    [1.01,                "\\\\10.01"],
+    [10.1,               "\\\\100.10"],
+    [101,               "\\1\\010.00"],
+    [1010,             "\\10\\100.00"],
+    [10100,           "\\101\\000.00"],
+    [101000,         "1\\010\\000.00"],
+    [1010000,       "10\\100\\000.00"],
+    [10100000,     "101\\000\\000.00"],
+    [101000000,   "1010\\000\\000.00"],
+    [123456789.01,   "1234\\567\\890.01"]
+  ],
+  ["###\\\\###\\\\##\\0", [12345.6789, "\\123\\460"]],
+  ["00000-0000", [941051630, "94105-1630"], [12345.6789, "00001-2346"]],
+  ["000-00-0000", [123456789, "123-45-6789"]],
+  ["00000\\-0000", [941051630, "94105-1630"]],
+  ["000\\-00\\-0000", [123456789, "123-45-6789"]],
+  ["??/??", [12.3456789, "1000/81"], [0.00001, " 0/1 "]],
+  ["?? / ??", [12.3456789, "1000 / 81"], [0.00001, " 0 / 1 "], [123, "123 / 1 "]],
+  ["# ??/??", [12.3456789, "12 28/81"]],
+  ["#??/??", [12.3456789, "1000/81"]],
+  ["#0#00??/??", [12.3456789, "01000/81"]],
+  ["[<=9999999]###-####;(###) ###-####", [8675309, "867-5309"],[2813308004, "(281) 330-8004"], [2018675309, "(201) 867-5309"]],
+  ["[<=9999999]###\\-####;(###) ###\\-####", [8675309, "867-5309"],[2813308004, "(281) 330-8004"]],
+  ["[Red][<-25]General;[Blue][>25]General;[Green]General;[Yellow]General", [50, "50"],[26, "26"],[25,"25"],[1,"1"],[0,"0"],[-1,"-1"],[-25,"-25"],[-26,"26","#"],[-50.1,"50","#"], ["foo","foo"],["bar","bar"]],
+  ["[Red][<=-25]General;[Blue][>=25]General;[Green]General;[Yellow]General", [50, "50"],[26, "26"],[25,"25"],[1,"1"],[0,"0"],[-1,"-1"],[-25,"-25"],[-26.1,"26","#"],[-50,"50","#"], ["foo","foo"],["bar","bar"]],
+  ["[Red]General ;[Blue]General\\ ;[Green]Generalp;[Yellow]General'", [50, "50 "],[0,"0p"],[-25,"-25 "],["foo","foo'"]],
+  ["[Red][=50]General;[Blue]000", [50, "50"], [51, "051"], [49, "049"]],
+  ["[Red][<>50]General;[Blue]000", [50, "050"], [51, "51"], [49, "49"]],
+  ["b", [1,"43"], [1000,"45"], [10000,"70"]],
+  ["B2yyyymmdd", [0,"13170829"], [1000,"13200624","#"], [10000,"13451117","#"]],
+  ["鈽�", [0], [1], [-1]],
+  ["#0#######", [12345, "012345"], [12345.4321, "012345"], [12345.6789, "012346"]],
+  ["##,##", [12345, "12,345", ""], [12345.4321, "12,345", ""], [12345.6789, "12,346", ""]],
+  [0, [12345,"12345"], [4294967296.5, 4294967297]],
+  ["\"foo\";\"bar\";\"baz\";\"qux\";\"foobar\"", [1], [0], [-1], ["sheetjs"]]
+]
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/misc/strip_sourcemap.sh b/Source/UBCS-WEB/src/config/js-xlsx-master/misc/strip_sourcemap.sh
new file mode 100644
index 0000000..2d0d132
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/misc/strip_sourcemap.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+# strip_sourcemap.sh -- strip sourcemaps from a JS file (missing from uglifyjs) 
+# Copyright (C) 2014-2015  SheetJS
+
+if [ $# -gt 0 ]; then
+	if [ -e "$1" ]; then
+		sed -i .sheetjs '/sourceMappingURL/d' "$1"
+	fi
+else
+	cat - | sed '/sourceMappingURL/d'
+fi
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/misc/xl.d.ts b/Source/UBCS-WEB/src/config/js-xlsx-master/misc/xl.d.ts
new file mode 100644
index 0000000..f12a4be
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/misc/xl.d.ts
@@ -0,0 +1,65 @@
+///<reference path='cfb.d.ts'/>
+
+interface Cell {
+  v;
+  w?: string;
+  t?: string;
+  f?: string;
+  r?: string;
+  h?: string;
+  c?: any;
+  z?: string;
+  ixfe?: number;
+}
+
+interface CellAddress {
+  c: number;
+  r: number;
+}
+
+interface CellRange {
+  s: CellAddress;
+  e: CellAddress;
+}
+
+interface WorksheetBase {
+  '!range':CellRange;
+  '!ref':string;
+}
+
+interface Worksheet extends WorksheetBase {
+  [key: string]: Cell;
+}
+
+interface Worksheets {
+  [key: string]: Worksheet;
+}
+
+interface Workbook {
+  SheetNames: string[];
+  Sheets: Worksheets;
+}
+
+interface XLSX {
+  parse_xlscfb(cfb:CFBContainer): Workbook;
+  read;
+  readFile(filename: string): Workbook; 
+  utils: {
+    encode_col(col: number): string;
+    encode_row(row: number): string;
+    encode_cell(cell: CellAddress): string;
+    encode_range;
+    decode_col(col: string): number;
+    decode_row(row: string): number;
+    split_cell(cell: string): string[];
+    decode_cell(cell: string): CellAddress;
+    decode_range(cell: string): CellRange;
+    sheet_to_csv(worksheet: Worksheet): string;
+    get_formulae(worksheet: Worksheet): string[];
+    make_csv(worksheet: Worksheet): string;
+    sheet_to_row_object_array(worksheet: Worksheet): Object[];
+  };
+  verbose: Number;
+  CFB:CFB;
+  main;
+}
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/misc/xlsx2csv.ts b/Source/UBCS-WEB/src/config/js-xlsx-master/misc/xlsx2csv.ts
new file mode 100644
index 0000000..d1248bb
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/misc/xlsx2csv.ts
@@ -0,0 +1,71 @@
+///<reference path='node.d.ts'/>
+///<reference path='xl.d.ts'/>
+
+/* vim: set ts=2: */
+var XLSX = <XLSX>require('xlsx');
+var fs = require('fs'), program = require('commander');
+program
+	.version('0.3.1')
+	.usage('[options] <file> [sheetname]')
+	.option('-f, --file <file>', 'use specified workbook')
+	.option('-s, --sheet <sheet>', 'print specified sheet (default first sheet)')
+	.option('-l, --list-sheets', 'list sheet names and exit')
+	.option('-F, --formulae', 'print formulae')
+	.option('--dev', 'development mode')
+	.option('--read', 'read but do not print out contents')
+	.option('-q, --quiet', 'quiet mode')
+	.parse(process.argv);
+
+var filename:string, sheetname:string = '';
+if(program.args[0]) {
+	filename = program.args[0];
+	if(program.args[1]) sheetname = program.args[1];
+}
+if(program.sheet) sheetname = program.sheet;
+if(program.file) filename = program.file;
+
+if(!filename) {
+	console.error("xlsx2csv: must specify a filename");
+	process.exit(1);
+}
+
+if(!fs.existsSync(filename)) {
+	console.error("xlsx2csv: " + filename + ": No such file or directory");
+	process.exit(2);
+}
+
+if(program.dev) XLSX.verbose = 2;
+
+var wb:Workbook;
+if(program.dev) wb = XLSX.readFile(filename);
+else try {
+	wb = XLSX.readFile(filename);
+} catch(e) {
+	var msg:string = (program.quiet) ? "" : "xlsx2csv: error parsing ";
+	msg += filename + ": " + e;
+	console.error(msg);
+	process.exit(3);
+}
+if(program.read) process.exit(0);
+
+if(program.listSheets) {
+	console.log(wb.SheetNames.join("\n"));
+	process.exit(0);
+}
+
+var target_sheet:string = sheetname || '';
+if(target_sheet === '') target_sheet = wb.SheetNames[0];
+
+var ws:Worksheet;
+try {
+	ws = wb.Sheets[target_sheet];
+	if(!ws) throw "Sheet " + target_sheet + " cannot be found";
+} catch(e) {
+	console.error("xlsx2csv: error parsing "+filename+" "+target_sheet+": " + e);
+	process.exit(4);
+}
+
+if(!program.quiet) console.error(target_sheet);
+if(program.formulae) console.log(XLSX.utils.get_formulae(ws).join("\n"));
+else console.log(XLSX.utils.make_csv(ws));
+console.log(ws["C2"]);
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/ods.js b/Source/UBCS-WEB/src/config/js-xlsx-master/ods.js
new file mode 100644
index 0000000..9d498b0
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/ods.js
@@ -0,0 +1,414 @@
+/* ods.js (C) 2014 SheetJS -- http://sheetjs.com */
+/* vim: set ts=2: */
+/*jshint -W041 */
+var ODS = {};
+(function make_ods(ODS) {
+/* Open Document Format for Office Applications (OpenDocument) Version 1.2 */
+var get_utils = function() {
+	if(typeof XLSX !== 'undefined') return XLSX.utils;
+	if(typeof module !== "undefined" && typeof require !== 'undefined') try {
+		return require('../' + 'xlsx').utils;
+	} catch(e) {
+		try { return require('./' + 'xlsx').utils; }
+		catch(ee) { return require('xl' + 'sx').utils; }
+	}
+	throw new Error("Cannot find XLSX utils");
+};
+var has_buf = (typeof Buffer !== 'undefined');
+
+function cc2str(arr) {
+	var o = "";
+	for(var i = 0; i != arr.length; ++i) o += String.fromCharCode(arr[i]);
+	return o;
+}
+function getdata(data) {
+	if(!data) return null;
+	if(data.data) return data.data;
+	if(data.asNodeBuffer && has_buf) return data.asNodeBuffer().toString('binary');
+	if(data.asBinary) return data.asBinary();
+	if(data._data && data._data.getContent) return cc2str(Array.prototype.slice.call(data._data.getContent(),0));
+	return null;
+}
+
+function safegetzipfile(zip, file) {
+	var f = file; if(zip.files[f]) return zip.files[f];
+	f = file.toLowerCase(); if(zip.files[f]) return zip.files[f];
+	f = f.replace(/\//g,'\\'); if(zip.files[f]) return zip.files[f];
+	return null;
+}
+
+function getzipfile(zip, file) {
+	var o = safegetzipfile(zip, file);
+	if(o == null) throw new Error("Cannot find file " + file + " in zip");
+	return o;
+}
+
+function getzipdata(zip, file, safe) {
+	if(!safe) return getdata(getzipfile(zip, file));
+	if(!file) return null;
+	try { return getzipdata(zip, file); } catch(e) { return null; }
+}
+
+var _fs, jszip;
+if(typeof JSZip !== 'undefined') jszip = JSZip;
+if (typeof exports !== 'undefined') {
+	if (typeof module !== 'undefined' && module.exports) {
+		if(has_buf && typeof jszip === 'undefined') jszip = require('js'+'zip');
+		if(typeof jszip === 'undefined') jszip = require('./js'+'zip').JSZip;
+		_fs = require('f'+'s');
+	}
+}
+var attregexg=/\b[\w:-]+=["'][^"]*['"]/g;
+var tagregex=/<[^>]*>/g;
+var nsregex=/<\w*:/, nsregex2 = /<(\/?)\w+:/;
+function parsexmltag(tag, skip_root) {
+	var z = [];
+	var eq = 0, c = 0;
+	for(; eq !== tag.length; ++eq) if((c = tag.charCodeAt(eq)) === 32 || c === 10 || c === 13) break;
+	if(!skip_root) z[0] = tag.substr(0, eq);
+	if(eq === tag.length) return z;
+	var m = tag.match(attregexg), j=0, w="", v="", i=0, q="", cc="";
+	if(m) for(i = 0; i != m.length; ++i) {
+		cc = m[i];
+		for(c=0; c != cc.length; ++c) if(cc.charCodeAt(c) === 61) break;
+		q = cc.substr(0,c); v = cc.substring(c+2, cc.length-1);
+		for(j=0;j!=q.length;++j) if(q.charCodeAt(j) === 58) break;
+		if(j===q.length) z[q] = v;
+		else z[(j===5 && q.substr(0,5)==="xmlns"?"xmlns":"")+q.substr(j+1)] = v;
+	}
+	return z;
+}
+function strip_ns(x) { return x.replace(nsregex2, "<$1"); }
+
+var encodings = {
+	'&quot;': '"',
+	'&apos;': "'",
+	'&gt;': '>',
+	'&lt;': '<',
+	'&amp;': '&'
+};
+var rencoding = {
+	'"': '&quot;',
+	"'": '&apos;',
+	'>': '&gt;',
+	'<': '&lt;',
+	'&': '&amp;'
+};
+var rencstr = "&<>'\"".split("");
+
+// TODO: CP remap (need to read file version to determine OS)
+var encregex = /&[a-z]*;/g, coderegex = /_x([\da-fA-F]+)_/g;
+function unescapexml(text){
+	var s = text + '';
+	return s.replace(encregex, function($$) { return encodings[$$]; }).replace(coderegex,function(m,c) {return String.fromCharCode(parseInt(c,16));});
+}
+var decregex=/[&<>'"]/g, charegex = /[\u0000-\u0008\u000b-\u001f]/g;
+function escapexml(text){
+	var s = text + '';
+	return s.replace(decregex, function(y) { return rencoding[y]; }).replace(charegex,function(s) { return "_x" + ("000"+s.charCodeAt(0).toString(16)).substr(-4) + "_";});
+}
+
+function parsexmlbool(value, tag) {
+	switch(value) {
+		case '1': case 'true': case 'TRUE': return true;
+		/* case '0': case 'false': case 'FALSE':*/
+		default: return false;
+	}
+}
+
+function datenum(v) {
+	var epoch = Date.parse(v);
+	return (epoch + 2209161600000) / (24 * 60 * 60 * 1000);
+}
+
+/* ISO 8601 Duration */
+function parse_isodur(s) {
+	var sec = 0, mt = 0, time = false;
+	var m = s.match(/P([0-9\.]+Y)?([0-9\.]+M)?([0-9\.]+D)?T([0-9\.]+H)?([0-9\.]+M)?([0-9\.]+S)?/);
+	if(!m) throw new Error("|" + s + "| is not an ISO8601 Duration");
+	for(var i = 1; i != m.length; ++i) {
+		if(!m[i]) continue;
+		mt = 1;
+		if(i > 3) time = true;
+		switch(m[i].substr(m[i].length-1)) {
+			case 'Y':
+				throw new Error("Unsupported ISO Duration Field: " + m[i].substr(m[i].length-1));
+			case 'D': mt *= 24;
+				/* falls through */
+			case 'H': mt *= 60;
+				/* falls through */
+			case 'M':
+				if(!time) throw new Error("Unsupported ISO Duration Field: M");
+				else mt *= 60;
+				/* falls through */
+			case 'S': break;
+		}
+		sec += mt * parseInt(m[i], 10);
+	}
+	return sec;
+}
+/* copied from js-xls (C) SheetJS Apache2 license */
+function xlml_normalize(d) {
+	if(has_buf && Buffer.isBuffer(d)) return d.toString('utf8');
+	if(typeof d === 'string') return d;
+	throw "badf";
+}
+
+var xlmlregex = /<(\/?)([a-z0-9]*:|)([\w-]+)[^>]*>/mg;
+/* Part 3 Section 4 Manifest File */
+var CT_ODS = "application/vnd.oasis.opendocument.spreadsheet";
+var parse_manifest = function(d, opts) {
+	var str = xlml_normalize(d);
+	var Rn;
+	var FEtag;
+	while((Rn = xlmlregex.exec(str))) switch(Rn[3]) {
+		case 'manifest': break; // 4.2 <manifest:manifest>
+		case 'file-entry': // 4.3 <manifest:file-entry>
+			FEtag = parsexmltag(Rn[0]);
+			if(FEtag.path == '/' && FEtag.type !== CT_ODS) throw new Error("This OpenDocument is not a spreadsheet");
+			break;
+		case 'encryption-data': // 4.4 <manifest:encryption-data>
+		case 'algorithm': // 4.5 <manifest:algorithm>
+		case 'start-key-generation': // 4.6 <manifest:start-key-generation>
+		case 'key-derivation': // 4.7 <manifest:key-derivation>
+			throw new Error("Unsupported ODS Encryption");
+		default: throw Rn;
+	}
+};
+var parse_text_p = function(text, tag) {
+	return utf8read(text.replace(/<text:s\/>/g," ").replace(/<[^>]*>/g,""));
+};
+
+var utf8read = function utf8reada(orig) {
+	var out = "", i = 0, c = 0, d = 0, e = 0, f = 0, w = 0;
+	while (i < orig.length) {
+		c = orig.charCodeAt(i++);
+		if (c < 128) { out += String.fromCharCode(c); continue; }
+		d = orig.charCodeAt(i++);
+		if (c>191 && c<224) { out += String.fromCharCode(((c & 31) << 6) | (d & 63)); continue; }
+		e = orig.charCodeAt(i++);
+		if (c < 240) { out += String.fromCharCode(((c & 15) << 12) | ((d & 63) << 6) | (e & 63)); continue; }
+		f = orig.charCodeAt(i++);
+		w = (((c & 7) << 18) | ((d & 63) << 12) | ((e & 63) << 6) | (f & 63))-65536;
+		out += String.fromCharCode(0xD800 + ((w>>>10)&1023));
+		out += String.fromCharCode(0xDC00 + (w&1023));
+	}
+	return out;
+};
+var parse_content_xml = (function() {
+
+	var number_formats = {
+		/* ods name: [short ssf fmt, long ssf fmt] */
+		day: ["d", "dd"],
+		month: ["m", "mm"],
+		year: ["y", "yy"],
+		hours: ["h", "hh"],
+		minutes: ["m", "mm"],
+		seconds: ["s", "ss"],
+		"am-pm": ["A/P", "AM/PM"],
+		"day-of-week": ["ddd", "dddd"]
+	};
+
+	return function pcx(d, opts) {
+		var str = xlml_normalize(d);
+		var state = [], tmp;
+		var tag;
+		var NFtag, NF, pidx;
+		var sheetag;
+		var Sheets = {}, SheetNames = [], ws = {};
+		var Rn, q;
+		var ctag;
+		var textp, textpidx, textptag;
+		var R, C, range = {s: {r:1000000,c:10000000}, e: {r:0, c:0}};
+		var number_format_map = {};
+		var merges = [], mrange = {}, mR = 0, mC = 0;
+
+		while((Rn = xlmlregex.exec(str))) switch(Rn[3]) {
+
+			case 'table': // 9.1.2 <table:table>
+				if(Rn[1]==='/') {
+					if(range.e.c >= range.s.c && range.e.r >= range.s.r) ws['!ref'] = get_utils().encode_range(range);
+					if(merges.length) ws['!merges'] = merges;
+					SheetNames.push(sheetag.name);
+					Sheets[sheetag.name] = ws;
+				}
+				else if(Rn[0].charAt(Rn[0].length-2) !== '/') {
+					sheetag = parsexmltag(Rn[0]);
+					R = C = -1;
+					range.s.r = range.s.c = 10000000; range.e.r = range.e.c = 0;
+					ws = {}; merges = [];
+				}
+				break;
+
+			case 'table-row': // 9.1.3 <table:table-row>
+				if(Rn[1] === '/') break;
+				++R; C = -1; break;
+			case 'covered-table-cell': // 9.1.5 table:covered-table-cell
+				++C; break; /* stub */
+			case 'table-cell':
+				if(Rn[0].charAt(Rn[0].length-2) === '/') {
+					ctag = parsexmltag(Rn[0]);
+					if(ctag['number-columns-repeated']) C+= parseInt(ctag['number-columns-repeated'], 10);
+					else ++C;
+				}
+				else if(Rn[1]!=='/') {
+					++C;
+					if(C > range.e.c) range.e.c = C;
+					if(R > range.e.r) range.e.r = R;
+					if(C < range.s.c) range.s.c = C;
+					if(R < range.s.r) range.s.r = R;
+					ctag = parsexmltag(Rn[0]);
+					q = {t:ctag['value-type'], v:null};
+					if(ctag['number-columns-spanned'] || ctag['number-rows-spanned']) {
+						mR = parseInt(ctag['number-rows-spanned'],10) || 0;
+						mC = parseInt(ctag['number-columns-spanned'],10) || 0;
+						mrange = {s: {r:R,c:C}, e:{r:R + mR-1,c:C + mC-1}};
+						merges.push(mrange);
+					}
+					/* 19.385 office:value-type */
+					switch(q.t) {
+						case 'boolean': q.t = 'b'; q.v = parsexmlbool(ctag['boolean-value']); break;
+						case 'float': q.t = 'n'; q.v = parseFloat(ctag.value); break;
+						case 'percentage': q.t = 'n'; q.v = parseFloat(ctag.value); break;
+						case 'currency': q.t = 'n'; q.v = parseFloat(ctag.value); break;
+						case 'date': q.t = 'n'; q.v = datenum(ctag['date-value']); q.z = 'm/d/yy'; break;
+						case 'time': q.t = 'n'; q.v = parse_isodur(ctag['time-value'])/86400; break;
+						case 'string': q.t = 's'; break;
+						default: throw new Error('Unsupported value type ' + q.t);
+					}
+				} else {
+					if(q.t === 's') q.v = textp;
+					if(textp) q.w = textp;
+					if(!(opts.sheetRows && opts.sheetRows < R)) ws[get_utils().encode_cell({r:R,c:C})] = q;
+					q = null;
+				}
+				break; // 9.1.4 <table:table-cell>
+
+			/* pure state */
+			case 'document-content': // 3.1.3.2 <office:document-content>
+			case 'spreadsheet': // 3.7 <office:spreadsheet>
+			case 'scripts': // 3.12 <office:scripts>
+			case 'font-face-decls': // 3.14 <office:font-face-decls>
+				if(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw "Bad state: "+tmp;}
+				else if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);
+				break;
+
+			/* ignore state */
+			case 'shapes': // 9.2.8 <table:shapes>
+			case 'frame': // 10.4.2 <draw:frame>
+				if(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw "Bad state: "+tmp;}
+				else if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], false]);
+				break;
+
+			case 'number-style': // 16.27.2 <number:number-style>
+			case 'percentage-style': // 16.27.9 <number:percentage-style>
+			case 'date-style': // 16.27.10 <number:date-style>
+			case 'time-style': // 16.27.18 <number:time-style>
+				if(Rn[1]==='/'){
+					number_format_map[NFtag.name] = NF;
+					if((tmp=state.pop())[0]!==Rn[3]) throw "Bad state: "+tmp;
+				} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {
+					NF = "";
+					NFtag = parsexmltag(Rn[0]);
+					state.push([Rn[3], true]);
+				} break;
+
+			case 'script': break; // 3.13 <office:script>
+			case 'automatic-styles': break; // 3.15.3 <office:automatic-styles>
+
+			case 'style': break; // 16.2 <style:style>
+			case 'font-face': break; // 16.21 <style:font-face>
+
+			case 'paragraph-properties': break; // 17.6 <style:paragraph-properties>
+			case 'table-properties': break; // 17.15 <style:table-properties>
+			case 'table-column-properties': break; // 17.16 <style:table-column-properties>
+			case 'table-row-properties': break; // 17.17 <style:table-row-properties>
+			case 'table-cell-properties': break; // 17.18 <style:table-cell-properties>
+
+			case 'number': // 16.27.3 <number:number>
+				switch(state[state.length-1][0]) {
+					case 'time-style':
+					case 'date-style':
+						tag = parsexmltag(Rn[0]);
+						NF += number_formats[Rn[3]][tag.style==='long'?1:0]; break;
+				} break;
+
+			case 'day': // 16.27.11 <number:day>
+			case 'month': // 16.27.12 <number:month>
+			case 'year': // 16.27.13 <number:year>
+			case 'era': // 16.27.14 <number:era>
+			case 'day-of-week': // 16.27.15 <number:day-of-week>
+			case 'week-of-year': // 16.27.16 <number:week-of-year>
+			case 'quarter': // 16.27.17 <number:quarter>
+			case 'hours': // 16.27.19 <number:hours>
+			case 'minutes': // 16.27.20 <number:minutes>
+			case 'seconds': // 16.27.21 <number:seconds>
+			case 'am-pm': // 16.27.22 <number:am-pm>
+				switch(state[state.length-1][0]) {
+					case 'time-style':
+					case 'date-style':
+						tag = parsexmltag(Rn[0]);
+						NF += number_formats[Rn[3]][tag.style==='long'?1:0]; break;
+				} break;
+
+			case 'boolean-style': break; // 16.27.23 <number:boolean-style>
+			case 'boolean': break; // 16.27.24 <number:boolean>
+			case 'text-style': break; // 16.27.25 <number:text-style>
+			case 'text': // 16.27.26 <number:text>
+				if(Rn[0].substr(-2) === "/>") break;
+				else if(Rn[1]==="/") switch(state[state.length-1][0]) {
+					case 'number-style':
+					case 'date-style':
+					case 'time-style':
+						NF += str.slice(pidx, Rn.index);
+						break;
+				}
+				else pidx = Rn.index + Rn[0].length;
+				break;
+			case 'text-content': break; // 16.27.27 <number:text-content>
+			case 'text-properties': break; // 16.27.27 <style:text-properties>
+
+			case 'body': break; // 3.3 16.9.6 19.726.3
+
+			case 'forms': break; // 12.25.2 13.2
+			case 'table-column': break; // 9.1.6 <table:table-column>
+
+			case 'graphic-properties': break;
+			case 'calculation-settings': break; // 9.4.1 <table:calculation-settings>
+			case 'named-expressions': break; // 9.4.11 <table:named-expressions>
+			case 'named-range': break; // 9.4.11 <table:named-range>
+			case 'span': break; // <text:span>
+			case 'p':
+				if(Rn[1]==='/') textp = parse_text_p(str.slice(textpidx,Rn.index), textptag);
+				else { textptag = parsexmltag(Rn[0]); textpidx = Rn.index + Rn[0].length; }
+				break; // <text:p>
+			case 's': break; // <text:s>
+			case 'date': break; // <*:date>
+			case 'annotation': break;
+
+			case 'object': break; // 10.4.6.2 <draw:object>
+			case 'title': break; // <*:title>
+			case 'desc': break; // <*:desc>
+
+			case 'database-ranges': break; // 9.4.14 <table:database-ranges>
+			case 'database-range': break; // 9.4.15 <table:database-range>
+			case 'filter': break; // 9.5.2 <table:filter>
+			case 'filter-and': break; // 9.5.3 <table:filter-and>
+			case 'filter-or': break; // 9.5.4 <table:filter-or>
+			case 'filter-condition': break; // 9.5.5 <table:filter-condition>
+			default: if(opts.WTF) throw Rn;
+		}
+		var out = {
+			Sheets: Sheets,
+			SheetNames: SheetNames
+		};
+		return out;
+	};
+})();
+/* Part 3: Packages */
+var parse_ods = function(zip, opts) {
+	//var manifest = parse_manifest(getzipdata(zip, 'META-INF/manifest.xml'));
+	return parse_content_xml(getzipdata(zip, 'content.xml'), opts);
+};
+ODS.parse_ods = parse_ods;
+})(typeof exports !== 'undefined' ? exports : ODS);
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/00_header.js b/Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/00_header.js
new file mode 100644
index 0000000..1327e41
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/00_header.js
@@ -0,0 +1,6 @@
+/* ods.js (C) 2014 SheetJS -- http://sheetjs.com */
+/* vim: set ts=2: */
+/*jshint -W041 */
+var ODS = {};
+(function make_ods(ODS) {
+/* Open Document Format for Office Applications (OpenDocument) Version 1.2 */
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/10_utils.js b/Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/10_utils.js
new file mode 100644
index 0000000..1126211
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/10_utils.js
@@ -0,0 +1,10 @@
+var get_utils = function() {
+	if(typeof XLSX !== 'undefined') return XLSX.utils;
+	if(typeof module !== "undefined" && typeof require !== 'undefined') try {
+		return require('../' + 'xlsx').utils;
+	} catch(e) {
+		try { return require('./' + 'xlsx').utils; }
+		catch(ee) { return require('xl' + 'sx').utils; }
+	}
+	throw new Error("Cannot find XLSX utils");
+};
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/20_jsutils.js b/Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/20_jsutils.js
new file mode 100644
index 0000000..e3f04f8
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/20_jsutils.js
@@ -0,0 +1,7 @@
+var has_buf = (typeof Buffer !== 'undefined');
+
+function cc2str(arr) {
+	var o = "";
+	for(var i = 0; i != arr.length; ++i) o += String.fromCharCode(arr[i]);
+	return o;
+}
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/21_ziputils.js b/Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/21_ziputils.js
new file mode 100644
index 0000000..263ea13
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/21_ziputils.js
@@ -0,0 +1,37 @@
+function getdata(data) {
+	if(!data) return null;
+	if(data.data) return data.data;
+	if(data.asNodeBuffer && has_buf) return data.asNodeBuffer().toString('binary');
+	if(data.asBinary) return data.asBinary();
+	if(data._data && data._data.getContent) return cc2str(Array.prototype.slice.call(data._data.getContent(),0));
+	return null;
+}
+
+function safegetzipfile(zip, file) {
+	var f = file; if(zip.files[f]) return zip.files[f];
+	f = file.toLowerCase(); if(zip.files[f]) return zip.files[f];
+	f = f.replace(/\//g,'\\'); if(zip.files[f]) return zip.files[f];
+	return null;
+}
+
+function getzipfile(zip, file) {
+	var o = safegetzipfile(zip, file);
+	if(o == null) throw new Error("Cannot find file " + file + " in zip");
+	return o;
+}
+
+function getzipdata(zip, file, safe) {
+	if(!safe) return getdata(getzipfile(zip, file));
+	if(!file) return null;
+	try { return getzipdata(zip, file); } catch(e) { return null; }
+}
+
+var _fs, jszip;
+if(typeof JSZip !== 'undefined') jszip = JSZip;
+if (typeof exports !== 'undefined') {
+	if (typeof module !== 'undefined' && module.exports) {
+		if(has_buf && typeof jszip === 'undefined') jszip = require('js'+'zip');
+		if(typeof jszip === 'undefined') jszip = require('./js'+'zip').JSZip;
+		_fs = require('f'+'s');
+	}
+}
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/22_xmlutils.js b/Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/22_xmlutils.js
new file mode 100644
index 0000000..5d8b194
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/22_xmlutils.js
@@ -0,0 +1,89 @@
+var attregexg=/\b[\w:-]+=["'][^"]*['"]/g;
+var tagregex=/<[^>]*>/g;
+var nsregex=/<\w*:/, nsregex2 = /<(\/?)\w+:/;
+function parsexmltag(tag, skip_root) {
+	var z = [];
+	var eq = 0, c = 0;
+	for(; eq !== tag.length; ++eq) if((c = tag.charCodeAt(eq)) === 32 || c === 10 || c === 13) break;
+	if(!skip_root) z[0] = tag.substr(0, eq);
+	if(eq === tag.length) return z;
+	var m = tag.match(attregexg), j=0, w="", v="", i=0, q="", cc="";
+	if(m) for(i = 0; i != m.length; ++i) {
+		cc = m[i];
+		for(c=0; c != cc.length; ++c) if(cc.charCodeAt(c) === 61) break;
+		q = cc.substr(0,c); v = cc.substring(c+2, cc.length-1);
+		for(j=0;j!=q.length;++j) if(q.charCodeAt(j) === 58) break;
+		if(j===q.length) z[q] = v;
+		else z[(j===5 && q.substr(0,5)==="xmlns"?"xmlns":"")+q.substr(j+1)] = v;
+	}
+	return z;
+}
+function strip_ns(x) { return x.replace(nsregex2, "<$1"); }
+
+var encodings = {
+	'&quot;': '"',
+	'&apos;': "'",
+	'&gt;': '>',
+	'&lt;': '<',
+	'&amp;': '&'
+};
+var rencoding = {
+	'"': '&quot;',
+	"'": '&apos;',
+	'>': '&gt;',
+	'<': '&lt;',
+	'&': '&amp;'
+};
+var rencstr = "&<>'\"".split("");
+
+// TODO: CP remap (need to read file version to determine OS)
+var encregex = /&[a-z]*;/g, coderegex = /_x([\da-fA-F]+)_/g;
+function unescapexml(text){
+	var s = text + '';
+	return s.replace(encregex, function($$) { return encodings[$$]; }).replace(coderegex,function(m,c) {return String.fromCharCode(parseInt(c,16));});
+}
+var decregex=/[&<>'"]/g, charegex = /[\u0000-\u0008\u000b-\u001f]/g;
+function escapexml(text){
+	var s = text + '';
+	return s.replace(decregex, function(y) { return rencoding[y]; }).replace(charegex,function(s) { return "_x" + ("000"+s.charCodeAt(0).toString(16)).substr(-4) + "_";});
+}
+
+function parsexmlbool(value, tag) {
+	switch(value) {
+		case '1': case 'true': case 'TRUE': return true;
+		/* case '0': case 'false': case 'FALSE':*/
+		default: return false;
+	}
+}
+
+function datenum(v) {
+	var epoch = Date.parse(v);
+	return (epoch + 2209161600000) / (24 * 60 * 60 * 1000);
+}
+
+/* ISO 8601 Duration */
+function parse_isodur(s) {
+	var sec = 0, mt = 0, time = false;
+	var m = s.match(/P([0-9\.]+Y)?([0-9\.]+M)?([0-9\.]+D)?T([0-9\.]+H)?([0-9\.]+M)?([0-9\.]+S)?/);
+	if(!m) throw new Error("|" + s + "| is not an ISO8601 Duration");
+	for(var i = 1; i != m.length; ++i) {
+		if(!m[i]) continue;
+		mt = 1;
+		if(i > 3) time = true;
+		switch(m[i].substr(m[i].length-1)) {
+			case 'Y':
+				throw new Error("Unsupported ISO Duration Field: " + m[i].substr(m[i].length-1));
+			case 'D': mt *= 24;
+				/* falls through */
+			case 'H': mt *= 60;
+				/* falls through */
+			case 'M':
+				if(!time) throw new Error("Unsupported ISO Duration Field: M");
+				else mt *= 60;
+				/* falls through */
+			case 'S': break;
+		}
+		sec += mt * parseInt(m[i], 10);
+	}
+	return sec;
+}
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/23_xlml.js b/Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/23_xlml.js
new file mode 100644
index 0000000..d62fbfa
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/23_xlml.js
@@ -0,0 +1,8 @@
+/* copied from js-xls (C) SheetJS Apache2 license */
+function xlml_normalize(d) {
+	if(has_buf && Buffer.isBuffer(d)) return d.toString('utf8');
+	if(typeof d === 'string') return d;
+	throw "badf";
+}
+
+var xlmlregex = /<(\/?)([a-z0-9]*:|)([\w-]+)[^>]*>/mg;
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/30_manifest.js b/Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/30_manifest.js
new file mode 100644
index 0000000..5422825
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/30_manifest.js
@@ -0,0 +1,20 @@
+/* Part 3 Section 4 Manifest File */
+var CT_ODS = "application/vnd.oasis.opendocument.spreadsheet";
+var parse_manifest = function(d, opts) {
+	var str = xlml_normalize(d);
+	var Rn;
+	var FEtag;
+	while((Rn = xlmlregex.exec(str))) switch(Rn[3]) {
+		case 'manifest': break; // 4.2 <manifest:manifest>
+		case 'file-entry': // 4.3 <manifest:file-entry>
+			FEtag = parsexmltag(Rn[0]);
+			if(FEtag.path == '/' && FEtag.type !== CT_ODS) throw new Error("This OpenDocument is not a spreadsheet");
+			break;
+		case 'encryption-data': // 4.4 <manifest:encryption-data>
+		case 'algorithm': // 4.5 <manifest:algorithm>
+		case 'start-key-generation': // 4.6 <manifest:start-key-generation>
+		case 'key-derivation': // 4.7 <manifest:key-derivation>
+			throw new Error("Unsupported ODS Encryption");
+		default: throw Rn;
+	}
+};
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/40_helpers.js b/Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/40_helpers.js
new file mode 100644
index 0000000..53f4bb8
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/40_helpers.js
@@ -0,0 +1,20 @@
+var parse_text_p = function(text, tag) {
+	return utf8read(text.replace(/<text:s\/>/g," ").replace(/<[^>]*>/g,""));
+};
+
+var utf8read = function utf8reada(orig) {
+	var out = "", i = 0, c = 0, d = 0, e = 0, f = 0, w = 0;
+	while (i < orig.length) {
+		c = orig.charCodeAt(i++);
+		if (c < 128) { out += String.fromCharCode(c); continue; }
+		d = orig.charCodeAt(i++);
+		if (c>191 && c<224) { out += String.fromCharCode(((c & 31) << 6) | (d & 63)); continue; }
+		e = orig.charCodeAt(i++);
+		if (c < 240) { out += String.fromCharCode(((c & 15) << 12) | ((d & 63) << 6) | (e & 63)); continue; }
+		f = orig.charCodeAt(i++);
+		w = (((c & 7) << 18) | ((d & 63) << 12) | ((e & 63) << 6) | (f & 63))-65536;
+		out += String.fromCharCode(0xD800 + ((w>>>10)&1023));
+		out += String.fromCharCode(0xDC00 + (w&1023));
+	}
+	return out;
+};
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/60_content.js b/Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/60_content.js
new file mode 100644
index 0000000..4fca74b
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/60_content.js
@@ -0,0 +1,210 @@
+var parse_content_xml = (function() {
+
+	var number_formats = {
+		/* ods name: [short ssf fmt, long ssf fmt] */
+		day: ["d", "dd"],
+		month: ["m", "mm"],
+		year: ["y", "yy"],
+		hours: ["h", "hh"],
+		minutes: ["m", "mm"],
+		seconds: ["s", "ss"],
+		"am-pm": ["A/P", "AM/PM"],
+		"day-of-week": ["ddd", "dddd"]
+	};
+
+	return function pcx(d, opts) {
+		var str = xlml_normalize(d);
+		var state = [], tmp;
+		var tag;
+		var NFtag, NF, pidx;
+		var sheetag;
+		var Sheets = {}, SheetNames = [], ws = {};
+		var Rn, q;
+		var ctag;
+		var textp, textpidx, textptag;
+		var R, C, range = {s: {r:1000000,c:10000000}, e: {r:0, c:0}};
+		var number_format_map = {};
+		var merges = [], mrange = {}, mR = 0, mC = 0;
+
+		while((Rn = xlmlregex.exec(str))) switch(Rn[3]) {
+
+			case 'table': // 9.1.2 <table:table>
+				if(Rn[1]==='/') {
+					if(range.e.c >= range.s.c && range.e.r >= range.s.r) ws['!ref'] = get_utils().encode_range(range);
+					if(merges.length) ws['!merges'] = merges;
+					SheetNames.push(sheetag.name);
+					Sheets[sheetag.name] = ws;
+				}
+				else if(Rn[0].charAt(Rn[0].length-2) !== '/') {
+					sheetag = parsexmltag(Rn[0]);
+					R = C = -1;
+					range.s.r = range.s.c = 10000000; range.e.r = range.e.c = 0;
+					ws = {}; merges = [];
+				}
+				break;
+
+			case 'table-row': // 9.1.3 <table:table-row>
+				if(Rn[1] === '/') break;
+				++R; C = -1; break;
+			case 'covered-table-cell': // 9.1.5 table:covered-table-cell
+				++C; break; /* stub */
+			case 'table-cell':
+				if(Rn[0].charAt(Rn[0].length-2) === '/') {
+					ctag = parsexmltag(Rn[0]);
+					if(ctag['number-columns-repeated']) C+= parseInt(ctag['number-columns-repeated'], 10);
+					else ++C;
+				}
+				else if(Rn[1]!=='/') {
+					++C;
+					if(C > range.e.c) range.e.c = C;
+					if(R > range.e.r) range.e.r = R;
+					if(C < range.s.c) range.s.c = C;
+					if(R < range.s.r) range.s.r = R;
+					ctag = parsexmltag(Rn[0]);
+					q = {t:ctag['value-type'], v:null};
+					if(ctag['number-columns-spanned'] || ctag['number-rows-spanned']) {
+						mR = parseInt(ctag['number-rows-spanned'],10) || 0;
+						mC = parseInt(ctag['number-columns-spanned'],10) || 0;
+						mrange = {s: {r:R,c:C}, e:{r:R + mR-1,c:C + mC-1}};
+						merges.push(mrange);
+					}
+					/* 19.385 office:value-type */
+					switch(q.t) {
+						case 'boolean': q.t = 'b'; q.v = parsexmlbool(ctag['boolean-value']); break;
+						case 'float': q.t = 'n'; q.v = parseFloat(ctag.value); break;
+						case 'percentage': q.t = 'n'; q.v = parseFloat(ctag.value); break;
+						case 'currency': q.t = 'n'; q.v = parseFloat(ctag.value); break;
+						case 'date': q.t = 'n'; q.v = datenum(ctag['date-value']); q.z = 'm/d/yy'; break;
+						case 'time': q.t = 'n'; q.v = parse_isodur(ctag['time-value'])/86400; break;
+						case 'string': q.t = 's'; break;
+						default: throw new Error('Unsupported value type ' + q.t);
+					}
+				} else {
+					if(q.t === 's') q.v = textp;
+					if(textp) q.w = textp;
+					if(!(opts.sheetRows && opts.sheetRows < R)) ws[get_utils().encode_cell({r:R,c:C})] = q;
+					q = null;
+				}
+				break; // 9.1.4 <table:table-cell>
+
+			/* pure state */
+			case 'document-content': // 3.1.3.2 <office:document-content>
+			case 'spreadsheet': // 3.7 <office:spreadsheet>
+			case 'scripts': // 3.12 <office:scripts>
+			case 'font-face-decls': // 3.14 <office:font-face-decls>
+				if(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw "Bad state: "+tmp;}
+				else if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);
+				break;
+
+			/* ignore state */
+			case 'shapes': // 9.2.8 <table:shapes>
+			case 'frame': // 10.4.2 <draw:frame>
+				if(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw "Bad state: "+tmp;}
+				else if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], false]);
+				break;
+
+			case 'number-style': // 16.27.2 <number:number-style>
+			case 'percentage-style': // 16.27.9 <number:percentage-style>
+			case 'date-style': // 16.27.10 <number:date-style>
+			case 'time-style': // 16.27.18 <number:time-style>
+				if(Rn[1]==='/'){
+					number_format_map[NFtag.name] = NF;
+					if((tmp=state.pop())[0]!==Rn[3]) throw "Bad state: "+tmp;
+				} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {
+					NF = "";
+					NFtag = parsexmltag(Rn[0]);
+					state.push([Rn[3], true]);
+				} break;
+
+			case 'script': break; // 3.13 <office:script>
+			case 'automatic-styles': break; // 3.15.3 <office:automatic-styles>
+
+			case 'style': break; // 16.2 <style:style>
+			case 'font-face': break; // 16.21 <style:font-face>
+
+			case 'paragraph-properties': break; // 17.6 <style:paragraph-properties>
+			case 'table-properties': break; // 17.15 <style:table-properties>
+			case 'table-column-properties': break; // 17.16 <style:table-column-properties>
+			case 'table-row-properties': break; // 17.17 <style:table-row-properties>
+			case 'table-cell-properties': break; // 17.18 <style:table-cell-properties>
+
+			case 'number': // 16.27.3 <number:number>
+				switch(state[state.length-1][0]) {
+					case 'time-style':
+					case 'date-style':
+						tag = parsexmltag(Rn[0]);
+						NF += number_formats[Rn[3]][tag.style==='long'?1:0]; break;
+				} break;
+
+			case 'day': // 16.27.11 <number:day>
+			case 'month': // 16.27.12 <number:month>
+			case 'year': // 16.27.13 <number:year>
+			case 'era': // 16.27.14 <number:era>
+			case 'day-of-week': // 16.27.15 <number:day-of-week>
+			case 'week-of-year': // 16.27.16 <number:week-of-year>
+			case 'quarter': // 16.27.17 <number:quarter>
+			case 'hours': // 16.27.19 <number:hours>
+			case 'minutes': // 16.27.20 <number:minutes>
+			case 'seconds': // 16.27.21 <number:seconds>
+			case 'am-pm': // 16.27.22 <number:am-pm>
+				switch(state[state.length-1][0]) {
+					case 'time-style':
+					case 'date-style':
+						tag = parsexmltag(Rn[0]);
+						NF += number_formats[Rn[3]][tag.style==='long'?1:0]; break;
+				} break;
+
+			case 'boolean-style': break; // 16.27.23 <number:boolean-style>
+			case 'boolean': break; // 16.27.24 <number:boolean>
+			case 'text-style': break; // 16.27.25 <number:text-style>
+			case 'text': // 16.27.26 <number:text>
+				if(Rn[0].substr(-2) === "/>") break;
+				else if(Rn[1]==="/") switch(state[state.length-1][0]) {
+					case 'number-style':
+					case 'date-style':
+					case 'time-style':
+						NF += str.slice(pidx, Rn.index);
+						break;
+				}
+				else pidx = Rn.index + Rn[0].length;
+				break;
+			case 'text-content': break; // 16.27.27 <number:text-content>
+			case 'text-properties': break; // 16.27.27 <style:text-properties>
+
+			case 'body': break; // 3.3 16.9.6 19.726.3
+
+			case 'forms': break; // 12.25.2 13.2
+			case 'table-column': break; // 9.1.6 <table:table-column>
+
+			case 'graphic-properties': break;
+			case 'calculation-settings': break; // 9.4.1 <table:calculation-settings>
+			case 'named-expressions': break; // 9.4.11 <table:named-expressions>
+			case 'named-range': break; // 9.4.11 <table:named-range>
+			case 'span': break; // <text:span>
+			case 'p':
+				if(Rn[1]==='/') textp = parse_text_p(str.slice(textpidx,Rn.index), textptag);
+				else { textptag = parsexmltag(Rn[0]); textpidx = Rn.index + Rn[0].length; }
+				break; // <text:p>
+			case 's': break; // <text:s>
+			case 'date': break; // <*:date>
+			case 'annotation': break;
+
+			case 'object': break; // 10.4.6.2 <draw:object>
+			case 'title': break; // <*:title>
+			case 'desc': break; // <*:desc>
+
+			case 'database-ranges': break; // 9.4.14 <table:database-ranges>
+			case 'database-range': break; // 9.4.15 <table:database-range>
+			case 'filter': break; // 9.5.2 <table:filter>
+			case 'filter-and': break; // 9.5.3 <table:filter-and>
+			case 'filter-or': break; // 9.5.4 <table:filter-or>
+			case 'filter-condition': break; // 9.5.5 <table:filter-condition>
+			default: if(opts.WTF) throw Rn;
+		}
+		var out = {
+			Sheets: Sheets,
+			SheetNames: SheetNames
+		};
+		return out;
+	};
+})();
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/80_parse.js b/Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/80_parse.js
new file mode 100644
index 0000000..dffa2ba
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/80_parse.js
@@ -0,0 +1,5 @@
+/* Part 3: Packages */
+var parse_ods = function(zip, opts) {
+	//var manifest = parse_manifest(getzipdata(zip, 'META-INF/manifest.xml'));
+	return parse_content_xml(getzipdata(zip, 'content.xml'), opts);
+};
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/98_exports.js b/Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/98_exports.js
new file mode 100644
index 0000000..a7cfd5b
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/98_exports.js
@@ -0,0 +1 @@
+ODS.parse_ods = parse_ods;
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/99_footer.js b/Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/99_footer.js
new file mode 100644
index 0000000..226e2a0
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/odsbits/99_footer.js
@@ -0,0 +1 @@
+})(typeof exports !== 'undefined' ? exports : ODS);
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/package-lock.json b/Source/UBCS-WEB/src/config/js-xlsx-master/package-lock.json
new file mode 100644
index 0000000..b75b4a4
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/package-lock.json
@@ -0,0 +1,323 @@
+{
+	"name": "xlsx",
+	"version": "0.8.20",
+	"lockfileVersion": 1,
+	"dependencies": {
+		"adler-32": {
+			"version": "0.2.1",
+			"resolved": "https://registry.npmjs.org/adler-32/-/adler-32-0.2.1.tgz",
+			"integrity": "sha1-GqRqmWEIloj7iOJULxEvyCzdZJY="
+		},
+		"align-text": {
+			"version": "0.1.4",
+			"resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
+			"integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
+			"dev": true
+		},
+		"camelcase": {
+			"version": "1.2.1",
+			"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+			"integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
+			"dev": true
+		},
+		"center-align": {
+			"version": "0.1.3",
+			"resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+			"integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
+			"dev": true
+		},
+		"cfb": {
+			"version": "0.10.3",
+			"resolved": "https://registry.npmjs.org/cfb/-/cfb-0.10.3.tgz",
+			"integrity": "sha1-OwvnFR0JugKIlKol+OuD8Nu+itk="
+		},
+		"cliui": {
+			"version": "2.1.0",
+			"resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+			"integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+			"dev": true,
+			"dependencies": {
+				"wordwrap": {
+					"version": "0.0.2",
+					"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
+					"integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
+					"dev": true
+				}
+			}
+		},
+		"codepage": {
+			"version": "1.3.8",
+			"resolved": "https://registry.npmjs.org/codepage/-/codepage-1.3.8.tgz",
+			"integrity": "sha1-Ty5dfAl13ij4hJgFjcta/KtqX3E=",
+			"dependencies": {
+				"concat-stream": {
+					"version": "1.4.7",
+					"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.4.7.tgz",
+					"integrity": "sha1-DOqke4elgdKnp4K5K4HVAgw/mSU=",
+					"dependencies": {
+						"readable-stream": {
+							"version": "1.1.13",
+							"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz",
+							"integrity": "sha1-9u73ZPUUyJ4rniMUanW6EGdW0j4=",
+							"dependencies": {
+								"isarray": {
+									"version": "0.0.1",
+									"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+									"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+								},
+								"string_decoder": {
+									"version": "0.10.31",
+									"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+									"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
+								}
+							}
+						},
+						"typedarray": {
+							"version": "0.0.6",
+							"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+							"integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
+						}
+					}
+				},
+				"voc": {
+					"version": "0.5.0",
+					"resolved": "https://registry.npmjs.org/voc/-/voc-0.5.0.tgz",
+					"integrity": "sha1-vmynx25KV9kwzID2sx+9gMqGBFw="
+				}
+			}
+		},
+		"commander": {
+			"version": "2.6.0",
+			"resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz",
+			"integrity": "sha1-nfflL7Kgyw+4kFjugMMQQiXzfh0="
+		},
+		"core-util-is": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+			"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+		},
+		"crc-32": {
+			"version": "0.2.2",
+			"resolved": "https://registry.npmjs.org/crc-32/-/crc-32-0.2.2.tgz",
+			"integrity": "sha1-9EBWigxqRfDuu7V8M7FWAV9PBLY="
+		},
+		"decamelize": {
+			"version": "1.2.0",
+			"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+			"integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+			"dev": true
+		},
+		"inherits": {
+			"version": "2.0.3",
+			"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+			"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+		},
+		"is-buffer": {
+			"version": "1.1.6",
+			"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+			"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+			"dev": true
+		},
+		"jszip": {
+			"version": "2.4.0",
+			"resolved": "https://registry.npmjs.org/jszip/-/jszip-2.4.0.tgz",
+			"integrity": "sha1-SHqTt2w7/6bLCFzWHrk06r4tKU8=",
+			"dependencies": {
+				"pako": {
+					"version": "0.2.5",
+					"resolved": "https://registry.npmjs.org/pako/-/pako-0.2.5.tgz",
+					"integrity": "sha1-Nt8ZRno4eRUumtzER4TwfQqAxSU="
+				}
+			}
+		},
+		"kind-of": {
+			"version": "3.2.2",
+			"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+			"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+			"dev": true
+		},
+		"lazy-cache": {
+			"version": "1.0.4",
+			"resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+			"integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
+			"dev": true
+		},
+		"lodash": {
+			"version": "4.17.5",
+			"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+			"integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+			"dev": true
+		},
+		"longest": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
+			"integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
+			"dev": true
+		},
+		"lru-cache": {
+			"version": "2.7.3",
+			"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
+			"integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI="
+		},
+		"minimatch": {
+			"version": "0.2.14",
+			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
+			"integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo="
+		},
+		"mocha": {
+			"version": "2.1.0",
+			"resolved": "https://registry.npmjs.org/mocha/-/mocha-2.1.0.tgz",
+			"integrity": "sha1-d3Uv5ZL7kJJ1aCevRs0+rhuDZxw=",
+			"dependencies": {
+				"commander": {
+					"version": "2.3.0",
+					"resolved": "https://registry.npmjs.org/commander/-/commander-2.3.0.tgz",
+					"integrity": "sha1-/UMOiJgy7DU7ms0d4hfBHLPu+HM="
+				},
+				"debug": {
+					"version": "2.0.0",
+					"resolved": "https://registry.npmjs.org/debug/-/debug-2.0.0.tgz",
+					"integrity": "sha1-ib2d9nMrUSVrxnBTQrugLtEhMe8=",
+					"dependencies": {
+						"ms": {
+							"version": "0.6.2",
+							"resolved": "https://registry.npmjs.org/ms/-/ms-0.6.2.tgz",
+							"integrity": "sha1-2JwhJMb9wTU9Zai3e/GqxLGTcIw="
+						}
+					}
+				},
+				"diff": {
+					"version": "1.0.8",
+					"resolved": "https://registry.npmjs.org/diff/-/diff-1.0.8.tgz",
+					"integrity": "sha1-NDJ2MI7Jkbe8giZ+1VvBQR+XFmY="
+				},
+				"escape-string-regexp": {
+					"version": "1.0.2",
+					"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz",
+					"integrity": "sha1-Tbwv5nTnGUnK8/smlc5/LcHZqNE="
+				},
+				"glob": {
+					"version": "3.2.3",
+					"resolved": "https://registry.npmjs.org/glob/-/glob-3.2.3.tgz",
+					"integrity": "sha1-4xPusknHr/qlxHUoaw4RW1mDlGc=",
+					"dependencies": {
+						"graceful-fs": {
+							"version": "2.0.3",
+							"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz",
+							"integrity": "sha1-fNLNsiiko/Nule+mzBQt59GhNtA="
+						}
+					}
+				},
+				"growl": {
+					"version": "1.8.1",
+					"resolved": "https://registry.npmjs.org/growl/-/growl-1.8.1.tgz",
+					"integrity": "sha1-Sy3sjZB+k9szZiTc7AGDUC+MlCg="
+				},
+				"jade": {
+					"version": "0.26.3",
+					"resolved": "https://registry.npmjs.org/jade/-/jade-0.26.3.tgz",
+					"integrity": "sha1-jxDXl32NefL2/4YqgbBRPMslaGw=",
+					"dependencies": {
+						"commander": {
+							"version": "0.6.1",
+							"resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz",
+							"integrity": "sha1-+mihT2qUXVTbvlDYzbMyDp47GgY="
+						},
+						"mkdirp": {
+							"version": "0.3.0",
+							"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz",
+							"integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4="
+						}
+					}
+				},
+				"mkdirp": {
+					"version": "0.5.0",
+					"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz",
+					"integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=",
+					"dependencies": {
+						"minimist": {
+							"version": "0.0.8",
+							"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+							"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+						}
+					}
+				}
+			}
+		},
+		"repeat-string": {
+			"version": "1.6.1",
+			"resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+			"integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+			"dev": true
+		},
+		"right-align": {
+			"version": "0.1.3",
+			"resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
+			"integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
+			"dev": true
+		},
+		"sigmund": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
+			"integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA="
+		},
+		"source-map": {
+			"version": "0.5.7",
+			"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+			"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+			"dev": true
+		},
+		"ssf": {
+			"version": "0.8.2",
+			"resolved": "https://registry.npmjs.org/ssf/-/ssf-0.8.2.tgz",
+			"integrity": "sha1-udTcahwbz3b4q/qW19dlb7Kr7NY=",
+			"dependencies": {
+				"colors": {
+					"version": "0.6.2",
+					"resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz",
+					"integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w="
+				},
+				"frac": {
+					"version": "0.3.1",
+					"resolved": "https://registry.npmjs.org/frac/-/frac-0.3.1.tgz",
+					"integrity": "sha1-V3Z3t/3L5vr3xGHxgB00E3zaQ1Q="
+				},
+				"voc": {
+					"version": "0.5.0",
+					"resolved": "https://registry.npmjs.org/voc/-/voc-0.5.0.tgz",
+					"integrity": "sha1-vmynx25KV9kwzID2sx+9gMqGBFw="
+				}
+			}
+		},
+		"uglify-js": {
+			"version": "2.8.29",
+			"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
+			"integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
+			"dev": true
+		},
+		"uglify-to-browserify": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
+			"integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
+			"dev": true,
+			"optional": true
+		},
+		"window-size": {
+			"version": "0.1.0",
+			"resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
+			"integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
+			"dev": true
+		},
+		"xlsjs": {
+			"version": "0.7.5",
+			"resolved": "https://registry.npmjs.org/xlsjs/-/xlsjs-0.7.5.tgz",
+			"integrity": "sha1-jqJH1WPGAmpto0LQRZHbqdGGFX0="
+		},
+		"yargs": {
+			"version": "3.10.0",
+			"resolved": "http://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
+			"integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+			"dev": true
+		}
+	}
+}
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/package.json b/Source/UBCS-WEB/src/config/js-xlsx-master/package.json
new file mode 100644
index 0000000..1c04127
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/package.json
@@ -0,0 +1,39 @@
+{
+	"name": "xlsx",
+	"version": "0.8.20",
+	"author": "sheetjs",
+	"description": "Excel (XLSB/XLSX/XLSM/XLS/XML) and ODS spreadsheet parser and writer (extended to enable read/write of cell formats with xlsx files)",
+	"keywords": [ "excel", "xls", "xlsx", "xlsb", "xlsm", "ods", "office", "spreadsheet" ],
+	"bin": {
+		"xlsx": "./bin/xlsx.njs"
+	},
+	"main": "./xlsx",
+	"dependencies": {
+		"ssf":"~0.8.1",
+		"codepage":"~1.3.6",
+		"cfb":">=0.10.0",
+		"jszip":"2.4.0",
+		"crc-32":"",
+		"adler-32":"",
+		"commander":""
+	},
+	"devDependencies": {
+		"cheerio":"^0.19.0",
+		"mocha":"",
+		"xlsjs":"",
+		"uglify-js":""
+	},
+	"repository": { "type":"git", "url":"git://github.com/protobi/js-xlsx.git#beta" },
+	"scripts": {
+		"pretest": "git submodule init && git submodule update",
+		"test": "make test"
+	},
+	"config": {
+		"blanket": {
+			"pattern": "xlsx.js"
+		}
+	},
+	"bugs": { "url": "https://github.com/protobi/js-xlsx/issues" },
+	"license": "Apache-2.0",
+	"engines": { "node": ">=0.8" }
+}
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/shim.js b/Source/UBCS-WEB/src/config/js-xlsx-master/shim.js
new file mode 100644
index 0000000..e3d7840
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/shim.js
@@ -0,0 +1,237 @@
+// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
+if (!Object.keys) {
+  Object.keys = (function () {
+    var hasOwnProperty = Object.prototype.hasOwnProperty,
+        hasDontEnumBug = !({toString: null}).propertyIsEnumerable('toString'),
+        dontEnums = [
+          'toString',
+          'toLocaleString',
+          'valueOf',
+          'hasOwnProperty',
+          'isPrototypeOf',
+          'propertyIsEnumerable',
+          'constructor'
+        ],
+        dontEnumsLength = dontEnums.length;
+
+    return function (obj) {
+      if (typeof obj !== 'object' && typeof obj !== 'function' || obj === null) throw new TypeError('Object.keys called on non-object');
+
+      var result = [];
+
+      for (var prop in obj) {
+        if (hasOwnProperty.call(obj, prop)) result.push(prop);
+      }
+
+      if (hasDontEnumBug) {
+        for (var i=0; i < dontEnumsLength; i++) {
+          if (hasOwnProperty.call(obj, dontEnums[i])) result.push(dontEnums[i]);
+        }
+      }
+      return result;
+    };
+  })();
+}
+
+// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
+if (!Array.prototype.filter)
+{
+  Array.prototype.filter = function(fun /*, thisp */)
+  {
+    "use strict";
+
+    if (this == null)
+      throw new TypeError();
+
+    var t = Object(this);
+    var len = t.length >>> 0;
+    if (typeof fun != "function")
+      throw new TypeError();
+
+    var res = [];
+    var thisp = arguments[1];
+    for (var i = 0; i < len; i++)
+    {
+      if (i in t)
+      {
+        var val = t[i]; // in case fun mutates this
+        if (fun.call(thisp, val, i, t))
+          res.push(val);
+      }
+    }
+
+    return res;
+  };
+}
+
+// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Trim
+if (!String.prototype.trim) {
+  String.prototype.trim = function () {
+    return this.replace(/^\s+|\s+$/g, '');
+  };
+}
+
+// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
+if (!Array.prototype.forEach)
+{
+  Array.prototype.forEach = function(fun /*, thisArg */)
+  {
+    "use strict";
+
+    if (this === void 0 || this === null)
+      throw new TypeError();
+
+    var t = Object(this);
+    var len = t.length >>> 0;
+    if (typeof fun !== "function")
+      throw new TypeError();
+
+    var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
+    for (var i = 0; i < len; i++)
+    {
+      if (i in t)
+        fun.call(thisArg, t[i], i, t);
+    }
+  };
+}
+
+// Production steps of ECMA-262, Edition 5, 15.4.4.19
+// Reference: http://es5.github.com/#x15.4.4.19
+if (!Array.prototype.map) {
+  Array.prototype.map = function(callback, thisArg) {
+
+    var T, A, k;
+
+    if (this == null) {
+      throw new TypeError(" this is null or not defined");
+    }
+
+    // 1. Let O be the result of calling ToObject passing the |this| value as the argument.
+    var O = Object(this);
+
+    // 2. Let lenValue be the result of calling the Get internal method of O with the argument "length".
+    // 3. Let len be ToUint32(lenValue).
+    var len = O.length >>> 0;
+
+    // 4. If IsCallable(callback) is false, throw a TypeError exception.
+    // See: http://es5.github.com/#x9.11
+    if (typeof callback !== "function") {
+      throw new TypeError(callback + " is not a function");
+    }
+
+    // 5. If thisArg was supplied, let T be thisArg; else let T be undefined.
+    if (thisArg) {
+      T = thisArg;
+    }
+
+    // 6. Let A be a new array created as if by the expression new Array(len) where Array is
+    // the standard built-in constructor with that name and len is the value of len.
+    A = new Array(len);
+
+    // 7. Let k be 0
+    k = 0;
+
+    // 8. Repeat, while k < len
+    while(k < len) {
+
+      var kValue, mappedValue;
+
+      // a. Let Pk be ToString(k).
+      //   This is implicit for LHS operands of the in operator
+      // b. Let kPresent be the result of calling the HasProperty internal method of O with argument Pk.
+      //   This step can be combined with c
+      // c. If kPresent is true, then
+      if (k in O) {
+
+        // i. Let kValue be the result of calling the Get internal method of O with argument Pk.
+        kValue = O[ k ];
+
+        // ii. Let mappedValue be the result of calling the Call internal method of callback
+        // with T as the this value and argument list containing kValue, k, and O.
+        mappedValue = callback.call(T, kValue, k, O);
+
+        // iii. Call the DefineOwnProperty internal method of A with arguments
+        // Pk, Property Descriptor {Value: mappedValue, : true, Enumerable: true, Configurable: true},
+        // and false.
+
+        // In browsers that support Object.defineProperty, use the following:
+        // Object.defineProperty(A, Pk, { value: mappedValue, writable: true, enumerable: true, configurable: true });
+
+        // For best browser support, use the following:
+        A[ k ] = mappedValue;
+      }
+      // d. Increase k by 1.
+      k++;
+    }
+
+    // 9. return A
+    return A;
+  };
+}
+
+// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf
+if (!Array.prototype.indexOf) {
+  Array.prototype.indexOf = function (searchElement, fromIndex) {
+    if ( this === undefined || this === null ) {
+      throw new TypeError( '"this" is null or not defined' );
+    }
+
+    var length = this.length >>> 0; // Hack to convert object.length to a UInt32
+
+    fromIndex = +fromIndex || 0;
+
+    if (Math.abs(fromIndex) === Infinity) {
+      fromIndex = 0;
+    }
+
+    if (fromIndex < 0) {
+      fromIndex += length;
+      if (fromIndex < 0) {
+        fromIndex = 0;
+      }
+    }
+
+    for (;fromIndex < length; fromIndex++) {
+      if (this[fromIndex] === searchElement) {
+        return fromIndex;
+      }
+    }
+
+    return -1;
+  };
+}
+// Based on https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray
+
+if (! Array.isArray) {
+    Array.isArray = function(obj) {
+        return Object.prototype.toString.call(obj) === "[object Array]";
+    };
+}
+
+// https://github.com/ttaubert/node-arraybuffer-slice
+// (c) 2013 Tim Taubert <tim@timtaubert.de>
+// arraybuffer-slice may be freely distributed under the MIT license.
+
+"use strict";
+
+if (typeof ArrayBuffer !== 'undefined' && !ArrayBuffer.prototype.slice) {
+  ArrayBuffer.prototype.slice = function (begin, end) {
+    begin = (begin|0) || 0;
+    var num = this.byteLength;
+    end = end === (void 0) ? num : (end|0);
+
+    // Handle negative values.
+    if (begin < 0) begin += num;
+    if (end < 0) end += num;
+
+    if (num === 0 || begin >= num || begin >= end) {
+      return new ArrayBuffer(0);
+    }
+
+    var length = Math.min(num - begin, end - begin);
+    var target = new ArrayBuffer(length);
+    var targetArray = new Uint8Array(target);
+    targetArray.set(new Uint8Array(this, begin, length));
+    return target;
+  };
+}
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/test.js b/Source/UBCS-WEB/src/config/js-xlsx-master/test.js
new file mode 100644
index 0000000..296bcb0
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/test.js
@@ -0,0 +1,1129 @@
+/* vim: set ts=2: */
+/*jshint loopfunc:true, eqnull:true */
+var X;
+var X; var XLSX = require('./')
+var modp = './';
+//var modp = 'xlsx';
+var fs = require('fs'), assert = require('assert');
+describe('source',function(){it('should load',function(){X=require(modp);});});
+
+var opts = {cellNF: true};
+if(process.env.WTF) {
+	opts.WTF = true;
+	opts.cellStyles = true;
+}
+var fullex = [".xlsb", ".xlsm", ".xlsx"];
+var ex = fullex.slice(); ex.push(".ods"); ex.push(".xls"); ex.push("xml");
+if(process.env.FMTS === "full") process.env.FMTS = ex.join(":");
+if(process.env.FMTS) ex=process.env.FMTS.split(":").map(function(x){return x[0]==="."?x:"."+x;});
+var exp = ex.map(function(x){ return x + ".pending"; });
+function test_file(x){ return ex.indexOf(x.substr(-5))>=0||exp.indexOf(x.substr(-13))>=0 || ex.indexOf(x.substr(-4))>=0||exp.indexOf(x.substr(-12))>=0; }
+
+var files = (fs.existsSync('tests.lst') ? fs.readFileSync('tests.lst', 'utf-8').split("\n") : fs.readdirSync('test_files')).filter(test_file);
+var fileA = (fs.existsSync('testA.lst') ? fs.readFileSync('testA.lst', 'utf-8').split("\n") : []).filter(test_file);
+
+/* Excel enforces 31 character sheet limit, although technical file limit is 255 */
+function fixsheetname(x) { return x.substr(0,31); }
+
+function stripbom(x) { return x.replace(/^\ufeff/,""); }
+function fixcsv(x) { return stripbom(x).replace(/\t/g,",").replace(/#{255}/g,"").replace(/"/g,"").replace(/[\n\r]+/g,"\n").replace(/\n*$/,""); }
+function fixjson(x) { return x.replace(/[\r\n]+$/,""); }
+
+var dir = "./test_files/";
+
+var paths = {
+	cpxls:  dir + 'custom_properties.xls',
+	cpxml:  dir + 'custom_properties.xls.xml',
+	cpxlsx:  dir + 'custom_properties.xlsx',
+	cpxlsb:  dir + 'custom_properties.xlsb',
+	cssxls: dir + 'cell_style_simple.xls',
+	cssxml: dir + 'cell_style_simple.xml',
+	cssxlsx: dir + 'cell_style_simple.xlsx',
+	cssxlsb: dir + 'cell_style_simple.xlsb',
+	cstxls: dir + 'comments_stress_test.xls',
+	cstxml: dir + 'comments_stress_test.xls.xml',
+	cstxlsx: dir + 'comments_stress_test.xlsx',
+	cstxlsb: dir + 'comments_stress_test.xlsb',
+	fstxls: dir + 'formula_stress_test.xls',
+	fstxml: dir + 'formula_stress_test.xls.xml',
+	fstxlsx: dir + 'formula_stress_test.xlsx',
+	fstxlsb: dir + 'formula_stress_test.xlsb',
+	fstods: dir + 'formula_stress_test.ods',
+	hlxls:  dir + 'hyperlink_stress_test_2011.xls',
+	hlxml:  dir + 'hyperlink_stress_test_2011.xml',
+	hlxlsx:  dir + 'hyperlink_stress_test_2011.xlsx',
+	hlxlsb:  dir + 'hyperlink_stress_test_2011.xlsb',
+	lonxls: dir + 'LONumbers.xls',
+	lonxlsx: dir + 'LONumbers.xlsx',
+	mcxls:  dir + 'merge_cells.xls',
+	mcxml:  dir + 'merge_cells.xls.xml',
+	mcxlsx:  dir + 'merge_cells.xlsx',
+	mcxlsb:  dir + 'merge_cells.xlsb',
+	mcods:  dir + 'merge_cells.ods',
+	nfxls:  dir + 'number_format.xls',
+	nfxml:  dir + 'number_format.xls.xml',
+	nfxlsx:  dir + 'number_format.xlsm',
+	nfxlsb:  dir + 'number_format.xlsb',
+	dtxlsx:  dir + 'xlsx-stream-d-date-cell.xlsx',
+	dtxlsb:  dir + 'xlsx-stream-d-date-cell.xlsb',
+	swcxls: dir + 'apachepoi_SimpleWithComments.xls',
+	swcxml: dir + '2011/apachepoi_SimpleWithComments.xls.xml',
+	swcxlsx: dir + 'apachepoi_SimpleWithComments.xlsx',
+	swcxlsb: dir + '2013/apachepoi_SimpleWithComments.xlsx.xlsb'
+};
+
+var N1 = 'XLSX';
+var N2 = 'XLSB';
+var N3 = 'XLS';
+var N4 = 'XML';
+
+function parsetest(x, wb, full, ext) {
+	ext = (ext ? " [" + ext + "]": "");
+	if(!full && ext) return;
+	describe(x + ext + ' should have all bits', function() {
+		var sname = dir + '2011/' + x.substr(x.lastIndexOf('/')+1) + '.sheetnames';
+		it('should have all sheets', function() {
+			wb.SheetNames.forEach(function(y) { assert(wb.Sheets[y], 'bad sheet ' + y); });
+		});
+		it('should have the right sheet names', fs.existsSync(sname) ? function() {
+			var file = fs.readFileSync(sname, 'utf-8').replace(/\r/g,"");
+			var names = wb.SheetNames.map(fixsheetname).join("\n") + "\n";
+			assert.equal(names, file);
+		} : null);
+	});
+	describe(x + ext + ' should generate CSV', function() {
+		wb.SheetNames.forEach(function(ws, i) {
+			it('#' + i + ' (' + ws + ')', function() {
+				X.utils.make_csv(wb.Sheets[ws]);
+			});
+		});
+	});
+	describe(x + ext + ' should generate JSON', function() {
+		wb.SheetNames.forEach(function(ws, i) {
+			it('#' + i + ' (' + ws + ')', function() {
+				X.utils.sheet_to_row_object_array(wb.Sheets[ws]);
+			});
+		});
+	});
+	describe(x + ext + ' should generate formulae', function() {
+		wb.SheetNames.forEach(function(ws, i) {
+			it('#' + i + ' (' + ws + ')', function() {
+				X.utils.get_formulae(wb.Sheets[ws]);
+			});
+		});
+	});
+	if(!full) return;
+	var getfile = function(dir, x, i, type) {
+		var name = (dir + x + '.' + i + type);
+		if(x.substr(-5) === ".xlsb") {
+			root = x.slice(0,-5);
+			if(!fs.existsSync(name)) name=(dir + root + '.xlsx.' + i + type);
+			if(!fs.existsSync(name)) name=(dir + root + '.xlsm.' + i + type);
+			if(!fs.existsSync(name)) name=(dir + root + '.xls.'  + i + type);
+		}
+		if(x.substr(-4) === ".xls") {
+			root = x.slice(0,-4);
+			if(!fs.existsSync(name)) name=(dir + root + '.xlsx.' + i + type);
+			if(!fs.existsSync(name)) name=(dir + root + '.xlsm.' + i + type);
+			if(!fs.existsSync(name)) name=(dir + root + '.xlsb.' + i + type);
+		}
+		return name;
+	};
+	describe(x + ext + ' should generate correct CSV output', function() {
+		wb.SheetNames.forEach(function(ws, i) {
+			var name = getfile(dir, x, i, ".csv");
+			it('#' + i + ' (' + ws + ')', fs.existsSync(name) ? function() {
+        var file = fixcsv(fs.readFileSync(name, 'utf-8'));
+        var csv = fixcsv(X.utils.make_csv(wb.Sheets[ws]));
+        var result = (file == csv);
+        if (!result) {  //  try again parsing the file ourselves
+          // somehow these workbooks are getting here having been parsec without {cellNF: true}
+          // so re-read them with {cellNF:true} and all works just great.
+          // THus these CSV tests seem to fail due to issue with test framework rather than XLSX itself
+          var wb1 = X.readFile(wb.FILENAME, {cellStyles:true, cellNF:true});
+          var csv1 = fixcsv(X.utils.make_csv(wb1.Sheets[ws]));
+          var result1 = (file == csv1);
+
+          var wb2 = XLSX.read(XLSX.write(wb1, {type:"buffer", bookType:'xlsx'}), {cellStyles: true, cellNF:true})
+          var csv2 = fixcsv(XLSX.utils.make_csv(wb2.Sheets[ws]));
+          var result2 = (file == csv2);
+          console.error("CSV Diff: " + [wb.FILENAME, csv.length, file.length, result, result1, result2]);
+        }
+        assert.equal(result ||  result2, true, "CSV badness");
+			} : null);
+		});
+	});
+	describe(x + ext + ' should generate correct JSON output', function() {
+		wb.SheetNames.forEach(function(ws, i) {
+			var rawjson = getfile(dir, x, i, ".rawjson");
+			if(fs.existsSync(rawjson)) it('#' + i + ' (' + ws + ')', function() {
+				var file = fs.readFileSync(rawjson, 'utf-8');
+				var json = X.utils.make_json(wb.Sheets[ws],{raw:true});
+				assert.equal(JSON.stringify(json), fixjson(file), "JSON badness");
+			});
+
+			var jsonf = getfile(dir, x, i, ".json");
+			if(fs.existsSync(jsonf)) it('#' + i + ' (' + ws + ')', function() {
+				var file = fs.readFileSync(jsonf, 'utf-8');
+				var json = X.utils.make_json(wb.Sheets[ws]);
+				assert.equal(JSON.stringify(json), fixjson(file), "JSON badness");
+			});
+		});
+	});
+	if(fs.existsSync(dir + '2011/' + x + '.xml'))
+	describe(x + ext + '.xml from 2011', function() {
+		it('should parse', function() {
+			var wb = X.readFile(dir + '2011/' + x + '.xml', opts);
+		});
+	});
+	if(fs.existsSync(dir + '2013/' + x + '.xlsb'))
+	describe(x + ext + '.xlsb from 2013', function() {
+		it('should parse', function() {
+			var wb = X.readFile(dir + '2013/' + x + '.xlsb', opts);
+		});
+	});
+	if(fs.existsSync(dir + x + '.xml' + ext))
+	describe(x + '.xml', function() {
+		it('should parse', function() {
+			var wb = X.readFile(dir + x + '.xml', opts);
+		});
+	});
+}
+
+var wbtable = {};
+
+describe('should parse test files', function() {
+	files.forEach(function(x) {
+		if(!fs.existsSync(dir + x)) return;
+		it(x, x.substr(-8) == ".pending" ? null : function() {
+			var wb = X.readFile(dir + x, opts);
+			wbtable[dir + x] = wb;
+			parsetest(x, wb, true);
+		});
+		fullex.forEach(function(ext, idx) {
+			it(x + ' [' + ext + ']', function(){
+				var wb = wbtable[dir + x];
+				if(!wb) wb = X.readFile(dir + x, opts);
+        var FILENAME = wb.FILENAME;
+        wb = X.read(X.write(wb, {type:"buffer", bookType:ext.replace(/\./,"")}), {WTF:opts.WTF, cellNF: true})
+        wb.FILENAME = FILENAME;
+
+				parsetest(x, wb, ext.replace(/\./,"") !== "xlsb", ext);
+			});
+		});
+	});
+
+	fileA.forEach(function(x) {
+		if(!fs.existsSync(dir + x)) return;
+		it(x, x.substr(-8) == ".pending" ? null : function() {
+			var wb = X.readFile(dir + x, {WTF:opts.wtf, sheetRows:10});
+			parsetest(x, wb, false);
+		});
+	});
+});
+
+describe('parse options', function() {
+	var html_cell_types = ['s'];
+	before(function() {
+		X = require(modp);
+	});
+	describe('cell', function() {
+		it('XLSX should generate HTML by default', function() {
+			var wb = X.readFile(paths.cstxlsx);
+			var ws = wb.Sheets.Sheet1;
+			Object.keys(ws).forEach(function(addr) {
+				if(addr[0] === "!" || !ws.hasOwnProperty(addr)) return;
+				assert(html_cell_types.indexOf(ws[addr].t) === -1 || ws[addr].h);
+			});
+		});
+		it('XLSX should not generate HTML when requested', function() {
+			var wb = X.readFile(paths.cstxlsx, {cellHTML:false});
+			var ws = wb.Sheets.Sheet1;
+			Object.keys(ws).forEach(function(addr) {
+				if(addr[0] === "!" || !ws.hasOwnProperty(addr)) return;
+				assert(typeof ws[addr].h === 'undefined');
+			});
+		});
+		it('should generate formulae by default', function() {
+			[paths.fstxls, paths.fstxlsb].forEach(function(p) {
+				var wb = X.readFile(p);
+				var found = false;
+				wb.SheetNames.forEach(function(s) {
+					var ws = wb.Sheets[s];
+					Object.keys(ws).forEach(function(addr) {
+						if(addr[0] === "!" || !ws.hasOwnProperty(addr)) return;
+						if(typeof ws[addr].f !== 'undefined') return (found = true);
+					});
+				});
+				assert(found);
+			});
+		});
+		it('should not generate formulae when requested', function() {
+			[paths.fstxls, paths.fstxlsb].forEach(function(p) {
+				var wb =X.readFile(p,{cellFormula:false});
+				wb.SheetNames.forEach(function(s) {
+					var ws = wb.Sheets[s];
+					Object.keys(ws).forEach(function(addr) {
+						if(addr[0] === "!" || !ws.hasOwnProperty(addr)) return;
+						assert(typeof ws[addr].f === 'undefined');
+					});
+				});
+			});
+		});
+		it('should not generate number formats by default', function() {
+			[paths.nfxls, paths.nfxlsx].forEach(function(p) {
+				var wb = X.readFile(p);
+				wb.SheetNames.forEach(function(s) {
+					var ws = wb.Sheets[s];
+					Object.keys(ws).forEach(function(addr) {
+						if(addr[0] === "!" || !ws.hasOwnProperty(addr)) return;
+						assert(typeof ws[addr].z === 'undefined');
+					});
+				});
+			});
+		});
+		it('should generate number formats when requested', function() {
+			[paths.nfxls, paths.nfxlsx].forEach(function(p) {
+				var wb = X.readFile(p, {cellNF: true});
+				wb.SheetNames.forEach(function(s) {
+					var ws = wb.Sheets[s];
+					Object.keys(ws).forEach(function(addr) {
+						if(addr[0] === "!" || !ws.hasOwnProperty(addr)) return;
+						assert(ws[addr].t!== 'n' || typeof ws[addr].z !== 'undefined');
+					});
+				});
+			});
+		});
+		it('should not generate cell styles by default', function() {
+			[paths.cssxlsx, paths.cssxls, paths.cssxml].forEach(function(p) {
+			var wb = X.readFile(p);
+			wb.SheetNames.forEach(function(s) {
+				var ws = wb.Sheets[s];
+				Object.keys(ws).forEach(function(addr) {
+					if(addr[0] === "!" || !ws.hasOwnProperty(addr)) return;
+					assert(typeof ws[addr].s === 'undefined');
+				});
+			});
+			});
+		});
+		it('should generate cell styles when requested', function() {
+			/* TODO: XLS / XLML */
+			[paths.cssxlsx /*,paths.cssxls, paths.cssxml*/].forEach(function(p) {
+			var wb = X.readFile(p, {cellStyles:true});
+			var found = false;
+			wb.SheetNames.forEach(function(s) {
+				var ws = wb.Sheets[s];
+				Object.keys(ws).forEach(function(addr) {
+					if(addr[0] === "!" || !ws.hasOwnProperty(addr)) return;
+					if(typeof ws[addr].s !== 'undefined') return (found = true);
+				});
+			});
+			assert(found);
+			});
+		});
+		it('should not generate cell dates by default', function() {
+			var wb = X.readFile(paths.dtxlsx);
+			wb.SheetNames.forEach(function(s) {
+				var ws = wb.Sheets[s];
+				Object.keys(ws).forEach(function(addr) {
+					if(addr[0] === "!" || !ws.hasOwnProperty(addr)) return;
+					assert(ws[addr].t !== 'd');
+				});
+			});
+		});
+		it('XLSB should not generate cell dates', function() {
+			var wb = X.readFile(paths.dtxlsb, {cellDates: true});
+			wb.SheetNames.forEach(function(s) {
+				var ws = wb.Sheets[s];
+				Object.keys(ws).forEach(function(addr) {
+					if(addr[0] === "!" || !ws.hasOwnProperty(addr)) return;
+					assert(ws[addr].t !== 'd');
+				});
+			});
+		});
+		it('XLSX should generate cell dates when requested', function() {
+			var wb = X.readFile(paths.dtxlsx, {cellDates: true});
+			var found = false;
+			wb.SheetNames.forEach(function(s) {
+				var ws = wb.Sheets[s];
+				Object.keys(ws).forEach(function(addr) {
+					if(addr[0] === "!" || !ws.hasOwnProperty(addr)) return;
+					if(ws[addr].t === 'd') return (found = true);
+				});
+			});
+			assert(found);
+		});
+	});
+	describe('sheet', function() {
+		it('should not generate sheet stubs by default', function() {
+			[paths.mcxlsx, paths.mcxlsb, paths.mcods, paths.mcxls, paths.mcxml].forEach(function(p) {
+				var wb = X.readFile(p);
+				assert.throws(function() { return wb.Sheets.Merge.A2.v; });
+			});
+		});
+		it('should generate sheet stubs when requested', function() {
+			/* TODO: ODS/XLS/XML */
+			[paths.mcxlsx, paths.mcxlsb /*, paths.mcods, paths.mcxls, paths.mcxml*/].forEach(function(p) {
+				var wb = X.readFile(p, {sheetStubs:true});
+				assert(typeof wb.Sheets.Merge.A2.t !== 'undefined');
+			});
+		});
+		function checkcells(wb, A46, B26, C16, D2) {
+			assert((typeof wb.Sheets.Text.A46 !== 'undefined') == A46);
+			assert((typeof wb.Sheets.Text.B26 !== 'undefined') == B26);
+			assert((typeof wb.Sheets.Text.C16 !== 'undefined') == C16);
+			assert((typeof wb.Sheets.Text.D2  !== 'undefined') == D2);
+		}
+		it('should read all cells by default', function() {
+			[paths.fstxlsx, paths.fstxlsb, paths.fstods, paths.fstxls, paths.fstxml].forEach(function(p) {
+				checkcells(X.readFile(p), true, true, true, true);
+			});
+		});
+		it('sheetRows n=20', function() {
+			[paths.fstxlsx, paths.fstxlsb, paths.fstods, paths.fstxls, paths.fstxml].forEach(function(p) {
+				checkcells(X.readFile(p, {sheetRows:20}), false, false, true, true);
+			});
+		});
+		it('sheetRows n=10', function() {
+			[paths.fstxlsx, paths.fstxlsb, paths.fstods, paths.fstxls, paths.fstxml].forEach(function(p) {
+				checkcells(X.readFile(p, {sheetRows:10}), false, false, false, true);
+			});
+		});
+	});
+	describe('book', function() {
+		it('bookSheets should not generate sheets', function() {
+			[paths.mcxlsx, paths.mcxlsb, paths.mcxls, paths.mcxml].forEach(function(p) {
+				var wb = X.readFile(p, {bookSheets:true});
+				assert(typeof wb.Sheets === 'undefined');
+			});
+		});
+		it('bookProps should not generate sheets', function() {
+			[paths.nfxlsx, paths.nfxlsb, paths.nfxls, paths.nfxml].forEach(function(p) {
+				var wb = X.readFile(p, {bookProps:true});
+				assert(typeof wb.Sheets === 'undefined');
+			});
+		});
+		it('bookProps && bookSheets should not generate sheets', function() {
+			[paths.lonxlsx, paths.lonxls].forEach(function(p) {
+				var wb = X.readFile(p, {bookProps:true, bookSheets:true});
+				assert(typeof wb.Sheets === 'undefined');
+			});
+		});
+		it('should not generate deps by default', function() {
+			[paths.fstxlsx, paths.fstxlsb, paths.fstxls, paths.fstxml].forEach(function(p) {
+				var wb = X.readFile(p);
+				assert(typeof wb.Deps === 'undefined' || !(wb.Deps && wb.Deps.length>0));
+			});
+		});
+		it('bookDeps should generate deps (XLSX/XLSB)', function() {
+			[paths.fstxlsx, paths.fstxlsb].forEach(function(p) {
+				var wb = X.readFile(p, {bookDeps:true});
+				assert(typeof wb.Deps !== 'undefined' && wb.Deps.length > 0);
+			});
+		});
+		var ckf = function(wb, fields, exists) { fields.forEach(function(f) {
+			assert((typeof wb[f] !== 'undefined') == exists);
+		}); };
+		it('should not generate book files by default', function() {
+			var wb;
+			wb = X.readFile(paths.fstxlsx);
+			ckf(wb, ['files', 'keys'], false);
+			wb = X.readFile(paths.fstxlsb);
+			ckf(wb, ['files', 'keys'], false);
+			wb = X.readFile(paths.fstxls);
+			ckf(wb, ['cfb'], false);
+		});
+		it('bookFiles should generate book files', function() {
+			var wb;
+			wb = X.readFile(paths.fstxlsx, {bookFiles:true});
+			ckf(wb, ['files', 'keys'], true);
+			wb = X.readFile(paths.fstxlsb, {bookFiles:true});
+			ckf(wb, ['files', 'keys'], true);
+			wb = X.readFile(paths.fstxls, {bookFiles:true});
+			ckf(wb, ['cfb'], true);
+		});
+		it('should not generate VBA by default', function() {
+			var wb = X.readFile(paths.nfxlsx);
+			assert(typeof wb.vbaraw === 'undefined');
+			wb = X.readFile(paths.nfxlsb);
+			assert(typeof wb.vbaraw === 'undefined');
+		});
+		it('bookVBA should generate vbaraw (XLSX/XLSB)', function() {
+			var wb = X.readFile(paths.nfxlsx,{bookVBA:true});
+			assert(typeof wb.vbaraw !== 'undefined');
+			wb = X.readFile(paths.nfxlsb,{bookVBA:true});
+			assert(typeof wb.vbaraw !== 'undefined');
+		});
+	});
+});
+
+describe('input formats', function() {
+	it('should read binary strings', function() {
+		X.read(fs.readFileSync(paths.cstxlsx, 'binary'), {type: 'binary'});
+		X.read(fs.readFileSync(paths.cstxlsb, 'binary'), {type: 'binary'});
+		X.read(fs.readFileSync(paths.cstxls, 'binary'), {type: 'binary'});
+		X.read(fs.readFileSync(paths.cstxml, 'binary'), {type: 'binary'});
+	});
+	it('should read base64 strings', function() {
+		X.read(fs.readFileSync(paths.cstxls, 'base64'), {type: 'base64'});
+		X.read(fs.readFileSync(paths.cstxml, 'base64'), {type: 'base64'});
+		X.read(fs.readFileSync(paths.cstxlsx, 'base64'), {type: 'base64'});
+		X.read(fs.readFileSync(paths.cstxlsb, 'base64'), {type: 'base64'});
+	});
+	it('should read buffers', function() {
+		X.read(fs.readFileSync(paths.cstxls), {type: 'buffer'});
+		X.read(fs.readFileSync(paths.cstxml), {type: 'buffer'});
+		X.read(fs.readFileSync(paths.cstxlsx), {type: 'buffer'});
+		X.read(fs.readFileSync(paths.cstxlsb), {type: 'buffer'});
+	});
+	it('should read array', function() {
+		X.read(fs.readFileSync(paths.mcxls, 'binary').split("").map(function(x) { return x.charCodeAt(0); }), {type:'array'});
+		X.read(fs.readFileSync(paths.mcxml, 'binary').split("").map(function(x) { return x.charCodeAt(0); }), {type:'array'});
+		X.read(fs.readFileSync(paths.mcxlsx, 'binary').split("").map(function(x) { return x.charCodeAt(0); }), {type:'array'});
+		X.read(fs.readFileSync(paths.mcxlsb, 'binary').split("").map(function(x) { return x.charCodeAt(0); }), {type:'array'});
+		X.read(fs.readFileSync(paths.mcods, 'binary').split("").map(function(x) { return x.charCodeAt(0); }), {type:'array'});
+	});
+	it('should throw if format is unknown', function() {
+		assert.throws(function() { X.read(fs.readFileSync(paths.cstxls), {type: 'dafuq'}); });
+		assert.throws(function() { X.read(fs.readFileSync(paths.cstxml), {type: 'dafuq'}); });
+		assert.throws(function() { X.read(fs.readFileSync(paths.cstxlsx), {type: 'dafuq'}); });
+		assert.throws(function() { X.read(fs.readFileSync(paths.cstxlsb), {type: 'dafuq'}); });
+	});
+	it('should infer buffer type', function() {
+		X.read(fs.readFileSync(paths.cstxls));
+		X.read(fs.readFileSync(paths.cstxml));
+		X.read(fs.readFileSync(paths.cstxlsx));
+		X.read(fs.readFileSync(paths.cstxlsb));
+	});
+	it('should default to base64 type', function() {
+		assert.throws(function() { X.read(fs.readFileSync(paths.cstxls, 'binary')); });
+		assert.throws(function() { X.read(fs.readFileSync(paths.cstxml, 'binary')); });
+		assert.throws(function() { X.read(fs.readFileSync(paths.cstxlsx, 'binary')); });
+		assert.throws(function() { X.read(fs.readFileSync(paths.cstxlsb, 'binary')); });
+		X.read(fs.readFileSync(paths.cstxls, 'base64'));
+		X.read(fs.readFileSync(paths.cstxml, 'base64'));
+		X.read(fs.readFileSync(paths.cstxlsx, 'base64'));
+		X.read(fs.readFileSync(paths.cstxlsb, 'base64'));
+	});
+});
+
+describe('output formats', function() {
+	var wb1, wb2, wb3, wb4;
+	before(function() {
+		X = require(modp);
+		wb1 = X.readFile(paths.cpxlsx);
+		wb2 = X.readFile(paths.cpxlsb);
+		wb3 = X.readFile(paths.cpxls);
+		wb4 = X.readFile(paths.cpxml);
+	});
+	it('should write binary strings', function() {
+		X.write(wb1, {type: 'binary'});
+		X.write(wb2, {type: 'binary'});
+		X.write(wb3, {type: 'binary'});
+		X.write(wb4, {type: 'binary'});
+		X.read(X.write(wb1, {type: 'binary'}), {type: 'binary'});
+		X.read(X.write(wb2, {type: 'binary'}), {type: 'binary'});
+		X.read(X.write(wb3, {type: 'binary'}), {type: 'binary'});
+		X.read(X.write(wb4, {type: 'binary'}), {type: 'binary'});
+	});
+	it('should write base64 strings', function() {
+		X.write(wb1, {type: 'base64'});
+		X.write(wb2, {type: 'base64'});
+		X.write(wb3, {type: 'base64'});
+		X.write(wb4, {type: 'base64'});
+		X.read(X.write(wb1, {type: 'base64'}), {type: 'base64'});
+		X.read(X.write(wb2, {type: 'base64'}), {type: 'base64'});
+		X.read(X.write(wb3, {type: 'base64'}), {type: 'base64'});
+		X.read(X.write(wb4, {type: 'base64'}), {type: 'base64'});
+	});
+	it('should write buffers', function() {
+		X.write(wb1, {type: 'buffer'});
+		X.write(wb2, {type: 'buffer'});
+		X.write(wb3, {type: 'buffer'});
+		X.write(wb4, {type: 'buffer'});
+		X.read(X.write(wb1, {type: 'buffer'}), {type: 'buffer'});
+		X.read(X.write(wb2, {type: 'buffer'}), {type: 'buffer'});
+		X.read(X.write(wb3, {type: 'buffer'}), {type: 'buffer'});
+		X.read(X.write(wb4, {type: 'buffer'}), {type: 'buffer'});
+	});
+	it('should throw if format is unknown', function() {
+		assert.throws(function() { X.write(wb1, {type: 'dafuq'}); });
+		assert.throws(function() { X.write(wb2, {type: 'dafuq'}); });
+		assert.throws(function() { X.write(wb3, {type: 'dafuq'}); });
+		assert.throws(function() { X.write(wb4, {type: 'dafuq'}); });
+	});
+});
+
+function coreprop(wb) {
+	assert.equal(wb.Props.Title, 'Example with properties');
+	assert.equal(wb.Props.Subject, 'Test it before you code it');
+	assert.equal(wb.Props.Author, 'Pony Foo');
+	assert.equal(wb.Props.Manager, 'Despicable Drew');
+	assert.equal(wb.Props.Company, 'Vector Inc');
+	assert.equal(wb.Props.Category, 'Quirky');
+	assert.equal(wb.Props.Keywords, 'example humor');
+	assert.equal(wb.Props.Comments, 'some comments');
+	assert.equal(wb.Props.LastAuthor, 'Hugues');
+}
+function custprop(wb) {
+	assert.equal(wb.Custprops['I am a boolean'], true);
+	assert.equal(wb.Custprops['Date completed'].toISOString(), '1967-03-09T16:30:00.000Z');
+	assert.equal(wb.Custprops.Status, 2);
+	assert.equal(wb.Custprops.Counter, -3.14);
+}
+
+function cmparr(x){ for(var i=1;i!=x.length;++i) assert.deepEqual(x[0], x[i]); }
+
+function deepcmp(x,y,k,m,c) {
+	var s = k.indexOf(".");
+	m = (m||"") + "|" + (s > -1 ? k.substr(0,s) : k);
+	if(s < 0) return assert[c<0?'notEqual':'equal'](x[k], y[k], m);
+	return deepcmp(x[k.substr(0,s)],y[k.substr(0,s)],k.substr(s+1),m,c);
+}
+
+var styexc = [
+	'A2|H10|bgColor.rgb',
+	'F6|H1|patternType'
+];
+var stykeys = [
+	"patternType",
+	"fgColor",
+	"bgColor"
+];
+function diffsty(ws, r1,r2) {
+	var c1 = ws[r1].s.fill, c2 = ws[r2].s.fill;
+	stykeys.forEach(function(m) {
+		var c = -1;
+		if(styexc.indexOf(r1+"|"+r2+"|"+m) > -1) c = 1;
+		else if(styexc.indexOf(r2+"|"+r1+"|"+m) > -1) c = 1;
+		deepcmp(c1,c2,m,r1+","+r2,c);
+	});
+}
+
+describe('parse features', function() {
+	it('should have comment as part of cell properties', function(){
+		var X = require(modp);
+		var sheet = 'Sheet1';
+		var wb1=X.readFile(paths.swcxlsx);
+		var wb2=X.readFile(paths.swcxlsb);
+		var wb3=X.readFile(paths.swcxls);
+		var wb4=X.readFile(paths.swcxml);
+
+		[wb1,wb2,wb3,wb4].map(function(wb) { return wb.Sheets[sheet]; }).forEach(function(ws, i) {
+			assert.equal(ws.B1.c.length, 1,"must have 1 comment");
+			assert.equal(ws.B1.c[0].a, "Yegor Kozlov","must have the same author");
+			assert.equal(ws.B1.c[0].t.replace(/\r\n/g,"\n").replace(/\r/g,"\n"), "Yegor Kozlov:\nfirst cell", "must have the concatenated texts");
+			if(i > 0) return;
+			assert.equal(ws.B1.c[0].r, '<r><rPr><b/><sz val="8"/><color indexed="81"/><rFont val="Tahoma"/></rPr><t>Yegor Kozlov:</t></r><r><rPr><sz val="8"/><color indexed="81"/><rFont val="Tahoma"/></rPr><t xml:space="preserve">\r\nfirst cell</t></r>', "must have the rich text representation");
+			assert.equal(ws.B1.c[0].h, '<span style="font-weight: bold;">Yegor Kozlov:</span><span style=""><br/>first cell</span>', "must have the html representation");
+		});
+	});
+
+	describe('should parse core properties and custom properties', function() {
+		var wb1, wb2;
+		before(function() {
+			wb1 = X.readFile(paths.cpxlsx);
+			wb2 = X.readFile(paths.cpxlsb);
+			wb3 = X.readFile(paths.cpxls);
+			wb4 = X.readFile(paths.cpxml);
+		});
+
+		it(N1 + ' should parse core properties', function() { coreprop(wb1); });
+		it(N2 + ' should parse core properties', function() { coreprop(wb2); });
+		it(N3 + ' should parse core properties', function() { coreprop(wb3); });
+		it(N4 + ' should parse core properties', function() { coreprop(wb4); });
+		it(N1 + ' should parse custom properties', function() { custprop(wb1); });
+		it(N2 + ' should parse custom properties', function() { custprop(wb2); });
+		it(N3 + ' should parse custom properties', function() { custprop(wb3); });
+		it(N4 + ' should parse custom properties', function() { custprop(wb4); });
+	});
+
+	describe('sheetRows', function() {
+		it('should use original range if not set', function() {
+			var opts = {};
+			var wb1 = X.readFile(paths.fstxlsx, opts);
+			var wb2 = X.readFile(paths.fstxlsb, opts);
+			var wb3 = X.readFile(paths.fstxls, opts);
+			var wb4 = X.readFile(paths.fstxml, opts);
+			[wb1, wb2, wb3, wb4].forEach(function(wb) {
+				assert.equal(wb.Sheets.Text["!ref"],"A1:F49");
+			});
+		});
+		it('should adjust range if set', function() {
+			var opts = {sheetRows:10};
+			var wb1 = X.readFile(paths.fstxlsx, opts);
+			var wb2 = X.readFile(paths.fstxlsb, opts);
+			var wb3 = X.readFile(paths.fstxls, opts);
+			var wb4 = X.readFile(paths.fstxml, opts);
+			/* TODO */
+			[wb1, wb2 /*, wb3, wb4 */].forEach(function(wb) {
+				assert.equal(wb.Sheets.Text["!fullref"],"A1:F49");
+				assert.equal(wb.Sheets.Text["!ref"],"A1:F10");
+			});
+		});
+		it('should not generate comment cells', function() {
+			var opts = {sheetRows:10};
+			var wb1 = X.readFile(paths.cstxlsx, opts);
+			var wb2 = X.readFile(paths.cstxlsb, opts);
+			var wb3 = X.readFile(paths.cstxls, opts);
+			var wb4 = X.readFile(paths.cstxml, opts);
+			/* TODO */
+			[wb1, wb2 /*, wb3, wb4 */].forEach(function(wb) {
+				assert.equal(wb.Sheets.Sheet7["!fullref"],"A1:N34");
+				assert.equal(wb.Sheets.Sheet7["!ref"],"A1");
+			});
+		});
+	});
+
+	describe('merge cells',function() {
+		var wb1, wb2;
+		before(function() {
+			X = require(modp);
+			wb1 = X.readFile(paths.mcxlsx);
+			wb2 = X.readFile(paths.mcxlsb);
+			wb3 = X.readFile(paths.mcods);
+			wb4 = X.readFile(paths.mcxls);
+			wb5 = X.readFile(paths.mcxml);
+		});
+		it('should have !merges', function() {
+			assert(wb1.Sheets.Merge['!merges']);
+			assert(wb2.Sheets.Merge['!merges']);
+			assert(wb3.Sheets.Merge['!merges']);
+			assert(wb4.Sheets.Merge['!merges']);
+			assert(wb5.Sheets.Merge['!merges']);
+			var m = [wb1, wb2, wb3, wb4, wb5].map(function(x) { return x.Sheets.Merge['!merges'].map(function(y) { return X.utils.encode_range(y); });});
+			assert.deepEqual(m[0].sort(),m[1].sort());
+			assert.deepEqual(m[0].sort(),m[2].sort());
+			assert.deepEqual(m[0].sort(),m[3].sort());
+			assert.deepEqual(m[0].sort(),m[4].sort());
+		});
+	});
+
+	describe('should find hyperlinks', function() {
+		var wb1, wb2;
+		before(function() {
+			X = require(modp);
+			wb1 = X.readFile(paths.hlxlsx);
+			wb2 = X.readFile(paths.hlxlsb);
+			wb3 = X.readFile(paths.hlxls);
+			wb4 = X.readFile(paths.hlxml);
+		});
+
+		function hlink(wb) {
+			var ws = wb.Sheets.Sheet1;
+			assert.equal(ws.A1.l.Target, "http://www.sheetjs.com");
+			assert.equal(ws.A2.l.Target, "http://oss.sheetjs.com");
+			assert.equal(ws.A3.l.Target, "http://oss.sheetjs.com#foo");
+			assert.equal(ws.A4.l.Target, "mailto:dev@sheetjs.com");
+			assert.equal(ws.A5.l.Target, "mailto:dev@sheetjs.com?subject=hyperlink");
+			assert.equal(ws.A6.l.Target, "../../sheetjs/Documents/Test.xlsx");
+			assert.equal(ws.A7.l.Target, "http://sheetjs.com");
+		}
+
+		it(N1, function() { hlink(wb1); });
+		it(N2, function() { hlink(wb2); });
+		it(N3, function() { hlink(wb3); });
+		it(N4, function() { hlink(wb4); });
+	});
+
+	describe('should parse cells with date type (XLSX/XLSM)', function() {
+		it('Must have read the date', function() {
+			var wb, ws;
+			var sheetName = 'Sheet1';
+			wb = X.readFile(paths.dtxlsx);
+			ws = wb.Sheets[sheetName];
+			var sheet = X.utils.sheet_to_row_object_array(ws);
+			assert.equal(sheet[3]['銇︺仚銇�'], '2/14/14');
+		});
+		it('cellDates should not affect formatted text', function() {
+			var wb1, ws1, wb2, ws2;
+			var sheetName = 'Sheet1';
+			wb1 = X.readFile(paths.dtxlsx);
+			ws1 = wb1.Sheets[sheetName];
+			wb2 = X.readFile(paths.dtxlsb);
+			ws2 = wb2.Sheets[sheetName];
+			assert.equal(X.utils.sheet_to_csv(ws1),X.utils.sheet_to_csv(ws2));
+		});
+	});
+
+  describe('should correctly handle styles', function() {
+    var wsxls, wsxlsx, rn, rn2;
+    before(function() {
+      wsxls=X.readFile(paths.cssxls, {cellStyles:true,WTF:1}).Sheets.Sheet1;
+      wsxlsx=X.readFile(paths.cssxlsx, {cellStyles:true,WTF:1}).Sheets.Sheet1;
+      rn = function(range) {
+        var r = X.utils.decode_range(range);
+        var out = [];
+        for(var R = r.s.r; R <= r.e.r; ++R) for(var C = r.s.c; C <= r.e.c; ++C)
+          out.push(X.utils.encode_cell({c:C,r:R}));
+        return out;
+      };
+      rn2 = function(r) { return [].concat.apply([], r.split(",").map(rn)); };
+    });
+    var ranges = [
+      'A1:D1,F1:G1', 'A2:D2,F2:G2', /* rows */
+      'A3:A10', 'B3:B10', 'E1:E10', 'F6:F8', /* cols */
+      'H1:J4', 'H10' /* blocks */
+    ];
+
+    var exp = [
+      { patternType: 'darkHorizontal',
+        fgColor: { theme: 9, "tint":-0.249977111117893, rgb_raw: 'F79646', rgb: "E46C0A"},
+        bgColor: { theme: 5, "tint":0.3999755851924192, rgb_raw: 'C0504D', rgb: "D99694" } },
+      { patternType: 'darkUp',
+        fgColor: { theme: 3, "tint":-0.249977111117893, rgb_raw: 'EEECE1', rgb: "C4BD97" },
+        bgColor: { theme: 7, "tint":0.3999755851924192, rgb_raw: '8064A2', rgb: "B3A2C7" } },
+      { patternType: 'darkGray',
+        fgColor: { theme: 3, rgb_raw: 'EEECE1', rgb: "EEECE1" },
+        bgColor: { theme: 1, rgb_raw: 'FFFFFF', rgb: "FFFFFF" } },
+      { patternType: 'lightGray',
+        fgColor: { theme: 6, "tint":0.3999755851924192, rgb_raw: '9BBB59', rgb: "C3D69B" },
+        bgColor: { theme: 2, "tint":-0.499984740745262, rgb_raw: '1F497D', rgb: "10253F" } },
+      { patternType: 'lightDown',
+        fgColor: { theme: 4, "tint":-0.249977111117893, rgb_raw: '4F81BD', rgb: "376092" },
+        bgColor: { theme: 7, "tint":-0.249977111117893, rgb_raw: '8064A2', rgb: "604A7B"  } },
+      { patternType: 'lightGrid',
+        fgColor: { theme: 6, "tint":-0.249977111117893, rgb_raw: '9BBB59', rgb: "77933C" },
+        bgColor: { theme: 9, "tint":-0.249977111117893, rgb_raw: 'F79646', rgb: "E46C0A" } },
+      { patternType: 'lightGrid',
+        fgColor: { theme: 4, rgb_raw: '4F81BD' , rgb: "4F81BD"},
+        bgColor: { theme: 2, "tint":-0.749992370372631, rgb_raw: '1F497D', rgb: "08121F" } },
+      { patternType: 'lightVertical',
+        fgColor: { theme: 3, "tint":0.3999755851924192, rgb_raw: 'EEECE1', rgb: "F5F4ED"  },
+        bgColor: { theme: 7, "tint":0.3999755851924192, rgb_raw: '8064A2', rgb: "B3A2C7" } }
+    ];
+    ranges.forEach(function(rng) {
+      it('XLS  | ' + rng,function(){cmparr(rn2(rng).map(function(x){ return wsxls[x].s; }));});
+      it('XLSX | ' + rng,function(){cmparr(rn2(rng).map(function(x){ return wsxlsx[x].s; }));});
+    });
+    it('different styles', function() {
+      for(var i = 0; i != ranges.length-1; ++i) {
+        for(var j = i+1; j != ranges.length; ++j) {
+          diffsty(wsxlsx, rn2(ranges[i])[0], rn2(ranges[j])[0]);
+          /* TODO */
+          //diffsty(wsxls, rn2(ranges[i])[0], rn2(ranges[j])[0]);
+        }
+      }
+    });
+    it('correct styles', function() {
+      var stylesxls = ranges.map(function(r) { return rn2(r)[0]; }).map(function(r) { return wsxls[r].s; });
+      var stylesxlsx = ranges.map(function(r) { return rn2(r)[0]; }).map(function(r) { return wsxlsx[r].s; });
+      for(var i = 0; i != exp.length; ++i) {
+        var props = [
+          "fgColor.theme","fgColor.rgb",
+          "bgColor.theme","bgColor.rgb",
+          "patternType"
+        ];
+
+        props.forEach(function(k) {
+          deepcmp(exp[i], stylesxlsx[i].fill, k, i + ":"+k);
+
+        });
+      }
+    });
+  });
+
+
+});
+
+function seq(end, start) {
+	var s = start || 0;
+	var o = new Array(end - s);
+	for(var i = 0; i != o.length; ++i) o[i] = s + i;
+	return o;
+}
+
+describe('roundtrip features', function() {
+	before(function() {
+		X = require(modp);
+	});
+	describe('should parse core properties and custom properties', function() {
+		var wb1, wb2, base = './tmp/cp';
+		before(function() {
+			wb1 = X.readFile(paths.cpxlsx);
+			wb2 = X.readFile(paths.cpxlsb);
+			fullex.forEach(function(p) {
+				X.writeFile(wb1, base + '.xlsm' + p);
+				X.writeFile(wb2, base + '.xlsb' + p);
+			});
+		});
+		fullex.forEach(function(p) { ['.xlsm','.xlsb'].forEach(function(q) {
+			it(q + p + ' should roundtrip core and custom properties', function() {
+				var wb = X.readFile(base + q + p);
+				coreprop(wb);
+				custprop(wb);
+			}); });
+		});
+	});
+
+	describe('should preserve features', function() {
+		it('merge cells', function() {
+			var wb1 = X.readFile(paths.mcxlsx);
+			var wb2 = X.read(X.write(wb1, {type:'binary'}), {type:'binary'});
+			var m1 = wb1.Sheets.Merge['!merges'].map(X.utils.encode_range);
+			var m2 = wb2.Sheets.Merge['!merges'].map(X.utils.encode_range);
+			assert.equal(m1.length, m2.length);
+			for(var i = 0; i < m1.length; ++i) assert.equal(m1[i], m2[i]);
+		});
+	});
+
+	describe('should preserve dates', function() {
+		seq(16).forEach(function(n) {
+			var d = (n & 1) ? 'd' : 'n', dk = d === 'd';
+			var c = (n & 2) ? 'd' : 'n', dj = c === 'd';
+			var b = (n & 4) ? 'd' : 'n', di = b === 'd';
+			var a = (n & 8) ? 'd' : 'n', dh = a === 'd';
+			var f, sheet, addr;
+			if(dh) { f = paths.dtxlsx; sheet = 'Sheet1'; addr = 'B5'; }
+			else { f = paths.nfxlsx; sheet = '2011'; addr = 'J36'; }
+			it('[' + a + '] -> (' + b + ') -> [' + c + '] -> (' + d + ')', function() {
+				var wb1 = X.readFile(f, {cellNF: true, cellDates: di, WTF: opts.WTF});
+				var wb2 = X.read(X.write(wb1, {type:'binary', cellDates:dj, WTF:opts.WTF}), {type:'binary', cellDates: dk, WTF: opts.WTF});
+				var m = [wb1,wb2].map(function(x) { return x.Sheets[sheet][addr]; });
+				assert.equal(m[0].w, m[1].w);
+
+				/* wb1 cellDates */
+				if(dh && di) assert.equal(m[0].t, 'd');
+				//else if(a !== 'd' && di) assert.equal(m[0].t, 'd'); /* TODO */
+				else assert.equal(m[0].t, 'n');
+				/* wb2 cellDates */
+				if(dh && di && dj && dk) assert.equal(m[1].t, 'd');
+				else if(dj && dk && !di); /* TODO: convert to date */
+				else assert.equal(m[1].t, 'n');
+
+				if(m[0].t === m[1].t) assert.equal(m[0].v, m[1].v);
+				else if(m[0].t === 'd') assert(Math.abs(datenum(new Date(m[0].v)) - m[1].v) < 0.01); /* TODO: 1sec adjustment */
+			});
+		});
+	});
+
+	describe('xls to xlsx conversions', function() { [
+			['XLS', 'formula_stress_test.xls'],
+			['XML', 'formula_stress_test.xls.xml']
+		].forEach(function(w) {
+			it('should be able to write ' + w[0] + ' files', function() {
+				var xls = X.readFile('./test_files/' + w[1], {cellNF:true});
+				X.writeFile(xls, './tmp/' + w[1] + '.xlsx', {bookSST:true});
+				X.writeFile(xls, './tmp/' + w[1] + '.xlsb', {bookSST:true});
+			});
+		});
+	});
+});
+
+function password_file(x){return x.match(/^password.*\.xls$/); }
+var password_files = fs.readdirSync('test_files').filter(password_file);
+describe('invalid files', function() {
+	describe('parse', function() { [
+			['password', 'apachepoi_password.xls'],
+			['passwords', 'apachepoi_xor-encryption-abc.xls'],
+			['DOC files', 'word_doc.doc']
+		].forEach(function(w) { it('should fail on ' + w[0], function() {
+			assert.throws(function() { X.readFile(dir + w[1]); });
+			assert.throws(function() { X.read(fs.readFileSync(dir+w[1], 'base64'), {type:'base64'}); });
+		}); });
+	});
+	describe('write', function() {
+		it('should pass -> XLSX', function() {
+			X.write(X.readFile(paths.fstxlsb), {type:'binary'});
+			X.write(X.readFile(paths.fstxlsx), {type:'binary'});
+			X.write(X.readFile(paths.fstxls), {type:'binary'});
+			X.write(X.readFile(paths.fstxml), {type:'binary'});
+		});
+		it('should pass if a sheet is missing', function() {
+			var wb = X.readFile(paths.fstxlsx); delete wb.Sheets[wb.SheetNames[0]];
+			X.read(X.write(wb, {type:'binary'}), {type:'binary'});
+		});
+		['Props', 'Custprops', 'SSF'].forEach(function(t) {
+			it('should pass if ' + t + ' is missing', function() {
+				var wb = X.readFile(paths.fstxlsx);
+				assert.doesNotThrow(function() {
+					delete wb[t];
+					X.write(wb, {type:'binary'});
+				});
+			});
+		});
+		['SheetNames', 'Sheets'].forEach(function(t) {
+			it('should fail if ' + t + ' is missing', function() {
+				var wb = X.readFile(paths.fstxlsx);
+				assert.throws(function() {
+					delete wb[t];
+					X.write(wb, {type:'binary'});
+				});
+			});
+		});
+	});
+});
+
+function datenum(v, date1904) {
+	if(date1904) v+=1462;
+	var epoch = Date.parse(v);
+	return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);
+}
+function sheet_from_array_of_arrays(data, opts) {
+	var ws = {};
+	var range = {s: {c:10000000, r:10000000}, e: {c:0, r:0 }};
+	for(var R = 0; R != data.length; ++R) {
+		for(var C = 0; C != data[R].length; ++C) {
+			if(range.s.r > R) range.s.r = R;
+			if(range.s.c > C) range.s.c = C;
+			if(range.e.r < R) range.e.r = R;
+			if(range.e.c < C) range.e.c = C;
+			var cell = {v: data[R][C] };
+			if(cell.v == null) continue;
+			var cell_ref = X.utils.encode_cell({c:C,r:R});
+			if(typeof cell.v === 'number') cell.t = 'n';
+			else if(typeof cell.v === 'boolean') cell.t = 'b';
+			else if(cell.v instanceof Date) {
+				cell.t = 'n'; cell.z = X.SSF._table[14];
+				cell.v = datenum(cell.v);
+			}
+			else cell.t = 's';
+			ws[cell_ref] = cell;
+		}
+	}
+	if(range.s.c < 10000000) ws['!ref'] = X.utils.encode_range(range);
+	return ws;
+}
+
+describe('json output', function() {
+	function seeker(json, keys, val) {
+		for(var i = 0; i != json.length; ++i) {
+			for(var j = 0; j != keys.length; ++j) {
+				if(json[i][keys[j]] === val) throw new Error("found " + val + " in row " + i + " key " + keys[j]);
+			}
+		}
+	}
+	var data, ws;
+	before(function() {
+		data = [
+			[1,2,3],
+			[true, false, null, "sheetjs"],
+			["foo","bar",new Date("2014-02-19T14:30Z"), "0.3"],
+			["baz", null, "qux"]
+		];
+		ws = sheet_from_array_of_arrays(data);
+	});
+	it('should use first-row headers and full sheet by default', function() {
+		var json = X.utils.sheet_to_json(ws);
+		assert.equal(json.length, data.length - 1);
+		assert.equal(json[0][1], true);
+		assert.equal(json[1][2], "bar");
+		assert.equal(json[2][3], "qux");
+		assert.doesNotThrow(function() { seeker(json, [1,2,3], "sheetjs"); });
+		assert.throws(function() { seeker(json, [1,2,3], "baz"); });
+	});
+	it('should create array of arrays if header == 1', function() {
+		var json = X.utils.sheet_to_json(ws, {header:1});
+		assert.equal(json.length, data.length);
+		assert.equal(json[1][0], true);
+		assert.equal(json[2][1], "bar");
+		assert.equal(json[3][2], "qux");
+		assert.doesNotThrow(function() { seeker(json, [0,1,2], "sheetjs"); });
+		assert.throws(function() { seeker(json, [0,1,2,3], "sheetjs"); });
+		assert.throws(function() { seeker(json, [0,1,2], "baz"); });
+	});
+	it('should use column names if header == "A"', function() {
+		var json = X.utils.sheet_to_json(ws, {header:'A'});
+		assert.equal(json.length, data.length);
+		assert.equal(json[1].A, true);
+		assert.equal(json[2].B, "bar");
+		assert.equal(json[3].C, "qux");
+		assert.doesNotThrow(function() { seeker(json, "ABC", "sheetjs"); });
+		assert.throws(function() { seeker(json, "ABCD", "sheetjs"); });
+		assert.throws(function() { seeker(json, "ABC", "baz"); });
+	});
+	it('should use column labels if specified', function() {
+		var json = X.utils.sheet_to_json(ws, {header:["O","D","I","N"]});
+		assert.equal(json.length, data.length);
+		assert.equal(json[1].O, true);
+		assert.equal(json[2].D, "bar");
+		assert.equal(json[3].I, "qux");
+		assert.doesNotThrow(function() { seeker(json, "ODI", "sheetjs"); });
+		assert.throws(function() { seeker(json, "ODIN", "sheetjs"); });
+		assert.throws(function() { seeker(json, "ODIN", "baz"); });
+	});
+	[["string", "A2:D4"], ["numeric", 1], ["object", {s:{r:1,c:0},e:{r:3,c:3}}]].forEach(function(w) {
+		it('should accept custom ' + w[0] + ' range', function() {
+			var json = X.utils.sheet_to_json(ws, {header:1, range:w[1]});
+			assert.equal(json.length, 3);
+			assert.equal(json[0][0], true);
+			assert.equal(json[1][1], "bar");
+			assert.equal(json[2][2], "qux");
+			assert.doesNotThrow(function() { seeker(json, [0,1,2], "sheetjs"); });
+			assert.throws(function() { seeker(json, [0,1,2,3], "sheetjs"); });
+			assert.throws(function() { seeker(json, [0,1,2], "baz"); });
+		});
+	});
+});
+
+describe('corner cases', function() {
+	it('output functions', function() {
+		var data = [
+			[1,2,3],
+			[true, false, null, "sheetjs"],
+			["foo","bar",new Date("2014-02-19T14:30Z"), "0.3"],
+			["baz", null, "q\"ux"]
+		];
+		ws = sheet_from_array_of_arrays(data);
+		ws.A1.f = ""; ws.A1.w = "";
+		delete ws.C3.w; delete ws.C3.z; ws.C3.XF = {ifmt:14};
+		ws.A4.t = "e";
+		X.utils.get_formulae(ws);
+		X.utils.make_csv(ws);
+		X.utils.make_json(ws);
+		ws['!cols'] = [ {wch:6}, {wch:7}, {wch:10}, {wch:20} ];
+
+		var wb = {SheetNames:['sheetjs'], Sheets:{sheetjs:ws}};
+		X.write(wb, {type: "binary", bookType: 'xlsx'});
+		X.write(wb, {type: "buffer", bookType: 'xlsm'});
+		X.write(wb, {type: "base64", bookType: 'xlsb'});
+		ws.A2.t = "f";
+		assert.throws(function() { X.utils.make_json(ws); });
+	});
+	it('SSF', function() {
+		X.SSF.format("General", "dafuq");
+		assert.throws(function(x) { return X.SSF.format("General", {sheet:"js"});});
+		X.SSF.format("b e ddd hh AM/PM", 41722.4097222222);
+		X.SSF.format("b ddd hh m", 41722.4097222222);
+		["hhh","hhh A/P","hhmmm","sss","[hhh]","G eneral"].forEach(function(f) {
+			assert.throws(function(x) { return X.SSF.format(f, 12345.6789);});
+		});
+		["[m]","[s]"].forEach(function(f) {
+			assert.doesNotThrow(function(x) { return X.SSF.format(f, 12345.6789);});
+		});
+	});
+  it('SSF oddities', function() {
+    var ssfdata = require('./misc/ssf.json');
+    ssfdata.forEach(function(d) {
+      for(var j=1;j<d.length;++j) {
+        if(d[j].length == 2) {
+          var expected = d[j][1], actual = X.SSF.format(d[0], d[j][0], {});
+          assert.equal(actual, expected);
+        } else if(d[j][2] !== "#") assert.throws(function() { SSF.format(d[0], d[j][0]); });
+      }
+    });
+  });
+	it('CFB', function() {
+		var cfb = X.CFB.read(paths.swcxls, {type:"file"});
+		var xls = X.parse_xlscfb(cfb);
+	});
+	it('codepage', function() {
+		X.readFile(dir + "biff5/number_format_greek.xls");
+	});
+});
+
+describe('encryption', function() {
+	password_files.forEach(function(x) {
+		describe(x, function() {
+			it('should throw with no password', function() {assert.throws(function() { X.readFile(dir + x); }); });
+			it('should throw with wrong password', function() {assert.throws(function() { X.readFile(dir + x, {password:'passwor',WTF:opts.WTF}); }); });
+			it('should recognize correct password', function() {
+				try { X.readFile(dir + x, {password:'password',WTF:opts.WTF}); }
+				catch(e) { if(e.message == "Password is incorrect") throw e; }
+			});
+			it.skip('should decrypt file', function() {
+				var wb = X.readFile(dir + x, {password:'password',WTF:opts.WTF});
+			});
+		});
+	});
+});
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/testA.lst b/Source/UBCS-WEB/src/config/js-xlsx-master/testA.lst
new file mode 100644
index 0000000..5fcdb17
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/testA.lst
@@ -0,0 +1,3 @@
+calendar_stress_test.xlsx
+large_strings.xlsb
+time_stress_test_1.xlsb
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/tests.lst b/Source/UBCS-WEB/src/config/js-xlsx-master/tests.lst
new file mode 100644
index 0000000..8d64535
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/tests.lst
@@ -0,0 +1,1064 @@
+AutoFilter.xlsb
+BlankSheetTypes.xlsb.pending
+ErrorTypes.xlsb
+NumberFormatCondition.xlsb
+RkNumber.xlsb
+calendar_stress_test.xlsb.pending
+cell_style_simple.xlsb
+comments_stress_test.xlsb
+custom_properties.xlsb
+defined_names_simple.xlsb
+formula_stress_test.xlsb
+formulae_test_simple.xlsb
+hyperlink_stress_test_2011.xlsb
+merge_cells.xlsb
+named_ranges_2011.xlsb
+number_format.xlsb
+number_format_entities.xlsb
+number_format_russian.xlsb
+pivot_table_named_range.xlsb
+pivot_table_test.xlsb
+rich_text_stress.xlsb
+smart_tags_2007.xlsb
+sushi.xlsb
+text_and_numbers.xlsb
+xlsx-stream-d-date-cell.xlsb
+2013/apachepoi_29982.xls.xlsb
+2013/apachepoi_43251.xls.xlsb
+2013/apachepoi_44593.xls.xlsb
+2013/apachepoi_44643.xls.xlsb
+2013/apachepoi_44958.xls.xlsb
+2013/apachepoi_46136-NoWarnings.xls.xlsb
+2013/apachepoi_48968.xls.xlsb
+2013/apachepoi_50939.xls.xlsb
+2013/apachepoi_54016.xls.xlsb
+2013/apachepoi_ReadOnlyRecommended.xls.xlsb
+2013/apachepoi_testArraysAndTables.xls.xlsb
+AutoFilter.xlsx
+ErrorTypes.xlsx
+LONumbers-2010.xlsx
+LONumbers-2011.xlsx
+LONumbers.xlsx
+RkNumber.xlsx
+apachepoi_45430.xlsx
+apachepoi_45540_classic_Footer.xlsx
+apachepoi_45540_classic_Header.xlsx
+apachepoi_45540_form_Footer.xlsx
+apachepoi_45540_form_Header.xlsx
+apachepoi_45544.xlsx
+apachepoi_46535.xlsx
+apachepoi_46536.xlsx
+apachepoi_47090.xlsx
+apachepoi_47504.xlsx
+apachepoi_47668.xlsx
+apachepoi_47737.xlsx
+apachepoi_47804.xlsx
+apachepoi_47813.xlsx.pending
+apachepoi_47862.xlsx
+apachepoi_47889.xlsx
+apachepoi_48495.xlsx
+apachepoi_48539.xlsx
+apachepoi_48703.xlsx
+apachepoi_48779.xlsx
+apachepoi_48923.xlsx
+apachepoi_49156.xlsx
+apachepoi_49273.xlsx
+apachepoi_49325.xlsx
+apachepoi_49609.xlsx
+apachepoi_49783.xlsx
+apachepoi_49872.xlsx
+apachepoi_49928.xlsx
+apachepoi_49966.xlsx
+apachepoi_50096.xlsx
+apachepoi_50299.xlsx
+apachepoi_50784-font_theme_colours.xlsx
+apachepoi_50786-indexed_colours.xlsx
+apachepoi_50795.xlsx
+apachepoi_50846-border_colours.xlsx
+apachepoi_50867_with_table.xlsx
+apachepoi_51222.xlsx
+apachepoi_51470.xlsx
+apachepoi_51585.xlsx
+apachepoi_51710.xlsx
+apachepoi_51850.xlsx
+apachepoi_51963.xlsx
+apachepoi_52348.xlsx
+apachepoi_52575_main.xlsx
+apachepoi_52716.xlsx
+apachepoi_53101.xlsx
+apachepoi_53282.xlsx
+apachepoi_53282b.xlsx
+apachepoi_53568.xlsx
+apachepoi_53734.xlsx
+apachepoi_53798.xlsx
+apachepoi_53798_shiftNegative_TMPL.xlsx
+apachepoi_54034.xlsx
+apachepoi_54071.xlsx
+apachepoi_54084 - Greek - beyond BMP.xlsx
+apachepoi_54206.xlsx
+apachepoi_54288-ref.xlsx
+apachepoi_54288.xlsx
+apachepoi_54436.xlsx
+apachepoi_54524.xlsx
+apachepoi_54607.xlsx
+apachepoi_54764-2.xlsx
+apachepoi_54764.xlsx
+apachepoi_55640.xlsx
+apachepoi_55745.xlsx
+apachepoi_55850.xlsx
+apachepoi_55864.xlsx
+apachepoi_55906-MultiSheetRefs.xlsx
+apachepoi_55923.xlsx
+apachepoi_55924.xlsx
+apachepoi_55926.xlsx
+apachepoi_55927.xlsx
+apachepoi_56011.xlsx
+apachepoi_56017.xlsx
+apachepoi_56169.xlsx
+apachepoi_56170.xlsx
+apachepoi_56274.xlsx
+apachepoi_56278.xlsx
+apachepoi_56315.xlsx
+apachepoi_56420.xlsx
+apachepoi_56502.xlsx
+apachepoi_56514.xlsx
+apachepoi_56688_1.xlsx
+apachepoi_56688_2.xlsx
+apachepoi_56688_3.xlsx
+apachepoi_56688_4.xlsx
+apachepoi_56702.xlsx
+apachepoi_56730.xlsx
+apachepoi_56737.xlsx
+apachepoi_AverageTaxRates.xlsx
+apachepoi_Booleans.xlsx
+apachepoi_BrNotClosed.xlsx
+apachepoi_CustomXMLMapping-singleattributenamespace.xlsx
+apachepoi_CustomXMLMappings-complex-type.xlsx
+apachepoi_CustomXMLMappings.xlsx
+apachepoi_CustomXmlMappings-inverse-order.xlsx
+apachepoi_DataValidations-49244.xlsx
+apachepoi_DateFormatTests.xlsx
+apachepoi_ElapsedFormatTests.xlsx
+apachepoi_ForShifting.xlsx
+apachepoi_FormatChoiceTests.xlsx
+apachepoi_FormatConditionTests.xlsx
+apachepoi_Formatting.xlsx
+apachepoi_FormulaEvalTestData_Copy.xlsx
+apachepoi_FormulaSheetRange.xlsx
+apachepoi_GeneralFormatTests.xlsx
+apachepoi_GroupTest.xlsx
+apachepoi_InlineStrings.xlsx
+apachepoi_NewlineInFormulas.xlsx
+apachepoi_NumberFormatApproxTests.xlsx
+apachepoi_NumberFormatTests.xlsx
+apachepoi_RepeatingRowsCols.xlsx
+apachepoi_SampleSS.xlsx
+apachepoi_ShrinkToFit.xlsx
+apachepoi_SimpleMultiCell.xlsx
+apachepoi_SimpleWithComments.xlsx
+apachepoi_Tables.xlsx
+apachepoi_TextFormatTests.xlsx
+apachepoi_Themes.xlsx
+apachepoi_TwoSheetsNoneHidden.xlsx
+apachepoi_TwoSheetsOneHidden.xlsx
+apachepoi_WithChart.xlsx
+apachepoi_WithChartSheet.xlsx.pending
+apachepoi_WithConditionalFormatting.xlsx
+apachepoi_WithDrawing.xlsx
+apachepoi_WithEmbeded.xlsx
+apachepoi_WithMoreVariousData.xlsx
+apachepoi_WithTable.xlsx
+apachepoi_WithTextBox.xlsx
+apachepoi_WithTextBox2.xlsx
+apachepoi_WithThreeCharts.xlsx
+apachepoi_WithTwoCharts.xlsx
+apachepoi_WithVariousData.xlsx
+apachepoi_atp.xlsx
+apachepoi_chart_sheet.xlsx.pending
+apachepoi_commentTest.xlsx
+apachepoi_comments.xlsx
+apachepoi_headerFooterTest.xlsx
+apachepoi_picture.xlsx
+apachepoi_ref-56737.xlsx
+apachepoi_ref2-56737.xlsx
+apachepoi_reordered_sheets.xlsx
+apachepoi_sample-beta.xlsx
+apachepoi_sample.xlsx
+apachepoi_shared_formulas.xlsx
+apachepoi_sheetProtection_allLocked.xlsx
+apachepoi_sheetProtection_not_protected.xlsx
+apachepoi_styles.xlsx
+apachepoi_workbookProtection-sheet_password-2013.xlsx
+apachepoi_workbookProtection-workbook_password-2013.xlsx
+apachepoi_workbookProtection-workbook_password_user_range-2010.xlsx
+apachepoi_workbookProtection_not_protected.xlsx
+apachepoi_workbookProtection_workbook_revision_protected.xlsx
+apachepoi_workbookProtection_workbook_structure_protected.xlsx
+apachepoi_workbookProtection_workbook_windows_protected.xlsx
+apachepoi_workbookProtection_worksheet_protected.xlsx
+apachepoi_xlsx-jdbc.xlsx
+calendar_stress_test.xlsx.pending
+cell_style_simple.xlsx
+comments_stress_test.xlsx
+custom_properties.xlsx
+defined_names_simple.xlsx
+excel-reader-xlsx_data01.xlsx
+excel-reader-xlsx_data02.xlsx
+excel-reader-xlsx_error02.xlsx.pending
+excel-reader-xlsx_error03.xlsx.pending
+excel-reader-xlsx_error04.xlsx.pending
+excel-reader-xlsx_error05.xlsx.pending
+excel-reader-xlsx_error06.xlsx.pending
+excel-reader-xlsx_error07.xlsx.pending
+excel-reader-xlsx_error08.xlsx.pending
+excel-reader-xlsx_inline01.xlsx
+excel-reader-xlsx_libre01.xlsx
+formula_stress_test.xlsx
+formulae_test_simple.xlsx
+hyperlink_stress_test_2011.xlsx
+interview.xlsx
+issue.xlsx
+jxls-core_formulaOneRow.xlsx
+jxls-core_simple.xlsx
+jxls-examples_stress1.xlsx
+jxls-examples_stress2.xlsx
+jxls-reader_departmentData.xlsx
+large_strings.xlsx.pending
+libreoffice_calc_cjk-text_cell-justify-distributed-single.xlsx
+libreoffice_calc_conditional-formatting.xlsx
+libreoffice_calc_conditional-formatting_all_icon_sets.xlsx
+libreoffice_calc_drawing-object_shapes.xlsx
+libreoffice_calc_export-millon-rows.xlsx.pending
+libreoffice_calc_external-ref_access-basic.xlsx
+libreoffice_calc_external-ref_extdata.xlsx
+libreoffice_calc_tab-color.xlsx
+libreoffice_calc_text-angled-with-border.xlsx
+libreoffice_calc_xlsx-export-single-cell-at-last-row.xlsx
+libreoffice_calc_xlsx-import_encryption_simple-encryption-2007.xlsx.pending
+libreoffice_calc_xlsx-import_encryption_simple-encryption-2010.xlsx.pending
+libreoffice_calc_xlsx-import_format-as-table.xlsx
+libreoffice_calc_xlsx-import_named-range.xlsx
+libreoffice_calc_xlsx-import_perf_300000_line_sample.xlsx.pending
+libreoffice_calc_xlsx-import_perf_8-by-300000-cells.xlsx.pending
+libreoffice_calc_xlsx-import_perf_pivot-table-with-large-unique-entries.xlsx.pending
+libreoffice_calc_xlsx-import_shared-formula_1.xlsx
+merge_cells.xlsx
+mixed_sheets.xlsx
+named_ranges_2011.xlsx
+number_format_entities.xlsx
+openpyxl_g_NameWithValueBug.xlsx
+openpyxl_g_empty-no-string.xlsx
+openpyxl_g_empty-with-styles.xlsx
+openpyxl_g_empty.xlsx
+openpyxl_g_empty_libre.xlsx
+openpyxl_g_empty_no_dimensions.xlsx
+openpyxl_g_empty_with_no_properties.xlsx
+openpyxl_g_guess_types.xlsx
+openpyxl_g_libreoffice_nrt.xlsx
+openpyxl_g_merge_range.xlsx
+openpyxl_r_bigfoot.xlsx
+openpyxl_r_bug137.xlsx
+openpyxl_r_bug275.xlsx
+openpyxl_r_bug304.xlsx.pending
+openpyxl_r_comments.xlsx
+openpyxl_r_complex-styles.xlsx
+openpyxl_r_conditional-formatting.xlsx
+openpyxl_r_contains_chartsheets.xlsx.pending
+openpyxl_r_date_1900.xlsx
+openpyxl_r_date_1904.xlsx
+openpyxl_r_formulae.xlsx
+openpyxl_r_null_archive.xlsx.pending
+openpyxl_r_null_file.xlsx.pending
+pivot_table_named_range.xlsx
+rich_text_stress.xlsx
+roo_1900_base.xlsx
+roo_1904_base.xlsx
+roo_Bibelbund.xlsx
+roo_Pfand_from_windows_phone.xlsx
+roo_bbu.xlsx
+roo_boolean.xlsx
+roo_borders.xlsx
+roo_bug-numbered-sheet-names.xlsx
+roo_comments.xlsx
+roo_datetime.xlsx
+roo_emptysheets.xlsx
+roo_file_item_error.xlsx
+roo_formula.xlsx
+roo_formula_string_error.xlsx
+roo_link.xlsx
+roo_named_cells.xlsx
+roo_numbers-export.xlsx
+roo_numbers1.xlsx
+roo_numeric-link.xlsx
+roo_only_one_sheet.xlsx
+roo_paragraph.xlsx
+roo_simple_spreadsheet.xlsx
+roo_style.xlsx
+roo_time-test.xlsx
+roo_type_excel.xlsx.pending
+roo_type_openoffice.xlsx.pending
+roo_whitespace.xlsx
+smart_tags_2007.xlsx
+spreadsheet-parsexlsx_Test.xlsx
+spreadsheet-parsexlsx_bug-10.xlsx
+spreadsheet-parsexlsx_bug-11.xlsx
+spreadsheet-parsexlsx_bug-12.xlsx
+spreadsheet-parsexlsx_bug-13.xlsx
+spreadsheet-parsexlsx_bug-14.xlsx
+spreadsheet-parsexlsx_bug-15.xlsx
+spreadsheet-parsexlsx_bug-2.xlsx
+spreadsheet-parsexlsx_bug-3.xlsx
+spreadsheet-parsexlsx_bug-4.xlsx
+spreadsheet-parsexlsx_bug-5.xlsx
+spreadsheet-parsexlsx_bug-6-2.xlsx
+spreadsheet-parsexlsx_bug-6.xlsx
+spreadsheet-parsexlsx_bug-7.xlsx
+spreadsheet-parsexlsx_bug-8.xlsx
+spreadsheet-parsexlsx_bug-lock.xlsx
+spreadsheet-parsexlsx_column-formats.xlsx
+spreadsheet-parsexlsx_tab-color.xlsx
+sushi.xlsx
+text_and_numbers.xlsx
+write.xlsx
+xlrd_merged_cells.xlsx
+xlrd_reveng1.xlsx
+xlrd_test_comments_excel.xlsx
+xlrd_test_comments_gdocs.xlsx
+xlrd_text_bar.xlsx
+xlsx-stream-d-date-cell.xlsx
+讞讬砖讜讘_谞拽讜讚讜转_讝讬讻讜讬.xlsx
+BlankSheetTypes.xlsm.pending
+NumberFormatCondition.xlsm
+apachepoi_45431.xlsm
+apachepoi_47026.xlsm
+apachepoi_47089.xlsm
+apachepoi_ExcelWithAttachments.xlsm
+number_format.xlsm
+number_format_russian.xlsm
+numfmt_1_russian.xlsm
+openpyxl_r_vba-test.xlsm
+pivot_table_test.xlsm
+AutoFilter.ods
+BlankSheetTypes.ods
+cell_style_simple.ods
+formula_stress_test.ods
+merge_cells.ods
+number_format.ods
+rich_text_stress.ods
+roo_bbu.ods
+roo_boolean.ods
+roo_borders.ods
+roo_comments.ods
+roo_datetime.ods
+roo_dreimalvier.ods
+roo_emptysheets.ods
+roo_formula.ods
+roo_html-escape.ods
+roo_matrix.ods
+roo_named_cells.ods
+roo_numbers1.ods
+roo_only_one_sheet.ods
+roo_paragraph.ods
+roo_ric.ods
+roo_simple_spreadsheet.ods
+roo_simple_spreadsheet_from_italo.ods
+roo_style.ods
+roo_time-test.ods
+roo_type_excel.ods.pending
+roo_type_excelx.ods
+roo_whitespace.ods
+sushi.ods
+biff5/NumberFormatCondition.xls
+biff5/RkNumber.xls
+biff5/cell_style_simple.xls
+biff5/comments_stress_test.xls
+biff5/custom_properties.xls
+biff5/defined_names_simple.xls
+biff5/hyperlink_stress_test_2011.xls
+biff5/large_strings.xls.pending
+biff5/merge_cells.xls
+biff5/named_ranges_2011.xls
+biff5/number_format.xls
+biff5/number_format_estonian.xls
+biff5/number_format_greek.xls.pending
+biff5/number_format_vietnamese.xls
+biff5/pivot_table_test.xls
+biff5/rich_text_stress.xls
+biff5/sushi.xls
+biff5/text_and_numbers.xls
+comments_stress_test.xls.b64
+formula_stress_test.xls.b64
+A4X_2013.xls
+A4X_gnumeric.xls
+AutoFilter.xls
+BlankSheetTypes.xls
+ErrorTypes.xls
+LONumbers-2010.xls
+LONumbers-2011.xls
+LONumbers.xls
+NumberFormatCondition.xls
+RkNumber.xls
+apachepoi_12561-1.xls
+apachepoi_12561-2.xls
+apachepoi_12843-1.xls
+apachepoi_12843-2.xls
+apachepoi_13224.xls
+apachepoi_13796.xls
+apachepoi_14330-1.xls
+apachepoi_14330-2.xls
+apachepoi_14460.xls
+apachepoi_15228.xls
+apachepoi_15375.xls
+apachepoi_15556.xls
+apachepoi_15573.xls
+apachepoi_1900DateWindowing.xls
+apachepoi_1904DateWindowing.xls
+apachepoi_19599-1.xls
+apachepoi_19599-2.xls
+apachepoi_22742.xls
+apachepoi_24207.xls
+apachepoi_24215.xls
+apachepoi_25183.xls
+apachepoi_25695.xls
+apachepoi_26100.xls
+apachepoi_27272_1.xls
+apachepoi_27272_2.xls
+apachepoi_27349-vlookupAcrossSheets.xls
+apachepoi_27364.xls
+apachepoi_27394.xls
+apachepoi_27852.xls
+apachepoi_27933.xls
+apachepoi_28772.xls
+apachepoi_28774.xls
+apachepoi_29675.xls
+apachepoi_29942.xls
+apachepoi_29982.xls
+apachepoi_30070.xls
+apachepoi_30540.xls
+apachepoi_30978-alt.xls
+apachepoi_30978-deleted.xls
+apachepoi_31661.xls
+apachepoi_31749.xls
+apachepoi_31979.xls
+apachepoi_32822.xls
+apachepoi_33082.xls
+apachepoi_34775.xls
+apachepoi_35564.xls
+apachepoi_35565.xls
+apachepoi_36947.xls
+apachepoi_37376.xls
+apachepoi_37630.xls
+apachepoi_37684-1.xls
+apachepoi_37684-2.xls
+apachepoi_37684.xls
+apachepoi_39234.xls
+apachepoi_39512.xls
+apachepoi_39634.xls
+apachepoi_3dFormulas.xls
+apachepoi_40285.xls
+apachepoi_41139.xls
+apachepoi_41546.xls
+apachepoi_42016.xls
+apachepoi_42464-ExpPtg-bad.xls
+apachepoi_42464-ExpPtg-ok.xls
+apachepoi_42726.xls
+apachepoi_42844.xls
+apachepoi_43251.xls
+apachepoi_43493.xls
+apachepoi_43623.xls
+apachepoi_43902.xls
+apachepoi_44010-SingleChart.xls
+apachepoi_44010-TwoCharts.xls
+apachepoi_44167.xls
+apachepoi_44200.xls
+apachepoi_44201.xls
+apachepoi_44235.xls
+apachepoi_44297.xls
+apachepoi_44593.xls
+apachepoi_44636.xls
+apachepoi_44643.xls
+apachepoi_44693.xls
+apachepoi_44840.xls
+apachepoi_44861.xls
+apachepoi_44891.xls
+apachepoi_44958.xls
+apachepoi_45129.xls
+apachepoi_45290.xls
+apachepoi_45322.xls
+apachepoi_45365-2.xls
+apachepoi_45365.xls
+apachepoi_45492.xls
+apachepoi_45538_classic_Footer.xls
+apachepoi_45538_classic_Header.xls
+apachepoi_45538_form_Footer.xls
+apachepoi_45538_form_Header.xls
+apachepoi_45672.xls
+apachepoi_45720.xls
+apachepoi_45761.xls
+apachepoi_45784.xls
+apachepoi_46136-NoWarnings.xls
+apachepoi_46136-WithWarnings.xls
+apachepoi_46137.xls
+apachepoi_46250.xls
+apachepoi_46368.xls
+apachepoi_46445.xls
+apachepoi_46670_http.xls
+apachepoi_46670_local.xls
+apachepoi_46670_ref_airline.xls
+apachepoi_46904.xls
+apachepoi_47034.xls
+apachepoi_47154.xls
+apachepoi_47251.xls
+apachepoi_47251_1.xls
+apachepoi_47701.xls
+apachepoi_47847.xls
+apachepoi_47920.xls
+apachepoi_47924.xls
+apachepoi_48026.xls
+apachepoi_48180.xls
+apachepoi_48325.xls
+apachepoi_48703.xls
+apachepoi_48968.xls
+apachepoi_49096.xls
+apachepoi_49185.xls
+apachepoi_49219.xls
+apachepoi_49237.xls
+apachepoi_49524.xls
+apachepoi_49529.xls
+apachepoi_49581.xls
+apachepoi_49612.xls
+apachepoi_49751.xls
+apachepoi_49761.xls
+apachepoi_49896.xls
+apachepoi_49928.xls
+apachepoi_49931.xls
+apachepoi_50020.xls
+apachepoi_50298.xls
+apachepoi_50426.xls
+apachepoi_50756.xls
+apachepoi_50779_1.xls
+apachepoi_50779_2.xls
+apachepoi_50833.xls.pending
+apachepoi_50939.xls
+apachepoi_51143.xls
+apachepoi_51461.xls
+apachepoi_51498.xls
+apachepoi_51535.xls.pending
+apachepoi_51670.xls
+apachepoi_51675.xls
+apachepoi_51832.xls.pending
+apachepoi_52527.xls
+apachepoi_52575_main.xls
+apachepoi_52575_source.xls
+apachepoi_53404.xls
+apachepoi_53433.xls
+apachepoi_53446.xls
+apachepoi_53588.xls
+apachepoi_53691.xls
+apachepoi_53798_shiftNegative_TMPL.xls
+apachepoi_53972.xls
+apachepoi_53984.xls
+apachepoi_54016.xls
+apachepoi_54206.xls
+apachepoi_54500.xls
+apachepoi_54686_fraction_formats.xls
+apachepoi_55341_CellStyleBorder.xls
+apachepoi_55906-MultiSheetRefs.xls
+apachepoi_56325.xls
+apachepoi_56450.xls
+apachepoi_56482.xls
+apachepoi_56563a.xls
+apachepoi_56563b.xls
+apachepoi_56737.xls
+apachepoi_AbnormalSharedFormulaFlag.xls
+apachepoi_AreaErrPtg.xls
+apachepoi_BOOK_in_capitals.xls
+apachepoi_CodeFunctionTestCaseData.xls
+apachepoi_ColumnStyle1dp.xls
+apachepoi_ColumnStyle1dpColoured.xls
+apachepoi_ColumnStyleNone.xls
+apachepoi_ComplexFunctionTestCaseData.xls
+apachepoi_ContinueRecordProblem.xls
+apachepoi_DBCSHeader.xls
+apachepoi_DBCSSheetName.xls
+apachepoi_DateFormats.xls
+apachepoi_DeltaFunctionTestCaseData.xls
+apachepoi_DrawingAndComments.xls
+apachepoi_DrawingContinue.xls
+apachepoi_EmbeddedChartHeaderTest.xls
+apachepoi_Employee.xls
+apachepoi_ErrPtg.xls
+apachepoi_FactDoubleFunctionTestCaseData.xls
+apachepoi_ForShifting.xls
+apachepoi_FormatChoiceTests.xls
+apachepoi_Formatting.xls
+apachepoi_FormulaEvalTestData.xls
+apachepoi_FormulaRefs.xls
+apachepoi_FormulaSheetRange.xls
+apachepoi_HyperlinksOnManySheets.xls
+apachepoi_IfFormulaTest.xls
+apachepoi_ImRealFunctionTestCaseData.xls
+apachepoi_ImaginaryFunctionTestCaseData.xls
+apachepoi_IndexFunctionTestCaseData.xls
+apachepoi_IndirectFunctionTestCaseData.xls
+apachepoi_Intersection-52111.xls
+apachepoi_IntersectionPtg.xls
+apachepoi_IrrNpvTestCaseData.xls
+apachepoi_LookupFunctionsTestCaseData.xls
+apachepoi_MRExtraLines.xls
+apachepoi_MatchFunctionTestCaseData.xls
+apachepoi_MissingBits.xls
+apachepoi_NoGutsRecords.xls
+apachepoi_OddStyleRecord.xls
+apachepoi_PercentPtg.xls
+apachepoi_QuotientFunctionTestCaseData.xls
+apachepoi_RangePtg.xls
+apachepoi_ReadOnlyRecommended.xls
+apachepoi_ReferencePtg.xls
+apachepoi_RepeatingRowsCols.xls
+apachepoi_ReptFunctionTestCaseData.xls
+apachepoi_RomanFunctionTestCaseData.xls
+apachepoi_SampleSS.xls
+apachepoi_SharedFormulaTest.xls
+apachepoi_SheetWithDrawing.xls
+apachepoi_ShrinkToFit.xls
+apachepoi_Simple.xls
+apachepoi_SimpleChart.xls
+apachepoi_SimpleMultiCell.xls
+apachepoi_SimpleWithAutofilter.xls
+apachepoi_SimpleWithChoose.xls
+apachepoi_SimpleWithColours.xls
+apachepoi_SimpleWithComments.xls
+apachepoi_SimpleWithDataFormat.xls
+apachepoi_SimpleWithFormula.xls
+apachepoi_SimpleWithImages-mac.xls
+apachepoi_SimpleWithImages.xls
+apachepoi_SimpleWithPageBreaks.xls
+apachepoi_SimpleWithPrintArea.xls
+apachepoi_SimpleWithSkip.xls
+apachepoi_SimpleWithStyling.xls
+apachepoi_SingleLetterRanges.xls
+apachepoi_SolverContainerAfterSPGR.xls
+apachepoi_SquareMacro.xls
+apachepoi_StringContinueRecords.xls
+apachepoi_StringFormulas.xls
+apachepoi_SubtotalsNested.xls
+apachepoi_TestRandBetween.xls
+apachepoi_TwoSheetsNoneHidden.xls
+apachepoi_TwoSheetsOneHidden.xls
+apachepoi_UncalcedRecord.xls
+apachepoi_UnionPtg.xls
+apachepoi_WORKBOOK_in_capitals.xls
+apachepoi_WeekNumFunctionTestCaseData.xls
+apachepoi_WeekNumFunctionTestCaseData2013.xls
+apachepoi_WithChart.xls
+apachepoi_WithCheckBoxes.xls
+apachepoi_WithConditionalFormatting.xls
+apachepoi_WithEmbeddedObjects.xls
+apachepoi_WithExtendedStyles.xls
+apachepoi_WithFormattedGraphTitle.xls
+apachepoi_WithHyperlink.xls
+apachepoi_WithThreeCharts.xls
+apachepoi_WithTwoCharts.xls
+apachepoi_WithTwoHyperLinks.xls
+apachepoi_WrongFormulaRecordType.xls
+apachepoi_XRefCalc.xls
+apachepoi_XRefCalcData.xls
+apachepoi_atp.xls
+apachepoi_blankworkbook.xls
+apachepoi_bug_42794.xls
+apachepoi_colwidth.xls
+apachepoi_comments.xls
+apachepoi_countblankExamples.xls
+apachepoi_countifExamples.xls
+apachepoi_dg-text.xls
+apachepoi_drawings.xls
+apachepoi_duprich1.xls
+apachepoi_duprich2.xls
+apachepoi_dvEmpty.xls
+apachepoi_empty.xls
+apachepoi_ex41187-19267.xls
+apachepoi_ex42564-21435.xls
+apachepoi_ex42564-21503.xls
+apachepoi_ex42564-elementOrder.xls
+apachepoi_ex42570-20305.xls
+apachepoi_ex44921-21902.xls
+apachepoi_ex45046-21984.xls
+apachepoi_ex45582-22397.xls
+apachepoi_ex45672.xls
+apachepoi_ex45698-22488.xls.pending
+apachepoi_ex45978-extraLinkTableSheets.xls
+apachepoi_ex46548-23133.xls
+apachepoi_ex47747-sharedFormula.xls
+apachepoi_excel_with_embeded.xls
+apachepoi_excelant.xls.pending
+apachepoi_externalFunctionExample.xls
+apachepoi_finance.xls
+apachepoi_intercept.xls
+apachepoi_mirrTest.xls
+apachepoi_missingFuncs44675.xls
+apachepoi_mortgage-calculation.xls
+apachepoi_multibookFormulaA.xls
+apachepoi_multibookFormulaB.xls
+apachepoi_namedinput.xls
+apachepoi_noHeaderFooter47244.xls
+apachepoi_ole2-embedding.xls
+apachepoi_overlapSharedFormula.xls
+apachepoi_password.xls.pending
+apachepoi_rank.xls
+apachepoi_rk.xls
+apachepoi_shared_formulas.xls
+apachepoi_sumifformula.xls
+apachepoi_sumifs.xls
+apachepoi_templateExcelWithAutofilter.xls
+apachepoi_testArraysAndTables.xls
+apachepoi_testNames.xls
+apachepoi_testRRaC.xls
+apachepoi_testRVA.xls
+apachepoi_text.xls
+apachepoi_unicodeNameRecord.xls
+apachepoi_xor-encryption-abc.xls.pending
+apachepoi_yearfracExamples.xls
+calendar_stress_test.xls.pending
+cell_style_simple.xls
+comments_stress_test.xls
+custom_properties.xls
+defined_names_simple.xls
+formula_stress_test.xls
+formulae_test_simple.xls
+hyperlink_stress_test_2011.xls
+jxls-core_array.xls
+jxls-core_beandata.xls
+jxls-core_beanwithlist.xls
+jxls-core_doubleForEachOneRow.xls
+jxls-core_dynamicColumns.xls
+jxls-core_employeeNotes.xls
+jxls-core_expressions1.xls
+jxls-core_fixedsizelist.xls
+jxls-core_forOneRow.xls
+jxls-core_forOneRowMerge.xls
+jxls-core_forOneRowMerge2.xls
+jxls-core_forgroup.xls
+jxls-core_foriftag2.xls
+jxls-core_foriftag3.xls
+jxls-core_foriftag3OutTag.xls
+jxls-core_foriftagHor.xls
+jxls-core_foriftagOneRow.xls
+jxls-core_foriftagOneRow2.xls
+jxls-core_foriftagmerge.xls
+jxls-core_formatterbean.xls
+jxls-core_formula3.xls
+jxls-core_formula4.xls
+jxls-core_formulas.xls
+jxls-core_formulas2.xls
+jxls-core_grouping1.xls
+jxls-core_grouping2.xls
+jxls-core_grouping3.xls
+jxls-core_grouping4.xls
+jxls-core_groupingformulas.xls
+jxls-core_grouptag.xls
+jxls-core_hidesheets.xls
+jxls-core_iftag.xls
+jxls-core_iftagempty.xls
+jxls-core_jexl.xls
+jxls-core_mergecellslist.xls
+jxls-core_mergemultiplelistrows.xls
+jxls-core_multi-tab-template.xls
+jxls-core_multipleSheetList.xls
+jxls-core_multiplelistrows.xls
+jxls-core_outline.xls
+jxls-core_outtaginonerow.xls
+jxls-core_paralleltables.xls
+jxls-core_poiobjects.xls
+jxls-core_repeatedFormula.xls
+jxls-core_report.xls
+jxls-core_reportTimestamp.xls
+jxls-core_select.xls
+jxls-core_select2.xls
+jxls-core_severallistsinrow.xls
+jxls-core_severalpropertiesincell.xls
+jxls-core_simplebean.xls
+jxls-core_sqltagreport.xls
+jxls-core_stress.xls
+jxls-core_syntaxerror.xls
+jxls-core_twoIfTagsIn1Row.xls
+jxls-core_varstatus.xls
+jxls-examples_adjacentlists.xls
+jxls-examples_basictags.xls
+jxls-examples_chart.xls
+jxls-examples_colouring.xls
+jxls-examples_department.xls
+jxls-examples_dynamicolumns.xls
+jxls-examples_employees.xls
+jxls-examples_ex_temp.xls
+jxls-examples_grouping.xls
+jxls-examples_multiplelistrows.xls
+jxls-examples_report.xls
+jxls-examples_rowstyle.xls
+jxls-examples_stress1.xls
+jxls-examples_stress2.xls
+jxls-reader_departmentData.xls
+jxls-reader_employeesData.xls
+jxls-reader_emptyrowdata.xls
+jxls-reader_error1.xls
+jxls-reader_formulasData.xls
+jxls-reader_ids.xls
+jxls-src_adjacentlist_output.xls
+jxls-src_adjacentlists.xls
+jxls-src_basictags.xls
+jxls-src_basictags_output.xls
+jxls-src_chart.xls
+jxls-src_chart_output.xls
+jxls-src_colouring.xls
+jxls-src_colouring_output.xls
+jxls-src_department.xls
+jxls-src_department_output.xls
+jxls-src_departmentdata.xls
+jxls-src_dynamiccolumns_output.xls
+jxls-src_dynamiccolumns_template.xls
+jxls-src_employees.xls
+jxls-src_employees_output.xls
+jxls-src_grouping.xls
+jxls-src_grouping_output.xls
+jxls-src_hiddencolumn_output.xls
+jxls-src_multiplelistrows.xls
+jxls-src_multiplelistrows_output.xls
+jxls-src_report.xls
+jxls-src_report_output.xls
+jxls-src_rowstyle.xls
+jxls-src_rowstyle_output.xls
+large_strings.xls.pending
+libreoffice_calc_cell-value-validation.xls
+libreoffice_calc_chart-percent-stacked-with-line-chart.xls
+libreoffice_calc_chart-update-invisible-cells.xls
+libreoffice_calc_chart_complex-category-column-graph-repeating-values.xls
+libreoffice_calc_chart_complex-category-column-graph.xls
+libreoffice_calc_cjk-text_cell-justify-distributed-single.xls
+libreoffice_calc_cjk-text_cell-justify-distributed.xls
+libreoffice_calc_conditional-formatting.xls
+libreoffice_calc_csv-import_malformed-quotes.xls.pending
+libreoffice_calc_data-pilot_field-cell-format.xls
+libreoffice_calc_data-pilot_getpivotdata-cell-function.xls
+libreoffice_calc_data-pilot_named-range-as-data-source.xls
+libreoffice_calc_data-pilot_simple-range-as-data-source.xls
+libreoffice_calc_data-pilot_unlimited-data-fields.xls
+libreoffice_calc_dbf_numeric-field-with-zero.xls
+libreoffice_calc_drawing-object_connector-arrows.xls
+libreoffice_calc_drawing-object_rectangle-over-sized-rows-columns.xls
+libreoffice_calc_drawing-object_round-rectangle.xls
+libreoffice_calc_drawing-object_shapes.xls
+libreoffice_calc_equation-single.xls
+libreoffice_calc_external-ref_access-basic-range-func.xls
+libreoffice_calc_external-ref_access-basic-single-cell.xls
+libreoffice_calc_external-ref_access-basic-single-func.xls
+libreoffice_calc_external-ref_access-basic.xls
+libreoffice_calc_external-ref_circular-link-doc1.xls
+libreoffice_calc_external-ref_circular-link-doc2.xls
+libreoffice_calc_external-ref_extdata.xls
+libreoffice_calc_external-ref_range-name-extdata.xls
+libreoffice_calc_external-ref_range-name.xls
+libreoffice_calc_function_linest-excel.xls
+libreoffice_calc_function_logest-excel.xls
+libreoffice_calc_function_matrix_inline-array-single.xls
+libreoffice_calc_function_matrix_inline-arrays-softmaker.xls
+libreoffice_calc_function_matrix_inline-arrays.xls
+libreoffice_calc_function_n.xls
+libreoffice_calc_function_phonetic-richtext.xls
+libreoffice_calc_function_phonetic-single.xls
+libreoffice_calc_function_phonetic.xls
+libreoffice_calc_function_trend-growth-excel.xls
+libreoffice_calc_import-wrapped-text.xls
+libreoffice_calc_named-range_sheet-local.xls
+libreoffice_calc_outline_col-outline-nested.xls
+libreoffice_calc_outline_col-outline-single-left-button.xls
+libreoffice_calc_outline_col-outline-single.xls
+libreoffice_calc_outline_row-outline-nested.xls
+libreoffice_calc_outline_row-outline-single-top-button.xls
+libreoffice_calc_outline_row-outline-single.xls
+libreoffice_calc_print-layout_arial-10-1p.xls
+libreoffice_calc_print-layout_arial-10-2p.xls
+libreoffice_calc_print-layout_arial-11-1p.xls
+libreoffice_calc_print-layout_arial-11-2p.xls
+libreoffice_calc_print-layout_arial-12-1p.xls
+libreoffice_calc_print-layout_arial-8-1p.xls
+libreoffice_calc_print-layout_arial-9-1p.xls
+libreoffice_calc_string-number.xls
+libreoffice_calc_subtotals_two-on-one-sheet.xls
+libreoffice_calc_tab-color.xls
+libreoffice_calc_text-angled-with-border.xls
+libreoffice_calc_xls-import_300-worksheets.xls
+libreoffice_calc_xls-import_autofilter-range.xls
+libreoffice_calc_xls-import_cell-border-thickness.xls
+libreoffice_calc_xls-import_encryption_export-conditional-formatting.xls.pending
+libreoffice_calc_xls-import_paste-link_link.xls
+libreoffice_calc_xls-import_paste-link_src.xls
+libreoffice_calc_xls-import_pivot-cache-has-source.xls
+libreoffice_calc_xls-import_pivot-cache-no-source.xls
+libreoffice_calc_xls-import_pivot-dup-data-fields.xls
+libreoffice_calc_xls-import_pivot-layout-field-non-default.xls
+libreoffice_calc_xls-import_row-attributes_row-all-hidden.xls
+libreoffice_calc_xls-import_row-attributes_row-filtered.xls
+libreoffice_calc_xls-import_row-attributes_row-heights.xls
+libreoffice_calc_xls-import_row-attributes_row-tail-hidden-2.xls
+libreoffice_calc_xls-import_row-attributes_row-tail-hidden-last-row-visible.xls
+libreoffice_calc_xls-import_row-attributes_row-tail-hidden.xls
+libreoffice_calc_xls-import_row-attributes_row-top-bottom-hidden.xls
+libreoffice_calc_xls-import_shared-formula_1.xls
+libreoffice_calc_xls-import_shared-formulas-simple.xls
+merge_cells.xls
+named_ranges_2011.xls
+number_format.xls
+number_format_entities.xls
+number_format_russian.xls
+numfmt_1_russian.xls
+phonetic_text.xls
+phpexcel_bad_cfb_dir.xls
+pivot_table_named_range.xls
+pivot_table_test.xls
+pyExcelerator_P-0508-0000507647-3280-5298.xls
+pyExcelerator_chart1v8.xls
+pyExcelerator_excel2003.xls
+pyExcelerator_frmla.xls
+pyExcelerator_macro2v8.xls
+pyExcelerator_mini-mini.xls
+pyExcelerator_mini.xls
+pyExcelerator_oo14.xls
+rich_text_stress.xls
+roo_1900_base.xls
+roo_1904_base.xls
+roo_Bibelbund.xls
+roo_bad_excel_date.xls
+roo_bbu.xls
+roo_boolean.xls
+roo_borders.xls
+roo_bug-row-column-fixnum-float.xls
+roo_comments.xls
+roo_datetime.xls
+roo_datetime_floatconv.xls
+roo_emptysheets.xls
+roo_false_encoding.xls
+roo_formula.xls
+roo_formula_parse_error.xls
+roo_link.xls
+roo_matrix.xls
+roo_named_cells.xls
+roo_numbers1.xls
+roo_only_one_sheet.xls
+roo_paragraph.xls
+roo_prova.xls
+roo_simple_spreadsheet.xls
+roo_simple_spreadsheet_from_italo.xls
+roo_style.xls
+roo_time-test.xls
+roo_type_excelx.xls.pending
+roo_type_openoffice.xls.pending
+roo_whitespace.xls
+smart_tags_2007.xls
+sushi.xls
+text_and_numbers.xls
+write.xls
+xlrd_Formate.xls
+xlrd_formula_test_names.xls
+xlrd_formula_test_sjmachin.xls
+xlrd_issue20.xls
+xlrd_picture_in_cell.xls
+xlrd_profiles.xls
+xlrd_ragged.xls
+xlrd_xf_class.xls
+xlsx-stream-d-date-cell.xls
+AutoFilter.xml
+BlankSheetTypes.xml
+ErrorTypes.xml
+LONumbers-2010.xls.xml
+LONumbers-2010.xlsx.xml
+LONumbers-2011.xls.xml
+LONumbers-2011.xlsx.xml
+LONumbers.xls.xml
+NumberFormatCondition.xml
+RkNumber.xls.xml
+RkNumber.xlsb.xml
+RkNumber.xlsx.xml
+calendar_stress_test.xml.pending
+cell_style_simple.xml
+comments_stress_test.xls.xml
+comments_stress_test.xlsb.xml
+comments_stress_test.xlsx.xml
+custom_properties.xls.xml
+custom_properties.xlsb.xml
+custom_properties.xlsx.xml
+defined_names_simple.xml
+formula_stress_test.xls.xml
+formula_stress_test.xlsb.xml
+formula_stress_test.xlsx.xml
+formulae_test_simple.xml
+hyperlink_stress_test_2011.xml
+interview.xlsx.xml
+issue.xlsx.xml
+large_strings.xls.xml
+large_strings.xlsb.xml
+large_strings.xlsx.xml
+merge_cells.xls.xml
+merge_cells.xlsb.xml
+merge_cells.xlsx.xml
+mixed_sheets.xlsx.xml
+named_ranges_2011.xls.xml
+named_ranges_2011.xlsb.xml
+named_ranges_2011.xlsx.xml
+number_format.xls.xml
+number_format.xlsb.xml
+number_format.xlsm.xml
+number_format_entities.xml
+number_format_russian.xml
+numfmt_1_russian.xml
+oo34xml_cell_pattern.xml
+oo34xml_cellstyle.xml
+oo34xml_conditionalformat.xml
+oo34xml_dataformat.xml
+oo34xml_dataformat2.xml
+oo34xml_datarange.xml
+oo34xml_font.xml
+oo34xml_formula.xml
+oo34xml_headerfooter.xml
+oo34xml_merge.xml
+oo34xml_pagebreak.xml
+oo34xml_pagesheet.xml
+oo34xml_rowcolumn.xml
+oo34xml_solvsamp.xml
+phonetic_text.xml
+pivot_table_named_range.xml
+protect_stress_test_xml.xml
+rich_text_stress.xls.xml
+rich_text_stress.xlsb.xml
+rich_text_stress.xlsx.xml
+roo_Bibelbund.xml
+roo_bbu.xml
+roo_boolean.xml
+roo_borders.xml
+roo_bug-row-column-fixnum-float.xml
+roo_datetime.xml
+roo_datetime_floatconv.xml
+roo_emptysheets.xml
+roo_excel2003.xml
+roo_false_encoding.xml
+roo_formula.xml
+roo_formula_parse_error.xml
+roo_numbers1.xml
+roo_only_one_sheet.xml
+roo_paragraph.xml
+roo_simple_spreadsheet.xml
+roo_simple_spreadsheet_from_italo.xml
+roo_style.xml
+roo_time-test.xml
+roo_whitespace.xml
+smart_tags_2007.xml
+sushi.xml
+text_and_numbers.xml
+xlsx-stream-d-date-cell.xls.xml
+xlsx-stream-d-date-cell.xlsb.xml
+xlsx-stream-d-date-cell.xlsx.xml
+2011/apachepoi_53568.xlsx.xls
+2011/apachepoi_WithChartSheet.xlsx.xml
+2011/apachepoi_picture.xlsx.xml
+2011/apachepoi_styles.xlsx.xml
+2011/openpyxl_r_conditional-formatting.xlsx.xls
+2011/roo_file_item_error.xlsx.xml
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/tests/Common.js b/Source/UBCS-WEB/src/config/js-xlsx-master/tests/Common.js
new file mode 100644
index 0000000..2d28a5f
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/tests/Common.js
@@ -0,0 +1,25 @@
+锘縱ar XLSX = require('../');
+
+var tests = {
+	'should be able to open workbook': function (file) {
+		var xlsx = XLSX.readFile('tests/files/' + file);
+		expect(xlsx).toBeTruthy();
+		expect(xlsx).toEqual(jasmine.any(Object));
+	},
+	'should define all api properties correctly': function (file) {
+		var xlsx = XLSX.readFile('tests/files/' + file);
+		expect(xlsx.Workbook).toEqual(jasmine.any(Object));
+		expect(xlsx.Props).toBeDefined();
+		expect(xlsx.Deps).toBeDefined();
+		expect(xlsx.Sheets).toEqual(jasmine.any(Object));
+		expect(xlsx.SheetNames).toEqual(jasmine.any(Array));
+		expect(xlsx.Strings).toBeDefined();
+		expect(xlsx.Styles).toBeDefined();
+	}
+};
+
+module.exports = function (file) {
+	for (var key in tests) {
+		it(key, tests[key].bind(undefined, file));
+	}
+};
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/tests/EncodedSpec.js b/Source/UBCS-WEB/src/config/js-xlsx-master/tests/EncodedSpec.js
new file mode 100644
index 0000000..d57237d
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/tests/EncodedSpec.js
@@ -0,0 +1,8 @@
+锘縱ar XLSX = require('../');
+var testCommon = require('./Common.js');
+
+var file = '讞讬砖讜讘_谞拽讜讚讜转_讝讬讻讜讬.xlsx';
+
+describe(file, function () {
+	testCommon(file);
+});
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/tests/FormulaSpec.js b/Source/UBCS-WEB/src/config/js-xlsx-master/tests/FormulaSpec.js
new file mode 100644
index 0000000..c67cfb8
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/tests/FormulaSpec.js
@@ -0,0 +1,9 @@
+锘縱ar XLSX = require('../');
+var testCommon = require('./Common.js');
+
+var file = 'formula_stress_test.xlsx';
+
+describe(file, function () {
+	// Opening the file currently crashes node
+	//testCommon(file);
+});
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/tests/InterviewSpec.js b/Source/UBCS-WEB/src/config/js-xlsx-master/tests/InterviewSpec.js
new file mode 100644
index 0000000..759d238
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/tests/InterviewSpec.js
@@ -0,0 +1,8 @@
+锘縱ar XLSX = require('../');
+var testCommon = require('./Common.js');
+
+var file = 'interview.xlsx';
+
+describe(file, function () {
+	testCommon(file);
+});
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/tests/IssueSpec.js b/Source/UBCS-WEB/src/config/js-xlsx-master/tests/IssueSpec.js
new file mode 100644
index 0000000..cc667ae
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/tests/IssueSpec.js
@@ -0,0 +1,8 @@
+锘縱ar XLSX = require('../');
+var testCommon = require('./Common.js');
+
+var file = 'issue.xlsx';
+
+describe(file, function () {
+	testCommon(file);
+});
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/tests/MixedSpec.js b/Source/UBCS-WEB/src/config/js-xlsx-master/tests/MixedSpec.js
new file mode 100644
index 0000000..cbb7c2f
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/tests/MixedSpec.js
@@ -0,0 +1,8 @@
+锘縱ar XLSX = require('../');
+var testCommon = require('./Common.js');
+
+var file = 'mixed_sheets.xlsx';
+
+describe(file, function () {
+	testCommon(file);
+});
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/tests/NamedRangesSpec.js b/Source/UBCS-WEB/src/config/js-xlsx-master/tests/NamedRangesSpec.js
new file mode 100644
index 0000000..1e41a7e
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/tests/NamedRangesSpec.js
@@ -0,0 +1,8 @@
+锘縱ar XLSX = require('../');
+var testCommon = require('./Common.js');
+
+var file = 'named_ranges_2011.xlsx';
+
+describe(file, function () {
+	testCommon(file);
+});
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/tests/print-header.js b/Source/UBCS-WEB/src/config/js-xlsx-master/tests/print-header.js
new file mode 100644
index 0000000..c00f7b9
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/tests/print-header.js
@@ -0,0 +1,48 @@
+var XLSX = require('../.');
+
+var JSZip = require('jszip');
+var fs = require('fs');
+var cheerio = require('cheerio');
+
+var assert = require('assert');
+
+function JSDateToExcelDate(inDate) {
+  return 25569.0 + ((inDate.getTime() - (inDate.getTimezoneOffset() * 60 * 1000)) / (1000 * 60 * 60 * 24));
+}
+
+var defaultCellStyle = { font: { name: "Verdana", sz: 11, color: "FF00FF88"}, fill: {fgColor: {rgb: "FFFFAA00"}}};
+
+
+
+describe('repeats header', function () {
+  it ('repeats header', function() {
+
+
+    var workbook = {
+      SheetNames: ["Sheet1"],
+      Sheets: {
+        "Sheet1": {
+          "!ref":"A1:Z99",
+          "!printHeader":[1,1],
+          "!printColumns":["A","C"]
+        }
+      }
+    }
+
+    "ABCDEFGHIJKLMNOPQRSTUVWXYZ".split('').forEach(function(c) {
+      for (var i=1; i<100; i++) {
+        var address = c + i;
+
+        workbook.Sheets.Sheet1[address] = {v: address};
+      }
+    })
+    var OUTFILE = '/tmp/header.xlsx';
+    var OUTFILE = __dirname + '/../lab/headers/header.xlsx';
+
+
+    // write the file and read it back...
+    XLSX.writeFile(workbook, OUTFILE, {bookType: 'xlsx', bookSST: false});
+    console.log("open \""+OUTFILE+"\"")
+  });
+});
+
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/tests/test-acid.js b/Source/UBCS-WEB/src/config/js-xlsx-master/tests/test-acid.js
new file mode 100644
index 0000000..4694de2
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/tests/test-acid.js
@@ -0,0 +1,20 @@
+var X = require('../');
+var opts = { cellNF: true,
+  type: 'file',
+  cellHTML: true,
+  cellFormula: true,
+  cellStyles: false,
+  cellDates: false,
+  sheetStubs: false,
+  sheetRows: 0,
+  bookDeps: false,
+  bookSheets: false,
+  bookProps: false,
+  bookFiles: false,
+  bookVBA: false,
+  WTF: false }
+;
+var FILENAME = './test_files/number_format_entities-2.xlsx';
+wb = X.read(X.write(X.readFile(FILENAME,opts), {type:"buffer", bookType:'xlsx'}), {WTF:true, cellNF: true})
+
+X.writeFile(wb,'/tmp/wb3.xlsx');
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/tests/test-csv.js b/Source/UBCS-WEB/src/config/js-xlsx-master/tests/test-csv.js
new file mode 100644
index 0000000..75d7eae
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/tests/test-csv.js
@@ -0,0 +1,37 @@
+var argv = require('minimist')(process.argv.slice(2));
+var assert = require('assert')
+var XLSX = require('../');
+var fs = require('fs')
+var INFILE = './test_files/pivot_table_test.xlsm';
+var TESTFILE = './test_files/pivot_table_test.xlsm.';
+//var INFILE = './test_files/formula_stress_test.xlsb';
+//var TESTFILE = './test_files/formula_stress_test.xls.';
+var INFILE = './test_files/apachepoi_Tables.xlsx';
+var TESTFILE = './test_files/apachepoi_Tables.xlsx.';
+var INFILE = './test_files/apachepoi_45540_classic_Footer.xlsx';
+var TESTFILE = './test_files/apachepoi_45540_classic_Footer.xlsx.';
+var SHEET = argv.p || 0;
+
+function stripbom(x) {
+  return x.replace(/^\ufeff/, "");
+}
+function fixcsv(x) {
+  return stripbom(x).replace(/\t/g, ",").replace(/#{255}/g, "").replace(/"/g, "").replace(/[\n\r]+/g, "\n").replace(/\n*$/, "");
+}
+
+describe("CSV writer", function () {
+  it("Generates CSV", function () {
+    wb = XLSX.readFile(INFILE, {cellNF: true});
+
+    //XLSX.writeFile(wb, '/tmp/test-csv.xlsx');
+    //var wb = XLSX.readFile('/tmp/test-csv.xlsx', {cellNF: true});
+
+    wb = XLSX.read(XLSX.write(wb, {type: "buffer", bookType: 'xlsx'}), {cellNF: true})
+
+
+    var csv = fixcsv(XLSX.utils.make_csv(wb.Sheets[wb.SheetNames[SHEET]]))
+    var exp = fixcsv(fs.readFileSync(TESTFILE + SHEET + '.csv', 'utf8'))
+
+    assert.equal(csv, exp)
+  })
+})
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/tests/test-freeze.js b/Source/UBCS-WEB/src/config/js-xlsx-master/tests/test-freeze.js
new file mode 100644
index 0000000..b13ef0d
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/tests/test-freeze.js
@@ -0,0 +1,105 @@
+var XLSX = require('../.');
+
+var JSZip = require('jszip');
+var fs = require('fs');
+var cheerio = require('cheerio');
+
+var assert = require('assert');
+
+function JSDateToExcelDate(inDate) {
+  return 25569.0 + ((inDate.getTime() - (inDate.getTimezoneOffset() * 60 * 1000)) / (1000 * 60 * 60 * 24));
+}
+
+var defaultCellStyle = { font: { name: "Verdana", sz: 11, color: "FF00FF88"}, fill: {fgColor: {rgb: "FFFFAA00"}}};
+//"A1": {v: "Header", s: { border: { top: { style: 'medium', color: { rgb: "FFFFAA00"}}, left: { style: 'medium', color: { rgb: "FFFFAA00"}} }}},
+
+
+var workbook = {
+  SheetNames : ["Sheet1"],
+  Sheets: {
+    "Sheet1": {
+      "A1": {v: "Header"},
+      "A2": {v: "Anchorage"},
+      "A3": {v: "Anchorage"},
+      "A4": {v: "Boston"},
+      "A5": {v: "Chicago"},
+      "A6": {v: "Dayton"},
+      "A7": {v: "East Lansing"},
+      "A8": {v: "Fargo"},
+      "A9": {v: "Galena"},
+      "A10": {v: "Iowa City"},
+      "A11": {v: "Jacksonville"},
+      "A12": {v: "Jacksonville"},
+      "A13": {v: "Jacksonville"},
+      "A14": {v: "Jacksonville"},
+      "A15": {v: "Jacksonville"},
+      "A16": {v: "Jacksonville"},
+      "A17": {v: "Jacksonville"},
+      "A18": {v: "Jacksonville"},
+      "A19": {v: "Jacksonville"},
+      "A20": {v: "Jacksonville"},
+      "A21": {v: "Jacksonville"},
+      "A22": {v: "Jacksonville"},
+      "A23": {v: "Jacksonville"},
+      "A24": {v: "Jacksonville"},
+      "A25": {v: "Jacksonville"},
+      "A26": {v: "Jacksonville"},
+      "A27": {v: "Jacksonville"},
+      "A28": {v: "Jacksonville"},
+      "A29": {v: "Jacksonville"},
+      "A30": {v: "Jacksonville"},
+      "A31": {v: "Jacksonville"},
+      "A32": {v: "Jacksonville"},
+      "A33": {v: "Jacksonville"},
+      "A34": {v: "Jacksonville"},
+      "A35": {v: "Jacksonville"},
+      "A36": {v: "Jacksonville"},
+      "A37": {v: "Jacksonville"},
+      "A38": {v: "Jacksonville"},
+      "A39": {v: "Jacksonville"},
+      "A40": {v: "Jacksonville"},
+      "A41": {v: "Jacksonville"},
+      "A42": {v: "Jacksonville"},
+      "A43": {v: "Jacksonville"},
+      "A44": {v: "Jacksonville"},
+      "A45": {v: "Jacksonville"},
+      "A46": {v: "Jacksonville"},
+      "A47": {v: "Jacksonville"},
+      "A48": {v: "Jacksonville"},
+      "A49": {v: "Jacksonville"},
+      "A50": {v: "Jacksonville"},
+      "A51": {v: "Jacksonville"},
+      "A52": {v: "Jacksonville"},
+      "A53": {v: "Jacksonville"},
+      "A54": {v: "Jacksonville"},
+      "A55": {v: "Jacksonville"},
+      "A56": {v: "Jacksonville"},
+      "A57": {v: "Jacksonville"},
+      "A58": {v: "Jacksonville"},
+      "A59": {v: "Jacksonville"},
+      "!ref":"A1:A59",
+      "!printHeader":[1,1],
+      "!freeze":{
+        xSplit: "1",
+        ySplit: "1",
+        topLeftCell: "B2",
+        activePane: "bottomRight",
+        state: "frozen",
+      }
+    }
+  }
+};
+
+describe('repeats header', function () {
+  it ('repeats header', function() {
+
+
+    var OUTFILE = '/tmp/freeze.xlsx';
+    var OUTFILE = './lab/freeze/freeze.xlsx'
+
+    // write the file and read it back...
+    XLSX.writeFile(workbook, OUTFILE, {bookType: 'xlsx', bookSST: false});
+    console.log("open \""+OUTFILE+"\"")
+  });
+});
+
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/tests/test-min.js b/Source/UBCS-WEB/src/config/js-xlsx-master/tests/test-min.js
new file mode 100644
index 0000000..2f578f9
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/tests/test-min.js
@@ -0,0 +1,10 @@
+var X = require('../xlsx.js');
+var file = 'test_files/2013/apachepoi_44861.xls.xlsb';
+var file = 'test_files/apachepoi_44861.xls';
+var opts = {cellNF: true};
+describe('from 2013', function() {
+		it('should parse', function() {
+			var wb = X.readFile(file, opts);
+		});
+	});
+
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/tests/test-open.js b/Source/UBCS-WEB/src/config/js-xlsx-master/tests/test-open.js
new file mode 100644
index 0000000..1ccdb4f
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/tests/test-open.js
@@ -0,0 +1,8 @@
+var XLSX = require('../');
+
+wbin = XLSX.readFile('/tmp/wb.xlsx', {type: "xlsx"});
+
+XLSX.writeFile(wbin, '/tmp/wb2.xlsx', {
+  defaultCellStyle: { font: { name: "Verdana", sz: 11, color: "FF00FF88"}, fill: {fgColor: {rgb: "FFFFAA00"}}}
+});
+
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/tests/test-style.js b/Source/UBCS-WEB/src/config/js-xlsx-master/tests/test-style.js
new file mode 100644
index 0000000..003136f
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/tests/test-style.js
@@ -0,0 +1,717 @@
+var XLSX = require('../.');
+
+var JSZip = require('jszip');
+var fs = require('fs');
+var cheerio = require('cheerio');
+
+var assert = require('assert');
+
+function JSDateToExcelDate(inDate) {
+  return 25569.0 + ((inDate.getTime() - (inDate.getTimezoneOffset() * 60 * 1000)) / (1000 * 60 * 60 * 24));
+}
+
+var defaultCellStyle = { font: { name: "Verdana", sz: 11, color: "FF00FF88"}, fill: {fgColor: {rgb: "FFFFAA00"}}};
+
+// test to see if everything on the left equals its counterpart on the right
+// but the right hand object may have other attributes which we might not care about
+function basicallyEquals(left, right) {
+  if (Array.isArray(left) && Array.isArray(right)) {
+    for (var i=0; i<left.length; i++) {
+      if (!basicallyEquals(left[i], right[i] )) {
+        return false;
+      }
+    }
+    return true;
+  }
+  else if (typeof left == 'object' && typeof right == 'object') {
+    for (var key in left) {
+      if (key != 'bgColor') {
+        if (!basicallyEquals(left[key], right[key] )) {
+          if (JSON.stringify(left[key])=="{}" && right[key] == undefined) return true;
+          if (JSON.stringify(right[key])=="{}" && left[key] == undefined) return true;
+          return false;
+        }
+      }
+    }
+    return true;
+  }
+  else {
+    if (left != right) {
+      return false;
+    }
+    return true;
+  }
+}
+
+
+describe('styles with blank cells', function () {
+  it ('retains styles with blank cells', function() {
+
+
+    var OUTFILE = '/tmp/ex1.xlsx';
+    var OUTFILE2 = '/tmp/ex1a.xlsx';
+
+    var workbook = {
+      SheetNames : ["Sheet1"],
+      Sheets: {
+        "Sheet1": {
+          "B2": {v: "Top left", s: { border: { top: { style: 'medium', color: { rgb: "FFFFAA00"}}, left: { style: 'medium', color: { rgb: "FFFFAA00"}} }}},
+          "C2": {v: "Top right", s: { border: { top: { style: 'medium', color: { rgb: "FFFFAA00"}}, right: { style: 'medium', color: { rgb: "FFFFAA00"}} }}},
+          "B3": {v: "Bottom left", s: { border: { bottom: { style: 'medium', color: { rgb: "FFFFAA00"}}, left: { style: 'medium', color: { rgb: "FFFFAA00"}} }}},
+          "C3": {v: "", s: { border: { bottom: { style: 'medium', color: { rgb: "FFFFAA00"}}, right: { style: 'medium', color: { rgb: "FFFFAA00"}} }}},
+          "!ref":"B2:C3"
+        }
+      }
+    };
+
+    // write the file and read it back...
+    XLSX.writeFile(workbook, OUTFILE, {bookType: 'xlsx', bookSST: false});
+    var workbook2 = XLSX.readFile(OUTFILE, {cellStyles: true});
+    assert(basicallyEquals(workbook.Sheets, workbook2.Sheets));
+
+    XLSX.writeFile(workbook2, OUTFILE2, {bookType: 'xlsx', bookSST: false});
+    var workbook3 = XLSX.readFile(OUTFILE2, {cellStyles: true});
+    assert(basicallyEquals(workbook.Sheets, workbook3.Sheets))
+  });
+});
+
+describe("Export styles", function () {
+  var workbook, wbout, wbin;
+
+  before(function () {
+    workbook = {
+      "SheetNames": [
+        "Main"
+      ],
+      "Sheets": {
+        "Main": {
+          "!merges": [
+            {
+              "s": {
+                "c": 0,
+                "r": 0
+              },
+              "e": {
+                "c": 2,
+                "r": 0
+              }
+            }
+          ],
+          "A1": {
+            "v": "This is a submerged cell",
+            "s": {
+              "border": {
+                "left": {
+                  "style": "thick",
+                  "color": {
+                    "auto": 1
+                  }
+                },
+                "top": {
+                  "style": "thick",
+                  "color": {
+                    "auto": 1
+                  }
+                },
+                "bottom": {
+                  "style": "thick",
+                  "color": {
+                    "auto": 1
+                  }
+                }
+              }
+            },
+            "t": "s"
+          },
+          "B1": {
+            "v": "Pirate ship",
+            "s": {
+              "border": {
+                "top": {
+                  "style": "thick",
+                  "color": {
+                    "auto": 1
+                  }
+                },
+                "bottom": {
+                  "style": "thick",
+                  "color": {
+                    "auto": 1
+                  }
+                }
+              }
+            },
+            "t": "s"
+          },
+          "C1": {
+            "v": "Sunken treasure",
+            "s": {
+              "border": {
+                "right": {
+                  "style": "thick",
+                  "color": {
+                    "auto": 1
+                  }
+                },
+                "top": {
+                  "style": "thick",
+                  "color": {
+                    "auto": 1
+                  }
+                },
+                "bottom": {
+                  "style": "thick",
+                  "color": {
+                    "auto": 1
+                  }
+                }
+              }
+            },
+            "t": "s"
+          },
+          "A2": {
+            "v": "Blank",
+            "t": "s"
+          },
+          "B2": {
+            "v": "Red",
+            "s": {
+              "fill": {
+                "fgColor": {
+                  "rgb": "FFFF0000"
+                }
+              }
+            },
+            "t": "s"
+          },
+          "C2": {
+            "v": "Green",
+            "s": {
+              "fill": {
+                "fgColor": {
+                  "rgb": "FF00FF00"
+                }
+              }
+            },
+            "t": "s"
+          },
+          "D2": {
+            "v": "Blue",
+            "s": {
+              "fill": {
+                "fgColor": {
+                  "rgb": "FF0000FF"
+                }
+              }
+            },
+            "t": "s"
+          },
+          "E2": {
+            "v": "Theme 5",
+            "s": {
+              "fill": {
+                "fgColor": {
+                  "theme": 5
+                }
+              }
+            },
+            "t": "s"
+          },
+          "F2": {
+            "v": "Theme 5 Tint -0.5",
+            "s": {
+              "fill": {
+                "fgColor": {
+                  "theme": 5,
+                  "tint": -0.5
+                }
+              }
+            },
+            "t": "s"
+          },
+          "A3": {
+            "v": "Default",
+            "t": "s"
+          },
+          "B3": {
+            "v": "Arial",
+            "s": {
+              "font": {
+                "name": "Arial",
+                "sz": 24,
+                "color": {
+                  "theme": "5"
+                }
+              }
+            },
+            "t": "s"
+          },
+          "C3": {
+            "v": "Times New Roman",
+            "s": {
+              "font": {
+                "name": "Times New Roman",
+                bold:true,
+                underline: true,
+                italic: true,
+                strike: true,
+                outline: true,
+                shadow: true,
+                vertAlign: "superscript",
+                "sz": 16,
+                "color": {
+                  "rgb": "FF2222FF"
+                }
+              }
+            },
+            "t": "s"
+          },
+          "D3": {
+            "v": "Courier New",
+            "s": {
+              "font": {
+                "name": "Courier New",
+                "sz": 14
+              }
+            },
+            "t": "s"
+          },
+          "A4": {
+            "v": 0.618033989,
+            "t": "n"
+          },
+          "B4": {
+            "v": 0.618033989,
+            "t": "n"
+          },
+          "C4": {
+            "v": 0.618033989,
+            "t": "n"
+          },
+          "D4": {
+            "v": 0.618033989,
+            "t": "n",
+            "s": {
+              "numFmt": "0.00%"
+            }
+          },
+          "E4": {
+            "v": 0.618033989,
+            "t": "n",
+            "s": {
+              "numFmt": "0.00%",
+              "fill": {
+                "fgColor": {
+                  "rgb": "FFFFCC00"
+                }
+              }
+            }
+          },
+          "A5": {
+            "v": 0.618033989,
+            "t": "n",
+            "s": {
+              "numFmt": "0%"
+            }
+          },
+          "B5": {
+            "v": 0.618033989,
+            "t": "n",
+            "s": {
+              "numFmt": "0.0%"
+            }
+          },
+          "C5": {
+            "v": 0.618033989,
+            "t": "n",
+            "s": {
+              "numFmt": "0.00%"
+            }
+          },
+          "D5": {
+            "v": 0.618033989,
+            "t": "n",
+            "s": {
+              "numFmt": "0.000%"
+            }
+          },
+          "E5": {
+            "v": 0.618033989,
+            "t": "n",
+            "s": {
+              "numFmt": "0.0000%"
+            }
+          },
+          "F5": {
+            "v": 0,
+            "t": "n",
+            "s": {
+              "numFmt": "0.00%;\\(0.00%\\);\\-;@",
+              "fill": {
+                "fgColor": {
+                  "rgb": "FFFFCC00"
+                }
+              }
+            }
+          },
+          "A6": {
+            "v": "Sat Mar 21 2015 23:47:34 GMT-0400 (EDT)",
+            "t": "s"
+          },
+          "B6": {
+            "v": 42084.99137416667,
+            "t": "n"
+          },
+          "C6": {
+            "v": 42084.99137416667,
+            "s": {
+              "numFmt": "d-mmm-yy"
+            },
+            "t": "n"
+          },
+          "A7": {
+            "v": "left",
+            "s": {
+              "alignment": {
+                "horizontal": "left"
+              }
+            },
+            "t": "s"
+          },
+          "B7": {
+            "v": "center",
+            "s": {
+              "alignment": {
+                "horizontal": "center"
+              }
+            },
+            "t": "s"
+          },
+          "C7": {
+            "v": "right",
+            "s": {
+              "alignment": {
+                "horizontal": "right"
+              }
+            },
+            "t": "s"
+          },
+          "A8": {
+            "v": "vertical",
+            "s": {
+              "alignment": {
+                "vertical": "top"
+              }
+            },
+            "t": "s"
+          },
+          "B8": {
+            "v": "vertical",
+            "s": {
+              "alignment": {
+                "vertical": "center"
+              }
+            },
+            "t": "s"
+          },
+          "C8": {
+            "v": "vertical",
+            "s": {
+              "alignment": {
+                "vertical": "bottom"
+              }
+            },
+            "t": "s"
+          },
+          "A9": {
+            "v": "indent",
+            "s": {
+              "alignment": {
+                "indent": "1"
+              }
+            },
+            "t": "s"
+          },
+          "B9": {
+            "v": "indent",
+            "s": {
+              "alignment": {
+                "indent": "2"
+              }
+            },
+            "t": "s"
+          },
+          "C9": {
+            "v": "indent",
+            "s": {
+              "alignment": {
+                "indent": "3"
+              }
+            },
+            "t": "s"
+          },
+          "A10": {
+            "v": "In publishing and graphic design, lorem ipsum is a filler text commonly used to demonstrate the graphic elements of a document or visual presentation. ",
+            "s": {
+              "alignment": {
+                "wrapText": 1,
+                "horizontal": "right",
+                "vertical": "center",
+                "indent": 1
+              }
+            },
+            "t": "s"
+          },
+          "A11": {
+            "v": 41684.35264774306,
+            "s": {
+              "numFmt": "m/d/yy"
+            },
+            "t": "n"
+          },
+          "B11": {
+            "v": 41684.35264774306,
+            "s": {
+              "numFmt": "d-mmm-yy"
+            },
+            "t": "n"
+          },
+          "C11": {
+            "v": 41684.35264774306,
+            "s": {
+              "numFmt": "h:mm:ss AM/PM"
+            },
+            "t": "n"
+          },
+          "D11": {
+            "v": 42084.99137416667,
+            "s": {
+              "numFmt": "m/d/yy"
+            },
+            "t": "n"
+          },
+          "E11": {
+            "v": 42065.02247239584,
+            "s": {
+              "numFmt": "m/d/yy"
+            },
+            "t": "n"
+          },
+          "F11": {
+            "v": 42084.99137416667,
+            "s": {
+              "numFmt": "m/d/yy h:mm:ss AM/PM"
+            },
+            "t": "n"
+          },
+          "A12": {
+            "v": "Apple",
+            "s": {
+              "border": {
+                "top": {
+                  "style": "thin"
+                },
+                "left": {
+                  "style": "thin"
+                },
+                "right": {
+                  "style": "thin"
+                },
+                "bottom": {
+                  "style": "thin"
+                }
+              }
+            },
+            "t": "s"
+          },
+          "C12": {
+            "v": "Apple",
+            "s": {
+              "border": {
+                "diagonalUp": 1,
+                "diagonalDown": 1,
+                "top": {
+                  "style": "dashed",
+                  "color": {
+                    "auto": 1
+                  }
+                },
+                "right": {
+                  "style": "medium",
+                  "color": {
+                    "theme": "5"
+                  }
+                },
+                "bottom": {
+                  "style": "hair",
+                  "color": {
+                    "theme": 5,
+                    "tint": "-0.3"
+                  }
+                },
+                "left": {
+                  "style": "thin",
+                  "color": {
+                    "rgb": "FFFFAA00"
+                  }
+                },
+                "diagonal": {
+                  "style": "dotted",
+                  "color": {
+                    "auto": 1
+                  }
+                }
+              }
+            },
+            "t": "s"
+          },
+          "E12": {
+            "v": "Pear",
+            "s": {
+              "border": {
+                "diagonalUp": 1,
+                "diagonalDown": 1,
+                "top": {
+                  "style": "dashed",
+                  "color": {
+                    "auto": 1
+                  }
+                },
+                "right": {
+                  "style": "dotted",
+                  "color": {
+                    "theme": "5"
+                  }
+                },
+                "bottom": {
+                  "style": "mediumDashed",
+                  "color": {
+                    "theme": 5,
+                    "tint": "-0.3"
+                  }
+                },
+                "left": {
+                  "style": "double",
+                  "color": {
+                    "rgb": "FFFFAA00"
+                  }
+                },
+                "diagonal": {
+                  "style": "hair",
+                  "color": {
+                    "auto": 1
+                  }
+                }
+              }
+            },
+            "t": "s"
+          },
+          "A13": {
+            "v": "Up 90",
+            "s": {
+              "alignment": {
+                "textRotation": 90
+              }
+            },
+            "t": "s"
+          },
+          "B13": {
+            "v": "Up 45",
+            "s": {
+              "alignment": {
+                "textRotation": 45
+              }
+            },
+            "t": "s"
+          },
+          "C13": {
+            "v": "Horizontal",
+            "s": {
+              "alignment": {
+                "textRotation": 0
+              }
+            },
+            "t": "s"
+          },
+          "D13": {
+            "v": "Down 45",
+            "s": {
+              "alignment": {
+                "textRotation": 135
+              }
+            },
+            "t": "s"
+          },
+          "E13": {
+            "v": "Down 90",
+            "s": {
+              "alignment": {
+                "textRotation": 180
+              }
+            },
+            "t": "s"
+          },
+          "F13": {
+            "v": "Vertical",
+            "s": {
+              "alignment": {
+                "textRotation": 255
+              }
+            },
+            "t": "s"
+          },
+          "A14": {
+            "v": "Font color test",
+            "s": {
+              "font": {
+                "color": {
+                  "rgb": "FFC6EFCE"
+                }
+              }
+            },
+            "t": "s"
+          },
+          "!ref": "A1:F14"
+        }
+      }
+    }
+  });
+
+
+  it('can write to a file and read the file back', function () {
+    XLSX.writeFile(workbook, '/tmp/wb.xlsx',  { defaultCellStyle: defaultCellStyle });
+    var wb1 = XLSX.readFile('/tmp/wb.xlsx', {type: "xlsx", cellStyles: true, cellNF: true, WTF:true});
+    assert(basicallyEquals(workbook.Sheets.Main,wb1.Sheets.Main));
+  });
+
+  it('can write to a buffer and read the file back', function () {
+    var wb2 = XLSX.read(XLSX.write(workbook, {type:"buffer", bookType: 'xlsx'}), {cellStyles: true, cellNF: true})
+    XLSX.writeFile(wb2, '/tmp/wb2.xlsx',  { defaultCellStyle: defaultCellStyle });
+    console.log("open /tmp/wb2.xlsx")
+    assert(basicallyEquals(workbook.Sheets.Main,wb2.Sheets.Main));
+  });
+
+  it('should edit style of one cell without applie modification on other cell', function () {
+    var wb2 = XLSX.read(XLSX.write(workbook, {type:"buffer", bookType: 'xlsx'}), {cellStyles: true, cellNF: true})
+
+    var A6s = wb2.Sheets.Main.A6.s;
+    var B6s = wb2.Sheets.Main.B6.s;
+
+    Object.keys(A6s).forEach(function(key) {
+      if(A6s[key]) {
+        assert.deepEqual(A6s[key],B6s[key]);
+      }
+    });
+
+    assert(A6s.border.top === undefined);
+    assert(B6s.border.top === undefined);
+
+    A6s.border.top = {};
+    assert(B6s.border.top === undefined);
+
+    XLSX.writeFile(wb2, '/tmp/wb2.xlsx',  { defaultCellStyle: defaultCellStyle });
+    assert(basicallyEquals(workbook.Sheets.Main,wb2.Sheets.Main));
+  });
+
+});
+
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/tests/write.js b/Source/UBCS-WEB/src/config/js-xlsx-master/tests/write.js
new file mode 100644
index 0000000..f3159af
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/tests/write.js
@@ -0,0 +1,87 @@
+/* writing feature test -- look for TEST: in comments */
+/* vim: set ts=2: */
+
+/* original data */
+var data = [
+	[1,2,3],
+	[true, false, null, "sheetjs"],
+	["foo","bar",new Date("2014-02-19T14:30Z"), "0.3"],
+	["baz", null, "qux"]
+];
+
+var ws_name = "SheetJS";
+
+var wscols = [
+	{wch:6},
+	{wch:7},
+	{wch:10},
+	{wch:20}
+];
+
+
+console.log("Sheet Name: " + ws_name);
+console.log("Data: "); for(var i=0; i!=data.length; ++i) console.log(data[i]);
+console.log("Columns :"); for(i=0; i!=wscols.length;++i) console.log(wscols[i]);
+
+
+
+/* require XLSX */
+if(typeof XLSX === "undefined") { try { XLSX = require('./'); } catch(e) { XLSX = require('../'); } }
+
+/* dummy workbook constructor */
+function Workbook() {
+	if(!(this instanceof Workbook)) return new Workbook();
+	this.SheetNames = [];
+	this.Sheets = {};
+}
+var wb = new Workbook();
+
+
+/* TODO: date1904 logic */
+function datenum(v, date1904) {
+	if(date1904) v+=1462;
+	var epoch = Date.parse(v);
+	return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);
+}
+
+/* convert an array of arrays in JS to a CSF spreadsheet */
+function sheet_from_array_of_arrays(data, opts) {
+	var ws = {};
+	var range = {s: {c:10000000, r:10000000}, e: {c:0, r:0 }};
+	for(var R = 0; R != data.length; ++R) {
+		for(var C = 0; C != data[R].length; ++C) {
+			if(range.s.r > R) range.s.r = R;
+			if(range.s.c > C) range.s.c = C;
+			if(range.e.r < R) range.e.r = R;
+			if(range.e.c < C) range.e.c = C;
+			var cell = {v: data[R][C] };
+			if(cell.v == null) continue;
+			var cell_ref = XLSX.utils.encode_cell({c:C,r:R});
+
+			/* TEST: proper cell types and value handling */
+			if(typeof cell.v === 'number') cell.t = 'n';
+			else if(typeof cell.v === 'boolean') cell.t = 'b';
+			else if(cell.v instanceof Date) {
+				cell.t = 'n'; cell.z = XLSX.SSF._table[14];
+				cell.v = datenum(cell.v);
+			}
+			else cell.t = 's';
+			ws[cell_ref] = cell;
+		}
+	}
+
+	/* TEST: proper range */
+	if(range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range);
+	return ws;
+}
+var ws = sheet_from_array_of_arrays(data);
+
+/* TEST: add worksheet to workbook */
+wb.SheetNames.push(ws_name);
+wb.Sheets[ws_name] = ws;
+
+/* TEST: column widths */
+ws['!cols'] = wscols;
+
+/* write file */
+XLSX.writeFile(wb, 'sheetjs.xlsx');
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/xlsx.js b/Source/UBCS-WEB/src/config/js-xlsx-master/xlsx.js
new file mode 100644
index 0000000..6bca3c6
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/xlsx.js
@@ -0,0 +1,12577 @@
+/* xlsx.js (C) 2013-2015 SheetJS -- http://sheetjs.com */
+/* vim: set ts=2: */
+/*jshint -W041 */
+/*jshint funcscope:true, eqnull:true */
+var XLSX = {};
+(function make_xlsx(XLSX){
+XLSX.version = '0.8.20';
+var current_codepage = 1200, current_cptable;
+if(typeof module !== "undefined" && typeof require !== 'undefined') {
+	if(typeof cptable === 'undefined') cptable = require('./dist/cpexcel');
+	current_cptable = cptable[current_codepage];
+}
+function reset_cp() { set_cp(1200); }
+var set_cp = function(cp) { current_codepage = cp; };
+
+function char_codes(data) { var o = []; for(var i = 0, len = data.length; i < len; ++i) o[i] = data.charCodeAt(i); return o; }
+var debom_xml = function(data) { return data; };
+
+var _getchar = function _gc1(x) { return String.fromCharCode(x); };
+if(typeof cptable !== 'undefined') {
+	set_cp = function(cp) { current_codepage = cp; current_cptable = cptable[cp]; };
+	debom_xml = function(data) {
+		if(data.charCodeAt(0) === 0xFF && data.charCodeAt(1) === 0xFE) { return cptable.utils.decode(1200, char_codes(data.substr(2))); }
+		return data;
+	};
+	_getchar = function _gc2(x) {
+		if(current_codepage === 1200) return String.fromCharCode(x);
+		return cptable.utils.decode(current_codepage, [x&255,x>>8])[0];
+	};
+}
+var Base64 = (function make_b64(){
+	var map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
+	return {
+		encode: function(input, utf8) {
+			var o = "";
+			var c1, c2, c3, e1, e2, e3, e4;
+			for(var i = 0; i < input.length; ) {
+				c1 = input.charCodeAt(i++);
+				c2 = input.charCodeAt(i++);
+				c3 = input.charCodeAt(i++);
+				e1 = c1 >> 2;
+				e2 = (c1 & 3) << 4 | c2 >> 4;
+				e3 = (c2 & 15) << 2 | c3 >> 6;
+				e4 = c3 & 63;
+				if (isNaN(c2)) { e3 = e4 = 64; }
+				else if (isNaN(c3)) { e4 = 64; }
+				o += map.charAt(e1) + map.charAt(e2) + map.charAt(e3) + map.charAt(e4);
+			}
+			return o;
+		},
+		decode: function b64_decode(input, utf8) {
+			var o = "";
+			var c1, c2, c3;
+			var e1, e2, e3, e4;
+			input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
+			for(var i = 0; i < input.length;) {
+				e1 = map.indexOf(input.charAt(i++));
+				e2 = map.indexOf(input.charAt(i++));
+				e3 = map.indexOf(input.charAt(i++));
+				e4 = map.indexOf(input.charAt(i++));
+				c1 = e1 << 2 | e2 >> 4;
+				c2 = (e2 & 15) << 4 | e3 >> 2;
+				c3 = (e3 & 3) << 6 | e4;
+				o += String.fromCharCode(c1);
+				if (e3 != 64) { o += String.fromCharCode(c2); }
+				if (e4 != 64) { o += String.fromCharCode(c3); }
+			}
+			return o;
+		}
+	};
+})();
+var has_buf = (typeof Buffer !== 'undefined');
+
+function new_raw_buf(len) {
+	/* jshint -W056 */
+	return new (has_buf ? Buffer : Array)(len);
+	/* jshint +W056 */
+}
+
+function s2a(s) {
+	if(has_buf) return new Buffer(s, "binary");
+	return s.split("").map(function(x){ return x.charCodeAt(0) & 0xff; });
+}
+
+var bconcat = function(bufs) { return [].concat.apply([], bufs); };
+
+var chr0 = /\u0000/g, chr1 = /[\u0001-\u0006]/;
+/* ssf.js (C) 2013-2014 SheetJS -- http://sheetjs.com */
+/*jshint -W041 */
+var SSF = {};
+var make_ssf = function make_ssf(SSF){
+SSF.version = '0.8.1';
+function _strrev(x) { var o = "", i = x.length-1; while(i>=0) o += x.charAt(i--); return o; }
+function fill(c,l) { var o = ""; while(o.length < l) o+=c; return o; }
+function pad0(v,d){var t=""+v; return t.length>=d?t:fill('0',d-t.length)+t;}
+function pad_(v,d){var t=""+v;return t.length>=d?t:fill(' ',d-t.length)+t;}
+function rpad_(v,d){var t=""+v; return t.length>=d?t:t+fill(' ',d-t.length);}
+function pad0r1(v,d){var t=""+Math.round(v); return t.length>=d?t:fill('0',d-t.length)+t;}
+function pad0r2(v,d){var t=""+v; return t.length>=d?t:fill('0',d-t.length)+t;}
+var p2_32 = Math.pow(2,32);
+function pad0r(v,d){if(v>p2_32||v<-p2_32) return pad0r1(v,d); var i = Math.round(v); return pad0r2(i,d); }
+function isgeneral(s, i) { return s.length >= 7 + i && (s.charCodeAt(i)|32) === 103 && (s.charCodeAt(i+1)|32) === 101 && (s.charCodeAt(i+2)|32) === 110 && (s.charCodeAt(i+3)|32) === 101 && (s.charCodeAt(i+4)|32) === 114 && (s.charCodeAt(i+5)|32) === 97 && (s.charCodeAt(i+6)|32) === 108; }
+/* Options */
+var opts_fmt = [
+	["date1904", 0],
+	["output", ""],
+	["WTF", false]
+];
+function fixopts(o){
+	for(var y = 0; y != opts_fmt.length; ++y) if(o[opts_fmt[y][0]]===undefined) o[opts_fmt[y][0]]=opts_fmt[y][1];
+}
+SSF.opts = opts_fmt;
+var table_fmt = {
+	0:  'General',
+	1:  '0',
+	2:  '0.00',
+	3:  '#,##0',
+	4:  '#,##0.00',
+	9:  '0%',
+	10: '0.00%',
+	11: '0.00E+00',
+	12: '# ?/?',
+	13: '# ??/??',
+	14: 'm/d/yy',
+	15: 'd-mmm-yy',
+	16: 'd-mmm',
+	17: 'mmm-yy',
+	18: 'h:mm AM/PM',
+	19: 'h:mm:ss AM/PM',
+	20: 'h:mm',
+	21: 'h:mm:ss',
+	22: 'm/d/yy h:mm',
+	37: '#,##0 ;(#,##0)',
+	38: '#,##0 ;[Red](#,##0)',
+	39: '#,##0.00;(#,##0.00)',
+	40: '#,##0.00;[Red](#,##0.00)',
+	45: 'mm:ss',
+	46: '[h]:mm:ss',
+	47: 'mmss.0',
+	48: '##0.0E+0',
+	49: '@',
+	56: '"涓婂崍/涓嬪崍 "hh"鏅�"mm"鍒�"ss"绉� "',
+	65535: 'General'
+};
+var days = [
+	['Sun', 'Sunday'],
+	['Mon', 'Monday'],
+	['Tue', 'Tuesday'],
+	['Wed', 'Wednesday'],
+	['Thu', 'Thursday'],
+	['Fri', 'Friday'],
+	['Sat', 'Saturday']
+];
+var months = [
+	['J', 'Jan', 'January'],
+	['F', 'Feb', 'February'],
+	['M', 'Mar', 'March'],
+	['A', 'Apr', 'April'],
+	['M', 'May', 'May'],
+	['J', 'Jun', 'June'],
+	['J', 'Jul', 'July'],
+	['A', 'Aug', 'August'],
+	['S', 'Sep', 'September'],
+	['O', 'Oct', 'October'],
+	['N', 'Nov', 'November'],
+	['D', 'Dec', 'December']
+];
+function frac(x, D, mixed) {
+	var sgn = x < 0 ? -1 : 1;
+	var B = x * sgn;
+	var P_2 = 0, P_1 = 1, P = 0;
+	var Q_2 = 1, Q_1 = 0, Q = 0;
+	var A = Math.floor(B);
+	while(Q_1 < D) {
+		A = Math.floor(B);
+		P = A * P_1 + P_2;
+		Q = A * Q_1 + Q_2;
+		if((B - A) < 0.0000000005) break;
+		B = 1 / (B - A);
+		P_2 = P_1; P_1 = P;
+		Q_2 = Q_1; Q_1 = Q;
+	}
+	if(Q > D) { Q = Q_1; P = P_1; }
+	if(Q > D) { Q = Q_2; P = P_2; }
+	if(!mixed) return [0, sgn * P, Q];
+	if(Q===0) throw "Unexpected state: "+P+" "+P_1+" "+P_2+" "+Q+" "+Q_1+" "+Q_2;
+	var q = Math.floor(sgn * P/Q);
+	return [q, sgn*P - q*Q, Q];
+}
+function general_fmt_int(v, opts) { return ""+v; }
+SSF._general_int = general_fmt_int;
+var general_fmt_num = (function make_general_fmt_num() {
+var gnr1 = /\.(\d*[1-9])0+$/, gnr2 = /\.0*$/, gnr4 = /\.(\d*[1-9])0+/, gnr5 = /\.0*[Ee]/, gnr6 = /(E[+-])(\d)$/;
+function gfn2(v) {
+	var w = (v<0?12:11);
+	var o = gfn5(v.toFixed(12)); if(o.length <= w) return o;
+	o = v.toPrecision(10); if(o.length <= w) return o;
+	return v.toExponential(5);
+}
+function gfn3(v) {
+	var o = v.toFixed(11).replace(gnr1,".$1");
+	if(o.length > (v<0?12:11)) o = v.toPrecision(6);
+	return o;
+}
+function gfn4(o) {
+	for(var i = 0; i != o.length; ++i) if((o.charCodeAt(i) | 0x20) === 101) return o.replace(gnr4,".$1").replace(gnr5,"E").replace("e","E").replace(gnr6,"$10$2");
+	return o;
+}
+function gfn5(o) {
+	//for(var i = 0; i != o.length; ++i) if(o.charCodeAt(i) === 46) return o.replace(gnr2,"").replace(gnr1,".$1");
+	//return o;
+	return o.indexOf(".") > -1 ? o.replace(gnr2,"").replace(gnr1,".$1") : o;
+}
+return function general_fmt_num(v, opts) {
+	var V = Math.floor(Math.log(Math.abs(v))*Math.LOG10E), o;
+	if(V >= -4 && V <= -1) o = v.toPrecision(10+V);
+	else if(Math.abs(V) <= 9) o = gfn2(v);
+	else if(V === 10) o = v.toFixed(10).substr(0,12);
+	else o = gfn3(v);
+	return gfn5(gfn4(o));
+};})();
+SSF._general_num = general_fmt_num;
+function general_fmt(v, opts) {
+	switch(typeof v) {
+		case 'string': return v;
+		case 'boolean': return v ? "TRUE" : "FALSE";
+		case 'number': return (v|0) === v ? general_fmt_int(v, opts) : general_fmt_num(v, opts);
+	}
+	throw new Error("unsupported value in General format: " + v);
+}
+SSF._general = general_fmt;
+function fix_hijri(date, o) { return 0; }
+function parse_date_code(v,opts,b2) {
+	if(v > 2958465 || v < 0) return null;
+	var date = (v|0), time = Math.floor(86400 * (v - date)), dow=0;
+	var dout=[];
+	var out={D:date, T:time, u:86400*(v-date)-time,y:0,m:0,d:0,H:0,M:0,S:0,q:0};
+	if(Math.abs(out.u) < 1e-6) out.u = 0;
+	fixopts(opts != null ? opts : (opts=[]));
+	if(opts.date1904) date += 1462;
+	if(out.u > 0.999) {
+		out.u = 0;
+		if(++time == 86400) { time = 0; ++date; }
+	}
+	if(date === 60) {dout = b2 ? [1317,10,29] : [1900,2,29]; dow=3;}
+	else if(date === 0) {dout = b2 ? [1317,8,29] : [1900,1,0]; dow=6;}
+	else {
+		if(date > 60) --date;
+		/* 1 = Jan 1 1900 */
+		var d = new Date(1900,0,1);
+		d.setDate(d.getDate() + date - 1);
+		dout = [d.getFullYear(), d.getMonth()+1,d.getDate()];
+		dow = d.getDay();
+		if(date < 60) dow = (dow + 6) % 7;
+		if(b2) dow = fix_hijri(d, dout);
+	}
+	out.y = dout[0]; out.m = dout[1]; out.d = dout[2];
+	out.S = time % 60; time = Math.floor(time / 60);
+	out.M = time % 60; time = Math.floor(time / 60);
+	out.H = time;
+	out.q = dow;
+	return out;
+}
+SSF.parse_date_code = parse_date_code;
+/*jshint -W086 */
+function write_date(type, fmt, val, ss0) {
+	var o="", ss=0, tt=0, y = val.y, out, outl = 0;
+	switch(type) {
+		case 98: /* 'b' buddhist year */
+			y = val.y + 543;
+			/* falls through */
+		case 121: /* 'y' year */
+		switch(fmt.length) {
+			case 1: case 2: out = y % 100; outl = 2; break;
+			default: out = y % 10000; outl = 4; break;
+		} break;
+		case 109: /* 'm' month */
+		switch(fmt.length) {
+			case 1: case 2: out = val.m; outl = fmt.length; break;
+			case 3: return months[val.m-1][1];
+			case 5: return months[val.m-1][0];
+			default: return months[val.m-1][2];
+		} break;
+		case 100: /* 'd' day */
+		switch(fmt.length) {
+			case 1: case 2: out = val.d; outl = fmt.length; break;
+			case 3: return days[val.q][0];
+			default: return days[val.q][1];
+		} break;
+		case 104: /* 'h' 12-hour */
+		switch(fmt.length) {
+			case 1: case 2: out = 1+(val.H+11)%12; outl = fmt.length; break;
+			default: throw 'bad hour format: ' + fmt;
+		} break;
+		case 72: /* 'H' 24-hour */
+		switch(fmt.length) {
+			case 1: case 2: out = val.H; outl = fmt.length; break;
+			default: throw 'bad hour format: ' + fmt;
+		} break;
+		case 77: /* 'M' minutes */
+		switch(fmt.length) {
+			case 1: case 2: out = val.M; outl = fmt.length; break;
+			default: throw 'bad minute format: ' + fmt;
+		} break;
+		case 115: /* 's' seconds */
+		if(val.u === 0) switch(fmt) {
+			case 's': case 'ss': return pad0(val.S, fmt.length);
+			case '.0': case '.00': case '.000':
+		}
+		switch(fmt) {
+			case 's': case 'ss': case '.0': case '.00': case '.000':
+				if(ss0 >= 2) tt = ss0 === 3 ? 1000 : 100;
+				else tt = ss0 === 1 ? 10 : 1;
+				ss = Math.round((tt)*(val.S + val.u));
+				if(ss >= 60*tt) ss = 0;
+				if(fmt === 's') return ss === 0 ? "0" : ""+ss/tt;
+				o = pad0(ss,2 + ss0);
+				if(fmt === 'ss') return o.substr(0,2);
+				return "." + o.substr(2,fmt.length-1);
+			default: throw 'bad second format: ' + fmt;
+		}
+		case 90: /* 'Z' absolute time */
+		switch(fmt) {
+			case '[h]': case '[hh]': out = val.D*24+val.H; break;
+			case '[m]': case '[mm]': out = (val.D*24+val.H)*60+val.M; break;
+			case '[s]': case '[ss]': out = ((val.D*24+val.H)*60+val.M)*60+Math.round(val.S+val.u); break;
+			default: throw 'bad abstime format: ' + fmt;
+		} outl = fmt.length === 3 ? 1 : 2; break;
+		case 101: /* 'e' era */
+			out = y; outl = 1;
+	}
+	if(outl > 0) return pad0(out, outl); else return "";
+}
+/*jshint +W086 */
+function commaify(s) {
+	if(s.length <= 3) return s;
+	var j = (s.length % 3), o = s.substr(0,j);
+	for(; j!=s.length; j+=3) o+=(o.length > 0 ? "," : "") + s.substr(j,3);
+	return o;
+}
+var write_num = (function make_write_num(){
+var pct1 = /%/g;
+function write_num_pct(type, fmt, val){
+	var sfmt = fmt.replace(pct1,""), mul = fmt.length - sfmt.length;
+	return write_num(type, sfmt, val * Math.pow(10,2*mul)) + fill("%",mul);
+}
+function write_num_cm(type, fmt, val){
+	var idx = fmt.length - 1;
+	while(fmt.charCodeAt(idx-1) === 44) --idx;
+	return write_num(type, fmt.substr(0,idx), val / Math.pow(10,3*(fmt.length-idx)));
+}
+function write_num_exp(fmt, val){
+	var o;
+	var idx = fmt.indexOf("E") - fmt.indexOf(".") - 1;
+	if(fmt.match(/^#+0.0E\+0$/)) {
+		var period = fmt.indexOf("."); if(period === -1) period=fmt.indexOf('E');
+		var ee = Math.floor(Math.log(Math.abs(val))*Math.LOG10E)%period;
+		if(ee < 0) ee += period;
+		o = (val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);
+		if(o.indexOf("e") === -1) {
+			var fakee = Math.floor(Math.log(Math.abs(val))*Math.LOG10E);
+			if(o.indexOf(".") === -1) o = o[0] + "." + o.substr(1) + "E+" + (fakee - o.length+ee);
+			else o += "E+" + (fakee - ee);
+			while(o.substr(0,2) === "0.") {
+				o = o[0] + o.substr(2,period) + "." + o.substr(2+period);
+				o = o.replace(/^0+([1-9])/,"$1").replace(/^0+\./,"0.");
+			}
+			o = o.replace(/\+-/,"-");
+		}
+		o = o.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/,function($$,$1,$2,$3) { return $1 + $2 + $3.substr(0,(period+ee)%period) + "." + $3.substr(ee) + "E"; });
+	} else o = val.toExponential(idx);
+	if(fmt.match(/E\+00$/) && o.match(/e[+-]\d$/)) o = o.substr(0,o.length-1) + "0" + o[o.length-1];
+	if(fmt.match(/E\-/) && o.match(/e\+/)) o = o.replace(/e\+/,"e");
+	return o.replace("e","E");
+}
+var frac1 = /# (\?+)( ?)\/( ?)(\d+)/;
+function write_num_f1(r, aval, sign) {
+	var den = parseInt(r[4]), rr = Math.round(aval * den), base = Math.floor(rr/den);
+	var myn = (rr - base*den), myd = den;
+	return sign + (base === 0 ? "" : ""+base) + " " + (myn === 0 ? fill(" ", r[1].length + 1 + r[4].length) : pad_(myn,r[1].length) + r[2] + "/" + r[3] + pad0(myd,r[4].length));
+}
+function write_num_f2(r, aval, sign) {
+	return sign + (aval === 0 ? "" : ""+aval) + fill(" ", r[1].length + 2 + r[4].length);
+}
+var dec1 = /^#*0*\.(0+)/;
+var closeparen = /\).*[0#]/;
+var phone = /\(###\) ###\\?-####/;
+function hashq(str) {
+	var o = "", cc;
+	for(var i = 0; i != str.length; ++i) switch((cc=str.charCodeAt(i))) {
+		case 35: break;
+		case 63: o+= " "; break;
+		case 48: o+= "0"; break;
+		default: o+= String.fromCharCode(cc);
+	}
+	return o;
+}
+function rnd(val, d) { var dd = Math.pow(10,d); return ""+(Math.round(val * dd)/dd); }
+function dec(val, d) { return Math.round((val-Math.floor(val))*Math.pow(10,d)); }
+function flr(val) { if(val < 2147483647 && val > -2147483648) return ""+(val >= 0 ? (val|0) : (val-1|0)); return ""+Math.floor(val); }
+function write_num_flt(type, fmt, val) {
+	if(type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {
+		var ffmt = fmt.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,"");
+		if(val >= 0) return write_num_flt('n', ffmt, val);
+		return '(' + write_num_flt('n', ffmt, -val) + ')';
+	}
+	if(fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm(type, fmt, val);
+	if(fmt.indexOf('%') !== -1) return write_num_pct(type, fmt, val);
+	if(fmt.indexOf('E') !== -1) return write_num_exp(fmt, val);
+	if(fmt.charCodeAt(0) === 36) return "$"+write_num_flt(type,fmt.substr(fmt[1]==' '?2:1),val);
+	var o, oo;
+	var r, ri, ff, aval = Math.abs(val), sign = val < 0 ? "-" : "";
+	if(fmt.match(/^00+$/)) return sign + pad0r(aval,fmt.length);
+	if(fmt.match(/^[#?]+$/)) {
+		o = pad0r(val,0); if(o === "0") o = "";
+		return o.length > fmt.length ? o : hashq(fmt.substr(0,fmt.length-o.length)) + o;
+	}
+	if((r = fmt.match(frac1)) !== null) return write_num_f1(r, aval, sign);
+	if(fmt.match(/^#+0+$/) !== null) return sign + pad0r(aval,fmt.length - fmt.indexOf("0"));
+	if((r = fmt.match(dec1)) !== null) {
+		o = rnd(val, r[1].length).replace(/^([^\.]+)$/,"$1."+r[1]).replace(/\.$/,"."+r[1]).replace(/\.(\d*)$/,function($$, $1) { return "." + $1 + fill("0", r[1].length-$1.length); });
+		return fmt.indexOf("0.") !== -1 ? o : o.replace(/^0\./,".");
+	}
+	fmt = fmt.replace(/^#+([0.])/, "$1");
+	if((r = fmt.match(/^(0*)\.(#*)$/)) !== null) {
+		return sign + rnd(aval, r[2].length).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,r[1].length?"0.":".");
+	}
+	if((r = fmt.match(/^#,##0(\.?)$/)) !== null) return sign + commaify(pad0r(aval,0));
+	if((r = fmt.match(/^#,##0\.([#0]*0)$/)) !== null) {
+		return val < 0 ? "-" + write_num_flt(type, fmt, -val) : commaify(""+(Math.floor(val))) + "." + pad0(dec(val, r[1].length),r[1].length);
+	}
+	if((r = fmt.match(/^#,#*,#0/)) !== null) return write_num_flt(type,fmt.replace(/^#,#*,/,""),val);
+	if((r = fmt.match(/^([0#]+)(\\?-([0#]+))+$/)) !== null) {
+		o = _strrev(write_num_flt(type, fmt.replace(/[\\-]/g,""), val));
+		ri = 0;
+		return _strrev(_strrev(fmt.replace(/\\/g,"")).replace(/[0#]/g,function(x){return ri<o.length?o[ri++]:x==='0'?'0':"";}));
+	}
+	if(fmt.match(phone) !== null) {
+		o = write_num_flt(type, "##########", val);
+		return "(" + o.substr(0,3) + ") " + o.substr(3, 3) + "-" + o.substr(6);
+	}
+	var oa = "";
+	if((r = fmt.match(/^([#0?]+)( ?)\/( ?)([#0?]+)/)) !== null) {
+		ri = Math.min(r[4].length,7);
+		ff = frac(aval, Math.pow(10,ri)-1, false);
+		o = "" + sign;
+		oa = write_num("n", r[1], ff[1]);
+		if(oa[oa.length-1] == " ") oa = oa.substr(0,oa.length-1) + "0";
+		o += oa + r[2] + "/" + r[3];
+		oa = rpad_(ff[2],ri);
+		if(oa.length < r[4].length) oa = hashq(r[4].substr(r[4].length-oa.length)) + oa;
+		o += oa;
+		return o;
+	}
+	if((r = fmt.match(/^# ([#0?]+)( ?)\/( ?)([#0?]+)/)) !== null) {
+		ri = Math.min(Math.max(r[1].length, r[4].length),7);
+		ff = frac(aval, Math.pow(10,ri)-1, true);
+		return sign + (ff[0]||(ff[1] ? "" : "0")) + " " + (ff[1] ? pad_(ff[1],ri) + r[2] + "/" + r[3] + rpad_(ff[2],ri): fill(" ", 2*ri+1 + r[2].length + r[3].length));
+	}
+	if((r = fmt.match(/^[#0?]+$/)) !== null) {
+		o = pad0r(val, 0);
+		if(fmt.length <= o.length) return o;
+		return hashq(fmt.substr(0,fmt.length-o.length)) + o;
+	}
+  if((r = fmt.match(/^([#0?]+)\.([#0]+)$/)) !== null) {
+		o = "" + val.toFixed(Math.min(r[2].length,10)).replace(/([^0])0+$/,"$1");
+		ri = o.indexOf(".");
+		var lres = fmt.indexOf(".") - ri, rres = fmt.length - o.length - lres;
+		return hashq(fmt.substr(0,lres) + o + fmt.substr(fmt.length-rres));
+	}
+	if((r = fmt.match(/^00,000\.([#0]*0)$/)) !== null) {
+		ri = dec(val, r[1].length);
+		return val < 0 ? "-" + write_num_flt(type, fmt, -val) : commaify(flr(val)).replace(/^\d,\d{3}$/,"0$&").replace(/^\d*$/,function($$) { return "00," + ($$.length < 3 ? pad0(0,3-$$.length) : "") + $$; }) + "." + pad0(ri,r[1].length);
+	}
+	switch(fmt) {
+		case "#,###": var x = commaify(pad0r(aval,0)); return x !== "0" ? sign + x : "";
+		default:
+	}
+	throw new Error("unsupported format |" + fmt + "|");
+}
+function write_num_cm2(type, fmt, val){
+	var idx = fmt.length - 1;
+	while(fmt.charCodeAt(idx-1) === 44) --idx;
+	return write_num(type, fmt.substr(0,idx), val / Math.pow(10,3*(fmt.length-idx)));
+}
+function write_num_pct2(type, fmt, val){
+	var sfmt = fmt.replace(pct1,""), mul = fmt.length - sfmt.length;
+	return write_num(type, sfmt, val * Math.pow(10,2*mul)) + fill("%",mul);
+}
+function write_num_exp2(fmt, val){
+	var o;
+	var idx = fmt.indexOf("E") - fmt.indexOf(".") - 1;
+	if(fmt.match(/^#+0.0E\+0$/)) {
+		var period = fmt.indexOf("."); if(period === -1) period=fmt.indexOf('E');
+		var ee = Math.floor(Math.log(Math.abs(val))*Math.LOG10E)%period;
+		if(ee < 0) ee += period;
+		o = (val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);
+		if(!o.match(/[Ee]/)) {
+			var fakee = Math.floor(Math.log(Math.abs(val))*Math.LOG10E);
+			if(o.indexOf(".") === -1) o = o[0] + "." + o.substr(1) + "E+" + (fakee - o.length+ee);
+			else o += "E+" + (fakee - ee);
+			o = o.replace(/\+-/,"-");
+		}
+		o = o.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/,function($$,$1,$2,$3) { return $1 + $2 + $3.substr(0,(period+ee)%period) + "." + $3.substr(ee) + "E"; });
+	} else o = val.toExponential(idx);
+	if(fmt.match(/E\+00$/) && o.match(/e[+-]\d$/)) o = o.substr(0,o.length-1) + "0" + o[o.length-1];
+	if(fmt.match(/E\-/) && o.match(/e\+/)) o = o.replace(/e\+/,"e");
+	return o.replace("e","E");
+}
+function write_num_int(type, fmt, val) {
+	if(type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {
+		var ffmt = fmt.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,"");
+		if(val >= 0) return write_num_int('n', ffmt, val);
+		return '(' + write_num_int('n', ffmt, -val) + ')';
+	}
+	if(fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm2(type, fmt, val);
+	if(fmt.indexOf('%') !== -1) return write_num_pct2(type, fmt, val);
+	if(fmt.indexOf('E') !== -1) return write_num_exp2(fmt, val);
+	if(fmt.charCodeAt(0) === 36) return "$"+write_num_int(type,fmt.substr(fmt[1]==' '?2:1),val);
+	var o;
+	var r, ri, ff, aval = Math.abs(val), sign = val < 0 ? "-" : "";
+	if(fmt.match(/^00+$/)) return sign + pad0(aval,fmt.length);
+	if(fmt.match(/^[#?]+$/)) {
+		o = (""+val); if(val === 0) o = "";
+		return o.length > fmt.length ? o : hashq(fmt.substr(0,fmt.length-o.length)) + o;
+	}
+	if((r = fmt.match(frac1)) !== null) return write_num_f2(r, aval, sign);
+	if(fmt.match(/^#+0+$/) !== null) return sign + pad0(aval,fmt.length - fmt.indexOf("0"));
+	if((r = fmt.match(dec1)) !== null) {
+		o = (""+val).replace(/^([^\.]+)$/,"$1."+r[1]).replace(/\.$/,"."+r[1]).replace(/\.(\d*)$/,function($$, $1) { return "." + $1 + fill("0", r[1].length-$1.length); });
+		return fmt.indexOf("0.") !== -1 ? o : o.replace(/^0\./,".");
+	}
+	fmt = fmt.replace(/^#+([0.])/, "$1");
+	if((r = fmt.match(/^(0*)\.(#*)$/)) !== null) {
+		return sign + (""+aval).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,r[1].length?"0.":".");
+	}
+	if((r = fmt.match(/^#,##0(\.?)$/)) !== null) return sign + commaify((""+aval));
+	if((r = fmt.match(/^#,##0\.([#0]*0)$/)) !== null) {
+		return val < 0 ? "-" + write_num_int(type, fmt, -val) : commaify((""+val)) + "." + fill('0',r[1].length);
+	}
+	if((r = fmt.match(/^#,#*,#0/)) !== null) return write_num_int(type,fmt.replace(/^#,#*,/,""),val);
+	if((r = fmt.match(/^([0#]+)(\\?-([0#]+))+$/)) !== null) {
+		o = _strrev(write_num_int(type, fmt.replace(/[\\-]/g,""), val));
+		ri = 0;
+		return _strrev(_strrev(fmt.replace(/\\/g,"")).replace(/[0#]/g,function(x){return ri<o.length?o[ri++]:x==='0'?'0':"";}));
+	}
+	if(fmt.match(phone) !== null) {
+		o = write_num_int(type, "##########", val);
+		return "(" + o.substr(0,3) + ") " + o.substr(3, 3) + "-" + o.substr(6);
+	}
+	var oa = "";
+	if((r = fmt.match(/^([#0?]+)( ?)\/( ?)([#0?]+)/)) !== null) {
+		ri = Math.min(r[4].length,7);
+		ff = frac(aval, Math.pow(10,ri)-1, false);
+		o = "" + sign;
+		oa = write_num("n", r[1], ff[1]);
+		if(oa[oa.length-1] == " ") oa = oa.substr(0,oa.length-1) + "0";
+		o += oa + r[2] + "/" + r[3];
+		oa = rpad_(ff[2],ri);
+		if(oa.length < r[4].length) oa = hashq(r[4].substr(r[4].length-oa.length)) + oa;
+		o += oa;
+		return o;
+	}
+	if((r = fmt.match(/^# ([#0?]+)( ?)\/( ?)([#0?]+)/)) !== null) {
+		ri = Math.min(Math.max(r[1].length, r[4].length),7);
+		ff = frac(aval, Math.pow(10,ri)-1, true);
+		return sign + (ff[0]||(ff[1] ? "" : "0")) + " " + (ff[1] ? pad_(ff[1],ri) + r[2] + "/" + r[3] + rpad_(ff[2],ri): fill(" ", 2*ri+1 + r[2].length + r[3].length));
+	}
+	if((r = fmt.match(/^[#0?]+$/)) !== null) {
+		o = "" + val;
+		if(fmt.length <= o.length) return o;
+		return hashq(fmt.substr(0,fmt.length-o.length)) + o;
+	}
+	if((r = fmt.match(/^([#0]+)\.([#0]+)$/)) !== null) {
+		o = "" + val.toFixed(Math.min(r[2].length,10)).replace(/([^0])0+$/,"$1");
+		ri = o.indexOf(".");
+		var lres = fmt.indexOf(".") - ri, rres = fmt.length - o.length - lres;
+		return hashq(fmt.substr(0,lres) + o + fmt.substr(fmt.length-rres));
+	}
+	if((r = fmt.match(/^00,000\.([#0]*0)$/)) !== null) {
+		return val < 0 ? "-" + write_num_int(type, fmt, -val) : commaify(""+val).replace(/^\d,\d{3}$/,"0$&").replace(/^\d*$/,function($$) { return "00," + ($$.length < 3 ? pad0(0,3-$$.length) : "") + $$; }) + "." + pad0(0,r[1].length);
+	}
+	switch(fmt) {
+		case "#,###": var x = commaify(""+aval); return x !== "0" ? sign + x : "";
+		default:
+	}
+	throw new Error("unsupported format |" + fmt + "|");
+}
+return function write_num(type, fmt, val) {
+	return (val|0) === val ? write_num_int(type, fmt, val) : write_num_flt(type, fmt, val);
+};})();
+function split_fmt(fmt) {
+	var out = [];
+	var in_str = false, cc;
+	for(var i = 0, j = 0; i < fmt.length; ++i) switch((cc=fmt.charCodeAt(i))) {
+		case 34: /* '"' */
+			in_str = !in_str; break;
+		case 95: case 42: case 92: /* '_' '*' '\\' */
+			++i; break;
+		case 59: /* ';' */
+			out[out.length] = fmt.substr(j,i-j);
+			j = i+1;
+	}
+	out[out.length] = fmt.substr(j);
+	if(in_str === true) throw new Error("Format |" + fmt + "| unterminated string ");
+	return out;
+}
+SSF._split = split_fmt;
+var abstime = /\[[HhMmSs]*\]/;
+function eval_fmt(fmt, v, opts, flen) {
+	var out = [], o = "", i = 0, c = "", lst='t', q, dt, j, cc;
+	var hr='H';
+	/* Tokenize */
+	while(i < fmt.length) {
+		switch((c = fmt[i])) {
+			case 'G': /* General */
+				if(!isgeneral(fmt, i)) throw new Error('unrecognized character ' + c + ' in ' +fmt);
+				out[out.length] = {t:'G', v:'General'}; i+=7; break;
+			case '"': /* Literal text */
+				for(o="";(cc=fmt.charCodeAt(++i)) !== 34 && i < fmt.length;) o += String.fromCharCode(cc);
+				out[out.length] = {t:'t', v:o}; ++i; break;
+			case '\\': var w = fmt[++i], t = (w === "(" || w === ")") ? w : 't';
+				out[out.length] = {t:t, v:w}; ++i; break;
+			case '_': out[out.length] = {t:'t', v:" "}; i+=2; break;
+			case '@': /* Text Placeholder */
+				out[out.length] = {t:'T', v:v}; ++i; break;
+			case 'B': case 'b':
+				if(fmt[i+1] === "1" || fmt[i+1] === "2") {
+          if(dt==null) { dt=parse_date_code(v, opts, fmt[i+1] === "2"); if(dt==null) return ""; }
+					out[out.length] = {t:'X', v:fmt.substr(i,2)}; lst = c; i+=2; break;
+				}
+				/* falls through */
+			case 'M': case 'D': case 'Y': case 'H': case 'S': case 'E':
+				c = c.toLowerCase();
+				/* falls through */
+			case 'm': case 'd': case 'y': case 'h': case 's': case 'e': case 'g':
+				if(v < 0) return "";
+				if(dt==null) { dt=parse_date_code(v, opts); if(dt==null) return ""; }
+				o = c; while(++i<fmt.length && fmt[i].toLowerCase() === c) o+=c;
+				if(c === 'm' && lst.toLowerCase() === 'h') c = 'M'; /* m = minute */
+				if(c === 'h') c = hr;
+				out[out.length] = {t:c, v:o}; lst = c; break;
+			case 'A':
+				q={t:c, v:"A"};
+				if(dt==null) dt=parse_date_code(v, opts);
+        if(fmt.substr(i, 3) === "A/P") { if(dt!=null) q.v = dt.H >= 12 ? "P" : "A"; q.t = 'T'; hr='h';i+=3;}
+        else if(fmt.substr(i,5) === "AM/PM") { if(dt!=null) q.v = dt.H >= 12 ? "PM" : "AM"; q.t = 'T'; i+=5; hr='h'; }
+				else { q.t = "t"; ++i; }
+				if(dt==null && q.t === 'T') return "";
+				out[out.length] = q; lst = c; break;
+			case '[':
+				o = c;
+				while(fmt[i++] !== ']' && i < fmt.length) o += fmt[i];
+				if(o.substr(-1) !== ']') throw 'unterminated "[" block: |' + o + '|';
+				if(o.match(abstime)) {
+					if(dt==null) { dt=parse_date_code(v, opts); if(dt==null) return ""; }
+					out[out.length] = {t:'Z', v:o.toLowerCase()};
+				} else { o=""; }
+				break;
+			/* Numbers */
+			case '.':
+				if(dt != null) {
+					o = c; while((c=fmt[++i]) === "0") o += c;
+					out[out.length] = {t:'s', v:o}; break;
+				}
+				/* falls through */
+			case '0': case '#':
+				o = c; while("0#?.,E+-%".indexOf(c=fmt[++i]) > -1 || c=='\\' && fmt[i+1] == "-" && "0#".indexOf(fmt[i+2])>-1) o += c;
+				out[out.length] = {t:'n', v:o}; break;
+			case '?':
+				o = c; while(fmt[++i] === c) o+=c;
+				q={t:c, v:o}; out[out.length] = q; lst = c; break;
+			case '*': ++i; if(fmt[i] == ' ' || fmt[i] == '*') ++i; break; // **
+			case '(': case ')': out[out.length] = {t:(flen===1?'t':c), v:c}; ++i; break;
+			case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
+				o = c; while("0123456789".indexOf(fmt[++i]) > -1) o+=fmt[i];
+				out[out.length] = {t:'D', v:o}; break;
+			case ' ': out[out.length] = {t:c, v:c}; ++i; break;
+			default:
+				if(",$-+/():!^&'~{}<>=鈧琣cfijklopqrtuvwxz".indexOf(c) === -1) throw new Error('unrecognized character ' + c + ' in ' + fmt);
+				out[out.length] = {t:'t', v:c}; ++i; break;
+		}
+	}
+	var bt = 0, ss0 = 0, ssm;
+	for(i=out.length-1, lst='t'; i >= 0; --i) {
+		switch(out[i].t) {
+			case 'h': case 'H': out[i].t = hr; lst='h'; if(bt < 1) bt = 1; break;
+			case 's':
+				if((ssm=out[i].v.match(/\.0+$/))) ss0=Math.max(ss0,ssm[0].length-1);
+				if(bt < 3) bt = 3;
+			/* falls through */
+			case 'd': case 'y': case 'M': case 'e': lst=out[i].t; break;
+			case 'm': if(lst === 's') { out[i].t = 'M'; if(bt < 2) bt = 2; } break;
+			case 'X': if(out[i].v === "B2");
+				break;
+			case 'Z':
+				if(bt < 1 && out[i].v.match(/[Hh]/)) bt = 1;
+				if(bt < 2 && out[i].v.match(/[Mm]/)) bt = 2;
+				if(bt < 3 && out[i].v.match(/[Ss]/)) bt = 3;
+		}
+	}
+	switch(bt) {
+		case 0: break;
+		case 1:
+			if(dt.u >= 0.5) { dt.u = 0; ++dt.S; }
+			if(dt.S >=  60) { dt.S = 0; ++dt.M; }
+			if(dt.M >=  60) { dt.M = 0; ++dt.H; }
+			break;
+		case 2:
+			if(dt.u >= 0.5) { dt.u = 0; ++dt.S; }
+			if(dt.S >=  60) { dt.S = 0; ++dt.M; }
+			break;
+	}
+	/* replace fields */
+	var nstr = "", jj;
+	for(i=0; i < out.length; ++i) {
+		switch(out[i].t) {
+			case 't': case 'T': case ' ': case 'D': break;
+			case 'X': out[i] = undefined; break;
+			case 'd': case 'm': case 'y': case 'h': case 'H': case 'M': case 's': case 'e': case 'b': case 'Z':
+				out[i].v = write_date(out[i].t.charCodeAt(0), out[i].v, dt, ss0);
+				out[i].t = 't'; break;
+			case 'n': case '(': case '?':
+				jj = i+1;
+				while(out[jj] != null && (
+					(c=out[jj].t) === "?" || c === "D" ||
+					(c === " " || c === "t") && out[jj+1] != null && (out[jj+1].t === '?' || out[jj+1].t === "t" && out[jj+1].v === '/') ||
+					out[i].t === '(' && (c === ' ' || c === 'n' || c === ')') ||
+					c === 't' && (out[jj].v === '/' || '$鈧�'.indexOf(out[jj].v) > -1 || out[jj].v === ' ' && out[jj+1] != null && out[jj+1].t == '?')
+				)) {
+					out[i].v += out[jj].v;
+					out[jj] = undefined; ++jj;
+				}
+				nstr += out[i].v;
+				i = jj-1; break;
+			case 'G': out[i].t = 't'; out[i].v = general_fmt(v,opts); break;
+		}
+	}
+	var vv = "", myv, ostr;
+	if(nstr.length > 0) {
+		myv = (v<0&&nstr.charCodeAt(0) === 45 ? -v : v); /* '-' */
+		ostr = write_num(nstr.charCodeAt(0) === 40 ? '(' : 'n', nstr, myv); /* '(' */
+		jj=ostr.length-1;
+		var decpt = out.length;
+		for(i=0; i < out.length; ++i) if(out[i] != null && out[i].v.indexOf(".") > -1) { decpt = i; break; }
+		var lasti=out.length;
+		if(decpt === out.length && ostr.indexOf("E") === -1) {
+			for(i=out.length-1; i>= 0;--i) {
+				if(out[i] == null || 'n?('.indexOf(out[i].t) === -1) continue;
+				if(jj>=out[i].v.length-1) { jj -= out[i].v.length; out[i].v = ostr.substr(jj+1, out[i].v.length); }
+				else if(jj < 0) out[i].v = "";
+				else { out[i].v = ostr.substr(0, jj+1); jj = -1; }
+				out[i].t = 't';
+				lasti = i;
+			}
+			if(jj>=0 && lasti<out.length) out[lasti].v = ostr.substr(0,jj+1) + out[lasti].v;
+		}
+		else if(decpt !== out.length && ostr.indexOf("E") === -1) {
+			jj = ostr.indexOf(".")-1;
+			for(i=decpt; i>= 0; --i) {
+				if(out[i] == null || 'n?('.indexOf(out[i].t) === -1) continue;
+				j=out[i].v.indexOf(".")>-1&&i===decpt?out[i].v.indexOf(".")-1:out[i].v.length-1;
+				vv = out[i].v.substr(j+1);
+				for(; j>=0; --j) {
+					if(jj>=0 && (out[i].v[j] === "0" || out[i].v[j] === "#")) vv = ostr[jj--] + vv;
+				}
+				out[i].v = vv;
+				out[i].t = 't';
+				lasti = i;
+			}
+			if(jj>=0 && lasti<out.length) out[lasti].v = ostr.substr(0,jj+1) + out[lasti].v;
+			jj = ostr.indexOf(".")+1;
+			for(i=decpt; i<out.length; ++i) {
+				if(out[i] == null || 'n?('.indexOf(out[i].t) === -1 && i !== decpt ) continue;
+				j=out[i].v.indexOf(".")>-1&&i===decpt?out[i].v.indexOf(".")+1:0;
+				vv = out[i].v.substr(0,j);
+				for(; j<out[i].v.length; ++j) {
+					if(jj<ostr.length) vv += ostr[jj++];
+				}
+				out[i].v = vv;
+				out[i].t = 't';
+				lasti = i;
+			}
+		}
+	}
+	for(i=0; i<out.length; ++i) if(out[i] != null && 'n(?'.indexOf(out[i].t)>-1) {
+		myv = (flen >1 && v < 0 && i>0 && out[i-1].v === "-" ? -v:v);
+		out[i].v = write_num(out[i].t, out[i].v, myv);
+		out[i].t = 't';
+	}
+	var retval = "";
+	for(i=0; i !== out.length; ++i) if(out[i] != null) retval += out[i].v;
+	return retval;
+}
+SSF._eval = eval_fmt;
+var cfregex = /\[[=<>]/;
+var cfregex2 = /\[([=<>]*)(-?\d+\.?\d*)\]/;
+function chkcond(v, rr) {
+	if(rr == null) return false;
+	var thresh = parseFloat(rr[2]);
+	switch(rr[1]) {
+		case "=":  if(v == thresh) return true; break;
+		case ">":  if(v >  thresh) return true; break;
+		case "<":  if(v <  thresh) return true; break;
+		case "<>": if(v != thresh) return true; break;
+		case ">=": if(v >= thresh) return true; break;
+		case "<=": if(v <= thresh) return true; break;
+	}
+	return false;
+}
+function choose_fmt(f, v) {
+	var fmt = split_fmt(f);
+	var l = fmt.length, lat = fmt[l-1].indexOf("@");
+	if(l<4 && lat>-1) --l;
+	if(fmt.length > 4) throw "cannot find right format for |" + fmt + "|";
+	if(typeof v !== "number") return [4, fmt.length === 4 || lat>-1?fmt[fmt.length-1]:"@"];
+	switch(fmt.length) {
+		case 1: fmt = lat>-1 ? ["General", "General", "General", fmt[0]] : [fmt[0], fmt[0], fmt[0], "@"]; break;
+		case 2: fmt = lat>-1 ? [fmt[0], fmt[0], fmt[0], fmt[1]] : [fmt[0], fmt[1], fmt[0], "@"]; break;
+		case 3: fmt = lat>-1 ? [fmt[0], fmt[1], fmt[0], fmt[2]] : [fmt[0], fmt[1], fmt[2], "@"]; break;
+		case 4: break;
+	}
+	var ff = v > 0 ? fmt[0] : v < 0 ? fmt[1] : fmt[2];
+	if(fmt[0].indexOf("[") === -1 && fmt[1].indexOf("[") === -1) return [l, ff];
+	if(fmt[0].match(cfregex) != null || fmt[1].match(cfregex) != null) {
+		var m1 = fmt[0].match(cfregex2);
+		var m2 = fmt[1].match(cfregex2);
+		return chkcond(v, m1) ? [l, fmt[0]] : chkcond(v, m2) ? [l, fmt[1]] : [l, fmt[m1 != null && m2 != null ? 2 : 1]];
+	}
+	return [l, ff];
+}
+function format(fmt,v,o) {
+	fixopts(o != null ? o : (o=[]));
+	var sfmt = "";
+	switch(typeof fmt) {
+		case "string": sfmt = fmt; break;
+		case "number": sfmt = (o.table != null ? o.table : table_fmt)[fmt]; break;
+	}
+	if(isgeneral(sfmt,0)) return general_fmt(v, o);
+	var f = choose_fmt(sfmt, v);
+	if(isgeneral(f[1])) return general_fmt(v, o);
+	if(v === true) v = "TRUE"; else if(v === false) v = "FALSE";
+	else if(v === "" || v == null) return "";
+	return eval_fmt(f[1], v, o, f[0]);
+}
+SSF._table = table_fmt;
+SSF.load = function load_entry(fmt, idx) { table_fmt[idx] = fmt; };
+SSF.format = format;
+SSF.get_table = function get_table() { return table_fmt; };
+SSF.load_table = function load_table(tbl) { for(var i=0; i!=0x0188; ++i) if(tbl[i] !== undefined) SSF.load(tbl[i], i); };
+};
+make_ssf(SSF);
+/* map from xlml named formats to SSF TODO: localize */
+var XLMLFormatMap = {
+	"General Number": "General",
+	"General Date": SSF._table[22],
+	"Long Date": "dddd, mmmm dd, yyyy",
+	"Medium Date": SSF._table[15],
+	"Short Date": SSF._table[14],
+	"Long Time": SSF._table[19],
+	"Medium Time": SSF._table[18],
+	"Short Time": SSF._table[20],
+	"Currency": '"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',
+	"Fixed": SSF._table[2],
+	"Standard": SSF._table[4],
+	"Percent": SSF._table[10],
+	"Scientific": SSF._table[11],
+	"Yes/No": '"Yes";"Yes";"No";@',
+	"True/False": '"True";"True";"False";@',
+	"On/Off": '"Yes";"Yes";"No";@'
+};
+
+var DO_NOT_EXPORT_CFB = true;
+/* cfb.js (C) 2013-2014 SheetJS -- http://sheetjs.com */
+/* vim: set ts=2: */
+/*jshint eqnull:true */
+
+/* [MS-CFB] v20130118 */
+var CFB = (function _CFB(){
+var exports = {};
+exports.version = '0.10.2';
+function parse(file) {
+var mver = 3; // major version
+var ssz = 512; // sector size
+var nmfs = 0; // number of mini FAT sectors
+var ndfs = 0; // number of DIFAT sectors
+var dir_start = 0; // first directory sector location
+var minifat_start = 0; // first mini FAT sector location
+var difat_start = 0; // first mini FAT sector location
+
+var fat_addrs = []; // locations of FAT sectors
+
+/* [MS-CFB] 2.2 Compound File Header */
+var blob = file.slice(0,512);
+prep_blob(blob, 0);
+
+/* major version */
+var mv = check_get_mver(blob);
+mver = mv[0];
+switch(mver) {
+	case 3: ssz = 512; break; case 4: ssz = 4096; break;
+	default: throw "Major Version: Expected 3 or 4 saw " + mver;
+}
+
+/* reprocess header */
+if(ssz !== 512) { blob = file.slice(0,ssz); prep_blob(blob, 28 /* blob.l */); }
+/* Save header for final object */
+var header = file.slice(0,ssz);
+
+check_shifts(blob, mver);
+
+// Number of Directory Sectors
+var nds = blob.read_shift(4, 'i');
+if(mver === 3 && nds !== 0) throw '# Directory Sectors: Expected 0 saw ' + nds;
+
+// Number of FAT Sectors
+//var nfs = blob.read_shift(4, 'i');
+blob.l += 4;
+
+// First Directory Sector Location
+dir_start = blob.read_shift(4, 'i');
+
+// Transaction Signature
+blob.l += 4;
+
+// Mini Stream Cutoff Size
+blob.chk('00100000', 'Mini Stream Cutoff Size: ');
+
+// First Mini FAT Sector Location
+minifat_start = blob.read_shift(4, 'i');
+
+// Number of Mini FAT Sectors
+nmfs = blob.read_shift(4, 'i');
+
+// First DIFAT sector location
+difat_start = blob.read_shift(4, 'i');
+
+// Number of DIFAT Sectors
+ndfs = blob.read_shift(4, 'i');
+
+// Grab FAT Sector Locations
+for(var q, j = 0; j < 109; ++j) { /* 109 = (512 - blob.l)>>>2; */
+	q = blob.read_shift(4, 'i');
+	if(q<0) break;
+	fat_addrs[j] = q;
+}
+
+/** Break the file up into sectors */
+var sectors = sectorify(file, ssz);
+
+sleuth_fat(difat_start, ndfs, sectors, ssz, fat_addrs);
+
+/** Chains */
+var sector_list = make_sector_list(sectors, dir_start, fat_addrs, ssz);
+
+sector_list[dir_start].name = "!Directory";
+if(nmfs > 0 && minifat_start !== ENDOFCHAIN) sector_list[minifat_start].name = "!MiniFAT";
+sector_list[fat_addrs[0]].name = "!FAT";
+sector_list.fat_addrs = fat_addrs;
+sector_list.ssz = ssz;
+
+/* [MS-CFB] 2.6.1 Compound File Directory Entry */
+var files = {}, Paths = [], FileIndex = [], FullPaths = [], FullPathDir = {};
+read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex);
+
+build_full_paths(FileIndex, FullPathDir, FullPaths, Paths);
+
+var root_name = Paths.shift();
+Paths.root = root_name;
+
+/* [MS-CFB] 2.6.4 (Unicode 3.0.1 case conversion) */
+var find_path = make_find_path(FullPaths, Paths, FileIndex, files, root_name);
+
+return {
+	raw: {header: header, sectors: sectors},
+	FileIndex: FileIndex,
+	FullPaths: FullPaths,
+	FullPathDir: FullPathDir,
+	find: find_path
+};
+} // parse
+
+/* [MS-CFB] 2.2 Compound File Header -- read up to major version */
+function check_get_mver(blob) {
+	// header signature 8
+	blob.chk(HEADER_SIGNATURE, 'Header Signature: ');
+
+	// clsid 16
+	blob.chk(HEADER_CLSID, 'CLSID: ');
+
+	// minor version 2
+	var mver = blob.read_shift(2, 'u');
+
+	return [blob.read_shift(2,'u'), mver];
+}
+function check_shifts(blob, mver) {
+	var shift = 0x09;
+
+	// Byte Order
+	blob.chk('feff', 'Byte Order: ');
+
+	// Sector Shift
+	switch((shift = blob.read_shift(2))) {
+		case 0x09: if(mver !== 3) throw 'MajorVersion/SectorShift Mismatch'; break;
+		case 0x0c: if(mver !== 4) throw 'MajorVersion/SectorShift Mismatch'; break;
+		default: throw 'Sector Shift: Expected 9 or 12 saw ' + shift;
+	}
+
+	// Mini Sector Shift
+	blob.chk('0600', 'Mini Sector Shift: ');
+
+	// Reserved
+	blob.chk('000000000000', 'Reserved: ');
+}
+
+/** Break the file up into sectors */
+function sectorify(file, ssz) {
+	var nsectors = Math.ceil(file.length/ssz)-1;
+	var sectors = new Array(nsectors);
+	for(var i=1; i < nsectors; ++i) sectors[i-1] = file.slice(i*ssz,(i+1)*ssz);
+	sectors[nsectors-1] = file.slice(nsectors*ssz);
+	return sectors;
+}
+
+/* [MS-CFB] 2.6.4 Red-Black Tree */
+function build_full_paths(FI, FPD, FP, Paths) {
+	var i = 0, L = 0, R = 0, C = 0, j = 0, pl = Paths.length;
+	var dad = new Array(pl), q = new Array(pl);
+
+	for(; i < pl; ++i) { dad[i]=q[i]=i; FP[i]=Paths[i]; }
+
+	for(; j < q.length; ++j) {
+		i = q[j];
+		L = FI[i].L; R = FI[i].R; C = FI[i].C;
+		if(dad[i] === i) {
+			if(L !== -1 /*NOSTREAM*/ && dad[L] !== L) dad[i] = dad[L];
+			if(R !== -1 && dad[R] !== R) dad[i] = dad[R];
+		}
+		if(C !== -1 /*NOSTREAM*/) dad[C] = i;
+		if(L !== -1) { dad[L] = dad[i]; q.push(L); }
+		if(R !== -1) { dad[R] = dad[i]; q.push(R); }
+	}
+	for(i=1; i !== pl; ++i) if(dad[i] === i) {
+		if(R !== -1 /*NOSTREAM*/ && dad[R] !== R) dad[i] = dad[R];
+		else if(L !== -1 && dad[L] !== L) dad[i] = dad[L];
+	}
+
+	for(i=1; i < pl; ++i) {
+		if(FI[i].type === 0 /* unknown */) continue;
+		j = dad[i];
+		if(j === 0) FP[i] = FP[0] + "/" + FP[i];
+		else while(j !== 0) {
+			FP[i] = FP[j] + "/" + FP[i];
+			j = dad[j];
+		}
+		dad[i] = 0;
+	}
+
+	FP[0] += "/";
+	for(i=1; i < pl; ++i) {
+		if(FI[i].type !== 2 /* stream */) FP[i] += "/";
+		FPD[FP[i]] = FI[i];
+	}
+}
+
+/* [MS-CFB] 2.6.4 */
+function make_find_path(FullPaths, Paths, FileIndex, files, root_name) {
+	var UCFullPaths = new Array(FullPaths.length);
+	var UCPaths = new Array(Paths.length), i;
+	for(i = 0; i < FullPaths.length; ++i) UCFullPaths[i] = FullPaths[i].toUpperCase().replace(chr0,'').replace(chr1,'!');
+	for(i = 0; i < Paths.length; ++i) UCPaths[i] = Paths[i].toUpperCase().replace(chr0,'').replace(chr1,'!');
+	return function find_path(path) {
+		var k;
+		if(path.charCodeAt(0) === 47 /* "/" */) { k=true; path = root_name + path; }
+		else k = path.indexOf("/") !== -1;
+		var UCPath = path.toUpperCase().replace(chr0,'').replace(chr1,'!');
+		var w = k === true ? UCFullPaths.indexOf(UCPath) : UCPaths.indexOf(UCPath);
+		if(w === -1) return null;
+		return k === true ? FileIndex[w] : files[Paths[w]];
+	};
+}
+
+/** Chase down the rest of the DIFAT chain to build a comprehensive list
+    DIFAT chains by storing the next sector number as the last 32 bytes */
+function sleuth_fat(idx, cnt, sectors, ssz, fat_addrs) {
+	var q;
+	if(idx === ENDOFCHAIN) {
+		if(cnt !== 0) throw "DIFAT chain shorter than expected";
+	} else if(idx !== -1 /*FREESECT*/) {
+		var sector = sectors[idx], m = (ssz>>>2)-1;
+		for(var i = 0; i < m; ++i) {
+			if((q = __readInt32LE(sector,i*4)) === ENDOFCHAIN) break;
+			fat_addrs.push(q);
+		}
+		sleuth_fat(__readInt32LE(sector,ssz-4),cnt - 1, sectors, ssz, fat_addrs);
+	}
+}
+
+/** Follow the linked list of sectors for a given starting point */
+function get_sector_list(sectors, start, fat_addrs, ssz, chkd) {
+	var sl = sectors.length;
+	var buf, buf_chain;
+	if(!chkd) chkd = new Array(sl);
+	var modulus = ssz - 1, j, jj;
+	buf = [];
+	buf_chain = [];
+	for(j=start; j>=0;) {
+		chkd[j] = true;
+		buf[buf.length] = j;
+		buf_chain.push(sectors[j]);
+		var addr = fat_addrs[Math.floor(j*4/ssz)];
+		jj = ((j*4) & modulus);
+		if(ssz < 4 + jj) throw "FAT boundary crossed: " + j + " 4 "+ssz;
+		j = __readInt32LE(sectors[addr], jj);
+	}
+	return {nodes: buf, data:__toBuffer([buf_chain])};
+}
+
+/** Chase down the sector linked lists */
+function make_sector_list(sectors, dir_start, fat_addrs, ssz) {
+	var sl = sectors.length, sector_list = new Array(sl);
+	var chkd = new Array(sl), buf, buf_chain;
+	var modulus = ssz - 1, i, j, k, jj;
+	for(i=0; i < sl; ++i) {
+		buf = [];
+		k = (i + dir_start); if(k >= sl) k-=sl;
+		if(chkd[k] === true) continue;
+		buf_chain = [];
+		for(j=k; j>=0;) {
+			chkd[j] = true;
+			buf[buf.length] = j;
+			buf_chain.push(sectors[j]);
+			var addr = fat_addrs[Math.floor(j*4/ssz)];
+			jj = ((j*4) & modulus);
+			if(ssz < 4 + jj) throw "FAT boundary crossed: " + j + " 4 "+ssz;
+			j = __readInt32LE(sectors[addr], jj);
+		}
+		sector_list[k] = {nodes: buf, data:__toBuffer([buf_chain])};
+	}
+	return sector_list;
+}
+
+/* [MS-CFB] 2.6.1 Compound File Directory Entry */
+function read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex) {
+	var blob;
+	var minifat_store = 0, pl = (Paths.length?2:0);
+	var sector = sector_list[dir_start].data;
+	var i = 0, namelen = 0, name, o, ctime, mtime;
+	for(; i < sector.length; i+= 128) {
+		blob = sector.slice(i, i+128);
+		prep_blob(blob, 64);
+		namelen = blob.read_shift(2);
+		if(namelen === 0) continue;
+		name = __utf16le(blob,0,namelen-pl);
+		Paths.push(name);
+		o = {
+			name:  name,
+			type:  blob.read_shift(1),
+			color: blob.read_shift(1),
+			L:     blob.read_shift(4, 'i'),
+			R:     blob.read_shift(4, 'i'),
+			C:     blob.read_shift(4, 'i'),
+			clsid: blob.read_shift(16),
+			state: blob.read_shift(4, 'i')
+		};
+		ctime = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);
+		if(ctime !== 0) {
+			o.ctime = ctime; o.ct = read_date(blob, blob.l-8);
+		}
+		mtime = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);
+		if(mtime !== 0) {
+			o.mtime = mtime; o.mt = read_date(blob, blob.l-8);
+		}
+		o.start = blob.read_shift(4, 'i');
+		o.size = blob.read_shift(4, 'i');
+		if(o.type === 5) { /* root */
+			minifat_store = o.start;
+			if(nmfs > 0 && minifat_store !== ENDOFCHAIN) sector_list[minifat_store].name = "!StreamData";
+			/*minifat_size = o.size;*/
+		} else if(o.size >= 4096 /* MSCSZ */) {
+			o.storage = 'fat';
+			if(sector_list[o.start] === undefined) sector_list[o.start] = get_sector_list(sectors, o.start, sector_list.fat_addrs, sector_list.ssz);
+			sector_list[o.start].name = o.name;
+			o.content = sector_list[o.start].data.slice(0,o.size);
+			prep_blob(o.content, 0);
+		} else {
+			o.storage = 'minifat';
+			if(minifat_store !== ENDOFCHAIN && o.start !== ENDOFCHAIN) {
+				o.content = sector_list[minifat_store].data.slice(o.start*MSSZ,o.start*MSSZ+o.size);
+				prep_blob(o.content, 0);
+			}
+		}
+		files[name] = o;
+		FileIndex.push(o);
+	}
+}
+
+function read_date(blob, offset) {
+	return new Date(( ( (__readUInt32LE(blob,offset+4)/1e7)*Math.pow(2,32)+__readUInt32LE(blob,offset)/1e7 ) - 11644473600)*1000);
+}
+
+var fs;
+function readFileSync(filename, options) {
+	if(fs === undefined) fs = require('fs');
+	return parse(fs.readFileSync(filename), options);
+}
+
+function readSync(blob, options) {
+	switch(options !== undefined && options.type !== undefined ? options.type : "base64") {
+		case "file": return readFileSync(blob, options);
+		case "base64": return parse(s2a(Base64.decode(blob)), options);
+		case "binary": return parse(s2a(blob), options);
+	}
+	return parse(blob);
+}
+
+/** CFB Constants */
+var MSSZ = 64; /* Mini Sector Size = 1<<6 */
+//var MSCSZ = 4096; /* Mini Stream Cutoff Size */
+/* 2.1 Compound File Sector Numbers and Types */
+var ENDOFCHAIN = -2;
+/* 2.2 Compound File Header */
+var HEADER_SIGNATURE = 'd0cf11e0a1b11ae1';
+var HEADER_CLSID = '00000000000000000000000000000000';
+var consts = {
+	/* 2.1 Compund File Sector Numbers and Types */
+	MAXREGSECT: -6,
+	DIFSECT: -4,
+	FATSECT: -3,
+	ENDOFCHAIN: ENDOFCHAIN,
+	FREESECT: -1,
+	/* 2.2 Compound File Header */
+	HEADER_SIGNATURE: HEADER_SIGNATURE,
+	HEADER_MINOR_VERSION: '3e00',
+	MAXREGSID: -6,
+	NOSTREAM: -1,
+	HEADER_CLSID: HEADER_CLSID,
+	/* 2.6.1 Compound File Directory Entry */
+	EntryTypes: ['unknown','storage','stream','lockbytes','property','root']
+};
+
+exports.read = readSync;
+exports.parse = parse;
+exports.utils = {
+	ReadShift: ReadShift,
+	CheckField: CheckField,
+	prep_blob: prep_blob,
+	bconcat: bconcat,
+	consts: consts
+};
+
+return exports;
+})();
+
+if(typeof require !== 'undefined' && typeof module !== 'undefined' && typeof DO_NOT_EXPORT_CFB === 'undefined') { module.exports = CFB; }
+function isval(x) { return x !== undefined && x !== null; }
+
+function keys(o) { return Object.keys(o); }
+
+function evert_key(obj, key) {
+	var o = [], K = keys(obj);
+	for(var i = 0; i !== K.length; ++i) o[obj[K[i]][key]] = K[i];
+	return o;
+}
+
+function evert(obj) {
+	var o = [], K = keys(obj);
+	for(var i = 0; i !== K.length; ++i) o[obj[K[i]]] = K[i];
+	return o;
+}
+
+function evert_num(obj) {
+	var o = [], K = keys(obj);
+	for(var i = 0; i !== K.length; ++i) o[obj[K[i]]] = parseInt(K[i],10);
+	return o;
+}
+
+function evert_arr(obj) {
+	var o = [], K = keys(obj);
+	for(var i = 0; i !== K.length; ++i) {
+		if(o[obj[K[i]]] == null) o[obj[K[i]]] = [];
+		o[obj[K[i]]].push(K[i]);
+	}
+	return o;
+}
+
+/* TODO: date1904 logic */
+function datenum(v, date1904) {
+	if(date1904) v+=1462;
+	var epoch = Date.parse(v);
+	return (epoch + 2209161600000) / (24 * 60 * 60 * 1000);
+}
+
+function cc2str(arr) {
+	var o = "";
+	for(var i = 0; i != arr.length; ++i) o += String.fromCharCode(arr[i]);
+	return o;
+}
+
+function getdata(data) {
+	if(!data) return null;
+	if(data.name.substr(-4) === ".bin") {
+		if(data.data) return char_codes(data.data);
+		if(data.asNodeBuffer && has_buf) return data.asNodeBuffer();
+		if(data._data && data._data.getContent) return Array.prototype.slice.call(data._data.getContent());
+	} else {
+		if(data.data) return data.name.substr(-4) !== ".bin" ? debom_xml(data.data) : char_codes(data.data);
+		if(data.asNodeBuffer && has_buf) return debom_xml(data.asNodeBuffer().toString('binary'));
+		if(data.asBinary) return debom_xml(data.asBinary());
+		if(data._data && data._data.getContent) return debom_xml(cc2str(Array.prototype.slice.call(data._data.getContent(),0)));
+	}
+	return null;
+}
+
+function safegetzipfile(zip, file) {
+	var f = file; if(zip.files[f]) return zip.files[f];
+
+	var lowerCaseFiles = {};
+	for (var key in zip.files) {
+		lowerCaseFiles[key.toLowerCase()] = zip.files[key];
+	}
+
+	f = file.toLowerCase(); if(lowerCaseFiles[f]) return lowerCaseFiles[f];
+	f = f.replace(/\//g,'\\'); if(lowerCaseFiles[f]) return lowerCaseFiles[f];
+	return null;
+}
+
+function getzipfile(zip, file) {
+	var o = safegetzipfile(zip, file);
+	if(o == null) throw new Error("Cannot find file " + file + " in zip");
+	return o;
+}
+
+function getzipdata(zip, file, safe) {
+	if(!safe) return getdata(getzipfile(zip, file));
+	if(!file) return null;
+	try { return getzipdata(zip, file); } catch(e) { return null; }
+}
+
+var _fs, jszip;
+if(typeof JSZip !== 'undefined') jszip = JSZip;
+if (typeof exports !== 'undefined') {
+	if (typeof module !== 'undefined' && module.exports) {
+		if(has_buf && typeof jszip === 'undefined') jszip = require('js'+'zip');
+		if(typeof jszip === 'undefined') jszip = require('./js'+'zip').JSZip;
+		_fs = require('f'+'s');
+	}
+}
+var attregexg=/([\w:]+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:'))/g;
+var tagregex=/<[^>]*>/g;
+var nsregex=/<\w*:/, nsregex2 = /<(\/?)\w+:/;
+function parsexmltag(tag, skip_root) {
+	var z = [];
+	var eq = 0, c = 0;
+	for(; eq !== tag.length; ++eq) if((c = tag.charCodeAt(eq)) === 32 || c === 10 || c === 13) break;
+	if(!skip_root) z[0] = tag.substr(0, eq);
+	if(eq === tag.length) return z;
+	var m = tag.match(attregexg), j=0, w="", v="", i=0, q="", cc="";
+	if(m) for(i = 0; i != m.length; ++i) {
+		cc = m[i];
+		for(c=0; c != cc.length; ++c) if(cc.charCodeAt(c) === 61) break;
+		q = cc.substr(0,c); v = cc.substring(c+2, cc.length-1);
+		for(j=0;j!=q.length;++j) if(q.charCodeAt(j) === 58) break;
+		if(j===q.length) z[q] = v;
+		else z[(j===5 && q.substr(0,5)==="xmlns"?"xmlns":"")+q.substr(j+1)] = v;
+	}
+	return z;
+}
+function strip_ns(x) { return x.replace(nsregex2, "<$1"); }
+
+var encodings = {
+	'&quot;': '"',
+	'&apos;': "'",
+	'&gt;': '>',
+	'&lt;': '<',
+	'&amp;': '&'
+};
+var rencoding = evert(encodings);
+var rencstr = "&<>'\"".split("");
+
+// TODO: CP remap (need to read file version to determine OS)
+var unescapexml = (function() {
+	var encregex = /&[a-z]*;/g, coderegex = /_x([\da-fA-F]+)_/g;
+	return function unescapexml(text){
+		var s = text + '';
+		return s.replace(encregex, function($$) { return encodings[$$]; }).replace(coderegex,function(m,c) {return String.fromCharCode(parseInt(c,16));});
+	};
+})();
+
+var decregex=/[&<>'"]/g, charegex = /[\u0000-\u0008\u000b-\u001f]/g;
+function escapexml(text){
+	var s = text + '';
+	return s.replace(decregex, function(y) { return rencoding[y]; }).replace(charegex,function(s) { return "_x" + ("000"+s.charCodeAt(0).toString(16)).substr(-4) + "_";});
+}
+
+/* TODO: handle codepages */
+var xlml_fixstr = (function() {
+	var entregex = /&#(\d+);/g;
+	function entrepl($$,$1) { return String.fromCharCode(parseInt($1,10)); }
+	return function xlml_fixstr(str) { return str.replace(entregex,entrepl); };
+})();
+
+function parsexmlbool(value, tag) {
+	switch(value) {
+		case '1': case 'true': case 'TRUE': return true;
+		/* case '0': case 'false': case 'FALSE':*/
+		default: return false;
+	}
+}
+
+var utf8read = function utf8reada(orig) {
+	var out = "", i = 0, c = 0, d = 0, e = 0, f = 0, w = 0;
+	while (i < orig.length) {
+		c = orig.charCodeAt(i++);
+		if (c < 128) { out += String.fromCharCode(c); continue; }
+		d = orig.charCodeAt(i++);
+		if (c>191 && c<224) { out += String.fromCharCode(((c & 31) << 6) | (d & 63)); continue; }
+		e = orig.charCodeAt(i++);
+		if (c < 240) { out += String.fromCharCode(((c & 15) << 12) | ((d & 63) << 6) | (e & 63)); continue; }
+		f = orig.charCodeAt(i++);
+		w = (((c & 7) << 18) | ((d & 63) << 12) | ((e & 63) << 6) | (f & 63))-65536;
+		out += String.fromCharCode(0xD800 + ((w>>>10)&1023));
+		out += String.fromCharCode(0xDC00 + (w&1023));
+	}
+	return out;
+};
+
+
+if(has_buf) {
+	var utf8readb = function utf8readb(data) {
+		var out = new Buffer(2*data.length), w, i, j = 1, k = 0, ww=0, c;
+		for(i = 0; i < data.length; i+=j) {
+			j = 1;
+			if((c=data.charCodeAt(i)) < 128) w = c;
+			else if(c < 224) { w = (c&31)*64+(data.charCodeAt(i+1)&63); j=2; }
+			else if(c < 240) { w=(c&15)*4096+(data.charCodeAt(i+1)&63)*64+(data.charCodeAt(i+2)&63); j=3; }
+			else { j = 4;
+				w = (c & 7)*262144+(data.charCodeAt(i+1)&63)*4096+(data.charCodeAt(i+2)&63)*64+(data.charCodeAt(i+3)&63);
+				w -= 65536; ww = 0xD800 + ((w>>>10)&1023); w = 0xDC00 + (w&1023);
+			}
+			if(ww !== 0) { out[k++] = ww&255; out[k++] = ww>>>8; ww = 0; }
+			out[k++] = w%256; out[k++] = w>>>8;
+		}
+		out.length = k;
+		return out.toString('ucs2');
+	};
+	var corpus = "foo bar baz\u00e2\u0098\u0083\u00f0\u009f\u008d\u00a3";
+	if(utf8read(corpus) == utf8readb(corpus)) utf8read = utf8readb;
+	var utf8readc = function utf8readc(data) { return Buffer(data, 'binary').toString('utf8'); };
+	if(utf8read(corpus) == utf8readc(corpus)) utf8read = utf8readc;
+}
+
+// matches <foo>...</foo> extracts content
+var matchtag = (function() {
+	var mtcache = {};
+	return function matchtag(f,g) {
+		var t = f+"|"+g;
+		if(mtcache[t] !== undefined) return mtcache[t];
+		return (mtcache[t] = new RegExp('<(?:\\w+:)?'+f+'(?: xml:space="preserve")?(?:[^>]*)>([^\u2603]*)</(?:\\w+:)?'+f+'>',(g||"")));
+	};
+})();
+
+var vtregex = (function(){ var vt_cache = {};
+	return function vt_regex(bt) {
+		if(vt_cache[bt] !== undefined) return vt_cache[bt];
+		return (vt_cache[bt] = new RegExp("<vt:" + bt + ">(.*?)</vt:" + bt + ">", 'g') );
+};})();
+var vtvregex = /<\/?vt:variant>/g, vtmregex = /<vt:([^>]*)>(.*)</;
+function parseVector(data) {
+	var h = parsexmltag(data);
+
+	var matches = data.match(vtregex(h.baseType))||[];
+	if(matches.length != h.size) throw "unexpected vector length " + matches.length + " != " + h.size;
+	var res = [];
+	matches.forEach(function(x) {
+		var v = x.replace(vtvregex,"").match(vtmregex);
+		res.push({v:v[2], t:v[1]});
+	});
+	return res;
+}
+
+var wtregex = /(^\s|\s$|\n)/;
+function writetag(f,g) {return '<' + f + (g.match(wtregex)?' xml:space="preserve"' : "") + '>' + g + '</' + f + '>';}
+
+function wxt_helper(h) { return keys(h).map(function(k) { return " " + k + '="' + h[k] + '"';}).join(""); }
+function writextag(f,g,h) { return '<' + f + (isval(h) ? wxt_helper(h) : "") + (isval(g) ? (g.match(wtregex)?' xml:space="preserve"' : "") + '>' + g + '</' + f : "/") + '>';}
+
+function write_w3cdtf(d, t) { try { return d.toISOString().replace(/\.\d*/,""); } catch(e) { if(t) throw e; } }
+
+function write_vt(s) {
+	switch(typeof s) {
+		case 'string': return writextag('vt:lpwstr', s);
+		case 'number': return writextag((s|0)==s?'vt:i4':'vt:r8', String(s));
+		case 'boolean': return writextag('vt:bool',s?'true':'false');
+	}
+	if(s instanceof Date) return writextag('vt:filetime', write_w3cdtf(s));
+	throw new Error("Unable to serialize " + s);
+}
+
+var XML_HEADER = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\r\n';
+var XMLNS = {
+	'dc': 'http://purl.org/dc/elements/1.1/',
+	'dcterms': 'http://purl.org/dc/terms/',
+	'dcmitype': 'http://purl.org/dc/dcmitype/',
+	'mx': 'http://schemas.microsoft.com/office/mac/excel/2008/main',
+	'r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',
+	'sjs': 'http://schemas.openxmlformats.org/package/2006/sheetjs/core-properties',
+	'vt': 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes',
+	'xsi': 'http://www.w3.org/2001/XMLSchema-instance',
+	'xsd': 'http://www.w3.org/2001/XMLSchema'
+};
+
+XMLNS.main = [
+	'http://schemas.openxmlformats.org/spreadsheetml/2006/main',
+	'http://purl.oclc.org/ooxml/spreadsheetml/main',
+	'http://schemas.microsoft.com/office/excel/2006/main',
+	'http://schemas.microsoft.com/office/excel/2006/2'
+];
+
+function readIEEE754(buf, idx, isLE, nl, ml) {
+	if(isLE === undefined) isLE = true;
+	if(!nl) nl = 8;
+	if(!ml && nl === 8) ml = 52;
+	var e, m, el = nl * 8 - ml - 1, eMax = (1 << el) - 1, eBias = eMax >> 1;
+	var bits = -7, d = isLE ? -1 : 1, i = isLE ? (nl - 1) : 0, s = buf[idx + i];
+
+	i += d;
+	e = s & ((1 << (-bits)) - 1); s >>>= (-bits); bits += el;
+	for (; bits > 0; e = e * 256 + buf[idx + i], i += d, bits -= 8);
+	m = e & ((1 << (-bits)) - 1); e >>>= (-bits); bits += ml;
+	for (; bits > 0; m = m * 256 + buf[idx + i], i += d, bits -= 8);
+	if (e === eMax) return m ? NaN : ((s ? -1 : 1) * Infinity);
+	else if (e === 0) e = 1 - eBias;
+	else { m = m + Math.pow(2, ml); e = e - eBias; }
+	return (s ? -1 : 1) * m * Math.pow(2, e - ml);
+}
+
+var __toBuffer, ___toBuffer;
+__toBuffer = ___toBuffer = function toBuffer_(bufs) { var x = []; for(var i = 0; i < bufs[0].length; ++i) { x.push.apply(x, bufs[0][i]); } return x; };
+var __utf16le, ___utf16le;
+__utf16le = ___utf16le = function utf16le_(b,s,e) { var ss=[]; for(var i=s; i<e; i+=2) ss.push(String.fromCharCode(__readUInt16LE(b,i))); return ss.join(""); };
+var __hexlify, ___hexlify;
+__hexlify = ___hexlify = function hexlify_(b,s,l) { return b.slice(s,(s+l)).map(function(x){return (x<16?"0":"") + x.toString(16);}).join(""); };
+var __utf8, ___utf8;
+__utf8 = ___utf8 = function(b,s,e) { var ss=[]; for(var i=s; i<e; i++) ss.push(String.fromCharCode(__readUInt8(b,i))); return ss.join(""); };
+var __lpstr, ___lpstr;
+__lpstr = ___lpstr = function lpstr_(b,i) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : "";};
+var __lpwstr, ___lpwstr;
+__lpwstr = ___lpwstr = function lpwstr_(b,i) { var len = 2*__readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : "";};
+var __double, ___double;
+__double = ___double = function(b, idx) { return readIEEE754(b, idx);};
+
+var is_buf = function is_buf_a(a) { return Array.isArray(a); };
+if(has_buf) {
+	__utf16le = function utf16le_b(b,s,e) { if(!Buffer.isBuffer(b)) return ___utf16le(b,s,e); return b.toString('utf16le',s,e); };
+	__hexlify = function(b,s,l) { return Buffer.isBuffer(b) ? b.toString('hex',s,s+l) : ___hexlify(b,s,l); };
+	__lpstr = function lpstr_b(b,i) { if(!Buffer.isBuffer(b)) return ___lpstr(b, i); var len = b.readUInt32LE(i); return len > 0 ? b.toString('utf8',i+4,i+4+len-1) : "";};
+	__lpwstr = function lpwstr_b(b,i) { if(!Buffer.isBuffer(b)) return ___lpwstr(b, i); var len = 2*b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len-1);};
+	__utf8 = function utf8_b(s,e) { return this.toString('utf8',s,e); };
+	__toBuffer = function(bufs) { return (bufs[0].length > 0 && Buffer.isBuffer(bufs[0][0])) ? Buffer.concat(bufs[0]) : ___toBuffer(bufs);};
+	bconcat = function(bufs) { return Buffer.isBuffer(bufs[0]) ? Buffer.concat(bufs) : [].concat.apply([], bufs); };
+	__double = function double_(b,i) { if(Buffer.isBuffer(b)) return b.readDoubleLE(i); return ___double(b,i); };
+	is_buf = function is_buf_b(a) { return Buffer.isBuffer(a) || Array.isArray(a); };
+}
+
+/* from js-xls */
+if(typeof cptable !== 'undefined') {
+	__utf16le = function(b,s,e) { return cptable.utils.decode(1200, b.slice(s,e)); };
+	__utf8 = function(b,s,e) { return cptable.utils.decode(65001, b.slice(s,e)); };
+	__lpstr = function(b,i) { var len = __readUInt32LE(b,i); return len > 0 ? cptable.utils.decode(current_codepage, b.slice(i+4, i+4+len-1)) : "";};
+	__lpwstr = function(b,i) { var len = 2*__readUInt32LE(b,i); return len > 0 ? cptable.utils.decode(1200, b.slice(i+4,i+4+len-1)) : "";};
+}
+
+var __readUInt8 = function(b, idx) { return b[idx]; };
+var __readUInt16LE = function(b, idx) { return b[idx+1]*(1<<8)+b[idx]; };
+var __readInt16LE = function(b, idx) { var u = b[idx+1]*(1<<8)+b[idx]; return (u < 0x8000) ? u : (0xffff - u + 1) * -1; };
+var __readUInt32LE = function(b, idx) { return b[idx+3]*(1<<24)+(b[idx+2]<<16)+(b[idx+1]<<8)+b[idx]; };
+var __readInt32LE = function(b, idx) { return (b[idx+3]<<24)|(b[idx+2]<<16)|(b[idx+1]<<8)|b[idx]; };
+
+var ___unhexlify = function(s) { return s.match(/../g).map(function(x) { return parseInt(x,16);}); };
+var __unhexlify = typeof Buffer !== "undefined" ? function(s) { return Buffer.isBuffer(s) ? new Buffer(s, 'hex') : ___unhexlify(s); } : ___unhexlify;
+
+function ReadShift(size, t) {
+	var o="", oI, oR, oo=[], w, vv, i, loc;
+	switch(t) {
+		case 'dbcs':
+			loc = this.l;
+			if(has_buf && Buffer.isBuffer(this)) o = this.slice(this.l, this.l+2*size).toString("utf16le");
+			else for(i = 0; i != size; ++i) { o+=String.fromCharCode(__readUInt16LE(this, loc)); loc+=2; }
+			size *= 2;
+			break;
+
+		case 'utf8': o = __utf8(this, this.l, this.l + size); break;
+		case 'utf16le': size *= 2; o = __utf16le(this, this.l, this.l + size); break;
+
+		/* [MS-OLEDS] 2.1.4 LengthPrefixedAnsiString */
+		case 'lpstr': o = __lpstr(this, this.l); size = 5 + o.length; break;
+		/* [MS-OLEDS] 2.1.5 LengthPrefixedUnicodeString */
+		case 'lpwstr': o = __lpwstr(this, this.l); size = 5 + o.length; if(o[o.length-1] == '\u0000') size += 2; break;
+
+		case 'cstr': size = 0; o = "";
+			while((w=__readUInt8(this, this.l + size++))!==0) oo.push(_getchar(w));
+			o = oo.join(""); break;
+		case 'wstr': size = 0; o = "";
+			while((w=__readUInt16LE(this,this.l +size))!==0){oo.push(_getchar(w));size+=2;}
+			size+=2; o = oo.join(""); break;
+
+		/* sbcs and dbcs support continue records in the SST way TODO codepages */
+		case 'dbcs-cont': o = ""; loc = this.l;
+			for(i = 0; i != size; ++i) {
+				if(this.lens && this.lens.indexOf(loc) !== -1) {
+					w = __readUInt8(this, loc);
+					this.l = loc + 1;
+					vv = ReadShift.call(this, size-i, w ? 'dbcs-cont' : 'sbcs-cont');
+					return oo.join("") + vv;
+				}
+				oo.push(_getchar(__readUInt16LE(this, loc)));
+				loc+=2;
+			} o = oo.join(""); size *= 2; break;
+
+		case 'sbcs-cont': o = ""; loc = this.l;
+			for(i = 0; i != size; ++i) {
+				if(this.lens && this.lens.indexOf(loc) !== -1) {
+					w = __readUInt8(this, loc);
+					this.l = loc + 1;
+					vv = ReadShift.call(this, size-i, w ? 'dbcs-cont' : 'sbcs-cont');
+					return oo.join("") + vv;
+				}
+				oo.push(_getchar(__readUInt8(this, loc)));
+				loc+=1;
+			} o = oo.join(""); break;
+
+		default:
+	switch(size) {
+		case 1: oI = __readUInt8(this, this.l); this.l++; return oI;
+		case 2: oI = (t === 'i' ? __readInt16LE : __readUInt16LE)(this, this.l); this.l += 2; return oI;
+		case 4:
+			if(t === 'i' || (this[this.l+3] & 0x80)===0) { oI = __readInt32LE(this, this.l); this.l += 4; return oI; }
+			else { oR = __readUInt32LE(this, this.l); this.l += 4; return oR; } break;
+		case 8: if(t === 'f') { oR = __double(this, this.l); this.l += 8; return oR; }
+		/* falls through */
+		case 16: o = __hexlify(this, this.l, size); break;
+	}}
+	this.l+=size; return o;
+}
+
+function WriteShift(t, val, f) {
+	var size, i;
+	if(f === 'dbcs') {
+		for(i = 0; i != val.length; ++i) this.writeUInt16LE(val.charCodeAt(i), this.l + 2 * i);
+		size = 2 * val.length;
+	} else switch(t) {
+		case  1: size = 1; this[this.l] = val&255; break;
+		case  3: size = 3; this[this.l+2] = val & 255; val >>>= 8; this[this.l+1] = val&255; val >>>= 8; this[this.l] = val&255; break;
+		case  4: size = 4; this.writeUInt32LE(val, this.l); break;
+		case  8: size = 8; if(f === 'f') { this.writeDoubleLE(val, this.l); break; }
+		/* falls through */
+		case 16: break;
+		case -4: size = 4; this.writeInt32LE(val, this.l); break;
+	}
+	this.l += size; return this;
+}
+
+function CheckField(hexstr, fld) {
+	var m = __hexlify(this,this.l,hexstr.length>>1);
+	if(m !== hexstr) throw fld + 'Expected ' + hexstr + ' saw ' + m;
+	this.l += hexstr.length>>1;
+}
+
+function prep_blob(blob, pos) {
+	blob.l = pos;
+	blob.read_shift = ReadShift;
+	blob.chk = CheckField;
+	blob.write_shift = WriteShift;
+}
+
+function parsenoop(blob, length) { blob.l += length; }
+
+function writenoop(blob, length) { blob.l += length; }
+
+function new_buf(sz) {
+	var o = new_raw_buf(sz);
+	prep_blob(o, 0);
+	return o;
+}
+
+/* [MS-XLSB] 2.1.4 Record */
+function recordhopper(data, cb, opts) {
+	var tmpbyte, cntbyte, length;
+	prep_blob(data, data.l || 0);
+	while(data.l < data.length) {
+		var RT = data.read_shift(1);
+		if(RT & 0x80) RT = (RT & 0x7F) + ((data.read_shift(1) & 0x7F)<<7);
+		var R = XLSBRecordEnum[RT] || XLSBRecordEnum[0xFFFF];
+		tmpbyte = data.read_shift(1);
+		length = tmpbyte & 0x7F;
+		for(cntbyte = 1; cntbyte <4 && (tmpbyte & 0x80); ++cntbyte) length += ((tmpbyte = data.read_shift(1)) & 0x7F)<<(7*cntbyte);
+		var d = R.f(data, length, opts);
+		if(cb(d, R, RT)) return;
+	}
+}
+
+/* control buffer usage for fixed-length buffers */
+function buf_array() {
+	var bufs = [], blksz = 2048;
+	var newblk = function ba_newblk(sz) {
+		var o = new_buf(sz);
+		prep_blob(o, 0);
+		return o;
+	};
+
+	var curbuf = newblk(blksz);
+
+	var endbuf = function ba_endbuf() {
+		curbuf.length = curbuf.l;
+		if(curbuf.length > 0) bufs.push(curbuf);
+		curbuf = null;
+	};
+
+	var next = function ba_next(sz) {
+		if(sz < curbuf.length - curbuf.l) return curbuf;
+		endbuf();
+		return (curbuf = newblk(Math.max(sz+1, blksz)));
+	};
+
+	var end = function ba_end() {
+		endbuf();
+		return __toBuffer([bufs]);
+	};
+
+	var push = function ba_push(buf) { endbuf(); curbuf = buf; next(blksz); };
+
+	return { next:next, push:push, end:end, _bufs:bufs };
+}
+
+function write_record(ba, type, payload, length) {
+	var t = evert_RE[type], l;
+	if(!length) length = XLSBRecordEnum[t].p || (payload||[]).length || 0;
+	l = 1 + (t >= 0x80 ? 1 : 0) + 1 + length;
+	if(length >= 0x80) ++l; if(length >= 0x4000) ++l; if(length >= 0x200000) ++l;
+	var o = ba.next(l);
+	if(t <= 0x7F) o.write_shift(1, t);
+	else {
+		o.write_shift(1, (t & 0x7F) + 0x80);
+		o.write_shift(1, (t >> 7));
+	}
+	for(var i = 0; i != 4; ++i) {
+		if(length >= 0x80) { o.write_shift(1, (length & 0x7F)+0x80); length >>= 7; }
+		else { o.write_shift(1, length); break; }
+	}
+	if(length > 0 && is_buf(payload)) ba.push(payload);
+}
+/* XLS ranges enforced */
+function shift_cell_xls(cell, tgt) {
+	if(tgt.s) {
+		if(cell.cRel) cell.c += tgt.s.c;
+		if(cell.rRel) cell.r += tgt.s.r;
+	} else {
+		cell.c += tgt.c;
+		cell.r += tgt.r;
+	}
+	cell.cRel = cell.rRel = 0;
+	while(cell.c >= 0x100) cell.c -= 0x100;
+	while(cell.r >= 0x10000) cell.r -= 0x10000;
+	return cell;
+}
+
+function shift_range_xls(cell, range) {
+	cell.s = shift_cell_xls(cell.s, range.s);
+	cell.e = shift_cell_xls(cell.e, range.s);
+	return cell;
+}
+
+var OFFCRYPTO = {};
+var make_offcrypto = function(O, _crypto) {
+	var crypto;
+	if(typeof _crypto !== 'undefined') crypto = _crypto;
+	else if(typeof require !== 'undefined') {
+		try { crypto = require('cry'+'pto'); }
+		catch(e) { crypto = null; }
+	}
+
+	O.rc4 = function(key, data) {
+		var S = new Array(256);
+		var c = 0, i = 0, j = 0, t = 0;
+		for(i = 0; i != 256; ++i) S[i] = i;
+		for(i = 0; i != 256; ++i) {
+			j = (j + S[i] + (key[i%key.length]).charCodeAt(0))&255;
+			t = S[i]; S[i] = S[j]; S[j] = t;
+		}
+		i = j = 0; out = Buffer(data.length);
+		for(c = 0; c != data.length; ++c) {
+			i = (i + 1)&255;
+			j = (j + S[i])%256;
+			t = S[i]; S[i] = S[j]; S[j] = t;
+			out[c] = (data[c] ^ S[(S[i]+S[j])&255]);
+		}
+		return out;
+	};
+
+	if(crypto) {
+		O.md5 = function(hex) { return crypto.createHash('md5').update(hex).digest('hex'); };
+	} else {
+		O.md5 = function(hex) { throw "unimplemented"; };
+	}
+};
+make_offcrypto(OFFCRYPTO, typeof crypto !== "undefined" ? crypto : undefined);
+
+
+/* [MS-XLSB] 2.5.143 */
+function parse_StrRun(data, length) {
+	return { ich: data.read_shift(2), ifnt: data.read_shift(2) };
+}
+
+/* [MS-XLSB] 2.1.7.121 */
+function parse_RichStr(data, length) {
+	var start = data.l;
+	var flags = data.read_shift(1);
+	var str = parse_XLWideString(data);
+	var rgsStrRun = [];
+	var z = { t: str, h: str };
+	if((flags & 1) !== 0) { /* fRichStr */
+		/* TODO: formatted string */
+		var dwSizeStrRun = data.read_shift(4);
+		for(var i = 0; i != dwSizeStrRun; ++i) rgsStrRun.push(parse_StrRun(data));
+		z.r = rgsStrRun;
+	}
+	else z.r = "<t>" + escapexml(str) + "</t>";
+	if((flags & 2) !== 0) { /* fExtStr */
+		/* TODO: phonetic string */
+	}
+	data.l = start + length;
+	return z;
+}
+function write_RichStr(str, o) {
+	/* TODO: formatted string */
+	if(o == null) o = new_buf(5+2*str.t.length);
+	o.write_shift(1,0);
+	write_XLWideString(str.t, o);
+	return o;
+}
+
+/* [MS-XLSB] 2.5.9 */
+function parse_XLSBCell(data) {
+	var col = data.read_shift(4);
+	var iStyleRef = data.read_shift(2);
+	iStyleRef += data.read_shift(1) <<16;
+	var fPhShow = data.read_shift(1);
+	return { c:col, iStyleRef: iStyleRef };
+}
+function write_XLSBCell(cell, o) {
+	if(o == null) o = new_buf(8);
+	o.write_shift(-4, cell.c);
+	o.write_shift(3, cell.iStyleRef === undefined ? cell.iStyleRef : cell.s);
+	o.write_shift(1, 0); /* fPhShow */
+	return o;
+}
+
+
+/* [MS-XLSB] 2.5.21 */
+function parse_XLSBCodeName (data, length) { return parse_XLWideString(data, length); }
+
+/* [MS-XLSB] 2.5.166 */
+function parse_XLNullableWideString(data) {
+	var cchCharacters = data.read_shift(4);
+	return cchCharacters === 0 || cchCharacters === 0xFFFFFFFF ? "" : data.read_shift(cchCharacters, 'dbcs');
+}
+function write_XLNullableWideString(data, o) {
+	if(!o) o = new_buf(127);
+	o.write_shift(4, data.length > 0 ? data.length : 0xFFFFFFFF);
+	if(data.length > 0) o.write_shift(0, data, 'dbcs');
+	return o;
+}
+
+/* [MS-XLSB] 2.5.168 */
+function parse_XLWideString(data) {
+	var cchCharacters = data.read_shift(4);
+	return cchCharacters === 0 ? "" : data.read_shift(cchCharacters, 'dbcs');
+}
+function write_XLWideString(data, o) {
+	if(o == null) o = new_buf(4+2*data.length);
+	o.write_shift(4, data.length);
+	if(data.length > 0) o.write_shift(0, data, 'dbcs');
+	return o;
+}
+
+/* [MS-XLSB] 2.5.114 */
+var parse_RelID = parse_XLNullableWideString;
+var write_RelID = write_XLNullableWideString;
+
+
+/* [MS-XLSB] 2.5.122 */
+/* [MS-XLS] 2.5.217 */
+function parse_RkNumber(data) {
+	var b = data.slice(data.l, data.l+4);
+	var fX100 = b[0] & 1, fInt = b[0] & 2;
+	data.l+=4;
+	b[0] &= 0xFC; // b[0] &= ~3;
+	var RK = fInt === 0 ? __double([0,0,0,0,b[0],b[1],b[2],b[3]],0) : __readInt32LE(b,0)>>2;
+	return fX100 ? RK/100 : RK;
+}
+
+/* [MS-XLSB] 2.5.153 */
+function parse_UncheckedRfX(data) {
+	var cell = {s: {}, e: {}};
+	cell.s.r = data.read_shift(4);
+	cell.e.r = data.read_shift(4);
+	cell.s.c = data.read_shift(4);
+	cell.e.c = data.read_shift(4);
+	return cell;
+}
+
+function write_UncheckedRfX(r, o) {
+	if(!o) o = new_buf(16);
+	o.write_shift(4, r.s.r);
+	o.write_shift(4, r.e.r);
+	o.write_shift(4, r.s.c);
+	o.write_shift(4, r.e.c);
+	return o;
+}
+
+/* [MS-XLSB] 2.5.171 */
+/* [MS-XLS] 2.5.342 */
+function parse_Xnum(data, length) { return data.read_shift(8, 'f'); }
+function write_Xnum(data, o) { return (o || new_buf(8)).write_shift(8, 'f', data); }
+
+/* [MS-XLSB] 2.5.198.2 */
+var BErr = {
+	0x00: "#NULL!",
+	0x07: "#DIV/0!",
+	0x0F: "#VALUE!",
+	0x17: "#REF!",
+	0x1D: "#NAME?",
+	0x24: "#NUM!",
+	0x2A: "#N/A",
+	0x2B: "#GETTING_DATA",
+	0xFF: "#WTF?"
+};
+var RBErr = evert_num(BErr);
+
+/* [MS-XLSB] 2.4.321 BrtColor */
+function parse_BrtColor(data, length) {
+	var out = {};
+	var d = data.read_shift(1);
+	out.fValidRGB = d & 1;
+	out.xColorType = d >>> 1;
+	out.index = data.read_shift(1);
+	out.nTintAndShade = data.read_shift(2, 'i');
+	out.bRed   = data.read_shift(1);
+	out.bGreen = data.read_shift(1);
+	out.bBlue  = data.read_shift(1);
+	out.bAlpha = data.read_shift(1);
+}
+
+/* [MS-XLSB] 2.5.52 */
+function parse_FontFlags(data, length) {
+	var d = data.read_shift(1);
+	data.l++;
+	var out = {
+		fItalic: d & 0x2,
+		fStrikeout: d & 0x8,
+		fOutline: d & 0x10,
+		fShadow: d & 0x20,
+		fCondense: d & 0x40,
+		fExtend: d & 0x80
+	};
+	return out;
+}
+/* [MS-OLEPS] 2.2 PropertyType */
+{
+	var VT_EMPTY    = 0x0000;
+	var VT_NULL     = 0x0001;
+	var VT_I2       = 0x0002;
+	var VT_I4       = 0x0003;
+	var VT_R4       = 0x0004;
+	var VT_R8       = 0x0005;
+	var VT_CY       = 0x0006;
+	var VT_DATE     = 0x0007;
+	var VT_BSTR     = 0x0008;
+	var VT_ERROR    = 0x000A;
+	var VT_BOOL     = 0x000B;
+	var VT_VARIANT  = 0x000C;
+	var VT_DECIMAL  = 0x000E;
+	var VT_I1       = 0x0010;
+	var VT_UI1      = 0x0011;
+	var VT_UI2      = 0x0012;
+	var VT_UI4      = 0x0013;
+	var VT_I8       = 0x0014;
+	var VT_UI8      = 0x0015;
+	var VT_INT      = 0x0016;
+	var VT_UINT     = 0x0017;
+	var VT_LPSTR    = 0x001E;
+	var VT_LPWSTR   = 0x001F;
+	var VT_FILETIME = 0x0040;
+	var VT_BLOB     = 0x0041;
+	var VT_STREAM   = 0x0042;
+	var VT_STORAGE  = 0x0043;
+	var VT_STREAMED_Object  = 0x0044;
+	var VT_STORED_Object    = 0x0045;
+	var VT_BLOB_Object      = 0x0046;
+	var VT_CF       = 0x0047;
+	var VT_CLSID    = 0x0048;
+	var VT_VERSIONED_STREAM = 0x0049;
+	var VT_VECTOR   = 0x1000;
+	var VT_ARRAY    = 0x2000;
+
+	var VT_STRING   = 0x0050; // 2.3.3.1.11 VtString
+	var VT_USTR     = 0x0051; // 2.3.3.1.12 VtUnalignedString
+	var VT_CUSTOM   = [VT_STRING, VT_USTR];
+}
+
+/* [MS-OSHARED] 2.3.3.2.2.1 Document Summary Information PIDDSI */
+var DocSummaryPIDDSI = {
+	0x01: { n: 'CodePage', t: VT_I2 },
+	0x02: { n: 'Category', t: VT_STRING },
+	0x03: { n: 'PresentationFormat', t: VT_STRING },
+	0x04: { n: 'ByteCount', t: VT_I4 },
+	0x05: { n: 'LineCount', t: VT_I4 },
+	0x06: { n: 'ParagraphCount', t: VT_I4 },
+	0x07: { n: 'SlideCount', t: VT_I4 },
+	0x08: { n: 'NoteCount', t: VT_I4 },
+	0x09: { n: 'HiddenCount', t: VT_I4 },
+	0x0a: { n: 'MultimediaClipCount', t: VT_I4 },
+	0x0b: { n: 'Scale', t: VT_BOOL },
+	0x0c: { n: 'HeadingPair', t: VT_VECTOR | VT_VARIANT },
+	0x0d: { n: 'DocParts', t: VT_VECTOR | VT_LPSTR },
+	0x0e: { n: 'Manager', t: VT_STRING },
+	0x0f: { n: 'Company', t: VT_STRING },
+	0x10: { n: 'LinksDirty', t: VT_BOOL },
+	0x11: { n: 'CharacterCount', t: VT_I4 },
+	0x13: { n: 'SharedDoc', t: VT_BOOL },
+	0x16: { n: 'HLinksChanged', t: VT_BOOL },
+	0x17: { n: 'AppVersion', t: VT_I4, p: 'version' },
+	0x1A: { n: 'ContentType', t: VT_STRING },
+	0x1B: { n: 'ContentStatus', t: VT_STRING },
+	0x1C: { n: 'Language', t: VT_STRING },
+	0x1D: { n: 'Version', t: VT_STRING },
+	0xFF: {}
+};
+
+/* [MS-OSHARED] 2.3.3.2.1.1 Summary Information Property Set PIDSI */
+var SummaryPIDSI = {
+	0x01: { n: 'CodePage', t: VT_I2 },
+	0x02: { n: 'Title', t: VT_STRING },
+	0x03: { n: 'Subject', t: VT_STRING },
+	0x04: { n: 'Author', t: VT_STRING },
+	0x05: { n: 'Keywords', t: VT_STRING },
+	0x06: { n: 'Comments', t: VT_STRING },
+	0x07: { n: 'Template', t: VT_STRING },
+	0x08: { n: 'LastAuthor', t: VT_STRING },
+	0x09: { n: 'RevNumber', t: VT_STRING },
+	0x0A: { n: 'EditTime', t: VT_FILETIME },
+	0x0B: { n: 'LastPrinted', t: VT_FILETIME },
+	0x0C: { n: 'CreatedDate', t: VT_FILETIME },
+	0x0D: { n: 'ModifiedDate', t: VT_FILETIME },
+	0x0E: { n: 'PageCount', t: VT_I4 },
+	0x0F: { n: 'WordCount', t: VT_I4 },
+	0x10: { n: 'CharCount', t: VT_I4 },
+	0x11: { n: 'Thumbnail', t: VT_CF },
+	0x12: { n: 'ApplicationName', t: VT_LPSTR },
+	0x13: { n: 'DocumentSecurity', t: VT_I4 },
+	0xFF: {}
+};
+
+/* [MS-OLEPS] 2.18 */
+var SpecialProperties = {
+	0x80000000: { n: 'Locale', t: VT_UI4 },
+	0x80000003: { n: 'Behavior', t: VT_UI4 },
+	0x72627262: {}
+};
+
+(function() {
+	for(var y in SpecialProperties) if(SpecialProperties.hasOwnProperty(y))
+	DocSummaryPIDDSI[y] = SummaryPIDSI[y] = SpecialProperties[y];
+})();
+
+/* [MS-XLS] 2.4.63 Country/Region codes */
+var CountryEnum = {
+	0x0001: "US", // United States
+	0x0002: "CA", // Canada
+	0x0003: "", // Latin America (except Brazil)
+	0x0007: "RU", // Russia
+	0x0014: "EG", // Egypt
+	0x001E: "GR", // Greece
+	0x001F: "NL", // Netherlands
+	0x0020: "BE", // Belgium
+	0x0021: "FR", // France
+	0x0022: "ES", // Spain
+	0x0024: "HU", // Hungary
+	0x0027: "IT", // Italy
+	0x0029: "CH", // Switzerland
+	0x002B: "AT", // Austria
+	0x002C: "GB", // United Kingdom
+	0x002D: "DK", // Denmark
+	0x002E: "SE", // Sweden
+	0x002F: "NO", // Norway
+	0x0030: "PL", // Poland
+	0x0031: "DE", // Germany
+	0x0034: "MX", // Mexico
+	0x0037: "BR", // Brazil
+	0x003d: "AU", // Australia
+	0x0040: "NZ", // New Zealand
+	0x0042: "TH", // Thailand
+	0x0051: "JP", // Japan
+	0x0052: "KR", // Korea
+	0x0054: "VN", // Viet Nam
+	0x0056: "CN", // China
+	0x005A: "TR", // Turkey
+	0x0069: "JS", // Ramastan
+	0x00D5: "DZ", // Algeria
+	0x00D8: "MA", // Morocco
+	0x00DA: "LY", // Libya
+	0x015F: "PT", // Portugal
+	0x0162: "IS", // Iceland
+	0x0166: "FI", // Finland
+	0x01A4: "CZ", // Czech Republic
+	0x0376: "TW", // Taiwan
+	0x03C1: "LB", // Lebanon
+	0x03C2: "JO", // Jordan
+	0x03C3: "SY", // Syria
+	0x03C4: "IQ", // Iraq
+	0x03C5: "KW", // Kuwait
+	0x03C6: "SA", // Saudi Arabia
+	0x03CB: "AE", // United Arab Emirates
+	0x03CC: "IL", // Israel
+	0x03CE: "QA", // Qatar
+	0x03D5: "IR", // Iran
+	0xFFFF: "US"  // United States
+};
+
+/* [MS-XLS] 2.5.127 */
+var XLSFillPattern = [
+	null,
+	'solid',
+	'mediumGray',
+	'darkGray',
+	'lightGray',
+	'darkHorizontal',
+	'darkVertical',
+	'darkDown',
+	'darkUp',
+	'darkGrid',
+	'darkTrellis',
+	'lightHorizontal',
+	'lightVertical',
+	'lightDown',
+	'lightUp',
+	'lightGrid',
+	'lightTrellis',
+	'gray125',
+	'gray0625'
+];
+
+function rgbify(arr) { return arr.map(function(x) { return [(x>>16)&255,(x>>8)&255,x&255]; }); }
+
+/* [MS-XLS] 2.5.161 */
+var XLSIcv = rgbify([
+	/* Color Constants */
+	0x000000,
+	0xFFFFFF,
+	0xFF0000,
+	0x00FF00,
+	0x0000FF,
+	0xFFFF00,
+	0xFF00FF,
+	0x00FFFF,
+
+	/* Defaults */
+	0x000000,
+	0xFFFFFF,
+	0xFF0000,
+	0x00FF00,
+	0x0000FF,
+	0xFFFF00,
+	0xFF00FF,
+	0x00FFFF,
+
+	0x800000,
+	0x008000,
+	0x000080,
+	0x808000,
+	0x800080,
+	0x008080,
+	0xC0C0C0,
+	0x808080,
+	0x9999FF,
+	0x993366,
+	0xFFFFCC,
+	0xCCFFFF,
+	0x660066,
+	0xFF8080,
+	0x0066CC,
+	0xCCCCFF,
+
+	0x000080,
+	0xFF00FF,
+	0xFFFF00,
+	0x00FFFF,
+	0x800080,
+	0x800000,
+	0x008080,
+	0x0000FF,
+	0x00CCFF,
+	0xCCFFFF,
+	0xCCFFCC,
+	0xFFFF99,
+	0x99CCFF,
+	0xFF99CC,
+	0xCC99FF,
+	0xFFCC99,
+
+	0x3366FF,
+	0x33CCCC,
+	0x99CC00,
+	0xFFCC00,
+	0xFF9900,
+	0xFF6600,
+	0x666699,
+	0x969696,
+	0x003366,
+	0x339966,
+	0x003300,
+	0x333300,
+	0x993300,
+	0x993366,
+	0x333399,
+	0x333333,
+
+	/* Sheet */
+	0xFFFFFF,
+	0x000000
+]);
+
+/* Parts enumerated in OPC spec, MS-XLSB and MS-XLSX */
+/* 12.3 Part Summary <SpreadsheetML> */
+/* 14.2 Part Summary <DrawingML> */
+/* [MS-XLSX] 2.1 Part Enumerations */
+/* [MS-XLSB] 2.1.7 Part Enumeration */
+var ct2type = {
+	/* Workbook */
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": "workbooks",
+
+	/* Worksheet */
+	"application/vnd.ms-excel.binIndexWs": "TODO", /* Binary Index */
+
+	/* Chartsheet */
+	"application/vnd.ms-excel.chartsheet": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": "TODO",
+
+	/* Dialogsheet */
+	"application/vnd.ms-excel.dialogsheet": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": "TODO",
+
+	/* Macrosheet */
+	"application/vnd.ms-excel.macrosheet": "TODO",
+	"application/vnd.ms-excel.macrosheet+xml": "TODO",
+	"application/vnd.ms-excel.intlmacrosheet": "TODO",
+	"application/vnd.ms-excel.binIndexMs": "TODO", /* Binary Index */
+
+	/* File Properties */
+	"application/vnd.openxmlformats-package.core-properties+xml": "coreprops",
+	"application/vnd.openxmlformats-officedocument.custom-properties+xml": "custprops",
+	"application/vnd.openxmlformats-officedocument.extended-properties+xml": "extprops",
+
+	/* Custom Data Properties */
+	"application/vnd.openxmlformats-officedocument.customXmlProperties+xml": "TODO",
+
+	/* Comments */
+	"application/vnd.ms-excel.comments": "comments",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": "comments",
+
+	/* PivotTable */
+	"application/vnd.ms-excel.pivotTable": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml": "TODO",
+
+	/* Calculation Chain */
+	"application/vnd.ms-excel.calcChain": "calcchains",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml": "calcchains",
+
+	/* Printer Settings */
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings": "TODO",
+
+	/* ActiveX */
+	"application/vnd.ms-office.activeX": "TODO",
+	"application/vnd.ms-office.activeX+xml": "TODO",
+
+	/* Custom Toolbars */
+	"application/vnd.ms-excel.attachedToolbars": "TODO",
+
+	/* External Data Connections */
+	"application/vnd.ms-excel.connections": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": "TODO",
+
+	/* External Links */
+	"application/vnd.ms-excel.externalLink": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml": "TODO",
+
+	/* Metadata */
+	"application/vnd.ms-excel.sheetMetadata": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml": "TODO",
+
+	/* PivotCache */
+	"application/vnd.ms-excel.pivotCacheDefinition": "TODO",
+	"application/vnd.ms-excel.pivotCacheRecords": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml": "TODO",
+
+	/* Query Table */
+	"application/vnd.ms-excel.queryTable": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml": "TODO",
+
+	/* Shared Workbook */
+	"application/vnd.ms-excel.userNames": "TODO",
+	"application/vnd.ms-excel.revisionHeaders": "TODO",
+	"application/vnd.ms-excel.revisionLog": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml": "TODO",
+
+	/* Single Cell Table */
+	"application/vnd.ms-excel.tableSingleCells": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml": "TODO",
+
+	/* Slicer */
+	"application/vnd.ms-excel.slicer": "TODO",
+	"application/vnd.ms-excel.slicerCache": "TODO",
+	"application/vnd.ms-excel.slicer+xml": "TODO",
+	"application/vnd.ms-excel.slicerCache+xml": "TODO",
+
+	/* Sort Map */
+	"application/vnd.ms-excel.wsSortMap": "TODO",
+
+	/* Table */
+	"application/vnd.ms-excel.table": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": "TODO",
+
+	/* Themes */
+	"application/vnd.openxmlformats-officedocument.theme+xml": "themes",
+
+	/* Timeline */
+	"application/vnd.ms-excel.Timeline+xml": "TODO", /* verify */
+	"application/vnd.ms-excel.TimelineCache+xml": "TODO", /* verify */
+
+	/* VBA */
+	"application/vnd.ms-office.vbaProject": "vba",
+	"application/vnd.ms-office.vbaProjectSignature": "vba",
+
+	/* Volatile Dependencies */
+	"application/vnd.ms-office.volatileDependencies": "TODO",
+	"application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml": "TODO",
+
+	/* Control Properties */
+	"application/vnd.ms-excel.controlproperties+xml": "TODO",
+
+	/* Data Model */
+	"application/vnd.openxmlformats-officedocument.model+data": "TODO",
+
+	/* Survey */
+	"application/vnd.ms-excel.Survey+xml": "TODO",
+
+	/* Drawing */
+	"application/vnd.openxmlformats-officedocument.drawing+xml": "TODO",
+	"application/vnd.openxmlformats-officedocument.drawingml.chart+xml": "TODO",
+	"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": "TODO",
+	"application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml": "TODO",
+	"application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml": "TODO",
+	"application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml": "TODO",
+	"application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml": "TODO",
+
+	/* VML */
+	"application/vnd.openxmlformats-officedocument.vmlDrawing": "TODO",
+
+	"application/vnd.openxmlformats-package.relationships+xml": "rels",
+	"application/vnd.openxmlformats-officedocument.oleObject": "TODO",
+
+	"sheet": "js"
+};
+
+var CT_LIST = (function(){
+	var o = {
+		workbooks: {
+			xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml",
+			xlsm: "application/vnd.ms-excel.sheet.macroEnabled.main+xml",
+			xlsb: "application/vnd.ms-excel.sheet.binary.macroEnabled.main",
+			xltx: "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml"
+		},
+		strs: { /* Shared Strings */
+			xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml",
+			xlsb: "application/vnd.ms-excel.sharedStrings"
+		},
+		sheets: {
+			xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml",
+			xlsb: "application/vnd.ms-excel.worksheet"
+		},
+		styles: {/* Styles */
+			xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml",
+			xlsb: "application/vnd.ms-excel.styles"
+		}
+	};
+	keys(o).forEach(function(k) { if(!o[k].xlsm) o[k].xlsm = o[k].xlsx; });
+	keys(o).forEach(function(k){ keys(o[k]).forEach(function(v) { ct2type[o[k][v]] = k; }); });
+	return o;
+})();
+
+var type2ct = evert_arr(ct2type);
+
+XMLNS.CT = 'http://schemas.openxmlformats.org/package/2006/content-types';
+
+function parse_ct(data, opts) {
+	var ctext = {};
+	if(!data || !data.match) return data;
+	var ct = { workbooks: [], sheets: [], calcchains: [], themes: [], styles: [],
+		coreprops: [], extprops: [], custprops: [], strs:[], comments: [], vba: [],
+		TODO:[], rels:[], xmlns: "" };
+	(data.match(tagregex)||[]).forEach(function(x) {
+		var y = parsexmltag(x);
+		switch(y[0].replace(nsregex,"<")) {
+			case '<?xml': break;
+			case '<Types': ct.xmlns = y['xmlns' + (y[0].match(/<(\w+):/)||["",""])[1] ]; break;
+			case '<Default': ctext[y.Extension] = y.ContentType; break;
+			case '<Override':
+				if(ct[ct2type[y.ContentType]] !== undefined) ct[ct2type[y.ContentType]].push(y.PartName);
+				else if(opts.WTF) console.error(y);
+				break;
+		}
+	});
+	if(ct.xmlns !== XMLNS.CT) throw new Error("Unknown Namespace: " + ct.xmlns);
+	ct.calcchain = ct.calcchains.length > 0 ? ct.calcchains[0] : "";
+	ct.sst = ct.strs.length > 0 ? ct.strs[0] : "";
+	ct.style = ct.styles.length > 0 ? ct.styles[0] : "";
+	ct.defaults = ctext;
+	delete ct.calcchains;
+	return ct;
+}
+
+var CTYPE_XML_ROOT = writextag('Types', null, {
+	'xmlns': XMLNS.CT,
+	'xmlns:xsd': XMLNS.xsd,
+	'xmlns:xsi': XMLNS.xsi
+});
+
+var CTYPE_DEFAULTS = [
+	['xml', 'application/xml'],
+	['bin', 'application/vnd.ms-excel.sheet.binary.macroEnabled.main'],
+	['rels', type2ct.rels[0]]
+].map(function(x) {
+	return writextag('Default', null, {'Extension':x[0], 'ContentType': x[1]});
+});
+
+function write_ct(ct, opts) {
+	var o = [], v;
+	o[o.length] = (XML_HEADER);
+	o[o.length] = (CTYPE_XML_ROOT);
+	o = o.concat(CTYPE_DEFAULTS);
+	var f1 = function(w) {
+		if(ct[w] && ct[w].length > 0) {
+			v = ct[w][0];
+			o[o.length] = (writextag('Override', null, {
+				'PartName': (v[0] == '/' ? "":"/") + v,
+				'ContentType': CT_LIST[w][opts.bookType || 'xlsx']
+			}));
+		}
+	};
+	var f2 = function(w) {
+		ct[w].forEach(function(v) {
+			o[o.length] = (writextag('Override', null, {
+				'PartName': (v[0] == '/' ? "":"/") + v,
+				'ContentType': CT_LIST[w][opts.bookType || 'xlsx']
+			}));
+		});
+	};
+	var f3 = function(t) {
+		(ct[t]||[]).forEach(function(v) {
+			o[o.length] = (writextag('Override', null, {
+				'PartName': (v[0] == '/' ? "":"/") + v,
+				'ContentType': type2ct[t][0]
+			}));
+		});
+	};
+	f1('workbooks');
+	f2('sheets');
+	f3('themes');
+	['strs', 'styles'].forEach(f1);
+	['coreprops', 'extprops', 'custprops'].forEach(f3);
+	if(o.length>2){ o[o.length] = ('</Types>'); o[1]=o[1].replace("/>",">"); }
+	return o.join("");
+}
+/* 9.3.2 OPC Relationships Markup */
+var RELS = {
+	WB: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",
+	SHEET: "http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument"
+};
+
+function parse_rels(data, currentFilePath) {
+	if (!data) return data;
+	if (currentFilePath.charAt(0) !== '/') {
+		currentFilePath = '/'+currentFilePath;
+	}
+	var rels = {};
+	var hash = {};
+	var resolveRelativePathIntoAbsolute = function (to) {
+		var toksFrom = currentFilePath.split('/');
+		toksFrom.pop(); // folder path
+		var toksTo = to.split('/');
+		var reversed = [];
+		while (toksTo.length !== 0) {
+			var tokTo = toksTo.shift();
+			if (tokTo === '..') {
+				toksFrom.pop();
+			} else if (tokTo !== '.') {
+				toksFrom.push(tokTo);
+			}
+		}
+		return toksFrom.join('/');
+	};
+
+	data.match(tagregex).forEach(function(x) {
+		var y = parsexmltag(x);
+		/* 9.3.2.2 OPC_Relationships */
+		if (y[0] === '<Relationship') {
+			var rel = {}; rel.Type = y.Type; rel.Target = y.Target; rel.Id = y.Id; rel.TargetMode = y.TargetMode;
+			var canonictarget = y.TargetMode === 'External' ? y.Target : resolveRelativePathIntoAbsolute(y.Target);
+			rels[canonictarget] = rel;
+			hash[y.Id] = rel;
+		}
+	});
+	rels["!id"] = hash;
+	return rels;
+}
+
+XMLNS.RELS = 'http://schemas.openxmlformats.org/package/2006/relationships';
+
+var RELS_ROOT = writextag('Relationships', null, {
+	//'xmlns:ns0': XMLNS.RELS,
+	'xmlns': XMLNS.RELS
+});
+
+/* TODO */
+function write_rels(rels) {
+	var o = [];
+	o[o.length] = (XML_HEADER);
+	o[o.length] = (RELS_ROOT);
+	keys(rels['!id']).forEach(function(rid) { var rel = rels['!id'][rid];
+		o[o.length] = (writextag('Relationship', null, rel));
+	});
+	if(o.length>2){ o[o.length] = ('</Relationships>'); o[1]=o[1].replace("/>",">"); }
+	return o.join("");
+}
+/* ECMA-376 Part II 11.1 Core Properties Part */
+/* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */
+var CORE_PROPS = [
+	["cp:category", "Category"],
+	["cp:contentStatus", "ContentStatus"],
+	["cp:keywords", "Keywords"],
+	["cp:lastModifiedBy", "LastAuthor"],
+	["cp:lastPrinted", "LastPrinted"],
+	["cp:revision", "RevNumber"],
+	["cp:version", "Version"],
+	["dc:creator", "Author"],
+	["dc:description", "Comments"],
+	["dc:identifier", "Identifier"],
+	["dc:language", "Language"],
+	["dc:subject", "Subject"],
+	["dc:title", "Title"],
+	["dcterms:created", "CreatedDate", 'date'],
+	["dcterms:modified", "ModifiedDate", 'date']
+];
+
+XMLNS.CORE_PROPS = "http://schemas.openxmlformats.org/package/2006/metadata/core-properties";
+RELS.CORE_PROPS  = 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties';
+
+var CORE_PROPS_REGEX = (function() {
+	var r = new Array(CORE_PROPS.length);
+	for(var i = 0; i < CORE_PROPS.length; ++i) {
+		var f = CORE_PROPS[i];
+		var g = "(?:"+ f[0].substr(0,f[0].indexOf(":")) +":)"+ f[0].substr(f[0].indexOf(":")+1);
+		r[i] = new RegExp("<" + g + "[^>]*>(.*)<\/" + g + ">");
+	}
+	return r;
+})();
+
+function parse_core_props(data) {
+	var p = {};
+
+	for(var i = 0; i < CORE_PROPS.length; ++i) {
+		var f = CORE_PROPS[i], cur = data.match(CORE_PROPS_REGEX[i]);
+		if(cur != null && cur.length > 0) p[f[1]] = cur[1];
+		if(f[2] === 'date' && p[f[1]]) p[f[1]] = new Date(p[f[1]]);
+	}
+
+	return p;
+}
+
+var CORE_PROPS_XML_ROOT = writextag('cp:coreProperties', null, {
+	//'xmlns': XMLNS.CORE_PROPS,
+	'xmlns:cp': XMLNS.CORE_PROPS,
+	'xmlns:dc': XMLNS.dc,
+	'xmlns:dcterms': XMLNS.dcterms,
+	'xmlns:dcmitype': XMLNS.dcmitype,
+	'xmlns:xsi': XMLNS.xsi
+});
+
+function cp_doit(f, g, h, o, p) {
+	if(p[f] != null || g == null || g === "") return;
+	p[f] = g;
+	o[o.length] = (h ? writextag(f,g,h) : writetag(f,g));
+}
+
+function write_core_props(cp, opts) {
+	var o = [XML_HEADER, CORE_PROPS_XML_ROOT], p = {};
+  if (opts && opts.Props) {
+    if (opts.Props.title) o[o.length]       = '<dc:title>'       + opts.Props.title        + '</dc:title>';
+    if (opts.Props.subject) o[o.length]     = '<dc:subject>'     + opts.Props.subject      + '</dc:subject>';
+    if (opts.Props.creator) o[o.length]     = '<dc:creator>'     + opts.Props.creator      + '</dc:creator>';
+    if (opts.Props.keywords) o[o.length]    = '<cp:keywords>'    + opts.Props.keywords      + '</cp:keywords>';
+    if (opts.Props.description) o[o.length] = '<dc:description>' + opts.Props.description  + '</dc:description>';
+  }
+  if(cp) {
+
+    if(cp.CreatedDate != null) cp_doit("dcterms:created", typeof cp.CreatedDate === "string" ? cp.CreatedDate : write_w3cdtf(cp.CreatedDate, opts.WTF), {"xsi:type":"dcterms:W3CDTF"}, o, p);
+    if(cp.ModifiedDate != null) cp_doit("dcterms:modified", typeof cp.ModifiedDate === "string" ? cp.ModifiedDate : write_w3cdtf(cp.ModifiedDate, opts.WTF), {"xsi:type":"dcterms:W3CDTF"}, o, p);
+
+  	for(var i = 0; i != CORE_PROPS.length; ++i) { var f = CORE_PROPS[i]; cp_doit(f[0], cp[f[1]], null, o, p); }
+  }
+  if(o.length>2){ o[o.length] = ('</cp:coreProperties>'); o[1]=o[1].replace("/>",">"); }
+  return o.join("");
+}
+/* 15.2.12.3 Extended File Properties Part */
+/* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */
+var EXT_PROPS = [
+	["Application", "Application", "string"],
+	["AppVersion", "AppVersion", "string"],
+	["Company", "Company", "string"],
+	["DocSecurity", "DocSecurity", "string"],
+	["Manager", "Manager", "string"],
+	["HyperlinksChanged", "HyperlinksChanged", "bool"],
+	["SharedDoc", "SharedDoc", "bool"],
+	["LinksUpToDate", "LinksUpToDate", "bool"],
+	["ScaleCrop", "ScaleCrop", "bool"],
+	["HeadingPairs", "HeadingPairs", "raw"],
+	["TitlesOfParts", "TitlesOfParts", "raw"]
+];
+
+XMLNS.EXT_PROPS = "http://schemas.openxmlformats.org/officeDocument/2006/extended-properties";
+RELS.EXT_PROPS  = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties';
+
+function parse_ext_props(data, p) {
+	var q = {}; if(!p) p = {};
+
+	EXT_PROPS.forEach(function(f) {
+		switch(f[2]) {
+			case "string": p[f[1]] = (data.match(matchtag(f[0]))||[])[1]; break;
+			case "bool": p[f[1]] = (data.match(matchtag(f[0]))||[])[1] === "true"; break;
+			case "raw":
+				var cur = data.match(new RegExp("<" + f[0] + "[^>]*>(.*)<\/" + f[0] + ">"));
+				if(cur && cur.length > 0) q[f[1]] = cur[1];
+				break;
+		}
+	});
+
+	if(q.HeadingPairs && q.TitlesOfParts) {
+		var v = parseVector(q.HeadingPairs);
+		var j = 0, widx = 0;
+		for(var i = 0; i !== v.length; ++i) {
+			switch(v[i].v) {
+				case "Worksheets": widx = j; p.Worksheets = +(v[++i].v); break;
+				case "Named Ranges": ++i; break; // TODO: Handle Named Ranges
+			}
+		}
+		var parts = parseVector(q.TitlesOfParts).map(function(x) { return utf8read(x.v); });
+		p.SheetNames = parts.slice(widx, widx + p.Worksheets);
+	}
+	return p;
+}
+
+var EXT_PROPS_XML_ROOT = writextag('Properties', null, {
+	'xmlns': XMLNS.EXT_PROPS,
+	'xmlns:vt': XMLNS.vt
+});
+
+function write_ext_props(cp, opts) {
+	var o = [], p = {}, W = writextag;
+	if(!cp) cp = {};
+	cp.Application = "SheetJS";
+	o[o.length] = (XML_HEADER);
+	o[o.length] = (EXT_PROPS_XML_ROOT);
+
+	EXT_PROPS.forEach(function(f) {
+		if(cp[f[1]] === undefined) return;
+		var v;
+		switch(f[2]) {
+			case 'string': v = cp[f[1]]; break;
+			case 'bool': v = cp[f[1]] ? 'true' : 'false'; break;
+		}
+		if(v !== undefined) o[o.length] = (W(f[0], v));
+	});
+
+	/* TODO: HeadingPairs, TitlesOfParts */
+	o[o.length] = (W('HeadingPairs', W('vt:vector', W('vt:variant', '<vt:lpstr>Worksheets</vt:lpstr>')+W('vt:variant', W('vt:i4', String(cp.Worksheets))), {size:2, baseType:"variant"})));
+	o[o.length] = (W('TitlesOfParts', W('vt:vector', cp.SheetNames.map(function(s) { return "<vt:lpstr>" + s + "</vt:lpstr>"; }).join(""), {size: cp.Worksheets, baseType:"lpstr"})));
+	if(o.length>2){ o[o.length] = ('</Properties>'); o[1]=o[1].replace("/>",">"); }
+	return o.join("");
+}
+/* 15.2.12.2 Custom File Properties Part */
+XMLNS.CUST_PROPS = "http://schemas.openxmlformats.org/officeDocument/2006/custom-properties";
+RELS.CUST_PROPS  = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties';
+
+var custregex = /<[^>]+>[^<]*/g;
+function parse_cust_props(data, opts) {
+	var p = {}, name;
+	var m = data.match(custregex);
+	if(m) for(var i = 0; i != m.length; ++i) {
+		var x = m[i], y = parsexmltag(x);
+		switch(y[0]) {
+			case '<?xml': break;
+			case '<Properties':
+				if(y.xmlns !== XMLNS.CUST_PROPS) throw "unrecognized xmlns " + y.xmlns;
+				if(y.xmlnsvt && y.xmlnsvt !== XMLNS.vt) throw "unrecognized vt " + y.xmlnsvt;
+				break;
+			case '<property': name = y.name; break;
+			case '</property>': name = null; break;
+			default: if (x.indexOf('<vt:') === 0) {
+				var toks = x.split('>');
+				var type = toks[0].substring(4), text = toks[1];
+				/* 22.4.2.32 (CT_Variant). Omit the binary types from 22.4 (Variant Types) */
+				switch(type) {
+					case 'lpstr': case 'lpwstr': case 'bstr': case 'lpwstr':
+						p[name] = unescapexml(text);
+						break;
+					case 'bool':
+						p[name] = parsexmlbool(text, '<vt:bool>');
+						break;
+					case 'i1': case 'i2': case 'i4': case 'i8': case 'int': case 'uint':
+						p[name] = parseInt(text, 10);
+						break;
+					case 'r4': case 'r8': case 'decimal':
+						p[name] = parseFloat(text);
+						break;
+					case 'filetime': case 'date':
+						p[name] = new Date(text);
+						break;
+					case 'cy': case 'error':
+						p[name] = unescapexml(text);
+						break;
+					default:
+						if(typeof console !== 'undefined') console.warn('Unexpected', x, type, toks);
+				}
+			} else if(x.substr(0,2) === "</") {
+			} else if(opts.WTF) throw new Error(x);
+		}
+	}
+	return p;
+}
+
+var CUST_PROPS_XML_ROOT = writextag('Properties', null, {
+	'xmlns': XMLNS.CUST_PROPS,
+	'xmlns:vt': XMLNS.vt
+});
+
+function write_cust_props(cp, opts) {
+	var o = [XML_HEADER, CUST_PROPS_XML_ROOT];
+	if(!cp) return o.join("");
+	var pid = 1;
+	keys(cp).forEach(function custprop(k) { ++pid;
+		o[o.length] = (writextag('property', write_vt(cp[k]), {
+			'fmtid': '{D5CDD505-2E9C-101B-9397-08002B2CF9AE}',
+			'pid': pid,
+			'name': k
+		}));
+	});
+	if(o.length>2){ o[o.length] = '</Properties>'; o[1]=o[1].replace("/>",">"); }
+	return o.join("");
+}
+function xlml_set_prop(Props, tag, val) {
+	/* TODO: Normalize the properties */
+	switch(tag) {
+		case 'Description': tag = 'Comments'; break;
+	}
+	Props[tag] = val;
+}
+
+/* [MS-DTYP] 2.3.3 FILETIME */
+/* [MS-OLEDS] 2.1.3 FILETIME (Packet Version) */
+/* [MS-OLEPS] 2.8 FILETIME (Packet Version) */
+function parse_FILETIME(blob) {
+	var dwLowDateTime = blob.read_shift(4), dwHighDateTime = blob.read_shift(4);
+	return new Date(((dwHighDateTime/1e7*Math.pow(2,32) + dwLowDateTime/1e7) - 11644473600)*1000).toISOString().replace(/\.000/,"");
+}
+
+/* [MS-OSHARED] 2.3.3.1.4 Lpstr */
+function parse_lpstr(blob, type, pad) {
+	var str = blob.read_shift(0, 'lpstr');
+	if(pad) blob.l += (4 - ((str.length+1) & 3)) & 3;
+	return str;
+}
+
+/* [MS-OSHARED] 2.3.3.1.6 Lpwstr */
+function parse_lpwstr(blob, type, pad) {
+	var str = blob.read_shift(0, 'lpwstr');
+	if(pad) blob.l += (4 - ((str.length+1) & 3)) & 3;
+	return str;
+}
+
+
+/* [MS-OSHARED] 2.3.3.1.11 VtString */
+/* [MS-OSHARED] 2.3.3.1.12 VtUnalignedString */
+function parse_VtStringBase(blob, stringType, pad) {
+	if(stringType === 0x1F /*VT_LPWSTR*/) return parse_lpwstr(blob);
+	return parse_lpstr(blob, stringType, pad);
+}
+
+function parse_VtString(blob, t, pad) { return parse_VtStringBase(blob, t, pad === false ? 0: 4); }
+function parse_VtUnalignedString(blob, t) { if(!t) throw new Error("dafuq?"); return parse_VtStringBase(blob, t, 0); }
+
+/* [MS-OSHARED] 2.3.3.1.9 VtVecUnalignedLpstrValue */
+function parse_VtVecUnalignedLpstrValue(blob) {
+	var length = blob.read_shift(4);
+	var ret = [];
+	for(var i = 0; i != length; ++i) ret[i] = blob.read_shift(0, 'lpstr');
+	return ret;
+}
+
+/* [MS-OSHARED] 2.3.3.1.10 VtVecUnalignedLpstr */
+function parse_VtVecUnalignedLpstr(blob) {
+	return parse_VtVecUnalignedLpstrValue(blob);
+}
+
+/* [MS-OSHARED] 2.3.3.1.13 VtHeadingPair */
+function parse_VtHeadingPair(blob) {
+	var headingString = parse_TypedPropertyValue(blob, VT_USTR);
+	var headerParts = parse_TypedPropertyValue(blob, VT_I4);
+	return [headingString, headerParts];
+}
+
+/* [MS-OSHARED] 2.3.3.1.14 VtVecHeadingPairValue */
+function parse_VtVecHeadingPairValue(blob) {
+	var cElements = blob.read_shift(4);
+	var out = [];
+	for(var i = 0; i != cElements / 2; ++i) out.push(parse_VtHeadingPair(blob));
+	return out;
+}
+
+/* [MS-OSHARED] 2.3.3.1.15 VtVecHeadingPair */
+function parse_VtVecHeadingPair(blob) {
+	// NOTE: When invoked, wType & padding were already consumed
+	return parse_VtVecHeadingPairValue(blob);
+}
+
+/* [MS-OLEPS] 2.18.1 Dictionary (uses 2.17, 2.16) */
+function parse_dictionary(blob,CodePage) {
+	var cnt = blob.read_shift(4);
+	var dict = {};
+	for(var j = 0; j != cnt; ++j) {
+		var pid = blob.read_shift(4);
+		var len = blob.read_shift(4);
+		dict[pid] = blob.read_shift(len, (CodePage === 0x4B0 ?'utf16le':'utf8')).replace(chr0,'').replace(chr1,'!');
+	}
+	if(blob.l & 3) blob.l = (blob.l>>2+1)<<2;
+	return dict;
+}
+
+/* [MS-OLEPS] 2.9 BLOB */
+function parse_BLOB(blob) {
+	var size = blob.read_shift(4);
+	var bytes = blob.slice(blob.l,blob.l+size);
+	if(size & 3 > 0) blob.l += (4 - (size & 3)) & 3;
+	return bytes;
+}
+
+/* [MS-OLEPS] 2.11 ClipboardData */
+function parse_ClipboardData(blob) {
+	// TODO
+	var o = {};
+	o.Size = blob.read_shift(4);
+	//o.Format = blob.read_shift(4);
+	blob.l += o.Size;
+	return o;
+}
+
+/* [MS-OLEPS] 2.14 Vector and Array Property Types */
+function parse_VtVector(blob, cb) {
+	/* [MS-OLEPS] 2.14.2 VectorHeader */
+/*	var Length = blob.read_shift(4);
+	var o = [];
+	for(var i = 0; i != Length; ++i) {
+		o.push(cb(blob));
+	}
+	return o;*/
+}
+
+/* [MS-OLEPS] 2.15 TypedPropertyValue */
+function parse_TypedPropertyValue(blob, type, _opts) {
+	var t = blob.read_shift(2), ret, opts = _opts||{};
+	blob.l += 2;
+	if(type !== VT_VARIANT)
+	if(t !== type && VT_CUSTOM.indexOf(type)===-1) throw new Error('Expected type ' + type + ' saw ' + t);
+	switch(type === VT_VARIANT ? t : type) {
+		case 0x02 /*VT_I2*/: ret = blob.read_shift(2, 'i'); if(!opts.raw) blob.l += 2; return ret;
+		case 0x03 /*VT_I4*/: ret = blob.read_shift(4, 'i'); return ret;
+		case 0x0B /*VT_BOOL*/: return blob.read_shift(4) !== 0x0;
+		case 0x13 /*VT_UI4*/: ret = blob.read_shift(4); return ret;
+		case 0x1E /*VT_LPSTR*/: return parse_lpstr(blob, t, 4).replace(chr0,'');
+		case 0x1F /*VT_LPWSTR*/: return parse_lpwstr(blob);
+		case 0x40 /*VT_FILETIME*/: return parse_FILETIME(blob);
+		case 0x41 /*VT_BLOB*/: return parse_BLOB(blob);
+		case 0x47 /*VT_CF*/: return parse_ClipboardData(blob);
+		case 0x50 /*VT_STRING*/: return parse_VtString(blob, t, !opts.raw && 4).replace(chr0,'');
+		case 0x51 /*VT_USTR*/: return parse_VtUnalignedString(blob, t, 4).replace(chr0,'');
+		case 0x100C /*VT_VECTOR|VT_VARIANT*/: return parse_VtVecHeadingPair(blob);
+		case 0x101E /*VT_LPSTR*/: return parse_VtVecUnalignedLpstr(blob);
+		default: throw new Error("TypedPropertyValue unrecognized type " + type + " " + t);
+	}
+}
+/* [MS-OLEPS] 2.14.2 VectorHeader */
+/*function parse_VTVectorVariant(blob) {
+	var Length = blob.read_shift(4);
+
+	if(Length & 1 !== 0) throw new Error("VectorHeader Length=" + Length + " must be even");
+	var o = [];
+	for(var i = 0; i != Length; ++i) {
+		o.push(parse_TypedPropertyValue(blob, VT_VARIANT));
+	}
+	return o;
+}*/
+
+/* [MS-OLEPS] 2.20 PropertySet */
+function parse_PropertySet(blob, PIDSI) {
+	var start_addr = blob.l;
+	var size = blob.read_shift(4);
+	var NumProps = blob.read_shift(4);
+	var Props = [], i = 0;
+	var CodePage = 0;
+	var Dictionary = -1, DictObj;
+	for(i = 0; i != NumProps; ++i) {
+		var PropID = blob.read_shift(4);
+		var Offset = blob.read_shift(4);
+		Props[i] = [PropID, Offset + start_addr];
+	}
+	var PropH = {};
+	for(i = 0; i != NumProps; ++i) {
+		if(blob.l !== Props[i][1]) {
+			var fail = true;
+			if(i>0 && PIDSI) switch(PIDSI[Props[i-1][0]].t) {
+				case 0x02 /*VT_I2*/: if(blob.l +2 === Props[i][1]) { blob.l+=2; fail = false; } break;
+				case 0x50 /*VT_STRING*/: if(blob.l <= Props[i][1]) { blob.l=Props[i][1]; fail = false; } break;
+				case 0x100C /*VT_VECTOR|VT_VARIANT*/: if(blob.l <= Props[i][1]) { blob.l=Props[i][1]; fail = false; } break;
+			}
+			if(!PIDSI && blob.l <= Props[i][1]) { fail=false; blob.l = Props[i][1]; }
+			if(fail) throw new Error("Read Error: Expected address " + Props[i][1] + ' at ' + blob.l + ' :' + i);
+		}
+		if(PIDSI) {
+			var piddsi = PIDSI[Props[i][0]];
+			PropH[piddsi.n] = parse_TypedPropertyValue(blob, piddsi.t, {raw:true});
+			if(piddsi.p === 'version') PropH[piddsi.n] = String(PropH[piddsi.n] >> 16) + "." + String(PropH[piddsi.n] & 0xFFFF);
+			if(piddsi.n == "CodePage") switch(PropH[piddsi.n]) {
+				case 0: PropH[piddsi.n] = 1252;
+					/* falls through */
+				case 10000: // OSX Roman
+				case 1252: // Windows Latin
+
+				case 874: // SB Windows Thai
+				case 1250: // SB Windows Central Europe
+				case 1251: // SB Windows Cyrillic
+				case 1253: // SB Windows Greek
+				case 1254: // SB Windows Turkish
+				case 1255: // SB Windows Hebrew
+				case 1256: // SB Windows Arabic
+				case 1257: // SB Windows Baltic
+				case 1258: // SB Windows Vietnam
+
+				case 932: // DB Windows Japanese Shift-JIS
+				case 936: // DB Windows Simplified Chinese GBK
+				case 949: // DB Windows Korean
+				case 950: // DB Windows Traditional Chinese Big5
+
+				case 1200: // UTF16LE
+				case 1201: // UTF16BE
+				case 65000: case -536: // UTF-7
+				case 65001: case -535: // UTF-8
+					set_cp(CodePage = PropH[piddsi.n]); break;
+				default: throw new Error("Unsupported CodePage: " + PropH[piddsi.n]);
+			}
+		} else {
+			if(Props[i][0] === 0x1) {
+				CodePage = PropH.CodePage = parse_TypedPropertyValue(blob, VT_I2);
+				set_cp(CodePage);
+				if(Dictionary !== -1) {
+					var oldpos = blob.l;
+					blob.l = Props[Dictionary][1];
+					DictObj = parse_dictionary(blob,CodePage);
+					blob.l = oldpos;
+				}
+			} else if(Props[i][0] === 0) {
+				if(CodePage === 0) { Dictionary = i; blob.l = Props[i+1][1]; continue; }
+				DictObj = parse_dictionary(blob,CodePage);
+			} else {
+				var name = DictObj[Props[i][0]];
+				var val;
+				/* [MS-OSHARED] 2.3.3.2.3.1.2 + PROPVARIANT */
+				switch(blob[blob.l]) {
+					case 0x41 /*VT_BLOB*/: blob.l += 4; val = parse_BLOB(blob); break;
+					case 0x1E /*VT_LPSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]); break;
+					case 0x1F /*VT_LPWSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]); break;
+					case 0x03 /*VT_I4*/: blob.l += 4; val = blob.read_shift(4, 'i'); break;
+					case 0x13 /*VT_UI4*/: blob.l += 4; val = blob.read_shift(4); break;
+					case 0x05 /*VT_R8*/: blob.l += 4; val = blob.read_shift(8, 'f'); break;
+					case 0x0B /*VT_BOOL*/: blob.l += 4; val = parsebool(blob, 4); break;
+					case 0x40 /*VT_FILETIME*/: blob.l += 4; val = new Date(parse_FILETIME(blob)); break;
+					default: throw new Error("unparsed value: " + blob[blob.l]);
+				}
+				PropH[name] = val;
+			}
+		}
+	}
+	blob.l = start_addr + size; /* step ahead to skip padding */
+	return PropH;
+}
+
+/* [MS-OLEPS] 2.21 PropertySetStream */
+function parse_PropertySetStream(file, PIDSI) {
+	var blob = file.content;
+	prep_blob(blob, 0);
+
+	var NumSets, FMTID0, FMTID1, Offset0, Offset1;
+	blob.chk('feff', 'Byte Order: ');
+
+	var vers = blob.read_shift(2); // TODO: check version
+	var SystemIdentifier = blob.read_shift(4);
+	blob.chk(CFB.utils.consts.HEADER_CLSID, 'CLSID: ');
+	NumSets = blob.read_shift(4);
+	if(NumSets !== 1 && NumSets !== 2) throw "Unrecognized #Sets: " + NumSets;
+	FMTID0 = blob.read_shift(16); Offset0 = blob.read_shift(4);
+
+	if(NumSets === 1 && Offset0 !== blob.l) throw "Length mismatch";
+	else if(NumSets === 2) { FMTID1 = blob.read_shift(16); Offset1 = blob.read_shift(4); }
+	var PSet0 = parse_PropertySet(blob, PIDSI);
+
+	var rval = { SystemIdentifier: SystemIdentifier };
+	for(var y in PSet0) rval[y] = PSet0[y];
+	//rval.blob = blob;
+	rval.FMTID = FMTID0;
+	//rval.PSet0 = PSet0;
+	if(NumSets === 1) return rval;
+	if(blob.l !== Offset1) throw "Length mismatch 2: " + blob.l + " !== " + Offset1;
+	var PSet1;
+	try { PSet1 = parse_PropertySet(blob, null); } catch(e) { }
+	for(y in PSet1) rval[y] = PSet1[y];
+	rval.FMTID = [FMTID0, FMTID1]; // TODO: verify FMTID0/1
+	return rval;
+}
+
+
+function parsenoop2(blob, length) { blob.read_shift(length); return null; }
+
+function parslurp(blob, length, cb) {
+	var arr = [], target = blob.l + length;
+	while(blob.l < target) arr.push(cb(blob, target - blob.l));
+	if(target !== blob.l) throw new Error("Slurp error");
+	return arr;
+}
+
+function parslurp2(blob, length, cb) {
+	var arr = [], target = blob.l + length, len = blob.read_shift(2);
+	while(len-- !== 0) arr.push(cb(blob, target - blob.l));
+	if(target !== blob.l) throw new Error("Slurp error");
+	return arr;
+}
+
+function parsebool(blob, length) { return blob.read_shift(length) === 0x1; }
+
+function parseuint16(blob) { return blob.read_shift(2, 'u'); }
+function parseuint16a(blob, length) { return parslurp(blob,length,parseuint16);}
+
+/* --- 2.5 Structures --- */
+
+/* [MS-XLS] 2.5.14 Boolean */
+var parse_Boolean = parsebool;
+
+/* [MS-XLS] 2.5.10 Bes (boolean or error) */
+function parse_Bes(blob) {
+	var v = blob.read_shift(1), t = blob.read_shift(1);
+	return t === 0x01 ? v : v === 0x01;
+}
+
+/* [MS-XLS] 2.5.240 ShortXLUnicodeString */
+function parse_ShortXLUnicodeString(blob, length, opts) {
+	var cch = blob.read_shift(1);
+	var width = 1, encoding = 'sbcs-cont';
+	var cp = current_codepage;
+	if(opts && opts.biff >= 8) current_codepage = 1200;
+	if(opts === undefined || opts.biff !== 5) {
+		var fHighByte = blob.read_shift(1);
+		if(fHighByte) { width = 2; encoding = 'dbcs-cont'; }
+	}
+	var o = cch ? blob.read_shift(cch, encoding) : "";
+	current_codepage = cp;
+	return o;
+}
+
+/* 2.5.293 XLUnicodeRichExtendedString */
+function parse_XLUnicodeRichExtendedString(blob) {
+	var cp = current_codepage;
+	current_codepage = 1200;
+	var cch = blob.read_shift(2), flags = blob.read_shift(1);
+	var fHighByte = flags & 0x1, fExtSt = flags & 0x4, fRichSt = flags & 0x8;
+	var width = 1 + (flags & 0x1); // 0x0 -> utf8, 0x1 -> dbcs
+	var cRun, cbExtRst;
+	var z = {};
+	if(fRichSt) cRun = blob.read_shift(2);
+	if(fExtSt) cbExtRst = blob.read_shift(4);
+	var encoding = (flags & 0x1) ? 'dbcs-cont' : 'sbcs-cont';
+	var msg = cch === 0 ? "" : blob.read_shift(cch, encoding);
+	if(fRichSt) blob.l += 4 * cRun; //TODO: parse this
+	if(fExtSt) blob.l += cbExtRst; //TODO: parse this
+	z.t = msg;
+	if(!fRichSt) { z.raw = "<t>" + z.t + "</t>"; z.r = z.t; }
+	current_codepage = cp;
+	return z;
+}
+
+/* 2.5.296 XLUnicodeStringNoCch */
+function parse_XLUnicodeStringNoCch(blob, cch, opts) {
+	var retval;
+	var fHighByte = blob.read_shift(1);
+	if(fHighByte===0) { retval = blob.read_shift(cch, 'sbcs-cont'); }
+	else { retval = blob.read_shift(cch, 'dbcs-cont'); }
+	return retval;
+}
+
+/* 2.5.294 XLUnicodeString */
+function parse_XLUnicodeString(blob, length, opts) {
+	var cch = blob.read_shift(opts !== undefined && opts.biff > 0 && opts.biff < 8 ? 1 : 2);
+	if(cch === 0) { blob.l++; return ""; }
+	return parse_XLUnicodeStringNoCch(blob, cch, opts);
+}
+/* BIFF5 override */
+function parse_XLUnicodeString2(blob, length, opts) {
+	if(opts.biff !== 5 && opts.biff !== 2) return parse_XLUnicodeString(blob, length, opts);
+	var cch = blob.read_shift(1);
+	if(cch === 0) { blob.l++; return ""; }
+	return blob.read_shift(cch, 'sbcs-cont');
+}
+
+/* [MS-XLS] 2.5.61 ControlInfo */
+var parse_ControlInfo = parsenoop;
+
+/* [MS-OSHARED] 2.3.7.6 URLMoniker TODO: flags */
+var parse_URLMoniker = function(blob, length) {
+	var len = blob.read_shift(4), start = blob.l;
+	var extra = false;
+	if(len > 24) {
+		/* look ahead */
+		blob.l += len - 24;
+		if(blob.read_shift(16) === "795881f43b1d7f48af2c825dc4852763") extra = true;
+		blob.l = start;
+	}
+	var url = blob.read_shift((extra?len-24:len)>>1, 'utf16le').replace(chr0,"");
+	if(extra) blob.l += 24;
+	return url;
+};
+
+/* [MS-OSHARED] 2.3.7.8 FileMoniker TODO: all fields */
+var parse_FileMoniker = function(blob, length) {
+	var cAnti = blob.read_shift(2);
+	var ansiLength = blob.read_shift(4);
+	var ansiPath = blob.read_shift(ansiLength, 'cstr');
+	var endServer = blob.read_shift(2);
+	var versionNumber = blob.read_shift(2);
+	var cbUnicodePathSize = blob.read_shift(4);
+	if(cbUnicodePathSize === 0) return ansiPath.replace(/\\/g,"/");
+	var cbUnicodePathBytes = blob.read_shift(4);
+	var usKeyValue = blob.read_shift(2);
+	var unicodePath = blob.read_shift(cbUnicodePathBytes>>1, 'utf16le').replace(chr0,"");
+	return unicodePath;
+};
+
+/* [MS-OSHARED] 2.3.7.2 HyperlinkMoniker TODO: all the monikers */
+var parse_HyperlinkMoniker = function(blob, length) {
+	var clsid = blob.read_shift(16); length -= 16;
+	switch(clsid) {
+		case "e0c9ea79f9bace118c8200aa004ba90b": return parse_URLMoniker(blob, length);
+		case "0303000000000000c000000000000046": return parse_FileMoniker(blob, length);
+		default: throw "unsupported moniker " + clsid;
+	}
+};
+
+/* [MS-OSHARED] 2.3.7.9 HyperlinkString */
+var parse_HyperlinkString = function(blob, length) {
+	var len = blob.read_shift(4);
+	var o = blob.read_shift(len, 'utf16le').replace(chr0, "");
+	return o;
+};
+
+/* [MS-OSHARED] 2.3.7.1 Hyperlink Object TODO: unify params with XLSX */
+var parse_Hyperlink = function(blob, length) {
+	var end = blob.l + length;
+	var sVer = blob.read_shift(4);
+	if(sVer !== 2) throw new Error("Unrecognized streamVersion: " + sVer);
+	var flags = blob.read_shift(2);
+	blob.l += 2;
+	var displayName, targetFrameName, moniker, oleMoniker, location, guid, fileTime;
+	if(flags & 0x0010) displayName = parse_HyperlinkString(blob, end - blob.l);
+	if(flags & 0x0080) targetFrameName = parse_HyperlinkString(blob, end - blob.l);
+	if((flags & 0x0101) === 0x0101) moniker = parse_HyperlinkString(blob, end - blob.l);
+	if((flags & 0x0101) === 0x0001) oleMoniker = parse_HyperlinkMoniker(blob, end - blob.l);
+	if(flags & 0x0008) location = parse_HyperlinkString(blob, end - blob.l);
+	if(flags & 0x0020) guid = blob.read_shift(16);
+	if(flags & 0x0040) fileTime = parse_FILETIME(blob, 8);
+	blob.l = end;
+	var target = (targetFrameName||moniker||oleMoniker);
+	if(location) target+="#"+location;
+	return {Target: target};
+};
+
+/* 2.5.178 LongRGBA */
+function parse_LongRGBA(blob, length) { var r = blob.read_shift(1), g = blob.read_shift(1), b = blob.read_shift(1), a = blob.read_shift(1); return [r,g,b,a]; }
+
+/* 2.5.177 LongRGB */
+function parse_LongRGB(blob, length) { var x = parse_LongRGBA(blob, length); x[3] = 0; return x; }
+
+
+/* --- MS-XLS --- */
+
+/* 2.5.19 */
+function parse_XLSCell(blob, length) {
+	var rw = blob.read_shift(2); // 0-indexed
+	var col = blob.read_shift(2);
+	var ixfe = blob.read_shift(2);
+	return {r:rw, c:col, ixfe:ixfe};
+}
+
+/* 2.5.134 */
+function parse_frtHeader(blob) {
+	var rt = blob.read_shift(2);
+	var flags = blob.read_shift(2); // TODO: parse these flags
+	blob.l += 8;
+	return {type: rt, flags: flags};
+}
+
+
+
+function parse_OptXLUnicodeString(blob, length, opts) { return length === 0 ? "" : parse_XLUnicodeString2(blob, length, opts); }
+
+/* 2.5.158 */
+var HIDEOBJENUM = ['SHOWALL', 'SHOWPLACEHOLDER', 'HIDEALL'];
+var parse_HideObjEnum = parseuint16;
+
+/* 2.5.344 */
+function parse_XTI(blob, length) {
+	var iSupBook = blob.read_shift(2), itabFirst = blob.read_shift(2,'i'), itabLast = blob.read_shift(2,'i');
+	return [iSupBook, itabFirst, itabLast];
+}
+
+/* 2.5.218 */
+function parse_RkRec(blob, length) {
+	var ixfe = blob.read_shift(2);
+	var RK = parse_RkNumber(blob);
+	//console.log("::", ixfe, RK,";;");
+	return [ixfe, RK];
+}
+
+/* 2.5.1 */
+function parse_AddinUdf(blob, length) {
+	blob.l += 4; length -= 4;
+	var l = blob.l + length;
+	var udfName = parse_ShortXLUnicodeString(blob, length);
+	var cb = blob.read_shift(2);
+	l -= blob.l;
+	if(cb !== l) throw "Malformed AddinUdf: padding = " + l + " != " + cb;
+	blob.l += cb;
+	return udfName;
+}
+
+/* 2.5.209 TODO: Check sizes */
+function parse_Ref8U(blob, length) {
+	var rwFirst = blob.read_shift(2);
+	var rwLast = blob.read_shift(2);
+	var colFirst = blob.read_shift(2);
+	var colLast = blob.read_shift(2);
+	return {s:{c:colFirst, r:rwFirst}, e:{c:colLast,r:rwLast}};
+}
+
+/* 2.5.211 */
+function parse_RefU(blob, length) {
+	var rwFirst = blob.read_shift(2);
+	var rwLast = blob.read_shift(2);
+	var colFirst = blob.read_shift(1);
+	var colLast = blob.read_shift(1);
+	return {s:{c:colFirst, r:rwFirst}, e:{c:colLast,r:rwLast}};
+}
+
+/* 2.5.207 */
+var parse_Ref = parse_RefU;
+
+/* 2.5.143 */
+function parse_FtCmo(blob, length) {
+	blob.l += 4;
+	var ot = blob.read_shift(2);
+	var id = blob.read_shift(2);
+	var flags = blob.read_shift(2);
+	blob.l+=12;
+	return [id, ot, flags];
+}
+
+/* 2.5.149 */
+function parse_FtNts(blob, length) {
+	var out = {};
+	blob.l += 4;
+	blob.l += 16; // GUID TODO
+	out.fSharedNote = blob.read_shift(2);
+	blob.l += 4;
+	return out;
+}
+
+/* 2.5.142 */
+function parse_FtCf(blob, length) {
+	var out = {};
+	blob.l += 4;
+	blob.cf = blob.read_shift(2);
+	return out;
+}
+
+/* 2.5.140 - 2.5.154 and friends */
+var FtTab = {
+	0x15: parse_FtCmo,
+	0x13: parsenoop,                                /* FtLbsData */
+	0x12: function(blob, length) { blob.l += 12; }, /* FtCblsData */
+	0x11: function(blob, length) { blob.l += 8; },  /* FtRboData */
+	0x10: parsenoop,                                /* FtEdoData */
+	0x0F: parsenoop,                                /* FtGboData */
+	0x0D: parse_FtNts,                              /* FtNts */
+	0x0C: function(blob, length) { blob.l += 24; }, /* FtSbs */
+	0x0B: function(blob, length) { blob.l += 10; }, /* FtRbo */
+	0x0A: function(blob, length) { blob.l += 16; }, /* FtCbls */
+	0x09: parsenoop,                                /* FtPictFmla */
+	0x08: function(blob, length) { blob.l += 6; },  /* FtPioGrbit */
+	0x07: parse_FtCf,                               /* FtCf */
+	0x06: function(blob, length) { blob.l += 6; },  /* FtGmo */
+	0x04: parsenoop,                                /* FtMacro */
+	0x00: function(blob, length) { blob.l += 4; }   /* FtEnding */
+};
+function parse_FtArray(blob, length, ot) {
+	var s = blob.l;
+	var fts = [];
+	while(blob.l < s + length) {
+		var ft = blob.read_shift(2);
+		blob.l-=2;
+		try {
+			fts.push(FtTab[ft](blob, s + length - blob.l));
+		} catch(e) { blob.l = s + length; return fts; }
+	}
+	if(blob.l != s + length) blob.l = s + length; //throw "bad Object Ft-sequence";
+	return fts;
+}
+
+/* 2.5.129 */
+var parse_FontIndex = parseuint16;
+
+/* --- 2.4 Records --- */
+
+/* 2.4.21 */
+function parse_BOF(blob, length) {
+	var o = {};
+	o.BIFFVer = blob.read_shift(2); length -= 2;
+	switch(o.BIFFVer) {
+		case 0x0600: /* BIFF8 */
+		case 0x0500: /* BIFF5 */
+		case 0x0002: case 0x0007: /* BIFF2 */
+			break;
+		default: throw "Unexpected BIFF Ver " + o.BIFFVer;
+	}
+	blob.read_shift(length);
+	return o;
+}
+
+
+/* 2.4.146 */
+function parse_InterfaceHdr(blob, length) {
+	if(length === 0) return 0x04b0;
+	var q;
+	if((q=blob.read_shift(2))!==0x04b0) throw 'InterfaceHdr codePage ' + q;
+	return 0x04b0;
+}
+
+
+/* 2.4.349 */
+function parse_WriteAccess(blob, length, opts) {
+	if(opts.enc) { blob.l += length; return ""; }
+	var l = blob.l;
+	// TODO: make sure XLUnicodeString doesnt overrun
+	var UserName = parse_XLUnicodeString(blob, 0, opts);
+	blob.read_shift(length + l - blob.l);
+	return UserName;
+}
+
+/* 2.4.28 */
+function parse_BoundSheet8(blob, length, opts) {
+	var pos = blob.read_shift(4);
+	var hidden = blob.read_shift(1) >> 6;
+	var dt = blob.read_shift(1);
+	switch(dt) {
+		case 0: dt = 'Worksheet'; break;
+		case 1: dt = 'Macrosheet'; break;
+		case 2: dt = 'Chartsheet'; break;
+		case 6: dt = 'VBAModule'; break;
+	}
+	var name = parse_ShortXLUnicodeString(blob, 0, opts);
+	if(name.length === 0) name = "Sheet1";
+	return { pos:pos, hs:hidden, dt:dt, name:name };
+}
+
+/* 2.4.265 TODO */
+function parse_SST(blob, length) {
+	var cnt = blob.read_shift(4);
+	var ucnt = blob.read_shift(4);
+	var strs = [];
+	for(var i = 0; i != ucnt; ++i) {
+		strs.push(parse_XLUnicodeRichExtendedString(blob));
+	}
+	strs.Count = cnt; strs.Unique = ucnt;
+	return strs;
+}
+
+/* 2.4.107 */
+function parse_ExtSST(blob, length) {
+	var extsst = {};
+	extsst.dsst = blob.read_shift(2);
+	blob.l += length-2;
+	return extsst;
+}
+
+
+/* 2.4.221 TODO*/
+function parse_Row(blob, length) {
+	var rw = blob.read_shift(2), col = blob.read_shift(2), Col = blob.read_shift(2), rht = blob.read_shift(2);
+	blob.read_shift(4); // reserved(2), unused(2)
+	var flags = blob.read_shift(1); // various flags
+	blob.read_shift(1); // reserved
+	blob.read_shift(2); //ixfe, other flags
+	return {r:rw, c:col, cnt:Col-col};
+}
+
+
+/* 2.4.125 */
+function parse_ForceFullCalculation(blob, length) {
+	var header = parse_frtHeader(blob);
+	if(header.type != 0x08A3) throw "Invalid Future Record " + header.type;
+	var fullcalc = blob.read_shift(4);
+	return fullcalc !== 0x0;
+}
+
+
+var parse_CompressPictures = parsenoop2; /* 2.4.55 Not interesting */
+
+
+
+/* 2.4.215 rt */
+function parse_RecalcId(blob, length) {
+	blob.read_shift(2);
+	return blob.read_shift(4);
+}
+
+/* 2.4.87 */
+function parse_DefaultRowHeight (blob, length) {
+	var f = blob.read_shift(2), miyRw;
+	miyRw = blob.read_shift(2); // flags & 0x02 -> hidden, else empty
+	var fl = {Unsynced:f&1,DyZero:(f&2)>>1,ExAsc:(f&4)>>2,ExDsc:(f&8)>>3};
+	return [fl, miyRw];
+}
+
+/* 2.4.345 TODO */
+function parse_Window1(blob, length) {
+	var xWn = blob.read_shift(2), yWn = blob.read_shift(2), dxWn = blob.read_shift(2), dyWn = blob.read_shift(2);
+	var flags = blob.read_shift(2), iTabCur = blob.read_shift(2), iTabFirst = blob.read_shift(2);
+	var ctabSel = blob.read_shift(2), wTabRatio = blob.read_shift(2);
+	return { Pos: [xWn, yWn], Dim: [dxWn, dyWn], Flags: flags, CurTab: iTabCur,
+		FirstTab: iTabFirst, Selected: ctabSel, TabRatio: wTabRatio };
+}
+
+/* 2.4.122 TODO */
+function parse_Font(blob, length, opts) {
+	blob.l += 14;
+	var name = parse_ShortXLUnicodeString(blob, 0, opts);
+	return name;
+}
+
+/* 2.4.149 */
+function parse_LabelSst(blob, length) {
+	var cell = parse_XLSCell(blob);
+	cell.isst = blob.read_shift(4);
+	return cell;
+}
+
+/* 2.4.148 */
+function parse_Label(blob, length, opts) {
+	var cell = parse_XLSCell(blob, 6);
+	var str = parse_XLUnicodeString(blob, length-6, opts);
+	cell.val = str;
+	return cell;
+}
+
+/* 2.4.126 Number Formats */
+function parse_Format(blob, length, opts) {
+	var ifmt = blob.read_shift(2);
+	var fmtstr = parse_XLUnicodeString2(blob, 0, opts);
+	return [ifmt, fmtstr];
+}
+
+/* 2.4.90 */
+function parse_Dimensions(blob, length) {
+	var w = length === 10 ? 2 : 4;
+	var r = blob.read_shift(w), R = blob.read_shift(w),
+	    c = blob.read_shift(2), C = blob.read_shift(2);
+	blob.l += 2;
+	return {s: {r:r, c:c}, e: {r:R, c:C}};
+}
+
+/* 2.4.220 */
+function parse_RK(blob, length) {
+	var rw = blob.read_shift(2), col = blob.read_shift(2);
+	var rkrec = parse_RkRec(blob);
+	return {r:rw, c:col, ixfe:rkrec[0], rknum:rkrec[1]};
+}
+
+/* 2.4.175 */
+function parse_MulRk(blob, length) {
+	var target = blob.l + length - 2;
+	var rw = blob.read_shift(2), col = blob.read_shift(2);
+	var rkrecs = [];
+	while(blob.l < target) rkrecs.push(parse_RkRec(blob));
+	if(blob.l !== target) throw "MulRK read error";
+	var lastcol = blob.read_shift(2);
+	if(rkrecs.length != lastcol - col + 1) throw "MulRK length mismatch";
+	return {r:rw, c:col, C:lastcol, rkrec:rkrecs};
+}
+
+/* 2.5.20 2.5.249 TODO */
+function parse_CellStyleXF(blob, length, style) {
+	var o = {};
+	var a = blob.read_shift(4), b = blob.read_shift(4);
+	var c = blob.read_shift(4), d = blob.read_shift(2);
+	o.patternType = XLSFillPattern[c >> 26];
+	o.icvFore = d & 0x7F;
+	o.icvBack = (d >> 7) & 0x7F;
+	return o;
+}
+function parse_CellXF(blob, length) {return parse_CellStyleXF(blob,length,0);}
+function parse_StyleXF(blob, length) {return parse_CellStyleXF(blob,length,1);}
+
+/* 2.4.353 TODO: actually do this right */
+function parse_XF(blob, length) {
+	var o = {};
+	o.ifnt = blob.read_shift(2); o.ifmt = blob.read_shift(2); o.flags = blob.read_shift(2);
+	o.fStyle = (o.flags >> 2) & 0x01;
+	length -= 6;
+	o.data = parse_CellStyleXF(blob, length, o.fStyle);
+	return o;
+}
+
+/* 2.4.134 */
+function parse_Guts(blob, length) {
+	blob.l += 4;
+	var out = [blob.read_shift(2), blob.read_shift(2)];
+	if(out[0] !== 0) out[0]--;
+	if(out[1] !== 0) out[1]--;
+	if(out[0] > 7 || out[1] > 7) throw "Bad Gutters: " + out;
+	return out;
+}
+
+/* 2.4.24 */
+function parse_BoolErr(blob, length) {
+	var cell = parse_XLSCell(blob, 6);
+	var val = parse_Bes(blob, 2);
+	cell.val = val;
+	cell.t = (val === true || val === false) ? 'b' : 'e';
+	return cell;
+}
+
+/* 2.4.180 Number */
+function parse_Number(blob, length) {
+	var cell = parse_XLSCell(blob, 6);
+	var xnum = parse_Xnum(blob, 8);
+	cell.val = xnum;
+	return cell;
+}
+
+var parse_XLHeaderFooter = parse_OptXLUnicodeString; // TODO: parse 2.4.136
+
+/* 2.4.271 */
+function parse_SupBook(blob, length, opts) {
+	var end = blob.l + length;
+	var ctab = blob.read_shift(2);
+	var cch = blob.read_shift(2);
+	var virtPath;
+	if(cch >=0x01 && cch <=0xff) virtPath = parse_XLUnicodeStringNoCch(blob, cch);
+	var rgst = blob.read_shift(end - blob.l);
+	opts.sbcch = cch;
+	return [cch, ctab, virtPath, rgst];
+}
+
+/* 2.4.105 TODO */
+function parse_ExternName(blob, length, opts) {
+	var flags = blob.read_shift(2);
+	var body;
+	var o = {
+		fBuiltIn: flags & 0x01,
+		fWantAdvise: (flags >>> 1) & 0x01,
+		fWantPict: (flags >>> 2) & 0x01,
+		fOle: (flags >>> 3) & 0x01,
+		fOleLink: (flags >>> 4) & 0x01,
+		cf: (flags >>> 5) & 0x3FF,
+		fIcon: flags >>> 15 & 0x01
+	};
+	if(opts.sbcch === 0x3A01) body = parse_AddinUdf(blob, length-2);
+	//else throw new Error("unsupported SupBook cch: " + opts.sbcch);
+	o.body = body || blob.read_shift(length-2);
+	return o;
+}
+
+/* 2.4.150 TODO */
+function parse_Lbl(blob, length, opts) {
+	if(opts.biff < 8) return parse_Label(blob, length, opts);
+	var target = blob.l + length;
+	var flags = blob.read_shift(2);
+	var chKey = blob.read_shift(1);
+	var cch = blob.read_shift(1);
+	var cce = blob.read_shift(2);
+	blob.l += 2;
+	var itab = blob.read_shift(2);
+	blob.l += 4;
+	var name = parse_XLUnicodeStringNoCch(blob, cch, opts);
+	var rgce = parse_NameParsedFormula(blob, target - blob.l, opts, cce);
+	return {
+		chKey: chKey,
+		Name: name,
+		rgce: rgce
+	};
+}
+
+/* 2.4.106 TODO: verify supbook manipulation */
+function parse_ExternSheet(blob, length, opts) {
+	if(opts.biff < 8) return parse_ShortXLUnicodeString(blob, length, opts);
+	var o = parslurp2(blob,length,parse_XTI);
+	var oo = [];
+	if(opts.sbcch === 0x0401) {
+		for(var i = 0; i != o.length; ++i) oo.push(opts.snames[o[i][1]]);
+		return oo;
+	}
+	else return o;
+}
+
+/* 2.4.260 */
+function parse_ShrFmla(blob, length, opts) {
+	var ref = parse_RefU(blob, 6);
+	blob.l++;
+	var cUse = blob.read_shift(1);
+	length -= 8;
+	return [parse_SharedParsedFormula(blob, length, opts), cUse];
+}
+
+/* 2.4.4 TODO */
+function parse_Array(blob, length, opts) {
+	var ref = parse_Ref(blob, 6);
+	blob.l += 6; length -= 12; /* TODO: fAlwaysCalc */
+	return [ref, parse_ArrayParsedFormula(blob, length, opts, ref)];
+}
+
+/* 2.4.173 */
+function parse_MTRSettings(blob, length) {
+	var fMTREnabled = blob.read_shift(4) !== 0x00;
+	var fUserSetThreadCount = blob.read_shift(4) !== 0x00;
+	var cUserThreadCount = blob.read_shift(4);
+	return [fMTREnabled, fUserSetThreadCount, cUserThreadCount];
+}
+
+/* 2.5.186 TODO: BIFF5 */
+function parse_NoteSh(blob, length, opts) {
+	if(opts.biff < 8) return;
+	var row = blob.read_shift(2), col = blob.read_shift(2);
+	var flags = blob.read_shift(2), idObj = blob.read_shift(2);
+	var stAuthor = parse_XLUnicodeString2(blob, 0, opts);
+	if(opts.biff < 8) blob.read_shift(1);
+	return [{r:row,c:col}, stAuthor, idObj, flags];
+}
+
+/* 2.4.179 */
+function parse_Note(blob, length, opts) {
+	/* TODO: Support revisions */
+	return parse_NoteSh(blob, length, opts);
+}
+
+/* 2.4.168 */
+function parse_MergeCells(blob, length) {
+	var merges = [];
+	var cmcs = blob.read_shift(2);
+	while (cmcs--) merges.push(parse_Ref8U(blob,length));
+	return merges;
+}
+
+/* 2.4.181 TODO: parse all the things! */
+function parse_Obj(blob, length) {
+	var cmo = parse_FtCmo(blob, 22); // id, ot, flags
+	var fts = parse_FtArray(blob, length-22, cmo[1]);
+	return { cmo: cmo, ft:fts };
+}
+
+/* 2.4.329 TODO: parse properly */
+function parse_TxO(blob, length, opts) {
+	var s = blob.l;
+try {
+	blob.l += 4;
+	var ot = (opts.lastobj||{cmo:[0,0]}).cmo[1];
+	var controlInfo;
+	if([0,5,7,11,12,14].indexOf(ot) == -1) blob.l += 6;
+	else controlInfo = parse_ControlInfo(blob, 6, opts);
+	var cchText = blob.read_shift(2);
+	var cbRuns = blob.read_shift(2);
+	var ifntEmpty = parse_FontIndex(blob, 2);
+	var len = blob.read_shift(2);
+	blob.l += len;
+	//var fmla = parse_ObjFmla(blob, s + length - blob.l);
+
+	var texts = "";
+	for(var i = 1; i < blob.lens.length-1; ++i) {
+		if(blob.l-s != blob.lens[i]) throw "TxO: bad continue record";
+		var hdr = blob[blob.l];
+		var t = parse_XLUnicodeStringNoCch(blob, blob.lens[i+1]-blob.lens[i]-1);
+		texts += t;
+		if(texts.length >= (hdr ? cchText : 2*cchText)) break;
+	}
+	if(texts.length !== cchText && texts.length !== cchText*2) {
+		throw "cchText: " + cchText + " != " + texts.length;
+	}
+
+	blob.l = s + length;
+	/* 2.5.272 TxORuns */
+//	var rgTxoRuns = [];
+//	for(var j = 0; j != cbRuns/8-1; ++j) blob.l += 8;
+//	var cchText2 = blob.read_shift(2);
+//	if(cchText2 !== cchText) throw "TxOLastRun mismatch: " + cchText2 + " " + cchText;
+//	blob.l += 6;
+//	if(s + length != blob.l) throw "TxO " + (s + length) + ", at " + blob.l;
+	return { t: texts };
+} catch(e) { blob.l = s + length; return { t: texts||"" }; }
+}
+
+/* 2.4.140 */
+var parse_HLink = function(blob, length) {
+	var ref = parse_Ref8U(blob, 8);
+	blob.l += 16; /* CLSID */
+	var hlink = parse_Hyperlink(blob, length-24);
+	return [ref, hlink];
+};
+
+/* 2.4.141 */
+var parse_HLinkTooltip = function(blob, length) {
+	var end = blob.l + length;
+	blob.read_shift(2);
+	var ref = parse_Ref8U(blob, 8);
+	var wzTooltip = blob.read_shift((length-10)/2, 'dbcs-cont');
+	wzTooltip = wzTooltip.replace(chr0,"");
+	return [ref, wzTooltip];
+};
+
+/* 2.4.63 */
+function parse_Country(blob, length) {
+	var o = [], d;
+	d = blob.read_shift(2); o[0] = CountryEnum[d] || d;
+	d = blob.read_shift(2); o[1] = CountryEnum[d] || d;
+	return o;
+}
+
+/* 2.4.50 ClrtClient */
+function parse_ClrtClient(blob, length) {
+	var ccv = blob.read_shift(2);
+	var o = [];
+	while(ccv-->0) o.push(parse_LongRGB(blob, 8));
+	return o;
+}
+
+/* 2.4.188 */
+function parse_Palette(blob, length) {
+	var ccv = blob.read_shift(2);
+	var o = [];
+	while(ccv-->0) o.push(parse_LongRGB(blob, 8));
+	return o;
+}
+
+/* 2.4.354 */
+function parse_XFCRC(blob, length) {
+	blob.l += 2;
+	var o = {cxfs:0, crc:0};
+	o.cxfs = blob.read_shift(2);
+	o.crc = blob.read_shift(4);
+	return o;
+}
+
+
+var parse_Style = parsenoop;
+var parse_StyleExt = parsenoop;
+
+var parse_ColInfo = parsenoop;
+
+var parse_Window2 = parsenoop;
+
+
+var parse_Backup = parsebool; /* 2.4.14 */
+var parse_Blank = parse_XLSCell; /* 2.4.20 Just the cell */
+var parse_BottomMargin = parse_Xnum; /* 2.4.27 */
+var parse_BuiltInFnGroupCount = parseuint16; /* 2.4.30 0x0E or 0x10 but excel 2011 generates 0x11? */
+var parse_CalcCount = parseuint16; /* 2.4.31 #Iterations */
+var parse_CalcDelta = parse_Xnum; /* 2.4.32 */
+var parse_CalcIter = parsebool;  /* 2.4.33 1=iterative calc */
+var parse_CalcMode = parseuint16; /* 2.4.34 0=manual, 1=auto (def), 2=table */
+var parse_CalcPrecision = parsebool; /* 2.4.35 */
+var parse_CalcRefMode = parsenoop2; /* 2.4.36 */
+var parse_CalcSaveRecalc = parsebool; /* 2.4.37 */
+var parse_CodePage = parseuint16; /* 2.4.52 */
+var parse_Compat12 = parsebool; /* 2.4.54 true = no compatibility check */
+var parse_Date1904 = parsebool; /* 2.4.77 - 1=1904,0=1900 */
+var parse_DefColWidth = parseuint16; /* 2.4.89 */
+var parse_DSF = parsenoop2; /* 2.4.94 -- MUST be ignored */
+var parse_EntExU2 = parsenoop2; /* 2.4.102 -- Explicitly says to ignore */
+var parse_EOF = parsenoop2; /* 2.4.103 */
+var parse_Excel9File = parsenoop2; /* 2.4.104 -- Optional and unused */
+var parse_FeatHdr = parsenoop2; /* 2.4.112 */
+var parse_FontX = parseuint16; /* 2.4.123 */
+var parse_Footer = parse_XLHeaderFooter; /* 2.4.124 */
+var parse_GridSet = parseuint16; /* 2.4.132, =1 */
+var parse_HCenter = parsebool; /* 2.4.135 sheet centered horizontal on print */
+var parse_Header = parse_XLHeaderFooter; /* 2.4.136 */
+var parse_HideObj = parse_HideObjEnum; /* 2.4.139 */
+var parse_InterfaceEnd = parsenoop2; /* 2.4.145 -- noop */
+var parse_LeftMargin = parse_Xnum; /* 2.4.151 */
+var parse_Mms = parsenoop2; /* 2.4.169 -- Explicitly says to ignore */
+var parse_ObjProtect = parsebool; /* 2.4.183 -- must be 1 if present */
+var parse_Password = parseuint16; /* 2.4.191 */
+var parse_PrintGrid = parsebool; /* 2.4.202 */
+var parse_PrintRowCol = parsebool; /* 2.4.203 */
+var parse_PrintSize = parseuint16; /* 2.4.204 0:3 */
+var parse_Prot4Rev = parsebool; /* 2.4.205 */
+var parse_Prot4RevPass = parseuint16; /* 2.4.206 */
+var parse_Protect = parsebool; /* 2.4.207 */
+var parse_RefreshAll = parsebool; /* 2.4.217 -- must be 0 if not template */
+var parse_RightMargin = parse_Xnum; /* 2.4.219 */
+var parse_RRTabId = parseuint16a; /* 2.4.241 */
+var parse_ScenarioProtect = parsebool; /* 2.4.245 */
+var parse_Scl = parseuint16a; /* 2.4.247 num, den */
+var parse_String = parse_XLUnicodeString; /* 2.4.268 */
+var parse_SxBool = parsebool; /* 2.4.274 */
+var parse_TopMargin = parse_Xnum; /* 2.4.328 */
+var parse_UsesELFs = parsebool; /* 2.4.337 -- should be 0 */
+var parse_VCenter = parsebool; /* 2.4.342 */
+var parse_WinProtect = parsebool; /* 2.4.347 */
+var parse_WriteProtect = parsenoop; /* 2.4.350 empty record */
+
+
+/* ---- */
+var parse_VerticalPageBreaks = parsenoop;
+var parse_HorizontalPageBreaks = parsenoop;
+var parse_Selection = parsenoop;
+var parse_Continue = parsenoop;
+var parse_Pane = parsenoop;
+var parse_Pls = parsenoop;
+var parse_DCon = parsenoop;
+var parse_DConRef = parsenoop;
+var parse_DConName = parsenoop;
+var parse_XCT = parsenoop;
+var parse_CRN = parsenoop;
+var parse_FileSharing = parsenoop;
+var parse_Uncalced = parsenoop;
+var parse_Template = parsenoop;
+var parse_Intl = parsenoop;
+var parse_WsBool = parsenoop;
+var parse_Sort = parsenoop;
+var parse_Sync = parsenoop;
+var parse_LPr = parsenoop;
+var parse_DxGCol = parsenoop;
+var parse_FnGroupName = parsenoop;
+var parse_FilterMode = parsenoop;
+var parse_AutoFilterInfo = parsenoop;
+var parse_AutoFilter = parsenoop;
+var parse_Setup = parsenoop;
+var parse_ScenMan = parsenoop;
+var parse_SCENARIO = parsenoop;
+var parse_SxView = parsenoop;
+var parse_Sxvd = parsenoop;
+var parse_SXVI = parsenoop;
+var parse_SxIvd = parsenoop;
+var parse_SXLI = parsenoop;
+var parse_SXPI = parsenoop;
+var parse_DocRoute = parsenoop;
+var parse_RecipName = parsenoop;
+var parse_MulBlank = parsenoop;
+var parse_SXDI = parsenoop;
+var parse_SXDB = parsenoop;
+var parse_SXFDB = parsenoop;
+var parse_SXDBB = parsenoop;
+var parse_SXNum = parsenoop;
+var parse_SxErr = parsenoop;
+var parse_SXInt = parsenoop;
+var parse_SXString = parsenoop;
+var parse_SXDtr = parsenoop;
+var parse_SxNil = parsenoop;
+var parse_SXTbl = parsenoop;
+var parse_SXTBRGIITM = parsenoop;
+var parse_SxTbpg = parsenoop;
+var parse_ObProj = parsenoop;
+var parse_SXStreamID = parsenoop;
+var parse_DBCell = parsenoop;
+var parse_SXRng = parsenoop;
+var parse_SxIsxoper = parsenoop;
+var parse_BookBool = parsenoop;
+var parse_DbOrParamQry = parsenoop;
+var parse_OleObjectSize = parsenoop;
+var parse_SXVS = parsenoop;
+var parse_BkHim = parsenoop;
+var parse_MsoDrawingGroup = parsenoop;
+var parse_MsoDrawing = parsenoop;
+var parse_MsoDrawingSelection = parsenoop;
+var parse_PhoneticInfo = parsenoop;
+var parse_SxRule = parsenoop;
+var parse_SXEx = parsenoop;
+var parse_SxFilt = parsenoop;
+var parse_SxDXF = parsenoop;
+var parse_SxItm = parsenoop;
+var parse_SxName = parsenoop;
+var parse_SxSelect = parsenoop;
+var parse_SXPair = parsenoop;
+var parse_SxFmla = parsenoop;
+var parse_SxFormat = parsenoop;
+var parse_SXVDEx = parsenoop;
+var parse_SXFormula = parsenoop;
+var parse_SXDBEx = parsenoop;
+var parse_RRDInsDel = parsenoop;
+var parse_RRDHead = parsenoop;
+var parse_RRDChgCell = parsenoop;
+var parse_RRDRenSheet = parsenoop;
+var parse_RRSort = parsenoop;
+var parse_RRDMove = parsenoop;
+var parse_RRFormat = parsenoop;
+var parse_RRAutoFmt = parsenoop;
+var parse_RRInsertSh = parsenoop;
+var parse_RRDMoveBegin = parsenoop;
+var parse_RRDMoveEnd = parsenoop;
+var parse_RRDInsDelBegin = parsenoop;
+var parse_RRDInsDelEnd = parsenoop;
+var parse_RRDConflict = parsenoop;
+var parse_RRDDefName = parsenoop;
+var parse_RRDRstEtxp = parsenoop;
+var parse_LRng = parsenoop;
+var parse_CUsr = parsenoop;
+var parse_CbUsr = parsenoop;
+var parse_UsrInfo = parsenoop;
+var parse_UsrExcl = parsenoop;
+var parse_FileLock = parsenoop;
+var parse_RRDInfo = parsenoop;
+var parse_BCUsrs = parsenoop;
+var parse_UsrChk = parsenoop;
+var parse_UserBView = parsenoop;
+var parse_UserSViewBegin = parsenoop; // overloaded
+var parse_UserSViewEnd = parsenoop;
+var parse_RRDUserView = parsenoop;
+var parse_Qsi = parsenoop;
+var parse_CondFmt = parsenoop;
+var parse_CF = parsenoop;
+var parse_DVal = parsenoop;
+var parse_DConBin = parsenoop;
+var parse_Lel = parsenoop;
+var parse_XLSCodeName = parse_XLUnicodeString;
+var parse_SXFDBType = parsenoop;
+var parse_ObNoMacros = parsenoop;
+var parse_Dv = parsenoop;
+var parse_Index = parsenoop;
+var parse_Table = parsenoop;
+var parse_BigName = parsenoop;
+var parse_ContinueBigName = parsenoop;
+var parse_WebPub = parsenoop;
+var parse_QsiSXTag = parsenoop;
+var parse_DBQueryExt = parsenoop;
+var parse_ExtString = parsenoop;
+var parse_TxtQry = parsenoop;
+var parse_Qsir = parsenoop;
+var parse_Qsif = parsenoop;
+var parse_RRDTQSIF = parsenoop;
+var parse_OleDbConn = parsenoop;
+var parse_WOpt = parsenoop;
+var parse_SXViewEx = parsenoop;
+var parse_SXTH = parsenoop;
+var parse_SXPIEx = parsenoop;
+var parse_SXVDTEx = parsenoop;
+var parse_SXViewEx9 = parsenoop;
+var parse_ContinueFrt = parsenoop;
+var parse_RealTimeData = parsenoop;
+var parse_ChartFrtInfo = parsenoop;
+var parse_FrtWrapper = parsenoop;
+var parse_StartBlock = parsenoop;
+var parse_EndBlock = parsenoop;
+var parse_StartObject = parsenoop;
+var parse_EndObject = parsenoop;
+var parse_CatLab = parsenoop;
+var parse_YMult = parsenoop;
+var parse_SXViewLink = parsenoop;
+var parse_PivotChartBits = parsenoop;
+var parse_FrtFontList = parsenoop;
+var parse_SheetExt = parsenoop;
+var parse_BookExt = parsenoop;
+var parse_SXAddl = parsenoop;
+var parse_CrErr = parsenoop;
+var parse_HFPicture = parsenoop;
+var parse_Feat = parsenoop;
+var parse_DataLabExt = parsenoop;
+var parse_DataLabExtContents = parsenoop;
+var parse_CellWatch = parsenoop;
+var parse_FeatHdr11 = parsenoop;
+var parse_Feature11 = parsenoop;
+var parse_DropDownObjIds = parsenoop;
+var parse_ContinueFrt11 = parsenoop;
+var parse_DConn = parsenoop;
+var parse_List12 = parsenoop;
+var parse_Feature12 = parsenoop;
+var parse_CondFmt12 = parsenoop;
+var parse_CF12 = parsenoop;
+var parse_CFEx = parsenoop;
+var parse_AutoFilter12 = parsenoop;
+var parse_ContinueFrt12 = parsenoop;
+var parse_MDTInfo = parsenoop;
+var parse_MDXStr = parsenoop;
+var parse_MDXTuple = parsenoop;
+var parse_MDXSet = parsenoop;
+var parse_MDXProp = parsenoop;
+var parse_MDXKPI = parsenoop;
+var parse_MDB = parsenoop;
+var parse_PLV = parsenoop;
+var parse_DXF = parsenoop;
+var parse_TableStyles = parsenoop;
+var parse_TableStyle = parsenoop;
+var parse_TableStyleElement = parsenoop;
+var parse_NamePublish = parsenoop;
+var parse_NameCmt = parsenoop;
+var parse_SortData = parsenoop;
+var parse_GUIDTypeLib = parsenoop;
+var parse_FnGrp12 = parsenoop;
+var parse_NameFnGrp12 = parsenoop;
+var parse_HeaderFooter = parsenoop;
+var parse_CrtLayout12 = parsenoop;
+var parse_CrtMlFrt = parsenoop;
+var parse_CrtMlFrtContinue = parsenoop;
+var parse_ShapePropsStream = parsenoop;
+var parse_TextPropsStream = parsenoop;
+var parse_RichTextStream = parsenoop;
+var parse_CrtLayout12A = parsenoop;
+var parse_Units = parsenoop;
+var parse_Chart = parsenoop;
+var parse_Series = parsenoop;
+var parse_DataFormat = parsenoop;
+var parse_LineFormat = parsenoop;
+var parse_MarkerFormat = parsenoop;
+var parse_AreaFormat = parsenoop;
+var parse_PieFormat = parsenoop;
+var parse_AttachedLabel = parsenoop;
+var parse_SeriesText = parsenoop;
+var parse_ChartFormat = parsenoop;
+var parse_Legend = parsenoop;
+var parse_SeriesList = parsenoop;
+var parse_Bar = parsenoop;
+var parse_Line = parsenoop;
+var parse_Pie = parsenoop;
+var parse_Area = parsenoop;
+var parse_Scatter = parsenoop;
+var parse_CrtLine = parsenoop;
+var parse_Axis = parsenoop;
+var parse_Tick = parsenoop;
+var parse_ValueRange = parsenoop;
+var parse_CatSerRange = parsenoop;
+var parse_AxisLine = parsenoop;
+var parse_CrtLink = parsenoop;
+var parse_DefaultText = parsenoop;
+var parse_Text = parsenoop;
+var parse_ObjectLink = parsenoop;
+var parse_Frame = parsenoop;
+var parse_Begin = parsenoop;
+var parse_End = parsenoop;
+var parse_PlotArea = parsenoop;
+var parse_Chart3d = parsenoop;
+var parse_PicF = parsenoop;
+var parse_DropBar = parsenoop;
+var parse_Radar = parsenoop;
+var parse_Surf = parsenoop;
+var parse_RadarArea = parsenoop;
+var parse_AxisParent = parsenoop;
+var parse_LegendException = parsenoop;
+var parse_ShtProps = parsenoop;
+var parse_SerToCrt = parsenoop;
+var parse_AxesUsed = parsenoop;
+var parse_SBaseRef = parsenoop;
+var parse_SerParent = parsenoop;
+var parse_SerAuxTrend = parsenoop;
+var parse_IFmtRecord = parsenoop;
+var parse_Pos = parsenoop;
+var parse_AlRuns = parsenoop;
+var parse_BRAI = parsenoop;
+var parse_SerAuxErrBar = parsenoop;
+var parse_SerFmt = parsenoop;
+var parse_Chart3DBarShape = parsenoop;
+var parse_Fbi = parsenoop;
+var parse_BopPop = parsenoop;
+var parse_AxcExt = parsenoop;
+var parse_Dat = parsenoop;
+var parse_PlotGrowth = parsenoop;
+var parse_SIIndex = parsenoop;
+var parse_GelFrame = parsenoop;
+var parse_BopPopCustom = parsenoop;
+var parse_Fbi2 = parsenoop;
+
+/* --- Specific to versions before BIFF8 --- */
+function parse_BIFF5String(blob) {
+	var len = blob.read_shift(1);
+	return blob.read_shift(len, 'sbcs-cont');
+}
+
+/* BIFF2_??? where ??? is the name from [XLS] */
+function parse_BIFF2STR(blob, length, opts) {
+	var cell = parse_XLSCell(blob, 6);
+	++blob.l;
+	var str = parse_XLUnicodeString2(blob, length-7, opts);
+	cell.val = str;
+	return cell;
+}
+
+function parse_BIFF2NUM(blob, length, opts) {
+	var cell = parse_XLSCell(blob, 6);
+	++blob.l;
+	var num = parse_Xnum(blob, 8);
+	cell.val = num;
+	return cell;
+}
+
+/* 18.4.1 charset to codepage mapping */
+var CS2CP = {
+	0:    1252, /* ANSI */
+	1:   65001, /* DEFAULT */
+	2:   65001, /* SYMBOL */
+	77:  10000, /* MAC */
+	128:   932, /* SHIFTJIS */
+	129:   949, /* HANGUL */
+	130:  1361, /* JOHAB */
+	134:   936, /* GB2312 */
+	136:   950, /* CHINESEBIG5 */
+	161:  1253, /* GREEK */
+	162:  1254, /* TURKISH */
+	163:  1258, /* VIETNAMESE */
+	177:  1255, /* HEBREW */
+	178:  1256, /* ARABIC */
+	186:  1257, /* BALTIC */
+	204:  1251, /* RUSSIAN */
+	222:   874, /* THAI */
+	238:  1250, /* EASTEUROPE */
+	255:  1252, /* OEM */
+	69:   6969  /* MISC */
+};
+
+/* Parse a list of <r> tags */
+var parse_rs = (function parse_rs_factory() {
+	var tregex = matchtag("t"), rpregex = matchtag("rPr"), rregex = /<r>/g, rend = /<\/r>/, nlregex = /\r\n/g;
+	/* 18.4.7 rPr CT_RPrElt */
+	var parse_rpr = function parse_rpr(rpr, intro, outro) {
+		var font = {}, cp = 65001;
+		var m = rpr.match(tagregex), i = 0;
+		if(m) for(;i!=m.length; ++i) {
+			var y = parsexmltag(m[i]);
+			switch(y[0]) {
+				/* 18.8.12 condense CT_BooleanProperty */
+				/* ** not required . */
+				case '<condense': break;
+				/* 18.8.17 extend CT_BooleanProperty */
+				/* ** not required . */
+				case '<extend': break;
+				/* 18.8.36 shadow CT_BooleanProperty */
+				/* ** not required . */
+				case '<shadow':
+					/* falls through */
+				case '<shadow/>': break;
+
+				/* 18.4.1 charset CT_IntProperty TODO */
+				case '<charset':
+					if(y.val == '1') break;
+					cp = CS2CP[parseInt(y.val, 10)];
+					break;
+
+				/* 18.4.2 outline CT_BooleanProperty TODO */
+				case '<outline':
+					/* falls through */
+				case '<outline/>': break;
+
+				/* 18.4.5 rFont CT_FontName */
+				case '<rFont': font.name = y.val; break;
+
+				/* 18.4.11 sz CT_FontSize */
+				case '<sz': font.sz = y.val; break;
+
+				/* 18.4.10 strike CT_BooleanProperty */
+				case '<strike':
+					if(!y.val) break;
+					/* falls through */
+				case '<strike/>': font.strike = 1; break;
+				case '</strike>': break;
+
+				/* 18.4.13 u CT_UnderlineProperty */
+				case '<u':
+					if(!y.val) break;
+					/* falls through */
+				case '<u/>': font.u = 1; break;
+				case '</u>': break;
+
+				/* 18.8.2 b */
+				case '<b':
+					if(!y.val) break;
+					/* falls through */
+				case '<b/>': font.b = 1; break;
+				case '</b>': break;
+
+				/* 18.8.26 i */
+				case '<i':
+					if(!y.val) break;
+					/* falls through */
+				case '<i/>': font.i = 1; break;
+				case '</i>': break;
+
+				/* 18.3.1.15 color CT_Color TODO: tint, theme, auto, indexed */
+				case '<color':
+					if(y.rgb) font.color = y.rgb.substr(2,6);
+					break;
+
+				/* 18.8.18 family ST_FontFamily */
+				case '<family': font.family = y.val; break;
+
+				/* 18.4.14 vertAlign CT_VerticalAlignFontProperty TODO */
+				case '<vertAlign': break;
+
+				/* 18.8.35 scheme CT_FontScheme TODO */
+				case '<scheme': break;
+
+				default:
+					if(y[0].charCodeAt(1) !== 47) throw 'Unrecognized rich format ' + y[0];
+			}
+		}
+		/* TODO: These should be generated styles, not inline */
+		var style = [];
+		if(font.b) style.push("font-weight: bold;");
+		if(font.i) style.push("font-style: italic;");
+		intro.push('<span style="' + style.join("") + '">');
+		outro.push("</span>");
+		return cp;
+	};
+
+	/* 18.4.4 r CT_RElt */
+	function parse_r(r) {
+		var terms = [[],"",[]];
+		/* 18.4.12 t ST_Xstring */
+		var t = r.match(tregex), cp = 65001;
+		if(!isval(t)) return "";
+		terms[1] = t[1];
+
+		var rpr = r.match(rpregex);
+		if(isval(rpr)) cp = parse_rpr(rpr[1], terms[0], terms[2]);
+
+		return terms[0].join("") + terms[1].replace(nlregex,'<br/>') + terms[2].join("");
+	}
+	return function parse_rs(rs) {
+		return rs.replace(rregex,"").split(rend).map(parse_r).join("");
+	};
+})();
+
+/* 18.4.8 si CT_Rst */
+var sitregex = /<t[^>]*>([^<]*)<\/t>/g, sirregex = /<r>/;
+function parse_si(x, opts) {
+	var html = opts ? opts.cellHTML : true;
+	var z = {};
+	if(!x) return null;
+	var y;
+	/* 18.4.12 t ST_Xstring (Plaintext String) */
+	if(x.charCodeAt(1) === 116) {
+		z.t = utf8read(unescapexml(x.substr(x.indexOf(">")+1).split(/<\/t>/)[0]));
+		z.r = x;
+		if(html) z.h = z.t;
+	}
+	/* 18.4.4 r CT_RElt (Rich Text Run) */
+	else if((y = x.match(sirregex))) {
+		z.r = x;
+		z.t = utf8read(unescapexml(x.match(sitregex).join("").replace(tagregex,"")));
+		if(html) z.h = parse_rs(x);
+	}
+	/* 18.4.3 phoneticPr CT_PhoneticPr (TODO: needed for Asian support) */
+	/* 18.4.6 rPh CT_PhoneticRun (TODO: needed for Asian support) */
+	return z;
+}
+
+/* 18.4 Shared String Table */
+var sstr0 = /<sst([^>]*)>([\s\S]*)<\/sst>/;
+var sstr1 = /<(?:si|sstItem)>/g;
+var sstr2 = /<\/(?:si|sstItem)>/;
+function parse_sst_xml(data, opts) {
+	var s = [], ss;
+	/* 18.4.9 sst CT_Sst */
+	var sst = data.match(sstr0);
+	if(isval(sst)) {
+		ss = sst[2].replace(sstr1,"").split(sstr2);
+		for(var i = 0; i != ss.length; ++i) {
+			var o = parse_si(ss[i], opts);
+			if(o != null) s[s.length] = o;
+		}
+		sst = parsexmltag(sst[1]); s.Count = sst.count; s.Unique = sst.uniqueCount;
+	}
+	return s;
+}
+
+RELS.SST = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings";
+var straywsregex = /^\s|\s$|[\t\n\r]/;
+function write_sst_xml(sst, opts) {
+	if(!opts.bookSST) return "";
+	var o = [XML_HEADER];
+	o[o.length] = (writextag('sst', null, {
+		xmlns: XMLNS.main[0],
+		count: sst.Count,
+		uniqueCount: sst.Unique
+	}));
+	for(var i = 0; i != sst.length; ++i) { if(sst[i] == null) continue;
+		var s = sst[i];
+		var sitag = "<si>";
+		if(s.r) sitag += s.r;
+		else {
+			sitag += "<t";
+			if(s.t.match(straywsregex)) sitag += ' xml:space="preserve"';
+			sitag += ">" + escapexml(s.t) + "</t>";
+		}
+		sitag += "</si>";
+		o[o.length] = (sitag);
+	}
+	if(o.length>2){ o[o.length] = ('</sst>'); o[1]=o[1].replace("/>",">"); }
+	return o.join("");
+}
+/* [MS-XLSB] 2.4.219 BrtBeginSst */
+function parse_BrtBeginSst(data, length) {
+	return [data.read_shift(4), data.read_shift(4)];
+}
+
+/* [MS-XLSB] 2.1.7.45 Shared Strings */
+function parse_sst_bin(data, opts) {
+	var s = [];
+	var pass = false;
+	recordhopper(data, function hopper_sst(val, R, RT) {
+		switch(R.n) {
+			case 'BrtBeginSst': s.Count = val[0]; s.Unique = val[1]; break;
+			case 'BrtSSTItem': s.push(val); break;
+			case 'BrtEndSst': return true;
+			/* TODO: produce a test case with a future record */
+			case 'BrtFRTBegin': pass = true; break;
+			case 'BrtFRTEnd': pass = false; break;
+			default: if(!pass || opts.WTF) throw new Error("Unexpected record " + RT + " " + R.n);
+		}
+	});
+	return s;
+}
+
+function write_BrtBeginSst(sst, o) {
+	if(!o) o = new_buf(8);
+	o.write_shift(4, sst.Count);
+	o.write_shift(4, sst.Unique);
+	return o;
+}
+
+var write_BrtSSTItem = write_RichStr;
+
+function write_sst_bin(sst, opts) {
+	var ba = buf_array();
+	write_record(ba, "BrtBeginSst", write_BrtBeginSst(sst));
+	for(var i = 0; i < sst.length; ++i) write_record(ba, "BrtSSTItem", write_BrtSSTItem(sst[i]));
+	write_record(ba, "BrtEndSst");
+	return ba.end();
+}
+function _JS2ANSI(str) { if(typeof cptable !== 'undefined') return cptable.utils.encode(1252, str); return str.split("").map(function(x) { return x.charCodeAt(0); }); }
+
+/* [MS-OFFCRYPTO] 2.1.4 Version */
+function parse_Version(blob, length) {
+	var o = {};
+	o.Major = blob.read_shift(2);
+	o.Minor = blob.read_shift(2);
+	return o;
+}
+/* [MS-OFFCRYPTO] 2.3.2 Encryption Header */
+function parse_EncryptionHeader(blob, length) {
+	var o = {};
+	o.Flags = blob.read_shift(4);
+
+	// Check if SizeExtra is 0x00000000
+	var tmp = blob.read_shift(4);
+	if(tmp !== 0) throw 'Unrecognized SizeExtra: ' + tmp;
+
+	o.AlgID = blob.read_shift(4);
+	switch(o.AlgID) {
+		case 0: case 0x6801: case 0x660E: case 0x660F: case 0x6610: break;
+		default: throw 'Unrecognized encryption algorithm: ' + o.AlgID;
+	}
+	parsenoop(blob, length-12);
+	return o;
+}
+
+/* [MS-OFFCRYPTO] 2.3.3 Encryption Verifier */
+function parse_EncryptionVerifier(blob, length) {
+	return parsenoop(blob, length);
+}
+/* [MS-OFFCRYPTO] 2.3.5.1 RC4 CryptoAPI Encryption Header */
+function parse_RC4CryptoHeader(blob, length) {
+	var o = {};
+	var vers = o.EncryptionVersionInfo = parse_Version(blob, 4); length -= 4;
+	if(vers.Minor != 2) throw 'unrecognized minor version code: ' + vers.Minor;
+	if(vers.Major > 4 || vers.Major < 2) throw 'unrecognized major version code: ' + vers.Major;
+	o.Flags = blob.read_shift(4); length -= 4;
+	var sz = blob.read_shift(4); length -= 4;
+	o.EncryptionHeader = parse_EncryptionHeader(blob, sz); length -= sz;
+	o.EncryptionVerifier = parse_EncryptionVerifier(blob, length);
+	return o;
+}
+/* [MS-OFFCRYPTO] 2.3.6.1 RC4 Encryption Header */
+function parse_RC4Header(blob, length) {
+	var o = {};
+	var vers = o.EncryptionVersionInfo = parse_Version(blob, 4); length -= 4;
+	if(vers.Major != 1 || vers.Minor != 1) throw 'unrecognized version code ' + vers.Major + ' : ' + vers.Minor;
+	o.Salt = blob.read_shift(16);
+	o.EncryptedVerifier = blob.read_shift(16);
+	o.EncryptedVerifierHash = blob.read_shift(16);
+	return o;
+}
+
+/* [MS-OFFCRYPTO] 2.3.7.1 Binary Document Password Verifier Derivation */
+function crypto_CreatePasswordVerifier_Method1(Password) {
+	var Verifier = 0x0000, PasswordArray;
+	var PasswordDecoded = _JS2ANSI(Password);
+	var len = PasswordDecoded.length + 1, i, PasswordByte;
+	var Intermediate1, Intermediate2, Intermediate3;
+	PasswordArray = new_raw_buf(len);
+	PasswordArray[0] = PasswordDecoded.length;
+	for(i = 1; i != len; ++i) PasswordArray[i] = PasswordDecoded[i-1];
+	for(i = len-1; i >= 0; --i) {
+		PasswordByte = PasswordArray[i];
+		Intermediate1 = ((Verifier & 0x4000) === 0x0000) ? 0 : 1;
+		Intermediate2 = (Verifier << 1) & 0x7FFF;
+		Intermediate3 = Intermediate1 | Intermediate2;
+		Verifier = Intermediate3 ^ PasswordByte;
+	}
+	return Verifier ^ 0xCE4B;
+}
+
+/* [MS-OFFCRYPTO] 2.3.7.2 Binary Document XOR Array Initialization */
+var crypto_CreateXorArray_Method1 = (function() {
+	var PadArray = [0xBB, 0xFF, 0xFF, 0xBA, 0xFF, 0xFF, 0xB9, 0x80, 0x00, 0xBE, 0x0F, 0x00, 0xBF, 0x0F, 0x00];
+	var InitialCode = [0xE1F0, 0x1D0F, 0xCC9C, 0x84C0, 0x110C, 0x0E10, 0xF1CE, 0x313E, 0x1872, 0xE139, 0xD40F, 0x84F9, 0x280C, 0xA96A, 0x4EC3];
+	var XorMatrix = [0xAEFC, 0x4DD9, 0x9BB2, 0x2745, 0x4E8A, 0x9D14, 0x2A09, 0x7B61, 0xF6C2, 0xFDA5, 0xEB6B, 0xC6F7, 0x9DCF, 0x2BBF, 0x4563, 0x8AC6, 0x05AD, 0x0B5A, 0x16B4, 0x2D68, 0x5AD0, 0x0375, 0x06EA, 0x0DD4, 0x1BA8, 0x3750, 0x6EA0, 0xDD40, 0xD849, 0xA0B3, 0x5147, 0xA28E, 0x553D, 0xAA7A, 0x44D5, 0x6F45, 0xDE8A, 0xAD35, 0x4A4B, 0x9496, 0x390D, 0x721A, 0xEB23, 0xC667, 0x9CEF, 0x29FF, 0x53FE, 0xA7FC, 0x5FD9, 0x47D3, 0x8FA6, 0x0F6D, 0x1EDA, 0x3DB4, 0x7B68, 0xF6D0, 0xB861, 0x60E3, 0xC1C6, 0x93AD, 0x377B, 0x6EF6, 0xDDEC, 0x45A0, 0x8B40, 0x06A1, 0x0D42, 0x1A84, 0x3508, 0x6A10, 0xAA51, 0x4483, 0x8906, 0x022D, 0x045A, 0x08B4, 0x1168, 0x76B4, 0xED68, 0xCAF1, 0x85C3, 0x1BA7, 0x374E, 0x6E9C, 0x3730, 0x6E60, 0xDCC0, 0xA9A1, 0x4363, 0x86C6, 0x1DAD, 0x3331, 0x6662, 0xCCC4, 0x89A9, 0x0373, 0x06E6, 0x0DCC, 0x1021, 0x2042, 0x4084, 0x8108, 0x1231, 0x2462, 0x48C4];
+	var Ror = function(Byte) { return ((Byte/2) | (Byte*128)) & 0xFF; };
+	var XorRor = function(byte1, byte2) { return Ror(byte1 ^ byte2); };
+	var CreateXorKey_Method1 = function(Password) {
+		var XorKey = InitialCode[Password.length - 1];
+		var CurrentElement = 0x68;
+		for(var i = Password.length-1; i >= 0; --i) {
+			var Char = Password[i];
+			for(var j = 0; j != 7; ++j) {
+				if(Char & 0x40) XorKey ^= XorMatrix[CurrentElement];
+				Char *= 2; --CurrentElement;
+			}
+		}
+		return XorKey;
+	};
+	return function(password) {
+		var Password = _JS2ANSI(password);
+		var XorKey = CreateXorKey_Method1(Password);
+		var Index = Password.length;
+		var ObfuscationArray = new_raw_buf(16);
+		for(var i = 0; i != 16; ++i) ObfuscationArray[i] = 0x00;
+		var Temp, PasswordLastChar, PadIndex;
+		if((Index & 1) === 1) {
+			Temp = XorKey >> 8;
+			ObfuscationArray[Index] = XorRor(PadArray[0], Temp);
+			--Index;
+			Temp = XorKey & 0xFF;
+			PasswordLastChar = Password[Password.length - 1];
+			ObfuscationArray[Index] = XorRor(PasswordLastChar, Temp);
+		}
+		while(Index > 0) {
+			--Index;
+			Temp = XorKey >> 8;
+			ObfuscationArray[Index] = XorRor(Password[Index], Temp);
+			--Index;
+			Temp = XorKey & 0xFF;
+			ObfuscationArray[Index] = XorRor(Password[Index], Temp);
+		}
+		Index = 15;
+		PadIndex = 15 - Password.length;
+		while(PadIndex > 0) {
+			Temp = XorKey >> 8;
+			ObfuscationArray[Index] = XorRor(PadArray[PadIndex], Temp);
+			--Index;
+			--PadIndex;
+			Temp = XorKey & 0xFF;
+			ObfuscationArray[Index] = XorRor(Password[Index], Temp);
+			--Index;
+			--PadIndex;
+		}
+		return ObfuscationArray;
+	};
+})();
+
+/* [MS-OFFCRYPTO] 2.3.7.3 Binary Document XOR Data Transformation Method 1 */
+var crypto_DecryptData_Method1 = function(password, Data, XorArrayIndex, XorArray, O) {
+	/* If XorArray is set, use it; if O is not set, make changes in-place */
+	if(!O) O = Data;
+	if(!XorArray) XorArray = crypto_CreateXorArray_Method1(password);
+	var Index, Value;
+	for(Index = 0; Index != Data.length; ++Index) {
+		Value = Data[Index];
+		Value ^= XorArray[XorArrayIndex];
+		Value = ((Value>>5) | (Value<<3)) & 0xFF;
+		O[Index] = Value;
+		++XorArrayIndex;
+	}
+	return [O, XorArrayIndex, XorArray];
+};
+
+var crypto_MakeXorDecryptor = function(password) {
+	var XorArrayIndex = 0, XorArray = crypto_CreateXorArray_Method1(password);
+	return function(Data) {
+		var O = crypto_DecryptData_Method1(null, Data, XorArrayIndex, XorArray);
+		XorArrayIndex = O[1];
+		return O[0];
+	};
+};
+
+/* 2.5.343 */
+function parse_XORObfuscation(blob, length, opts, out) {
+	var o = { key: parseuint16(blob), verificationBytes: parseuint16(blob) };
+	if(opts.password) o.verifier = crypto_CreatePasswordVerifier_Method1(opts.password);
+	out.valid = o.verificationBytes === o.verifier;
+	if(out.valid) out.insitu_decrypt = crypto_MakeXorDecryptor(opts.password);
+	return o;
+}
+
+/* 2.4.117 */
+function parse_FilePassHeader(blob, length, oo) {
+	var o = oo || {}; o.Info = blob.read_shift(2); blob.l -= 2;
+	if(o.Info === 1) o.Data = parse_RC4Header(blob, length);
+	else o.Data = parse_RC4CryptoHeader(blob, length);
+	return o;
+}
+function parse_FilePass(blob, length, opts) {
+	var o = { Type: blob.read_shift(2) }; /* wEncryptionType */
+	if(o.Type) parse_FilePassHeader(blob, length-2, o);
+	else parse_XORObfuscation(blob, length-2, opts, o);
+	return o;
+}
+
+
+function hex2RGB(h) {
+	var o = h.substr(h[0]==="#"?1:0,6);
+	return [parseInt(o.substr(0,2),16),parseInt(o.substr(2,2),16),parseInt(o.substr(4,2),16)];
+}
+function rgb2Hex(rgb) {
+	for(var i=0,o=1; i!=3; ++i) o = o*256 + (rgb[i]>255?255:rgb[i]<0?0:rgb[i]);
+	return o.toString(16).toUpperCase().substr(1);
+}
+
+function rgb2HSL(rgb) {
+	var R = rgb[0]/255, G = rgb[1]/255, B=rgb[2]/255;
+	var M = Math.max(R, G, B), m = Math.min(R, G, B), C = M - m;
+	if(C === 0) return [0, 0, R];
+
+	var H6 = 0, S = 0, L2 = (M + m);
+	S = C / (L2 > 1 ? 2 - L2 : L2);
+	switch(M){
+		case R: H6 = ((G - B) / C + 6)%6; break;
+		case G: H6 = ((B - R) / C + 2); break;
+		case B: H6 = ((R - G) / C + 4); break;
+	}
+	return [H6 / 6, S, L2 / 2];
+}
+
+function hsl2RGB(hsl){
+	var H = hsl[0], S = hsl[1], L = hsl[2];
+	var C = S * 2 * (L < 0.5 ? L : 1 - L), m = L - C/2;
+	var rgb = [m,m,m], h6 = 6*H;
+
+	var X;
+	if(S !== 0) switch(h6|0) {
+		case 0: case 6: X = C * h6; rgb[0] += C; rgb[1] += X; break;
+		case 1: X = C * (2 - h6);   rgb[0] += X; rgb[1] += C; break;
+		case 2: X = C * (h6 - 2);   rgb[1] += C; rgb[2] += X; break;
+		case 3: X = C * (4 - h6);   rgb[1] += X; rgb[2] += C; break;
+		case 4: X = C * (h6 - 4);   rgb[2] += C; rgb[0] += X; break;
+		case 5: X = C * (6 - h6);   rgb[2] += X; rgb[0] += C; break;
+	}
+	for(var i = 0; i != 3; ++i) rgb[i] = Math.round(rgb[i]*255);
+	return rgb;
+}
+
+/* 18.8.3 bgColor tint algorithm */
+function rgb_tint(hex, tint) {
+	if(tint == 0) return hex;
+	var hsl = rgb2HSL(hex2RGB(hex));
+	if (tint < 0) hsl[2] = hsl[2] * (1 + tint);
+	else hsl[2] = 1 - (1 - hsl[2]) * (1 - tint);
+  var rev =rgb2Hex(hsl2RGB(hsl))
+	return rev;
+}
+
+/* 18.3.1.13 width calculations */
+var DEF_MDW = 7, MAX_MDW = 15, MIN_MDW = 1, MDW = DEF_MDW;
+function width2px(width) { return (( width + ((128/MDW)|0)/256 )* MDW )|0; }
+function px2char(px) { return (((px - 5)/MDW * 100 + 0.5)|0)/100; }
+function char2width(chr) { return (((chr * MDW + 5)/MDW*256)|0)/256; }
+function cycle_width(collw) { return char2width(px2char(width2px(collw))); }
+function find_mdw(collw, coll) {
+	if(cycle_width(collw) != collw) {
+		for(MDW=DEF_MDW; MDW>MIN_MDW; --MDW) if(cycle_width(collw) === collw) break;
+		if(MDW === MIN_MDW) for(MDW=DEF_MDW+1; MDW<MAX_MDW; ++MDW) if(cycle_width(collw) === collw) break;
+		if(MDW === MAX_MDW) MDW = DEF_MDW;
+	}
+}
+
+/* [MS-EXSPXML3] 2.4.54 ST_enmPattern */
+var XLMLPatternTypeMap = {
+	"None": "none",
+	"Solid": "solid",
+	"Gray50": "mediumGray",
+	"Gray75": "darkGray",
+	"Gray25": "lightGray",
+	"HorzStripe": "darkHorizontal",
+	"VertStripe": "darkVertical",
+	"ReverseDiagStripe": "darkDown",
+	"DiagStripe": "darkUp",
+	"DiagCross": "darkGrid",
+	"ThickDiagCross": "darkTrellis",
+	"ThinHorzStripe": "lightHorizontal",
+	"ThinVertStripe": "lightVertical",
+	"ThinReverseDiagStripe": "lightDown",
+	"ThinHorzCross": "lightGrid"
+};
+
+var styles = {}; // shared styles
+
+var themes = {}; // shared themes
+
+/* 18.8.21 fills CT_Fills */
+function parse_fills(t, opts) {
+  styles.Fills = [];
+  var fill = {};
+  t[0].match(tagregex).forEach(function (x) {
+    var y = parsexmltag(x);
+    switch (y[0]) {
+      case '<fills':
+      case '<fills>':
+      case '</fills>':
+        break;
+
+      /* 18.8.20 fill CT_Fill */
+      case '<fill>':
+        break;
+      case '</fill>':
+        styles.Fills.push(fill);
+        fill = {};
+        break;
+
+      /* 18.8.32 patternFill CT_PatternFill */
+      case '<patternFill':
+        if (y.patternType) fill.patternType = y.patternType;
+        break;
+      case '<patternFill/>':
+      case '</patternFill>':
+        break;
+
+      /* 18.8.3 bgColor CT_Color */
+      case '<bgColor':
+        if (!fill.bgColor) fill.bgColor = {};
+        if (y.indexed) fill.bgColor.indexed = parseInt(y.indexed, 10);
+        if (y.theme) fill.bgColor.theme = parseInt(y.theme, 10);
+        if (y.tint) fill.bgColor.tint = parseFloat(y.tint);
+
+
+        if (y.theme && themes.themeElements && themes.themeElements.clrScheme) {
+          fill.bgColor.rgb = rgb_tint(themes.themeElements.clrScheme[fill.bgColor.theme].rgb, fill.bgColor.tint || 0);
+          if (opts.WTF) fill.bgColor.raw_rgb = rgb_tint(themes.themeElements.clrScheme[fill.bgColor.theme].rgb,0);
+        }
+        /* Excel uses ARGB strings */
+        if (y.rgb) fill.bgColor.rgb = y.rgb;//.substring(y.rgb.length - 6);
+        break;
+      case '<bgColor/>':
+      case '</bgColor>':
+        break;
+
+      /* 18.8.19 fgColor CT_Color */
+      case '<fgColor':
+        if (!fill.fgColor) fill.fgColor = {};
+        if (y.theme) fill.fgColor.theme = parseInt(y.theme, 10);
+        if (y.tint) fill.fgColor.tint = parseFloat(y.tint);
+
+        if (y.theme && themes.themeElements && themes.themeElements.clrScheme) {
+          fill.fgColor.rgb = rgb_tint(themes.themeElements.clrScheme[fill.fgColor.theme].rgb, fill.fgColor.tint || 0);
+          if (opts.WTF) fill.fgColor.raw_rgb = rgb_tint(themes.themeElements.clrScheme[fill.fgColor.theme].rgb,0);
+        }
+
+        /* Excel uses ARGB strings */
+        if (y.rgb) fill.fgColor.rgb = y.rgb;//.substring(y.rgb.length - 6);
+        break;
+      case '<fgColor/>':
+      case '</fgColor>':
+        break;
+
+      default:
+        if (opts.WTF) throw 'unrecognized ' + y[0] + ' in fills';
+    }
+  });
+}
+
+function parse_fonts(t, opts) {
+  styles.Fonts = [];
+  var font = {};
+  t[0].match(tagregex).forEach(function (x) {
+    var y = parsexmltag(x);
+    switch (y[0]) {
+
+      case '<fonts':
+      case  '<fonts>':
+      case '</fonts>':
+        break;
+      case '<font':
+        break;
+      case '</font>':
+        styles.Fonts.push(font);
+        ;
+        font = {};
+        break;
+
+      case '<name':
+        if (y.val) font.name = y.val;
+        break;
+      case '<name/>':
+      case '</name>':
+        break;
+
+
+      case '<b/>':
+        font.bold = true;
+        break;
+      case '<u/>':
+        font.underline = true;
+        break;
+      case '<i/>':
+        font.italic = true;
+        break;
+      case '<strike/>':
+        font.strike = true;
+        break;
+      case '<outline/>':
+        font.outline = true;
+        break;
+      case '<shadow/>':
+        font.shadow = true;
+        break;
+
+
+      case '<sz':
+        if (y.val) font.sz = y.val;
+        break;
+      case '<sz/>':
+      case '</sz>':
+        break;
+
+      case '<vertAlign':
+        if (y.val) font.vertAlign = y.val;
+        break;
+      case '<vertAlign/>':
+      case '</vertAlign>':
+        break;
+
+
+      case '<color':
+        if (!font.color) font.color = {};
+        if (y.theme) font.color.theme = y.theme;
+        if (y.tint) font.color.tint = y.tint;
+        if (y.theme && themes.themeElements && themes.themeElements.clrScheme) {
+          font.color.rgb = rgb_tint(themes.themeElements.clrScheme[font.color.theme].rgb, font.color.tint || 0);
+        }
+        if (y.rgb) font.color.rgb = y.rgb;
+        break;
+      case '<color/>':
+      case '</color>':
+        break;
+    }
+  });
+}
+
+function parse_borders(t, opts) {
+  styles.Borders = [];
+  var border = {}, sub_border = {};
+  t[0].match(tagregex).forEach(function (x) {
+    var y = parsexmltag(x);
+    switch (y[0]) {
+      case '<borders':
+      case  '<borders>':
+      case '</borders>':
+        break;
+      case '<border':
+      case '<border>':
+        border = {};
+        if (y.diagonalUp) { border.diagonalUp = y.diagonalUp; }
+        if (y.diagonalDown) { border.diagonalDown = y.diagonalDown; }
+        styles.Borders.push(border);
+
+        break;
+        break;
+      case '</border>':
+        break;
+
+      case '<left':
+        sub_border = border.left = {};
+        if (y.style) {
+          sub_border.style = y.style;
+        }
+        break;
+      case '<right':
+        sub_border = border.right = {};
+        if (y.style) {
+          sub_border.style = y.style;
+        }
+        break;
+      case '<top':
+        sub_border = border.top = {};
+        if (y.style) {
+          sub_border.style = y.style;
+        }
+        break;
+      case '<bottom':
+        sub_border = border.bottom = {};
+        if (y.style) {
+          sub_border.style = y.style;
+        }
+        break;
+      case '<diagonal':
+        sub_border = border.diagonal = {};
+        if (y.style) {
+          sub_border.style = y.style;
+        }
+        break;
+
+      case '<color':
+        sub_border.color = {};
+        if (y.theme) sub_border.color.theme = y.theme;
+        if (y.theme && themes.themeElements && themes.themeElements.clrScheme) {
+          sub_border.color.rgb = rgb_tint(themes.themeElements.clrScheme[sub_border.color.theme].rgb, sub_border.color.tint || 0);
+        }
+
+        if (y.tint) sub_border.color.tint = y.tint;
+        if (y.rgb) sub_border.color.rgb = y.rgb;
+        if (y.auto) sub_border.color.auto = y.auto;
+        break;
+      case '<name/>':
+      case '</name>':
+        break;
+      default:
+        break;
+    }
+  });
+
+}
+
+/* 18.8.31 numFmts CT_NumFmts */
+function parse_numFmts(t, opts) {
+  styles.NumberFmt = [];
+  var k = keys(SSF._table);
+  for (var i = 0; i < k.length; ++i) styles.NumberFmt[k[i]] = SSF._table[k[i]];
+  var m = t[0].match(tagregex);
+  for (i = 0; i < m.length; ++i) {
+    var y = parsexmltag(m[i]);
+    switch (y[0]) {
+      case '<numFmts':
+      case '</numFmts>':
+      case '<numFmts/>':
+      case '<numFmts>':
+        break;
+      case '<numFmt':
+      {
+        var f = unescapexml(utf8read(y.formatCode)), j = parseInt(y.numFmtId, 10);
+        styles.NumberFmt[j] = f;
+        if (j > 0) SSF.load(f, j);
+      }
+        break;
+      default:
+        if (opts.WTF) throw 'unrecognized ' + y[0] + ' in numFmts';
+    }
+  }
+}
+
+function write_numFmts(NF, opts) {
+  var o = ["<numFmts>"];
+  [
+    [5, 8],
+    [23, 26],
+    [41, 44],
+    [63, 66],
+    [164, 392]
+  ].forEach(function (r) {
+    for (var i = r[0]; i <= r[1]; ++i) if (NF[i] !== undefined) o[o.length] = (writextag('numFmt', null, {numFmtId: i, formatCode: escapexml(NF[i])}));
+  });
+  if (o.length === 1) return "";
+  o[o.length] = ("</numFmts>");
+  o[0] = writextag('numFmts', null, { count: o.length - 2 }).replace("/>", ">");
+  return o.join("");
+}
+
+/* 18.8.10 cellXfs CT_CellXfs */
+function parse_cellXfs(t, opts) {
+  styles.CellXf = [];
+  var xf;
+  t[0].match(tagregex).forEach(function (x) {
+    var y = parsexmltag(x);
+    switch (y[0]) {
+      case '<cellXfs':
+      case '<cellXfs>':
+      case '<cellXfs/>':
+      case '</cellXfs>':
+        break;
+
+      /* 18.8.45 xf CT_Xf */
+      case '<xf':
+          xf = y;
+          delete xf[0];
+        delete y[0];
+        if (xf.numFmtId) xf.numFmtId = parseInt(xf.numFmtId, 10);
+        if (xf.fillId) xf.fillId = parseInt(xf.fillId, 10);
+        styles.CellXf.push(xf);
+        break;
+      case '</xf>':
+        break;
+
+      /* 18.8.1 alignment CT_CellAlignment */
+      case '<alignment':
+      case '<alignment/>':
+        var alignment = {}
+          if (y.vertical) { alignment.vertical = y.vertical;}
+          if (y.horizontal) { alignment.horizontal = y.horizontal;}
+          if (y.textRotation != undefined) { alignment.textRotation = y.textRotation; }
+          if (y.indent) { alignment.indent = y.indent; }
+          if (y.wrapText) { alignment.wrapText = y.wrapText; }
+          xf.alignment = alignment;
+
+        break;
+
+      /* 18.8.33 protection CT_CellProtection */
+      case '<protection':
+      case '</protection>':
+      case '<protection/>':
+        break;
+
+      case '<extLst':
+      case '</extLst>':
+        break;
+      case '<ext':
+        break;
+      default:
+        if (opts.WTF) throw 'unrecognized ' + y[0] + ' in cellXfs';
+    }
+  });
+}
+
+function write_cellXfs(cellXfs) {
+  var o = [];
+  o[o.length] = (writextag('cellXfs', null));
+  cellXfs.forEach(function (c) {
+    o[o.length] = (writextag('xf', null, c));
+  });
+  o[o.length] = ("</cellXfs>");
+  if (o.length === 2) return "";
+  o[0] = writextag('cellXfs', null, {count: o.length - 2}).replace("/>", ">");
+  return o.join("");
+}
+
+/* 18.8 Styles CT_Stylesheet*/
+var parse_sty_xml = (function make_pstyx() {
+  var numFmtRegex = /<numFmts([^>]*)>.*<\/numFmts>/;
+  var cellXfRegex = /<cellXfs([^>]*)>.*<\/cellXfs>/;
+  var fillsRegex = /<fills([^>]*)>.*<\/fills>/;
+  var bordersRegex = /<borders([^>]*)>.*<\/borders>/;
+
+  return function parse_sty_xml(data, opts) {
+    /* 18.8.39 styleSheet CT_Stylesheet */
+    var t;
+
+    /* numFmts CT_NumFmts ? */
+    if ((t = data.match(numFmtRegex))) parse_numFmts(t, opts);
+
+    /* fonts CT_Fonts ? */
+    if ((t = data.match(/<fonts([^>]*)>.*<\/fonts>/))) parse_fonts(t, opts)
+
+    /* fills CT_Fills */
+    if ((t = data.match(fillsRegex))) parse_fills(t, opts);
+
+    /* borders CT_Borders ? */
+    if ((t = data.match(bordersRegex))) parse_borders(t, opts);
+    /* cellStyleXfs CT_CellStyleXfs ? */
+
+    /* cellXfs CT_CellXfs ? */
+    if ((t = data.match(cellXfRegex))) parse_cellXfs(t, opts);
+
+    /* dxfs CT_Dxfs ? */
+    /* tableStyles CT_TableStyles ? */
+    /* colors CT_Colors ? */
+    /* extLst CT_ExtensionList ? */
+
+    return styles;
+  };
+})();
+
+var STYLES_XML_ROOT = writextag('styleSheet', null, {
+  'xmlns': XMLNS.main[0],
+  'xmlns:vt': XMLNS.vt
+});
+
+RELS.STY = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles";
+
+function write_sty_xml(wb, opts) {
+
+  if (typeof style_builder != 'undefined' && typeof 'require' != 'undefined') {
+    return style_builder.toXml();
+  }
+
+  var o = [XML_HEADER, STYLES_XML_ROOT], w;
+  if ((w = write_numFmts(wb.SSF)) != null) o[o.length] = w;
+  o[o.length] = ('<fonts count="1"><font><sz val="12"/><color theme="1"/><name val="Calibri"/><family val="2"/><scheme val="minor"/></font></fonts>');
+  o[o.length] = ('<fills count="2"><fill><patternFill patternType="none"/></fill><fill><patternFill patternType="gray125"/></fill></fills>');
+  o[o.length] = ('<borders count="1"><border><left/><right/><top/><bottom/><diagonal/></border></borders>');
+  o[o.length] = ('<cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0"/></cellStyleXfs>');
+  if ((w = write_cellXfs(opts.cellXfs))) o[o.length] = (w);
+  o[o.length] = ('<cellStyles count="1"><cellStyle name="Normal" xfId="0" builtinId="0"/></cellStyles>');
+  o[o.length] = ('<dxfs count="0"/>');
+  o[o.length] = ('<tableStyles count="0" defaultTableStyle="TableStyleMedium9" defaultPivotStyle="PivotStyleMedium4"/>');
+
+  if (o.length > 2) {
+    o[o.length] = ('</styleSheet>');
+    o[1] = o[1].replace("/>", ">");
+  }
+  return o.join("");
+}
+/* [MS-XLSB] 2.4.651 BrtFmt */
+function parse_BrtFmt(data, length) {
+	var ifmt = data.read_shift(2);
+	var stFmtCode = parse_XLWideString(data,length-2);
+	return [ifmt, stFmtCode];
+}
+
+/* [MS-XLSB] 2.4.653 BrtFont TODO */
+function parse_BrtFont(data, length) {
+	var out = {flags:{}};
+	out.dyHeight = data.read_shift(2);
+	out.grbit = parse_FontFlags(data, 2);
+	out.bls = data.read_shift(2);
+	out.sss = data.read_shift(2);
+	out.uls = data.read_shift(1);
+	out.bFamily = data.read_shift(1);
+	out.bCharSet = data.read_shift(1);
+	data.l++;
+	out.brtColor = parse_BrtColor(data, 8);
+	out.bFontScheme = data.read_shift(1);
+	out.name = parse_XLWideString(data, length - 21);
+
+	out.flags.Bold = out.bls === 0x02BC;
+	out.flags.Italic = out.grbit.fItalic;
+	out.flags.Strikeout = out.grbit.fStrikeout;
+	out.flags.Outline = out.grbit.fOutline;
+	out.flags.Shadow = out.grbit.fShadow;
+	out.flags.Condense = out.grbit.fCondense;
+	out.flags.Extend = out.grbit.fExtend;
+	out.flags.Sub = out.sss & 0x2;
+	out.flags.Sup = out.sss & 0x1;
+	return out;
+}
+
+/* [MS-XLSB] 2.4.816 BrtXF */
+function parse_BrtXF(data, length) {
+	var ixfeParent = data.read_shift(2);
+	var ifmt = data.read_shift(2);
+	parsenoop(data, length-4);
+	return {ixfe:ixfeParent, ifmt:ifmt };
+}
+
+/* [MS-XLSB] 2.1.7.50 Styles */
+function parse_sty_bin(data, opts) {
+	styles.NumberFmt = [];
+	for(var y in SSF._table) styles.NumberFmt[y] = SSF._table[y];
+
+	styles.CellXf = [];
+	var state = ""; /* TODO: this should be a stack */
+	var pass = false;
+	recordhopper(data, function hopper_sty(val, R, RT) {
+		switch(R.n) {
+			case 'BrtFmt':
+				styles.NumberFmt[val[0]] = val[1]; SSF.load(val[1], val[0]);
+				break;
+			case 'BrtFont': break; /* TODO */
+			case 'BrtKnownFonts': break; /* TODO */
+			case 'BrtFill': break; /* TODO */
+			case 'BrtBorder': break; /* TODO */
+			case 'BrtXF':
+				if(state === "CELLXFS") {
+					styles.CellXf.push(val);
+				}
+				break; /* TODO */
+			case 'BrtStyle': break; /* TODO */
+			case 'BrtDXF': break; /* TODO */
+			case 'BrtMRUColor': break; /* TODO */
+			case 'BrtIndexedColor': break; /* TODO */
+			case 'BrtBeginStyleSheet': break;
+			case 'BrtEndStyleSheet': break;
+			case 'BrtBeginTableStyle': break;
+			case 'BrtTableStyleElement': break;
+			case 'BrtEndTableStyle': break;
+			case 'BrtBeginFmts': state = "FMTS"; break;
+			case 'BrtEndFmts': state = ""; break;
+			case 'BrtBeginFonts': state = "FONTS"; break;
+			case 'BrtEndFonts': state = ""; break;
+			case 'BrtACBegin': state = "ACFONTS"; break;
+			case 'BrtACEnd': state = ""; break;
+			case 'BrtBeginFills': state = "FILLS"; break;
+			case 'BrtEndFills': state = ""; break;
+			case 'BrtBeginBorders': state = "BORDERS"; break;
+			case 'BrtEndBorders': state = ""; break;
+			case 'BrtBeginCellStyleXFs': state = "CELLSTYLEXFS"; break;
+			case 'BrtEndCellStyleXFs': state = ""; break;
+			case 'BrtBeginCellXFs': state = "CELLXFS"; break;
+			case 'BrtEndCellXFs': state = ""; break;
+			case 'BrtBeginStyles': state = "STYLES"; break;
+			case 'BrtEndStyles': state = ""; break;
+			case 'BrtBeginDXFs': state = "DXFS"; break;
+			case 'BrtEndDXFs': state = ""; break;
+			case 'BrtBeginTableStyles': state = "TABLESTYLES"; break;
+			case 'BrtEndTableStyles': state = ""; break;
+			case 'BrtBeginColorPalette': state = "COLORPALETTE"; break;
+			case 'BrtEndColorPalette': state = ""; break;
+			case 'BrtBeginIndexedColors': state = "INDEXEDCOLORS"; break;
+			case 'BrtEndIndexedColors': state = ""; break;
+			case 'BrtBeginMRUColors': state = "MRUCOLORS"; break;
+			case 'BrtEndMRUColors': state = ""; break;
+			case 'BrtFRTBegin': pass = true; break;
+			case 'BrtFRTEnd': pass = false; break;
+			case 'BrtBeginStyleSheetExt14': break;
+			case 'BrtBeginSlicerStyles': break;
+			case 'BrtEndSlicerStyles': break;
+			case 'BrtBeginTimelineStylesheetExt15': break;
+			case 'BrtEndTimelineStylesheetExt15': break;
+			case 'BrtBeginTimelineStyles': break;
+			case 'BrtEndTimelineStyles': break;
+			case 'BrtEndStyleSheetExt14': break;
+			default: if(!pass || opts.WTF) throw new Error("Unexpected record " + RT + " " + R.n);
+		}
+	});
+	return styles;
+}
+
+/* [MS-XLSB] 2.1.7.50 Styles */
+function write_sty_bin(data, opts) {
+	var ba = buf_array();
+	write_record(ba, "BrtBeginStyleSheet");
+	/* [FMTS] */
+	/* [FONTS] */
+	/* [FILLS] */
+	/* [BORDERS] */
+	/* CELLSTYLEXFS */
+	/* CELLXFS*/
+	/* STYLES */
+	/* DXFS */
+	/* TABLESTYLES */
+	/* [COLORPALETTE] */
+	/* FRTSTYLESHEET*/
+	write_record(ba, "BrtEndStyleSheet");
+	return ba.end();
+}
+RELS.THEME = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme";
+
+/* 20.1.6.2 clrScheme CT_ColorScheme */
+function parse_clrScheme(t, opts) {
+	themes.themeElements.clrScheme = [];
+	var color = {};
+	t[0].match(tagregex).forEach(function(x) {
+		var y = parsexmltag(x);
+		switch(y[0]) {
+			case '<a:clrScheme': case '</a:clrScheme>': break;
+
+			/* 20.1.2.3.32 srgbClr CT_SRgbColor */
+			case '<a:srgbClr': color.rgb = y.val; break;
+
+			/* 20.1.2.3.33 sysClr CT_SystemColor */
+			case '<a:sysClr': color.rgb = y.lastClr; break;
+
+			/* 20.1.4.1.9 dk1 (Dark 1) */
+			case '<a:dk1>':
+			case '</a:dk1>':
+			/* 20.1.4.1.10 dk2 (Dark 2) */
+			case '<a:dk2>':
+			case '</a:dk2>':
+			/* 20.1.4.1.22 lt1 (Light 1) */
+			case '<a:lt1>':
+			case '</a:lt1>':
+			/* 20.1.4.1.23 lt2 (Light 2) */
+			case '<a:lt2>':
+			case '</a:lt2>':
+			/* 20.1.4.1.1 accent1 (Accent 1) */
+			case '<a:accent1>':
+			case '</a:accent1>':
+			/* 20.1.4.1.2 accent2 (Accent 2) */
+			case '<a:accent2>':
+			case '</a:accent2>':
+			/* 20.1.4.1.3 accent3 (Accent 3) */
+			case '<a:accent3>':
+			case '</a:accent3>':
+			/* 20.1.4.1.4 accent4 (Accent 4) */
+			case '<a:accent4>':
+			case '</a:accent4>':
+			/* 20.1.4.1.5 accent5 (Accent 5) */
+			case '<a:accent5>':
+			case '</a:accent5>':
+			/* 20.1.4.1.6 accent6 (Accent 6) */
+			case '<a:accent6>':
+			case '</a:accent6>':
+			/* 20.1.4.1.19 hlink (Hyperlink) */
+			case '<a:hlink>':
+			case '</a:hlink>':
+			/* 20.1.4.1.15 folHlink (Followed Hyperlink) */
+			case '<a:folHlink>':
+			case '</a:folHlink>':
+				if (y[0][1] === '/') {
+					themes.themeElements.clrScheme.push(color);
+					color = {};
+				} else {
+					color.name = y[0].substring(3, y[0].length - 1);
+				}
+				break;
+
+			default: if(opts.WTF) throw 'unrecognized ' + y[0] + ' in clrScheme';
+		}
+	});
+}
+
+/* 20.1.4.1.18 fontScheme CT_FontScheme */
+function parse_fontScheme(t, opts) { }
+
+/* 20.1.4.1.15 fmtScheme CT_StyleMatrix */
+function parse_fmtScheme(t, opts) { }
+
+var clrsregex = /<a:clrScheme([^>]*)>[^\u2603]*<\/a:clrScheme>/;
+var fntsregex = /<a:fontScheme([^>]*)>[^\u2603]*<\/a:fontScheme>/;
+var fmtsregex = /<a:fmtScheme([^>]*)>[^\u2603]*<\/a:fmtScheme>/;
+
+/* 20.1.6.10 themeElements CT_BaseStyles */
+function parse_themeElements(data, opts) {
+	themes.themeElements = {};
+
+	var t;
+
+	[
+		/* clrScheme CT_ColorScheme */
+		['clrScheme', clrsregex, parse_clrScheme],
+		/* fontScheme CT_FontScheme */
+		['fontScheme', fntsregex, parse_fontScheme],
+		/* fmtScheme CT_StyleMatrix */
+		['fmtScheme', fmtsregex, parse_fmtScheme]
+	].forEach(function(m) {
+		if(!(t=data.match(m[1]))) throw m[0] + ' not found in themeElements';
+		m[2](t, opts);
+	});
+}
+
+var themeltregex = /<a:themeElements([^>]*)>[^\u2603]*<\/a:themeElements>/;
+
+/* 14.2.7 Theme Part */
+function parse_theme_xml(data, opts) {
+	/* 20.1.6.9 theme CT_OfficeStyleSheet */
+	if(!data || data.length === 0) return themes;
+
+	var t;
+
+	/* themeElements CT_BaseStyles */
+	if(!(t=data.match(themeltregex))) throw 'themeElements not found in theme';
+	parse_themeElements(t[0], opts);
+
+	return themes;
+}
+
+//function write_theme() { return '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n<a:theme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="Office Theme"><a:themeElements><a:clrScheme name="Office"><a:dk1><a:sysClr val="windowText" lastClr="000000"/></a:dk1><a:lt1><a:sysClr val="window" lastClr="FFFFFF"/></a:lt1><a:dk2><a:srgbClr val="1F497D"/></a:dk2><a:lt2><a:srgbClr val="EEECE1"/></a:lt2><a:accent1><a:srgbClr val="4F81BD"/></a:accent1><a:accent2><a:srgbClr val="C0504D"/></a:accent2><a:accent3><a:srgbClr val="9BBB59"/></a:accent3><a:accent4><a:srgbClr val="8064A2"/></a:accent4><a:accent5><a:srgbClr val="4BACC6"/></a:accent5><a:accent6><a:srgbClr val="F79646"/></a:accent6><a:hlink><a:srgbClr val="0000FF"/></a:hlink><a:folHlink><a:srgbClr val="800080"/></a:folHlink></a:clrScheme><a:fontScheme name="Office"><a:majorFont><a:latin typeface="Cambria"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Jpan" typeface="锛汲 锛般偞銈枫儍銈�"/><a:font script="Hang" typeface="毵戩潃 瓿犽敃"/><a:font script="Hans" typeface="瀹嬩綋"/><a:font script="Hant" typeface="鏂扮窗鏄庨珨"/><a:font script="Arab" typeface="Times New Roman"/><a:font script="Hebr" typeface="Times New Roman"/><a:font script="Thai" typeface="Tahoma"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="MoolBoran"/><a:font script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Times New Roman"/><a:font script="Uigh" typeface="Microsoft Uighur"/><a:font script="Geor" typeface="Sylfaen"/></a:majorFont><a:minorFont><a:latin typeface="Calibri"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Jpan" typeface="锛汲 锛般偞銈枫儍銈�"/><a:font script="Hang" typeface="毵戩潃 瓿犽敃"/><a:font script="Hans" typeface="瀹嬩綋"/><a:font script="Hant" typeface="鏂扮窗鏄庨珨"/><a:font script="Arab" typeface="Arial"/><a:font script="Hebr" typeface="Arial"/><a:font script="Thai" typeface="Tahoma"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="DaunPenh"/><a:font script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Arial"/><a:font script="Uigh" typeface="Microsoft Uighur"/><a:font script="Geor" typeface="Sylfaen"/></a:minorFont></a:fontScheme><a:fmtScheme name="Office"><a:fillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="50000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="35000"><a:schemeClr val="phClr"><a:tint val="37000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:tint val="15000"/><a:satMod val="350000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="16200000" scaled="1"/></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="100000"/><a:shade val="100000"/><a:satMod val="130000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:tint val="50000"/><a:shade val="100000"/><a:satMod val="350000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="16200000" scaled="0"/></a:gradFill></a:fillStyleLst><a:lnStyleLst><a:ln w="9525" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"><a:shade val="95000"/><a:satMod val="105000"/></a:schemeClr></a:solidFill><a:prstDash val="solid"/></a:ln><a:ln w="25400" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln><a:ln w="38100" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln></a:lnStyleLst><a:effectStyleLst><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="20000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="38000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw></a:effectLst><a:scene3d><a:camera prst="orthographicFront"><a:rot lat="0" lon="0" rev="0"/></a:camera><a:lightRig rig="threePt" dir="t"><a:rot lat="0" lon="0" rev="1200000"/></a:lightRig></a:scene3d><a:sp3d><a:bevelT w="63500" h="25400"/></a:sp3d></a:effectStyle></a:effectStyleLst><a:bgFillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="40000"/><a:satMod val="350000"/></a:schemeClr></a:gs><a:gs pos="40000"><a:schemeClr val="phClr"><a:tint val="45000"/><a:shade val="99000"/><a:satMod val="350000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="20000"/><a:satMod val="255000"/></a:schemeClr></a:gs></a:gsLst><a:path path="circle"><a:fillToRect l="50000" t="-80000" r="50000" b="180000"/></a:path></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="80000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="30000"/><a:satMod val="200000"/></a:schemeClr></a:gs></a:gsLst><a:path path="circle"><a:fillToRect l="50000" t="50000" r="50000" b="50000"/></a:path></a:gradFill></a:bgFillStyleLst></a:fmtScheme></a:themeElements><a:objectDefaults><a:spDef><a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx="1"><a:schemeClr val="accent1"/></a:lnRef><a:fillRef idx="3"><a:schemeClr val="accent1"/></a:fillRef><a:effectRef idx="2"><a:schemeClr val="accent1"/></a:effectRef><a:fontRef idx="minor"><a:schemeClr val="lt1"/></a:fontRef></a:style></a:spDef><a:lnDef><a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx="2"><a:schemeClr val="accent1"/></a:lnRef><a:fillRef idx="0"><a:schemeClr val="accent1"/></a:fillRef><a:effectRef idx="1"><a:schemeClr val="accent1"/></a:effectRef><a:fontRef idx="minor"><a:schemeClr val="tx1"/></a:fontRef></a:style></a:lnDef></a:objectDefaults><a:extraClrSchemeLst/></a:theme>'; }
+function write_theme(opts) {
+  if (opts.themeXml) { return opts.themeXml; }
+  return '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n<a:theme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="Office Theme"><a:themeElements><a:clrScheme name="Office"><a:dk1><a:sysClr val="windowText" lastClr="000000"/></a:dk1><a:lt1><a:sysClr val="window" lastClr="FFFFFF"/></a:lt1><a:dk2><a:srgbClr val="1F497D"/></a:dk2><a:lt2><a:srgbClr val="EEECE1"/></a:lt2><a:accent1><a:srgbClr val="4F81BD"/></a:accent1><a:accent2><a:srgbClr val="C0504D"/></a:accent2><a:accent3><a:srgbClr val="9BBB59"/></a:accent3><a:accent4><a:srgbClr val="8064A2"/></a:accent4><a:accent5><a:srgbClr val="4BACC6"/></a:accent5><a:accent6><a:srgbClr val="F79646"/></a:accent6><a:hlink><a:srgbClr val="0000FF"/></a:hlink><a:folHlink><a:srgbClr val="800080"/></a:folHlink></a:clrScheme><a:fontScheme name="Office"><a:majorFont><a:latin typeface="Cambria"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Jpan" typeface="锛汲 锛般偞銈枫儍銈�"/><a:font script="Hang" typeface="毵戩潃 瓿犽敃"/><a:font script="Hans" typeface="瀹嬩綋"/><a:font script="Hant" typeface="鏂扮窗鏄庨珨"/><a:font script="Arab" typeface="Times New Roman"/><a:font script="Hebr" typeface="Times New Roman"/><a:font script="Thai" typeface="Tahoma"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="MoolBoran"/><a:font script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Times New Roman"/><a:font script="Uigh" typeface="Microsoft Uighur"/><a:font script="Geor" typeface="Sylfaen"/></a:majorFont><a:minorFont><a:latin typeface="Calibri"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Jpan" typeface="锛汲 锛般偞銈枫儍銈�"/><a:font script="Hang" typeface="毵戩潃 瓿犽敃"/><a:font script="Hans" typeface="瀹嬩綋"/><a:font script="Hant" typeface="鏂扮窗鏄庨珨"/><a:font script="Arab" typeface="Arial"/><a:font script="Hebr" typeface="Arial"/><a:font script="Thai" typeface="Tahoma"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="DaunPenh"/><a:font script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Arial"/><a:font script="Uigh" typeface="Microsoft Uighur"/><a:font script="Geor" typeface="Sylfaen"/></a:minorFont></a:fontScheme><a:fmtScheme name="Office"><a:fillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="50000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="35000"><a:schemeClr val="phClr"><a:tint val="37000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:tint val="15000"/><a:satMod val="350000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="16200000" scaled="1"/></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="100000"/><a:shade val="100000"/><a:satMod val="130000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:tint val="50000"/><a:shade val="100000"/><a:satMod val="350000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="16200000" scaled="0"/></a:gradFill></a:fillStyleLst><a:lnStyleLst><a:ln w="9525" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"><a:shade val="95000"/><a:satMod val="105000"/></a:schemeClr></a:solidFill><a:prstDash val="solid"/></a:ln><a:ln w="25400" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln><a:ln w="38100" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln></a:lnStyleLst><a:effectStyleLst><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="20000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="38000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw></a:effectLst><a:scene3d><a:camera prst="orthographicFront"><a:rot lat="0" lon="0" rev="0"/></a:camera><a:lightRig rig="threePt" dir="t"><a:rot lat="0" lon="0" rev="1200000"/></a:lightRig></a:scene3d><a:sp3d><a:bevelT w="63500" h="25400"/></a:sp3d></a:effectStyle></a:effectStyleLst><a:bgFillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="40000"/><a:satMod val="350000"/></a:schemeClr></a:gs><a:gs pos="40000"><a:schemeClr val="phClr"><a:tint val="45000"/><a:shade val="99000"/><a:satMod val="350000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="20000"/><a:satMod val="255000"/></a:schemeClr></a:gs></a:gsLst><a:path path="circle"><a:fillToRect l="50000" t="-80000" r="50000" b="180000"/></a:path></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="80000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="30000"/><a:satMod val="200000"/></a:schemeClr></a:gs></a:gsLst><a:path path="circle"><a:fillToRect l="50000" t="50000" r="50000" b="50000"/></a:path></a:gradFill></a:bgFillStyleLst></a:fmtScheme></a:themeElements><a:objectDefaults><a:spDef><a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx="1"><a:schemeClr val="accent1"/></a:lnRef><a:fillRef idx="3"><a:schemeClr val="accent1"/></a:fillRef><a:effectRef idx="2"><a:schemeClr val="accent1"/></a:effectRef><a:fontRef idx="minor"><a:schemeClr val="lt1"/></a:fontRef></a:style></a:spDef><a:lnDef><a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx="2"><a:schemeClr val="accent1"/></a:lnRef><a:fillRef idx="0"><a:schemeClr val="accent1"/></a:fillRef><a:effectRef idx="1"><a:schemeClr val="accent1"/></a:effectRef><a:fontRef idx="minor"><a:schemeClr val="tx1"/></a:fontRef></a:style></a:lnDef></a:objectDefaults><a:extraClrSchemeLst/></a:theme>';
+}/* [MS-XLS] 2.4.326 TODO: payload is a zip file */
+function parse_Theme(blob, length) {
+	var dwThemeVersion = blob.read_shift(4);
+	if(dwThemeVersion === 124226) return;
+	blob.l += length-4;
+}
+
+/* 2.5.49 */
+function parse_ColorTheme(blob, length) { return blob.read_shift(4); }
+
+/* 2.5.155 */
+function parse_FullColorExt(blob, length) {
+	var o = {};
+	o.xclrType = blob.read_shift(2);
+	o.nTintShade = blob.read_shift(2);
+	switch(o.xclrType) {
+		case 0: blob.l += 4; break;
+		case 1: o.xclrValue = parse_IcvXF(blob, 4); break;
+		case 2: o.xclrValue = parse_LongRGBA(blob, 4); break;
+		case 3: o.xclrValue = parse_ColorTheme(blob, 4); break;
+		case 4: blob.l += 4; break;
+	}
+	blob.l += 8;
+	return o;
+}
+
+/* 2.5.164 TODO: read 7 bits*/
+function parse_IcvXF(blob, length) {
+	return parsenoop(blob, length);
+}
+
+/* 2.5.280 */
+function parse_XFExtGradient(blob, length) {
+	return parsenoop(blob, length);
+}
+
+/* 2.5.108 */
+function parse_ExtProp(blob, length) {
+	var extType = blob.read_shift(2);
+	var cb = blob.read_shift(2);
+	var o = [extType];
+	switch(extType) {
+		case 0x04: case 0x05: case 0x07: case 0x08:
+		case 0x09: case 0x0A: case 0x0B: case 0x0D:
+			o[1] = parse_FullColorExt(blob, cb); break;
+		case 0x06: o[1] = parse_XFExtGradient(blob, cb); break;
+		case 0x0E: case 0x0F: o[1] = blob.read_shift(cb === 5 ? 1 : 2); break;
+		default: throw new Error("Unrecognized ExtProp type: " + extType + " " + cb);
+	}
+	return o;
+}
+
+/* 2.4.355 */
+function parse_XFExt(blob, length) {
+	var end = blob.l + length;
+	blob.l += 2;
+	var ixfe = blob.read_shift(2);
+	blob.l += 2;
+	var cexts = blob.read_shift(2);
+	var ext = [];
+	while(cexts-- > 0) ext.push(parse_ExtProp(blob, end-blob.l));
+	return {ixfe:ixfe, ext:ext};
+}
+
+/* xf is an XF, see parse_XFExt for xfext */
+function update_xfext(xf, xfext) {
+	xfext.forEach(function(xfe) {
+		switch(xfe[0]) { /* 2.5.108 extPropData */
+			case 0x04: break; /* foreground color */
+			case 0x05: break; /* background color */
+			case 0x07: case 0x08: case 0x09: case 0x0a: break;
+			case 0x0d: break; /* text color */
+			case 0x0e: break; /* font scheme */
+			default: throw "bafuq" + xfe[0].toString(16);
+		}
+	});
+}
+
+/* 18.6 Calculation Chain */
+function parse_cc_xml(data, opts) {
+	var d = [];
+	var l = 0, i = 1;
+	(data.match(tagregex)||[]).forEach(function(x) {
+		var y = parsexmltag(x);
+		switch(y[0]) {
+			case '<?xml': break;
+			/* 18.6.2  calcChain CT_CalcChain 1 */
+			case '<calcChain': case '<calcChain>': case '</calcChain>': break;
+			/* 18.6.1  c CT_CalcCell 1 */
+			case '<c': delete y[0]; if(y.i) i = y.i; else y.i = i; d.push(y); break;
+		}
+	});
+	return d;
+}
+
+function write_cc_xml(data, opts) { }
+/* [MS-XLSB] 2.6.4.1 */
+function parse_BrtCalcChainItem$(data, length) {
+	var out = {};
+	out.i = data.read_shift(4);
+	var cell = {};
+	cell.r = data.read_shift(4);
+	cell.c = data.read_shift(4);
+	out.r = encode_cell(cell);
+	var flags = data.read_shift(1);
+	if(flags & 0x2) out.l = '1';
+	if(flags & 0x8) out.a = '1';
+	return out;
+}
+
+/* 18.6 Calculation Chain */
+function parse_cc_bin(data, opts) {
+	var out = [];
+	var pass = false;
+	recordhopper(data, function hopper_cc(val, R, RT) {
+		switch(R.n) {
+			case 'BrtCalcChainItem$': out.push(val); break;
+			case 'BrtBeginCalcChain$': break;
+			case 'BrtEndCalcChain$': break;
+			default: if(!pass || opts.WTF) throw new Error("Unexpected record " + RT + " " + R.n);
+		}
+	});
+	return out;
+}
+
+function write_cc_bin(data, opts) { }
+
+function parse_comments(zip, dirComments, sheets, sheetRels, opts) {
+	for(var i = 0; i != dirComments.length; ++i) {
+		var canonicalpath=dirComments[i];
+		var comments=parse_cmnt(getzipdata(zip, canonicalpath.replace(/^\//,''), true), canonicalpath, opts);
+		if(!comments || !comments.length) continue;
+		// find the sheets targeted by these comments
+		var sheetNames = keys(sheets);
+		for(var j = 0; j != sheetNames.length; ++j) {
+			var sheetName = sheetNames[j];
+			var rels = sheetRels[sheetName];
+			if(rels) {
+				var rel = rels[canonicalpath];
+				if(rel) insertCommentsIntoSheet(sheetName, sheets[sheetName], comments);
+			}
+		}
+	}
+}
+
+function insertCommentsIntoSheet(sheetName, sheet, comments) {
+	comments.forEach(function(comment) {
+		var cell = sheet[comment.ref];
+		if (!cell) {
+			cell = {};
+			sheet[comment.ref] = cell;
+			var range = safe_decode_range(sheet["!ref"]||"BDWGO1000001:A1");
+			var thisCell = decode_cell(comment.ref);
+			if(range.s.r > thisCell.r) range.s.r = thisCell.r;
+			if(range.e.r < thisCell.r) range.e.r = thisCell.r;
+			if(range.s.c > thisCell.c) range.s.c = thisCell.c;
+			if(range.e.c < thisCell.c) range.e.c = thisCell.c;
+			var encoded = encode_range(range);
+			if (encoded !== sheet["!ref"]) sheet["!ref"] = encoded;
+		}
+
+		if (!cell.c) cell.c = [];
+		var o = {a: comment.author, t: comment.t, r: comment.r};
+		if(comment.h) o.h = comment.h;
+		cell.c.push(o);
+	});
+}
+
+/* 18.7.3 CT_Comment */
+function parse_comments_xml(data, opts) {
+	if(data.match(/<(?:\w+:)?comments *\/>/)) return [];
+	var authors = [];
+	var commentList = [];
+	data.match(/<(?:\w+:)?authors>([^\u2603]*)<\/(?:\w+:)?authors>/)[1].split(/<\/\w*:?author>/).forEach(function(x) {
+		if(x === "" || x.trim() === "") return;
+		authors.push(x.match(/<(?:\w+:)?author[^>]*>(.*)/)[1]);
+	});
+	(data.match(/<(?:\w+:)?commentList>([^\u2603]*)<\/(?:\w+:)?commentList>/)||["",""])[1].split(/<\/\w*:?comment>/).forEach(function(x, index) {
+		if(x === "" || x.trim() === "") return;
+		var y = parsexmltag(x.match(/<(?:\w+:)?comment[^>]*>/)[0]);
+		var comment = { author: y.authorId && authors[y.authorId] ? authors[y.authorId] : undefined, ref: y.ref, guid: y.guid };
+		var cell = decode_cell(y.ref);
+		if(opts.sheetRows && opts.sheetRows <= cell.r) return;
+		var textMatch = x.match(/<text>([^\u2603]*)<\/text>/);
+		if (!textMatch || !textMatch[1]) return; // a comment may contain an empty text tag.
+		var rt = parse_si(textMatch[1]);
+		comment.r = rt.r;
+		comment.t = rt.t;
+		if(opts.cellHTML) comment.h = rt.h;
+		commentList.push(comment);
+	});
+	return commentList;
+}
+
+function write_comments_xml(data, opts) { }
+/* [MS-XLSB] 2.4.28 BrtBeginComment */
+function parse_BrtBeginComment(data, length) {
+	var out = {};
+	out.iauthor = data.read_shift(4);
+	var rfx = parse_UncheckedRfX(data, 16);
+	out.rfx = rfx.s;
+	out.ref = encode_cell(rfx.s);
+	data.l += 16; /*var guid = parse_GUID(data); */
+	return out;
+}
+
+/* [MS-XLSB] 2.4.324 BrtCommentAuthor */
+var parse_BrtCommentAuthor = parse_XLWideString;
+
+/* [MS-XLSB] 2.4.325 BrtCommentText */
+var parse_BrtCommentText = parse_RichStr;
+
+/* [MS-XLSB] 2.1.7.8 Comments */
+function parse_comments_bin(data, opts) {
+	var out = [];
+	var authors = [];
+	var c = {};
+	var pass = false;
+	recordhopper(data, function hopper_cmnt(val, R, RT) {
+		switch(R.n) {
+			case 'BrtCommentAuthor': authors.push(val); break;
+			case 'BrtBeginComment': c = val; break;
+			case 'BrtCommentText': c.t = val.t; c.h = val.h; c.r = val.r; break;
+			case 'BrtEndComment':
+				c.author = authors[c.iauthor];
+				delete c.iauthor;
+				if(opts.sheetRows && opts.sheetRows <= c.rfx.r) break;
+				delete c.rfx; out.push(c); break;
+			case 'BrtBeginComments': break;
+			case 'BrtEndComments': break;
+			case 'BrtBeginCommentAuthors': break;
+			case 'BrtEndCommentAuthors': break;
+			case 'BrtBeginCommentList': break;
+			case 'BrtEndCommentList': break;
+			default: if(!pass || opts.WTF) throw new Error("Unexpected record " + RT + " " + R.n);
+		}
+	});
+	return out;
+}
+
+function write_comments_bin(data, opts) { }
+/* TODO: it will be useful to parse the function str */
+var rc_to_a1 = (function(){
+	var rcregex = /(^|[^A-Za-z])R(\[?)(-?\d+|)\]?C(\[?)(-?\d+|)\]?/g;
+	var rcbase;
+	function rcfunc($$,$1,$2,$3,$4,$5) {
+		var R = $3.length>0?parseInt($3,10)|0:0, C = $5.length>0?parseInt($5,10)|0:0;
+		if(C<0 && $4.length === 0) C=0;
+		if($4.length > 0) C += rcbase.c;
+		if($2.length > 0) R += rcbase.r;
+		return $1 + encode_col(C) + encode_row(R);
+	}
+	return function rc_to_a1(fstr, base) {
+		rcbase = base;
+		return fstr.replace(rcregex, rcfunc);
+	};
+})();
+
+/* --- formula references point to MS-XLS --- */
+/* Small helpers */
+function parseread(l) { return function(blob, length) { blob.l+=l; return; }; }
+function parseread1(blob, length) { blob.l+=1; return; }
+
+/* Rgce Helpers */
+
+/* 2.5.51 */
+function parse_ColRelU(blob, length) {
+	var c = blob.read_shift(2);
+	return [c & 0x3FFF, (c >> 14) & 1, (c >> 15) & 1];
+}
+
+/* 2.5.198.105 */
+function parse_RgceArea(blob, length) {
+	var r=blob.read_shift(2), R=blob.read_shift(2);
+	var c=parse_ColRelU(blob, 2);
+	var C=parse_ColRelU(blob, 2);
+	return { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} };
+}
+
+/* 2.5.198.105 TODO */
+function parse_RgceAreaRel(blob, length) {
+	var r=blob.read_shift(2), R=blob.read_shift(2);
+	var c=parse_ColRelU(blob, 2);
+	var C=parse_ColRelU(blob, 2);
+	return { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} };
+}
+
+/* 2.5.198.109 */
+function parse_RgceLoc(blob, length) {
+	var r = blob.read_shift(2);
+	var c = parse_ColRelU(blob, 2);
+	return {r:r, c:c[0], cRel:c[1], rRel:c[2]};
+}
+
+/* 2.5.198.111 */
+function parse_RgceLocRel(blob, length) {
+	var r = blob.read_shift(2);
+	var cl = blob.read_shift(2);
+	var cRel = (cl & 0x8000) >> 15, rRel = (cl & 0x4000) >> 14;
+	cl &= 0x3FFF;
+	if(cRel !== 0) while(cl >= 0x100) cl -= 0x100;
+	return {r:r,c:cl,cRel:cRel,rRel:rRel};
+}
+
+/* Ptg Tokens */
+
+/* 2.5.198.27 */
+function parse_PtgArea(blob, length) {
+	var type = (blob[blob.l++] & 0x60) >> 5;
+	var area = parse_RgceArea(blob, 8);
+	return [type, area];
+}
+
+/* 2.5.198.28 */
+function parse_PtgArea3d(blob, length) {
+	var type = (blob[blob.l++] & 0x60) >> 5;
+	var ixti = blob.read_shift(2);
+	var area = parse_RgceArea(blob, 8);
+	return [type, ixti, area];
+}
+
+/* 2.5.198.29 */
+function parse_PtgAreaErr(blob, length) {
+	var type = (blob[blob.l++] & 0x60) >> 5;
+	blob.l += 8;
+	return [type];
+}
+/* 2.5.198.30 */
+function parse_PtgAreaErr3d(blob, length) {
+	var type = (blob[blob.l++] & 0x60) >> 5;
+	var ixti = blob.read_shift(2);
+	blob.l += 8;
+	return [type, ixti];
+}
+
+/* 2.5.198.31 */
+function parse_PtgAreaN(blob, length) {
+	var type = (blob[blob.l++] & 0x60) >> 5;
+	var area = parse_RgceAreaRel(blob, 8);
+	return [type, area];
+}
+
+/* 2.5.198.32 -- ignore this and look in PtgExtraArray for shape + values */
+function parse_PtgArray(blob, length) {
+	var type = (blob[blob.l++] & 0x60) >> 5;
+	blob.l += 7;
+	return [type];
+}
+
+/* 2.5.198.33 */
+function parse_PtgAttrBaxcel(blob, length) {
+	var bitSemi = blob[blob.l+1] & 0x01; /* 1 = volatile */
+	var bitBaxcel = 1;
+	blob.l += 4;
+	return [bitSemi, bitBaxcel];
+}
+
+/* 2.5.198.34 */
+function parse_PtgAttrChoose(blob, length) {
+	blob.l +=2;
+	var offset = blob.read_shift(2);
+	var o = [];
+	/* offset is 1 less than the number of elements */
+	for(var i = 0; i <= offset; ++i) o.push(blob.read_shift(2));
+	return o;
+}
+
+/* 2.5.198.35 */
+function parse_PtgAttrGoto(blob, length) {
+	var bitGoto = (blob[blob.l+1] & 0xFF) ? 1 : 0;
+	blob.l += 2;
+	return [bitGoto, blob.read_shift(2)];
+}
+
+/* 2.5.198.36 */
+function parse_PtgAttrIf(blob, length) {
+	var bitIf = (blob[blob.l+1] & 0xFF) ? 1 : 0;
+	blob.l += 2;
+	return [bitIf, blob.read_shift(2)];
+}
+
+/* 2.5.198.37 */
+function parse_PtgAttrSemi(blob, length) {
+	var bitSemi = (blob[blob.l+1] & 0xFF) ? 1 : 0;
+	blob.l += 4;
+	return [bitSemi];
+}
+
+/* 2.5.198.40 (used by PtgAttrSpace and PtgAttrSpaceSemi) */
+function parse_PtgAttrSpaceType(blob, length) {
+	var type = blob.read_shift(1), cch = blob.read_shift(1);
+	return [type, cch];
+}
+
+/* 2.5.198.38 */
+function parse_PtgAttrSpace(blob, length) {
+	blob.read_shift(2);
+	return parse_PtgAttrSpaceType(blob, 2);
+}
+
+/* 2.5.198.39 */
+function parse_PtgAttrSpaceSemi(blob, length) {
+	blob.read_shift(2);
+	return parse_PtgAttrSpaceType(blob, 2);
+}
+
+/* 2.5.198.84 TODO */
+function parse_PtgRef(blob, length) {
+	var ptg = blob[blob.l] & 0x1F;
+	var type = (blob[blob.l] & 0x60)>>5;
+	blob.l += 1;
+	var loc = parse_RgceLoc(blob,4);
+	return [type, loc];
+}
+
+/* 2.5.198.88 TODO */
+function parse_PtgRefN(blob, length) {
+	var ptg = blob[blob.l] & 0x1F;
+	var type = (blob[blob.l] & 0x60)>>5;
+	blob.l += 1;
+	var loc = parse_RgceLocRel(blob,4);
+	return [type, loc];
+}
+
+/* 2.5.198.85 TODO */
+function parse_PtgRef3d(blob, length) {
+	var ptg = blob[blob.l] & 0x1F;
+	var type = (blob[blob.l] & 0x60)>>5;
+	blob.l += 1;
+	var ixti = blob.read_shift(2); // XtiIndex
+	var loc = parse_RgceLoc(blob,4);
+	return [type, ixti, loc];
+}
+
+
+/* 2.5.198.62 TODO */
+function parse_PtgFunc(blob, length) {
+	var ptg = blob[blob.l] & 0x1F;
+	var type = (blob[blob.l] & 0x60)>>5;
+	blob.l += 1;
+	var iftab = blob.read_shift(2);
+	return [FtabArgc[iftab], Ftab[iftab]];
+}
+/* 2.5.198.63 TODO */
+function parse_PtgFuncVar(blob, length) {
+	blob.l++;
+	var cparams = blob.read_shift(1), tab = parsetab(blob);
+	return [cparams, (tab[0] === 0 ? Ftab : Cetab)[tab[1]]];
+}
+
+function parsetab(blob, length) {
+	return [blob[blob.l+1]>>7, blob.read_shift(2) & 0x7FFF];
+}
+
+/* 2.5.198.41 */
+var parse_PtgAttrSum = parseread(4);
+/* 2.5.198.43 */
+var parse_PtgConcat = parseread1;
+
+/* 2.5.198.58 */
+function parse_PtgExp(blob, length) {
+	blob.l++;
+	var row = blob.read_shift(2);
+	var col = blob.read_shift(2);
+	return [row, col];
+}
+
+/* 2.5.198.57 */
+function parse_PtgErr(blob, length) { blob.l++; return BErr[blob.read_shift(1)]; }
+
+/* 2.5.198.66 TODO */
+function parse_PtgInt(blob, length) { blob.l++; return blob.read_shift(2); }
+
+/* 2.5.198.42 */
+function parse_PtgBool(blob, length) { blob.l++; return blob.read_shift(1)!==0;}
+
+/* 2.5.198.79 */
+function parse_PtgNum(blob, length) { blob.l++; return parse_Xnum(blob, 8); }
+
+/* 2.5.198.89 */
+function parse_PtgStr(blob, length) { blob.l++; return parse_ShortXLUnicodeString(blob); }
+
+/* 2.5.192.112 + 2.5.192.11{3,4,5,6,7} */
+function parse_SerAr(blob) {
+	var val = [];
+	switch((val[0] = blob.read_shift(1))) {
+		/* 2.5.192.113 */
+		case 0x04: /* SerBool -- boolean */
+			val[1] = parsebool(blob, 1) ? 'TRUE' : 'FALSE';
+			blob.l += 7; break;
+		/* 2.5.192.114 */
+		case 0x10: /* SerErr -- error */
+			val[1] = BErr[blob[blob.l]];
+			blob.l += 8; break;
+		/* 2.5.192.115 */
+		case 0x00: /* SerNil -- honestly, I'm not sure how to reproduce this */
+			blob.l += 8; break;
+		/* 2.5.192.116 */
+		case 0x01: /* SerNum -- Xnum */
+			val[1] = parse_Xnum(blob, 8); break;
+		/* 2.5.192.117 */
+		case 0x02: /* SerStr -- XLUnicodeString (<256 chars) */
+			val[1] = parse_XLUnicodeString(blob); break;
+		// default: throw "Bad SerAr: " + val[0]; /* Unreachable */
+	}
+	return val;
+}
+
+/* 2.5.198.61 */
+function parse_PtgExtraMem(blob, cce) {
+	var count = blob.read_shift(2);
+	var out = [];
+	for(var i = 0; i != count; ++i) out.push(parse_Ref8U(blob, 8));
+	return out;
+}
+
+/* 2.5.198.59 */
+function parse_PtgExtraArray(blob) {
+	var cols = 1 + blob.read_shift(1); //DColByteU
+	var rows = 1 + blob.read_shift(2); //DRw
+	for(var i = 0, o=[]; i != rows && (o[i] = []); ++i)
+		for(var j = 0; j != cols; ++j) o[i][j] = parse_SerAr(blob);
+	return o;
+}
+
+/* 2.5.198.76 */
+function parse_PtgName(blob, length) {
+	var type = (blob.read_shift(1) >>> 5) & 0x03;
+	var nameindex = blob.read_shift(4);
+	return [type, 0, nameindex];
+}
+
+/* 2.5.198.77 */
+function parse_PtgNameX(blob, length) {
+	var type = (blob.read_shift(1) >>> 5) & 0x03;
+	var ixti = blob.read_shift(2); // XtiIndex
+	var nameindex = blob.read_shift(4);
+	return [type, ixti, nameindex];
+}
+
+/* 2.5.198.70 */
+function parse_PtgMemArea(blob, length) {
+	var type = (blob.read_shift(1) >>> 5) & 0x03;
+	blob.l += 4;
+	var cce = blob.read_shift(2);
+	return [type, cce];
+}
+
+/* 2.5.198.72 */
+function parse_PtgMemFunc(blob, length) {
+	var type = (blob.read_shift(1) >>> 5) & 0x03;
+	var cce = blob.read_shift(2);
+	return [type, cce];
+}
+
+
+/* 2.5.198.86 */
+function parse_PtgRefErr(blob, length) {
+	var type = (blob.read_shift(1) >>> 5) & 0x03;
+	blob.l += 4;
+	return [type];
+}
+
+/* 2.5.198.26 */
+var parse_PtgAdd = parseread1;
+/* 2.5.198.45 */
+var parse_PtgDiv = parseread1;
+/* 2.5.198.56 */
+var parse_PtgEq = parseread1;
+/* 2.5.198.64 */
+var parse_PtgGe = parseread1;
+/* 2.5.198.65 */
+var parse_PtgGt = parseread1;
+/* 2.5.198.67 */
+var parse_PtgIsect = parseread1;
+/* 2.5.198.68 */
+var parse_PtgLe = parseread1;
+/* 2.5.198.69 */
+var parse_PtgLt = parseread1;
+/* 2.5.198.74 */
+var parse_PtgMissArg = parseread1;
+/* 2.5.198.75 */
+var parse_PtgMul = parseread1;
+/* 2.5.198.78 */
+var parse_PtgNe = parseread1;
+/* 2.5.198.80 */
+var parse_PtgParen = parseread1;
+/* 2.5.198.81 */
+var parse_PtgPercent = parseread1;
+/* 2.5.198.82 */
+var parse_PtgPower = parseread1;
+/* 2.5.198.83 */
+var parse_PtgRange = parseread1;
+/* 2.5.198.90 */
+var parse_PtgSub = parseread1;
+/* 2.5.198.93 */
+var parse_PtgUminus = parseread1;
+/* 2.5.198.94 */
+var parse_PtgUnion = parseread1;
+/* 2.5.198.95 */
+var parse_PtgUplus = parseread1;
+
+/* 2.5.198.71 */
+var parse_PtgMemErr = parsenoop;
+/* 2.5.198.73 */
+var parse_PtgMemNoMem = parsenoop;
+/* 2.5.198.87 */
+var parse_PtgRefErr3d = parsenoop;
+/* 2.5.198.92 */
+var parse_PtgTbl = parsenoop;
+
+/* 2.5.198.25 */
+var PtgTypes = {
+	0x01: { n:'PtgExp', f:parse_PtgExp },
+	0x02: { n:'PtgTbl', f:parse_PtgTbl },
+	0x03: { n:'PtgAdd', f:parse_PtgAdd },
+	0x04: { n:'PtgSub', f:parse_PtgSub },
+	0x05: { n:'PtgMul', f:parse_PtgMul },
+	0x06: { n:'PtgDiv', f:parse_PtgDiv },
+	0x07: { n:'PtgPower', f:parse_PtgPower },
+	0x08: { n:'PtgConcat', f:parse_PtgConcat },
+	0x09: { n:'PtgLt', f:parse_PtgLt },
+	0x0A: { n:'PtgLe', f:parse_PtgLe },
+	0x0B: { n:'PtgEq', f:parse_PtgEq },
+	0x0C: { n:'PtgGe', f:parse_PtgGe },
+	0x0D: { n:'PtgGt', f:parse_PtgGt },
+	0x0E: { n:'PtgNe', f:parse_PtgNe },
+	0x0F: { n:'PtgIsect', f:parse_PtgIsect },
+	0x10: { n:'PtgUnion', f:parse_PtgUnion },
+	0x11: { n:'PtgRange', f:parse_PtgRange },
+	0x12: { n:'PtgUplus', f:parse_PtgUplus },
+	0x13: { n:'PtgUminus', f:parse_PtgUminus },
+	0x14: { n:'PtgPercent', f:parse_PtgPercent },
+	0x15: { n:'PtgParen', f:parse_PtgParen },
+	0x16: { n:'PtgMissArg', f:parse_PtgMissArg },
+	0x17: { n:'PtgStr', f:parse_PtgStr },
+	0x1C: { n:'PtgErr', f:parse_PtgErr },
+	0x1D: { n:'PtgBool', f:parse_PtgBool },
+	0x1E: { n:'PtgInt', f:parse_PtgInt },
+	0x1F: { n:'PtgNum', f:parse_PtgNum },
+	0x20: { n:'PtgArray', f:parse_PtgArray },
+	0x21: { n:'PtgFunc', f:parse_PtgFunc },
+	0x22: { n:'PtgFuncVar', f:parse_PtgFuncVar },
+	0x23: { n:'PtgName', f:parse_PtgName },
+	0x24: { n:'PtgRef', f:parse_PtgRef },
+	0x25: { n:'PtgArea', f:parse_PtgArea },
+	0x26: { n:'PtgMemArea', f:parse_PtgMemArea },
+	0x27: { n:'PtgMemErr', f:parse_PtgMemErr },
+	0x28: { n:'PtgMemNoMem', f:parse_PtgMemNoMem },
+	0x29: { n:'PtgMemFunc', f:parse_PtgMemFunc },
+	0x2A: { n:'PtgRefErr', f:parse_PtgRefErr },
+	0x2B: { n:'PtgAreaErr', f:parse_PtgAreaErr },
+	0x2C: { n:'PtgRefN', f:parse_PtgRefN },
+	0x2D: { n:'PtgAreaN', f:parse_PtgAreaN },
+	0x39: { n:'PtgNameX', f:parse_PtgNameX },
+	0x3A: { n:'PtgRef3d', f:parse_PtgRef3d },
+	0x3B: { n:'PtgArea3d', f:parse_PtgArea3d },
+	0x3C: { n:'PtgRefErr3d', f:parse_PtgRefErr3d },
+	0x3D: { n:'PtgAreaErr3d', f:parse_PtgAreaErr3d },
+	0xFF: {}
+};
+/* These are duplicated in the PtgTypes table */
+var PtgDupes = {
+	0x40: 0x20, 0x60: 0x20,
+	0x41: 0x21, 0x61: 0x21,
+	0x42: 0x22, 0x62: 0x22,
+	0x43: 0x23, 0x63: 0x23,
+	0x44: 0x24, 0x64: 0x24,
+	0x45: 0x25, 0x65: 0x25,
+	0x46: 0x26, 0x66: 0x26,
+	0x47: 0x27, 0x67: 0x27,
+	0x48: 0x28, 0x68: 0x28,
+	0x49: 0x29, 0x69: 0x29,
+	0x4A: 0x2A, 0x6A: 0x2A,
+	0x4B: 0x2B, 0x6B: 0x2B,
+	0x4C: 0x2C, 0x6C: 0x2C,
+	0x4D: 0x2D, 0x6D: 0x2D,
+	0x59: 0x39, 0x79: 0x39,
+	0x5A: 0x3A, 0x7A: 0x3A,
+	0x5B: 0x3B, 0x7B: 0x3B,
+	0x5C: 0x3C, 0x7C: 0x3C,
+	0x5D: 0x3D, 0x7D: 0x3D
+};
+(function(){for(var y in PtgDupes) PtgTypes[y] = PtgTypes[PtgDupes[y]];})();
+
+var Ptg18 = {};
+var Ptg19 = {
+	0x01: { n:'PtgAttrSemi', f:parse_PtgAttrSemi },
+	0x02: { n:'PtgAttrIf', f:parse_PtgAttrIf },
+	0x04: { n:'PtgAttrChoose', f:parse_PtgAttrChoose },
+	0x08: { n:'PtgAttrGoto', f:parse_PtgAttrGoto },
+	0x10: { n:'PtgAttrSum', f:parse_PtgAttrSum },
+	0x20: { n:'PtgAttrBaxcel', f:parse_PtgAttrBaxcel },
+	0x40: { n:'PtgAttrSpace', f:parse_PtgAttrSpace },
+	0x41: { n:'PtgAttrSpaceSemi', f:parse_PtgAttrSpaceSemi },
+	0xFF: {}
+};
+
+/* 2.4.127 TODO */
+function parse_Formula(blob, length, opts) {
+	var cell = parse_XLSCell(blob, 6);
+	var val = parse_FormulaValue(blob,8);
+	var flags = blob.read_shift(1);
+	blob.read_shift(1);
+	var chn = blob.read_shift(4);
+	var cbf = "";
+	if(opts.biff === 5) blob.l += length-20;
+	else cbf = parse_XLSCellParsedFormula(blob, length-20, opts);
+	return {cell:cell, val:val[0], formula:cbf, shared: (flags >> 3) & 1, tt:val[1]};
+}
+
+/* 2.5.133 TODO: how to emit empty strings? */
+function parse_FormulaValue(blob) {
+	var b;
+	if(__readUInt16LE(blob,blob.l + 6) !== 0xFFFF) return [parse_Xnum(blob),'n'];
+	switch(blob[blob.l]) {
+		case 0x00: blob.l += 8; return ["String", 's'];
+		case 0x01: b = blob[blob.l+2] === 0x1; blob.l += 8; return [b,'b'];
+		case 0x02: b = blob[blob.l+2]; blob.l += 8; return [b,'e'];
+		case 0x03: blob.l += 8; return ["",'s'];
+	}
+}
+
+/* 2.5.198.103 */
+function parse_RgbExtra(blob, length, rgce, opts) {
+	if(opts.biff < 8) return parsenoop(blob, length);
+	var target = blob.l + length;
+	var o = [];
+	for(var i = 0; i !== rgce.length; ++i) {
+		switch(rgce[i][0]) {
+			case 'PtgArray': /* PtgArray -> PtgExtraArray */
+				rgce[i][1] = parse_PtgExtraArray(blob);
+				o.push(rgce[i][1]);
+				break;
+			case 'PtgMemArea': /* PtgMemArea -> PtgExtraMem */
+				rgce[i][2] = parse_PtgExtraMem(blob, rgce[i][1]);
+				o.push(rgce[i][2]);
+				break;
+			default: break;
+		}
+	}
+	length = target - blob.l;
+	if(length !== 0) o.push(parsenoop(blob, length));
+	return o;
+}
+
+/* 2.5.198.21 */
+function parse_NameParsedFormula(blob, length, opts, cce) {
+	var target = blob.l + length;
+	var rgce = parse_Rgce(blob, cce);
+	var rgcb;
+	if(target !== blob.l) rgcb = parse_RgbExtra(blob, target - blob.l, rgce, opts);
+	return [rgce, rgcb];
+}
+
+/* 2.5.198.3 TODO */
+function parse_XLSCellParsedFormula(blob, length, opts) {
+	var target = blob.l + length;
+	var rgcb, cce = blob.read_shift(2); // length of rgce
+	if(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];
+	var rgce = parse_Rgce(blob, cce);
+	if(length !== cce + 2) rgcb = parse_RgbExtra(blob, length - cce - 2, rgce, opts);
+	return [rgce, rgcb];
+}
+
+/* 2.5.198.118 TODO */
+function parse_SharedParsedFormula(blob, length, opts) {
+	var target = blob.l + length;
+	var rgcb, cce = blob.read_shift(2); // length of rgce
+	var rgce = parse_Rgce(blob, cce);
+	if(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];
+	if(length !== cce + 2) rgcb = parse_RgbExtra(blob, target - cce - 2, rgce, opts);
+	return [rgce, rgcb];
+}
+
+/* 2.5.198.1 TODO */
+function parse_ArrayParsedFormula(blob, length, opts, ref) {
+	var target = blob.l + length;
+	var rgcb, cce = blob.read_shift(2); // length of rgce
+	if(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];
+	var rgce = parse_Rgce(blob, cce);
+	if(length !== cce + 2) rgcb = parse_RgbExtra(blob, target - cce - 2, rgce, opts);
+	return [rgce, rgcb];
+}
+
+/* 2.5.198.104 */
+function parse_Rgce(blob, length) {
+	var target = blob.l + length;
+	var R, id, ptgs = [];
+	while(target != blob.l) {
+		length = target - blob.l;
+		id = blob[blob.l];
+		R = PtgTypes[id];
+		//console.log("ptg", id, R)
+		if(id === 0x18 || id === 0x19) {
+			id = blob[blob.l + 1];
+			R = (id === 0x18 ? Ptg18 : Ptg19)[id];
+		}
+		if(!R || !R.f) { ptgs.push(parsenoop(blob, length)); }
+		else { ptgs.push([R.n, R.f(blob, length)]); }
+	}
+	return ptgs;
+}
+
+function mapper(x) { return x.map(function f2(y) { return y[1];}).join(",");}
+
+/* 2.2.2 + Magic TODO */
+function stringify_formula(formula, range, cell, supbooks, opts) {
+	if(opts !== undefined && opts.biff === 5) return "BIFF5??";
+	var _range = range !== undefined ? range : {s:{c:0, r:0}};
+	var stack = [], e1, e2, type, c, ixti, nameidx, r;
+	if(!formula[0] || !formula[0][0]) return "";
+	//console.log("--",cell,formula[0])
+	for(var ff = 0, fflen = formula[0].length; ff < fflen; ++ff) {
+		var f = formula[0][ff];
+		//console.log("++",f, stack)
+		switch(f[0]) {
+		/* 2.2.2.1 Unary Operator Tokens */
+			/* 2.5.198.93 */
+			case 'PtgUminus': stack.push("-" + stack.pop()); break;
+			/* 2.5.198.95 */
+			case 'PtgUplus': stack.push("+" + stack.pop()); break;
+			/* 2.5.198.81 */
+			case 'PtgPercent': stack.push(stack.pop() + "%"); break;
+
+		/* 2.2.2.1 Binary Value Operator Token */
+			/* 2.5.198.26 */
+			case 'PtgAdd':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+"+"+e1);
+				break;
+			/* 2.5.198.90 */
+			case 'PtgSub':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+"-"+e1);
+				break;
+			/* 2.5.198.75 */
+			case 'PtgMul':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+"*"+e1);
+				break;
+			/* 2.5.198.45 */
+			case 'PtgDiv':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+"/"+e1);
+				break;
+			/* 2.5.198.82 */
+			case 'PtgPower':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+"^"+e1);
+				break;
+			/* 2.5.198.43 */
+			case 'PtgConcat':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+"&"+e1);
+				break;
+			/* 2.5.198.69 */
+			case 'PtgLt':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+"<"+e1);
+				break;
+			/* 2.5.198.68 */
+			case 'PtgLe':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+"<="+e1);
+				break;
+			/* 2.5.198.56 */
+			case 'PtgEq':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+"="+e1);
+				break;
+			/* 2.5.198.64 */
+			case 'PtgGe':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+">="+e1);
+				break;
+			/* 2.5.198.65 */
+			case 'PtgGt':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+">"+e1);
+				break;
+			/* 2.5.198.78 */
+			case 'PtgNe':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+"<>"+e1);
+				break;
+
+		/* 2.2.2.1 Binary Reference Operator Token */
+			/* 2.5.198.67 */
+			case 'PtgIsect':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+" "+e1);
+				break;
+			case 'PtgUnion':
+				e1 = stack.pop(); e2 = stack.pop();
+				stack.push(e2+","+e1);
+				break;
+			case 'PtgRange': break;
+
+		/* 2.2.2.3 Control Tokens "can be ignored" */
+			/* 2.5.198.34 */
+			case 'PtgAttrChoose': break;
+			/* 2.5.198.35 */
+			case 'PtgAttrGoto': break;
+			/* 2.5.198.36 */
+			case 'PtgAttrIf': break;
+
+
+			/* 2.5.198.84 */
+			case 'PtgRef':
+				type = f[1][0]; c = shift_cell_xls(decode_cell(encode_cell(f[1][1])), _range);
+				stack.push(encode_cell(c));
+				break;
+			/* 2.5.198.88 */
+			case 'PtgRefN':
+				type = f[1][0]; c = shift_cell_xls(decode_cell(encode_cell(f[1][1])), cell);
+				stack.push(encode_cell(c));
+				break;
+			case 'PtgRef3d': // TODO: lots of stuff
+				type = f[1][0]; ixti = f[1][1]; c = shift_cell_xls(f[1][2], _range);
+				stack.push(supbooks[1][ixti+1]+"!"+encode_cell(c));
+				break;
+
+		/* Function Call */
+			/* 2.5.198.62 */
+			case 'PtgFunc':
+			/* 2.5.198.63 */
+			case 'PtgFuncVar':
+				/* f[1] = [argc, func] */
+				var argc = f[1][0], func = f[1][1];
+				if(!argc) argc = 0;
+				var args = stack.slice(-argc);
+				stack.length -= argc;
+				if(func === 'User') func = args.shift();
+				stack.push(func + "(" + args.join(",") + ")");
+				break;
+
+			/* 2.5.198.42 */
+			case 'PtgBool': stack.push(f[1] ? "TRUE" : "FALSE"); break;
+			/* 2.5.198.66 */
+			case 'PtgInt': stack.push(f[1]); break;
+			/* 2.5.198.79 TODO: precision? */
+			case 'PtgNum': stack.push(String(f[1])); break;
+			/* 2.5.198.89 */
+			case 'PtgStr': stack.push('"' + f[1] + '"'); break;
+			/* 2.5.198.57 */
+			case 'PtgErr': stack.push(f[1]); break;
+			/* 2.5.198.27 TODO: fixed points */
+			case 'PtgArea':
+				type = f[1][0]; r = shift_range_xls(f[1][1], _range);
+				stack.push(encode_range(r));
+				break;
+			/* 2.5.198.28 */
+			case 'PtgArea3d': // TODO: lots of stuff
+				type = f[1][0]; ixti = f[1][1]; r = f[1][2];
+				stack.push(supbooks[1][ixti+1]+"!"+encode_range(r));
+				break;
+			/* 2.5.198.41 */
+			case 'PtgAttrSum':
+				stack.push("SUM(" + stack.pop() + ")");
+				break;
+
+		/* Expression Prefixes */
+			/* 2.5.198.37 */
+			case 'PtgAttrSemi': break;
+
+			/* 2.5.97.60 TODO: do something different for revisions */
+			case 'PtgName':
+				/* f[1] = type, 0, nameindex */
+				nameidx = f[1][2];
+				var lbl = supbooks[0][nameidx];
+				var name = lbl.Name;
+				if(name in XLSXFutureFunctions) name = XLSXFutureFunctions[name];
+				stack.push(name);
+				break;
+
+			/* 2.5.97.61 TODO: do something different for revisions */
+			case 'PtgNameX':
+				/* f[1] = type, ixti, nameindex */
+				var bookidx = f[1][1]; nameidx = f[1][2]; var externbook;
+				/* TODO: Properly handle missing values */
+				if(supbooks[bookidx+1]) externbook = supbooks[bookidx+1][nameidx];
+				else if(supbooks[bookidx-1]) externbook = supbooks[bookidx-1][nameidx];
+				if(!externbook) externbook = {body: "??NAMEX??"};
+				stack.push(externbook.body);
+				break;
+
+		/* 2.2.2.4 Display Tokens */
+			/* 2.5.198.80 */
+			case 'PtgParen': stack.push('(' + stack.pop() + ')'); break;
+
+			/* 2.5.198.86 */
+			case 'PtgRefErr': stack.push('#REF!'); break;
+
+		/* */
+			/* 2.5.198.58 TODO */
+			case 'PtgExp':
+				c = {c:f[1][1],r:f[1][0]};
+				var q = {c: cell.c, r:cell.r};
+				if(supbooks.sharedf[encode_cell(c)]) {
+					var parsedf = (supbooks.sharedf[encode_cell(c)]);
+					stack.push(stringify_formula(parsedf, _range, q, supbooks, opts));
+				}
+				else {
+					var fnd = false;
+					for(e1=0;e1!=supbooks.arrayf.length; ++e1) {
+						/* TODO: should be something like range_has */
+						e2 = supbooks.arrayf[e1];
+						if(c.c < e2[0].s.c || c.c > e2[0].e.c) continue;
+						if(c.r < e2[0].s.r || c.r > e2[0].e.r) continue;
+						stack.push(stringify_formula(e2[1], _range, q, supbooks, opts));
+					}
+					if(!fnd) stack.push(f[1]);
+				}
+				break;
+
+			/* 2.5.198.32 TODO */
+			case 'PtgArray':
+				stack.push("{" + f[1].map(mapper).join(";") + "}");
+				break;
+
+		/* 2.2.2.5 Mem Tokens */
+			/* 2.5.198.70 TODO: confirm this is a non-display */
+			case 'PtgMemArea':
+				//stack.push("(" + f[2].map(encode_range).join(",") + ")");
+				break;
+
+			/* 2.5.198.38 TODO */
+			case 'PtgAttrSpace': break;
+
+			/* 2.5.198.92 TODO */
+			case 'PtgTbl': break;
+
+			/* 2.5.198.71 */
+			case 'PtgMemErr': break;
+
+			/* 2.5.198.74 */
+			case 'PtgMissArg':
+				stack.push("");
+				break;
+
+			/* 2.5.198.29 TODO */
+			case 'PtgAreaErr': break;
+
+			/* 2.5.198.31 TODO */
+			case 'PtgAreaN': stack.push(""); break;
+
+			/* 2.5.198.87 TODO */
+			case 'PtgRefErr3d': break;
+
+			/* 2.5.198.72 TODO */
+			case 'PtgMemFunc': break;
+
+			default: throw 'Unrecognized Formula Token: ' + f;
+		}
+		//console.log("::",f, stack)
+	}
+	//console.log("--",stack);
+	return stack[0];
+}
+
+/* [MS-XLSB] 2.5.97.4 CellParsedFormula TODO: use similar logic to js-xls */
+function parse_XLSBCellParsedFormula(data, length) {
+	var cce = data.read_shift(4);
+	return parsenoop(data, length-4);
+}
+/* [MS-XLS] 2.5.198.44 */
+var PtgDataType = {
+	0x1: "REFERENCE", // reference to range
+	0x2: "VALUE", // single value
+	0x3: "ARRAY" // array of values
+};
+
+/* [MS-XLS] 2.5.198.4 */
+var Cetab = {
+	0x0000: 'BEEP',
+	0x0001: 'OPEN',
+	0x0002: 'OPEN.LINKS',
+	0x0003: 'CLOSE.ALL',
+	0x0004: 'SAVE',
+	0x0005: 'SAVE.AS',
+	0x0006: 'FILE.DELETE',
+	0x0007: 'PAGE.SETUP',
+	0x0008: 'PRINT',
+	0x0009: 'PRINTER.SETUP',
+	0x000A: 'QUIT',
+	0x000B: 'NEW.WINDOW',
+	0x000C: 'ARRANGE.ALL',
+	0x000D: 'WINDOW.SIZE',
+	0x000E: 'WINDOW.MOVE',
+	0x000F: 'FULL',
+	0x0010: 'CLOSE',
+	0x0011: 'RUN',
+	0x0016: 'SET.PRINT.AREA',
+	0x0017: 'SET.PRINT.TITLES',
+	0x0018: 'SET.PAGE.BREAK',
+	0x0019: 'REMOVE.PAGE.BREAK',
+	0x001A: 'FONT',
+	0x001B: 'DISPLAY',
+	0x001C: 'PROTECT.DOCUMENT',
+	0x001D: 'PRECISION',
+	0x001E: 'A1.R1C1',
+	0x001F: 'CALCULATE.NOW',
+	0x0020: 'CALCULATION',
+	0x0022: 'DATA.FIND',
+	0x0023: 'EXTRACT',
+	0x0024: 'DATA.DELETE',
+	0x0025: 'SET.DATABASE',
+	0x0026: 'SET.CRITERIA',
+	0x0027: 'SORT',
+	0x0028: 'DATA.SERIES',
+	0x0029: 'TABLE',
+	0x002A: 'FORMAT.NUMBER',
+	0x002B: 'ALIGNMENT',
+	0x002C: 'STYLE',
+	0x002D: 'BORDER',
+	0x002E: 'CELL.PROTECTION',
+	0x002F: 'COLUMN.WIDTH',
+	0x0030: 'UNDO',
+	0x0031: 'CUT',
+	0x0032: 'COPY',
+	0x0033: 'PASTE',
+	0x0034: 'CLEAR',
+	0x0035: 'PASTE.SPECIAL',
+	0x0036: 'EDIT.DELETE',
+	0x0037: 'INSERT',
+	0x0038: 'FILL.RIGHT',
+	0x0039: 'FILL.DOWN',
+	0x003D: 'DEFINE.NAME',
+	0x003E: 'CREATE.NAMES',
+	0x003F: 'FORMULA.GOTO',
+	0x0040: 'FORMULA.FIND',
+	0x0041: 'SELECT.LAST.CELL',
+	0x0042: 'SHOW.ACTIVE.CELL',
+	0x0043: 'GALLERY.AREA',
+	0x0044: 'GALLERY.BAR',
+	0x0045: 'GALLERY.COLUMN',
+	0x0046: 'GALLERY.LINE',
+	0x0047: 'GALLERY.PIE',
+	0x0048: 'GALLERY.SCATTER',
+	0x0049: 'COMBINATION',
+	0x004A: 'PREFERRED',
+	0x004B: 'ADD.OVERLAY',
+	0x004C: 'GRIDLINES',
+	0x004D: 'SET.PREFERRED',
+	0x004E: 'AXES',
+	0x004F: 'LEGEND',
+	0x0050: 'ATTACH.TEXT',
+	0x0051: 'ADD.ARROW',
+	0x0052: 'SELECT.CHART',
+	0x0053: 'SELECT.PLOT.AREA',
+	0x0054: 'PATTERNS',
+	0x0055: 'MAIN.CHART',
+	0x0056: 'OVERLAY',
+	0x0057: 'SCALE',
+	0x0058: 'FORMAT.LEGEND',
+	0x0059: 'FORMAT.TEXT',
+	0x005A: 'EDIT.REPEAT',
+	0x005B: 'PARSE',
+	0x005C: 'JUSTIFY',
+	0x005D: 'HIDE',
+	0x005E: 'UNHIDE',
+	0x005F: 'WORKSPACE',
+	0x0060: 'FORMULA',
+	0x0061: 'FORMULA.FILL',
+	0x0062: 'FORMULA.ARRAY',
+	0x0063: 'DATA.FIND.NEXT',
+	0x0064: 'DATA.FIND.PREV',
+	0x0065: 'FORMULA.FIND.NEXT',
+	0x0066: 'FORMULA.FIND.PREV',
+	0x0067: 'ACTIVATE',
+	0x0068: 'ACTIVATE.NEXT',
+	0x0069: 'ACTIVATE.PREV',
+	0x006A: 'UNLOCKED.NEXT',
+	0x006B: 'UNLOCKED.PREV',
+	0x006C: 'COPY.PICTURE',
+	0x006D: 'SELECT',
+	0x006E: 'DELETE.NAME',
+	0x006F: 'DELETE.FORMAT',
+	0x0070: 'VLINE',
+	0x0071: 'HLINE',
+	0x0072: 'VPAGE',
+	0x0073: 'HPAGE',
+	0x0074: 'VSCROLL',
+	0x0075: 'HSCROLL',
+	0x0076: 'ALERT',
+	0x0077: 'NEW',
+	0x0078: 'CANCEL.COPY',
+	0x0079: 'SHOW.CLIPBOARD',
+	0x007A: 'MESSAGE',
+	0x007C: 'PASTE.LINK',
+	0x007D: 'APP.ACTIVATE',
+	0x007E: 'DELETE.ARROW',
+	0x007F: 'ROW.HEIGHT',
+	0x0080: 'FORMAT.MOVE',
+	0x0081: 'FORMAT.SIZE',
+	0x0082: 'FORMULA.REPLACE',
+	0x0083: 'SEND.KEYS',
+	0x0084: 'SELECT.SPECIAL',
+	0x0085: 'APPLY.NAMES',
+	0x0086: 'REPLACE.FONT',
+	0x0087: 'FREEZE.PANES',
+	0x0088: 'SHOW.INFO',
+	0x0089: 'SPLIT',
+	0x008A: 'ON.WINDOW',
+	0x008B: 'ON.DATA',
+	0x008C: 'DISABLE.INPUT',
+	0x008E: 'OUTLINE',
+	0x008F: 'LIST.NAMES',
+	0x0090: 'FILE.CLOSE',
+	0x0091: 'SAVE.WORKBOOK',
+	0x0092: 'DATA.FORM',
+	0x0093: 'COPY.CHART',
+	0x0094: 'ON.TIME',
+	0x0095: 'WAIT',
+	0x0096: 'FORMAT.FONT',
+	0x0097: 'FILL.UP',
+	0x0098: 'FILL.LEFT',
+	0x0099: 'DELETE.OVERLAY',
+	0x009B: 'SHORT.MENUS',
+	0x009F: 'SET.UPDATE.STATUS',
+	0x00A1: 'COLOR.PALETTE',
+	0x00A2: 'DELETE.STYLE',
+	0x00A3: 'WINDOW.RESTORE',
+	0x00A4: 'WINDOW.MAXIMIZE',
+	0x00A6: 'CHANGE.LINK',
+	0x00A7: 'CALCULATE.DOCUMENT',
+	0x00A8: 'ON.KEY',
+	0x00A9: 'APP.RESTORE',
+	0x00AA: 'APP.MOVE',
+	0x00AB: 'APP.SIZE',
+	0x00AC: 'APP.MINIMIZE',
+	0x00AD: 'APP.MAXIMIZE',
+	0x00AE: 'BRING.TO.FRONT',
+	0x00AF: 'SEND.TO.BACK',
+	0x00B9: 'MAIN.CHART.TYPE',
+	0x00BA: 'OVERLAY.CHART.TYPE',
+	0x00BB: 'SELECT.END',
+	0x00BC: 'OPEN.MAIL',
+	0x00BD: 'SEND.MAIL',
+	0x00BE: 'STANDARD.FONT',
+	0x00BF: 'CONSOLIDATE',
+	0x00C0: 'SORT.SPECIAL',
+	0x00C1: 'GALLERY.3D.AREA',
+	0x00C2: 'GALLERY.3D.COLUMN',
+	0x00C3: 'GALLERY.3D.LINE',
+	0x00C4: 'GALLERY.3D.PIE',
+	0x00C5: 'VIEW.3D',
+	0x00C6: 'GOAL.SEEK',
+	0x00C7: 'WORKGROUP',
+	0x00C8: 'FILL.GROUP',
+	0x00C9: 'UPDATE.LINK',
+	0x00CA: 'PROMOTE',
+	0x00CB: 'DEMOTE',
+	0x00CC: 'SHOW.DETAIL',
+	0x00CE: 'UNGROUP',
+	0x00CF: 'OBJECT.PROPERTIES',
+	0x00D0: 'SAVE.NEW.OBJECT',
+	0x00D1: 'SHARE',
+	0x00D2: 'SHARE.NAME',
+	0x00D3: 'DUPLICATE',
+	0x00D4: 'APPLY.STYLE',
+	0x00D5: 'ASSIGN.TO.OBJECT',
+	0x00D6: 'OBJECT.PROTECTION',
+	0x00D7: 'HIDE.OBJECT',
+	0x00D8: 'SET.EXTRACT',
+	0x00D9: 'CREATE.PUBLISHER',
+	0x00DA: 'SUBSCRIBE.TO',
+	0x00DB: 'ATTRIBUTES',
+	0x00DC: 'SHOW.TOOLBAR',
+	0x00DE: 'PRINT.PREVIEW',
+	0x00DF: 'EDIT.COLOR',
+	0x00E0: 'SHOW.LEVELS',
+	0x00E1: 'FORMAT.MAIN',
+	0x00E2: 'FORMAT.OVERLAY',
+	0x00E3: 'ON.RECALC',
+	0x00E4: 'EDIT.SERIES',
+	0x00E5: 'DEFINE.STYLE',
+	0x00F0: 'LINE.PRINT',
+	0x00F3: 'ENTER.DATA',
+	0x00F9: 'GALLERY.RADAR',
+	0x00FA: 'MERGE.STYLES',
+	0x00FB: 'EDITION.OPTIONS',
+	0x00FC: 'PASTE.PICTURE',
+	0x00FD: 'PASTE.PICTURE.LINK',
+	0x00FE: 'SPELLING',
+	0x0100: 'ZOOM',
+	0x0103: 'INSERT.OBJECT',
+	0x0104: 'WINDOW.MINIMIZE',
+	0x0109: 'SOUND.NOTE',
+	0x010A: 'SOUND.PLAY',
+	0x010B: 'FORMAT.SHAPE',
+	0x010C: 'EXTEND.POLYGON',
+	0x010D: 'FORMAT.AUTO',
+	0x0110: 'GALLERY.3D.BAR',
+	0x0111: 'GALLERY.3D.SURFACE',
+	0x0112: 'FILL.AUTO',
+	0x0114: 'CUSTOMIZE.TOOLBAR',
+	0x0115: 'ADD.TOOL',
+	0x0116: 'EDIT.OBJECT',
+	0x0117: 'ON.DOUBLECLICK',
+	0x0118: 'ON.ENTRY',
+	0x0119: 'WORKBOOK.ADD',
+	0x011A: 'WORKBOOK.MOVE',
+	0x011B: 'WORKBOOK.COPY',
+	0x011C: 'WORKBOOK.OPTIONS',
+	0x011D: 'SAVE.WORKSPACE',
+	0x0120: 'CHART.WIZARD',
+	0x0121: 'DELETE.TOOL',
+	0x0122: 'MOVE.TOOL',
+	0x0123: 'WORKBOOK.SELECT',
+	0x0124: 'WORKBOOK.ACTIVATE',
+	0x0125: 'ASSIGN.TO.TOOL',
+	0x0127: 'COPY.TOOL',
+	0x0128: 'RESET.TOOL',
+	0x0129: 'CONSTRAIN.NUMERIC',
+	0x012A: 'PASTE.TOOL',
+	0x012E: 'WORKBOOK.NEW',
+	0x0131: 'SCENARIO.CELLS',
+	0x0132: 'SCENARIO.DELETE',
+	0x0133: 'SCENARIO.ADD',
+	0x0134: 'SCENARIO.EDIT',
+	0x0135: 'SCENARIO.SHOW',
+	0x0136: 'SCENARIO.SHOW.NEXT',
+	0x0137: 'SCENARIO.SUMMARY',
+	0x0138: 'PIVOT.TABLE.WIZARD',
+	0x0139: 'PIVOT.FIELD.PROPERTIES',
+	0x013A: 'PIVOT.FIELD',
+	0x013B: 'PIVOT.ITEM',
+	0x013C: 'PIVOT.ADD.FIELDS',
+	0x013E: 'OPTIONS.CALCULATION',
+	0x013F: 'OPTIONS.EDIT',
+	0x0140: 'OPTIONS.VIEW',
+	0x0141: 'ADDIN.MANAGER',
+	0x0142: 'MENU.EDITOR',
+	0x0143: 'ATTACH.TOOLBARS',
+	0x0144: 'VBAActivate',
+	0x0145: 'OPTIONS.CHART',
+	0x0148: 'VBA.INSERT.FILE',
+	0x014A: 'VBA.PROCEDURE.DEFINITION',
+	0x0150: 'ROUTING.SLIP',
+	0x0152: 'ROUTE.DOCUMENT',
+	0x0153: 'MAIL.LOGON',
+	0x0156: 'INSERT.PICTURE',
+	0x0157: 'EDIT.TOOL',
+	0x0158: 'GALLERY.DOUGHNUT',
+	0x015E: 'CHART.TREND',
+	0x0160: 'PIVOT.ITEM.PROPERTIES',
+	0x0162: 'WORKBOOK.INSERT',
+	0x0163: 'OPTIONS.TRANSITION',
+	0x0164: 'OPTIONS.GENERAL',
+	0x0172: 'FILTER.ADVANCED',
+	0x0175: 'MAIL.ADD.MAILER',
+	0x0176: 'MAIL.DELETE.MAILER',
+	0x0177: 'MAIL.REPLY',
+	0x0178: 'MAIL.REPLY.ALL',
+	0x0179: 'MAIL.FORWARD',
+	0x017A: 'MAIL.NEXT.LETTER',
+	0x017B: 'DATA.LABEL',
+	0x017C: 'INSERT.TITLE',
+	0x017D: 'FONT.PROPERTIES',
+	0x017E: 'MACRO.OPTIONS',
+	0x017F: 'WORKBOOK.HIDE',
+	0x0180: 'WORKBOOK.UNHIDE',
+	0x0181: 'WORKBOOK.DELETE',
+	0x0182: 'WORKBOOK.NAME',
+	0x0184: 'GALLERY.CUSTOM',
+	0x0186: 'ADD.CHART.AUTOFORMAT',
+	0x0187: 'DELETE.CHART.AUTOFORMAT',
+	0x0188: 'CHART.ADD.DATA',
+	0x0189: 'AUTO.OUTLINE',
+	0x018A: 'TAB.ORDER',
+	0x018B: 'SHOW.DIALOG',
+	0x018C: 'SELECT.ALL',
+	0x018D: 'UNGROUP.SHEETS',
+	0x018E: 'SUBTOTAL.CREATE',
+	0x018F: 'SUBTOTAL.REMOVE',
+	0x0190: 'RENAME.OBJECT',
+	0x019C: 'WORKBOOK.SCROLL',
+	0x019D: 'WORKBOOK.NEXT',
+	0x019E: 'WORKBOOK.PREV',
+	0x019F: 'WORKBOOK.TAB.SPLIT',
+	0x01A0: 'FULL.SCREEN',
+	0x01A1: 'WORKBOOK.PROTECT',
+	0x01A4: 'SCROLLBAR.PROPERTIES',
+	0x01A5: 'PIVOT.SHOW.PAGES',
+	0x01A6: 'TEXT.TO.COLUMNS',
+	0x01A7: 'FORMAT.CHARTTYPE',
+	0x01A8: 'LINK.FORMAT',
+	0x01A9: 'TRACER.DISPLAY',
+	0x01AE: 'TRACER.NAVIGATE',
+	0x01AF: 'TRACER.CLEAR',
+	0x01B0: 'TRACER.ERROR',
+	0x01B1: 'PIVOT.FIELD.GROUP',
+	0x01B2: 'PIVOT.FIELD.UNGROUP',
+	0x01B3: 'CHECKBOX.PROPERTIES',
+	0x01B4: 'LABEL.PROPERTIES',
+	0x01B5: 'LISTBOX.PROPERTIES',
+	0x01B6: 'EDITBOX.PROPERTIES',
+	0x01B7: 'PIVOT.REFRESH',
+	0x01B8: 'LINK.COMBO',
+	0x01B9: 'OPEN.TEXT',
+	0x01BA: 'HIDE.DIALOG',
+	0x01BB: 'SET.DIALOG.FOCUS',
+	0x01BC: 'ENABLE.OBJECT',
+	0x01BD: 'PUSHBUTTON.PROPERTIES',
+	0x01BE: 'SET.DIALOG.DEFAULT',
+	0x01BF: 'FILTER',
+	0x01C0: 'FILTER.SHOW.ALL',
+	0x01C1: 'CLEAR.OUTLINE',
+	0x01C2: 'FUNCTION.WIZARD',
+	0x01C3: 'ADD.LIST.ITEM',
+	0x01C4: 'SET.LIST.ITEM',
+	0x01C5: 'REMOVE.LIST.ITEM',
+	0x01C6: 'SELECT.LIST.ITEM',
+	0x01C7: 'SET.CONTROL.VALUE',
+	0x01C8: 'SAVE.COPY.AS',
+	0x01CA: 'OPTIONS.LISTS.ADD',
+	0x01CB: 'OPTIONS.LISTS.DELETE',
+	0x01CC: 'SERIES.AXES',
+	0x01CD: 'SERIES.X',
+	0x01CE: 'SERIES.Y',
+	0x01CF: 'ERRORBAR.X',
+	0x01D0: 'ERRORBAR.Y',
+	0x01D1: 'FORMAT.CHART',
+	0x01D2: 'SERIES.ORDER',
+	0x01D3: 'MAIL.LOGOFF',
+	0x01D4: 'CLEAR.ROUTING.SLIP',
+	0x01D5: 'APP.ACTIVATE.MICROSOFT',
+	0x01D6: 'MAIL.EDIT.MAILER',
+	0x01D7: 'ON.SHEET',
+	0x01D8: 'STANDARD.WIDTH',
+	0x01D9: 'SCENARIO.MERGE',
+	0x01DA: 'SUMMARY.INFO',
+	0x01DB: 'FIND.FILE',
+	0x01DC: 'ACTIVE.CELL.FONT',
+	0x01DD: 'ENABLE.TIPWIZARD',
+	0x01DE: 'VBA.MAKE.ADDIN',
+	0x01E0: 'INSERTDATATABLE',
+	0x01E1: 'WORKGROUP.OPTIONS',
+	0x01E2: 'MAIL.SEND.MAILER',
+	0x01E5: 'AUTOCORRECT',
+	0x01E9: 'POST.DOCUMENT',
+	0x01EB: 'PICKLIST',
+	0x01ED: 'VIEW.SHOW',
+	0x01EE: 'VIEW.DEFINE',
+	0x01EF: 'VIEW.DELETE',
+	0x01FD: 'SHEET.BACKGROUND',
+	0x01FE: 'INSERT.MAP.OBJECT',
+	0x01FF: 'OPTIONS.MENONO',
+	0x0205: 'MSOCHECKS',
+	0x0206: 'NORMAL',
+	0x0207: 'LAYOUT',
+	0x0208: 'RM.PRINT.AREA',
+	0x0209: 'CLEAR.PRINT.AREA',
+	0x020A: 'ADD.PRINT.AREA',
+	0x020B: 'MOVE.BRK',
+	0x0221: 'HIDECURR.NOTE',
+	0x0222: 'HIDEALL.NOTES',
+	0x0223: 'DELETE.NOTE',
+	0x0224: 'TRAVERSE.NOTES',
+	0x0225: 'ACTIVATE.NOTES',
+	0x026C: 'PROTECT.REVISIONS',
+	0x026D: 'UNPROTECT.REVISIONS',
+	0x0287: 'OPTIONS.ME',
+	0x028D: 'WEB.PUBLISH',
+	0x029B: 'NEWWEBQUERY',
+	0x02A1: 'PIVOT.TABLE.CHART',
+	0x02F1: 'OPTIONS.SAVE',
+	0x02F3: 'OPTIONS.SPELL',
+	0x0328: 'HIDEALL.INKANNOTS'
+};
+
+/* [MS-XLS] 2.5.198.17 */
+var Ftab = {
+	0x0000: 'COUNT',
+	0x0001: 'IF',
+	0x0002: 'ISNA',
+	0x0003: 'ISERROR',
+	0x0004: 'SUM',
+	0x0005: 'AVERAGE',
+	0x0006: 'MIN',
+	0x0007: 'MAX',
+	0x0008: 'ROW',
+	0x0009: 'COLUMN',
+	0x000A: 'NA',
+	0x000B: 'NPV',
+	0x000C: 'STDEV',
+	0x000D: 'DOLLAR',
+	0x000E: 'FIXED',
+	0x000F: 'SIN',
+	0x0010: 'COS',
+	0x0011: 'TAN',
+	0x0012: 'ATAN',
+	0x0013: 'PI',
+	0x0014: 'SQRT',
+	0x0015: 'EXP',
+	0x0016: 'LN',
+	0x0017: 'LOG10',
+	0x0018: 'ABS',
+	0x0019: 'INT',
+	0x001A: 'SIGN',
+	0x001B: 'ROUND',
+	0x001C: 'LOOKUP',
+	0x001D: 'INDEX',
+	0x001E: 'REPT',
+	0x001F: 'MID',
+	0x0020: 'LEN',
+	0x0021: 'VALUE',
+	0x0022: 'TRUE',
+	0x0023: 'FALSE',
+	0x0024: 'AND',
+	0x0025: 'OR',
+	0x0026: 'NOT',
+	0x0027: 'MOD',
+	0x0028: 'DCOUNT',
+	0x0029: 'DSUM',
+	0x002A: 'DAVERAGE',
+	0x002B: 'DMIN',
+	0x002C: 'DMAX',
+	0x002D: 'DSTDEV',
+	0x002E: 'VAR',
+	0x002F: 'DVAR',
+	0x0030: 'TEXT',
+	0x0031: 'LINEST',
+	0x0032: 'TREND',
+	0x0033: 'LOGEST',
+	0x0034: 'GROWTH',
+	0x0035: 'GOTO',
+	0x0036: 'HALT',
+	0x0037: 'RETURN',
+	0x0038: 'PV',
+	0x0039: 'FV',
+	0x003A: 'NPER',
+	0x003B: 'PMT',
+	0x003C: 'RATE',
+	0x003D: 'MIRR',
+	0x003E: 'IRR',
+	0x003F: 'RAND',
+	0x0040: 'MATCH',
+	0x0041: 'DATE',
+	0x0042: 'TIME',
+	0x0043: 'DAY',
+	0x0044: 'MONTH',
+	0x0045: 'YEAR',
+	0x0046: 'WEEKDAY',
+	0x0047: 'HOUR',
+	0x0048: 'MINUTE',
+	0x0049: 'SECOND',
+	0x004A: 'NOW',
+	0x004B: 'AREAS',
+	0x004C: 'ROWS',
+	0x004D: 'COLUMNS',
+	0x004E: 'OFFSET',
+	0x004F: 'ABSREF',
+	0x0050: 'RELREF',
+	0x0051: 'ARGUMENT',
+	0x0052: 'SEARCH',
+	0x0053: 'TRANSPOSE',
+	0x0054: 'ERROR',
+	0x0055: 'STEP',
+	0x0056: 'TYPE',
+	0x0057: 'ECHO',
+	0x0058: 'SET.NAME',
+	0x0059: 'CALLER',
+	0x005A: 'DEREF',
+	0x005B: 'WINDOWS',
+	0x005C: 'SERIES',
+	0x005D: 'DOCUMENTS',
+	0x005E: 'ACTIVE.CELL',
+	0x005F: 'SELECTION',
+	0x0060: 'RESULT',
+	0x0061: 'ATAN2',
+	0x0062: 'ASIN',
+	0x0063: 'ACOS',
+	0x0064: 'CHOOSE',
+	0x0065: 'HLOOKUP',
+	0x0066: 'VLOOKUP',
+	0x0067: 'LINKS',
+	0x0068: 'INPUT',
+	0x0069: 'ISREF',
+	0x006A: 'GET.FORMULA',
+	0x006B: 'GET.NAME',
+	0x006C: 'SET.VALUE',
+	0x006D: 'LOG',
+	0x006E: 'EXEC',
+	0x006F: 'CHAR',
+	0x0070: 'LOWER',
+	0x0071: 'UPPER',
+	0x0072: 'PROPER',
+	0x0073: 'LEFT',
+	0x0074: 'RIGHT',
+	0x0075: 'EXACT',
+	0x0076: 'TRIM',
+	0x0077: 'REPLACE',
+	0x0078: 'SUBSTITUTE',
+	0x0079: 'CODE',
+	0x007A: 'NAMES',
+	0x007B: 'DIRECTORY',
+	0x007C: 'FIND',
+	0x007D: 'CELL',
+	0x007E: 'ISERR',
+	0x007F: 'ISTEXT',
+	0x0080: 'ISNUMBER',
+	0x0081: 'ISBLANK',
+	0x0082: 'T',
+	0x0083: 'N',
+	0x0084: 'FOPEN',
+	0x0085: 'FCLOSE',
+	0x0086: 'FSIZE',
+	0x0087: 'FREADLN',
+	0x0088: 'FREAD',
+	0x0089: 'FWRITELN',
+	0x008A: 'FWRITE',
+	0x008B: 'FPOS',
+	0x008C: 'DATEVALUE',
+	0x008D: 'TIMEVALUE',
+	0x008E: 'SLN',
+	0x008F: 'SYD',
+	0x0090: 'DDB',
+	0x0091: 'GET.DEF',
+	0x0092: 'REFTEXT',
+	0x0093: 'TEXTREF',
+	0x0094: 'INDIRECT',
+	0x0095: 'REGISTER',
+	0x0096: 'CALL',
+	0x0097: 'ADD.BAR',
+	0x0098: 'ADD.MENU',
+	0x0099: 'ADD.COMMAND',
+	0x009A: 'ENABLE.COMMAND',
+	0x009B: 'CHECK.COMMAND',
+	0x009C: 'RENAME.COMMAND',
+	0x009D: 'SHOW.BAR',
+	0x009E: 'DELETE.MENU',
+	0x009F: 'DELETE.COMMAND',
+	0x00A0: 'GET.CHART.ITEM',
+	0x00A1: 'DIALOG.BOX',
+	0x00A2: 'CLEAN',
+	0x00A3: 'MDETERM',
+	0x00A4: 'MINVERSE',
+	0x00A5: 'MMULT',
+	0x00A6: 'FILES',
+	0x00A7: 'IPMT',
+	0x00A8: 'PPMT',
+	0x00A9: 'COUNTA',
+	0x00AA: 'CANCEL.KEY',
+	0x00AB: 'FOR',
+	0x00AC: 'WHILE',
+	0x00AD: 'BREAK',
+	0x00AE: 'NEXT',
+	0x00AF: 'INITIATE',
+	0x00B0: 'REQUEST',
+	0x00B1: 'POKE',
+	0x00B2: 'EXECUTE',
+	0x00B3: 'TERMINATE',
+	0x00B4: 'RESTART',
+	0x00B5: 'HELP',
+	0x00B6: 'GET.BAR',
+	0x00B7: 'PRODUCT',
+	0x00B8: 'FACT',
+	0x00B9: 'GET.CELL',
+	0x00BA: 'GET.WORKSPACE',
+	0x00BB: 'GET.WINDOW',
+	0x00BC: 'GET.DOCUMENT',
+	0x00BD: 'DPRODUCT',
+	0x00BE: 'ISNONTEXT',
+	0x00BF: 'GET.NOTE',
+	0x00C0: 'NOTE',
+	0x00C1: 'STDEVP',
+	0x00C2: 'VARP',
+	0x00C3: 'DSTDEVP',
+	0x00C4: 'DVARP',
+	0x00C5: 'TRUNC',
+	0x00C6: 'ISLOGICAL',
+	0x00C7: 'DCOUNTA',
+	0x00C8: 'DELETE.BAR',
+	0x00C9: 'UNREGISTER',
+	0x00CC: 'USDOLLAR',
+	0x00CD: 'FINDB',
+	0x00CE: 'SEARCHB',
+	0x00CF: 'REPLACEB',
+	0x00D0: 'LEFTB',
+	0x00D1: 'RIGHTB',
+	0x00D2: 'MIDB',
+	0x00D3: 'LENB',
+	0x00D4: 'ROUNDUP',
+	0x00D5: 'ROUNDDOWN',
+	0x00D6: 'ASC',
+	0x00D7: 'DBCS',
+	0x00D8: 'RANK',
+	0x00DB: 'ADDRESS',
+	0x00DC: 'DAYS360',
+	0x00DD: 'TODAY',
+	0x00DE: 'VDB',
+	0x00DF: 'ELSE',
+	0x00E0: 'ELSE.IF',
+	0x00E1: 'END.IF',
+	0x00E2: 'FOR.CELL',
+	0x00E3: 'MEDIAN',
+	0x00E4: 'SUMPRODUCT',
+	0x00E5: 'SINH',
+	0x00E6: 'COSH',
+	0x00E7: 'TANH',
+	0x00E8: 'ASINH',
+	0x00E9: 'ACOSH',
+	0x00EA: 'ATANH',
+	0x00EB: 'DGET',
+	0x00EC: 'CREATE.OBJECT',
+	0x00ED: 'VOLATILE',
+	0x00EE: 'LAST.ERROR',
+	0x00EF: 'CUSTOM.UNDO',
+	0x00F0: 'CUSTOM.REPEAT',
+	0x00F1: 'FORMULA.CONVERT',
+	0x00F2: 'GET.LINK.INFO',
+	0x00F3: 'TEXT.BOX',
+	0x00F4: 'INFO',
+	0x00F5: 'GROUP',
+	0x00F6: 'GET.OBJECT',
+	0x00F7: 'DB',
+	0x00F8: 'PAUSE',
+	0x00FB: 'RESUME',
+	0x00FC: 'FREQUENCY',
+	0x00FD: 'ADD.TOOLBAR',
+	0x00FE: 'DELETE.TOOLBAR',
+	0x00FF: 'User',
+	0x0100: 'RESET.TOOLBAR',
+	0x0101: 'EVALUATE',
+	0x0102: 'GET.TOOLBAR',
+	0x0103: 'GET.TOOL',
+	0x0104: 'SPELLING.CHECK',
+	0x0105: 'ERROR.TYPE',
+	0x0106: 'APP.TITLE',
+	0x0107: 'WINDOW.TITLE',
+	0x0108: 'SAVE.TOOLBAR',
+	0x0109: 'ENABLE.TOOL',
+	0x010A: 'PRESS.TOOL',
+	0x010B: 'REGISTER.ID',
+	0x010C: 'GET.WORKBOOK',
+	0x010D: 'AVEDEV',
+	0x010E: 'BETADIST',
+	0x010F: 'GAMMALN',
+	0x0110: 'BETAINV',
+	0x0111: 'BINOMDIST',
+	0x0112: 'CHIDIST',
+	0x0113: 'CHIINV',
+	0x0114: 'COMBIN',
+	0x0115: 'CONFIDENCE',
+	0x0116: 'CRITBINOM',
+	0x0117: 'EVEN',
+	0x0118: 'EXPONDIST',
+	0x0119: 'FDIST',
+	0x011A: 'FINV',
+	0x011B: 'FISHER',
+	0x011C: 'FISHERINV',
+	0x011D: 'FLOOR',
+	0x011E: 'GAMMADIST',
+	0x011F: 'GAMMAINV',
+	0x0120: 'CEILING',
+	0x0121: 'HYPGEOMDIST',
+	0x0122: 'LOGNORMDIST',
+	0x0123: 'LOGINV',
+	0x0124: 'NEGBINOMDIST',
+	0x0125: 'NORMDIST',
+	0x0126: 'NORMSDIST',
+	0x0127: 'NORMINV',
+	0x0128: 'NORMSINV',
+	0x0129: 'STANDARDIZE',
+	0x012A: 'ODD',
+	0x012B: 'PERMUT',
+	0x012C: 'POISSON',
+	0x012D: 'TDIST',
+	0x012E: 'WEIBULL',
+	0x012F: 'SUMXMY2',
+	0x0130: 'SUMX2MY2',
+	0x0131: 'SUMX2PY2',
+	0x0132: 'CHITEST',
+	0x0133: 'CORREL',
+	0x0134: 'COVAR',
+	0x0135: 'FORECAST',
+	0x0136: 'FTEST',
+	0x0137: 'INTERCEPT',
+	0x0138: 'PEARSON',
+	0x0139: 'RSQ',
+	0x013A: 'STEYX',
+	0x013B: 'SLOPE',
+	0x013C: 'TTEST',
+	0x013D: 'PROB',
+	0x013E: 'DEVSQ',
+	0x013F: 'GEOMEAN',
+	0x0140: 'HARMEAN',
+	0x0141: 'SUMSQ',
+	0x0142: 'KURT',
+	0x0143: 'SKEW',
+	0x0144: 'ZTEST',
+	0x0145: 'LARGE',
+	0x0146: 'SMALL',
+	0x0147: 'QUARTILE',
+	0x0148: 'PERCENTILE',
+	0x0149: 'PERCENTRANK',
+	0x014A: 'MODE',
+	0x014B: 'TRIMMEAN',
+	0x014C: 'TINV',
+	0x014E: 'MOVIE.COMMAND',
+	0x014F: 'GET.MOVIE',
+	0x0150: 'CONCATENATE',
+	0x0151: 'POWER',
+	0x0152: 'PIVOT.ADD.DATA',
+	0x0153: 'GET.PIVOT.TABLE',
+	0x0154: 'GET.PIVOT.FIELD',
+	0x0155: 'GET.PIVOT.ITEM',
+	0x0156: 'RADIANS',
+	0x0157: 'DEGREES',
+	0x0158: 'SUBTOTAL',
+	0x0159: 'SUMIF',
+	0x015A: 'COUNTIF',
+	0x015B: 'COUNTBLANK',
+	0x015C: 'SCENARIO.GET',
+	0x015D: 'OPTIONS.LISTS.GET',
+	0x015E: 'ISPMT',
+	0x015F: 'DATEDIF',
+	0x0160: 'DATESTRING',
+	0x0161: 'NUMBERSTRING',
+	0x0162: 'ROMAN',
+	0x0163: 'OPEN.DIALOG',
+	0x0164: 'SAVE.DIALOG',
+	0x0165: 'VIEW.GET',
+	0x0166: 'GETPIVOTDATA',
+	0x0167: 'HYPERLINK',
+	0x0168: 'PHONETIC',
+	0x0169: 'AVERAGEA',
+	0x016A: 'MAXA',
+	0x016B: 'MINA',
+	0x016C: 'STDEVPA',
+	0x016D: 'VARPA',
+	0x016E: 'STDEVA',
+	0x016F: 'VARA',
+	0x0170: 'BAHTTEXT',
+	0x0171: 'THAIDAYOFWEEK',
+	0x0172: 'THAIDIGIT',
+	0x0173: 'THAIMONTHOFYEAR',
+	0x0174: 'THAINUMSOUND',
+	0x0175: 'THAINUMSTRING',
+	0x0176: 'THAISTRINGLENGTH',
+	0x0177: 'ISTHAIDIGIT',
+	0x0178: 'ROUNDBAHTDOWN',
+	0x0179: 'ROUNDBAHTUP',
+	0x017A: 'THAIYEAR',
+	0x017B: 'RTD'
+};
+var FtabArgc = {
+	0x0002: 1, /* ISNA */
+	0x0003: 1, /* ISERROR */
+	0x000F: 1, /* SIN */
+	0x0010: 1, /* COS */
+	0x0011: 1, /* TAN */
+	0x0012: 1, /* ATAN */
+	0x0014: 1, /* SQRT */
+	0x0015: 1, /* EXP */
+	0x0016: 1, /* LN */
+	0x0017: 1, /* LOG10 */
+	0x0018: 1, /* ABS */
+	0x0019: 1, /* INT */
+	0x001A: 1, /* SIGN */
+	0x001B: 2, /* ROUND */
+	0x001E: 2, /* REPT */
+	0x001F: 3, /* MID */
+	0x0020: 1, /* LEN */
+	0x0021: 1, /* VALUE */
+	0x0026: 1, /* NOT */
+	0x0027: 2, /* MOD */
+	0x0028: 3, /* DCOUNT */
+	0x0029: 3, /* DSUM */
+	0x002A: 3, /* DAVERAGE */
+	0x002B: 3, /* DMIN */
+	0x002C: 3, /* DMAX */
+	0x002D: 3, /* DSTDEV */
+	0x002F: 3, /* DVAR */
+	0x0030: 2, /* TEXT */
+	0x0035: 1, /* GOTO */
+	0x003D: 3, /* MIRR */
+	0x0041: 3, /* DATE */
+	0x0042: 3, /* TIME */
+	0x0043: 1, /* DAY */
+	0x0044: 1, /* MONTH */
+	0x0045: 1, /* YEAR */
+	0x0047: 1, /* HOUR */
+	0x0048: 1, /* MINUTE */
+	0x0049: 1, /* SECOND */
+	0x004B: 1, /* AREAS */
+	0x004C: 1, /* ROWS */
+	0x004D: 1, /* COLUMNS */
+	0x004F: 2, /* ABSREF */
+	0x0050: 2, /* RELREF */
+	0x0053: 1, /* TRANSPOSE */
+	0x0056: 1, /* TYPE */
+	0x005A: 1, /* DEREF */
+	0x0061: 2, /* ATAN2 */
+	0x0062: 1, /* ASIN */
+	0x0063: 1, /* ACOS */
+	0x0069: 1, /* ISREF */
+	0x006F: 1, /* CHAR */
+	0x0070: 1, /* LOWER */
+	0x0071: 1, /* UPPER */
+	0x0072: 1, /* PROPER */
+	0x0075: 2, /* EXACT */
+	0x0076: 1, /* TRIM */
+	0x0077: 4, /* REPLACE */
+	0x0079: 1, /* CODE */
+	0x007E: 1, /* ISERR */
+	0x007F: 1, /* ISTEXT */
+	0x0080: 1, /* ISNUMBER */
+	0x0081: 1, /* ISBLANK */
+	0x0082: 1, /* T */
+	0x0083: 1, /* N */
+	0x0085: 1, /* FCLOSE */
+	0x0086: 1, /* FSIZE */
+	0x0087: 1, /* FREADLN */
+	0x0088: 2, /* FREAD */
+	0x0089: 2, /* FWRITELN */
+	0x008A: 2, /* FWRITE */
+	0x008C: 1, /* DATEVALUE */
+	0x008D: 1, /* TIMEVALUE */
+	0x008E: 3, /* SLN */
+	0x008F: 4, /* SYD */
+	0x00A2: 1, /* CLEAN */
+	0x00A3: 1, /* MDETERM */
+	0x00A4: 1, /* MINVERSE */
+	0x00A5: 2, /* MMULT */
+	0x00AC: 1, /* WHILE */
+	0x00AF: 2, /* INITIATE */
+	0x00B0: 2, /* REQUEST */
+	0x00B1: 3, /* POKE */
+	0x00B2: 2, /* EXECUTE */
+	0x00B3: 1, /* TERMINATE */
+	0x00B8: 1, /* FACT */
+	0x00BD: 3, /* DPRODUCT */
+	0x00BE: 1, /* ISNONTEXT */
+	0x00C3: 3, /* DSTDEVP */
+	0x00C4: 3, /* DVARP */
+	0x00C6: 1, /* ISLOGICAL */
+	0x00C7: 3, /* DCOUNTA */
+	0x00C9: 1, /* UNREGISTER */
+	0x00CF: 4, /* REPLACEB */
+	0x00D2: 3, /* MIDB */
+	0x00D3: 1, /* LENB */
+	0x00D4: 2, /* ROUNDUP */
+	0x00D5: 2, /* ROUNDDOWN */
+	0x00D6: 1, /* ASC */
+	0x00D7: 1, /* DBCS */
+	0x00E5: 1, /* SINH */
+	0x00E6: 1, /* COSH */
+	0x00E7: 1, /* TANH */
+	0x00E8: 1, /* ASINH */
+	0x00E9: 1, /* ACOSH */
+	0x00EA: 1, /* ATANH */
+	0x00EB: 3, /* DGET */
+	0x00F4: 1, /* INFO */
+	0x00FC: 2, /* FREQUENCY */
+	0x0101: 1, /* EVALUATE */
+	0x0105: 1, /* ERROR.TYPE */
+	0x010F: 1, /* GAMMALN */
+	0x0111: 4, /* BINOMDIST */
+	0x0112: 2, /* CHIDIST */
+	0x0113: 2, /* CHIINV */
+	0x0114: 2, /* COMBIN */
+	0x0115: 3, /* CONFIDENCE */
+	0x0116: 3, /* CRITBINOM */
+	0x0117: 1, /* EVEN */
+	0x0118: 3, /* EXPONDIST */
+	0x0119: 3, /* FDIST */
+	0x011A: 3, /* FINV */
+	0x011B: 1, /* FISHER */
+	0x011C: 1, /* FISHERINV */
+	0x011D: 2, /* FLOOR */
+	0x011E: 4, /* GAMMADIST */
+	0x011F: 3, /* GAMMAINV */
+	0x0120: 2, /* CEILING */
+	0x0121: 4, /* HYPGEOMDIST */
+	0x0122: 3, /* LOGNORMDIST */
+	0x0123: 3, /* LOGINV */
+	0x0124: 3, /* NEGBINOMDIST */
+	0x0125: 4, /* NORMDIST */
+	0x0126: 1, /* NORMSDIST */
+	0x0127: 3, /* NORMINV */
+	0x0128: 1, /* NORMSINV */
+	0x0129: 3, /* STANDARDIZE */
+	0x012A: 1, /* ODD */
+	0x012B: 2, /* PERMUT */
+	0x012C: 3, /* POISSON */
+	0x012D: 3, /* TDIST */
+	0x012E: 4, /* WEIBULL */
+	0x012F: 2, /* SUMXMY2 */
+	0x0130: 2, /* SUMX2MY2 */
+	0x0131: 2, /* SUMX2PY2 */
+	0x0132: 2, /* CHITEST */
+	0x0133: 2, /* CORREL */
+	0x0134: 2, /* COVAR */
+	0x0135: 3, /* FORECAST */
+	0x0136: 2, /* FTEST */
+	0x0137: 2, /* INTERCEPT */
+	0x0138: 2, /* PEARSON */
+	0x0139: 2, /* RSQ */
+	0x013A: 2, /* STEYX */
+	0x013B: 2, /* SLOPE */
+	0x013C: 4, /* TTEST */
+	0x0145: 2, /* LARGE */
+	0x0146: 2, /* SMALL */
+	0x0147: 2, /* QUARTILE */
+	0x0148: 2, /* PERCENTILE */
+	0x014B: 2, /* TRIMMEAN */
+	0x014C: 2, /* TINV */
+	0x0151: 2, /* POWER */
+	0x0156: 1, /* RADIANS */
+	0x0157: 1, /* DEGREES */
+	0x015A: 2, /* COUNTIF */
+	0x015B: 1, /* COUNTBLANK */
+	0x015E: 4, /* ISPMT */
+	0x015F: 3, /* DATEDIF */
+	0x0160: 1, /* DATESTRING */
+	0x0161: 2, /* NUMBERSTRING */
+	0x0168: 1, /* PHONETIC */
+	0x0170: 1, /* BAHTTEXT */
+	0x0171: 1, /* THAIDAYOFWEEK */
+	0x0172: 1, /* THAIDIGIT */
+	0x0173: 1, /* THAIMONTHOFYEAR */
+	0x0174: 1, /* THAINUMSOUND */
+	0x0175: 1, /* THAINUMSTRING */
+	0x0176: 1, /* THAISTRINGLENGTH */
+	0x0177: 1, /* ISTHAIDIGIT */
+	0x0178: 1, /* ROUNDBAHTDOWN */
+	0x0179: 1, /* ROUNDBAHTUP */
+	0x017A: 1, /* THAIYEAR */
+	0xFFFF: 0
+};
+/* [MS-XLSX] 2.2.3 Functions */
+var XLSXFutureFunctions = {
+	"_xlfn.ACOT": "ACOT",
+	"_xlfn.ACOTH": "ACOTH",
+	"_xlfn.AGGREGATE": "AGGREGATE",
+	"_xlfn.ARABIC": "ARABIC",
+	"_xlfn.AVERAGEIF": "AVERAGEIF",
+	"_xlfn.AVERAGEIFS": "AVERAGEIFS",
+	"_xlfn.BASE": "BASE",
+	"_xlfn.BETA.DIST": "BETA.DIST",
+	"_xlfn.BETA.INV": "BETA.INV",
+	"_xlfn.BINOM.DIST": "BINOM.DIST",
+	"_xlfn.BINOM.DIST.RANGE": "BINOM.DIST.RANGE",
+	"_xlfn.BINOM.INV": "BINOM.INV",
+	"_xlfn.BITAND": "BITAND",
+	"_xlfn.BITLSHIFT": "BITLSHIFT",
+	"_xlfn.BITOR": "BITOR",
+	"_xlfn.BITRSHIFT": "BITRSHIFT",
+	"_xlfn.BITXOR": "BITXOR",
+	"_xlfn.CEILING.MATH": "CEILING.MATH",
+	"_xlfn.CEILING.PRECISE": "CEILING.PRECISE",
+	"_xlfn.CHISQ.DIST": "CHISQ.DIST",
+	"_xlfn.CHISQ.DIST.RT": "CHISQ.DIST.RT",
+	"_xlfn.CHISQ.INV": "CHISQ.INV",
+	"_xlfn.CHISQ.INV.RT": "CHISQ.INV.RT",
+	"_xlfn.CHISQ.TEST": "CHISQ.TEST",
+	"_xlfn.COMBINA": "COMBINA",
+	"_xlfn.CONFIDENCE.NORM": "CONFIDENCE.NORM",
+	"_xlfn.CONFIDENCE.T": "CONFIDENCE.T",
+	"_xlfn.COT": "COT",
+	"_xlfn.COTH": "COTH",
+	"_xlfn.COUNTIFS": "COUNTIFS",
+	"_xlfn.COVARIANCE.P": "COVARIANCE.P",
+	"_xlfn.COVARIANCE.S": "COVARIANCE.S",
+	"_xlfn.CSC": "CSC",
+	"_xlfn.CSCH": "CSCH",
+	"_xlfn.DAYS": "DAYS",
+	"_xlfn.DECIMAL": "DECIMAL",
+	"_xlfn.ECMA.CEILING": "ECMA.CEILING",
+	"_xlfn.ERF.PRECISE": "ERF.PRECISE",
+	"_xlfn.ERFC.PRECISE": "ERFC.PRECISE",
+	"_xlfn.EXPON.DIST": "EXPON.DIST",
+	"_xlfn.F.DIST": "F.DIST",
+	"_xlfn.F.DIST.RT": "F.DIST.RT",
+	"_xlfn.F.INV": "F.INV",
+	"_xlfn.F.INV.RT": "F.INV.RT",
+	"_xlfn.F.TEST": "F.TEST",
+	"_xlfn.FILTERXML": "FILTERXML",
+	"_xlfn.FLOOR.MATH": "FLOOR.MATH",
+	"_xlfn.FLOOR.PRECISE": "FLOOR.PRECISE",
+	"_xlfn.FORMULATEXT": "FORMULATEXT",
+	"_xlfn.GAMMA": "GAMMA",
+	"_xlfn.GAMMA.DIST": "GAMMA.DIST",
+	"_xlfn.GAMMA.INV": "GAMMA.INV",
+	"_xlfn.GAMMALN.PRECISE": "GAMMALN.PRECISE",
+	"_xlfn.GAUSS": "GAUSS",
+	"_xlfn.HYPGEOM.DIST": "HYPGEOM.DIST",
+	"_xlfn.IFNA": "IFNA",
+	"_xlfn.IFERROR": "IFERROR",
+	"_xlfn.IMCOSH": "IMCOSH",
+	"_xlfn.IMCOT": "IMCOT",
+	"_xlfn.IMCSC": "IMCSC",
+	"_xlfn.IMCSCH": "IMCSCH",
+	"_xlfn.IMSEC": "IMSEC",
+	"_xlfn.IMSECH": "IMSECH",
+	"_xlfn.IMSINH": "IMSINH",
+	"_xlfn.IMTAN": "IMTAN",
+	"_xlfn.ISFORMULA": "ISFORMULA",
+	"_xlfn.ISO.CEILING": "ISO.CEILING",
+	"_xlfn.ISOWEEKNUM": "ISOWEEKNUM",
+	"_xlfn.LOGNORM.DIST": "LOGNORM.DIST",
+	"_xlfn.LOGNORM.INV": "LOGNORM.INV",
+	"_xlfn.MODE.MULT": "MODE.MULT",
+	"_xlfn.MODE.SNGL": "MODE.SNGL",
+	"_xlfn.MUNIT": "MUNIT",
+	"_xlfn.NEGBINOM.DIST": "NEGBINOM.DIST",
+	"_xlfn.NETWORKDAYS.INTL": "NETWORKDAYS.INTL",
+	"_xlfn.NIGBINOM": "NIGBINOM",
+	"_xlfn.NORM.DIST": "NORM.DIST",
+	"_xlfn.NORM.INV": "NORM.INV",
+	"_xlfn.NORM.S.DIST": "NORM.S.DIST",
+	"_xlfn.NORM.S.INV": "NORM.S.INV",
+	"_xlfn.NUMBERVALUE": "NUMBERVALUE",
+	"_xlfn.PDURATION": "PDURATION",
+	"_xlfn.PERCENTILE.EXC": "PERCENTILE.EXC",
+	"_xlfn.PERCENTILE.INC": "PERCENTILE.INC",
+	"_xlfn.PERCENTRANK.EXC": "PERCENTRANK.EXC",
+	"_xlfn.PERCENTRANK.INC": "PERCENTRANK.INC",
+	"_xlfn.PERMUTATIONA": "PERMUTATIONA",
+	"_xlfn.PHI": "PHI",
+	"_xlfn.POISSON.DIST": "POISSON.DIST",
+	"_xlfn.QUARTILE.EXC": "QUARTILE.EXC",
+	"_xlfn.QUARTILE.INC": "QUARTILE.INC",
+	"_xlfn.QUERYSTRING": "QUERYSTRING",
+	"_xlfn.RANK.AVG": "RANK.AVG",
+	"_xlfn.RANK.EQ": "RANK.EQ",
+	"_xlfn.RRI": "RRI",
+	"_xlfn.SEC": "SEC",
+	"_xlfn.SECH": "SECH",
+	"_xlfn.SHEET": "SHEET",
+	"_xlfn.SHEETS": "SHEETS",
+	"_xlfn.SKEW.P": "SKEW.P",
+	"_xlfn.STDEV.P": "STDEV.P",
+	"_xlfn.STDEV.S": "STDEV.S",
+	"_xlfn.SUMIFS": "SUMIFS",
+	"_xlfn.T.DIST": "T.DIST",
+	"_xlfn.T.DIST.2T": "T.DIST.2T",
+	"_xlfn.T.DIST.RT": "T.DIST.RT",
+	"_xlfn.T.INV": "T.INV",
+	"_xlfn.T.INV.2T": "T.INV.2T",
+	"_xlfn.T.TEST": "T.TEST",
+	"_xlfn.UNICHAR": "UNICHAR",
+	"_xlfn.UNICODE": "UNICODE",
+	"_xlfn.VAR.P": "VAR.P",
+	"_xlfn.VAR.S": "VAR.S",
+	"_xlfn.WEBSERVICE": "WEBSERVICE",
+	"_xlfn.WEIBULL.DIST": "WEIBULL.DIST",
+	"_xlfn.WORKDAY.INTL": "WORKDAY.INTL",
+	"_xlfn.XOR": "XOR",
+	"_xlfn.Z.TEST": "Z.TEST"
+};
+
+var strs = {}; // shared strings
+var _ssfopts = {}; // spreadsheet formatting options
+
+RELS.WS = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet";
+
+function get_sst_id(sst, str) {
+	for(var i = 0, len = sst.length; i < len; ++i) if(sst[i].t === str) { sst.Count ++; return i; }
+	sst[len] = {t:str}; sst.Count ++; sst.Unique ++; return len;
+}
+
+function get_cell_style(styles, cell, opts) {
+  if (typeof style_builder != 'undefined') {
+    if (/^\d+$/.exec(cell.s)) { return cell.s}  // if its already an integer index, let it be
+    if (cell.s && (cell.s == +cell.s)) { return cell.s}  // if its already an integer index, let it be
+    var s = cell.s || {};
+    if (cell.z) s.numFmt = cell.z;
+    return style_builder.addStyle(s);
+  }
+  else {
+    var z = opts.revssf[cell.z != null ? cell.z : "General"];
+    for(var i = 0, len = styles.length; i != len; ++i) if(styles[i].numFmtId === z) return i;
+    styles[len] = {
+      numFmtId:z,
+      fontId:0,
+      fillId:0,
+      borderId:0,
+      xfId:0,
+      applyNumberFormat:1
+    };
+    return len;
+  }
+}
+
+function get_cell_style_csf(cellXf) {
+
+  if (cellXf) {
+
+    var s = {}
+
+    if (typeof cellXf.numFmtId != undefined)  {
+      s.numFmt = SSF._table[cellXf.numFmtId];
+    }
+
+    if(cellXf.fillId)  {
+      s.fill =  styles.Fills[cellXf.fillId];
+    }
+
+    if (cellXf.fontId) {
+      s.font = styles.Fonts[cellXf.fontId];
+    }
+    if (cellXf.borderId) {
+      s.border = styles.Borders[cellXf.borderId];
+    }
+    if (cellXf.applyAlignment==1) {
+      s.alignment = cellXf.alignment;
+    }
+
+
+    return JSON.parse(JSON.stringify(s));
+  }
+  return null;
+}
+
+function safe_format(p, fmtid, fillid, opts) {
+	try {
+		if(p.t === 'e') p.w = p.w || BErr[p.v];
+		else if(fmtid === 0) {
+			if(p.t === 'n') {
+				if((p.v|0) === p.v) p.w = SSF._general_int(p.v,_ssfopts);
+				else p.w = SSF._general_num(p.v,_ssfopts);
+			}
+			else if(p.t === 'd') {
+				var dd = datenum(p.v);
+				if((dd|0) === dd) p.w = SSF._general_int(dd,_ssfopts);
+				else p.w = SSF._general_num(dd,_ssfopts);
+			}
+			else if(p.v === undefined) return "";
+			else p.w = SSF._general(p.v,_ssfopts);
+		}
+		else if(p.t === 'd') p.w = SSF.format(fmtid,datenum(p.v),_ssfopts);
+		else p.w = SSF.format(fmtid,p.v,_ssfopts);
+		if(opts.cellNF) p.z = SSF._table[fmtid];
+	} catch(e) { if(opts.WTF) throw e; }
+}
+function parse_ws_xml_dim(ws, s) {
+  var d = safe_decode_range(s);
+  if (d.s.r <= d.e.r && d.s.c <= d.e.c && d.s.r >= 0 && d.s.c >= 0) ws["!ref"] = encode_range(d);
+}
+var mergecregex = /<mergeCell ref="[A-Z0-9:]+"\s*\/>/g;
+var sheetdataregex = /<(?:\w+:)?sheetData>([^\u2603]*)<\/(?:\w+:)?sheetData>/;
+var hlinkregex = /<hyperlink[^>]*\/>/g;
+var dimregex = /"(\w*:\w*)"/;
+var colregex = /<col[^>]*\/>/g;
+/* 18.3 Worksheets */
+function parse_ws_xml(data, opts, rels) {
+  if (!data) return data;
+  /* 18.3.1.99 worksheet CT_Worksheet */
+  var s = {};
+
+  /* 18.3.1.35 dimension CT_SheetDimension ? */
+  var ridx = data.indexOf("<dimension");
+  if (ridx > 0) {
+    var ref = data.substr(ridx, 50).match(dimregex);
+    if (ref != null) parse_ws_xml_dim(s, ref[1]);
+  }
+
+  /* 18.3.1.55 mergeCells CT_MergeCells */
+  var mergecells = [];
+  if (data.indexOf("</mergeCells>") !== -1) {
+    var merges = data.match(mergecregex);
+    for (ridx = 0; ridx != merges.length; ++ridx)
+      mergecells[ridx] = safe_decode_range(merges[ridx].substr(merges[ridx].indexOf("\"") + 1));
+  }
+
+  /* 18.3.1.17 cols CT_Cols */
+  var columns = [];
+  if (opts.cellStyles && data.indexOf("</cols>") !== -1) {
+    /* 18.3.1.13 col CT_Col */
+    var cols = data.match(colregex);
+    parse_ws_xml_cols(columns, cols);
+  }
+
+  var refguess = {s: {r: 1000000, c: 1000000}, e: {r: 0, c: 0}};
+
+  /* 18.3.1.80 sheetData CT_SheetData ? */
+  var mtch = data.match(sheetdataregex);
+  if (mtch) parse_ws_xml_data(mtch[1], s, opts, refguess);
+
+  /* 18.3.1.48 hyperlinks CT_Hyperlinks */
+  if (data.indexOf("</hyperlinks>") !== -1) parse_ws_xml_hlinks(s, data.match(hlinkregex), rels);
+
+  if (!s["!ref"] && refguess.e.c >= refguess.s.c && refguess.e.r >= refguess.s.r) s["!ref"] = encode_range(refguess);
+  if (opts.sheetRows > 0 && s["!ref"]) {
+    var tmpref = safe_decode_range(s["!ref"]);
+    if (opts.sheetRows < +tmpref.e.r) {
+      tmpref.e.r = opts.sheetRows - 1;
+      if (tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;
+      if (tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;
+      if (tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;
+      if (tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;
+      s["!fullref"] = s["!ref"];
+      s["!ref"] = encode_range(tmpref);
+    }
+  }
+  if (mergecells.length > 0) s["!merges"] = mergecells;
+  if (columns.length > 0) s["!cols"] = columns;
+  return s;
+}
+
+function write_ws_xml_merges(merges) {
+  if (merges.length == 0) return "";
+  var o = '<mergeCells count="' + merges.length + '">';
+  for (var i = 0; i != merges.length; ++i) o += '<mergeCell ref="' + encode_range(merges[i]) + '"/>';
+  return o + '</mergeCells>';
+}
+
+function write_ws_xml_pagesetup(setup) {
+  var pageSetup = writextag('pageSetup', null, {
+    scale: setup.scale || '100',
+    orientation: setup.orientation || 'portrait',
+    horizontalDpi: setup.horizontalDpi || '4294967292',
+    verticalDpi: setup.verticalDpi || '4294967292'
+  })
+  return pageSetup;
+}
+
+
+function parse_ws_xml_hlinks(s, data, rels) {
+  for (var i = 0; i != data.length; ++i) {
+    var val = parsexmltag(data[i], true);
+    if (!val.ref) return;
+    var rel = rels ? rels['!id'][val.id] : null;
+    if (rel) {
+      val.Target = rel.Target;
+      if (val.location) val.Target += "#" + val.location;
+      val.Rel = rel;
+    } else {
+      val.Target = val.location;
+      rel = {Target: val.location, TargetMode: 'Internal'};
+      val.Rel = rel;
+    }
+    var rng = safe_decode_range(val.ref);
+    for (var R = rng.s.r; R <= rng.e.r; ++R) for (var C = rng.s.c; C <= rng.e.c; ++C) {
+      var addr = encode_cell({c: C, r: R});
+      if (!s[addr]) s[addr] = {t: "stub", v: undefined};
+      s[addr].l = val;
+    }
+  }
+}
+
+function parse_ws_xml_cols(columns, cols) {
+  var seencol = false;
+  for (var coli = 0; coli != cols.length; ++coli) {
+    var coll = parsexmltag(cols[coli], true);
+    var colm = parseInt(coll.min, 10) - 1, colM = parseInt(coll.max, 10) - 1;
+    delete coll.min;
+    delete coll.max;
+    if (!seencol && coll.width) {
+      seencol = true;
+      find_mdw(+coll.width, coll);
+    }
+    if (coll.width) {
+      coll.wpx = width2px(+coll.width);
+      coll.wch = px2char(coll.wpx);
+      coll.MDW = MDW;
+    }
+    while (colm <= colM) columns[colm++] = coll;
+  }
+}
+
+function write_ws_xml_cols(ws, cols) {
+  var o = ["<cols>"], col, width;
+  for (var i = 0; i != cols.length; ++i) {
+    if (!(col = cols[i])) continue;
+    var p = {min: i + 1, max: i + 1};
+    /* wch (chars), wpx (pixels) */
+    width = -1;
+    if (col.wpx) width = px2char(col.wpx);
+    else if (col.wch) width = col.wch;
+    if (width > -1) {
+      p.width = char2width(width);
+      p.customWidth = 1;
+    }
+    o[o.length] = (writextag('col', null, p));
+  }
+  o[o.length] = "</cols>";
+  return o.join("");
+}
+
+function write_ws_xml_cell(cell, ref, ws, opts, idx, wb) {
+  if (cell.v === undefined && cell.s === undefined) return "";
+  var vv = "";
+  var oldt = cell.t, oldv = cell.v;
+  switch (cell.t) {
+    case 'b':
+      vv = cell.v ? "1" : "0";
+      break;
+    case 'n':
+      vv = '' + cell.v;
+      break;
+    case 'e':
+      vv = BErr[cell.v];
+      break;
+    case 'd':
+      if (opts.cellDates) vv = new Date(cell.v).toISOString();
+      else {
+        cell.t = 'n';
+        vv = '' + (cell.v = datenum(cell.v));
+        if (typeof cell.z === 'undefined') cell.z = SSF._table[14];
+      }
+      break;
+    default:
+      vv = cell.v;
+      break;
+  }
+  var v = writetag('v', escapexml(vv)), o = {r: ref};
+  /* TODO: cell style */
+  var os = get_cell_style(opts.cellXfs, cell, opts);
+  if (os !== 0) o.s = os;
+  switch (cell.t) {
+    case 'n':
+      break;
+    case 'd':
+      o.t = "d";
+      break;
+    case 'b':
+      o.t = "b";
+      break;
+    case 'e':
+      o.t = "e";
+      break;
+    default:
+      if (opts.bookSST) {
+        v = writetag('v', '' + get_sst_id(opts.Strings, cell.v));
+        o.t = "s";
+        break;
+      }
+      o.t = "str";
+      break;
+  }
+  if (cell.t != oldt) {
+    cell.t = oldt;
+    cell.v = oldv;
+  }
+  return writextag('c', v, o);
+}
+
+var parse_ws_xml_data = (function parse_ws_xml_data_factory() {
+  var cellregex = /<(?:\w+:)?c[ >]/, rowregex = /<\/(?:\w+:)?row>/;
+  var rregex = /r=["']([^"']*)["']/, isregex = /<is>([\S\s]*?)<\/is>/;
+  var match_v = matchtag("v"), match_f = matchtag("f");
+
+  return function parse_ws_xml_data(sdata, s, opts, guess) {
+    var ri = 0, x = "", cells = [], cref = [], idx = 0, i = 0, cc = 0, d = "", p;
+    var tag, tagr = 0, tagc = 0;
+    var sstr;
+    var fmtid = 0, fillid = 0, do_format = Array.isArray(styles.CellXf), cf;
+    for (var marr = sdata.split(rowregex), mt = 0, marrlen = marr.length; mt != marrlen; ++mt) {
+      x = marr[mt].trim();
+      var xlen = x.length;
+      if (xlen === 0) continue;
+
+      /* 18.3.1.73 row CT_Row */
+      for (ri = 0; ri < xlen; ++ri) if (x.charCodeAt(ri) === 62) break;
+      ++ri;
+      tag = parsexmltag(x.substr(0, ri), true);
+      /* SpreadSheetGear uses implicit r/c */
+      tagr = typeof tag.r !== 'undefined' ? parseInt(tag.r, 10) : tagr + 1;
+      tagc = -1;
+      if (opts.sheetRows && opts.sheetRows < tagr) continue;
+      if (guess.s.r > tagr - 1) guess.s.r = tagr - 1;
+      if (guess.e.r < tagr - 1) guess.e.r = tagr - 1;
+
+      /* 18.3.1.4 c CT_Cell */
+      cells = x.substr(ri).split(cellregex);
+      for (ri = typeof tag.r === 'undefined' ? 0 : 1; ri != cells.length; ++ri) {
+        x = cells[ri].trim();
+        if (x.length === 0) continue;
+        cref = x.match(rregex);
+        idx = ri;
+        i = 0;
+        cc = 0;
+        x = "<c " + (x.substr(0, 1) == "<" ? ">" : "") + x;
+        if (cref !== null && cref.length === 2) {
+          idx = 0;
+          d = cref[1];
+          for (i = 0; i != d.length; ++i) {
+            if ((cc = d.charCodeAt(i) - 64) < 1 || cc > 26) break;
+            idx = 26 * idx + cc;
+          }
+          --idx;
+          tagc = idx;
+        } else ++tagc;
+        for (i = 0; i != x.length; ++i) if (x.charCodeAt(i) === 62) break;
+        ++i;
+        tag = parsexmltag(x.substr(0, i), true);
+        if (!tag.r) tag.r = utils.encode_cell({r: tagr - 1, c: tagc});
+        d = x.substr(i);
+        p = {t: ""};
+
+        if ((cref = d.match(match_v)) !== null && cref[1] !== '') p.v = unescapexml(cref[1]);
+        if (opts.cellFormula && (cref = d.match(match_f)) !== null) p.f = unescapexml(cref[1]);
+
+        /* SCHEMA IS ACTUALLY INCORRECT HERE.  IF A CELL HAS NO T, EMIT "" */
+        if (tag.t === undefined && tag.s === undefined && p.v === undefined) {
+          if (!opts.sheetStubs) continue;
+          p.t = "stub";
+        }
+        else p.t = tag.t || "n";
+        if (guess.s.c > idx) guess.s.c = idx;
+        if (guess.e.c < idx) guess.e.c = idx;
+        /* 18.18.11 t ST_CellType */
+        switch (p.t) {
+          case 'n':
+            p.v = parseFloat(p.v);
+            if (isNaN(p.v)) p.v = "" // we don't want NaN if p.v is null
+            break;
+          case 's':
+            // if (!p.hasOwnProperty('v')) continue;
+            sstr = strs[parseInt(p.v, 10)];
+            p.v = sstr.t;
+            p.r = sstr.r;
+            if (opts.cellHTML) p.h = sstr.h;
+            break;
+          case 'str':
+            p.t = "s";
+            p.v = (p.v != null) ? utf8read(p.v) : '';
+            if (opts.cellHTML) p.h = p.v;
+            break;
+          case 'inlineStr':
+            cref = d.match(isregex);
+            p.t = 's';
+            if (cref !== null) {
+              sstr = parse_si(cref[1]);
+              p.v = sstr.t;
+            } else p.v = "";
+            break; // inline string
+          case 'b':
+            p.v = parsexmlbool(p.v);
+            break;
+          case 'd':
+            if (!opts.cellDates) {
+              p.v = datenum(p.v);
+              p.t = 'n';
+            }
+            break;
+            /* error string in .v, number in .v */
+          case 'e':
+            p.w = p.v;
+            p.v = RBErr[p.v];
+            break;
+        }
+        /* formatting */
+        fmtid = fillid = 0;
+        if (do_format && tag.s !== undefined) {
+          cf = styles.CellXf[tag.s];
+          if (opts.cellStyles) {
+            p.s = get_cell_style_csf(cf)
+          }
+          if (cf != null) {
+            if (cf.numFmtId != null) fmtid = cf.numFmtId;
+            if (opts.cellStyles && cf.fillId != null) fillid = cf.fillId;
+          }
+        }
+        safe_format(p, fmtid, fillid, opts);
+        s[tag.r] = p;
+      }
+    }
+  };
+})();
+
+function write_ws_xml_data(ws, opts, idx, wb) {
+  var o = [], r = [], range = safe_decode_range(ws['!ref']), cell, ref, rr = "", cols = [], R, C;
+  for (C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);
+  for (R = range.s.r; R <= range.e.r; ++R) {
+    r = [];
+    rr = encode_row(R);
+    for (C = range.s.c; C <= range.e.c; ++C) {
+      ref = cols[C] + rr;
+      if (ws[ref] === undefined) continue;
+      if ((cell = write_ws_xml_cell(ws[ref], ref, ws, opts, idx, wb)) != null) r.push(cell);
+    }
+    if (r.length > 0) o[o.length] = (writextag('row', r.join(""), {r: rr}));
+  }
+  return o.join("");
+}
+
+var WS_XML_ROOT = writextag('worksheet', null, {
+  'xmlns': XMLNS.main[0],
+  'xmlns:r': XMLNS.r
+});
+
+function write_ws_xml(idx, opts, wb) {
+  var o = [XML_HEADER, WS_XML_ROOT];
+  var s = wb.SheetNames[idx], sidx = 0, rdata = "";
+  var ws = wb.Sheets[s];
+  if (ws === undefined) ws = {};
+  var ref = ws['!ref'];
+  if (ref === undefined) ref = 'A1';
+  o[o.length] = (writextag('dimension', null, {'ref': ref}));
+
+  var kids = [];
+  if (ws['!freeze']) {
+    var pane = '';
+    pane = writextag('pane', null, ws['!freeze'])
+    kids.push(pane)
+
+    var selection = writextag('selection', null, {
+      pane: "topLeft"
+    })
+    kids.push(selection)
+
+    var selection = writextag('selection', null, {
+      pane: "bottomLeft"
+    })
+    kids.push(selection)
+
+    var selection = writextag('selection', null, {
+      pane: "bottomRight",
+      activeCell: ws['!freeze'],
+      sqref: ws['!freeze']
+    })
+    kids.push(selection)
+  }
+
+
+//<selection pane="bottomRight" activeCell="A4" sqref="A4"/>
+
+  var sheetView = writextag('sheetView', kids.join('') || undefined, {
+    showGridLines: opts.showGridLines == false ? '0' : '1',
+    tabSelected: opts.tabSelected === undefined ? '0' : opts.tabSelected,  // see issue #26, need to set WorkbookViews if this is set
+    workbookViewId: opts.workbookViewId === undefined ? '0' : opts.workbookViewId
+  });
+  o[o.length] = writextag('sheetViews', sheetView);
+
+  if (ws['!cols'] !== undefined && ws['!cols'].length > 0) o[o.length] = (write_ws_xml_cols(ws, ws['!cols']));
+  o[sidx = o.length] = '<sheetData/>';
+  if (ws['!ref'] !== undefined) {
+    rdata = write_ws_xml_data(ws, opts, idx, wb);
+    if (rdata.length > 0) o[o.length] = (rdata);
+  }
+  if (o.length > sidx + 1) {
+    o[o.length] = ('</sheetData>');
+    o[sidx] = o[sidx].replace("/>", ">");
+  }
+
+  if (ws['!merges'] !== undefined && ws['!merges'].length > 0) o[o.length] = (write_ws_xml_merges(ws['!merges']));
+
+  if (ws['!pageSetup'] !== undefined) o[o.length] = write_ws_xml_pagesetup(ws['!pageSetup']);
+  if (ws['!rowBreaks'] !== undefined) o[o.length] = write_ws_xml_row_breaks(ws['!rowBreaks']);
+  if (ws['!colBreaks'] !== undefined) o[o.length] = write_ws_xml_col_breaks(ws['!colBreaks']);
+
+  if (o.length > 2) {
+    o[o.length] = ('</worksheet>');
+    o[1] = o[1].replace("/>", ">");
+  }
+  return o.join("");
+}
+
+function write_ws_xml_row_breaks(breaks) {
+  var brk = [];
+  for (var i = 0; i < breaks.length; i++) {
+    var thisBreak = '' + (breaks[i]);
+    var nextBreak = '' + (breaks[i + 1] || '16383');
+    brk.push(writextag('brk', null, {id: thisBreak, max: nextBreak, man: '1'}))
+  }
+  return writextag('rowBreaks', brk.join(' '), {count: brk.length, manualBreakCount: brk.length})
+}
+function write_ws_xml_col_breaks(breaks) {
+  var brk = [];
+  for (var i = 0; i < breaks.length; i++) {
+    var thisBreak = '' + (breaks[i]);
+    var nextBreak = '' + (breaks[i + 1] || '1048575');
+    brk.push(writextag('brk', null, {id: thisBreak, max: nextBreak, man: '1'}))
+  }
+  return writextag('colBreaks', brk.join(' '), {count: brk.length, manualBreakCount: brk.length})
+}
+
+/* [MS-XLSB] 2.4.718 BrtRowHdr */
+function parse_BrtRowHdr(data, length) {
+	var z = [];
+	z.r = data.read_shift(4);
+	data.l += length-4;
+	return z;
+}
+
+/* [MS-XLSB] 2.4.812 BrtWsDim */
+var parse_BrtWsDim = parse_UncheckedRfX;
+var write_BrtWsDim = write_UncheckedRfX;
+
+/* [MS-XLSB] 2.4.815 BrtWsProp */
+function parse_BrtWsProp(data, length) {
+	var z = {};
+	/* TODO: pull flags */
+	data.l += 19;
+	z.name = parse_XLSBCodeName(data, length - 19);
+	return z;
+}
+
+/* [MS-XLSB] 2.4.303 BrtCellBlank */
+function parse_BrtCellBlank(data, length) {
+	var cell = parse_XLSBCell(data);
+	return [cell];
+}
+function write_BrtCellBlank(cell, val, o) {
+	if(o == null) o = new_buf(8);
+	return write_XLSBCell(val, o);
+}
+
+
+/* [MS-XLSB] 2.4.304 BrtCellBool */
+function parse_BrtCellBool(data, length) {
+	var cell = parse_XLSBCell(data);
+	var fBool = data.read_shift(1);
+	return [cell, fBool, 'b'];
+}
+
+/* [MS-XLSB] 2.4.305 BrtCellError */
+function parse_BrtCellError(data, length) {
+	var cell = parse_XLSBCell(data);
+	var fBool = data.read_shift(1);
+	return [cell, fBool, 'e'];
+}
+
+/* [MS-XLSB] 2.4.308 BrtCellIsst */
+function parse_BrtCellIsst(data, length) {
+	var cell = parse_XLSBCell(data);
+	var isst = data.read_shift(4);
+	return [cell, isst, 's'];
+}
+
+/* [MS-XLSB] 2.4.310 BrtCellReal */
+function parse_BrtCellReal(data, length) {
+	var cell = parse_XLSBCell(data);
+	var value = parse_Xnum(data);
+	return [cell, value, 'n'];
+}
+
+/* [MS-XLSB] 2.4.311 BrtCellRk */
+function parse_BrtCellRk(data, length) {
+	var cell = parse_XLSBCell(data);
+	var value = parse_RkNumber(data);
+	return [cell, value, 'n'];
+}
+
+/* [MS-XLSB] 2.4.314 BrtCellSt */
+function parse_BrtCellSt(data, length) {
+	var cell = parse_XLSBCell(data);
+	var value = parse_XLWideString(data);
+	return [cell, value, 'str'];
+}
+
+/* [MS-XLSB] 2.4.647 BrtFmlaBool */
+function parse_BrtFmlaBool(data, length, opts) {
+	var cell = parse_XLSBCell(data);
+	var value = data.read_shift(1);
+	var o = [cell, value, 'b'];
+	if(opts.cellFormula) {
+		var formula = parse_XLSBCellParsedFormula(data, length-9);
+		o[3] = ""; /* TODO */
+	}
+	else data.l += length-9;
+	return o;
+}
+
+/* [MS-XLSB] 2.4.648 BrtFmlaError */
+function parse_BrtFmlaError(data, length, opts) {
+	var cell = parse_XLSBCell(data);
+	var value = data.read_shift(1);
+	var o = [cell, value, 'e'];
+	if(opts.cellFormula) {
+		var formula = parse_XLSBCellParsedFormula(data, length-9);
+		o[3] = ""; /* TODO */
+	}
+	else data.l += length-9;
+	return o;
+}
+
+/* [MS-XLSB] 2.4.649 BrtFmlaNum */
+function parse_BrtFmlaNum(data, length, opts) {
+	var cell = parse_XLSBCell(data);
+	var value = parse_Xnum(data);
+	var o = [cell, value, 'n'];
+	if(opts.cellFormula) {
+		var formula = parse_XLSBCellParsedFormula(data, length - 16);
+		o[3] = ""; /* TODO */
+	}
+	else data.l += length-16;
+	return o;
+}
+
+/* [MS-XLSB] 2.4.650 BrtFmlaString */
+function parse_BrtFmlaString(data, length, opts) {
+	var start = data.l;
+	var cell = parse_XLSBCell(data);
+	var value = parse_XLWideString(data);
+	var o = [cell, value, 'str'];
+	if(opts.cellFormula) {
+		var formula = parse_XLSBCellParsedFormula(data, start + length - data.l);
+	}
+	else data.l = start + length;
+	return o;
+}
+
+/* [MS-XLSB] 2.4.676 BrtMergeCell */
+var parse_BrtMergeCell = parse_UncheckedRfX;
+
+/* [MS-XLSB] 2.4.656 BrtHLink */
+function parse_BrtHLink(data, length, opts) {
+	var end = data.l + length;
+	var rfx = parse_UncheckedRfX(data, 16);
+	var relId = parse_XLNullableWideString(data);
+	var loc = parse_XLWideString(data);
+	var tooltip = parse_XLWideString(data);
+	var display = parse_XLWideString(data);
+	data.l = end;
+	return {rfx:rfx, relId:relId, loc:loc, tooltip:tooltip, display:display};
+}
+
+/* [MS-XLSB] 2.1.7.61 Worksheet */
+function parse_ws_bin(data, opts, rels) {
+	if(!data) return data;
+	if(!rels) rels = {'!id':{}};
+	var s = {};
+
+	var ref;
+	var refguess = {s: {r:1000000, c:1000000}, e: {r:0, c:0} };
+
+	var pass = false, end = false;
+	var row, p, cf, R, C, addr, sstr, rr;
+	var mergecells = [];
+	recordhopper(data, function ws_parse(val, R) {
+		if(end) return;
+		switch(R.n) {
+			case 'BrtWsDim': ref = val; break;
+			case 'BrtRowHdr':
+				row = val;
+				if(opts.sheetRows && opts.sheetRows <= row.r) end=true;
+				rr = encode_row(row.r);
+				break;
+
+			case 'BrtFmlaBool':
+			case 'BrtFmlaError':
+			case 'BrtFmlaNum':
+			case 'BrtFmlaString':
+			case 'BrtCellBool':
+			case 'BrtCellError':
+			case 'BrtCellIsst':
+			case 'BrtCellReal':
+			case 'BrtCellRk':
+			case 'BrtCellSt':
+				p = {t:val[2]};
+				switch(val[2]) {
+					case 'n': p.v = val[1]; break;
+					case 's': sstr = strs[val[1]]; p.v = sstr.t; p.r = sstr.r; break;
+					case 'b': p.v = val[1] ? true : false; break;
+					case 'e': p.v = val[1]; p.w = BErr[p.v]; break;
+					case 'str': p.t = 's'; p.v = utf8read(val[1]); break;
+				}
+				if(opts.cellFormula && val.length > 3) p.f = val[3];
+				if((cf = styles.CellXf[val[0].iStyleRef])) safe_format(p,cf.ifmt,null,opts);
+				s[encode_col(C=val[0].c) + rr] = p;
+				if(refguess.s.r > row.r) refguess.s.r = row.r;
+				if(refguess.s.c > C) refguess.s.c = C;
+				if(refguess.e.r < row.r) refguess.e.r = row.r;
+				if(refguess.e.c < C) refguess.e.c = C;
+				break;
+
+			case 'BrtCellBlank': if(!opts.sheetStubs) break;
+				p = {t:'s',v:undefined};
+				s[encode_col(C=val[0].c) + rr] = p;
+				if(refguess.s.r > row.r) refguess.s.r = row.r;
+				if(refguess.s.c > C) refguess.s.c = C;
+				if(refguess.e.r < row.r) refguess.e.r = row.r;
+				if(refguess.e.c < C) refguess.e.c = C;
+				break;
+
+			/* Merge Cells */
+			case 'BrtBeginMergeCells': break;
+			case 'BrtEndMergeCells': break;
+			case 'BrtMergeCell': mergecells.push(val); break;
+
+			case 'BrtHLink':
+				var rel = rels['!id'][val.relId];
+				if(rel) {
+					val.Target = rel.Target;
+					if(val.loc) val.Target += "#"+val.loc;
+					val.Rel = rel;
+				}
+				for(R=val.rfx.s.r;R<=val.rfx.e.r;++R) for(C=val.rfx.s.c;C<=val.rfx.e.c;++C) {
+					addr = encode_cell({c:C,r:R});
+					if(!s[addr]) s[addr] = {t:'s',v:undefined};
+					s[addr].l = val;
+				}
+				break;
+
+			case 'BrtArrFmla': break; // TODO
+			case 'BrtShrFmla': break; // TODO
+			case 'BrtBeginSheet': break;
+			case 'BrtWsProp': break; // TODO
+			case 'BrtSheetCalcProp': break; // TODO
+			case 'BrtBeginWsViews': break; // TODO
+			case 'BrtBeginWsView': break; // TODO
+			case 'BrtPane': break; // TODO
+			case 'BrtSel': break; // TODO
+			case 'BrtEndWsView': break; // TODO
+			case 'BrtEndWsViews': break; // TODO
+			case 'BrtACBegin': break; // TODO
+			case 'BrtRwDescent': break; // TODO
+			case 'BrtACEnd': break; // TODO
+			case 'BrtWsFmtInfoEx14': break; // TODO
+			case 'BrtWsFmtInfo': break; // TODO
+			case 'BrtBeginColInfos': break; // TODO
+			case 'BrtColInfo': break; // TODO
+			case 'BrtEndColInfos': break; // TODO
+			case 'BrtBeginSheetData': break; // TODO
+			case 'BrtEndSheetData': break; // TODO
+			case 'BrtSheetProtection': break; // TODO
+			case 'BrtPrintOptions': break; // TODO
+			case 'BrtMargins': break; // TODO
+			case 'BrtPageSetup': break; // TODO
+			case 'BrtFRTBegin': pass = true; break;
+			case 'BrtFRTEnd': pass = false; break;
+			case 'BrtEndSheet': break; // TODO
+			case 'BrtDrawing': break; // TODO
+			case 'BrtLegacyDrawing': break; // TODO
+			case 'BrtLegacyDrawingHF': break; // TODO
+			case 'BrtPhoneticInfo': break; // TODO
+			case 'BrtBeginHeaderFooter': break; // TODO
+			case 'BrtEndHeaderFooter': break; // TODO
+			case 'BrtBrk': break; // TODO
+			case 'BrtBeginRwBrk': break; // TODO
+			case 'BrtEndRwBrk': break; // TODO
+			case 'BrtBeginColBrk': break; // TODO
+			case 'BrtEndColBrk': break; // TODO
+			case 'BrtBeginUserShViews': break; // TODO
+			case 'BrtBeginUserShView': break; // TODO
+			case 'BrtEndUserShView': break; // TODO
+			case 'BrtEndUserShViews': break; // TODO
+			case 'BrtBkHim': break; // TODO
+			case 'BrtBeginOleObjects': break; // TODO
+			case 'BrtOleObject': break; // TODO
+			case 'BrtEndOleObjects': break; // TODO
+			case 'BrtBeginListParts': break; // TODO
+			case 'BrtListPart': break; // TODO
+			case 'BrtEndListParts': break; // TODO
+			case 'BrtBeginSortState': break; // TODO
+			case 'BrtBeginSortCond': break; // TODO
+			case 'BrtEndSortCond': break; // TODO
+			case 'BrtEndSortState': break; // TODO
+			case 'BrtBeginConditionalFormatting': break; // TODO
+			case 'BrtEndConditionalFormatting': break; // TODO
+			case 'BrtBeginCFRule': break; // TODO
+			case 'BrtEndCFRule': break; // TODO
+			case 'BrtBeginDVals': break; // TODO
+			case 'BrtDVal': break; // TODO
+			case 'BrtEndDVals': break; // TODO
+			case 'BrtRangeProtection': break; // TODO
+			case 'BrtBeginDCon': break; // TODO
+			case 'BrtEndDCon': break; // TODO
+			case 'BrtBeginDRefs': break;
+			case 'BrtDRef': break;
+			case 'BrtEndDRefs': break;
+
+			/* ActiveX */
+			case 'BrtBeginActiveXControls': break;
+			case 'BrtActiveX': break;
+			case 'BrtEndActiveXControls': break;
+
+			/* AutoFilter */
+			case 'BrtBeginAFilter': break;
+			case 'BrtEndAFilter': break;
+			case 'BrtBeginFilterColumn': break;
+			case 'BrtBeginFilters': break;
+			case 'BrtFilter': break;
+			case 'BrtEndFilters': break;
+			case 'BrtEndFilterColumn': break;
+			case 'BrtDynamicFilter': break;
+			case 'BrtTop10Filter': break;
+			case 'BrtBeginCustomFilters': break;
+			case 'BrtCustomFilter': break;
+			case 'BrtEndCustomFilters': break;
+
+			/* Smart Tags */
+			case 'BrtBeginSmartTags': break;
+			case 'BrtBeginCellSmartTags': break;
+			case 'BrtBeginCellSmartTag': break;
+			case 'BrtCellSmartTagProperty': break;
+			case 'BrtEndCellSmartTag': break;
+			case 'BrtEndCellSmartTags': break;
+			case 'BrtEndSmartTags': break;
+
+			/* Cell Watch */
+			case 'BrtBeginCellWatches': break;
+			case 'BrtCellWatch': break;
+			case 'BrtEndCellWatches': break;
+
+			/* Table */
+			case 'BrtTable': break;
+
+			/* Ignore Cell Errors */
+			case 'BrtBeginCellIgnoreECs': break;
+			case 'BrtCellIgnoreEC': break;
+			case 'BrtEndCellIgnoreECs': break;
+
+			default: if(!pass || opts.WTF) throw new Error("Unexpected record " + R.n);
+		}
+	}, opts);
+	if(!s["!ref"] && (refguess.s.r < 1000000 || ref.e.r > 0 || ref.e.c > 0 || ref.s.r > 0 || ref.s.c > 0)) s["!ref"] = encode_range(ref);
+	if(opts.sheetRows && s["!ref"]) {
+		var tmpref = safe_decode_range(s["!ref"]);
+		if(opts.sheetRows < +tmpref.e.r) {
+			tmpref.e.r = opts.sheetRows - 1;
+			if(tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;
+			if(tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;
+			if(tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;
+			if(tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;
+			s["!fullref"] = s["!ref"];
+			s["!ref"] = encode_range(tmpref);
+		}
+	}
+	if(mergecells.length > 0) s["!merges"] = mergecells;
+	return s;
+}
+
+/* TODO: something useful -- this is a stub */
+function write_ws_bin_cell(ba, cell, R, C, opts) {
+	if(cell.v === undefined) return "";
+	var vv = "";
+	switch(cell.t) {
+		case 'b': vv = cell.v ? "1" : "0"; break;
+		case 'n': case 'e': vv = ''+cell.v; break;
+		default: vv = cell.v; break;
+	}
+	var o = {r:R, c:C};
+	/* TODO: cell style */
+	o.s = get_cell_style(opts.cellXfs, cell, opts);
+	switch(cell.t) {
+		case 's': case 'str':
+			if(opts.bookSST) {
+				vv = get_sst_id(opts.Strings, cell.v);
+				o.t = "s"; break;
+			}
+			o.t = "str"; break;
+		case 'n': break;
+		case 'b': o.t = "b"; break;
+		case 'e': o.t = "e"; break;
+	}
+	write_record(ba, "BrtCellBlank", write_BrtCellBlank(cell, o));
+}
+
+function write_CELLTABLE(ba, ws, idx, opts, wb) {
+	var range = safe_decode_range(ws['!ref'] || "A1"), ref, rr = "", cols = [];
+	write_record(ba, 'BrtBeginSheetData');
+	for(var R = range.s.r; R <= range.e.r; ++R) {
+		rr = encode_row(R);
+		/* [ACCELLTABLE] */
+		/* BrtRowHdr */
+		for(var C = range.s.c; C <= range.e.c; ++C) {
+			/* *16384CELL */
+			if(R === range.s.r) cols[C] = encode_col(C);
+			ref = cols[C] + rr;
+			if(!ws[ref]) continue;
+			/* write cell */
+			write_ws_bin_cell(ba, ws[ref], R, C, opts);
+		}
+	}
+	write_record(ba, 'BrtEndSheetData');
+}
+
+function write_ws_bin(idx, opts, wb) {
+	var ba = buf_array();
+	var s = wb.SheetNames[idx], ws = wb.Sheets[s] || {};
+	var r = safe_decode_range(ws['!ref'] || "A1");
+	write_record(ba, "BrtBeginSheet");
+	/* [BrtWsProp] */
+	write_record(ba, "BrtWsDim", write_BrtWsDim(r));
+	/* [WSVIEWS2] */
+	/* [WSFMTINFO] */
+	/* *COLINFOS */
+	write_CELLTABLE(ba, ws, idx, opts, wb);
+	/* [BrtSheetCalcProp] */
+	/* [[BrtSheetProtectionIso] BrtSheetProtection] */
+	/* *([BrtRangeProtectionIso] BrtRangeProtection) */
+	/* [SCENMAN] */
+	/* [AUTOFILTER] */
+	/* [SORTSTATE] */
+	/* [DCON] */
+	/* [USERSHVIEWS] */
+	/* [MERGECELLS] */
+	/* [BrtPhoneticInfo] */
+	/* *CONDITIONALFORMATTING */
+	/* [DVALS] */
+	/* *BrtHLink */
+	/* [BrtPrintOptions] */
+	/* [BrtMargins] */
+	/* [BrtPageSetup] */
+	/* [HEADERFOOTER] */
+	/* [RWBRK] */
+	/* [COLBRK] */
+	/* *BrtBigName */
+	/* [CELLWATCHES] */
+	/* [IGNOREECS] */
+	/* [SMARTTAGS] */
+	/* [BrtDrawing] */
+	/* [BrtLegacyDrawing] */
+	/* [BrtLegacyDrawingHF] */
+	/* [BrtBkHim] */
+	/* [OLEOBJECTS] */
+	/* [ACTIVEXCONTROLS] */
+	/* [WEBPUBITEMS] */
+	/* [LISTPARTS] */
+	/* FRTWORKSHEET */
+	write_record(ba, "BrtEndSheet");
+	return ba.end();
+}
+/* 18.2.28 (CT_WorkbookProtection) Defaults */
+var WBPropsDef = [
+	['allowRefreshQuery', '0'],
+	['autoCompressPictures', '1'],
+	['backupFile', '0'],
+	['checkCompatibility', '0'],
+	['codeName', ''],
+	['date1904', '0'],
+	['dateCompatibility', '1'],
+	//['defaultThemeVersion', '0'],
+	['filterPrivacy', '0'],
+	['hidePivotFieldList', '0'],
+	['promptedSolutions', '0'],
+	['publishItems', '0'],
+	['refreshAllConnections', false],
+	['saveExternalLinkValues', '1'],
+	['showBorderUnselectedTables', '1'],
+	['showInkAnnotation', '1'],
+	['showObjects', 'all'],
+	['showPivotChartFilter', '0']
+	//['updateLinks', 'userSet']
+];
+
+/* 18.2.30 (CT_BookView) Defaults */
+var WBViewDef = [
+	['activeTab', '0'],
+	['autoFilterDateGrouping', '1'],
+	['firstSheet', '0'],
+	['minimized', '0'],
+	['showHorizontalScroll', '1'],
+	['showSheetTabs', '1'],
+	['showVerticalScroll', '1'],
+	['tabRatio', '600'],
+	['visibility', 'visible']
+	//window{Height,Width}, {x,y}Window
+];
+
+/* 18.2.19 (CT_Sheet) Defaults */
+var SheetDef = [
+	['state', 'visible']
+];
+
+/* 18.2.2  (CT_CalcPr) Defaults */
+var CalcPrDef = [
+	['calcCompleted', 'true'],
+	['calcMode', 'auto'],
+	['calcOnSave', 'true'],
+	['concurrentCalc', 'true'],
+	['fullCalcOnLoad', 'false'],
+	['fullPrecision', 'true'],
+	['iterate', 'false'],
+	['iterateCount', '100'],
+	['iterateDelta', '0.001'],
+	['refMode', 'A1']
+];
+
+/* 18.2.3 (CT_CustomWorkbookView) Defaults */
+var CustomWBViewDef = [
+	['autoUpdate', 'false'],
+	['changesSavedWin', 'false'],
+	['includeHiddenRowCol', 'true'],
+	['includePrintSettings', 'true'],
+	['maximized', 'false'],
+	['minimized', 'false'],
+	['onlySync', 'false'],
+	['personalView', 'false'],
+	['showComments', 'commIndicator'],
+	['showFormulaBar', 'true'],
+	['showHorizontalScroll', 'true'],
+	['showObjects', 'all'],
+	['showSheetTabs', 'true'],
+	['showStatusbar', 'true'],
+	['showVerticalScroll', 'true'],
+	['tabRatio', '600'],
+	['xWindow', '0'],
+	['yWindow', '0']
+];
+
+function push_defaults_array(target, defaults) {
+	for(var j = 0; j != target.length; ++j) { var w = target[j];
+		for(var i=0; i != defaults.length; ++i) { var z = defaults[i];
+			if(w[z[0]] == null) w[z[0]] = z[1];
+		}
+	}
+}
+function push_defaults(target, defaults) {
+	for(var i = 0; i != defaults.length; ++i) { var z = defaults[i];
+		if(target[z[0]] == null) target[z[0]] = z[1];
+	}
+}
+
+function parse_wb_defaults(wb) {
+	push_defaults(wb.WBProps, WBPropsDef);
+	push_defaults(wb.CalcPr, CalcPrDef);
+
+	push_defaults_array(wb.WBView, WBViewDef);
+	push_defaults_array(wb.Sheets, SheetDef);
+
+	_ssfopts.date1904 = parsexmlbool(wb.WBProps.date1904, 'date1904');
+}
+/* 18.2 Workbook */
+var wbnsregex = /<\w+:workbook/;
+function parse_wb_xml(data, opts) {
+	var wb = { AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, xmlns: "" };
+	var pass = false, xmlns = "xmlns";
+	data.match(tagregex).forEach(function xml_wb(x) {
+		var y = parsexmltag(x);
+		switch(strip_ns(y[0])) {
+			case '<?xml': break;
+
+			/* 18.2.27 workbook CT_Workbook 1 */
+			case '<workbook':
+				if(x.match(wbnsregex)) xmlns = "xmlns" + x.match(/<(\w+):/)[1];
+				wb.xmlns = y[xmlns];
+				break;
+			case '</workbook>': break;
+
+			/* 18.2.13 fileVersion CT_FileVersion ? */
+			case '<fileVersion': delete y[0]; wb.AppVersion = y; break;
+			case '<fileVersion/>': break;
+
+			/* 18.2.12 fileSharing CT_FileSharing ? */
+			case '<fileSharing': case '<fileSharing/>': break;
+
+			/* 18.2.28 workbookPr CT_WorkbookPr ? */
+			case '<workbookPr': delete y[0]; wb.WBProps = y; break;
+			case '<workbookPr/>': delete y[0]; wb.WBProps = y; break;
+
+			/* 18.2.29 workbookProtection CT_WorkbookProtection ? */
+			case '<workbookProtection': break;
+			case '<workbookProtection/>': break;
+
+			/* 18.2.1  bookViews CT_BookViews ? */
+			case '<bookViews>': case '</bookViews>': break;
+			/* 18.2.30   workbookView CT_BookView + */
+			case '<workbookView': delete y[0]; wb.WBView.push(y); break;
+
+			/* 18.2.20 sheets CT_Sheets 1 */
+			case '<sheets>': case '</sheets>': break; // aggregate sheet
+			/* 18.2.19   sheet CT_Sheet + */
+			case '<sheet': delete y[0]; y.name = utf8read(y.name); wb.Sheets.push(y); break;
+
+			/* 18.2.15 functionGroups CT_FunctionGroups ? */
+			case '<functionGroups': case '<functionGroups/>': break;
+			/* 18.2.14   functionGroup CT_FunctionGroup + */
+			case '<functionGroup': break;
+
+			/* 18.2.9  externalReferences CT_ExternalReferences ? */
+			case '<externalReferences': case '</externalReferences>': case '<externalReferences>': break;
+			/* 18.2.8    externalReference CT_ExternalReference + */
+			case '<externalReference': break;
+
+			/* 18.2.6  definedNames CT_DefinedNames ? */
+			case '<definedNames/>': break;
+			case '<definedNames>': case '<definedNames': pass=true; break;
+			case '</definedNames>': pass=false; break;
+			/* 18.2.5    definedName CT_DefinedName + */
+			case '<definedName': case '<definedName/>': case '</definedName>': break;
+
+			/* 18.2.2  calcPr CT_CalcPr ? */
+			case '<calcPr': delete y[0]; wb.CalcPr = y; break;
+			case '<calcPr/>': delete y[0]; wb.CalcPr = y; break;
+
+			/* 18.2.16 oleSize CT_OleSize ? (ref required) */
+			case '<oleSize': break;
+
+			/* 18.2.4  customWorkbookViews CT_CustomWorkbookViews ? */
+			case '<customWorkbookViews>': case '</customWorkbookViews>': case '<customWorkbookViews': break;
+			/* 18.2.3    customWorkbookView CT_CustomWorkbookView + */
+			case '<customWorkbookView': case '</customWorkbookView>': break;
+
+			/* 18.2.18 pivotCaches CT_PivotCaches ? */
+			case '<pivotCaches>': case '</pivotCaches>': case '<pivotCaches': break;
+			/* 18.2.17 pivotCache CT_PivotCache ? */
+			case '<pivotCache': break;
+
+			/* 18.2.21 smartTagPr CT_SmartTagPr ? */
+			case '<smartTagPr': case '<smartTagPr/>': break;
+
+			/* 18.2.23 smartTagTypes CT_SmartTagTypes ? */
+			case '<smartTagTypes': case '<smartTagTypes>': case '</smartTagTypes>': break;
+			/* 18.2.22   smartTagType CT_SmartTagType ? */
+			case '<smartTagType': break;
+
+			/* 18.2.24 webPublishing CT_WebPublishing ? */
+			case '<webPublishing': case '<webPublishing/>': break;
+
+			/* 18.2.11 fileRecoveryPr CT_FileRecoveryPr ? */
+			case '<fileRecoveryPr': case '<fileRecoveryPr/>': break;
+
+			/* 18.2.26 webPublishObjects CT_WebPublishObjects ? */
+			case '<webPublishObjects>': case '<webPublishObjects': case '</webPublishObjects>': break;
+			/* 18.2.25 webPublishObject CT_WebPublishObject ? */
+			case '<webPublishObject': break;
+
+			/* 18.2.10 extLst CT_ExtensionList ? */
+			case '<extLst>': case '</extLst>': case '<extLst/>': break;
+			/* 18.2.7    ext CT_Extension + */
+			case '<ext': pass=true; break; //TODO: check with versions of excel
+			case '</ext>': pass=false; break;
+
+			/* Others */
+			case '<ArchID': break;
+			case '<AlternateContent': pass=true; break;
+			case '</AlternateContent>': pass=false; break;
+
+			default: if(!pass && opts.WTF) throw 'unrecognized ' + y[0] + ' in workbook';
+		}
+	});
+	if(XMLNS.main.indexOf(wb.xmlns) === -1) throw new Error("Unknown Namespace: " + wb.xmlns);
+
+	parse_wb_defaults(wb);
+
+	return wb;
+}
+
+var WB_XML_ROOT = writextag('workbook', null, {
+	'xmlns': XMLNS.main[0],
+	//'xmlns:mx': XMLNS.mx,
+	//'xmlns:s': XMLNS.main[0],
+	'xmlns:r': XMLNS.r
+});
+
+function safe1904(wb) {
+	/* TODO: store date1904 somewhere else */
+	try { return parsexmlbool(wb.Workbook.WBProps.date1904) ? "true" : "false"; } catch(e) { return "false"; }
+}
+
+function write_wb_xml(wb, opts) {
+	var o = [XML_HEADER];
+	o[o.length] = WB_XML_ROOT;
+	o[o.length] = (writextag('workbookPr', null, {date1904:safe1904(wb)}));
+	o[o.length] = "<sheets>";
+	for(var i = 0; i != wb.SheetNames.length; ++i)
+		o[o.length] = (writextag('sheet',null,{name:wb.SheetNames[i].substr(0,31), sheetId:""+(i+1), "r:id":"rId"+(i+1)}));
+	o[o.length] = "</sheets>";
+
+  var hasPrintHeaders = false;
+  for(var i = 0; i != wb.SheetNames.length; ++i) {
+    var sheetName = wb.SheetNames[i];
+    var sheet = wb.Sheets[sheetName]
+    if (sheet['!printHeader']) {
+      if (sheet['!printHeader'].length !== 2) {
+        throw "!printHeaders must be an array of length 2: "+sheet['!printHeader'];
+
+      }
+      hasPrintHeaders = true;
+    }
+
+  }
+
+  if (hasPrintHeaders) {
+    o[o.length] = '<definedNames>';
+    for(var i = 0; i != wb.SheetNames.length; ++i) {
+      var sheetName = wb.SheetNames[i];
+      var sheet = wb.Sheets[sheetName]
+      if (sheet['!printHeader'] || sheet['!printColumns']) {
+          var printHeader = sheet['!printHeader'];
+          var printColumns = sheet['!printColumns'];
+
+        //Sheet1!$A:$C,Sheet1!$1:$1
+        var range = "";
+
+        if (printColumns)  range += ("'" + sheetName + "'!")  + ("$" + printColumns[0] + ":$" + printColumns[1]);
+        if (printColumns && printHeader)  range += ","
+        if (printHeader) range += ("'" + sheetName + "'!" ) +  ("$" + printHeader[0] + ":$" + printHeader[1]);
+
+        console.log("-----------------------------")
+        console.log(range)
+        o[o.length] = (writextag('definedName', range, {
+          "name":"_xlnm.Print_Titles",
+          localSheetId : ''+i
+        }))
+      }
+    }
+    o[o.length] = '</definedNames>';
+  }
+
+	if(o.length>2){ o[o.length] = '</workbook>'; o[1]=o[1].replace("/>",">"); }
+	return o.join("");
+}
+/* [MS-XLSB] 2.4.301 BrtBundleSh */
+function parse_BrtBundleSh(data, length) {
+	var z = {};
+	z.hsState = data.read_shift(4); //ST_SheetState
+	z.iTabID = data.read_shift(4);
+	z.strRelID = parse_RelID(data,length-8);
+	z.name = parse_XLWideString(data);
+	return z;
+}
+function write_BrtBundleSh(data, o) {
+	if(!o) o = new_buf(127);
+	o.write_shift(4, data.hsState);
+	o.write_shift(4, data.iTabID);
+	write_RelID(data.strRelID, o);
+	write_XLWideString(data.name.substr(0,31), o);
+	return o;
+}
+
+/* [MS-XLSB] 2.4.807 BrtWbProp */
+function parse_BrtWbProp(data, length) {
+	data.read_shift(4);
+	var dwThemeVersion = data.read_shift(4);
+	var strName = (length > 8) ? parse_XLWideString(data) : "";
+	return [dwThemeVersion, strName];
+}
+function write_BrtWbProp(data, o) {
+	if(!o) o = new_buf(8);
+	o.write_shift(4, 0);
+	o.write_shift(4, 0);
+	return o;
+}
+
+function parse_BrtFRTArchID$(data, length) {
+	var o = {};
+	data.read_shift(4);
+	o.ArchID = data.read_shift(4);
+	data.l += length - 8;
+	return o;
+}
+
+/* [MS-XLSB] 2.1.7.60 Workbook */
+function parse_wb_bin(data, opts) {
+	var wb = { AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, xmlns: "" };
+	var pass = false, z;
+
+	recordhopper(data, function hopper_wb(val, R) {
+		switch(R.n) {
+			case 'BrtBundleSh': wb.Sheets.push(val); break;
+
+			case 'BrtBeginBook': break;
+			case 'BrtFileVersion': break;
+			case 'BrtWbProp': break;
+			case 'BrtACBegin': break;
+			case 'BrtAbsPath15': break;
+			case 'BrtACEnd': break;
+			case 'BrtWbFactoid': break;
+			/*case 'BrtBookProtectionIso': break;*/
+			case 'BrtBookProtection': break;
+			case 'BrtBeginBookViews': break;
+			case 'BrtBookView': break;
+			case 'BrtEndBookViews': break;
+			case 'BrtBeginBundleShs': break;
+			case 'BrtEndBundleShs': break;
+			case 'BrtBeginFnGroup': break;
+			case 'BrtEndFnGroup': break;
+			case 'BrtBeginExternals': break;
+			case 'BrtSupSelf': break;
+			case 'BrtSupBookSrc': break;
+			case 'BrtExternSheet': break;
+			case 'BrtEndExternals': break;
+			case 'BrtName': break;
+			case 'BrtCalcProp': break;
+			case 'BrtUserBookView': break;
+			case 'BrtBeginPivotCacheIDs': break;
+			case 'BrtBeginPivotCacheID': break;
+			case 'BrtEndPivotCacheID': break;
+			case 'BrtEndPivotCacheIDs': break;
+			case 'BrtWebOpt': break;
+			case 'BrtFileRecover': break;
+			case 'BrtFileSharing': break;
+			/*case 'BrtBeginWebPubItems': break;
+			case 'BrtBeginWebPubItem': break;
+			case 'BrtEndWebPubItem': break;
+			case 'BrtEndWebPubItems': break;*/
+
+			/* Smart Tags */
+			case 'BrtBeginSmartTagTypes': break;
+			case 'BrtSmartTagType': break;
+			case 'BrtEndSmartTagTypes': break;
+
+			case 'BrtFRTBegin': pass = true; break;
+			case 'BrtFRTArchID$': break;
+			case 'BrtWorkBookPr15': break;
+			case 'BrtFRTEnd': pass = false; break;
+			case 'BrtEndBook': break;
+			default: if(!pass || opts.WTF) throw new Error("Unexpected record " + R.n);
+		}
+	});
+
+	parse_wb_defaults(wb);
+
+	return wb;
+}
+
+/* [MS-XLSB] 2.1.7.60 Workbook */
+function write_BUNDLESHS(ba, wb, opts) {
+	write_record(ba, "BrtBeginBundleShs");
+	for(var idx = 0; idx != wb.SheetNames.length; ++idx) {
+		var d = { hsState: 0, iTabID: idx+1, strRelID: 'rId' + (idx+1), name: wb.SheetNames[idx] };
+		write_record(ba, "BrtBundleSh", write_BrtBundleSh(d));
+	}
+	write_record(ba, "BrtEndBundleShs");
+}
+
+/* [MS-XLSB] 2.4.643 BrtFileVersion */
+function write_BrtFileVersion(data, o) {
+	if(!o) o = new_buf(127);
+	for(var i = 0; i != 4; ++i) o.write_shift(4, 0);
+	write_XLWideString("SheetJS", o);
+	write_XLWideString(XLSX.version, o);
+	write_XLWideString(XLSX.version, o);
+	write_XLWideString("7262", o);
+	o.length = o.l;
+	return o;
+}
+
+/* [MS-XLSB] 2.1.7.60 Workbook */
+function write_BOOKVIEWS(ba, wb, opts) {
+	write_record(ba, "BrtBeginBookViews");
+	/* 1*(BrtBookView *FRT) */
+	write_record(ba, "BrtEndBookViews");
+}
+
+/* [MS-XLSB] 2.4.302 BrtCalcProp */
+function write_BrtCalcProp(data, o) {
+	if(!o) o = new_buf(26);
+	o.write_shift(4,0); /* force recalc */
+	o.write_shift(4,1);
+	o.write_shift(4,0);
+	write_Xnum(0, o);
+	o.write_shift(-4, 1023);
+	o.write_shift(1, 0x33);
+	o.write_shift(1, 0x00);
+	return o;
+}
+
+function write_BrtFileRecover(data, o) {
+	if(!o) o = new_buf(1);
+	o.write_shift(1,0);
+	return o;
+}
+
+/* [MS-XLSB] 2.1.7.60 Workbook */
+function write_wb_bin(wb, opts) {
+	var ba = buf_array();
+	write_record(ba, "BrtBeginBook");
+	write_record(ba, "BrtFileVersion", write_BrtFileVersion());
+	/* [[BrtFileSharingIso] BrtFileSharing] */
+	write_record(ba, "BrtWbProp", write_BrtWbProp());
+	/* [ACABSPATH] */
+	/* [[BrtBookProtectionIso] BrtBookProtection] */
+	write_BOOKVIEWS(ba, wb, opts);
+	write_BUNDLESHS(ba, wb, opts);
+	/* [FNGROUP] */
+	/* [EXTERNALS] */
+	/* *BrtName */
+	write_record(ba, "BrtCalcProp", write_BrtCalcProp());
+	/* [BrtOleSize] */
+	/* *(BrtUserBookView *FRT) */
+	/* [PIVOTCACHEIDS] */
+	/* [BrtWbFactoid] */
+	/* [SMARTTAGTYPES] */
+	/* [BrtWebOpt] */
+	write_record(ba, "BrtFileRecover", write_BrtFileRecover());
+	/* [WEBPUBITEMS] */
+	/* [CRERRS] */
+	/* FRTWORKBOOK */
+	write_record(ba, "BrtEndBook");
+
+	return ba.end();
+}
+function parse_wb(data, name, opts) {
+	return (name.substr(-4)===".bin" ? parse_wb_bin : parse_wb_xml)(data, opts);
+}
+
+function parse_ws(data, name, opts, rels) {
+	return (name.substr(-4)===".bin" ? parse_ws_bin : parse_ws_xml)(data, opts, rels);
+}
+
+function parse_sty(data, name, opts) {
+	return (name.substr(-4)===".bin" ? parse_sty_bin : parse_sty_xml)(data, opts);
+}
+
+function parse_theme(data, name, opts) {
+	return parse_theme_xml(data, opts);
+}
+
+function parse_sst(data, name, opts) {
+	return (name.substr(-4)===".bin" ? parse_sst_bin : parse_sst_xml)(data, opts);
+}
+
+function parse_cmnt(data, name, opts) {
+	return (name.substr(-4)===".bin" ? parse_comments_bin : parse_comments_xml)(data, opts);
+}
+
+function parse_cc(data, name, opts) {
+	return (name.substr(-4)===".bin" ? parse_cc_bin : parse_cc_xml)(data, opts);
+}
+
+function write_wb(wb, name, opts) {
+	return (name.substr(-4)===".bin" ? write_wb_bin : write_wb_xml)(wb, opts);
+}
+
+function write_ws(data, name, opts, wb) {
+	return (name.substr(-4)===".bin" ? write_ws_bin : write_ws_xml)(data, opts, wb);
+}
+
+function write_sty(data, name, opts) {
+	return (name.substr(-4)===".bin" ? write_sty_bin : write_sty_xml)(data, opts);
+}
+
+function write_sst(data, name, opts) {
+	return (name.substr(-4)===".bin" ? write_sst_bin : write_sst_xml)(data, opts);
+}
+/*
+function write_cmnt(data, name, opts) {
+	return (name.substr(-4)===".bin" ? write_comments_bin : write_comments_xml)(data, opts);
+}
+
+function write_cc(data, name, opts) {
+	return (name.substr(-4)===".bin" ? write_cc_bin : write_cc_xml)(data, opts);
+}
+*/
+var attregexg2=/([\w:]+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:'))/g;
+var attregex2=/([\w:]+)=((?:")(?:[^"]*)(?:")|(?:')(?:[^']*)(?:'))/;
+var _chr = function(c) { return String.fromCharCode(c); };
+function xlml_parsexmltag(tag, skip_root) {
+	var words = tag.split(/\s+/);
+	var z = []; if(!skip_root) z[0] = words[0];
+	if(words.length === 1) return z;
+	var m = tag.match(attregexg2), y, j, w, i;
+	if(m) for(i = 0; i != m.length; ++i) {
+		y = m[i].match(attregex2);
+		if((j=y[1].indexOf(":")) === -1) z[y[1]] = y[2].substr(1,y[2].length-2);
+		else {
+			if(y[1].substr(0,6) === "xmlns:") w = "xmlns"+y[1].substr(6);
+			else w = y[1].substr(j+1);
+			z[w] = y[2].substr(1,y[2].length-2);
+		}
+	}
+	return z;
+}
+function xlml_parsexmltagobj(tag) {
+	var words = tag.split(/\s+/);
+	var z = {};
+	if(words.length === 1) return z;
+	var m = tag.match(attregexg2), y, j, w, i;
+	if(m) for(i = 0; i != m.length; ++i) {
+		y = m[i].match(attregex2);
+		if((j=y[1].indexOf(":")) === -1) z[y[1]] = y[2].substr(1,y[2].length-2);
+		else {
+			if(y[1].substr(0,6) === "xmlns:") w = "xmlns"+y[1].substr(6);
+			else w = y[1].substr(j+1);
+			z[w] = y[2].substr(1,y[2].length-2);
+		}
+	}
+	return z;
+}
+
+// ----
+
+function xlml_format(format, value) {
+	var fmt = XLMLFormatMap[format] || unescapexml(format);
+	if(fmt === "General") return SSF._general(value);
+	return SSF.format(fmt, value);
+}
+
+function xlml_set_custprop(Custprops, Rn, cp, val) {
+	switch((cp[0].match(/dt:dt="([\w.]+)"/)||["",""])[1]) {
+		case "boolean": val = parsexmlbool(val); break;
+		case "i2": case "int": val = parseInt(val, 10); break;
+		case "r4": case "float": val = parseFloat(val); break;
+		case "date": case "dateTime.tz": val = new Date(val); break;
+		case "i8": case "string": case "fixed": case "uuid": case "bin.base64": break;
+		default: throw "bad custprop:" + cp[0];
+	}
+	Custprops[unescapexml(Rn[3])] = val;
+}
+
+function safe_format_xlml(cell, nf, o) {
+	try {
+		if(cell.t === 'e') { cell.w = cell.w || BErr[cell.v]; }
+		else if(nf === "General") {
+			if(cell.t === 'n') {
+				if((cell.v|0) === cell.v) cell.w = SSF._general_int(cell.v);
+				else cell.w = SSF._general_num(cell.v);
+			}
+			else cell.w = SSF._general(cell.v);
+		}
+		else cell.w = xlml_format(nf||"General", cell.v);
+		if(o.cellNF) cell.z = XLMLFormatMap[nf]||nf||"General";
+	} catch(e) { if(o.WTF) throw e; }
+}
+
+function process_style_xlml(styles, stag, opts) {
+	if(opts.cellStyles) {
+		if(stag.Interior) {
+			var I = stag.Interior;
+			if(I.Pattern) I.patternType = XLMLPatternTypeMap[I.Pattern] || I.Pattern;
+		}
+	}
+	styles[stag.ID] = stag;
+}
+
+/* TODO: there must exist some form of OSP-blessed spec */
+function parse_xlml_data(xml, ss, data, cell, base, styles, csty, row, o) {
+	var nf = "General", sid = cell.StyleID, S = {}; o = o || {};
+	var interiors = [];
+	if(sid === undefined && row) sid = row.StyleID;
+	if(sid === undefined && csty) sid = csty.StyleID;
+	while(styles[sid] !== undefined) {
+		if(styles[sid].nf) nf = styles[sid].nf;
+		if(styles[sid].Interior) interiors.push(styles[sid].Interior);
+		if(!styles[sid].Parent) break;
+		sid = styles[sid].Parent;
+	}
+	switch(data.Type) {
+		case 'Boolean':
+			cell.t = 'b';
+			cell.v = parsexmlbool(xml);
+			break;
+		case 'String':
+			cell.t = 's'; cell.r = xlml_fixstr(unescapexml(xml));
+			cell.v = xml.indexOf("<") > -1 ? ss : cell.r;
+			break;
+		case 'DateTime':
+			cell.v = (Date.parse(xml) - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);
+			if(cell.v !== cell.v) cell.v = unescapexml(xml);
+			else if(cell.v >= 1 && cell.v<60) cell.v = cell.v -1;
+			if(!nf || nf == "General") nf = "yyyy-mm-dd";
+			/* falls through */
+		case 'Number':
+			if(cell.v === undefined) cell.v=+xml;
+			if(!cell.t) cell.t = 'n';
+			break;
+		case 'Error': cell.t = 'e'; cell.v = RBErr[xml]; cell.w = xml; break;
+		default: cell.t = 's'; cell.v = xlml_fixstr(ss); break;
+	}
+	safe_format_xlml(cell, nf, o);
+	if(o.cellFormula != null && cell.Formula) {
+		cell.f = rc_to_a1(unescapexml(cell.Formula), base);
+		cell.Formula = undefined;
+	}
+	if(o.cellStyles) {
+		interiors.forEach(function(x) {
+			if(!S.patternType && x.patternType) S.patternType = x.patternType;
+		});
+		cell.s = S;
+	}
+	cell.ixfe = cell.StyleID !== undefined ? cell.StyleID : 'Default';
+}
+
+function xlml_clean_comment(comment) {
+	comment.t = comment.v;
+	comment.v = comment.w = comment.ixfe = undefined;
+}
+
+function xlml_normalize(d) {
+	if(has_buf && Buffer.isBuffer(d)) return d.toString('utf8');
+	if(typeof d === 'string') return d;
+	throw "badf";
+}
+
+/* TODO: Everything */
+var xlmlregex = /<(\/?)([a-z0-9]*:|)(\w+)[^>]*>/mg;
+function parse_xlml_xml(d, opts) {
+	var str = xlml_normalize(d);
+	var Rn;
+	var state = [], tmp;
+	var sheets = {}, sheetnames = [], cursheet = {}, sheetname = "";
+	var table = {}, cell = {}, row = {}, dtag, didx;
+	var c = 0, r = 0;
+	var refguess = {s: {r:1000000, c:1000000}, e: {r:0, c:0} };
+	var styles = {}, stag = {};
+	var ss = "", fidx = 0;
+	var mergecells = [];
+	var Props = {}, Custprops = {}, pidx = 0, cp = {};
+	var comments = [], comment = {};
+	var cstys = [], csty;
+	xlmlregex.lastIndex = 0;
+	while((Rn = xlmlregex.exec(str))) switch(Rn[3]) {
+		case 'Data':
+			if(state[state.length-1][1]) break;
+			if(Rn[1]==='/') parse_xlml_data(str.slice(didx, Rn.index), ss, dtag, state[state.length-1][0]=="Comment"?comment:cell, {c:c,r:r}, styles, cstys[c], row, opts);
+			else { ss = ""; dtag = xlml_parsexmltag(Rn[0]); didx = Rn.index + Rn[0].length; }
+			break;
+		case 'Cell':
+			if(Rn[1]==='/'){
+				if(comments.length > 0) cell.c = comments;
+				if((!opts.sheetRows || opts.sheetRows > r) && cell.v !== undefined) cursheet[encode_col(c) + encode_row(r)] = cell;
+				if(cell.HRef) {
+					cell.l = {Target:cell.HRef, tooltip:cell.HRefScreenTip};
+					cell.HRef = cell.HRefScreenTip = undefined;
+				}
+				if(cell.MergeAcross || cell.MergeDown) {
+					var cc = c + (parseInt(cell.MergeAcross,10)|0);
+					var rr = r + (parseInt(cell.MergeDown,10)|0);
+					mergecells.push({s:{c:c,r:r},e:{c:cc,r:rr}});
+				}
+				++c;
+				if(cell.MergeAcross) c += +cell.MergeAcross;
+			} else {
+				cell = xlml_parsexmltagobj(Rn[0]);
+				if(cell.Index) c = +cell.Index - 1;
+				if(c < refguess.s.c) refguess.s.c = c;
+				if(c > refguess.e.c) refguess.e.c = c;
+				if(Rn[0].substr(-2) === "/>") ++c;
+				comments = [];
+			}
+			break;
+		case 'Row':
+			if(Rn[1]==='/' || Rn[0].substr(-2) === "/>") {
+				if(r < refguess.s.r) refguess.s.r = r;
+				if(r > refguess.e.r) refguess.e.r = r;
+				if(Rn[0].substr(-2) === "/>") {
+					row = xlml_parsexmltag(Rn[0]);
+					if(row.Index) r = +row.Index - 1;
+				}
+				c = 0; ++r;
+			} else {
+				row = xlml_parsexmltag(Rn[0]);
+				if(row.Index) r = +row.Index - 1;
+			}
+			break;
+		case 'Worksheet': /* TODO: read range from FullRows/FullColumns */
+			if(Rn[1]==='/'){
+				if((tmp=state.pop())[0]!==Rn[3]) throw "Bad state: "+tmp;
+				sheetnames.push(sheetname);
+				if(refguess.s.r <= refguess.e.r && refguess.s.c <= refguess.e.c) cursheet["!ref"] = encode_range(refguess);
+				if(mergecells.length) cursheet["!merges"] = mergecells;
+				sheets[sheetname] = cursheet;
+			} else {
+				refguess = {s: {r:1000000, c:1000000}, e: {r:0, c:0} };
+				r = c = 0;
+				state.push([Rn[3], false]);
+				tmp = xlml_parsexmltag(Rn[0]);
+				sheetname = tmp.Name;
+				cursheet = {};
+				mergecells = [];
+			}
+			break;
+		case 'Table':
+			if(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw "Bad state: "+tmp;}
+			else if(Rn[0].slice(-2) == "/>") break;
+			else {
+				table = xlml_parsexmltag(Rn[0]);
+				state.push([Rn[3], false]);
+				cstys = [];
+			}
+			break;
+
+		case 'Style':
+			if(Rn[1]==='/') process_style_xlml(styles, stag, opts);
+			else stag = xlml_parsexmltag(Rn[0]);
+			break;
+
+		case 'NumberFormat':
+			stag.nf = xlml_parsexmltag(Rn[0]).Format || "General";
+			break;
+
+		case 'Column':
+			if(state[state.length-1][0] !== 'Table') break;
+			csty = xlml_parsexmltag(Rn[0]);
+			cstys[(csty.Index-1||cstys.length)] = csty;
+			for(var i = 0; i < +csty.Span; ++i) cstys[cstys.length] = csty;
+			break;
+
+		case 'NamedRange': break;
+		case 'NamedCell': break;
+		case 'B': break;
+		case 'I': break;
+		case 'U': break;
+		case 'S': break;
+		case 'Sub': break;
+		case 'Sup': break;
+		case 'Span': break;
+		case 'Border': break;
+		case 'Alignment': break;
+		case 'Borders': break;
+		case 'Font':
+			if(Rn[0].substr(-2) === "/>") break;
+			else if(Rn[1]==="/") ss += str.slice(fidx, Rn.index);
+			else fidx = Rn.index + Rn[0].length;
+			break;
+		case 'Interior':
+			if(!opts.cellStyles) break;
+			stag.Interior = xlml_parsexmltag(Rn[0]);
+			break;
+		case 'Protection': break;
+
+		case 'Author':
+		case 'Title':
+		case 'Description':
+		case 'Created':
+		case 'Keywords':
+		case 'Subject':
+		case 'Category':
+		case 'Company':
+		case 'LastAuthor':
+		case 'LastSaved':
+		case 'LastPrinted':
+		case 'Version':
+		case 'Revision':
+		case 'TotalTime':
+		case 'HyperlinkBase':
+		case 'Manager':
+			if(Rn[0].substr(-2) === "/>") break;
+			else if(Rn[1]==="/") xlml_set_prop(Props, Rn[3], str.slice(pidx, Rn.index));
+			else pidx = Rn.index + Rn[0].length;
+			break;
+		case 'Paragraphs': break;
+
+		case 'Styles':
+		case 'Workbook':
+			if(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw "Bad state: "+tmp;}
+			else state.push([Rn[3], false]);
+			break;
+
+		case 'Comment':
+			if(Rn[1]==='/'){
+				if((tmp=state.pop())[0]!==Rn[3]) throw "Bad state: "+tmp;
+				xlml_clean_comment(comment);
+				comments.push(comment);
+			} else {
+				state.push([Rn[3], false]);
+				tmp = xlml_parsexmltag(Rn[0]);
+				comment = {a:tmp.Author};
+			}
+			break;
+
+		case 'Name': break;
+
+		case 'ComponentOptions':
+		case 'DocumentProperties':
+		case 'CustomDocumentProperties':
+		case 'OfficeDocumentSettings':
+		case 'PivotTable':
+		case 'PivotCache':
+		case 'Names':
+		case 'MapInfo':
+		case 'PageBreaks':
+		case 'QueryTable':
+		case 'DataValidation':
+		case 'AutoFilter':
+		case 'Sorting':
+		case 'Schema':
+		case 'data':
+		case 'ConditionalFormatting':
+		case 'SmartTagType':
+		case 'SmartTags':
+		case 'ExcelWorkbook':
+		case 'WorkbookOptions':
+		case 'WorksheetOptions':
+			if(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw "Bad state: "+tmp;}
+			else if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);
+			break;
+
+		default:
+			var seen = true;
+			switch(state[state.length-1][0]) {
+				/* OfficeDocumentSettings */
+				case 'OfficeDocumentSettings': switch(Rn[3]) {
+					case 'AllowPNG': break;
+					case 'RemovePersonalInformation': break;
+					case 'DownloadComponents': break;
+					case 'LocationOfComponents': break;
+					case 'Colors': break;
+					case 'Color': break;
+					case 'Index': break;
+					case 'RGB': break;
+					case 'PixelsPerInch': break;
+					case 'TargetScreenSize': break;
+					case 'ReadOnlyRecommended': break;
+					default: seen = false;
+				} break;
+
+				/* ComponentOptions */
+				case 'ComponentOptions': switch(Rn[3]) {
+					case 'Toolbar': break;
+					case 'HideOfficeLogo': break;
+					case 'SpreadsheetAutoFit': break;
+					case 'Label': break;
+					case 'Caption': break;
+					case 'MaxHeight': break;
+					case 'MaxWidth': break;
+					case 'NextSheetNumber': break;
+					default: seen = false;
+				} break;
+
+				/* ExcelWorkbook */
+				case 'ExcelWorkbook': switch(Rn[3]) {
+					case 'WindowHeight': break;
+					case 'WindowWidth': break;
+					case 'WindowTopX': break;
+					case 'WindowTopY': break;
+					case 'TabRatio': break;
+					case 'ProtectStructure': break;
+					case 'ProtectWindows': break;
+					case 'ActiveSheet': break;
+					case 'DisplayInkNotes': break;
+					case 'FirstVisibleSheet': break;
+					case 'SupBook': break;
+					case 'SheetName': break;
+					case 'SheetIndex': break;
+					case 'SheetIndexFirst': break;
+					case 'SheetIndexLast': break;
+					case 'Dll': break;
+					case 'AcceptLabelsInFormulas': break;
+					case 'DoNotSaveLinkValues': break;
+					case 'Date1904': break;
+					case 'Iteration': break;
+					case 'MaxIterations': break;
+					case 'MaxChange': break;
+					case 'Path': break;
+					case 'Xct': break;
+					case 'Count': break;
+					case 'SelectedSheets': break;
+					case 'Calculation': break;
+					case 'Uncalced': break;
+					case 'StartupPrompt': break;
+					case 'Crn': break;
+					case 'ExternName': break;
+					case 'Formula': break;
+					case 'ColFirst': break;
+					case 'ColLast': break;
+					case 'WantAdvise': break;
+					case 'Boolean': break;
+					case 'Error': break;
+					case 'Text': break;
+					case 'OLE': break;
+					case 'NoAutoRecover': break;
+					case 'PublishObjects': break;
+					case 'DoNotCalculateBeforeSave': break;
+					case 'Number': break;
+					case 'RefModeR1C1': break;
+					case 'EmbedSaveSmartTags': break;
+					default: seen = false;
+				} break;
+
+				/* WorkbookOptions */
+				case 'WorkbookOptions': switch(Rn[3]) {
+					case 'OWCVersion': break;
+					case 'Height': break;
+					case 'Width': break;
+					default: seen = false;
+				} break;
+
+				/* WorksheetOptions */
+				case 'WorksheetOptions': switch(Rn[3]) {
+					case 'Unsynced': break;
+					case 'Visible': break;
+					case 'Print': break;
+					case 'Panes': break;
+					case 'Scale': break;
+					case 'Pane': break;
+					case 'Number': break;
+					case 'Layout': break;
+					case 'Header': break;
+					case 'Footer': break;
+					case 'PageSetup': break;
+					case 'PageMargins': break;
+					case 'Selected': break;
+					case 'ProtectObjects': break;
+					case 'EnableSelection': break;
+					case 'ProtectScenarios': break;
+					case 'ValidPrinterInfo': break;
+					case 'HorizontalResolution': break;
+					case 'VerticalResolution': break;
+					case 'NumberofCopies': break;
+					case 'ActiveRow': break;
+					case 'ActiveCol': break;
+					case 'ActivePane': break;
+					case 'TopRowVisible': break;
+					case 'TopRowBottomPane': break;
+					case 'LeftColumnVisible': break;
+					case 'LeftColumnRightPane': break;
+					case 'FitToPage': break;
+					case 'RangeSelection': break;
+					case 'PaperSizeIndex': break;
+					case 'PageLayoutZoom': break;
+					case 'PageBreakZoom': break;
+					case 'FilterOn': break;
+					case 'DoNotDisplayGridlines': break;
+					case 'SplitHorizontal': break;
+					case 'SplitVertical': break;
+					case 'FreezePanes': break;
+					case 'FrozenNoSplit': break;
+					case 'FitWidth': break;
+					case 'FitHeight': break;
+					case 'CommentsLayout': break;
+					case 'Zoom': break;
+					case 'LeftToRight': break;
+					case 'Gridlines': break;
+					case 'AllowSort': break;
+					case 'AllowFilter': break;
+					case 'AllowInsertRows': break;
+					case 'AllowDeleteRows': break;
+					case 'AllowInsertCols': break;
+					case 'AllowDeleteCols': break;
+					case 'AllowInsertHyperlinks': break;
+					case 'AllowFormatCells': break;
+					case 'AllowSizeCols': break;
+					case 'AllowSizeRows': break;
+					case 'NoSummaryRowsBelowDetail': break;
+					case 'TabColorIndex': break;
+					case 'DoNotDisplayHeadings': break;
+					case 'ShowPageLayoutZoom': break;
+					case 'NoSummaryColumnsRightDetail': break;
+					case 'BlackAndWhite': break;
+					case 'DoNotDisplayZeros': break;
+					case 'DisplayPageBreak': break;
+					case 'RowColHeadings': break;
+					case 'DoNotDisplayOutline': break;
+					case 'NoOrientation': break;
+					case 'AllowUsePivotTables': break;
+					case 'ZeroHeight': break;
+					case 'ViewableRange': break;
+					case 'Selection': break;
+					case 'ProtectContents': break;
+					default: seen = false;
+				} break;
+
+				/* PivotTable */
+				case 'PivotTable': case 'PivotCache': switch(Rn[3]) {
+					case 'ImmediateItemsOnDrop': break;
+					case 'ShowPageMultipleItemLabel': break;
+					case 'CompactRowIndent': break;
+					case 'Location': break;
+					case 'PivotField': break;
+					case 'Orientation': break;
+					case 'LayoutForm': break;
+					case 'LayoutSubtotalLocation': break;
+					case 'LayoutCompactRow': break;
+					case 'Position': break;
+					case 'PivotItem': break;
+					case 'DataType': break;
+					case 'DataField': break;
+					case 'SourceName': break;
+					case 'ParentField': break;
+					case 'PTLineItems': break;
+					case 'PTLineItem': break;
+					case 'CountOfSameItems': break;
+					case 'Item': break;
+					case 'ItemType': break;
+					case 'PTSource': break;
+					case 'CacheIndex': break;
+					case 'ConsolidationReference': break;
+					case 'FileName': break;
+					case 'Reference': break;
+					case 'NoColumnGrand': break;
+					case 'NoRowGrand': break;
+					case 'BlankLineAfterItems': break;
+					case 'Hidden': break;
+					case 'Subtotal': break;
+					case 'BaseField': break;
+					case 'MapChildItems': break;
+					case 'Function': break;
+					case 'RefreshOnFileOpen': break;
+					case 'PrintSetTitles': break;
+					case 'MergeLabels': break;
+					case 'DefaultVersion': break;
+					case 'RefreshName': break;
+					case 'RefreshDate': break;
+					case 'RefreshDateCopy': break;
+					case 'VersionLastRefresh': break;
+					case 'VersionLastUpdate': break;
+					case 'VersionUpdateableMin': break;
+					case 'VersionRefreshableMin': break;
+					case 'Calculation': break;
+					default: seen = false;
+				} break;
+
+				/* PageBreaks */
+				case 'PageBreaks': switch(Rn[3]) {
+					case 'ColBreaks': break;
+					case 'ColBreak': break;
+					case 'RowBreaks': break;
+					case 'RowBreak': break;
+					case 'ColStart': break;
+					case 'ColEnd': break;
+					case 'RowEnd': break;
+					default: seen = false;
+				} break;
+
+				/* AutoFilter */
+				case 'AutoFilter': switch(Rn[3]) {
+					case 'AutoFilterColumn': break;
+					case 'AutoFilterCondition': break;
+					case 'AutoFilterAnd': break;
+					case 'AutoFilterOr': break;
+					default: seen = false;
+				} break;
+
+				/* QueryTable */
+				case 'QueryTable': switch(Rn[3]) {
+					case 'Id': break;
+					case 'AutoFormatFont': break;
+					case 'AutoFormatPattern': break;
+					case 'QuerySource': break;
+					case 'QueryType': break;
+					case 'EnableRedirections': break;
+					case 'RefreshedInXl9': break;
+					case 'URLString': break;
+					case 'HTMLTables': break;
+					case 'Connection': break;
+					case 'CommandText': break;
+					case 'RefreshInfo': break;
+					case 'NoTitles': break;
+					case 'NextId': break;
+					case 'ColumnInfo': break;
+					case 'OverwriteCells': break;
+					case 'DoNotPromptForFile': break;
+					case 'TextWizardSettings': break;
+					case 'Source': break;
+					case 'Number': break;
+					case 'Decimal': break;
+					case 'ThousandSeparator': break;
+					case 'TrailingMinusNumbers': break;
+					case 'FormatSettings': break;
+					case 'FieldType': break;
+					case 'Delimiters': break;
+					case 'Tab': break;
+					case 'Comma': break;
+					case 'AutoFormatName': break;
+					case 'VersionLastEdit': break;
+					case 'VersionLastRefresh': break;
+					default: seen = false;
+				} break;
+
+				/* Sorting */
+				case 'Sorting':
+				/* ConditionalFormatting */
+				case 'ConditionalFormatting':
+				/* DataValidation */
+				case 'DataValidation': switch(Rn[3]) {
+					case 'Range': break;
+					case 'Type': break;
+					case 'Min': break;
+					case 'Max': break;
+					case 'Sort': break;
+					case 'Descending': break;
+					case 'Order': break;
+					case 'CaseSensitive': break;
+					case 'Value': break;
+					case 'ErrorStyle': break;
+					case 'ErrorMessage': break;
+					case 'ErrorTitle': break;
+					case 'CellRangeList': break;
+					case 'InputMessage': break;
+					case 'InputTitle': break;
+					case 'ComboHide': break;
+					case 'InputHide': break;
+					case 'Condition': break;
+					case 'Qualifier': break;
+					case 'UseBlank': break;
+					case 'Value1': break;
+					case 'Value2': break;
+					case 'Format': break;
+					default: seen = false;
+				} break;
+
+				/* MapInfo (schema) */
+				case 'MapInfo': case 'Schema': case 'data': switch(Rn[3]) {
+					case 'Map': break;
+					case 'Entry': break;
+					case 'Range': break;
+					case 'XPath': break;
+					case 'Field': break;
+					case 'XSDType': break;
+					case 'FilterOn': break;
+					case 'Aggregate': break;
+					case 'ElementType': break;
+					case 'AttributeType': break;
+				/* These are from xsd (XML Schema Definition) */
+					case 'schema':
+					case 'element':
+					case 'complexType':
+					case 'datatype':
+					case 'all':
+					case 'attribute':
+					case 'extends': break;
+
+					case 'row': break;
+					default: seen = false;
+				} break;
+
+				/* SmartTags (can be anything) */
+				case 'SmartTags': break;
+
+				default: seen = false; break;
+			}
+			if(seen) break;
+			/* CustomDocumentProperties */
+			if(!state[state.length-1][1]) throw 'Unrecognized tag: ' + Rn[3] + "|" + state.join("|");
+			if(state[state.length-1][0]==='CustomDocumentProperties') {
+				if(Rn[0].substr(-2) === "/>") break;
+				else if(Rn[1]==="/") xlml_set_custprop(Custprops, Rn, cp, str.slice(pidx, Rn.index));
+				else { cp = Rn; pidx = Rn.index + Rn[0].length; }
+				break;
+			}
+			if(opts.WTF) throw 'Unrecognized tag: ' + Rn[3] + "|" + state.join("|");
+	}
+	var out = {};
+	if(!opts.bookSheets && !opts.bookProps) out.Sheets = sheets;
+	out.SheetNames = sheetnames;
+	out.SSF = SSF.get_table();
+	out.Props = Props;
+	out.Custprops = Custprops;
+	return out;
+}
+
+function parse_xlml(data, opts) {
+	fix_read_opts(opts=opts||{});
+	switch(opts.type||"base64") {
+		case "base64": return parse_xlml_xml(Base64.decode(data), opts);
+		case "binary": case "buffer": case "file": return parse_xlml_xml(data, opts);
+		case "array": return parse_xlml_xml(data.map(_chr).join(""), opts);
+	}
+}
+
+function write_xlml(wb, opts) { }
+
+/* [MS-OLEDS] 2.3.8 CompObjStream */
+function parse_compobj(obj) {
+	var v = {};
+	var o = obj.content;
+
+	/* [MS-OLEDS] 2.3.7 CompObjHeader -- All fields MUST be ignored */
+	var l = 28, m;
+	m = __lpstr(o, l);
+	l += 4 + __readUInt32LE(o,l);
+	v.UserType = m;
+
+	/* [MS-OLEDS] 2.3.1 ClipboardFormatOrAnsiString */
+	m = __readUInt32LE(o,l); l+= 4;
+	switch(m) {
+		case 0x00000000: break;
+		case 0xffffffff: case 0xfffffffe: l+=4; break;
+		default:
+			if(m > 0x190) throw new Error("Unsupported Clipboard: " + m.toString(16));
+			l += m;
+	}
+
+	m = __lpstr(o, l); l += m.length === 0 ? 0 : 5 + m.length; v.Reserved1 = m;
+
+	if((m = __readUInt32LE(o,l)) !== 0x71b2e9f4) return v;
+	throw "Unsupported Unicode Extension";
+}
+
+/* 2.4.58 Continue logic */
+function slurp(R, blob, length, opts) {
+	var l = length;
+	var bufs = [];
+	var d = blob.slice(blob.l,blob.l+l);
+	if(opts && opts.enc && opts.enc.insitu_decrypt) switch(R.n) {
+	case 'BOF': case 'FilePass': case 'FileLock': case 'InterfaceHdr': case 'RRDInfo': case 'RRDHead': case 'UsrExcl': break;
+	default:
+		if(d.length === 0) break;
+		opts.enc.insitu_decrypt(d);
+	}
+	bufs.push(d);
+	blob.l += l;
+	var next = (XLSRecordEnum[__readUInt16LE(blob,blob.l)]);
+	while(next != null && next.n === 'Continue') {
+		l = __readUInt16LE(blob,blob.l+2);
+		bufs.push(blob.slice(blob.l+4,blob.l+4+l));
+		blob.l += 4+l;
+		next = (XLSRecordEnum[__readUInt16LE(blob, blob.l)]);
+	}
+	var b = bconcat(bufs);
+	prep_blob(b, 0);
+	var ll = 0; b.lens = [];
+	for(var j = 0; j < bufs.length; ++j) { b.lens.push(ll); ll += bufs[j].length; }
+	return R.f(b, b.length, opts);
+}
+
+function safe_format_xf(p, opts, date1904) {
+	if(!p.XF) return;
+	try {
+		var fmtid = p.XF.ifmt||0;
+		if(p.t === 'e') { p.w = p.w || BErr[p.v]; }
+		else if(fmtid === 0) {
+			if(p.t === 'n') {
+				if((p.v|0) === p.v) p.w = SSF._general_int(p.v);
+				else p.w = SSF._general_num(p.v);
+			}
+			else p.w = SSF._general(p.v);
+		}
+		else p.w = SSF.format(fmtid,p.v, {date1904:date1904||false});
+		if(opts.cellNF) p.z = SSF._table[fmtid];
+	} catch(e) { if(opts.WTF) throw e; }
+}
+
+function make_cell(val, ixfe, t) {
+	return {v:val, ixfe:ixfe, t:t};
+}
+
+// 2.3.2
+function parse_workbook(blob, options) {
+	var wb = {opts:{}};
+	var Sheets = {};
+	var out = {};
+	var Directory = {};
+	var found_sheet = false;
+	var range = {};
+	var last_formula = null;
+	var sst = [];
+	var cur_sheet = "";
+	var Preamble = {};
+	var lastcell, last_cell, cc, cmnt, rng, rngC, rngR;
+	var shared_formulae = {};
+	var array_formulae = []; /* TODO: something more clever */
+	var temp_val;
+	var country;
+	var cell_valid = true;
+	var XFs = []; /* XF records */
+	var palette = [];
+	var get_rgb = function getrgb(icv) {
+		if(icv < 8) return XLSIcv[icv];
+		if(icv < 64) return palette[icv-8] || XLSIcv[icv];
+		return XLSIcv[icv];
+	};
+	var process_cell_style = function pcs(cell, line) {
+		var xfd = line.XF.data;
+		if(!xfd || !xfd.patternType) return;
+		line.s = {};
+		line.s.patternType = xfd.patternType;
+		var t;
+		if((t = rgb2Hex(get_rgb(xfd.icvFore)))) { line.s.fgColor = {rgb:t}; }
+		if((t = rgb2Hex(get_rgb(xfd.icvBack)))) { line.s.bgColor = {rgb:t}; }
+	};
+	var addcell = function addcell(cell, line, options) {
+		if(!cell_valid) return;
+		if(options.cellStyles && line.XF && line.XF.data) process_cell_style(cell, line);
+		lastcell = cell;
+		last_cell = encode_cell(cell);
+		if(range.s) {
+			if(cell.r < range.s.r) range.s.r = cell.r;
+			if(cell.c < range.s.c) range.s.c = cell.c;
+		}
+		if(range.e) {
+			if(cell.r + 1 > range.e.r) range.e.r = cell.r + 1;
+			if(cell.c + 1 > range.e.c) range.e.c = cell.c + 1;
+		}
+		if(options.sheetRows && lastcell.r >= options.sheetRows) cell_valid = false;
+		else out[last_cell] = line;
+	};
+	var opts = {
+		enc: false, // encrypted
+		sbcch: 0, // cch in the preceding SupBook
+		snames: [], // sheetnames
+		sharedf: shared_formulae, // shared formulae by address
+		arrayf: array_formulae, // array formulae array
+		rrtabid: [], // RRTabId
+		lastuser: "", // Last User from WriteAccess
+		biff: 8, // BIFF version
+		codepage: 0, // CP from CodePage record
+		winlocked: 0, // fLockWn from WinProtect
+		wtf: false
+	};
+	if(options.password) opts.password = options.password;
+	var mergecells = [];
+	var objects = [];
+	var supbooks = [[]]; // 1-indexed, will hold extern names
+	var sbc = 0, sbci = 0, sbcli = 0;
+	supbooks.SheetNames = opts.snames;
+	supbooks.sharedf = opts.sharedf;
+	supbooks.arrayf = opts.arrayf;
+	var last_Rn = '';
+	var file_depth = 0; /* TODO: make a real stack */
+
+	/* explicit override for some broken writers */
+	opts.codepage = 1200;
+	set_cp(1200);
+
+	while(blob.l < blob.length - 1) {
+		var s = blob.l;
+		var RecordType = blob.read_shift(2);
+		if(RecordType === 0 && last_Rn === 'EOF') break;
+		var length = (blob.l === blob.length ? 0 : blob.read_shift(2)), y;
+		var R = XLSRecordEnum[RecordType];
+		if(R && R.f) {
+			if(options.bookSheets) {
+				if(last_Rn === 'BoundSheet8' && R.n !== 'BoundSheet8') break;
+			}
+			last_Rn = R.n;
+			if(R.r === 2 || R.r == 12) {
+				var rt = blob.read_shift(2); length -= 2;
+				if(!opts.enc && rt !== RecordType) throw "rt mismatch";
+				if(R.r == 12){ blob.l += 10; length -= 10; } // skip FRT
+			}
+			//console.error(R,blob.l,length,blob.length);
+			var val;
+			if(R.n === 'EOF') val = R.f(blob, length, opts);
+			else val = slurp(R, blob, length, opts);
+			var Rn = R.n;
+			/* BIFF5 overrides */
+			if(opts.biff === 5 || opts.biff === 2) switch(Rn) {
+				case 'Lbl': Rn = 'Label'; break;
+			}
+			/* nested switch statements to workaround V8 128 limit */
+			switch(Rn) {
+				/* Workbook Options */
+				case 'Date1904': wb.opts.Date1904 = val; break;
+				case 'WriteProtect': wb.opts.WriteProtect = true; break;
+				case 'FilePass':
+					if(!opts.enc) blob.l = 0;
+					opts.enc = val;
+					if(opts.WTF) console.error(val);
+					if(!options.password) throw new Error("File is password-protected");
+					if(val.Type !== 0) throw new Error("Encryption scheme unsupported");
+					if(!val.valid) throw new Error("Password is incorrect");
+					break;
+				case 'WriteAccess': opts.lastuser = val; break;
+				case 'FileSharing': break; //TODO
+				case 'CodePage':
+					/* overrides based on test cases */
+					if(val === 0x5212) val = 1200;
+					else if(val === 0x8001) val = 1252;
+					opts.codepage = val;
+					set_cp(val);
+					break;
+				case 'RRTabId': opts.rrtabid = val; break;
+				case 'WinProtect': opts.winlocked = val; break;
+				case 'Template': break; // TODO
+				case 'RefreshAll': wb.opts.RefreshAll = val; break;
+				case 'BookBool': break; // TODO
+				case 'UsesELFs': /* if(val) console.error("Unsupported ELFs"); */ break;
+				case 'MTRSettings': {
+					if(val[0] && val[1]) throw "Unsupported threads: " + val;
+				} break; // TODO: actually support threads
+				case 'CalcCount': wb.opts.CalcCount = val; break;
+				case 'CalcDelta': wb.opts.CalcDelta = val; break;
+				case 'CalcIter': wb.opts.CalcIter = val; break;
+				case 'CalcMode': wb.opts.CalcMode = val; break;
+				case 'CalcPrecision': wb.opts.CalcPrecision = val; break;
+				case 'CalcSaveRecalc': wb.opts.CalcSaveRecalc = val; break;
+				case 'CalcRefMode': opts.CalcRefMode = val; break; // TODO: implement R1C1
+				case 'Uncalced': break;
+				case 'ForceFullCalculation': wb.opts.FullCalc = val; break;
+				case 'WsBool': break; // TODO
+				case 'XF': XFs.push(val); break;
+				case 'ExtSST': break; // TODO
+				case 'BookExt': break; // TODO
+				case 'RichTextStream': break;
+				case 'BkHim': break;
+
+				case 'SupBook': supbooks[++sbc] = [val]; sbci = 0; break;
+				case 'ExternName': supbooks[sbc][++sbci] = val; break;
+				case 'Index': break; // TODO
+				case 'Lbl': supbooks[0][++sbcli] = val; break;
+				case 'ExternSheet': supbooks[sbc] = supbooks[sbc].concat(val); sbci += val.length; break;
+
+				case 'Protect': out["!protect"] = val; break; /* for sheet or book */
+				case 'Password': if(val !== 0 && opts.WTF) console.error("Password verifier: " + val); break;
+				case 'Prot4Rev': case 'Prot4RevPass': break; /*TODO: Revision Control*/
+
+				case 'BoundSheet8': {
+					Directory[val.pos] = val;
+					opts.snames.push(val.name);
+				} break;
+				case 'EOF': {
+					if(--file_depth) break;
+					if(range.e) {
+						out["!range"] = range;
+						if(range.e.r > 0 && range.e.c > 0) {
+							range.e.r--; range.e.c--;
+							out["!ref"] = encode_range(range);
+							range.e.r++; range.e.c++;
+						}
+						if(mergecells.length > 0) out["!merges"] = mergecells;
+						if(objects.length > 0) out["!objects"] = objects;
+					}
+					if(cur_sheet === "") Preamble = out; else Sheets[cur_sheet] = out;
+					out = {};
+				} break;
+				case 'BOF': {
+					if(opts.biff !== 8);
+					else if(val.BIFFVer === 0x0500) opts.biff = 5;
+					else if(val.BIFFVer === 0x0002) opts.biff = 2;
+					else if(val.BIFFVer === 0x0007) opts.biff = 2;
+					if(file_depth++) break;
+					cell_valid = true;
+					out = {};
+					if(opts.biff === 2) {
+						if(cur_sheet === "") cur_sheet = "Sheet1";
+						range = {s:{r:0,c:0},e:{r:0,c:0}};
+					}
+					else cur_sheet = (Directory[s] || {name:""}).name;
+					mergecells = [];
+					objects = [];
+				} break;
+				case 'Number': case 'BIFF2NUM': {
+					temp_val = {ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.val, t:'n'};
+					if(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904);
+					addcell({c:val.c, r:val.r}, temp_val, options);
+				} break;
+				case 'BoolErr': {
+					temp_val = {ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.val, t:val.t};
+					if(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904);
+					addcell({c:val.c, r:val.r}, temp_val, options);
+				} break;
+				case 'RK': {
+					temp_val = {ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.rknum, t:'n'};
+					if(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904);
+					addcell({c:val.c, r:val.r}, temp_val, options);
+				} break;
+				case 'MulRk': {
+					for(var j = val.c; j <= val.C; ++j) {
+						var ixfe = val.rkrec[j-val.c][0];
+						temp_val= {ixfe:ixfe, XF:XFs[ixfe], v:val.rkrec[j-val.c][1], t:'n'};
+						if(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904);
+						addcell({c:j, r:val.r}, temp_val, options);
+					}
+				} break;
+				case 'Formula': {
+					switch(val.val) {
+						case 'String': last_formula = val; break;
+						case 'Array Formula': throw "Array Formula unsupported";
+						default:
+							temp_val = {v:val.val, ixfe:val.cell.ixfe, t:val.tt};
+							temp_val.XF = XFs[temp_val.ixfe];
+							if(options.cellFormula) temp_val.f = "="+stringify_formula(val.formula,range,val.cell,supbooks, opts);
+							if(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904);
+							addcell(val.cell, temp_val, options);
+							last_formula = val;
+					}
+				} break;
+				case 'String': {
+					if(last_formula) {
+						last_formula.val = val;
+						temp_val = {v:last_formula.val, ixfe:last_formula.cell.ixfe, t:'s'};
+						temp_val.XF = XFs[temp_val.ixfe];
+						if(options.cellFormula) temp_val.f = "="+stringify_formula(last_formula.formula, range, last_formula.cell, supbooks, opts);
+						if(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904);
+						addcell(last_formula.cell, temp_val, options);
+						last_formula = null;
+					}
+				} break;
+				case 'Array': {
+					array_formulae.push(val);
+				} break;
+				case 'ShrFmla': {
+					if(!cell_valid) break;
+					//if(options.cellFormula) out[last_cell].f = stringify_formula(val[0], range, lastcell, supbooks, opts);
+					/* TODO: capture range */
+					shared_formulae[encode_cell(last_formula.cell)]= val[0];
+				} break;
+				case 'LabelSst':
+					//temp_val={v:sst[val.isst].t, ixfe:val.ixfe, t:'s'};
+					temp_val=make_cell(sst[val.isst].t, val.ixfe, 's');
+					temp_val.XF = XFs[temp_val.ixfe];
+					if(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904);
+					addcell({c:val.c, r:val.r}, temp_val, options);
+					break;
+				case 'Label': case 'BIFF2STR':
+					/* Some writers erroneously write Label */
+					temp_val=make_cell(val.val, val.ixfe, 's');
+					temp_val.XF = XFs[temp_val.ixfe];
+					if(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904);
+					addcell({c:val.c, r:val.r}, temp_val, options);
+					break;
+				case 'Dimensions': {
+					if(file_depth === 1) range = val; /* TODO: stack */
+				} break;
+				case 'SST': {
+					sst = val;
+				} break;
+				case 'Format': { /* val = [id, fmt] */
+					SSF.load(val[1], val[0]);
+				} break;
+
+				case 'MergeCells': mergecells = mergecells.concat(val); break;
+
+				case 'Obj': objects[val.cmo[0]] = opts.lastobj = val; break;
+				case 'TxO': opts.lastobj.TxO = val; break;
+
+				case 'HLink': {
+					for(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)
+						for(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC)
+							if(out[encode_cell({c:rngC,r:rngR})])
+								out[encode_cell({c:rngC,r:rngR})].l = val[1];
+				} break;
+				case 'HLinkTooltip': {
+					for(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)
+						for(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC)
+							if(out[encode_cell({c:rngC,r:rngR})])
+								out[encode_cell({c:rngC,r:rngR})].l.tooltip = val[1];
+				} break;
+
+				/* Comments */
+				case 'Note': {
+					if(opts.biff <= 5 && opts.biff >= 2) break; /* TODO: BIFF5 */
+					cc = out[encode_cell(val[0])];
+					var noteobj = objects[val[2]];
+					if(!cc) break;
+					if(!cc.c) cc.c = [];
+					cmnt = {a:val[1],t:noteobj.TxO.t};
+					cc.c.push(cmnt);
+				} break;
+
+				default: switch(R.n) { /* nested */
+				case 'ClrtClient': break;
+				case 'XFExt': update_xfext(XFs[val.ixfe], val.ext); break;
+
+				case 'NameCmt': break;
+				case 'Header': break; // TODO
+				case 'Footer': break; // TODO
+				case 'HCenter': break; // TODO
+				case 'VCenter': break; // TODO
+				case 'Pls': break; // TODO
+				case 'Setup': break; // TODO
+				case 'DefColWidth': break; // TODO
+				case 'GCW': break;
+				case 'LHRecord': break;
+				case 'ColInfo': break; // TODO
+				case 'Row': break; // TODO
+				case 'DBCell': break; // TODO
+				case 'MulBlank': break; // TODO
+				case 'EntExU2': break; // TODO
+				case 'SxView': break; // TODO
+				case 'Sxvd': break; // TODO
+				case 'SXVI': break; // TODO
+				case 'SXVDEx': break; // TODO
+				case 'SxIvd': break; // TODO
+				case 'SXDI': break; // TODO
+				case 'SXLI': break; // TODO
+				case 'SXEx': break; // TODO
+				case 'QsiSXTag': break; // TODO
+				case 'Selection': break;
+				case 'Feat': break;
+				case 'FeatHdr': case 'FeatHdr11': break;
+				case 'Feature11': case 'Feature12': case 'List12': break;
+				case 'Blank': break;
+				case 'Country': country = val; break;
+				case 'RecalcId': break;
+				case 'DefaultRowHeight': case 'DxGCol': break; // TODO: htmlify
+				case 'Fbi': case 'Fbi2': case 'GelFrame': break;
+				case 'Font': break; // TODO
+				case 'XFCRC': break; // TODO
+				case 'Style': break; // TODO
+				case 'StyleExt': break; // TODO
+				case 'Palette': palette = val; break; // TODO
+				case 'Theme': break; // TODO
+				/* Protection */
+				case 'ScenarioProtect': break;
+				case 'ObjProtect': break;
+
+				/* Conditional Formatting */
+				case 'CondFmt12': break;
+
+				/* Table */
+				case 'Table': break; // TODO
+				case 'TableStyles': break; // TODO
+				case 'TableStyle': break; // TODO
+				case 'TableStyleElement': break; // TODO
+
+				/* PivotTable */
+				case 'SXStreamID': break; // TODO
+				case 'SXVS': break; // TODO
+				case 'DConRef': break; // TODO
+				case 'SXAddl': break; // TODO
+				case 'DConBin': break; // TODO
+				case 'DConName': break; // TODO
+				case 'SXPI': break; // TODO
+				case 'SxFormat': break; // TODO
+				case 'SxSelect': break; // TODO
+				case 'SxRule': break; // TODO
+				case 'SxFilt': break; // TODO
+				case 'SxItm': break; // TODO
+				case 'SxDXF': break; // TODO
+
+				/* Scenario Manager */
+				case 'ScenMan': break;
+
+				/* Data Consolidation */
+				case 'DCon': break;
+
+				/* Watched Cell */
+				case 'CellWatch': break;
+
+				/* Print Settings */
+				case 'PrintRowCol': break;
+				case 'PrintGrid': break;
+				case 'PrintSize': break;
+
+				case 'XCT': break;
+				case 'CRN': break;
+
+				case 'Scl': {
+					//console.log("Zoom Level:", val[0]/val[1],val);
+				} break;
+				case 'SheetExt': {
+
+				} break;
+				case 'SheetExtOptional': {
+
+				} break;
+
+				/* VBA */
+				case 'ObNoMacros': {
+
+				} break;
+				case 'ObProj': {
+
+				} break;
+				case 'CodeName': {
+
+				} break;
+				case 'GUIDTypeLib': {
+
+				} break;
+
+				case 'WOpt': break; // TODO: WTF?
+				case 'PhoneticInfo': break;
+
+				case 'OleObjectSize': break;
+
+				/* Differential Formatting */
+				case 'DXF': case 'DXFN': case 'DXFN12': case 'DXFN12List': case 'DXFN12NoCB': break;
+
+				/* Data Validation */
+				case 'Dv': case 'DVal': break;
+
+				/* Data Series */
+				case 'BRAI': case 'Series': case 'SeriesText': break;
+
+				/* Data Connection */
+				case 'DConn': break;
+				case 'DbOrParamQry': break;
+				case 'DBQueryExt': break;
+
+				/* Formatting */
+				case 'IFmtRecord': break;
+				case 'CondFmt': case 'CF': case 'CF12': case 'CFEx': break;
+
+				/* Explicitly Ignored */
+				case 'Excel9File': break;
+				case 'Units': break;
+				case 'InterfaceHdr': case 'Mms': case 'InterfaceEnd': case 'DSF': case 'BuiltInFnGroupCount':
+				/* View Stuff */
+				case 'Window1': case 'Window2': case 'HideObj': case 'GridSet': case 'Guts':
+				case 'UserBView': case 'UserSViewBegin': case 'UserSViewEnd':
+				case 'Pane': break;
+				default: switch(R.n) { /* nested */
+				/* Chart */
+				case 'Dat':
+				case 'Begin': case 'End':
+				case 'StartBlock': case 'EndBlock':
+				case 'Frame': case 'Area':
+				case 'Axis': case 'AxisLine': case 'Tick': break;
+				case 'AxesUsed':
+				case 'CrtLayout12': case 'CrtLayout12A': case 'CrtLink': case 'CrtLine': case 'CrtMlFrt': case 'CrtMlFrtContinue': break;
+				case 'LineFormat': case 'AreaFormat':
+				case 'Chart': case 'Chart3d': case 'Chart3DBarShape': case 'ChartFormat': case 'ChartFrtInfo': break;
+				case 'PlotArea': case 'PlotGrowth': break;
+				case 'SeriesList': case 'SerParent': case 'SerAuxTrend': break;
+				case 'DataFormat': case 'SerToCrt': case 'FontX': break;
+				case 'CatSerRange': case 'AxcExt': case 'SerFmt': break;
+				case 'ShtProps': break;
+				case 'DefaultText': case 'Text': case 'CatLab': break;
+				case 'DataLabExtContents': break;
+				case 'Legend': case 'LegendException': break;
+				case 'Pie': case 'Scatter': break;
+				case 'PieFormat': case 'MarkerFormat': break;
+				case 'StartObject': case 'EndObject': break;
+				case 'AlRuns': case 'ObjectLink': break;
+				case 'SIIndex': break;
+				case 'AttachedLabel': case 'YMult': break;
+
+				/* Chart Group */
+				case 'Line': case 'Bar': break;
+				case 'Surf': break;
+
+				/* Axis Group */
+				case 'AxisParent': break;
+				case 'Pos': break;
+				case 'ValueRange': break;
+
+				/* Pivot Chart */
+				case 'SXViewEx9': break; // TODO
+				case 'SXViewLink': break;
+				case 'PivotChartBits': break;
+				case 'SBaseRef': break;
+				case 'TextPropsStream': break;
+
+				/* Chart Misc */
+				case 'LnExt': break;
+				case 'MkrExt': break;
+				case 'CrtCoopt': break;
+
+				/* Query Table */
+				case 'Qsi': case 'Qsif': case 'Qsir': case 'QsiSXTag': break;
+				case 'TxtQry': break;
+
+				/* Filter */
+				case 'FilterMode': break;
+				case 'AutoFilter': case 'AutoFilterInfo': break;
+				case 'AutoFilter12': break;
+				case 'DropDownObjIds': break;
+				case 'Sort': break;
+				case 'SortData': break;
+
+				/* Drawing */
+				case 'ShapePropsStream': break;
+				case 'MsoDrawing': case 'MsoDrawingGroup': case 'MsoDrawingSelection': break;
+				case 'ImData': break;
+				/* Pub Stuff */
+				case 'WebPub': case 'AutoWebPub':
+
+				/* Print Stuff */
+				case 'RightMargin': case 'LeftMargin': case 'TopMargin': case 'BottomMargin':
+				case 'HeaderFooter': case 'HFPicture': case 'PLV':
+				case 'HorizontalPageBreaks': case 'VerticalPageBreaks':
+				/* Behavioral */
+				case 'Backup': case 'CompressPictures': case 'Compat12': break;
+
+				/* Should not Happen */
+				case 'Continue': case 'ContinueFrt12': break;
+
+				/* Future Records */
+				case 'FrtFontList': case 'FrtWrapper': break;
+
+				/* BIFF5 records */
+				case 'ExternCount': break;
+				case 'RString': break;
+				case 'TabIdConf': case 'Radar': case 'RadarArea': case 'DropBar': case 'Intl': case 'CoordList': case 'SerAuxErrBar': break;
+
+				default: switch(R.n) { /* nested */
+				/* Miscellaneous */
+				case 'SCENARIO': case 'DConBin': case 'PicF': case 'DataLabExt':
+				case 'Lel': case 'BopPop': case 'BopPopCustom': case 'RealTimeData':
+				case 'Name': break;
+				default: if(options.WTF) throw 'Unrecognized Record ' + R.n;
+			}}}}
+		} else blob.l += length;
+	}
+	var sheetnamesraw = opts.biff === 2 ? ['Sheet1'] : Object.keys(Directory).sort(function(a,b) { return Number(a) - Number(b); }).map(function(x){return Directory[x].name;});
+	var sheetnames = sheetnamesraw.slice();
+	wb.Directory=sheetnamesraw;
+	wb.SheetNames=sheetnamesraw;
+	if(!options.bookSheets) wb.Sheets=Sheets;
+	wb.Preamble=Preamble;
+	wb.Strings = sst;
+	wb.SSF = SSF.get_table();
+	if(opts.enc) wb.Encryption = opts.enc;
+	wb.Metadata = {};
+	if(country !== undefined) wb.Metadata.Country = country;
+	return wb;
+}
+
+function parse_xlscfb(cfb, options) {
+if(!options) options = {};
+fix_read_opts(options);
+reset_cp();
+var CompObj, Summary, Workbook;
+if(cfb.find) {
+	CompObj = cfb.find('!CompObj');
+	Summary = cfb.find('!SummaryInformation');
+	Workbook = cfb.find('/Workbook');
+} else {
+	prep_blob(cfb, 0);
+	Workbook = {content: cfb};
+}
+
+if(!Workbook) Workbook = cfb.find('/Book');
+var CompObjP, SummaryP, WorkbookP;
+
+if(CompObj) CompObjP = parse_compobj(CompObj);
+if(options.bookProps && !options.bookSheets) WorkbookP = {};
+else {
+	if(Workbook) WorkbookP = parse_workbook(Workbook.content, options, !!Workbook.find);
+	else throw new Error("Cannot find Workbook stream");
+}
+
+if(cfb.find) parse_props(cfb);
+
+var props = {};
+for(var y in cfb.Summary) props[y] = cfb.Summary[y];
+for(y in cfb.DocSummary) props[y] = cfb.DocSummary[y];
+WorkbookP.Props = WorkbookP.Custprops = props; /* TODO: split up properties */
+if(options.bookFiles) WorkbookP.cfb = cfb;
+WorkbookP.CompObjP = CompObjP;
+return WorkbookP;
+}
+
+/* TODO: WTF */
+function parse_props(cfb) {
+	/* [MS-OSHARED] 2.3.3.2.2 Document Summary Information Property Set */
+	var DSI = cfb.find('!DocumentSummaryInformation');
+	if(DSI) try { cfb.DocSummary = parse_PropertySetStream(DSI, DocSummaryPIDDSI); } catch(e) {}
+
+	/* [MS-OSHARED] 2.3.3.2.1 Summary Information Property Set*/
+	var SI = cfb.find('!SummaryInformation');
+	if(SI) try { cfb.Summary = parse_PropertySetStream(SI, SummaryPIDSI); } catch(e) {}
+}
+
+/* [MS-XLSB] 2.3 Record Enumeration */
+var XLSBRecordEnum = {
+	0x0000: { n:"BrtRowHdr", f:parse_BrtRowHdr },
+	0x0001: { n:"BrtCellBlank", f:parse_BrtCellBlank },
+	0x0002: { n:"BrtCellRk", f:parse_BrtCellRk },
+	0x0003: { n:"BrtCellError", f:parse_BrtCellError },
+	0x0004: { n:"BrtCellBool", f:parse_BrtCellBool },
+	0x0005: { n:"BrtCellReal", f:parse_BrtCellReal },
+	0x0006: { n:"BrtCellSt", f:parse_BrtCellSt },
+	0x0007: { n:"BrtCellIsst", f:parse_BrtCellIsst },
+	0x0008: { n:"BrtFmlaString", f:parse_BrtFmlaString },
+	0x0009: { n:"BrtFmlaNum", f:parse_BrtFmlaNum },
+	0x000A: { n:"BrtFmlaBool", f:parse_BrtFmlaBool },
+	0x000B: { n:"BrtFmlaError", f:parse_BrtFmlaError },
+	0x0010: { n:"BrtFRTArchID$", f:parse_BrtFRTArchID$ },
+	0x0013: { n:"BrtSSTItem", f:parse_RichStr },
+	0x0014: { n:"BrtPCDIMissing", f:parsenoop },
+	0x0015: { n:"BrtPCDINumber", f:parsenoop },
+	0x0016: { n:"BrtPCDIBoolean", f:parsenoop },
+	0x0017: { n:"BrtPCDIError", f:parsenoop },
+	0x0018: { n:"BrtPCDIString", f:parsenoop },
+	0x0019: { n:"BrtPCDIDatetime", f:parsenoop },
+	0x001A: { n:"BrtPCDIIndex", f:parsenoop },
+	0x001B: { n:"BrtPCDIAMissing", f:parsenoop },
+	0x001C: { n:"BrtPCDIANumber", f:parsenoop },
+	0x001D: { n:"BrtPCDIABoolean", f:parsenoop },
+	0x001E: { n:"BrtPCDIAError", f:parsenoop },
+	0x001F: { n:"BrtPCDIAString", f:parsenoop },
+	0x0020: { n:"BrtPCDIADatetime", f:parsenoop },
+	0x0021: { n:"BrtPCRRecord", f:parsenoop },
+	0x0022: { n:"BrtPCRRecordDt", f:parsenoop },
+	0x0023: { n:"BrtFRTBegin", f:parsenoop },
+	0x0024: { n:"BrtFRTEnd", f:parsenoop },
+	0x0025: { n:"BrtACBegin", f:parsenoop },
+	0x0026: { n:"BrtACEnd", f:parsenoop },
+	0x0027: { n:"BrtName", f:parsenoop },
+	0x0028: { n:"BrtIndexRowBlock", f:parsenoop },
+	0x002A: { n:"BrtIndexBlock", f:parsenoop },
+	0x002B: { n:"BrtFont", f:parse_BrtFont },
+	0x002C: { n:"BrtFmt", f:parse_BrtFmt },
+	0x002D: { n:"BrtFill", f:parsenoop },
+	0x002E: { n:"BrtBorder", f:parsenoop },
+	0x002F: { n:"BrtXF", f:parse_BrtXF },
+	0x0030: { n:"BrtStyle", f:parsenoop },
+	0x0031: { n:"BrtCellMeta", f:parsenoop },
+	0x0032: { n:"BrtValueMeta", f:parsenoop },
+	0x0033: { n:"BrtMdb", f:parsenoop },
+	0x0034: { n:"BrtBeginFmd", f:parsenoop },
+	0x0035: { n:"BrtEndFmd", f:parsenoop },
+	0x0036: { n:"BrtBeginMdx", f:parsenoop },
+	0x0037: { n:"BrtEndMdx", f:parsenoop },
+	0x0038: { n:"BrtBeginMdxTuple", f:parsenoop },
+	0x0039: { n:"BrtEndMdxTuple", f:parsenoop },
+	0x003A: { n:"BrtMdxMbrIstr", f:parsenoop },
+	0x003B: { n:"BrtStr", f:parsenoop },
+	0x003C: { n:"BrtColInfo", f:parsenoop },
+	0x003E: { n:"BrtCellRString", f:parsenoop },
+	0x003F: { n:"BrtCalcChainItem$", f:parse_BrtCalcChainItem$ },
+	0x0040: { n:"BrtDVal", f:parsenoop },
+	0x0041: { n:"BrtSxvcellNum", f:parsenoop },
+	0x0042: { n:"BrtSxvcellStr", f:parsenoop },
+	0x0043: { n:"BrtSxvcellBool", f:parsenoop },
+	0x0044: { n:"BrtSxvcellErr", f:parsenoop },
+	0x0045: { n:"BrtSxvcellDate", f:parsenoop },
+	0x0046: { n:"BrtSxvcellNil", f:parsenoop },
+	0x0080: { n:"BrtFileVersion", f:parsenoop },
+	0x0081: { n:"BrtBeginSheet", f:parsenoop },
+	0x0082: { n:"BrtEndSheet", f:parsenoop },
+	0x0083: { n:"BrtBeginBook", f:parsenoop, p:0 },
+	0x0084: { n:"BrtEndBook", f:parsenoop },
+	0x0085: { n:"BrtBeginWsViews", f:parsenoop },
+	0x0086: { n:"BrtEndWsViews", f:parsenoop },
+	0x0087: { n:"BrtBeginBookViews", f:parsenoop },
+	0x0088: { n:"BrtEndBookViews", f:parsenoop },
+	0x0089: { n:"BrtBeginWsView", f:parsenoop },
+	0x008A: { n:"BrtEndWsView", f:parsenoop },
+	0x008B: { n:"BrtBeginCsViews", f:parsenoop },
+	0x008C: { n:"BrtEndCsViews", f:parsenoop },
+	0x008D: { n:"BrtBeginCsView", f:parsenoop },
+	0x008E: { n:"BrtEndCsView", f:parsenoop },
+	0x008F: { n:"BrtBeginBundleShs", f:parsenoop },
+	0x0090: { n:"BrtEndBundleShs", f:parsenoop },
+	0x0091: { n:"BrtBeginSheetData", f:parsenoop },
+	0x0092: { n:"BrtEndSheetData", f:parsenoop },
+	0x0093: { n:"BrtWsProp", f:parse_BrtWsProp },
+	0x0094: { n:"BrtWsDim", f:parse_BrtWsDim, p:16 },
+	0x0097: { n:"BrtPane", f:parsenoop },
+	0x0098: { n:"BrtSel", f:parsenoop },
+	0x0099: { n:"BrtWbProp", f:parse_BrtWbProp },
+	0x009A: { n:"BrtWbFactoid", f:parsenoop },
+	0x009B: { n:"BrtFileRecover", f:parsenoop },
+	0x009C: { n:"BrtBundleSh", f:parse_BrtBundleSh },
+	0x009D: { n:"BrtCalcProp", f:parsenoop },
+	0x009E: { n:"BrtBookView", f:parsenoop },
+	0x009F: { n:"BrtBeginSst", f:parse_BrtBeginSst },
+	0x00A0: { n:"BrtEndSst", f:parsenoop },
+	0x00A1: { n:"BrtBeginAFilter", f:parsenoop },
+	0x00A2: { n:"BrtEndAFilter", f:parsenoop },
+	0x00A3: { n:"BrtBeginFilterColumn", f:parsenoop },
+	0x00A4: { n:"BrtEndFilterColumn", f:parsenoop },
+	0x00A5: { n:"BrtBeginFilters", f:parsenoop },
+	0x00A6: { n:"BrtEndFilters", f:parsenoop },
+	0x00A7: { n:"BrtFilter", f:parsenoop },
+	0x00A8: { n:"BrtColorFilter", f:parsenoop },
+	0x00A9: { n:"BrtIconFilter", f:parsenoop },
+	0x00AA: { n:"BrtTop10Filter", f:parsenoop },
+	0x00AB: { n:"BrtDynamicFilter", f:parsenoop },
+	0x00AC: { n:"BrtBeginCustomFilters", f:parsenoop },
+	0x00AD: { n:"BrtEndCustomFilters", f:parsenoop },
+	0x00AE: { n:"BrtCustomFilter", f:parsenoop },
+	0x00AF: { n:"BrtAFilterDateGroupItem", f:parsenoop },
+	0x00B0: { n:"BrtMergeCell", f:parse_BrtMergeCell },
+	0x00B1: { n:"BrtBeginMergeCells", f:parsenoop },
+	0x00B2: { n:"BrtEndMergeCells", f:parsenoop },
+	0x00B3: { n:"BrtBeginPivotCacheDef", f:parsenoop },
+	0x00B4: { n:"BrtEndPivotCacheDef", f:parsenoop },
+	0x00B5: { n:"BrtBeginPCDFields", f:parsenoop },
+	0x00B6: { n:"BrtEndPCDFields", f:parsenoop },
+	0x00B7: { n:"BrtBeginPCDField", f:parsenoop },
+	0x00B8: { n:"BrtEndPCDField", f:parsenoop },
+	0x00B9: { n:"BrtBeginPCDSource", f:parsenoop },
+	0x00BA: { n:"BrtEndPCDSource", f:parsenoop },
+	0x00BB: { n:"BrtBeginPCDSRange", f:parsenoop },
+	0x00BC: { n:"BrtEndPCDSRange", f:parsenoop },
+	0x00BD: { n:"BrtBeginPCDFAtbl", f:parsenoop },
+	0x00BE: { n:"BrtEndPCDFAtbl", f:parsenoop },
+	0x00BF: { n:"BrtBeginPCDIRun", f:parsenoop },
+	0x00C0: { n:"BrtEndPCDIRun", f:parsenoop },
+	0x00C1: { n:"BrtBeginPivotCacheRecords", f:parsenoop },
+	0x00C2: { n:"BrtEndPivotCacheRecords", f:parsenoop },
+	0x00C3: { n:"BrtBeginPCDHierarchies", f:parsenoop },
+	0x00C4: { n:"BrtEndPCDHierarchies", f:parsenoop },
+	0x00C5: { n:"BrtBeginPCDHierarchy", f:parsenoop },
+	0x00C6: { n:"BrtEndPCDHierarchy", f:parsenoop },
+	0x00C7: { n:"BrtBeginPCDHFieldsUsage", f:parsenoop },
+	0x00C8: { n:"BrtEndPCDHFieldsUsage", f:parsenoop },
+	0x00C9: { n:"BrtBeginExtConnection", f:parsenoop },
+	0x00CA: { n:"BrtEndExtConnection", f:parsenoop },
+	0x00CB: { n:"BrtBeginECDbProps", f:parsenoop },
+	0x00CC: { n:"BrtEndECDbProps", f:parsenoop },
+	0x00CD: { n:"BrtBeginECOlapProps", f:parsenoop },
+	0x00CE: { n:"BrtEndECOlapProps", f:parsenoop },
+	0x00CF: { n:"BrtBeginPCDSConsol", f:parsenoop },
+	0x00D0: { n:"BrtEndPCDSConsol", f:parsenoop },
+	0x00D1: { n:"BrtBeginPCDSCPages", f:parsenoop },
+	0x00D2: { n:"BrtEndPCDSCPages", f:parsenoop },
+	0x00D3: { n:"BrtBeginPCDSCPage", f:parsenoop },
+	0x00D4: { n:"BrtEndPCDSCPage", f:parsenoop },
+	0x00D5: { n:"BrtBeginPCDSCPItem", f:parsenoop },
+	0x00D6: { n:"BrtEndPCDSCPItem", f:parsenoop },
+	0x00D7: { n:"BrtBeginPCDSCSets", f:parsenoop },
+	0x00D8: { n:"BrtEndPCDSCSets", f:parsenoop },
+	0x00D9: { n:"BrtBeginPCDSCSet", f:parsenoop },
+	0x00DA: { n:"BrtEndPCDSCSet", f:parsenoop },
+	0x00DB: { n:"BrtBeginPCDFGroup", f:parsenoop },
+	0x00DC: { n:"BrtEndPCDFGroup", f:parsenoop },
+	0x00DD: { n:"BrtBeginPCDFGItems", f:parsenoop },
+	0x00DE: { n:"BrtEndPCDFGItems", f:parsenoop },
+	0x00DF: { n:"BrtBeginPCDFGRange", f:parsenoop },
+	0x00E0: { n:"BrtEndPCDFGRange", f:parsenoop },
+	0x00E1: { n:"BrtBeginPCDFGDiscrete", f:parsenoop },
+	0x00E2: { n:"BrtEndPCDFGDiscrete", f:parsenoop },
+	0x00E3: { n:"BrtBeginPCDSDTupleCache", f:parsenoop },
+	0x00E4: { n:"BrtEndPCDSDTupleCache", f:parsenoop },
+	0x00E5: { n:"BrtBeginPCDSDTCEntries", f:parsenoop },
+	0x00E6: { n:"BrtEndPCDSDTCEntries", f:parsenoop },
+	0x00E7: { n:"BrtBeginPCDSDTCEMembers", f:parsenoop },
+	0x00E8: { n:"BrtEndPCDSDTCEMembers", f:parsenoop },
+	0x00E9: { n:"BrtBeginPCDSDTCEMember", f:parsenoop },
+	0x00EA: { n:"BrtEndPCDSDTCEMember", f:parsenoop },
+	0x00EB: { n:"BrtBeginPCDSDTCQueries", f:parsenoop },
+	0x00EC: { n:"BrtEndPCDSDTCQueries", f:parsenoop },
+	0x00ED: { n:"BrtBeginPCDSDTCQuery", f:parsenoop },
+	0x00EE: { n:"BrtEndPCDSDTCQuery", f:parsenoop },
+	0x00EF: { n:"BrtBeginPCDSDTCSets", f:parsenoop },
+	0x00F0: { n:"BrtEndPCDSDTCSets", f:parsenoop },
+	0x00F1: { n:"BrtBeginPCDSDTCSet", f:parsenoop },
+	0x00F2: { n:"BrtEndPCDSDTCSet", f:parsenoop },
+	0x00F3: { n:"BrtBeginPCDCalcItems", f:parsenoop },
+	0x00F4: { n:"BrtEndPCDCalcItems", f:parsenoop },
+	0x00F5: { n:"BrtBeginPCDCalcItem", f:parsenoop },
+	0x00F6: { n:"BrtEndPCDCalcItem", f:parsenoop },
+	0x00F7: { n:"BrtBeginPRule", f:parsenoop },
+	0x00F8: { n:"BrtEndPRule", f:parsenoop },
+	0x00F9: { n:"BrtBeginPRFilters", f:parsenoop },
+	0x00FA: { n:"BrtEndPRFilters", f:parsenoop },
+	0x00FB: { n:"BrtBeginPRFilter", f:parsenoop },
+	0x00FC: { n:"BrtEndPRFilter", f:parsenoop },
+	0x00FD: { n:"BrtBeginPNames", f:parsenoop },
+	0x00FE: { n:"BrtEndPNames", f:parsenoop },
+	0x00FF: { n:"BrtBeginPName", f:parsenoop },
+	0x0100: { n:"BrtEndPName", f:parsenoop },
+	0x0101: { n:"BrtBeginPNPairs", f:parsenoop },
+	0x0102: { n:"BrtEndPNPairs", f:parsenoop },
+	0x0103: { n:"BrtBeginPNPair", f:parsenoop },
+	0x0104: { n:"BrtEndPNPair", f:parsenoop },
+	0x0105: { n:"BrtBeginECWebProps", f:parsenoop },
+	0x0106: { n:"BrtEndECWebProps", f:parsenoop },
+	0x0107: { n:"BrtBeginEcWpTables", f:parsenoop },
+	0x0108: { n:"BrtEndECWPTables", f:parsenoop },
+	0x0109: { n:"BrtBeginECParams", f:parsenoop },
+	0x010A: { n:"BrtEndECParams", f:parsenoop },
+	0x010B: { n:"BrtBeginECParam", f:parsenoop },
+	0x010C: { n:"BrtEndECParam", f:parsenoop },
+	0x010D: { n:"BrtBeginPCDKPIs", f:parsenoop },
+	0x010E: { n:"BrtEndPCDKPIs", f:parsenoop },
+	0x010F: { n:"BrtBeginPCDKPI", f:parsenoop },
+	0x0110: { n:"BrtEndPCDKPI", f:parsenoop },
+	0x0111: { n:"BrtBeginDims", f:parsenoop },
+	0x0112: { n:"BrtEndDims", f:parsenoop },
+	0x0113: { n:"BrtBeginDim", f:parsenoop },
+	0x0114: { n:"BrtEndDim", f:parsenoop },
+	0x0115: { n:"BrtIndexPartEnd", f:parsenoop },
+	0x0116: { n:"BrtBeginStyleSheet", f:parsenoop },
+	0x0117: { n:"BrtEndStyleSheet", f:parsenoop },
+	0x0118: { n:"BrtBeginSXView", f:parsenoop },
+	0x0119: { n:"BrtEndSXVI", f:parsenoop },
+	0x011A: { n:"BrtBeginSXVI", f:parsenoop },
+	0x011B: { n:"BrtBeginSXVIs", f:parsenoop },
+	0x011C: { n:"BrtEndSXVIs", f:parsenoop },
+	0x011D: { n:"BrtBeginSXVD", f:parsenoop },
+	0x011E: { n:"BrtEndSXVD", f:parsenoop },
+	0x011F: { n:"BrtBeginSXVDs", f:parsenoop },
+	0x0120: { n:"BrtEndSXVDs", f:parsenoop },
+	0x0121: { n:"BrtBeginSXPI", f:parsenoop },
+	0x0122: { n:"BrtEndSXPI", f:parsenoop },
+	0x0123: { n:"BrtBeginSXPIs", f:parsenoop },
+	0x0124: { n:"BrtEndSXPIs", f:parsenoop },
+	0x0125: { n:"BrtBeginSXDI", f:parsenoop },
+	0x0126: { n:"BrtEndSXDI", f:parsenoop },
+	0x0127: { n:"BrtBeginSXDIs", f:parsenoop },
+	0x0128: { n:"BrtEndSXDIs", f:parsenoop },
+	0x0129: { n:"BrtBeginSXLI", f:parsenoop },
+	0x012A: { n:"BrtEndSXLI", f:parsenoop },
+	0x012B: { n:"BrtBeginSXLIRws", f:parsenoop },
+	0x012C: { n:"BrtEndSXLIRws", f:parsenoop },
+	0x012D: { n:"BrtBeginSXLICols", f:parsenoop },
+	0x012E: { n:"BrtEndSXLICols", f:parsenoop },
+	0x012F: { n:"BrtBeginSXFormat", f:parsenoop },
+	0x0130: { n:"BrtEndSXFormat", f:parsenoop },
+	0x0131: { n:"BrtBeginSXFormats", f:parsenoop },
+	0x0132: { n:"BrtEndSxFormats", f:parsenoop },
+	0x0133: { n:"BrtBeginSxSelect", f:parsenoop },
+	0x0134: { n:"BrtEndSxSelect", f:parsenoop },
+	0x0135: { n:"BrtBeginISXVDRws", f:parsenoop },
+	0x0136: { n:"BrtEndISXVDRws", f:parsenoop },
+	0x0137: { n:"BrtBeginISXVDCols", f:parsenoop },
+	0x0138: { n:"BrtEndISXVDCols", f:parsenoop },
+	0x0139: { n:"BrtEndSXLocation", f:parsenoop },
+	0x013A: { n:"BrtBeginSXLocation", f:parsenoop },
+	0x013B: { n:"BrtEndSXView", f:parsenoop },
+	0x013C: { n:"BrtBeginSXTHs", f:parsenoop },
+	0x013D: { n:"BrtEndSXTHs", f:parsenoop },
+	0x013E: { n:"BrtBeginSXTH", f:parsenoop },
+	0x013F: { n:"BrtEndSXTH", f:parsenoop },
+	0x0140: { n:"BrtBeginISXTHRws", f:parsenoop },
+	0x0141: { n:"BrtEndISXTHRws", f:parsenoop },
+	0x0142: { n:"BrtBeginISXTHCols", f:parsenoop },
+	0x0143: { n:"BrtEndISXTHCols", f:parsenoop },
+	0x0144: { n:"BrtBeginSXTDMPS", f:parsenoop },
+	0x0145: { n:"BrtEndSXTDMPs", f:parsenoop },
+	0x0146: { n:"BrtBeginSXTDMP", f:parsenoop },
+	0x0147: { n:"BrtEndSXTDMP", f:parsenoop },
+	0x0148: { n:"BrtBeginSXTHItems", f:parsenoop },
+	0x0149: { n:"BrtEndSXTHItems", f:parsenoop },
+	0x014A: { n:"BrtBeginSXTHItem", f:parsenoop },
+	0x014B: { n:"BrtEndSXTHItem", f:parsenoop },
+	0x014C: { n:"BrtBeginMetadata", f:parsenoop },
+	0x014D: { n:"BrtEndMetadata", f:parsenoop },
+	0x014E: { n:"BrtBeginEsmdtinfo", f:parsenoop },
+	0x014F: { n:"BrtMdtinfo", f:parsenoop },
+	0x0150: { n:"BrtEndEsmdtinfo", f:parsenoop },
+	0x0151: { n:"BrtBeginEsmdb", f:parsenoop },
+	0x0152: { n:"BrtEndEsmdb", f:parsenoop },
+	0x0153: { n:"BrtBeginEsfmd", f:parsenoop },
+	0x0154: { n:"BrtEndEsfmd", f:parsenoop },
+	0x0155: { n:"BrtBeginSingleCells", f:parsenoop },
+	0x0156: { n:"BrtEndSingleCells", f:parsenoop },
+	0x0157: { n:"BrtBeginList", f:parsenoop },
+	0x0158: { n:"BrtEndList", f:parsenoop },
+	0x0159: { n:"BrtBeginListCols", f:parsenoop },
+	0x015A: { n:"BrtEndListCols", f:parsenoop },
+	0x015B: { n:"BrtBeginListCol", f:parsenoop },
+	0x015C: { n:"BrtEndListCol", f:parsenoop },
+	0x015D: { n:"BrtBeginListXmlCPr", f:parsenoop },
+	0x015E: { n:"BrtEndListXmlCPr", f:parsenoop },
+	0x015F: { n:"BrtListCCFmla", f:parsenoop },
+	0x0160: { n:"BrtListTrFmla", f:parsenoop },
+	0x0161: { n:"BrtBeginExternals", f:parsenoop },
+	0x0162: { n:"BrtEndExternals", f:parsenoop },
+	0x0163: { n:"BrtSupBookSrc", f:parsenoop },
+	0x0165: { n:"BrtSupSelf", f:parsenoop },
+	0x0166: { n:"BrtSupSame", f:parsenoop },
+	0x0167: { n:"BrtSupTabs", f:parsenoop },
+	0x0168: { n:"BrtBeginSupBook", f:parsenoop },
+	0x0169: { n:"BrtPlaceholderName", f:parsenoop },
+	0x016A: { n:"BrtExternSheet", f:parsenoop },
+	0x016B: { n:"BrtExternTableStart", f:parsenoop },
+	0x016C: { n:"BrtExternTableEnd", f:parsenoop },
+	0x016E: { n:"BrtExternRowHdr", f:parsenoop },
+	0x016F: { n:"BrtExternCellBlank", f:parsenoop },
+	0x0170: { n:"BrtExternCellReal", f:parsenoop },
+	0x0171: { n:"BrtExternCellBool", f:parsenoop },
+	0x0172: { n:"BrtExternCellError", f:parsenoop },
+	0x0173: { n:"BrtExternCellString", f:parsenoop },
+	0x0174: { n:"BrtBeginEsmdx", f:parsenoop },
+	0x0175: { n:"BrtEndEsmdx", f:parsenoop },
+	0x0176: { n:"BrtBeginMdxSet", f:parsenoop },
+	0x0177: { n:"BrtEndMdxSet", f:parsenoop },
+	0x0178: { n:"BrtBeginMdxMbrProp", f:parsenoop },
+	0x0179: { n:"BrtEndMdxMbrProp", f:parsenoop },
+	0x017A: { n:"BrtBeginMdxKPI", f:parsenoop },
+	0x017B: { n:"BrtEndMdxKPI", f:parsenoop },
+	0x017C: { n:"BrtBeginEsstr", f:parsenoop },
+	0x017D: { n:"BrtEndEsstr", f:parsenoop },
+	0x017E: { n:"BrtBeginPRFItem", f:parsenoop },
+	0x017F: { n:"BrtEndPRFItem", f:parsenoop },
+	0x0180: { n:"BrtBeginPivotCacheIDs", f:parsenoop },
+	0x0181: { n:"BrtEndPivotCacheIDs", f:parsenoop },
+	0x0182: { n:"BrtBeginPivotCacheID", f:parsenoop },
+	0x0183: { n:"BrtEndPivotCacheID", f:parsenoop },
+	0x0184: { n:"BrtBeginISXVIs", f:parsenoop },
+	0x0185: { n:"BrtEndISXVIs", f:parsenoop },
+	0x0186: { n:"BrtBeginColInfos", f:parsenoop },
+	0x0187: { n:"BrtEndColInfos", f:parsenoop },
+	0x0188: { n:"BrtBeginRwBrk", f:parsenoop },
+	0x0189: { n:"BrtEndRwBrk", f:parsenoop },
+	0x018A: { n:"BrtBeginColBrk", f:parsenoop },
+	0x018B: { n:"BrtEndColBrk", f:parsenoop },
+	0x018C: { n:"BrtBrk", f:parsenoop },
+	0x018D: { n:"BrtUserBookView", f:parsenoop },
+	0x018E: { n:"BrtInfo", f:parsenoop },
+	0x018F: { n:"BrtCUsr", f:parsenoop },
+	0x0190: { n:"BrtUsr", f:parsenoop },
+	0x0191: { n:"BrtBeginUsers", f:parsenoop },
+	0x0193: { n:"BrtEOF", f:parsenoop },
+	0x0194: { n:"BrtUCR", f:parsenoop },
+	0x0195: { n:"BrtRRInsDel", f:parsenoop },
+	0x0196: { n:"BrtRREndInsDel", f:parsenoop },
+	0x0197: { n:"BrtRRMove", f:parsenoop },
+	0x0198: { n:"BrtRREndMove", f:parsenoop },
+	0x0199: { n:"BrtRRChgCell", f:parsenoop },
+	0x019A: { n:"BrtRREndChgCell", f:parsenoop },
+	0x019B: { n:"BrtRRHeader", f:parsenoop },
+	0x019C: { n:"BrtRRUserView", f:parsenoop },
+	0x019D: { n:"BrtRRRenSheet", f:parsenoop },
+	0x019E: { n:"BrtRRInsertSh", f:parsenoop },
+	0x019F: { n:"BrtRRDefName", f:parsenoop },
+	0x01A0: { n:"BrtRRNote", f:parsenoop },
+	0x01A1: { n:"BrtRRConflict", f:parsenoop },
+	0x01A2: { n:"BrtRRTQSIF", f:parsenoop },
+	0x01A3: { n:"BrtRRFormat", f:parsenoop },
+	0x01A4: { n:"BrtRREndFormat", f:parsenoop },
+	0x01A5: { n:"BrtRRAutoFmt", f:parsenoop },
+	0x01A6: { n:"BrtBeginUserShViews", f:parsenoop },
+	0x01A7: { n:"BrtBeginUserShView", f:parsenoop },
+	0x01A8: { n:"BrtEndUserShView", f:parsenoop },
+	0x01A9: { n:"BrtEndUserShViews", f:parsenoop },
+	0x01AA: { n:"BrtArrFmla", f:parsenoop },
+	0x01AB: { n:"BrtShrFmla", f:parsenoop },
+	0x01AC: { n:"BrtTable", f:parsenoop },
+	0x01AD: { n:"BrtBeginExtConnections", f:parsenoop },
+	0x01AE: { n:"BrtEndExtConnections", f:parsenoop },
+	0x01AF: { n:"BrtBeginPCDCalcMems", f:parsenoop },
+	0x01B0: { n:"BrtEndPCDCalcMems", f:parsenoop },
+	0x01B1: { n:"BrtBeginPCDCalcMem", f:parsenoop },
+	0x01B2: { n:"BrtEndPCDCalcMem", f:parsenoop },
+	0x01B3: { n:"BrtBeginPCDHGLevels", f:parsenoop },
+	0x01B4: { n:"BrtEndPCDHGLevels", f:parsenoop },
+	0x01B5: { n:"BrtBeginPCDHGLevel", f:parsenoop },
+	0x01B6: { n:"BrtEndPCDHGLevel", f:parsenoop },
+	0x01B7: { n:"BrtBeginPCDHGLGroups", f:parsenoop },
+	0x01B8: { n:"BrtEndPCDHGLGroups", f:parsenoop },
+	0x01B9: { n:"BrtBeginPCDHGLGroup", f:parsenoop },
+	0x01BA: { n:"BrtEndPCDHGLGroup", f:parsenoop },
+	0x01BB: { n:"BrtBeginPCDHGLGMembers", f:parsenoop },
+	0x01BC: { n:"BrtEndPCDHGLGMembers", f:parsenoop },
+	0x01BD: { n:"BrtBeginPCDHGLGMember", f:parsenoop },
+	0x01BE: { n:"BrtEndPCDHGLGMember", f:parsenoop },
+	0x01BF: { n:"BrtBeginQSI", f:parsenoop },
+	0x01C0: { n:"BrtEndQSI", f:parsenoop },
+	0x01C1: { n:"BrtBeginQSIR", f:parsenoop },
+	0x01C2: { n:"BrtEndQSIR", f:parsenoop },
+	0x01C3: { n:"BrtBeginDeletedNames", f:parsenoop },
+	0x01C4: { n:"BrtEndDeletedNames", f:parsenoop },
+	0x01C5: { n:"BrtBeginDeletedName", f:parsenoop },
+	0x01C6: { n:"BrtEndDeletedName", f:parsenoop },
+	0x01C7: { n:"BrtBeginQSIFs", f:parsenoop },
+	0x01C8: { n:"BrtEndQSIFs", f:parsenoop },
+	0x01C9: { n:"BrtBeginQSIF", f:parsenoop },
+	0x01CA: { n:"BrtEndQSIF", f:parsenoop },
+	0x01CB: { n:"BrtBeginAutoSortScope", f:parsenoop },
+	0x01CC: { n:"BrtEndAutoSortScope", f:parsenoop },
+	0x01CD: { n:"BrtBeginConditionalFormatting", f:parsenoop },
+	0x01CE: { n:"BrtEndConditionalFormatting", f:parsenoop },
+	0x01CF: { n:"BrtBeginCFRule", f:parsenoop },
+	0x01D0: { n:"BrtEndCFRule", f:parsenoop },
+	0x01D1: { n:"BrtBeginIconSet", f:parsenoop },
+	0x01D2: { n:"BrtEndIconSet", f:parsenoop },
+	0x01D3: { n:"BrtBeginDatabar", f:parsenoop },
+	0x01D4: { n:"BrtEndDatabar", f:parsenoop },
+	0x01D5: { n:"BrtBeginColorScale", f:parsenoop },
+	0x01D6: { n:"BrtEndColorScale", f:parsenoop },
+	0x01D7: { n:"BrtCFVO", f:parsenoop },
+	0x01D8: { n:"BrtExternValueMeta", f:parsenoop },
+	0x01D9: { n:"BrtBeginColorPalette", f:parsenoop },
+	0x01DA: { n:"BrtEndColorPalette", f:parsenoop },
+	0x01DB: { n:"BrtIndexedColor", f:parsenoop },
+	0x01DC: { n:"BrtMargins", f:parsenoop },
+	0x01DD: { n:"BrtPrintOptions", f:parsenoop },
+	0x01DE: { n:"BrtPageSetup", f:parsenoop },
+	0x01DF: { n:"BrtBeginHeaderFooter", f:parsenoop },
+	0x01E0: { n:"BrtEndHeaderFooter", f:parsenoop },
+	0x01E1: { n:"BrtBeginSXCrtFormat", f:parsenoop },
+	0x01E2: { n:"BrtEndSXCrtFormat", f:parsenoop },
+	0x01E3: { n:"BrtBeginSXCrtFormats", f:parsenoop },
+	0x01E4: { n:"BrtEndSXCrtFormats", f:parsenoop },
+	0x01E5: { n:"BrtWsFmtInfo", f:parsenoop },
+	0x01E6: { n:"BrtBeginMgs", f:parsenoop },
+	0x01E7: { n:"BrtEndMGs", f:parsenoop },
+	0x01E8: { n:"BrtBeginMGMaps", f:parsenoop },
+	0x01E9: { n:"BrtEndMGMaps", f:parsenoop },
+	0x01EA: { n:"BrtBeginMG", f:parsenoop },
+	0x01EB: { n:"BrtEndMG", f:parsenoop },
+	0x01EC: { n:"BrtBeginMap", f:parsenoop },
+	0x01ED: { n:"BrtEndMap", f:parsenoop },
+	0x01EE: { n:"BrtHLink", f:parse_BrtHLink },
+	0x01EF: { n:"BrtBeginDCon", f:parsenoop },
+	0x01F0: { n:"BrtEndDCon", f:parsenoop },
+	0x01F1: { n:"BrtBeginDRefs", f:parsenoop },
+	0x01F2: { n:"BrtEndDRefs", f:parsenoop },
+	0x01F3: { n:"BrtDRef", f:parsenoop },
+	0x01F4: { n:"BrtBeginScenMan", f:parsenoop },
+	0x01F5: { n:"BrtEndScenMan", f:parsenoop },
+	0x01F6: { n:"BrtBeginSct", f:parsenoop },
+	0x01F7: { n:"BrtEndSct", f:parsenoop },
+	0x01F8: { n:"BrtSlc", f:parsenoop },
+	0x01F9: { n:"BrtBeginDXFs", f:parsenoop },
+	0x01FA: { n:"BrtEndDXFs", f:parsenoop },
+	0x01FB: { n:"BrtDXF", f:parsenoop },
+	0x01FC: { n:"BrtBeginTableStyles", f:parsenoop },
+	0x01FD: { n:"BrtEndTableStyles", f:parsenoop },
+	0x01FE: { n:"BrtBeginTableStyle", f:parsenoop },
+	0x01FF: { n:"BrtEndTableStyle", f:parsenoop },
+	0x0200: { n:"BrtTableStyleElement", f:parsenoop },
+	0x0201: { n:"BrtTableStyleClient", f:parsenoop },
+	0x0202: { n:"BrtBeginVolDeps", f:parsenoop },
+	0x0203: { n:"BrtEndVolDeps", f:parsenoop },
+	0x0204: { n:"BrtBeginVolType", f:parsenoop },
+	0x0205: { n:"BrtEndVolType", f:parsenoop },
+	0x0206: { n:"BrtBeginVolMain", f:parsenoop },
+	0x0207: { n:"BrtEndVolMain", f:parsenoop },
+	0x0208: { n:"BrtBeginVolTopic", f:parsenoop },
+	0x0209: { n:"BrtEndVolTopic", f:parsenoop },
+	0x020A: { n:"BrtVolSubtopic", f:parsenoop },
+	0x020B: { n:"BrtVolRef", f:parsenoop },
+	0x020C: { n:"BrtVolNum", f:parsenoop },
+	0x020D: { n:"BrtVolErr", f:parsenoop },
+	0x020E: { n:"BrtVolStr", f:parsenoop },
+	0x020F: { n:"BrtVolBool", f:parsenoop },
+	0x0210: { n:"BrtBeginCalcChain$", f:parsenoop },
+	0x0211: { n:"BrtEndCalcChain$", f:parsenoop },
+	0x0212: { n:"BrtBeginSortState", f:parsenoop },
+	0x0213: { n:"BrtEndSortState", f:parsenoop },
+	0x0214: { n:"BrtBeginSortCond", f:parsenoop },
+	0x0215: { n:"BrtEndSortCond", f:parsenoop },
+	0x0216: { n:"BrtBookProtection", f:parsenoop },
+	0x0217: { n:"BrtSheetProtection", f:parsenoop },
+	0x0218: { n:"BrtRangeProtection", f:parsenoop },
+	0x0219: { n:"BrtPhoneticInfo", f:parsenoop },
+	0x021A: { n:"BrtBeginECTxtWiz", f:parsenoop },
+	0x021B: { n:"BrtEndECTxtWiz", f:parsenoop },
+	0x021C: { n:"BrtBeginECTWFldInfoLst", f:parsenoop },
+	0x021D: { n:"BrtEndECTWFldInfoLst", f:parsenoop },
+	0x021E: { n:"BrtBeginECTwFldInfo", f:parsenoop },
+	0x0224: { n:"BrtFileSharing", f:parsenoop },
+	0x0225: { n:"BrtOleSize", f:parsenoop },
+	0x0226: { n:"BrtDrawing", f:parsenoop },
+	0x0227: { n:"BrtLegacyDrawing", f:parsenoop },
+	0x0228: { n:"BrtLegacyDrawingHF", f:parsenoop },
+	0x0229: { n:"BrtWebOpt", f:parsenoop },
+	0x022A: { n:"BrtBeginWebPubItems", f:parsenoop },
+	0x022B: { n:"BrtEndWebPubItems", f:parsenoop },
+	0x022C: { n:"BrtBeginWebPubItem", f:parsenoop },
+	0x022D: { n:"BrtEndWebPubItem", f:parsenoop },
+	0x022E: { n:"BrtBeginSXCondFmt", f:parsenoop },
+	0x022F: { n:"BrtEndSXCondFmt", f:parsenoop },
+	0x0230: { n:"BrtBeginSXCondFmts", f:parsenoop },
+	0x0231: { n:"BrtEndSXCondFmts", f:parsenoop },
+	0x0232: { n:"BrtBkHim", f:parsenoop },
+	0x0234: { n:"BrtColor", f:parsenoop },
+	0x0235: { n:"BrtBeginIndexedColors", f:parsenoop },
+	0x0236: { n:"BrtEndIndexedColors", f:parsenoop },
+	0x0239: { n:"BrtBeginMRUColors", f:parsenoop },
+	0x023A: { n:"BrtEndMRUColors", f:parsenoop },
+	0x023C: { n:"BrtMRUColor", f:parsenoop },
+	0x023D: { n:"BrtBeginDVals", f:parsenoop },
+	0x023E: { n:"BrtEndDVals", f:parsenoop },
+	0x0241: { n:"BrtSupNameStart", f:parsenoop },
+	0x0242: { n:"BrtSupNameValueStart", f:parsenoop },
+	0x0243: { n:"BrtSupNameValueEnd", f:parsenoop },
+	0x0244: { n:"BrtSupNameNum", f:parsenoop },
+	0x0245: { n:"BrtSupNameErr", f:parsenoop },
+	0x0246: { n:"BrtSupNameSt", f:parsenoop },
+	0x0247: { n:"BrtSupNameNil", f:parsenoop },
+	0x0248: { n:"BrtSupNameBool", f:parsenoop },
+	0x0249: { n:"BrtSupNameFmla", f:parsenoop },
+	0x024A: { n:"BrtSupNameBits", f:parsenoop },
+	0x024B: { n:"BrtSupNameEnd", f:parsenoop },
+	0x024C: { n:"BrtEndSupBook", f:parsenoop },
+	0x024D: { n:"BrtCellSmartTagProperty", f:parsenoop },
+	0x024E: { n:"BrtBeginCellSmartTag", f:parsenoop },
+	0x024F: { n:"BrtEndCellSmartTag", f:parsenoop },
+	0x0250: { n:"BrtBeginCellSmartTags", f:parsenoop },
+	0x0251: { n:"BrtEndCellSmartTags", f:parsenoop },
+	0x0252: { n:"BrtBeginSmartTags", f:parsenoop },
+	0x0253: { n:"BrtEndSmartTags", f:parsenoop },
+	0x0254: { n:"BrtSmartTagType", f:parsenoop },
+	0x0255: { n:"BrtBeginSmartTagTypes", f:parsenoop },
+	0x0256: { n:"BrtEndSmartTagTypes", f:parsenoop },
+	0x0257: { n:"BrtBeginSXFilters", f:parsenoop },
+	0x0258: { n:"BrtEndSXFilters", f:parsenoop },
+	0x0259: { n:"BrtBeginSXFILTER", f:parsenoop },
+	0x025A: { n:"BrtEndSXFilter", f:parsenoop },
+	0x025B: { n:"BrtBeginFills", f:parsenoop },
+	0x025C: { n:"BrtEndFills", f:parsenoop },
+	0x025D: { n:"BrtBeginCellWatches", f:parsenoop },
+	0x025E: { n:"BrtEndCellWatches", f:parsenoop },
+	0x025F: { n:"BrtCellWatch", f:parsenoop },
+	0x0260: { n:"BrtBeginCRErrs", f:parsenoop },
+	0x0261: { n:"BrtEndCRErrs", f:parsenoop },
+	0x0262: { n:"BrtCrashRecErr", f:parsenoop },
+	0x0263: { n:"BrtBeginFonts", f:parsenoop },
+	0x0264: { n:"BrtEndFonts", f:parsenoop },
+	0x0265: { n:"BrtBeginBorders", f:parsenoop },
+	0x0266: { n:"BrtEndBorders", f:parsenoop },
+	0x0267: { n:"BrtBeginFmts", f:parsenoop },
+	0x0268: { n:"BrtEndFmts", f:parsenoop },
+	0x0269: { n:"BrtBeginCellXFs", f:parsenoop },
+	0x026A: { n:"BrtEndCellXFs", f:parsenoop },
+	0x026B: { n:"BrtBeginStyles", f:parsenoop },
+	0x026C: { n:"BrtEndStyles", f:parsenoop },
+	0x0271: { n:"BrtBigName", f:parsenoop },
+	0x0272: { n:"BrtBeginCellStyleXFs", f:parsenoop },
+	0x0273: { n:"BrtEndCellStyleXFs", f:parsenoop },
+	0x0274: { n:"BrtBeginComments", f:parsenoop },
+	0x0275: { n:"BrtEndComments", f:parsenoop },
+	0x0276: { n:"BrtBeginCommentAuthors", f:parsenoop },
+	0x0277: { n:"BrtEndCommentAuthors", f:parsenoop },
+	0x0278: { n:"BrtCommentAuthor", f:parse_BrtCommentAuthor },
+	0x0279: { n:"BrtBeginCommentList", f:parsenoop },
+	0x027A: { n:"BrtEndCommentList", f:parsenoop },
+	0x027B: { n:"BrtBeginComment", f:parse_BrtBeginComment},
+	0x027C: { n:"BrtEndComment", f:parsenoop },
+	0x027D: { n:"BrtCommentText", f:parse_BrtCommentText },
+	0x027E: { n:"BrtBeginOleObjects", f:parsenoop },
+	0x027F: { n:"BrtOleObject", f:parsenoop },
+	0x0280: { n:"BrtEndOleObjects", f:parsenoop },
+	0x0281: { n:"BrtBeginSxrules", f:parsenoop },
+	0x0282: { n:"BrtEndSxRules", f:parsenoop },
+	0x0283: { n:"BrtBeginActiveXControls", f:parsenoop },
+	0x0284: { n:"BrtActiveX", f:parsenoop },
+	0x0285: { n:"BrtEndActiveXControls", f:parsenoop },
+	0x0286: { n:"BrtBeginPCDSDTCEMembersSortBy", f:parsenoop },
+	0x0288: { n:"BrtBeginCellIgnoreECs", f:parsenoop },
+	0x0289: { n:"BrtCellIgnoreEC", f:parsenoop },
+	0x028A: { n:"BrtEndCellIgnoreECs", f:parsenoop },
+	0x028B: { n:"BrtCsProp", f:parsenoop },
+	0x028C: { n:"BrtCsPageSetup", f:parsenoop },
+	0x028D: { n:"BrtBeginUserCsViews", f:parsenoop },
+	0x028E: { n:"BrtEndUserCsViews", f:parsenoop },
+	0x028F: { n:"BrtBeginUserCsView", f:parsenoop },
+	0x0290: { n:"BrtEndUserCsView", f:parsenoop },
+	0x0291: { n:"BrtBeginPcdSFCIEntries", f:parsenoop },
+	0x0292: { n:"BrtEndPCDSFCIEntries", f:parsenoop },
+	0x0293: { n:"BrtPCDSFCIEntry", f:parsenoop },
+	0x0294: { n:"BrtBeginListParts", f:parsenoop },
+	0x0295: { n:"BrtListPart", f:parsenoop },
+	0x0296: { n:"BrtEndListParts", f:parsenoop },
+	0x0297: { n:"BrtSheetCalcProp", f:parsenoop },
+	0x0298: { n:"BrtBeginFnGroup", f:parsenoop },
+	0x0299: { n:"BrtFnGroup", f:parsenoop },
+	0x029A: { n:"BrtEndFnGroup", f:parsenoop },
+	0x029B: { n:"BrtSupAddin", f:parsenoop },
+	0x029C: { n:"BrtSXTDMPOrder", f:parsenoop },
+	0x029D: { n:"BrtCsProtection", f:parsenoop },
+	0x029F: { n:"BrtBeginWsSortMap", f:parsenoop },
+	0x02A0: { n:"BrtEndWsSortMap", f:parsenoop },
+	0x02A1: { n:"BrtBeginRRSort", f:parsenoop },
+	0x02A2: { n:"BrtEndRRSort", f:parsenoop },
+	0x02A3: { n:"BrtRRSortItem", f:parsenoop },
+	0x02A4: { n:"BrtFileSharingIso", f:parsenoop },
+	0x02A5: { n:"BrtBookProtectionIso", f:parsenoop },
+	0x02A6: { n:"BrtSheetProtectionIso", f:parsenoop },
+	0x02A7: { n:"BrtCsProtectionIso", f:parsenoop },
+	0x02A8: { n:"BrtRangeProtectionIso", f:parsenoop },
+	0x0400: { n:"BrtRwDescent", f:parsenoop },
+	0x0401: { n:"BrtKnownFonts", f:parsenoop },
+	0x0402: { n:"BrtBeginSXTupleSet", f:parsenoop },
+	0x0403: { n:"BrtEndSXTupleSet", f:parsenoop },
+	0x0404: { n:"BrtBeginSXTupleSetHeader", f:parsenoop },
+	0x0405: { n:"BrtEndSXTupleSetHeader", f:parsenoop },
+	0x0406: { n:"BrtSXTupleSetHeaderItem", f:parsenoop },
+	0x0407: { n:"BrtBeginSXTupleSetData", f:parsenoop },
+	0x0408: { n:"BrtEndSXTupleSetData", f:parsenoop },
+	0x0409: { n:"BrtBeginSXTupleSetRow", f:parsenoop },
+	0x040A: { n:"BrtEndSXTupleSetRow", f:parsenoop },
+	0x040B: { n:"BrtSXTupleSetRowItem", f:parsenoop },
+	0x040C: { n:"BrtNameExt", f:parsenoop },
+	0x040D: { n:"BrtPCDH14", f:parsenoop },
+	0x040E: { n:"BrtBeginPCDCalcMem14", f:parsenoop },
+	0x040F: { n:"BrtEndPCDCalcMem14", f:parsenoop },
+	0x0410: { n:"BrtSXTH14", f:parsenoop },
+	0x0411: { n:"BrtBeginSparklineGroup", f:parsenoop },
+	0x0412: { n:"BrtEndSparklineGroup", f:parsenoop },
+	0x0413: { n:"BrtSparkline", f:parsenoop },
+	0x0414: { n:"BrtSXDI14", f:parsenoop },
+	0x0415: { n:"BrtWsFmtInfoEx14", f:parsenoop },
+	0x0416: { n:"BrtBeginConditionalFormatting14", f:parsenoop },
+	0x0417: { n:"BrtEndConditionalFormatting14", f:parsenoop },
+	0x0418: { n:"BrtBeginCFRule14", f:parsenoop },
+	0x0419: { n:"BrtEndCFRule14", f:parsenoop },
+	0x041A: { n:"BrtCFVO14", f:parsenoop },
+	0x041B: { n:"BrtBeginDatabar14", f:parsenoop },
+	0x041C: { n:"BrtBeginIconSet14", f:parsenoop },
+	0x041D: { n:"BrtDVal14", f:parsenoop },
+	0x041E: { n:"BrtBeginDVals14", f:parsenoop },
+	0x041F: { n:"BrtColor14", f:parsenoop },
+	0x0420: { n:"BrtBeginSparklines", f:parsenoop },
+	0x0421: { n:"BrtEndSparklines", f:parsenoop },
+	0x0422: { n:"BrtBeginSparklineGroups", f:parsenoop },
+	0x0423: { n:"BrtEndSparklineGroups", f:parsenoop },
+	0x0425: { n:"BrtSXVD14", f:parsenoop },
+	0x0426: { n:"BrtBeginSxview14", f:parsenoop },
+	0x0427: { n:"BrtEndSxview14", f:parsenoop },
+	0x042A: { n:"BrtBeginPCD14", f:parsenoop },
+	0x042B: { n:"BrtEndPCD14", f:parsenoop },
+	0x042C: { n:"BrtBeginExtConn14", f:parsenoop },
+	0x042D: { n:"BrtEndExtConn14", f:parsenoop },
+	0x042E: { n:"BrtBeginSlicerCacheIDs", f:parsenoop },
+	0x042F: { n:"BrtEndSlicerCacheIDs", f:parsenoop },
+	0x0430: { n:"BrtBeginSlicerCacheID", f:parsenoop },
+	0x0431: { n:"BrtEndSlicerCacheID", f:parsenoop },
+	0x0433: { n:"BrtBeginSlicerCache", f:parsenoop },
+	0x0434: { n:"BrtEndSlicerCache", f:parsenoop },
+	0x0435: { n:"BrtBeginSlicerCacheDef", f:parsenoop },
+	0x0436: { n:"BrtEndSlicerCacheDef", f:parsenoop },
+	0x0437: { n:"BrtBeginSlicersEx", f:parsenoop },
+	0x0438: { n:"BrtEndSlicersEx", f:parsenoop },
+	0x0439: { n:"BrtBeginSlicerEx", f:parsenoop },
+	0x043A: { n:"BrtEndSlicerEx", f:parsenoop },
+	0x043B: { n:"BrtBeginSlicer", f:parsenoop },
+	0x043C: { n:"BrtEndSlicer", f:parsenoop },
+	0x043D: { n:"BrtSlicerCachePivotTables", f:parsenoop },
+	0x043E: { n:"BrtBeginSlicerCacheOlapImpl", f:parsenoop },
+	0x043F: { n:"BrtEndSlicerCacheOlapImpl", f:parsenoop },
+	0x0440: { n:"BrtBeginSlicerCacheLevelsData", f:parsenoop },
+	0x0441: { n:"BrtEndSlicerCacheLevelsData", f:parsenoop },
+	0x0442: { n:"BrtBeginSlicerCacheLevelData", f:parsenoop },
+	0x0443: { n:"BrtEndSlicerCacheLevelData", f:parsenoop },
+	0x0444: { n:"BrtBeginSlicerCacheSiRanges", f:parsenoop },
+	0x0445: { n:"BrtEndSlicerCacheSiRanges", f:parsenoop },
+	0x0446: { n:"BrtBeginSlicerCacheSiRange", f:parsenoop },
+	0x0447: { n:"BrtEndSlicerCacheSiRange", f:parsenoop },
+	0x0448: { n:"BrtSlicerCacheOlapItem", f:parsenoop },
+	0x0449: { n:"BrtBeginSlicerCacheSelections", f:parsenoop },
+	0x044A: { n:"BrtSlicerCacheSelection", f:parsenoop },
+	0x044B: { n:"BrtEndSlicerCacheSelections", f:parsenoop },
+	0x044C: { n:"BrtBeginSlicerCacheNative", f:parsenoop },
+	0x044D: { n:"BrtEndSlicerCacheNative", f:parsenoop },
+	0x044E: { n:"BrtSlicerCacheNativeItem", f:parsenoop },
+	0x044F: { n:"BrtRangeProtection14", f:parsenoop },
+	0x0450: { n:"BrtRangeProtectionIso14", f:parsenoop },
+	0x0451: { n:"BrtCellIgnoreEC14", f:parsenoop },
+	0x0457: { n:"BrtList14", f:parsenoop },
+	0x0458: { n:"BrtCFIcon", f:parsenoop },
+	0x0459: { n:"BrtBeginSlicerCachesPivotCacheIDs", f:parsenoop },
+	0x045A: { n:"BrtEndSlicerCachesPivotCacheIDs", f:parsenoop },
+	0x045B: { n:"BrtBeginSlicers", f:parsenoop },
+	0x045C: { n:"BrtEndSlicers", f:parsenoop },
+	0x045D: { n:"BrtWbProp14", f:parsenoop },
+	0x045E: { n:"BrtBeginSXEdit", f:parsenoop },
+	0x045F: { n:"BrtEndSXEdit", f:parsenoop },
+	0x0460: { n:"BrtBeginSXEdits", f:parsenoop },
+	0x0461: { n:"BrtEndSXEdits", f:parsenoop },
+	0x0462: { n:"BrtBeginSXChange", f:parsenoop },
+	0x0463: { n:"BrtEndSXChange", f:parsenoop },
+	0x0464: { n:"BrtBeginSXChanges", f:parsenoop },
+	0x0465: { n:"BrtEndSXChanges", f:parsenoop },
+	0x0466: { n:"BrtSXTupleItems", f:parsenoop },
+	0x0468: { n:"BrtBeginSlicerStyle", f:parsenoop },
+	0x0469: { n:"BrtEndSlicerStyle", f:parsenoop },
+	0x046A: { n:"BrtSlicerStyleElement", f:parsenoop },
+	0x046B: { n:"BrtBeginStyleSheetExt14", f:parsenoop },
+	0x046C: { n:"BrtEndStyleSheetExt14", f:parsenoop },
+	0x046D: { n:"BrtBeginSlicerCachesPivotCacheID", f:parsenoop },
+	0x046E: { n:"BrtEndSlicerCachesPivotCacheID", f:parsenoop },
+	0x046F: { n:"BrtBeginConditionalFormattings", f:parsenoop },
+	0x0470: { n:"BrtEndConditionalFormattings", f:parsenoop },
+	0x0471: { n:"BrtBeginPCDCalcMemExt", f:parsenoop },
+	0x0472: { n:"BrtEndPCDCalcMemExt", f:parsenoop },
+	0x0473: { n:"BrtBeginPCDCalcMemsExt", f:parsenoop },
+	0x0474: { n:"BrtEndPCDCalcMemsExt", f:parsenoop },
+	0x0475: { n:"BrtPCDField14", f:parsenoop },
+	0x0476: { n:"BrtBeginSlicerStyles", f:parsenoop },
+	0x0477: { n:"BrtEndSlicerStyles", f:parsenoop },
+	0x0478: { n:"BrtBeginSlicerStyleElements", f:parsenoop },
+	0x0479: { n:"BrtEndSlicerStyleElements", f:parsenoop },
+	0x047A: { n:"BrtCFRuleExt", f:parsenoop },
+	0x047B: { n:"BrtBeginSXCondFmt14", f:parsenoop },
+	0x047C: { n:"BrtEndSXCondFmt14", f:parsenoop },
+	0x047D: { n:"BrtBeginSXCondFmts14", f:parsenoop },
+	0x047E: { n:"BrtEndSXCondFmts14", f:parsenoop },
+	0x0480: { n:"BrtBeginSortCond14", f:parsenoop },
+	0x0481: { n:"BrtEndSortCond14", f:parsenoop },
+	0x0482: { n:"BrtEndDVals14", f:parsenoop },
+	0x0483: { n:"BrtEndIconSet14", f:parsenoop },
+	0x0484: { n:"BrtEndDatabar14", f:parsenoop },
+	0x0485: { n:"BrtBeginColorScale14", f:parsenoop },
+	0x0486: { n:"BrtEndColorScale14", f:parsenoop },
+	0x0487: { n:"BrtBeginSxrules14", f:parsenoop },
+	0x0488: { n:"BrtEndSxrules14", f:parsenoop },
+	0x0489: { n:"BrtBeginPRule14", f:parsenoop },
+	0x048A: { n:"BrtEndPRule14", f:parsenoop },
+	0x048B: { n:"BrtBeginPRFilters14", f:parsenoop },
+	0x048C: { n:"BrtEndPRFilters14", f:parsenoop },
+	0x048D: { n:"BrtBeginPRFilter14", f:parsenoop },
+	0x048E: { n:"BrtEndPRFilter14", f:parsenoop },
+	0x048F: { n:"BrtBeginPRFItem14", f:parsenoop },
+	0x0490: { n:"BrtEndPRFItem14", f:parsenoop },
+	0x0491: { n:"BrtBeginCellIgnoreECs14", f:parsenoop },
+	0x0492: { n:"BrtEndCellIgnoreECs14", f:parsenoop },
+	0x0493: { n:"BrtDxf14", f:parsenoop },
+	0x0494: { n:"BrtBeginDxF14s", f:parsenoop },
+	0x0495: { n:"BrtEndDxf14s", f:parsenoop },
+	0x0499: { n:"BrtFilter14", f:parsenoop },
+	0x049A: { n:"BrtBeginCustomFilters14", f:parsenoop },
+	0x049C: { n:"BrtCustomFilter14", f:parsenoop },
+	0x049D: { n:"BrtIconFilter14", f:parsenoop },
+	0x049E: { n:"BrtPivotCacheConnectionName", f:parsenoop },
+	0x0800: { n:"BrtBeginDecoupledPivotCacheIDs", f:parsenoop },
+	0x0801: { n:"BrtEndDecoupledPivotCacheIDs", f:parsenoop },
+	0x0802: { n:"BrtDecoupledPivotCacheID", f:parsenoop },
+	0x0803: { n:"BrtBeginPivotTableRefs", f:parsenoop },
+	0x0804: { n:"BrtEndPivotTableRefs", f:parsenoop },
+	0x0805: { n:"BrtPivotTableRef", f:parsenoop },
+	0x0806: { n:"BrtSlicerCacheBookPivotTables", f:parsenoop },
+	0x0807: { n:"BrtBeginSxvcells", f:parsenoop },
+	0x0808: { n:"BrtEndSxvcells", f:parsenoop },
+	0x0809: { n:"BrtBeginSxRow", f:parsenoop },
+	0x080A: { n:"BrtEndSxRow", f:parsenoop },
+	0x080C: { n:"BrtPcdCalcMem15", f:parsenoop },
+	0x0813: { n:"BrtQsi15", f:parsenoop },
+	0x0814: { n:"BrtBeginWebExtensions", f:parsenoop },
+	0x0815: { n:"BrtEndWebExtensions", f:parsenoop },
+	0x0816: { n:"BrtWebExtension", f:parsenoop },
+	0x0817: { n:"BrtAbsPath15", f:parsenoop },
+	0x0818: { n:"BrtBeginPivotTableUISettings", f:parsenoop },
+	0x0819: { n:"BrtEndPivotTableUISettings", f:parsenoop },
+	0x081B: { n:"BrtTableSlicerCacheIDs", f:parsenoop },
+	0x081C: { n:"BrtTableSlicerCacheID", f:parsenoop },
+	0x081D: { n:"BrtBeginTableSlicerCache", f:parsenoop },
+	0x081E: { n:"BrtEndTableSlicerCache", f:parsenoop },
+	0x081F: { n:"BrtSxFilter15", f:parsenoop },
+	0x0820: { n:"BrtBeginTimelineCachePivotCacheIDs", f:parsenoop },
+	0x0821: { n:"BrtEndTimelineCachePivotCacheIDs", f:parsenoop },
+	0x0822: { n:"BrtTimelineCachePivotCacheID", f:parsenoop },
+	0x0823: { n:"BrtBeginTimelineCacheIDs", f:parsenoop },
+	0x0824: { n:"BrtEndTimelineCacheIDs", f:parsenoop },
+	0x0825: { n:"BrtBeginTimelineCacheID", f:parsenoop },
+	0x0826: { n:"BrtEndTimelineCacheID", f:parsenoop },
+	0x0827: { n:"BrtBeginTimelinesEx", f:parsenoop },
+	0x0828: { n:"BrtEndTimelinesEx", f:parsenoop },
+	0x0829: { n:"BrtBeginTimelineEx", f:parsenoop },
+	0x082A: { n:"BrtEndTimelineEx", f:parsenoop },
+	0x082B: { n:"BrtWorkBookPr15", f:parsenoop },
+	0x082C: { n:"BrtPCDH15", f:parsenoop },
+	0x082D: { n:"BrtBeginTimelineStyle", f:parsenoop },
+	0x082E: { n:"BrtEndTimelineStyle", f:parsenoop },
+	0x082F: { n:"BrtTimelineStyleElement", f:parsenoop },
+	0x0830: { n:"BrtBeginTimelineStylesheetExt15", f:parsenoop },
+	0x0831: { n:"BrtEndTimelineStylesheetExt15", f:parsenoop },
+	0x0832: { n:"BrtBeginTimelineStyles", f:parsenoop },
+	0x0833: { n:"BrtEndTimelineStyles", f:parsenoop },
+	0x0834: { n:"BrtBeginTimelineStyleElements", f:parsenoop },
+	0x0835: { n:"BrtEndTimelineStyleElements", f:parsenoop },
+	0x0836: { n:"BrtDxf15", f:parsenoop },
+	0x0837: { n:"BrtBeginDxfs15", f:parsenoop },
+	0x0838: { n:"brtEndDxfs15", f:parsenoop },
+	0x0839: { n:"BrtSlicerCacheHideItemsWithNoData", f:parsenoop },
+	0x083A: { n:"BrtBeginItemUniqueNames", f:parsenoop },
+	0x083B: { n:"BrtEndItemUniqueNames", f:parsenoop },
+	0x083C: { n:"BrtItemUniqueName", f:parsenoop },
+	0x083D: { n:"BrtBeginExtConn15", f:parsenoop },
+	0x083E: { n:"BrtEndExtConn15", f:parsenoop },
+	0x083F: { n:"BrtBeginOledbPr15", f:parsenoop },
+	0x0840: { n:"BrtEndOledbPr15", f:parsenoop },
+	0x0841: { n:"BrtBeginDataFeedPr15", f:parsenoop },
+	0x0842: { n:"BrtEndDataFeedPr15", f:parsenoop },
+	0x0843: { n:"BrtTextPr15", f:parsenoop },
+	0x0844: { n:"BrtRangePr15", f:parsenoop },
+	0x0845: { n:"BrtDbCommand15", f:parsenoop },
+	0x0846: { n:"BrtBeginDbTables15", f:parsenoop },
+	0x0847: { n:"BrtEndDbTables15", f:parsenoop },
+	0x0848: { n:"BrtDbTable15", f:parsenoop },
+	0x0849: { n:"BrtBeginDataModel", f:parsenoop },
+	0x084A: { n:"BrtEndDataModel", f:parsenoop },
+	0x084B: { n:"BrtBeginModelTables", f:parsenoop },
+	0x084C: { n:"BrtEndModelTables", f:parsenoop },
+	0x084D: { n:"BrtModelTable", f:parsenoop },
+	0x084E: { n:"BrtBeginModelRelationships", f:parsenoop },
+	0x084F: { n:"BrtEndModelRelationships", f:parsenoop },
+	0x0850: { n:"BrtModelRelationship", f:parsenoop },
+	0x0851: { n:"BrtBeginECTxtWiz15", f:parsenoop },
+	0x0852: { n:"BrtEndECTxtWiz15", f:parsenoop },
+	0x0853: { n:"BrtBeginECTWFldInfoLst15", f:parsenoop },
+	0x0854: { n:"BrtEndECTWFldInfoLst15", f:parsenoop },
+	0x0855: { n:"BrtBeginECTWFldInfo15", f:parsenoop },
+	0x0856: { n:"BrtFieldListActiveItem", f:parsenoop },
+	0x0857: { n:"BrtPivotCacheIdVersion", f:parsenoop },
+	0x0858: { n:"BrtSXDI15", f:parsenoop },
+	0xFFFF: { n:"", f:parsenoop }
+};
+
+var evert_RE = evert_key(XLSBRecordEnum, 'n');
+
+/* [MS-XLS] 2.3 Record Enumeration */
+var XLSRecordEnum = {
+	0x0003: { n:"BIFF2NUM", f:parse_BIFF2NUM },
+	0x0004: { n:"BIFF2STR", f:parse_BIFF2STR },
+	0x0006: { n:"Formula", f:parse_Formula },
+	0x0009: { n:'BOF', f:parse_BOF },
+	0x000a: { n:'EOF', f:parse_EOF },
+	0x000c: { n:"CalcCount", f:parse_CalcCount },
+	0x000d: { n:"CalcMode", f:parse_CalcMode },
+	0x000e: { n:"CalcPrecision", f:parse_CalcPrecision },
+	0x000f: { n:"CalcRefMode", f:parse_CalcRefMode },
+	0x0010: { n:"CalcDelta", f:parse_CalcDelta },
+	0x0011: { n:"CalcIter", f:parse_CalcIter },
+	0x0012: { n:"Protect", f:parse_Protect },
+	0x0013: { n:"Password", f:parse_Password },
+	0x0014: { n:"Header", f:parse_Header },
+	0x0015: { n:"Footer", f:parse_Footer },
+	0x0017: { n:"ExternSheet", f:parse_ExternSheet },
+	0x0018: { n:"Lbl", f:parse_Lbl },
+	0x0019: { n:"WinProtect", f:parse_WinProtect },
+	0x001a: { n:"VerticalPageBreaks", f:parse_VerticalPageBreaks },
+	0x001b: { n:"HorizontalPageBreaks", f:parse_HorizontalPageBreaks },
+	0x001c: { n:"Note", f:parse_Note },
+	0x001d: { n:"Selection", f:parse_Selection },
+	0x0022: { n:"Date1904", f:parse_Date1904 },
+	0x0023: { n:"ExternName", f:parse_ExternName },
+	0x0026: { n:"LeftMargin", f:parse_LeftMargin },
+	0x0027: { n:"RightMargin", f:parse_RightMargin },
+	0x0028: { n:"TopMargin", f:parse_TopMargin },
+	0x0029: { n:"BottomMargin", f:parse_BottomMargin },
+	0x002a: { n:"PrintRowCol", f:parse_PrintRowCol },
+	0x002b: { n:"PrintGrid", f:parse_PrintGrid },
+	0x002f: { n:"FilePass", f:parse_FilePass },
+	0x0031: { n:"Font", f:parse_Font },
+	0x0033: { n:"PrintSize", f:parse_PrintSize },
+	0x003c: { n:"Continue", f:parse_Continue },
+	0x003d: { n:"Window1", f:parse_Window1 },
+	0x0040: { n:"Backup", f:parse_Backup },
+	0x0041: { n:"Pane", f:parse_Pane },
+	0x0042: { n:'CodePage', f:parse_CodePage },
+	0x004d: { n:"Pls", f:parse_Pls },
+	0x0050: { n:"DCon", f:parse_DCon },
+	0x0051: { n:"DConRef", f:parse_DConRef },
+	0x0052: { n:"DConName", f:parse_DConName },
+	0x0055: { n:"DefColWidth", f:parse_DefColWidth },
+	0x0059: { n:"XCT", f:parse_XCT },
+	0x005a: { n:"CRN", f:parse_CRN },
+	0x005b: { n:"FileSharing", f:parse_FileSharing },
+	0x005c: { n:'WriteAccess', f:parse_WriteAccess },
+	0x005d: { n:"Obj", f:parse_Obj },
+	0x005e: { n:"Uncalced", f:parse_Uncalced },
+	0x005f: { n:"CalcSaveRecalc", f:parse_CalcSaveRecalc },
+	0x0060: { n:"Template", f:parse_Template },
+	0x0061: { n:"Intl", f:parse_Intl },
+	0x0063: { n:"ObjProtect", f:parse_ObjProtect },
+	0x007d: { n:"ColInfo", f:parse_ColInfo },
+	0x0080: { n:"Guts", f:parse_Guts },
+	0x0081: { n:"WsBool", f:parse_WsBool },
+	0x0082: { n:"GridSet", f:parse_GridSet },
+	0x0083: { n:"HCenter", f:parse_HCenter },
+	0x0084: { n:"VCenter", f:parse_VCenter },
+	0x0085: { n:'BoundSheet8', f:parse_BoundSheet8 },
+	0x0086: { n:"WriteProtect", f:parse_WriteProtect },
+	0x008c: { n:"Country", f:parse_Country },
+	0x008d: { n:"HideObj", f:parse_HideObj },
+	0x0090: { n:"Sort", f:parse_Sort },
+	0x0092: { n:"Palette", f:parse_Palette },
+	0x0097: { n:"Sync", f:parse_Sync },
+	0x0098: { n:"LPr", f:parse_LPr },
+	0x0099: { n:"DxGCol", f:parse_DxGCol },
+	0x009a: { n:"FnGroupName", f:parse_FnGroupName },
+	0x009b: { n:"FilterMode", f:parse_FilterMode },
+	0x009c: { n:"BuiltInFnGroupCount", f:parse_BuiltInFnGroupCount },
+	0x009d: { n:"AutoFilterInfo", f:parse_AutoFilterInfo },
+	0x009e: { n:"AutoFilter", f:parse_AutoFilter },
+	0x00a0: { n:"Scl", f:parse_Scl },
+	0x00a1: { n:"Setup", f:parse_Setup },
+	0x00ae: { n:"ScenMan", f:parse_ScenMan },
+	0x00af: { n:"SCENARIO", f:parse_SCENARIO },
+	0x00b0: { n:"SxView", f:parse_SxView },
+	0x00b1: { n:"Sxvd", f:parse_Sxvd },
+	0x00b2: { n:"SXVI", f:parse_SXVI },
+	0x00b4: { n:"SxIvd", f:parse_SxIvd },
+	0x00b5: { n:"SXLI", f:parse_SXLI },
+	0x00b6: { n:"SXPI", f:parse_SXPI },
+	0x00b8: { n:"DocRoute", f:parse_DocRoute },
+	0x00b9: { n:"RecipName", f:parse_RecipName },
+	0x00bd: { n:"MulRk", f:parse_MulRk },
+	0x00be: { n:"MulBlank", f:parse_MulBlank },
+	0x00c1: { n:'Mms', f:parse_Mms },
+	0x00c5: { n:"SXDI", f:parse_SXDI },
+	0x00c6: { n:"SXDB", f:parse_SXDB },
+	0x00c7: { n:"SXFDB", f:parse_SXFDB },
+	0x00c8: { n:"SXDBB", f:parse_SXDBB },
+	0x00c9: { n:"SXNum", f:parse_SXNum },
+	0x00ca: { n:"SxBool", f:parse_SxBool },
+	0x00cb: { n:"SxErr", f:parse_SxErr },
+	0x00cc: { n:"SXInt", f:parse_SXInt },
+	0x00cd: { n:"SXString", f:parse_SXString },
+	0x00ce: { n:"SXDtr", f:parse_SXDtr },
+	0x00cf: { n:"SxNil", f:parse_SxNil },
+	0x00d0: { n:"SXTbl", f:parse_SXTbl },
+	0x00d1: { n:"SXTBRGIITM", f:parse_SXTBRGIITM },
+	0x00d2: { n:"SxTbpg", f:parse_SxTbpg },
+	0x00d3: { n:"ObProj", f:parse_ObProj },
+	0x00d5: { n:"SXStreamID", f:parse_SXStreamID },
+	0x00d7: { n:"DBCell", f:parse_DBCell },
+	0x00d8: { n:"SXRng", f:parse_SXRng },
+	0x00d9: { n:"SxIsxoper", f:parse_SxIsxoper },
+	0x00da: { n:"BookBool", f:parse_BookBool },
+	0x00dc: { n:"DbOrParamQry", f:parse_DbOrParamQry },
+	0x00dd: { n:"ScenarioProtect", f:parse_ScenarioProtect },
+	0x00de: { n:"OleObjectSize", f:parse_OleObjectSize },
+	0x00e0: { n:"XF", f:parse_XF },
+	0x00e1: { n:'InterfaceHdr', f:parse_InterfaceHdr },
+	0x00e2: { n:'InterfaceEnd', f:parse_InterfaceEnd },
+	0x00e3: { n:"SXVS", f:parse_SXVS },
+	0x00e5: { n:"MergeCells", f:parse_MergeCells },
+	0x00e9: { n:"BkHim", f:parse_BkHim },
+	0x00eb: { n:"MsoDrawingGroup", f:parse_MsoDrawingGroup },
+	0x00ec: { n:"MsoDrawing", f:parse_MsoDrawing },
+	0x00ed: { n:"MsoDrawingSelection", f:parse_MsoDrawingSelection },
+	0x00ef: { n:"PhoneticInfo", f:parse_PhoneticInfo },
+	0x00f0: { n:"SxRule", f:parse_SxRule },
+	0x00f1: { n:"SXEx", f:parse_SXEx },
+	0x00f2: { n:"SxFilt", f:parse_SxFilt },
+	0x00f4: { n:"SxDXF", f:parse_SxDXF },
+	0x00f5: { n:"SxItm", f:parse_SxItm },
+	0x00f6: { n:"SxName", f:parse_SxName },
+	0x00f7: { n:"SxSelect", f:parse_SxSelect },
+	0x00f8: { n:"SXPair", f:parse_SXPair },
+	0x00f9: { n:"SxFmla", f:parse_SxFmla },
+	0x00fb: { n:"SxFormat", f:parse_SxFormat },
+	0x00fc: { n:"SST", f:parse_SST },
+	0x00fd: { n:"LabelSst", f:parse_LabelSst },
+	0x00ff: { n:"ExtSST", f:parse_ExtSST },
+	0x0100: { n:"SXVDEx", f:parse_SXVDEx },
+	0x0103: { n:"SXFormula", f:parse_SXFormula },
+	0x0122: { n:"SXDBEx", f:parse_SXDBEx },
+	0x0137: { n:"RRDInsDel", f:parse_RRDInsDel },
+	0x0138: { n:"RRDHead", f:parse_RRDHead },
+	0x013b: { n:"RRDChgCell", f:parse_RRDChgCell },
+	0x013d: { n:"RRTabId", f:parse_RRTabId },
+	0x013e: { n:"RRDRenSheet", f:parse_RRDRenSheet },
+	0x013f: { n:"RRSort", f:parse_RRSort },
+	0x0140: { n:"RRDMove", f:parse_RRDMove },
+	0x014a: { n:"RRFormat", f:parse_RRFormat },
+	0x014b: { n:"RRAutoFmt", f:parse_RRAutoFmt },
+	0x014d: { n:"RRInsertSh", f:parse_RRInsertSh },
+	0x014e: { n:"RRDMoveBegin", f:parse_RRDMoveBegin },
+	0x014f: { n:"RRDMoveEnd", f:parse_RRDMoveEnd },
+	0x0150: { n:"RRDInsDelBegin", f:parse_RRDInsDelBegin },
+	0x0151: { n:"RRDInsDelEnd", f:parse_RRDInsDelEnd },
+	0x0152: { n:"RRDConflict", f:parse_RRDConflict },
+	0x0153: { n:"RRDDefName", f:parse_RRDDefName },
+	0x0154: { n:"RRDRstEtxp", f:parse_RRDRstEtxp },
+	0x015f: { n:"LRng", f:parse_LRng },
+	0x0160: { n:"UsesELFs", f:parse_UsesELFs },
+	0x0161: { n:"DSF", f:parse_DSF },
+	0x0191: { n:"CUsr", f:parse_CUsr },
+	0x0192: { n:"CbUsr", f:parse_CbUsr },
+	0x0193: { n:"UsrInfo", f:parse_UsrInfo },
+	0x0194: { n:"UsrExcl", f:parse_UsrExcl },
+	0x0195: { n:"FileLock", f:parse_FileLock },
+	0x0196: { n:"RRDInfo", f:parse_RRDInfo },
+	0x0197: { n:"BCUsrs", f:parse_BCUsrs },
+	0x0198: { n:"UsrChk", f:parse_UsrChk },
+	0x01a9: { n:"UserBView", f:parse_UserBView },
+	0x01aa: { n:"UserSViewBegin", f:parse_UserSViewBegin },
+	0x01ab: { n:"UserSViewEnd", f:parse_UserSViewEnd },
+	0x01ac: { n:"RRDUserView", f:parse_RRDUserView },
+	0x01ad: { n:"Qsi", f:parse_Qsi },
+	0x01ae: { n:"SupBook", f:parse_SupBook },
+	0x01af: { n:"Prot4Rev", f:parse_Prot4Rev },
+	0x01b0: { n:"CondFmt", f:parse_CondFmt },
+	0x01b1: { n:"CF", f:parse_CF },
+	0x01b2: { n:"DVal", f:parse_DVal },
+	0x01b5: { n:"DConBin", f:parse_DConBin },
+	0x01b6: { n:"TxO", f:parse_TxO },
+	0x01b7: { n:"RefreshAll", f:parse_RefreshAll },
+	0x01b8: { n:"HLink", f:parse_HLink },
+	0x01b9: { n:"Lel", f:parse_Lel },
+	0x01ba: { n:"CodeName", f:parse_XLSCodeName },
+	0x01bb: { n:"SXFDBType", f:parse_SXFDBType },
+	0x01bc: { n:"Prot4RevPass", f:parse_Prot4RevPass },
+	0x01bd: { n:"ObNoMacros", f:parse_ObNoMacros },
+	0x01be: { n:"Dv", f:parse_Dv },
+	0x01c0: { n:"Excel9File", f:parse_Excel9File },
+	0x01c1: { n:"RecalcId", f:parse_RecalcId, r:2},
+	0x01c2: { n:"EntExU2", f:parse_EntExU2 },
+	0x0200: { n:"Dimensions", f:parse_Dimensions },
+	0x0201: { n:"Blank", f:parse_Blank },
+	0x0203: { n:"Number", f:parse_Number },
+	0x0204: { n:"Label", f:parse_Label },
+	0x0205: { n:"BoolErr", f:parse_BoolErr },
+	0x0207: { n:"String", f:parse_String },
+	0x0208: { n:'Row', f:parse_Row },
+	0x020b: { n:"Index", f:parse_Index },
+	0x0221: { n:"Array", f:parse_Array },
+	0x0225: { n:"DefaultRowHeight", f:parse_DefaultRowHeight },
+	0x0236: { n:"Table", f:parse_Table },
+	0x023e: { n:"Window2", f:parse_Window2 },
+	0x027e: { n:"RK", f:parse_RK },
+	0x0293: { n:"Style", f:parse_Style },
+	0x0418: { n:"BigName", f:parse_BigName },
+	0x041e: { n:"Format", f:parse_Format },
+	0x043c: { n:"ContinueBigName", f:parse_ContinueBigName },
+	0x04bc: { n:"ShrFmla", f:parse_ShrFmla },
+	0x0800: { n:"HLinkTooltip", f:parse_HLinkTooltip },
+	0x0801: { n:"WebPub", f:parse_WebPub },
+	0x0802: { n:"QsiSXTag", f:parse_QsiSXTag },
+	0x0803: { n:"DBQueryExt", f:parse_DBQueryExt },
+	0x0804: { n:"ExtString", f:parse_ExtString },
+	0x0805: { n:"TxtQry", f:parse_TxtQry },
+	0x0806: { n:"Qsir", f:parse_Qsir },
+	0x0807: { n:"Qsif", f:parse_Qsif },
+	0x0808: { n:"RRDTQSIF", f:parse_RRDTQSIF },
+	0x0809: { n:'BOF', f:parse_BOF },
+	0x080a: { n:"OleDbConn", f:parse_OleDbConn },
+	0x080b: { n:"WOpt", f:parse_WOpt },
+	0x080c: { n:"SXViewEx", f:parse_SXViewEx },
+	0x080d: { n:"SXTH", f:parse_SXTH },
+	0x080e: { n:"SXPIEx", f:parse_SXPIEx },
+	0x080f: { n:"SXVDTEx", f:parse_SXVDTEx },
+	0x0810: { n:"SXViewEx9", f:parse_SXViewEx9 },
+	0x0812: { n:"ContinueFrt", f:parse_ContinueFrt },
+	0x0813: { n:"RealTimeData", f:parse_RealTimeData },
+	0x0850: { n:"ChartFrtInfo", f:parse_ChartFrtInfo },
+	0x0851: { n:"FrtWrapper", f:parse_FrtWrapper },
+	0x0852: { n:"StartBlock", f:parse_StartBlock },
+	0x0853: { n:"EndBlock", f:parse_EndBlock },
+	0x0854: { n:"StartObject", f:parse_StartObject },
+	0x0855: { n:"EndObject", f:parse_EndObject },
+	0x0856: { n:"CatLab", f:parse_CatLab },
+	0x0857: { n:"YMult", f:parse_YMult },
+	0x0858: { n:"SXViewLink", f:parse_SXViewLink },
+	0x0859: { n:"PivotChartBits", f:parse_PivotChartBits },
+	0x085a: { n:"FrtFontList", f:parse_FrtFontList },
+	0x0862: { n:"SheetExt", f:parse_SheetExt },
+	0x0863: { n:"BookExt", f:parse_BookExt, r:12},
+	0x0864: { n:"SXAddl", f:parse_SXAddl },
+	0x0865: { n:"CrErr", f:parse_CrErr },
+	0x0866: { n:"HFPicture", f:parse_HFPicture },
+	0x0867: { n:'FeatHdr', f:parse_FeatHdr },
+	0x0868: { n:"Feat", f:parse_Feat },
+	0x086a: { n:"DataLabExt", f:parse_DataLabExt },
+	0x086b: { n:"DataLabExtContents", f:parse_DataLabExtContents },
+	0x086c: { n:"CellWatch", f:parse_CellWatch },
+	0x0871: { n:"FeatHdr11", f:parse_FeatHdr11 },
+	0x0872: { n:"Feature11", f:parse_Feature11 },
+	0x0874: { n:"DropDownObjIds", f:parse_DropDownObjIds },
+	0x0875: { n:"ContinueFrt11", f:parse_ContinueFrt11 },
+	0x0876: { n:"DConn", f:parse_DConn },
+	0x0877: { n:"List12", f:parse_List12 },
+	0x0878: { n:"Feature12", f:parse_Feature12 },
+	0x0879: { n:"CondFmt12", f:parse_CondFmt12 },
+	0x087a: { n:"CF12", f:parse_CF12 },
+	0x087b: { n:"CFEx", f:parse_CFEx },
+	0x087c: { n:"XFCRC", f:parse_XFCRC, r:12 },
+	0x087d: { n:"XFExt", f:parse_XFExt, r:12 },
+	0x087e: { n:"AutoFilter12", f:parse_AutoFilter12 },
+	0x087f: { n:"ContinueFrt12", f:parse_ContinueFrt12 },
+	0x0884: { n:"MDTInfo", f:parse_MDTInfo },
+	0x0885: { n:"MDXStr", f:parse_MDXStr },
+	0x0886: { n:"MDXTuple", f:parse_MDXTuple },
+	0x0887: { n:"MDXSet", f:parse_MDXSet },
+	0x0888: { n:"MDXProp", f:parse_MDXProp },
+	0x0889: { n:"MDXKPI", f:parse_MDXKPI },
+	0x088a: { n:"MDB", f:parse_MDB },
+	0x088b: { n:"PLV", f:parse_PLV },
+	0x088c: { n:"Compat12", f:parse_Compat12, r:12 },
+	0x088d: { n:"DXF", f:parse_DXF },
+	0x088e: { n:"TableStyles", f:parse_TableStyles, r:12 },
+	0x088f: { n:"TableStyle", f:parse_TableStyle },
+	0x0890: { n:"TableStyleElement", f:parse_TableStyleElement },
+	0x0892: { n:"StyleExt", f:parse_StyleExt },
+	0x0893: { n:"NamePublish", f:parse_NamePublish },
+	0x0894: { n:"NameCmt", f:parse_NameCmt },
+	0x0895: { n:"SortData", f:parse_SortData },
+	0x0896: { n:"Theme", f:parse_Theme, r:12 },
+	0x0897: { n:"GUIDTypeLib", f:parse_GUIDTypeLib },
+	0x0898: { n:"FnGrp12", f:parse_FnGrp12 },
+	0x0899: { n:"NameFnGrp12", f:parse_NameFnGrp12 },
+	0x089a: { n:"MTRSettings", f:parse_MTRSettings, r:12 },
+	0x089b: { n:"CompressPictures", f:parse_CompressPictures },
+	0x089c: { n:"HeaderFooter", f:parse_HeaderFooter },
+	0x089d: { n:"CrtLayout12", f:parse_CrtLayout12 },
+	0x089e: { n:"CrtMlFrt", f:parse_CrtMlFrt },
+	0x089f: { n:"CrtMlFrtContinue", f:parse_CrtMlFrtContinue },
+	0x08a3: { n:"ForceFullCalculation", f:parse_ForceFullCalculation },
+	0x08a4: { n:"ShapePropsStream", f:parse_ShapePropsStream },
+	0x08a5: { n:"TextPropsStream", f:parse_TextPropsStream },
+	0x08a6: { n:"RichTextStream", f:parse_RichTextStream },
+	0x08a7: { n:"CrtLayout12A", f:parse_CrtLayout12A },
+	0x1001: { n:"Units", f:parse_Units },
+	0x1002: { n:"Chart", f:parse_Chart },
+	0x1003: { n:"Series", f:parse_Series },
+	0x1006: { n:"DataFormat", f:parse_DataFormat },
+	0x1007: { n:"LineFormat", f:parse_LineFormat },
+	0x1009: { n:"MarkerFormat", f:parse_MarkerFormat },
+	0x100a: { n:"AreaFormat", f:parse_AreaFormat },
+	0x100b: { n:"PieFormat", f:parse_PieFormat },
+	0x100c: { n:"AttachedLabel", f:parse_AttachedLabel },
+	0x100d: { n:"SeriesText", f:parse_SeriesText },
+	0x1014: { n:"ChartFormat", f:parse_ChartFormat },
+	0x1015: { n:"Legend", f:parse_Legend },
+	0x1016: { n:"SeriesList", f:parse_SeriesList },
+	0x1017: { n:"Bar", f:parse_Bar },
+	0x1018: { n:"Line", f:parse_Line },
+	0x1019: { n:"Pie", f:parse_Pie },
+	0x101a: { n:"Area", f:parse_Area },
+	0x101b: { n:"Scatter", f:parse_Scatter },
+	0x101c: { n:"CrtLine", f:parse_CrtLine },
+	0x101d: { n:"Axis", f:parse_Axis },
+	0x101e: { n:"Tick", f:parse_Tick },
+	0x101f: { n:"ValueRange", f:parse_ValueRange },
+	0x1020: { n:"CatSerRange", f:parse_CatSerRange },
+	0x1021: { n:"AxisLine", f:parse_AxisLine },
+	0x1022: { n:"CrtLink", f:parse_CrtLink },
+	0x1024: { n:"DefaultText", f:parse_DefaultText },
+	0x1025: { n:"Text", f:parse_Text },
+	0x1026: { n:"FontX", f:parse_FontX },
+	0x1027: { n:"ObjectLink", f:parse_ObjectLink },
+	0x1032: { n:"Frame", f:parse_Frame },
+	0x1033: { n:"Begin", f:parse_Begin },
+	0x1034: { n:"End", f:parse_End },
+	0x1035: { n:"PlotArea", f:parse_PlotArea },
+	0x103a: { n:"Chart3d", f:parse_Chart3d },
+	0x103c: { n:"PicF", f:parse_PicF },
+	0x103d: { n:"DropBar", f:parse_DropBar },
+	0x103e: { n:"Radar", f:parse_Radar },
+	0x103f: { n:"Surf", f:parse_Surf },
+	0x1040: { n:"RadarArea", f:parse_RadarArea },
+	0x1041: { n:"AxisParent", f:parse_AxisParent },
+	0x1043: { n:"LegendException", f:parse_LegendException },
+	0x1044: { n:"ShtProps", f:parse_ShtProps },
+	0x1045: { n:"SerToCrt", f:parse_SerToCrt },
+	0x1046: { n:"AxesUsed", f:parse_AxesUsed },
+	0x1048: { n:"SBaseRef", f:parse_SBaseRef },
+	0x104a: { n:"SerParent", f:parse_SerParent },
+	0x104b: { n:"SerAuxTrend", f:parse_SerAuxTrend },
+	0x104e: { n:"IFmtRecord", f:parse_IFmtRecord },
+	0x104f: { n:"Pos", f:parse_Pos },
+	0x1050: { n:"AlRuns", f:parse_AlRuns },
+	0x1051: { n:"BRAI", f:parse_BRAI },
+	0x105b: { n:"SerAuxErrBar", f:parse_SerAuxErrBar },
+	0x105c: { n:"ClrtClient", f:parse_ClrtClient },
+	0x105d: { n:"SerFmt", f:parse_SerFmt },
+	0x105f: { n:"Chart3DBarShape", f:parse_Chart3DBarShape },
+	0x1060: { n:"Fbi", f:parse_Fbi },
+	0x1061: { n:"BopPop", f:parse_BopPop },
+	0x1062: { n:"AxcExt", f:parse_AxcExt },
+	0x1063: { n:"Dat", f:parse_Dat },
+	0x1064: { n:"PlotGrowth", f:parse_PlotGrowth },
+	0x1065: { n:"SIIndex", f:parse_SIIndex },
+	0x1066: { n:"GelFrame", f:parse_GelFrame },
+	0x1067: { n:"BopPopCustom", f:parse_BopPopCustom },
+	0x1068: { n:"Fbi2", f:parse_Fbi2 },
+
+	/* These are specified in an older version of the spec */
+	0x0016: { n:"ExternCount", f:parsenoop },
+	0x007e: { n:"RK", f:parsenoop }, /* Not necessarily same as 0x027e */
+	0x007f: { n:"ImData", f:parsenoop },
+	0x0087: { n:"Addin", f:parsenoop },
+	0x0088: { n:"Edg", f:parsenoop },
+	0x0089: { n:"Pub", f:parsenoop },
+	0x0091: { n:"Sub", f:parsenoop },
+	0x0094: { n:"LHRecord", f:parsenoop },
+	0x0095: { n:"LHNGraph", f:parsenoop },
+	0x0096: { n:"Sound", f:parsenoop },
+	0x00a9: { n:"CoordList", f:parsenoop },
+	0x00ab: { n:"GCW", f:parsenoop },
+	0x00bc: { n:"ShrFmla", f:parsenoop }, /* Not necessarily same as 0x04bc */
+	0x00c2: { n:"AddMenu", f:parsenoop },
+	0x00c3: { n:"DelMenu", f:parsenoop },
+	0x00d6: { n:"RString", f:parsenoop },
+	0x00df: { n:"UDDesc", f:parsenoop },
+	0x00ea: { n:"TabIdConf", f:parsenoop },
+	0x0162: { n:"XL5Modify", f:parsenoop },
+	0x01a5: { n:"FileSharing2", f:parsenoop },
+	0x0218: { n:"Name", f:parsenoop },
+	0x0223: { n:"ExternName", f:parse_ExternName },
+	0x0231: { n:"Font", f:parsenoop },
+	0x0406: { n:"Formula", f:parse_Formula },
+	0x086d: { n:"FeatInfo", f:parsenoop },
+	0x0873: { n:"FeatInfo11", f:parsenoop },
+	0x0881: { n:"SXAddl12", f:parsenoop },
+	0x08c0: { n:"AutoWebPub", f:parsenoop },
+	0x08c1: { n:"ListObj", f:parsenoop },
+	0x08c2: { n:"ListField", f:parsenoop },
+	0x08c3: { n:"ListDV", f:parsenoop },
+	0x08c4: { n:"ListCondFmt", f:parsenoop },
+	0x08c5: { n:"ListCF", f:parsenoop },
+	0x08c6: { n:"FMQry", f:parsenoop },
+	0x08c7: { n:"FMSQry", f:parsenoop },
+	0x08c8: { n:"PLV", f:parsenoop }, /* supposedly PLV for Excel 11 */
+	0x08c9: { n:"LnExt", f:parsenoop },
+	0x08ca: { n:"MkrExt", f:parsenoop },
+	0x08cb: { n:"CrtCoopt", f:parsenoop },
+
+	0x0000: {}
+};
+
+
+/* Helper function to call out to ODS parser */
+function parse_ods(zip, opts) {
+	if(typeof module !== "undefined" && typeof require !== 'undefined' && typeof ODS === 'undefined') ODS = require('./od' + 's');
+	if(typeof ODS === 'undefined' || !ODS.parse_ods) throw new Error("Unsupported ODS");
+	return ODS.parse_ods(zip, opts);
+}
+function fix_opts_func(defaults) {
+	return function fix_opts(opts) {
+		for(var i = 0; i != defaults.length; ++i) {
+			var d = defaults[i];
+			if(opts[d[0]] === undefined) opts[d[0]] = d[1];
+			if(d[2] === 'n') opts[d[0]] = Number(opts[d[0]]);
+		}
+	};
+}
+
+var fix_read_opts = fix_opts_func([
+	['cellNF', false], /* emit cell number format string as .z */
+	['cellHTML', true], /* emit html string as .h */
+	['cellFormula', true], /* emit formulae as .f */
+	['cellStyles', false], /* emits style/theme as .s */
+	['cellDates', false], /* emit date cells with type `d` */
+
+	['sheetStubs', false], /* emit empty cells */
+	['sheetRows', 0, 'n'], /* read n rows (0 = read all rows) */
+
+	['bookDeps', false], /* parse calculation chains */
+	['bookSheets', false], /* only try to get sheet names (no Sheets) */
+	['bookProps', false], /* only try to get properties (no Sheets) */
+	['bookFiles', false], /* include raw file structure (keys, files, cfb) */
+	['bookVBA', false], /* include vba raw data (vbaraw) */
+
+	['password',''], /* password */
+	['WTF', false] /* WTF mode (throws errors) */
+]);
+
+
+var fix_write_opts = fix_opts_func([
+	['cellDates', false], /* write date cells with type `d` */
+
+	['bookSST', false], /* Generate Shared String Table */
+
+	['bookType', 'xlsx'], /* Type of workbook (xlsx/m/b) */
+
+	['WTF', false] /* WTF mode (throws errors) */
+]);
+function safe_parse_wbrels(wbrels, sheets) {
+	if(!wbrels) return 0;
+	try {
+		wbrels = sheets.map(function pwbr(w) { return [w.name, wbrels['!id'][w.id].Target]; });
+	} catch(e) { return null; }
+	return !wbrels || wbrels.length === 0 ? null : wbrels;
+}
+
+function safe_parse_ws(zip, path, relsPath, sheet, sheetRels, sheets, opts) {
+	try {
+		sheetRels[sheet]=parse_rels(getzipdata(zip, relsPath, true), path);
+		sheets[sheet]=parse_ws(getzipdata(zip, path),path,opts,sheetRels[sheet]);
+	} catch(e) { if(opts.WTF) throw e; }
+}
+
+var nodirs = function nodirs(x){return x.substr(-1) != '/';};
+function parse_zip(zip, opts) {
+	make_ssf(SSF);
+	opts = opts || {};
+	fix_read_opts(opts);
+	reset_cp();
+
+	/* OpenDocument Part 3 Section 2.2.1 OpenDocument Package */
+	if(safegetzipfile(zip, 'META-INF/manifest.xml')) return parse_ods(zip, opts);
+
+	var entries = keys(zip.files).filter(nodirs).sort();
+	var dir = parse_ct(getzipdata(zip, '[Content_Types].xml'), opts);
+	var xlsb = false;
+	var sheets, binname;
+	if(dir.workbooks.length === 0) {
+		binname = "xl/workbook.xml";
+		if(getzipdata(zip,binname, true)) dir.workbooks.push(binname);
+	}
+	if(dir.workbooks.length === 0) {
+		binname = "xl/workbook.bin";
+		if(!getzipfile(zip,binname,true)) throw new Error("Could not find workbook");
+		dir.workbooks.push(binname);
+		xlsb = true;
+	}
+	if(dir.workbooks[0].substr(-3) == "bin") xlsb = true;
+	if(xlsb) set_cp(1200);
+
+	if(!opts.bookSheets && !opts.bookProps) {
+		strs = [];
+		if(dir.sst) strs=parse_sst(getzipdata(zip, dir.sst.replace(/^\//,'')), dir.sst, opts);
+
+    // parse themes before styles so that we can reliably decode theme/tint into rgb when parsing styles
+    themes = {};
+    if(opts.cellStyles && dir.themes.length) themes = parse_theme(getzipdata(zip, dir.themes[0].replace(/^\//,''), true),dir.themes[0], opts);
+
+    styles = {};
+		if(dir.style) styles = parse_sty(getzipdata(zip, dir.style.replace(/^\//,'')),dir.style, opts);
+
+	}
+
+	var wb = parse_wb(getzipdata(zip, dir.workbooks[0].replace(/^\//,'')), dir.workbooks[0], opts);
+
+	var props = {}, propdata = "";
+
+	if(dir.coreprops.length !== 0) {
+		propdata = getzipdata(zip, dir.coreprops[0].replace(/^\//,''), true);
+		if(propdata) props = parse_core_props(propdata);
+		if(dir.extprops.length !== 0) {
+			propdata = getzipdata(zip, dir.extprops[0].replace(/^\//,''), true);
+			if(propdata) parse_ext_props(propdata, props);
+		}
+	}
+
+	var custprops = {};
+	if(!opts.bookSheets || opts.bookProps) {
+		if (dir.custprops.length !== 0) {
+			propdata = getzipdata(zip, dir.custprops[0].replace(/^\//,''), true);
+			if(propdata) custprops = parse_cust_props(propdata, opts);
+		}
+	}
+
+	var out = {};
+	if(opts.bookSheets || opts.bookProps) {
+		if(props.Worksheets && props.SheetNames.length > 0) sheets=props.SheetNames;
+		else if(wb.Sheets) sheets = wb.Sheets.map(function pluck(x){ return x.name; });
+		if(opts.bookProps) { out.Props = props; out.Custprops = custprops; }
+		if(typeof sheets !== 'undefined') out.SheetNames = sheets;
+		if(opts.bookSheets ? out.SheetNames : opts.bookProps) return out;
+	}
+	sheets = {};
+
+	var deps = {};
+	if(opts.bookDeps && dir.calcchain) deps=parse_cc(getzipdata(zip, dir.calcchain.replace(/^\//,'')),dir.calcchain,opts);
+
+	var i=0;
+	var sheetRels = {};
+	var path, relsPath;
+	if(!props.Worksheets) {
+		var wbsheets = wb.Sheets;
+		props.Worksheets = wbsheets.length;
+		props.SheetNames = [];
+		for(var j = 0; j != wbsheets.length; ++j) {
+			props.SheetNames[j] = wbsheets[j].name;
+		}
+	}
+
+	var wbext = xlsb ? "bin" : "xml";
+	var wbrelsfile = 'xl/_rels/workbook.' + wbext + '.rels';
+	var wbrels = parse_rels(getzipdata(zip, wbrelsfile, true), wbrelsfile);
+	if(wbrels) wbrels = safe_parse_wbrels(wbrels, wb.Sheets);
+	/* Numbers iOS hack */
+	var nmode = (getzipdata(zip,"xl/worksheets/sheet.xml",true))?1:0;
+	for(i = 0; i != props.Worksheets; ++i) {
+		if(wbrels) path = 'xl/' + (wbrels[i][1]).replace(/[\/]?xl\//, "");
+		else {
+			path = 'xl/worksheets/sheet'+(i+1-nmode)+"." + wbext;
+			path = path.replace(/sheet0\./,"sheet.");
+		}
+		relsPath = path.replace(/^(.*)(\/)([^\/]*)$/, "$1/_rels/$3.rels");
+		safe_parse_ws(zip, path, relsPath, props.SheetNames[i], sheetRels, sheets, opts);
+	}
+
+	if(dir.comments) parse_comments(zip, dir.comments, sheets, sheetRels, opts);
+
+	out = {
+		Directory: dir,
+		Workbook: wb,
+		Props: props,
+		Custprops: custprops,
+		Deps: deps,
+		Sheets: sheets,
+		SheetNames: props.SheetNames,
+		Strings: strs,
+		Styles: styles,
+		Themes: themes,
+		SSF: SSF.get_table()
+	};
+	if(opts.bookFiles) {
+		out.keys = entries;
+		out.files = zip.files;
+	}
+	if(opts.bookVBA) {
+		if(dir.vba.length > 0) out.vbaraw = getzipdata(zip,dir.vba[0],true);
+		else if(dir.defaults.bin === 'application/vnd.ms-office.vbaProject') out.vbaraw = getzipdata(zip,'xl/vbaProject.bin',true);
+	}
+	return out;
+}
+function add_rels(rels, rId, f, type, relobj) {
+	if(!relobj) relobj = {};
+	if(!rels['!id']) rels['!id'] = {};
+	relobj.Id = 'rId' + rId;
+	relobj.Type = type;
+	relobj.Target = f;
+	if(rels['!id'][relobj.Id]) throw new Error("Cannot rewrite rId " + rId);
+	rels['!id'][relobj.Id] = relobj;
+	rels[('/' + relobj.Target).replace("//","/")] = relobj;
+}
+
+function write_zip(wb, opts) {
+	if(wb && !wb.SSF) {
+		wb.SSF = SSF.get_table();
+	}
+	if(wb && wb.SSF) {
+		make_ssf(SSF); SSF.load_table(wb.SSF);
+		opts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;
+	}
+	opts.rels = {}; opts.wbrels = {};
+	opts.Strings = []; opts.Strings.Count = 0; opts.Strings.Unique = 0;
+	var wbext = opts.bookType == "xlsb" ? "bin" : "xml";
+	var ct = { workbooks: [], sheets: [], calcchains: [], themes: [], styles: [],
+		coreprops: [], extprops: [], custprops: [], strs:[], comments: [], vba: [],
+		TODO:[], rels:[], xmlns: "" };
+	fix_write_opts(opts = opts || {});
+	var zip = new jszip();
+	var f = "", rId = 0;
+
+	opts.cellXfs = [];
+	get_cell_style(opts.cellXfs, {}, {revssf:{"General":0}});
+
+	f = "docProps/core.xml";
+	zip.file(f, write_core_props(wb.Props, opts));
+	ct.coreprops.push(f);
+	add_rels(opts.rels, 2, f, RELS.CORE_PROPS);
+
+	f = "docProps/app.xml";
+	if(!wb.Props) wb.Props = {};
+	wb.Props.SheetNames = wb.SheetNames;
+	wb.Props.Worksheets = wb.SheetNames.length;
+	zip.file(f, write_ext_props(wb.Props, opts));
+	ct.extprops.push(f);
+	add_rels(opts.rels, 3, f, RELS.EXT_PROPS);
+
+	if(wb.Custprops !== wb.Props && keys(wb.Custprops||{}).length > 0) {
+		f = "docProps/custom.xml";
+		zip.file(f, write_cust_props(wb.Custprops, opts));
+		ct.custprops.push(f);
+		add_rels(opts.rels, 4, f, RELS.CUST_PROPS);
+	}
+
+	f = "xl/workbook." + wbext;
+	zip.file(f, write_wb(wb, f, opts));
+	ct.workbooks.push(f);
+	add_rels(opts.rels, 1, f, RELS.WB);
+
+	for(rId=1;rId <= wb.SheetNames.length; ++rId) {
+		f = "xl/worksheets/sheet" + rId + "." + wbext;
+		zip.file(f, write_ws(rId-1, f, opts, wb));
+		ct.sheets.push(f);
+		add_rels(opts.wbrels, rId, "worksheets/sheet" + rId + "." + wbext, RELS.WS);
+	}
+
+	if(opts.Strings != null && opts.Strings.length > 0) {
+		f = "xl/sharedStrings." + wbext;
+		zip.file(f, write_sst(opts.Strings, f, opts));
+		ct.strs.push(f);
+		add_rels(opts.wbrels, ++rId, "sharedStrings." + wbext, RELS.SST);
+	}
+
+	/* TODO: something more intelligent with themes */
+
+	f = "xl/theme/theme1.xml";
+  zip.file(f, write_theme(opts));
+	ct.themes.push(f);
+	add_rels(opts.wbrels, ++rId, "theme/theme1.xml", RELS.THEME);
+
+	/* TODO: something more intelligent with styles */
+
+	f = "xl/styles." + wbext;
+	zip.file(f, write_sty(wb, f, opts));
+	ct.styles.push(f);
+	add_rels(opts.wbrels, ++rId, "styles." + wbext, RELS.STY);
+
+	zip.file("[Content_Types].xml", write_ct(ct, opts));
+	zip.file('_rels/.rels', write_rels(opts.rels));
+	zip.file('xl/_rels/workbook.' + wbext + '.rels', write_rels(opts.wbrels));
+	return zip;
+}
+function firstbyte(f,o) {
+	switch((o||{}).type || "base64") {
+		case 'buffer': return f[0];
+		case 'base64': return Base64.decode(f.substr(0,12)).charCodeAt(0);
+		case 'binary': return f.charCodeAt(0);
+		case 'array': return f[0];
+		default: throw new Error("Unrecognized type " + o.type);
+	}
+}
+
+function read_zip(data, opts) {
+	var zip, d = data;
+	var o = opts||{};
+	if(!o.type) o.type = (has_buf && Buffer.isBuffer(data)) ? "buffer" : "base64";
+	switch(o.type) {
+		case "base64": zip = new jszip(d, { base64:true }); break;
+		case "binary": case "array": zip = new jszip(d, { base64:false }); break;
+		case "buffer": zip = new jszip(d); break;
+		case "file": zip=new jszip(d=_fs.readFileSync(data)); break;
+		default: throw new Error("Unrecognized type " + o.type);
+	}
+	return parse_zip(zip, o);
+}
+
+function readSync(data, opts) {
+	var zip, d = data, isfile = false, n;
+	var o = opts||{};
+	if(!o.type) o.type = (has_buf && Buffer.isBuffer(data)) ? "buffer" : "base64";
+	if(o.type == "file") { isfile = true; o.type = "buffer"; d = _fs.readFileSync(data); }
+	switch((n = firstbyte(d, o))) {
+		case 0xD0:
+			if(isfile) o.type = "file";
+			return parse_xlscfb(CFB.read(data, o), o);
+		case 0x09: return parse_xlscfb(s2a(o.type === 'base64' ? Base64.decode(data) : data), o);
+		case 0x3C: return parse_xlml(d, o);
+		case 0x50:
+			if(isfile) o.type = "file";
+			return read_zip(data, opts);
+		default: throw new Error("Unsupported file " + n);
+	}
+}
+
+function readFileSync(data, opts) {
+	var o = opts||{}; o.type = 'file'
+  var wb = readSync(data, o);
+  wb.FILENAME = data;
+	return wb;
+}
+function write_zip_type(wb, opts) {
+	var o = opts||{};
+  style_builder  = new StyleBuilder(opts);
+
+  var z = write_zip(wb, o);
+	switch(o.type) {
+		case "base64": return z.generate({type:"base64"});
+		case "binary": return z.generate({type:"string"});
+		case "buffer": return z.generate({type:"nodebuffer"});
+		case "file": return _fs.writeFileSync(o.file, z.generate({type:"nodebuffer"}));
+		default: throw new Error("Unrecognized type " + o.type);
+	}
+}
+
+function writeSync(wb, opts) {
+	var o = opts||{};
+	switch(o.bookType) {
+		case 'xml': return write_xlml(wb, o);
+		default: return write_zip_type(wb, o);
+	}
+}
+
+function writeFileSync(wb, filename, opts) {
+	var o = opts||{}; o.type = 'file';
+
+	o.file = filename;
+	switch(o.file.substr(-5).toLowerCase()) {
+		case '.xlsx': o.bookType = 'xlsx'; break;
+		case '.xlsm': o.bookType = 'xlsm'; break;
+		case '.xlsb': o.bookType = 'xlsb'; break;
+	default: switch(o.file.substr(-4).toLowerCase()) {
+		case '.xls': o.bookType = 'xls'; break;
+		case '.xml': o.bookType = 'xml'; break;
+	}}
+	return writeSync(wb, o);
+}
+
+function decode_row(rowstr) { return parseInt(unfix_row(rowstr),10) - 1; }
+function encode_row(row) { return "" + (row + 1); }
+function fix_row(cstr) { return cstr.replace(/([A-Z]|^)(\d+)$/,"$1$$$2"); }
+function unfix_row(cstr) { return cstr.replace(/\$(\d+)$/,"$1"); }
+
+function decode_col(colstr) { var c = unfix_col(colstr), d = 0, i = 0; for(; i !== c.length; ++i) d = 26*d + c.charCodeAt(i) - 64; return d - 1; }
+function encode_col(col) { var s=""; for(++col; col; col=Math.floor((col-1)/26)) s = String.fromCharCode(((col-1)%26) + 65) + s; return s; }
+function fix_col(cstr) { return cstr.replace(/^([A-Z])/,"$$$1"); }
+function unfix_col(cstr) { return cstr.replace(/^\$([A-Z])/,"$1"); }
+
+function split_cell(cstr) { return cstr.replace(/(\$?[A-Z]*)(\$?\d*)/,"$1,$2").split(","); }
+function decode_cell(cstr) { var splt = split_cell(cstr); return { c:decode_col(splt[0]), r:decode_row(splt[1]) }; }
+function encode_cell(cell) { return encode_col(cell.c) + encode_row(cell.r); }
+function fix_cell(cstr) { return fix_col(fix_row(cstr)); }
+function unfix_cell(cstr) { return unfix_col(unfix_row(cstr)); }
+function decode_range(range) { var x =range.split(":").map(decode_cell); return {s:x[0],e:x[x.length-1]}; }
+function encode_range(cs,ce) {
+	if(ce === undefined || typeof ce === 'number') return encode_range(cs.s, cs.e);
+	if(typeof cs !== 'string') cs = encode_cell(cs); if(typeof ce !== 'string') ce = encode_cell(ce);
+	return cs == ce ? cs : cs + ":" + ce;
+}
+
+function safe_decode_range(range) {
+	var o = {s:{c:0,r:0},e:{c:0,r:0}};
+	var idx = 0, i = 0, cc = 0;
+	var len = range.length;
+	for(idx = 0; i < len; ++i) {
+		if((cc=range.charCodeAt(i)-64) < 1 || cc > 26) break;
+		idx = 26*idx + cc;
+	}
+	o.s.c = --idx;
+
+	for(idx = 0; i < len; ++i) {
+		if((cc=range.charCodeAt(i)-48) < 0 || cc > 9) break;
+		idx = 10*idx + cc;
+	}
+	o.s.r = --idx;
+
+	if(i === len || range.charCodeAt(++i) === 58) { o.e.c=o.s.c; o.e.r=o.s.r; return o; }
+
+	for(idx = 0; i != len; ++i) {
+		if((cc=range.charCodeAt(i)-64) < 1 || cc > 26) break;
+		idx = 26*idx + cc;
+	}
+	o.e.c = --idx;
+
+	for(idx = 0; i != len; ++i) {
+		if((cc=range.charCodeAt(i)-48) < 0 || cc > 9) break;
+		idx = 10*idx + cc;
+	}
+	o.e.r = --idx;
+	return o;
+}
+
+function safe_format_cell(cell, v) {
+	if(cell.z !== undefined) try { return (cell.w = SSF.format(cell.z, v)); } catch(e) { }
+	if(!cell.XF) return v;
+	try { return (cell.w = SSF.format(cell.XF.ifmt||0, v)); } catch(e) { return ''+v; }
+}
+
+function format_cell(cell, v) {
+	if(cell == null || cell.t == null) return "";
+	if(cell.w !== undefined) return cell.w;
+	if(v === undefined) return safe_format_cell(cell, cell.v);
+	return safe_format_cell(cell, v);
+}
+
+function sheet_to_json(sheet, opts){
+	var val, row, range, header = 0, offset = 1, r, hdr = [], isempty, R, C, v;
+	var o = opts != null ? opts : {};
+	var raw = o.raw;
+	if(sheet == null || sheet["!ref"] == null) return [];
+	range = o.range !== undefined ? o.range : sheet["!ref"];
+	if(o.header === 1) header = 1;
+	else if(o.header === "A") header = 2;
+	else if(Array.isArray(o.header)) header = 3;
+	switch(typeof range) {
+		case 'string': r = safe_decode_range(range); break;
+		case 'number': r = safe_decode_range(sheet["!ref"]); r.s.r = range; break;
+		default: r = range;
+	}
+	if(header > 0) offset = 0;
+	var rr = encode_row(r.s.r);
+	var cols = new Array(r.e.c-r.s.c+1);
+	var out = new Array(r.e.r-r.s.r-offset+1);
+	var outi = 0;
+	for(C = r.s.c; C <= r.e.c; ++C) {
+		cols[C] = encode_col(C);
+		val = sheet[cols[C] + rr];
+		switch(header) {
+			case 1: hdr[C] = C; break;
+			case 2: hdr[C] = cols[C]; break;
+			case 3: hdr[C] = o.header[C - r.s.c]; break;
+			default:
+				if(val === undefined) continue;
+				hdr[C] = format_cell(val);
+		}
+	}
+
+	for (R = r.s.r + offset; R <= r.e.r; ++R) {
+		rr = encode_row(R);
+		isempty = true;
+		if(header === 1) row = [];
+		else {
+			row = {};
+			if(Object.defineProperty) Object.defineProperty(row, '__rowNum__', {value:R, enumerable:false});
+			else row.__rowNum__ = R;
+		}
+		for (C = r.s.c; C <= r.e.c; ++C) {
+			val = sheet[cols[C] + rr];
+			if(val === undefined || val.t === undefined) continue;
+			v = val.v;
+			switch(val.t){
+				case 'e': continue;
+				case 's': break;
+				case 'b': case 'n': break;
+				default: throw 'unrecognized type ' + val.t;
+			}
+			if(v !== undefined) {
+				row[hdr[C]] = raw ? v : format_cell(val,v);
+				isempty = false;
+			}
+		}
+		if(isempty === false || header === 1) out[outi++] = row;
+	}
+	out.length = outi;
+	return out;
+}
+
+function sheet_to_row_object_array(sheet, opts) { return sheet_to_json(sheet, opts != null ? opts : {}); }
+
+function sheet_to_csv(sheet, opts) {
+	var out = "", txt = "", qreg = /"/g;
+	var o = opts == null ? {} : opts;
+	if(sheet == null || sheet["!ref"] == null) return "";
+	var r = safe_decode_range(sheet["!ref"]);
+	var FS = o.FS !== undefined ? o.FS : ",", fs = FS.charCodeAt(0);
+	var RS = o.RS !== undefined ? o.RS : "\n", rs = RS.charCodeAt(0);
+	var row = "", rr = "", cols = [];
+	var i = 0, cc = 0, val;
+	var R = 0, C = 0;
+	for(C = r.s.c; C <= r.e.c; ++C) cols[C] = encode_col(C);
+	for(R = r.s.r; R <= r.e.r; ++R) {
+		row = "";
+		rr = encode_row(R);
+		for(C = r.s.c; C <= r.e.c; ++C) {
+			val = sheet[cols[C] + rr];
+			txt = val !== undefined ? ''+format_cell(val) : "";
+			for(i = 0, cc = 0; i !== txt.length; ++i) if((cc = txt.charCodeAt(i)) === fs || cc === rs || cc === 34) {
+				txt = "\"" + txt.replace(qreg, '""') + "\""; break; }
+			row += (C === r.s.c ? "" : FS) + txt;
+		}
+		out += row + RS;
+	}
+	return out;
+}
+var make_csv = sheet_to_csv;
+
+function sheet_to_formulae(sheet) {
+	var cmds, y = "", x, val="";
+	if(sheet == null || sheet["!ref"] == null) return "";
+	var r = safe_decode_range(sheet['!ref']), rr = "", cols = [], C;
+	cmds = new Array((r.e.r-r.s.r+1)*(r.e.c-r.s.c+1));
+	var i = 0;
+	for(C = r.s.c; C <= r.e.c; ++C) cols[C] = encode_col(C);
+	for(var R = r.s.r; R <= r.e.r; ++R) {
+		rr = encode_row(R);
+		for(C = r.s.c; C <= r.e.c; ++C) {
+			y = cols[C] + rr;
+			x = sheet[y];
+			val = "";
+			if(x === undefined) continue;
+			if(x.f != null) val = x.f;
+			else if(x.w !== undefined) val = "'" + x.w;
+			else if(x.v === undefined) continue;
+			else val = ""+x.v;
+			cmds[i++] = y + "=" + val;
+		}
+	}
+	cmds.length = i;
+	return cmds;
+}
+
+var utils = {
+	encode_col: encode_col,
+	encode_row: encode_row,
+	encode_cell: encode_cell,
+	encode_range: encode_range,
+	decode_col: decode_col,
+	decode_row: decode_row,
+	split_cell: split_cell,
+	decode_cell: decode_cell,
+	decode_range: decode_range,
+	format_cell: format_cell,
+	get_formulae: sheet_to_formulae,
+	make_csv: sheet_to_csv,
+	make_json: sheet_to_json,
+	make_formulae: sheet_to_formulae,
+	sheet_to_csv: sheet_to_csv,
+	sheet_to_json: sheet_to_json,
+	sheet_to_formulae: sheet_to_formulae,
+	sheet_to_row_object_array: sheet_to_row_object_array
+};
+
+
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////
+var XmlNode = (function () {
+  function XmlNode(tagName, attributes, children) {
+
+    if (!(this instanceof XmlNode)) {
+      return new XmlNode(tagName, attributes, children);
+    }
+    this.tagName = tagName;
+    this._attributes = attributes || {};
+    this._children = children || [];
+    this._prefix = '';
+    return this;
+  }
+
+  XmlNode.prototype.createElement = function () {
+    return new XmlNode(arguments)
+  }
+
+  XmlNode.prototype.children = function() {
+    return this._children;
+  }
+
+  XmlNode.prototype.append = function (node) {
+    this._children.push(node);
+    return this;
+  }
+
+  XmlNode.prototype.prefix = function (prefix) {
+    if (arguments.length==0) { return this._prefix;}
+    this._prefix = prefix;
+    return this;
+  }
+
+  XmlNode.prototype.attr = function (attr, value) {
+    if (value == undefined) {
+      delete this._attributes[attr];
+      return this;
+    }
+    if (arguments.length == 0) {
+      return this._attributes;
+    }
+    else if (typeof attr == 'string' && arguments.length == 1) {
+      return this._attributes.attr[attr];
+    }
+    if (typeof attr == 'object' && arguments.length == 1) {
+      for (var key in attr) {
+        this._attributes[key] = attr[key];
+      }
+    }
+    else if (arguments.length == 2 && typeof attr == 'string') {
+      this._attributes[attr] = value;
+    }
+    return this;
+  }
+
+  var APOS = "'"; QUOTE = '"'
+  var ESCAPED_QUOTE = {  }
+  ESCAPED_QUOTE[QUOTE] = '&quot;'
+  ESCAPED_QUOTE[APOS] = '&apos;'
+
+  XmlNode.prototype.escapeAttributeValue = function(att_value) {
+    return '"' + att_value.replace(/\"/g,'&quot;') + '"';// TODO Extend with four other codes
+
+  }
+
+  XmlNode.prototype.toXml = function (node) {
+    if (!node) node = this;
+    var xml = node._prefix;
+    xml += '<' + node.tagName;
+    if (node._attributes) {
+      for (var key in node._attributes) {
+        xml += ' ' + key + '=' + this.escapeAttributeValue(''+node._attributes[key]) + ''
+      }
+    }
+    if (node._children && node._children.length > 0) {
+      xml += ">";
+      for (var i = 0; i < node._children.length; i++) {
+        xml += this.toXml(node._children[i]);
+      }
+      xml += '</' + node.tagName + '>';
+    }
+    else {
+      xml += '/>';
+    }
+    return xml;
+  }
+  return XmlNode;
+})();
+/////////////////////////////////////////////////////////////////////////////////////////////////////
+
+  var StyleBuilder = function (options) {
+
+    var customNumFmtId = 164;
+
+
+
+    var table_fmt = {
+      0:  'General',
+      1:  '0',
+      2:  '0.00',
+      3:  '#,##0',
+      4:  '#,##0.00',
+      9:  '0%',
+      10: '0.00%',
+      11: '0.00E+00',
+      12: '# ?/?',
+      13: '# ??/??',
+      14: 'm/d/yy',
+      15: 'd-mmm-yy',
+      16: 'd-mmm',
+      17: 'mmm-yy',
+      18: 'h:mm AM/PM',
+      19: 'h:mm:ss AM/PM',
+      20: 'h:mm',
+      21: 'h:mm:ss',
+      22: 'm/d/yy h:mm',
+      37: '#,##0 ;(#,##0)',
+      38: '#,##0 ;[Red](#,##0)',
+      39: '#,##0.00;(#,##0.00)',
+      40: '#,##0.00;[Red](#,##0.00)',
+      45: 'mm:ss',
+      46: '[h]:mm:ss',
+      47: 'mmss.0',
+      48: '##0.0E+0',
+      49: '@',
+      56: '"涓婂崍/涓嬪崍 "hh"鏅�"mm"鍒�"ss"绉� "'    };
+    var fmt_table = {};
+
+    for (var idx in table_fmt) {
+      fmt_table[table_fmt[idx]] = idx;
+    }
+
+
+    // cache style specs to avoid excessive duplication
+    _hashIndex = {};
+    _listIndex = [];
+
+    return {
+
+      initialize: function (options) {
+
+        this.$fonts = XmlNode('fonts').attr('count',0).attr("x14ac:knownFonts","1");
+        this.$fills = XmlNode('fills').attr('count',0);
+        this.$borders = XmlNode('borders').attr('count',0);
+        this.$numFmts = XmlNode('numFmts').attr('count',0);
+        this.$cellStyleXfs = XmlNode('cellStyleXfs');
+        this.$xf = XmlNode('xf')
+            .attr('numFmtId', 0)
+            .attr('fontId', 0)
+            .attr('fillId', 0)
+            .attr('borderId', 0);
+
+        this.$cellXfs = XmlNode('cellXfs').attr('count',0);
+        this.$cellStyles = XmlNode('cellStyles')
+            .append(XmlNode('cellStyle')
+                .attr('name', 'Normal')
+                .attr('xfId',0)
+                .attr('builtinId',0)
+            );
+        this.$dxfs = XmlNode('dxfs').attr('count', "0");
+        this.$tableStyles = XmlNode('tableStyles')
+            .attr('count','0')
+            .attr('defaultTableStyle','TableStyleMedium9')
+            .attr('defaultPivotStyle','PivotStyleMedium4')
+
+
+        this.$styles = XmlNode('styleSheet')
+            .attr('xmlns:mc','http://schemas.openxmlformats.org/markup-compatibility/2006')
+            .attr('xmlns:x14ac','http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac')
+            .attr('xmlns','http://schemas.openxmlformats.org/spreadsheetml/2006/main')
+            .attr('mc:Ignorable','x14ac')
+            .prefix('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>')
+            .append(this.$numFmts)
+            .append(this.$fonts)
+            .append(this.$fills)
+            .append(this.$borders)
+            .append(this.$cellStyleXfs.append(this.$xf))
+            .append(this.$cellXfs)
+            .append(this.$cellStyles)
+            .append(this.$dxfs)
+            .append(this.$tableStyles);
+
+
+        // need to specify styles at index 0 and 1.
+        // the second style MUST be gray125 for some reason
+
+        var defaultStyle = options.defaultCellStyle || {};
+        if (!defaultStyle.font) defaultStyle.font = {name: 'Calibri', sz: '12'};
+        if (!defaultStyle.font.name) defaultStyle.font.name = 'Calibri';
+        if (!defaultStyle.font.sz) defaultStyle.font.sz = 11;
+        if (!defaultStyle.fill) defaultStyle.fill = {  patternType: "none", fgColor: {}};
+        if (!defaultStyle.border) defaultStyle.border = {};
+        if (!defaultStyle.numFmt) defaultStyle.numFmt = 0;
+
+        this.defaultStyle = defaultStyle;
+
+        var gray125Style = JSON.parse(JSON.stringify(defaultStyle));
+        gray125Style.fill = {patternType: "gray125", fgColor: { }}
+
+        this.addStyles([defaultStyle, gray125Style]);
+        return this;
+      },
+
+      // create a style entry and returns an integer index that can be used in the cell .s property
+      // these format of this object follows the emerging Common Spreadsheet Format
+      addStyle: function (attributes) {
+
+        var hashKey = JSON.stringify(attributes);
+        var index = _hashIndex[hashKey];
+        if (index == undefined) {
+
+          index = this._addXf(attributes); //_listIndex.push(attributes) -1;
+          _hashIndex[hashKey] = index;
+        }
+        else {
+          index = _hashIndex[hashKey];
+        }
+        return index;
+      },
+
+      // create style entries and returns array of integer indexes that can be used in cell .s property
+      addStyles: function (styles) {
+        var self = this;
+        return styles.map(function (style) {
+          return self.addStyle(style);
+        })
+      },
+
+      _duckTypeStyle: function(attributes) {
+
+        if (typeof attributes == 'object' && (attributes.patternFill || attributes.fgColor)) {
+          return {fill: attributes }; // this must be read via XLSX.parseFile(...)
+        }
+        else if (attributes.font || attributes.numFmt || attributes.border || attributes.fill) {
+          return attributes;
+        }
+        else {
+          return this._getStyleCSS(attributes)
+        }
+      },
+
+      _getStyleCSS: function(css) {
+        return css; //TODO
+      },
+
+      // Create an <xf> record for the style as well as corresponding <font>, <fill>, <border>, <numfmts>
+      // Right now this is simple and creates a <font>, <fill>, <border>, <numfmts> for every <xf>
+      // We could perhaps get fancier and avoid duplicating  auxiliary entries as Excel presumably intended, but bother.
+      _addXf: function (attributes) {
+
+
+        var fontId = this._addFont(attributes.font);
+        var fillId = this._addFill(attributes.fill);
+        var borderId = this._addBorder(attributes.border);
+        var numFmtId = this._addNumFmt(attributes.numFmt);
+
+        var $xf = XmlNode('xf')
+            .attr("numFmtId", numFmtId)
+            .attr("fontId", fontId)
+            .attr("fillId", fillId)
+            .attr("borderId", borderId)
+            .attr("xfId", "0");
+
+        if (fontId > 0) {
+          $xf.attr('applyFont', "1");
+        }
+        if (fillId > 0) {
+          $xf.attr('applyFill', "1");
+        }
+        if (borderId > 0) {
+          $xf.attr('applyBorder', "1");
+        }
+        if (numFmtId > 0) {
+          $xf.attr('applyNumberFormat', "1");
+        }
+
+        if (attributes.alignment) {
+          var $alignment = XmlNode('alignment');
+          if (attributes.alignment.horizontal) { $alignment.attr('horizontal', attributes.alignment.horizontal);}
+          if (attributes.alignment.vertical)  { $alignment.attr('vertical', attributes.alignment.vertical);}
+          if (attributes.alignment.indent)  { $alignment.attr('indent', attributes.alignment.indent);}
+          if (attributes.alignment.readingOrder)  { $alignment.attr('readingOrder', attributes.alignment.readingOrder);}
+          if (attributes.alignment.wrapText)  { $alignment.attr('wrapText', attributes.alignment.wrapText);}
+          if (attributes.alignment.textRotation!=undefined)  { $alignment.attr('textRotation', attributes.alignment.textRotation);}
+
+          $xf.append($alignment).attr('applyAlignment',1)
+
+        }
+        this.$cellXfs.append($xf);
+        var count = +this.$cellXfs.children().length;
+
+        this.$cellXfs.attr('count', count);
+        return count - 1;
+      },
+
+      _addFont: function (attributes) {
+
+        if (!attributes) {  return 0; }
+
+        var $font = XmlNode('font')
+            .append(XmlNode('sz').attr('val', attributes.sz || this.defaultStyle.font.sz))
+            .append(XmlNode('name').attr('val', attributes.name || this.defaultStyle.font.name))
+
+        if (attributes.bold) $font.append(XmlNode('b'));
+        if (attributes.underline)  $font.append(XmlNode('u'));
+        if (attributes.italic)  $font.append(XmlNode('i'));
+        if (attributes.strike)  $font.append(XmlNode('strike'));
+        if (attributes.outline)  $font.append(XmlNode('outline'));
+        if (attributes.shadow)  $font.append(XmlNode('shadow'));
+
+        if (attributes.vertAlign) {
+          $font.append(XmlNode('vertAlign').attr('val', attributes.vertAlign))
+        }
+
+
+        if (attributes.color) {
+          if (attributes.color.theme) {
+            $font.append(XmlNode('color').attr('theme', attributes.color.theme))
+
+            if (attributes.color.tint) { //tint only if theme
+              $font.append(XmlNode('tint').attr('theme', attributes.color.tint))
+            }
+
+          } else if (attributes.color.rgb) { // not both rgb and theme
+            $font.append(XmlNode('color').attr('rgb', attributes.color.rgb))
+          }
+        }
+
+        this.$fonts.append($font);
+
+        var count = this.$fonts.children().length;
+        this.$fonts.attr('count', count);
+        return count - 1;
+      },
+
+        _addNumFmt: function (numFmt) {
+        if (!numFmt) { return 0; }
+
+        if (typeof numFmt == 'string') {
+          var numFmtIdx = fmt_table[numFmt];
+          if (numFmtIdx >= 0) {
+            return numFmtIdx; // we found a match against built in formats
+          }
+        }
+
+        if (/^[0-9]+$/.exec(numFmt)) {
+          return numFmt; // we're matching an integer against some known code
+        }
+        numFmt = numFmt
+            .replace(/&/g, '&amp;')
+            .replace(/</g, '&lt;')
+            .replace(/>/g, '&gt;')
+            .replace(/"/g, '&quot;')
+            .replace(/'/g, '&apos;');
+
+        var $numFmt = XmlNode('numFmt')
+            .attr('numFmtId', (++customNumFmtId))
+            .attr('formatCode', numFmt);
+
+        this.$numFmts.append($numFmt);
+
+        var count = this.$numFmts.children().length;
+        this.$numFmts.attr('count', count);
+        return customNumFmtId ;
+      },
+
+      _addFill: function (attributes) {
+
+        if (!attributes) { return 0; }
+
+        var $patternFill = XmlNode('patternFill')
+            .attr('patternType', attributes.patternType || 'solid');
+
+        if (attributes.fgColor) {
+          var $fgColor = XmlNode('fgColor');
+
+          //Excel doesn't like it when we set both rgb and theme+tint, but xlsx.parseFile() sets both
+          //var $fgColor = createElement('<fgColor/>', null, null, {xmlMode: true}).attr(attributes.fgColor)
+          if (attributes.fgColor.rgb) {
+
+            if (attributes.fgColor.rgb.length == 6) {
+              attributes.fgColor.rgb = "FF" + attributes.fgColor.rgb /// add alpha to an RGB as Excel expects aRGB
+            }
+
+            $fgColor.attr('rgb', attributes.fgColor.rgb);
+            $patternFill.append($fgColor);
+          }
+          else if (attributes.fgColor.theme) {
+            $fgColor.attr('theme', attributes.fgColor.theme);
+            if (attributes.fgColor.tint) {
+              $fgColor.attr('tint', attributes.fgColor.tint);
+            }
+            $patternFill.append($fgColor);
+          }
+
+          if (!attributes.bgColor) {
+            attributes.bgColor = { "indexed": "64"}
+          }
+        }
+
+        if (attributes.bgColor) {
+          var $bgColor = XmlNode('bgColor').attr(attributes.bgColor);
+          $patternFill.append($bgColor);
+        }
+
+        var $fill = XmlNode('fill')
+            .append($patternFill);
+
+        this.$fills.append($fill);
+
+        var count = this.$fills.children().length;
+        this.$fills.attr('count', count);
+        return count - 1;
+      },
+
+      _getSubBorder: function(direction, spec) {
+
+        var $direction = XmlNode(direction);
+        if (spec){
+          if (spec.style) $direction.attr('style', spec.style);
+          if (spec.color) {
+            var $color = XmlNode('color');
+            if (spec.color.auto) {
+              $color.attr('auto', spec.color.auto);
+            }
+            else if (spec.color.rgb) {
+              $color.attr('rgb', spec.color.rgb);
+            }
+            else if (spec.color.theme || spec.color.tint) {
+              $color.attr('theme', spec.color.theme || "1");
+              $color.attr('tint', spec.color.tint || "0");
+            }
+            $direction.append($color)
+          }
+        }
+        return $direction;
+      },
+
+      _addBorder: function (attributes) {
+        if (!attributes) { return 0; }
+
+        var self = this;
+
+        var $border = XmlNode('border')
+            .attr("diagonalUp",attributes.diagonalUp)
+            .attr("diagonalDown",attributes.diagonalDown);
+
+        var directions = ["left","right","top","bottom","diagonal"];
+
+        directions.forEach(function(direction) {
+          $border.append(self._getSubBorder(direction, attributes[direction]))
+        });
+        this.$borders.append($border);
+
+        var count = this.$borders.children().length;
+        this.$borders.attr('count', count);
+        return count -1;
+      },
+
+      toXml: function () {
+        return this.$styles.toXml();
+      }
+    }.initialize(options||{});
+  }
+
+
+XLSX.parse_xlscfb = parse_xlscfb;
+XLSX.parse_zip = parse_zip;
+XLSX.read = readSync; //xlsread
+XLSX.readFile = readFileSync; //readFile
+XLSX.readFileSync = readFileSync;
+XLSX.write = writeSync;
+XLSX.writeFile = writeFileSync;
+XLSX.writeFileSync = writeFileSync;
+XLSX.utils = utils;
+XLSX.CFB = CFB;
+XLSX.SSF = SSF;
+})(typeof exports !== 'undefined' ? exports : XLSX);
+var XLS = XLSX;
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/xlsxworker.js b/Source/UBCS-WEB/src/config/js-xlsx-master/xlsxworker.js
new file mode 100644
index 0000000..fed4a76
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/xlsxworker.js
@@ -0,0 +1,16 @@
+/* xlsx.js (C) 2013-2015 SheetJS -- http://sheetjs.com */
+/* uncomment the next line for encoding support */
+//importScripts('dist/cpexcel.js');
+importScripts('jszip.js');
+importScripts('xlsx.js');
+/* uncomment the next line for ODS support */
+importScripts('dist/ods.js');
+postMessage({t:"ready"});
+
+onmessage = function (oEvent) {
+  var v;
+  try {
+    v = XLSX.read(oEvent.data.d, {type: oEvent.data.b ? 'binary' : 'base64'});
+  } catch(e) { postMessage({t:"e",d:e.stack||e}); }
+  postMessage({t:"xlsx", d:JSON.stringify(v)});
+};
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/xlsxworker1.js b/Source/UBCS-WEB/src/config/js-xlsx-master/xlsxworker1.js
new file mode 100644
index 0000000..16a2989
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/xlsxworker1.js
@@ -0,0 +1,31 @@
+/* xlsx.js (C) 2013-2015 SheetJS -- http://sheetjs.com */
+/* uncomment the next line for encoding support */
+//importScripts('dist/cpexcel.js');
+importScripts('jszip.js');
+importScripts('xlsx.js');
+/* uncomment the next line for ODS support */
+importScripts('dist/ods.js');
+postMessage({t:"ready"});
+
+function ab2str(data) {
+	var o = "", l = 0, w = 10240;
+	for(; l<data.byteLength/w; ++l) o+=String.fromCharCode.apply(null,new Uint8Array(data.slice(l*w,l*w+w)));
+	o+=String.fromCharCode.apply(null, new Uint8Array(data.slice(l*w)));
+	return o;
+}
+
+function s2ab(s) {
+  var b = new ArrayBuffer(s.length*2), v = new Uint16Array(b);
+  for (var i=0; i != s.length; ++i) v[i] = s.charCodeAt(i);
+  return [v, b];
+}
+
+onmessage = function (oEvent) {
+  var v;
+  try {
+    v = XLSX.read(ab2str(oEvent.data), {type: 'binary'});
+  } catch(e) { postMessage({t:"e",d:e.stack}); }
+  var res = {t:"xlsx", d:JSON.stringify(v)};
+  var r = s2ab(res.d)[1];
+  postMessage(r, [r]);
+};
diff --git a/Source/UBCS-WEB/src/config/js-xlsx-master/xlsxworker2.js b/Source/UBCS-WEB/src/config/js-xlsx-master/xlsxworker2.js
new file mode 100644
index 0000000..1681e23
--- /dev/null
+++ b/Source/UBCS-WEB/src/config/js-xlsx-master/xlsxworker2.js
@@ -0,0 +1,31 @@
+/* xlsx.js (C) 2013-2015 SheetJS -- http://sheetjs.com */
+/* uncomment the next line for encoding support */
+//importScripts('dist/cpexcel.js');
+importScripts('jszip.js');
+importScripts('xlsx.js');
+/* uncomment the next line for ODS support */
+importScripts('dist/ods.js');
+postMessage({t:"ready"});
+
+function ab2str(data) {
+	var o = "", l = 0, w = 10240;
+	for(; l<data.byteLength/w; ++l) o+=String.fromCharCode.apply(null,new Uint16Array(data.slice(l*w,l*w+w)));
+	o+=String.fromCharCode.apply(null, new Uint16Array(data.slice(l*w)));
+	return o;
+}
+
+function s2ab(s) {
+  var b = new ArrayBuffer(s.length*2), v = new Uint16Array(b);
+  for (var i=0; i != s.length; ++i) v[i] = s.charCodeAt(i);
+  return [v, b];
+}
+
+onmessage = function (oEvent) {
+  var v;
+  try {
+    v = XLSX.read(ab2str(oEvent.data), {type: 'binary'});
+  } catch(e) { postMessage({t:"e",d:e.stack}); }
+  var res = {t:"xlsx", d:JSON.stringify(v)};
+  var r = s2ab(res.d)[1];
+  postMessage(r, [r]);
+};
diff --git a/Source/UBCS-WEB/src/main.js b/Source/UBCS-WEB/src/main.js
index a4c5b4c..c409b2d 100644
--- a/Source/UBCS-WEB/src/main.js
+++ b/Source/UBCS-WEB/src/main.js
@@ -53,6 +53,7 @@
 import businesswork from "@/components/work/BusinessWork"
 import MasterTransfer from "@/components/Master/MasterTransfer";
 import ThemeImport from "@/components/Theme/ThemeImport";
+import maxSerialnumDialog from '@/components/code-dialog-page/maxSerialnumDialog'
 // 灏嗗伐鍏峰嚱鏁版坊鍔犲埌鍏ㄥ眬
 import utilFunc from './util/func'
 Vue.prototype.$utilFunc = utilFunc
@@ -106,6 +107,7 @@
 Vue.component('businesswork', businesswork)
 Vue.component('MasterTransfer', MasterTransfer)
 Vue.component('ThemeImport', ThemeImport)
+Vue.component('maxSerialnumDialog', maxSerialnumDialog)
 
 // 鍔犺浇鐩稿叧url鍦板潃
 Object.keys(urls).forEach(key => {
diff --git a/Source/UBCS-WEB/src/views/code/code.vue b/Source/UBCS-WEB/src/views/code/code.vue
index 08666d7..4b4fadd 100644
--- a/Source/UBCS-WEB/src/views/code/code.vue
+++ b/Source/UBCS-WEB/src/views/code/code.vue
@@ -106,6 +106,13 @@
                 @click="escapeOwner">
                 杞Щ鎵�鏈夎��
             </el-button>
+            <el-button
+                size="small"
+                icon="el-icon-guide"
+                plain
+                @click="maxSerialNum">
+                鏈�澶ф祦姘村彿
+            </el-button>
           </template>
         </avue-crud>
       </basic-container>
@@ -248,6 +255,9 @@
             <el-button type="primary" @click="escapeOwnerConfirm">纭� 瀹�</el-button>
           </span>
       </el-dialog>
+
+      <!-- 鏈�澶ф祦姘村彿瀵硅瘽妗� -->
+      <max-serialnum-dialog :visible.sync="maxSerial.visible" :ruleOid="maxSerial.ruleOid"></max-serialnum-dialog>
 
       <!-- 鍩虹鐮佹灞曠ず鍖哄煙 -->
       <basic-container class="code-basicsec-container">
@@ -875,6 +885,12 @@
           ruleOwner: '', // 褰撳墠瑕佽浆绉荤粰鍝釜瑙勫垯绠$悊鍛樼殑ID
           releadDisabled: false, // 閬垮厤瑙勫垯鍙戝竷閲嶅鎻愪氦
 
+          /*鏈�澶ф祦姘村彿*/
+          maxSerial:{
+            visible:false,
+
+          },
+          
           /*浣跨敤鑼冨洿瀵硅瘽妗嗘樉绀烘帶鍒�*/
           codeRangeSettingBox: false,
           useRangeData: [],
@@ -2787,6 +2803,16 @@
           let enumList = this.getLocalStorageEnum("codeGetValueType");
           this.enumParam.codeGetValueType =  enumList.length>0 ? enumList:[];
         },
+        // 鏈�澶ф祦姘村彿
+        maxSerialNum(){
+          console.log(this.selectionList)
+          if (this.selectionList.length === 0) {
+            this.$message.warning("璇烽�夋嫨涓�鏉$紪鐮佽鍒欙紒");
+            return;
+          }
+          this.maxSerial.visible = true
+          this.maxSerial.ruleOid = this.selectionList[0]['oid']
+        }
 
       }
   };
diff --git a/Source/UBCS-WEB/src/views/system/menu.vue b/Source/UBCS-WEB/src/views/system/menu.vue
index 5382466..c3e54fe 100644
--- a/Source/UBCS-WEB/src/views/system/menu.vue
+++ b/Source/UBCS-WEB/src/views/system/menu.vue
@@ -34,12 +34,6 @@
           plain
           @click="cloneMenuButton">浠庡叾浠栬彍鍗曞厠闅嗘寜閽�
         </el-button>
-        <el-button type="info"
-          size="small"
-          icon="el-icon-connection"
-          plain
-          @click="test">test
-        </el-button>
       </template>
       <template slot-scope="scope" slot="menu">
         <el-button
@@ -300,6 +294,7 @@
           cloneOption: {
             height: "auto",
             menu: false,
+            header:false,
             addBtn: false,
             lazy: true,
             tip: false,
@@ -446,7 +441,7 @@
           delBtn: this.vaildData(this.permission.menu_delete, false),
           editBtn: this.vaildData(this.permission.menu_edit, false)
         };
-        
+
       },
       ids() {
         let ids = [];
@@ -457,11 +452,6 @@
       }
     },
     methods: {
-
-      test(){
-        console.log(this.permission)
-      },
-
       /** 浠庡叾浠栬彍鍗曞厠闅嗘寜閽� */
       cloneMenuButton(){
         if(this.selectionList.length != 1 || this.selectionList[0].category === 2){
@@ -596,9 +586,10 @@
         update(row).then(() => {
           this.$message({
             type: "success",
-            message: "鎿嶄綔鎴愬姛!"
+            message: "鎿嶄綔鎴愬姛1!"
           });
           // 鏁版嵁鍥炶皟杩涜鍒锋柊
+          this.onLoad()
           done(row);
         }, error => {
           window.console.log(error);
diff --git a/Source/UBCS-WEB/src/views/wel/index.vue b/Source/UBCS-WEB/src/views/wel/index.vue
index e5f02a9..aff2c5b 100644
--- a/Source/UBCS-WEB/src/views/wel/index.vue
+++ b/Source/UBCS-WEB/src/views/wel/index.vue
@@ -13,7 +13,7 @@
       </el-col>
     </el-row>
     <el-row>
-      <el-col :span="16">
+      <el-col :span="24">
         <basic-container title="寰呭姙娴佺▼浠诲姟">
           <avue-crud ref="crud" :table-loading="loading" :data="todoData" :option="todoOption"
                      @on-load="onLoad"
@@ -28,18 +28,18 @@
           </avue-crud>
         </basic-container>
       </el-col>
-      <el-col :span="8">
-        <el-row>
-          <basic-container title="娑堟伅鍒楄〃">
-            <el-collapse v-model="logActiveNames" @change="handleChange">
-              <el-collapse-item v-for="item in noticeData" :title="item.title" :name="item.id">
-                <div>{{item.subtitle}}</div>
-              </el-collapse-item>
-            </el-collapse>
-          </basic-container>
-        </el-row>
+<!--      <el-col :span="8">-->
+<!--        <el-row>-->
+<!--          <basic-container title="娑堟伅鍒楄〃">-->
+<!--            <el-collapse v-model="logActiveNames" @change="handleChange">-->
+<!--              <el-collapse-item v-for="item in noticeData" :title="item.title" :name="item.id">-->
+<!--                <div>{{item.subtitle}}</div>-->
+<!--              </el-collapse-item>-->
+<!--            </el-collapse>-->
+<!--          </basic-container>-->
+<!--        </el-row>-->
 
-      </el-col>
+<!--      </el-col>-->
     </el-row>
     <el-dialog title="淇敼瀵嗙爜" :visible.sync="dialogFormVisible" append-to-body  :close-on-press-escape="false" :before-close="Xdelhandle">
       <el-form :model="form"  :rules="rules" ref="form">
@@ -86,6 +86,7 @@
         todoData: [],
         // 浠e姙娴佺▼浠诲姟option
         todoOption: {
+          height:650,
           addBtn: false,
           header: false,
           align: 'center',
diff --git a/Source/UBCS-WEB/vue.config.js b/Source/UBCS-WEB/vue.config.js
index b400aa7..cf90d26 100644
--- a/Source/UBCS-WEB/vue.config.js
+++ b/Source/UBCS-WEB/vue.config.js
@@ -28,9 +28,10 @@
         //鏈湴鏈嶅姟鎺ュ彛鍦板潃
         // target: 'http://127.0.0.1',
         // target: 'http://192.168.1.51:37000',
-        target: 'http://dev.vci-tech.com:37000',
-        // target: 'http://192.168.1.104:37000',
+        // target: 'http://dev.vci-tech.com:37000',
+        // target: 'http://192.168.1.16:37000',
         // target: 'http://192.168.0.105:37000',
+        target: 'http://192.168.43.251:37000',
         // target: 'http://192.168.0.103:37000',
         // target: 'http://192.168.1.63:37000',
         // target: 'http://192.168.3.7:37000',
diff --git a/Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CodeApplyPanelFor410ActionListener.java b/Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CodeApplyPanelFor410ActionListener.java
index 0b977594..db1ae5c 100644
--- a/Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CodeApplyPanelFor410ActionListener.java
+++ b/Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CodeApplyPanelFor410ActionListener.java
@@ -110,15 +110,28 @@
 			codeOrderSecDTO.setSecValue(keyValue.getValue());
 			secDTOList.add(codeOrderSecDTO);
 		});
+		codeOrderDTO.setLcStatus("Released");
 		codeOrderDTO.setSecDTOList(secDTOList);
 		codeOrderDTO.setData(dataMap);
 		Object object = JSONObject.toJSON(codeOrderDTO);
 		Map<String,String> headerMap=new HashMap<>();
 		headerMap.put("content-type","application/json");
 		headerMap.put("Blade-Auth",this.owner.getTokenUserObject().getAccess_token());
-		R r= HttpUtil.sendPost(url+"/addSaveCode",object.toString(),headerMap);
-		//R r= HttpUtil.sendPost(url+"/addSaveCode",object.toString(),headerMap);
 		String code="";
+		//鏍¢獙鍏抽敭灞炴�у瓨鍦ㄧ殑鏁版嵁鐩存帴杩斿洖缂栫爜
+		R checkKeyAttrOnOrderR= HttpUtil.sendPost(url+"/checkKeyAttrOnOrderFordatas",object.toString(),headerMap);
+		if(checkKeyAttrOnOrderR.isSuccess()){
+			List<Map> list=(List)checkKeyAttrOnOrderR.getData();
+			if(!CollectionUtils.isEmpty(list)) {
+				code=list.get(0).get("ID")!=null?list.get(0).get("ID").toString():"";
+				this.owner.setApplyCode(code);
+				this.owner.getApplyTxt().requestFocusInWindow();
+				this.owner.getApplyTxt().selectAll();
+				this.owner.setAttrNameAndValMap(attrNameAndValMap);
+				return;
+			}
+		}
+		R r= HttpUtil.sendPost(url+"/addSaveCode",object.toString(),headerMap);
 		if(r.isSuccess()){
 			code=r.getData().toString();
 			this.owner.setApplyCode(code);
diff --git a/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/LauncherConstant.java b/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/LauncherConstant.java
index 8dc9198..9e71a03 100644
--- a/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/LauncherConstant.java
+++ b/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/LauncherConstant.java
@@ -40,8 +40,8 @@
 	/**
 	 * nacos dev 鍦板潃
 	 */
-	String NACOS_DEV_ADDR = "dev.vci-tech.com:38848";
-	//String NACOS_DEV_ADDR = "localhost:8848";
+	//String NACOS_DEV_ADDR = "dev.vci-tech.com:38848";
+	String NACOS_DEV_ADDR = "localhost:8848";
 
 	/**
 	 * nacos prod 鍦板潃
diff --git a/Source/UBCS/ubcs-service-api/ubcs-applyjtcodeservice-api/src/main/java/com/vci/ubcs/code/applyjtcodeservice/feign/IMdmInterJtClient.java b/Source/UBCS/ubcs-service-api/ubcs-applyjtcodeservice-api/src/main/java/com/vci/ubcs/code/applyjtcodeservice/feign/IMdmInterJtClient.java
index 761a940..9cedde4 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-applyjtcodeservice-api/src/main/java/com/vci/ubcs/code/applyjtcodeservice/feign/IMdmInterJtClient.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-applyjtcodeservice-api/src/main/java/com/vci/ubcs/code/applyjtcodeservice/feign/IMdmInterJtClient.java
@@ -19,13 +19,30 @@
 	value = "ubcs-code"
 )
 public interface IMdmInterJtClient {
-
 	String API_PREFIX = "/mdmInterService";
+	String APPLYGROUPCODE = API_PREFIX + "/applyGroupCode";
 	String RETURNGROUPCODE = API_PREFIX + "/getApplyGroupCode";
-
 	String PUBMDMMODEL = API_PREFIX + "/pubMdmModel";
+	String RECEIVE_EDITAPPLY =API_PREFIX + "/receiveEditApply";
+
+	/***
+	 * 灏嗛泦鍥㈢敵璇锋垚鍔熺殑缂栫爜瀛樺叆鐩稿叧鏁版嵁涔嬩腑
+	 * @param oids
+	 * @param btmName
+	 * @return 杩斿洖瀛樺偍鏄惁鎴愬姛淇℃伅
+	 */
+	@GetMapping(APPLYGROUPCODE)
+	public R applyGroupCode(@RequestParam("oids")String oids,@RequestParam("btmName")String btmName);
 
 
+	/***
+	 * 闆嗗洟缂栫爜鏁版嵁淇敼
+	 * @param oids
+	 * @param btmName
+	 * @return 杩斿洖瀛樺偍鏄惁鎴愬姛淇℃伅
+	 */
+	@PostMapping(RECEIVE_EDITAPPLY)
+	public R receiveEditApply(@RequestParam("oids")String oids,@RequestParam("btmName")String btmName);
 
 	/***
 	 * 灏嗛泦鍥㈢敵璇锋垚鍔熺殑缂栫爜瀛樺叆鐩稿叧鏁版嵁涔嬩腑
diff --git a/Source/UBCS/ubcs-service-api/ubcs-applyjtcodeservice-api/src/main/java/com/vci/ubcs/code/applyjtcodeservice/vo/DockingApplyGroupCode.java b/Source/UBCS/ubcs-service-api/ubcs-applyjtcodeservice-api/src/main/java/com/vci/ubcs/code/applyjtcodeservice/vo/DockingApplyGroupCode.java
new file mode 100644
index 0000000..ae01f14
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-applyjtcodeservice-api/src/main/java/com/vci/ubcs/code/applyjtcodeservice/vo/DockingApplyGroupCode.java
@@ -0,0 +1,5 @@
+package com.vci.ubcs.code.applyjtcodeservice.vo;
+
+public class DockingApplyGroupCode {
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-applyjtcodeservice-api/src/main/java/data/data.json b/Source/UBCS/ubcs-service-api/ubcs-applyjtcodeservice-api/src/main/java/data/data.json
index ffb9747..d982538 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-applyjtcodeservice-api/src/main/java/data/data.json
+++ b/Source/UBCS/ubcs-service-api/ubcs-applyjtcodeservice-api/src/main/java/data/data.json
@@ -1,10 +1,16 @@
 {
-  "parentOid":"XJ-FC9B6-FE27-241F-5FCA-ED4DC17CF95B",
-  "parentBtmName":"jclass",
-  "valueField":"oid",
-  "textField":"name",
-  "parentFieldName":"id",
-  "conditionMap":[{
-    "codeclsfid": "XJ-FC9B6-FE27-241F-5FCA-ED4DC17CF95B"
-  }]
+  "data": {
+    "systemId": "MPM",
+    "user": {
+      "userName": "weidy",
+      "trueName": "榄忓ぇ鍕�",
+      "ip": "127.0.0.1"
+    },
+    "library": {
+      "id": "wupin",
+      "classifyid":[
+        "020202"
+      ]
+    }
+  }
 }
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeOrderDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeOrderDTO.java
index e6c9f24..887df95 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeOrderDTO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeOrderDTO.java
@@ -40,6 +40,12 @@
      */
     private List<CodeOrderSecDTO> secDTOList;
 
+
+	/**
+	 * 鏈�澶ф祦姘村彿
+	 */
+	private int maxSecNum;
+
     public String getCodeClassifyOid() {
         return codeClassifyOid;
     }
@@ -80,14 +86,23 @@
         this.editInProcess = editInProcess;
     }
 
-    @Override
-    public String toString() {
-        return "CodeOrderDTO{" +
-                "codeClassifyOid='" + codeClassifyOid + '\'' +
-                ", templateOid='" + templateOid + '\'' +
-                ", codeRuleOid='" + codeRuleOid + '\'' +
-                ", editInProcess=" + editInProcess +
-                ", secDTOList=" + secDTOList +
-                "} " + super.toString();
-    }
+	public int getMaxSecNum() {
+		return maxSecNum;
+	}
+
+	public void setMaxSecNum(int maxSecNum) {
+		this.maxSecNum = maxSecNum;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeOrderDTO{" +
+			"codeClassifyOid='" + codeClassifyOid + '\'' +
+			", templateOid='" + templateOid + '\'' +
+			", codeRuleOid='" + codeRuleOid + '\'' +
+			", editInProcess=" + editInProcess +
+			", secDTOList=" + secDTOList +
+			", maxSecNum=" + maxSecNum +
+			'}';
+	}
 }
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingLogeDO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingLogeDO.java
deleted file mode 100644
index e69de29..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingLogeDO.java
+++ /dev/null
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingSystemConfigDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingSystemConfigDTO.java
index d5d0221..54a243f 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingSystemConfigDTO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingSystemConfigDTO.java
@@ -252,11 +252,14 @@
 	 * header淇℃伅瀵硅薄
 	 */
 	private List<DockingSysIntHeaderDTO> sysIntHeaderDTOS;
-
+	/***
+	 * 闆嗗洟鐮佹槸鍚﹀弬涓庣敵璇�/鏇存柊/鍙戦��
+	 */
+	private String isGroupCodeFlag;
 
 	@Override
 	public String toString() {
-		return "SysIntInfoDTO{" +
+		return "DockingSystemConfigDTO{" +
 			"authorityOid='" + authorityOid + '\'' +
 			", authorityOidName='" + authorityOidName + '\'' +
 			", authorityType='" + authorityType + '\'' +
@@ -303,6 +306,7 @@
 			", classifyName='" + classifyName + '\'' +
 			", sysIntParamDTOS=" + sysIntParamDTOS +
 			", sysIntHeaderDTOS=" + sysIntHeaderDTOS +
+			", isGroupCodeFlag=" + isGroupCodeFlag +
 			'}';
 	}
 }
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/DockingSystemConfig.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/DockingSystemConfig.java
index b775a19..1d2a57c 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/DockingSystemConfig.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/DockingSystemConfig.java
@@ -312,4 +312,63 @@
 	 */
 	@ApiModelProperty(value = "鍒嗙被鍚嶇О")
 	private String classifyName;
+
+	/***
+	 * 闆嗗洟鐮佹槸鍚﹀弬涓庣敵璇�/鏇存柊/鍙戦��
+	 */
+	/**
+	 * 鍒嗙被鍚嶇О
+	 */
+	@ApiModelProperty(value = "闆嗗洟鐮佹槸鍚﹀弬涓庣敵璇�/鏇存柊/鍙戦��")
+	private String isGroupCodeFlag;
+
+	@Override
+	public String toString() {
+		return "DockingSystemConfig{" +
+			"authorityOid='" + authorityOid + '\'' +
+			", authorityOidName='" + authorityOidName + '\'' +
+			", authorityType='" + authorityType + '\'' +
+			", authorityTypeText='" + authorityTypeText + '\'' +
+			", userAccount='" + userAccount + '\'' +
+			", userCode='" + userCode + '\'' +
+			", token='" + token + '\'' +
+			", interfaceFunction='" + interfaceFunction + '\'' +
+			", interfaceType='" + interfaceType + '\'' +
+			", interfaceTypeText='" + interfaceTypeText + '\'' +
+			", paramType='" + paramType + '\'' +
+			", paramTypeText='" + paramTypeText + '\'' +
+			", requestMethod='" + requestMethod + '\'' +
+			", requestMethodText='" + requestMethodText + '\'' +
+			", classifyOid='" + classifyOid + '\'' +
+			", usedFlag='" + usedFlag + '\'' +
+			", sysBaseOid='" + sysBaseOid + '\'' +
+			", sysBaseId='" + sysBaseId + '\'' +
+			", sysBaseName='" + sysBaseName + '\'' +
+			", requestUrl='" + requestUrl + '\'' +
+			", returnType='" + returnType + '\'' +
+			", returnTypeText='" + returnTypeText + '\'' +
+			", sourceSystemOid='" + sourceSystemOid + '\'' +
+			", sourceSysName='" + sourceSysName + '\'' +
+			", sourceSysId='" + sourceSysId + '\'' +
+			", sourceSystemOidName='" + sourceSystemOidName + '\'' +
+			", targetSystemOid='" + targetSystemOid + '\'' +
+			", targetSysName='" + targetSysName + '\'' +
+			", targetSysId='" + targetSysId + '\'' +
+			", targetSystemOidName='" + targetSystemOidName + '\'' +
+			", classPath='" + classPath + '\'' +
+			", dataFlowType='" + dataFlowType + '\'' +
+			", dataFlowTypeText='" + dataFlowTypeText + '\'' +
+			", btmTypeId='" + btmTypeId + '\'' +
+			", btmTypeName='" + btmTypeName + '\'' +
+			", namespace='" + namespace + '\'' +
+			", soapAction='" + soapAction + '\'' +
+			", cxfAxis='" + cxfAxis + '\'' +
+			", targetName='" + targetName + '\'' +
+			", pushType='" + pushType + '\'' +
+			", pushTypeText='" + pushTypeText + '\'' +
+			", classifyId='" + classifyId + '\'' +
+			", classifyName='" + classifyName + '\'' +
+			", isGroupCodeFlag=" + isGroupCodeFlag +
+			'}';
+	}
 }
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingSystemConfigVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingSystemConfigVO.java
index de9096b..2b2b23b 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingSystemConfigVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingSystemConfigVO.java
@@ -237,7 +237,10 @@
 	 * 鍒嗙被鍚嶇О
 	 */
 	private String classifyName;
-
+	/***
+	 * 闆嗗洟鐮佹槸鍚﹀弬涓庣敵璇�/鏇存柊/鍙戦��
+	 */
+	private String isGroupCodeFlag;
 	/***
 	 * 鍙傛暟淇℃伅瀵硅薄
 	 */
@@ -618,9 +621,17 @@
 		this.sysIntHeaderVOs = sysIntHeaderVOs;
 	}
 
+	public String getIsGroupCodeFlag() {
+		return isGroupCodeFlag;
+	}
+
+	public void setIsGroupCodeFlag(String isGroupCodeFlag) {
+		this.isGroupCodeFlag = isGroupCodeFlag;
+	}
+
 	@Override
 	public String toString() {
-		return "SysIntInfoVO{" +
+		return "DockingSystemConfigVO{" +
 			"authorityOid='" + authorityOid + '\'' +
 			", authorityOidName='" + authorityOidName + '\'' +
 			", authorityType='" + authorityType + '\'' +
@@ -665,6 +676,7 @@
 			", pushTypeText='" + pushTypeText + '\'' +
 			", classifyId='" + classifyId + '\'' +
 			", classifyName='" + classifyName + '\'' +
+			", isGroupCodeFlag=" + isGroupCodeFlag +
 			", sysIntParamVOs=" + sysIntParamVOs +
 			", sysIntHeaderVOs=" + sysIntHeaderVOs +
 			'}';
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/attrmap/appcode.xml b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/attrmap/appcode.xml
index 9fa5094..291ff8b 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/attrmap/appcode.xml
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/attrmap/appcode.xml
@@ -9,11 +9,14 @@
             <objects>
                 <object code=""  id="0023401" status="Editing" operate="create" creator="weidy" >
                     <prop key="name" text="鍚嶇О" value="娓╁害璋冭妭鍣�2333"/>
-                    <prop key="use" text="瑙勬牸" value="GB-002599"/>
+                    <prop key="xinghaoguige" text="鍨嬪彿瑙勬牸" value="GB-002599"/>
+                    <prop key="tuhao" text="鍥惧彿" value="TH-002599"/>
+
                 </object>
                 <object  code="" id="0023402" status="Editing" operate="create" creator="weidy">
                     <prop key="name" text="鎵�灞炵粨鏋�" value="娓╁害璋冭妭鍣�"/>
-                    <prop key="use" text="瑙勬牸" value="GB-00257"/>
+                    <prop key="xinghaoguige" text="鍨嬪彿瑙勬牸" value="GB-00257"/>
+                    <prop key="tuhao" text="鍥惧彿" value="TH-00257"/>
                 </object>
             </objects>
         </classify>
@@ -24,13 +27,15 @@
             <objects>
                 <object code="" id="0023403" status="Editing" operate="create" creator="weidy">
                     <prop  key="name" text="鍚嶇О" value="娓╁害璋冭妭鍣�2"/>
-                    <prop key="use" text="瑙勬牸" value="GB-00255"/>
+                    <prop key="xinghaoguige" text="鍨嬪彿瑙勬牸" value="GB-00255"/>
+                    <prop key="tuhao" text="鍥惧彿" value="TH-00255"/>
                 </object>
                 <object code="" id="0023404" status="Editing" operate="create" creator="weidy">
                     <prop key="name" text="鎵�灞炵粨鏋�" value="qwqw"/>
-                    <prop key="use" text="瑙勬牸" value="GB-0026"/>
+                    <prop key="xinghaoguige" text="鍨嬪彿瑙勬牸" value="GB-0026"/>
+                    <prop key="tuhao" text="鍥惧彿" value="TH-0026"/>
                 </object>
             </objects>
         </classify>
     </classifys>
-</data>
\ No newline at end of file
+</data>
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/result/xml/XMLResultDataObjectDetailDO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/result/xml/XMLResultDataObjectDetailDO.java
index 70ef140..4ad6ec6 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/result/xml/XMLResultDataObjectDetailDO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/result/xml/XMLResultDataObjectDetailDO.java
@@ -26,7 +26,7 @@
         this.id = id;
     }
 
-    public String getErrorid() {
+	public String getErrorid() {
         return errorid;
     }
 
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/DefaultAttrAssimtUtil.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/DefaultAttrAssimtUtil.java
index 3b51169..46b32b6 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/DefaultAttrAssimtUtil.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/DefaultAttrAssimtUtil.java
@@ -99,16 +99,22 @@
 			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 			baseModel.setOid(dataMap.getOrDefault("OID",""));
 			Object createTimeObj=dataMap.getOrDefault("CREATETIME","");
-			String createTime= createTimeObj.toString();
-			baseModel.setCreateTime(chageStringToDate(createTime));
+			if(createTimeObj!=null) {
+				String createTime = createTimeObj.toString();
+				baseModel.setCreateTime(chageStringToDate(createTime));
+			}
 			baseModel.setNameOid(dataMap.getOrDefault("NAMEOID",""));
 
 			Object lastModifyTimeObj=dataMap.getOrDefault("LASTMODIFYTIME","");
-			String lastModifyTime= lastModifyTimeObj.toString();
-			baseModel.setLastModifyTime(chageStringToDate(lastModifyTime));
+			if(lastModifyTimeObj!=null) {
+				String lastModifyTime = lastModifyTimeObj.toString();
+				baseModel.setLastModifyTime(chageStringToDate(lastModifyTime));
+			}
 			Object tsObj=dataMap.getOrDefault("TS","");
-			String ts= tsObj.toString();
-			baseModel.setTs(chageStringToDate(ts));
+			if(tsObj!=null) {
+				String ts = tsObj.toString();
+				baseModel.setTs(chageStringToDate(ts));
+			}
 			baseModel.setRevisionOid(dataMap.getOrDefault("REVISIONOID",""));
 			//鐢ㄦ埛id
 			String userId = AuthUtil.getUserId().toString();
@@ -118,9 +124,18 @@
 			baseModel.setFirstV(dataMap.getOrDefault("FIRSTV",""));
 			baseModel.setLastR(dataMap.getOrDefault("LASTR",""));
 			baseModel.setLastV(dataMap.getOrDefault("LASTV",""));
-			baseModel.setRevisionSeq(chageStringToInt(dataMap.getOrDefault("REVISIONSEQ","")));
+			Object revisionseq =dataMap.getOrDefault("REVISIONSEQ","");
+			if(revisionseq!=null){
+				BigDecimal b=(BigDecimal)revisionseq;
+				baseModel.setRevisionSeq(chageStringToInt(b.toString()));
+			}
+
 			baseModel.setOwner(dataMap.getOrDefault("OWNER",""));
-			baseModel.setVersionSeq(chageStringToInt(dataMap.getOrDefault("VERSIONSEQ","")));
+			Object versionseq =dataMap.getOrDefault("VERSIONSEQ","");
+			if(versionseq!=null){
+				BigDecimal b=(BigDecimal)versionseq;
+				baseModel.setVersionSeq(chageStringToInt(b.toString()));
+			}
 			baseModel.setVersionRule(dataMap.getOrDefault("VERSIONRULE",""));
 			baseModel.setVersionValue(dataMap.getOrDefault("VERSIONVALUE",""));
 			baseModel.setRevisionOid(dataMap.getOrDefault("REVISIONOID",""));
diff --git a/Source/UBCS/ubcs-service/ubcs-applyjtcodeservice/src/main/java/com/vci/ubcs/code/applyjtcodeservice/Scheduling/DockingApplyGroupCodeSyncScheduling.java b/Source/UBCS/ubcs-service/ubcs-applyjtcodeservice/src/main/java/com/vci/ubcs/code/applyjtcodeservice/Scheduling/DockingApplyGroupCodeSyncScheduling.java
new file mode 100644
index 0000000..b89743d
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-applyjtcodeservice/src/main/java/com/vci/ubcs/code/applyjtcodeservice/Scheduling/DockingApplyGroupCodeSyncScheduling.java
@@ -0,0 +1,55 @@
+package com.vci.ubcs.code.applyjtcodeservice.Scheduling;
+
+import com.vci.ubcs.starter.web.enumpck.BooleanEnum;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * 闆嗘垚浠诲姟瀹氭椂鍣�
+ * 鎻掑叆dockingtask涓�
+ * 浠巇ockingtask涓彇鍑烘潵鏁版嵁锛屾帹閫佸嚭鍘荤殑鎿嶄綔
+ */
+@Component
+@Slf4j
+public class DockingApplyGroupCodeSyncScheduling {
+
+//	@Resource
+	//private IGroupCodeDuckingSyncService groupCodeDuckingSyncService;
+
+	@Value("${apply.groupCode.isStart:false}")
+	public boolean APPLY_GRUPCODE_SYNC_ISSTARE;
+
+	/**
+	 * 鏄惁鍒濆鍖栧畬鎴愪簡
+	 */
+	public static volatile String FINISH_INIT = "false";
+
+	/**
+	 * 鍦ㄥ垵濮嬪寲瀹屾垚鍚庢墽琛�
+	 */
+	@PostConstruct()
+	public void onInit(){
+		FINISH_INIT = "true";
+	}
+
+	//榛樿姣忓垎閽熸墽琛屾柟娉�
+	@Scheduled(cron = "${groupcode.cronTime:0 0/10 * * * ?}")
+	public void scheduled() {
+		log.info("鎵ц璋冪敤闆嗗洟缂栫爜鐢宠鎺ュ彛鐢宠闆嗗洟缂栫爜 start:");
+		if(APPLY_GRUPCODE_SYNC_ISSTARE && BooleanEnum.TRUE.getValue().equalsIgnoreCase(FINISH_INIT)) {
+		//a	codeDuckingSyncServiceI.DockingClassSyncScheduing();
+			SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.");
+			String time = formatter.format(new Date());
+			String outinfo = "============鍦� "+time+" 鎵ц浜嗗垎绫婚泦鎴愭帹閫�";
+			log.info(outinfo);
+		}
+		log.info("鎵ц璋冪敤闆嗗洟缂栫爜鐢宠鎺ュ彛鐢宠闆嗗洟缂栫爜 end: "+ "寮�鍏虫槸鍚﹀紑鍚�:" +APPLY_GRUPCODE_SYNC_ISSTARE);
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-applyjtcodeservice/src/main/java/com/vci/ubcs/code/applyjtcodeservice/controller/DockingPreApplyCodeController.java b/Source/UBCS/ubcs-service/ubcs-applyjtcodeservice/src/main/java/com/vci/ubcs/code/applyjtcodeservice/controller/DockingPreApplyCodeController.java
index 55c785b..edacf34 100644
--- a/Source/UBCS/ubcs-service/ubcs-applyjtcodeservice/src/main/java/com/vci/ubcs/code/applyjtcodeservice/controller/DockingPreApplyCodeController.java
+++ b/Source/UBCS/ubcs-service/ubcs-applyjtcodeservice/src/main/java/com/vci/ubcs/code/applyjtcodeservice/controller/DockingPreApplyCodeController.java
@@ -3,9 +3,9 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.code.applyjtcodeservice.service.*;
 import com.vci.ubcs.code.applyjtcodeservice.entity.DockingPreApplyForm;
 import com.vci.ubcs.code.feign.ICodeClassifyClient;
-import com.vci.ubcs.code.applyjtcodeservice.service.*;
 import com.vci.ubcs.code.applyjtcodeservice.vo.*;
 import com.vci.ubcs.code.applyjtcodeservice.vo.collection.DockingPreAttrMappingVOList;
 import com.vci.ubcs.code.applyjtcodeservice.wrapper.DockingPreApplyFormWrapper;
diff --git a/Source/UBCS/ubcs-service/ubcs-applyjtcodeservice/src/main/java/com/vci/ubcs/code/applyjtcodeservice/feigh/MdmInterJtClient.java b/Source/UBCS/ubcs-service/ubcs-applyjtcodeservice/src/main/java/com/vci/ubcs/code/applyjtcodeservice/feigh/MdmInterJtClient.java
index 820abb3..113b4af 100644
--- a/Source/UBCS/ubcs-service/ubcs-applyjtcodeservice/src/main/java/com/vci/ubcs/code/applyjtcodeservice/feigh/MdmInterJtClient.java
+++ b/Source/UBCS/ubcs-service/ubcs-applyjtcodeservice/src/main/java/com/vci/ubcs/code/applyjtcodeservice/feigh/MdmInterJtClient.java
@@ -10,7 +10,6 @@
 import com.vci.ubcs.starter.revision.model.BaseModel;
 import com.vci.ubcs.starter.util.DefaultAttrAssimtUtil;
 import com.vci.ubcs.starter.util.MdmBtmTypeConstant;
-import com.vci.ubcs.starter.web.constant.MdmEnumIdConstant;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springblade.core.tenant.annotation.NonDS;
@@ -48,16 +47,47 @@
 	private final IDockingPreMetaAttrService dockingPreMetaAttrService;
 
 	/**
-	 * 闆嗗洟鐢宠鍗曟湇鍔�
+	 * 闆嗗洟鍒嗙被鐢宠鍗曟湇鍔�
 	 */
 	private final IDockingPreClassifyService dockingPreClassifyService;
 
 
 	/**
-	 * 闆嗗洟鐢宠鍗曟湇鍔�
+	 * 闆嗗洟鍙栧�艰寖鍥寸敵璇峰崟鏈嶅姟
 	 */
 	private final IDockingPreAttrRangeService dockingPreAttrRangeService;
 
+	/**
+	 * 闆嗗洟灞炴�ф槧灏勯厤缃睘鎬�
+	 */
+	private final IGroupMdmInterService groupMdmInterService;
+
+
+	/***
+	 * 鐢宠闆嗗洟缂栫爜
+	 * @return
+	 */
+	public R applyGroupCode(String oids,String btmName){
+		try {
+			return groupMdmInterService.applyGroupCode(oids,btmName);
+		}catch (Throwable e){
+			return R.fail("闆嗗洟鐮佺敵璇峰け璐ワ細"+e.getMessage());
+		}
+	}
+	/***
+	 * 鐢宠闆嗗洟缂栫爜鏁版嵁缁存姢
+	 * @return
+	 */
+	@Override
+	public R receiveEditApply(String oids, String btmName) {
+		try {
+			return groupMdmInterService.applyGroupCode(oids,btmName);
+		}catch (Throwable e){
+			return R.fail("闆嗗洟鐮佹暟鎹慨鏀瑰け璐ワ細"+e.getMessage());
+		}
+	}
+
+
 
 	/*
 	 * 涓绘暟鎹笟鍔℃湇鍔�
diff --git a/Source/UBCS/ubcs-service/ubcs-code/pom.xml b/Source/UBCS/ubcs-service/ubcs-code/pom.xml
index 319b461..ab5623a 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/pom.xml
+++ b/Source/UBCS/ubcs-service/ubcs-code/pom.xml
@@ -154,7 +154,12 @@
             <artifactId>ubcs-file-api</artifactId>
             <version>3.0.1.RELEASE</version>
         </dependency>
-
+        <dependency>
+            <groupId>com.vci.ubcs</groupId>
+            <artifactId>ubcs-applyjtcodeservice-api</artifactId>
+            <version>3.0.1.RELEASE</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/Scheduling/DockingClassSyncScheduling.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/Scheduling/DockingClassSyncScheduling.java
index b0fbc9e..9b136b2 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/Scheduling/DockingClassSyncScheduling.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/Scheduling/DockingClassSyncScheduling.java
@@ -43,6 +43,7 @@
 	//榛樿姣忓垎閽熸墽琛屾柟娉�
 	@Scheduled(cron = "${clsfSyncPush.cronTime:0 0/10 * * * ?}")
 	public void scheduled() {
+		log.info("鎵ц鍒嗙被闆嗘垚鎺ㄩ�� start:");
 		if(CLSF_SYNC_PUSH_ISSTARE && BooleanEnum.TRUE.getValue().equalsIgnoreCase(FINISH_INIT)) {
 			codeDuckingSyncServiceI.DockingClassSyncScheduing();
 			SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.");
@@ -50,5 +51,6 @@
 			String outinfo = "============鍦� "+time+" 鎵ц浜嗗垎绫婚泦鎴愭帹閫�";
 			log.info(outinfo);
 		}
+		log.info("鎵ц鍒嗙被闆嗘垚鎺ㄩ�� end: "+ "寮�鍏虫槸鍚﹀紑鍚�:" +CLSF_SYNC_PUSH_ISSTARE);
 	}
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/Scheduling/DockingDataSyncScheduling.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/Scheduling/DockingDataSyncScheduling.java
index 08a1e3e..315f97a 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/Scheduling/DockingDataSyncScheduling.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/Scheduling/DockingDataSyncScheduling.java
@@ -2,6 +2,7 @@
 
 import com.vci.ubcs.code.service.ICodeDuckingSyncService;
 import com.vci.ubcs.starter.web.enumpck.BooleanEnum;
+import lombok.extern.slf4j.Slf4j;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Value;
@@ -19,9 +20,10 @@
  * 浠巇ockingtask涓彇鍑烘潵鏁版嵁锛屾帹閫佸嚭鍘荤殑鎿嶄綔
  */
 @Component
+@Slf4j
 public class DockingDataSyncScheduling {
 
-	private Logger logger = LoggerFactory.getLogger(getClass());
+//	private Logger logger = LoggerFactory.getLogger(getClass());
 
 	@Resource
 	private ICodeDuckingSyncService codeDuckingSyncServiceI;
@@ -45,12 +47,14 @@
 	//榛樿姣忓垎閽熸墽琛屾柟娉�
 	@Scheduled(cron = "${dataSyncPush.cronTime:0 0/10 * * * ?}")
 	public void scheduled() {
+		log.info("鎵ц涓绘暟鎹泦鎴愭暟鎹帹閫� start:");
 		if(DATA_SYNC_PUSH_ISSTARE && BooleanEnum.TRUE.getValue().equalsIgnoreCase(FINISH_INIT)) {
 			codeDuckingSyncServiceI.DockingDataSyncScheduing();
 			SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.");
 			String time = formatter.format(new Date());
-			String outinfo = "============鍦� "+time+" 鎵ц浜嗕富鏁版嵁闆嗘垚鏁版嵁鎺ㄩ��";
-			logger.info(outinfo);
+			String outinfo = "============ 鎵ц浜嗕富鏁版嵁闆嗘垚鏁版嵁鎺ㄩ��";
+			log.info(outinfo);
 		}
+		log.info("鎵ц涓绘暟鎹泦鎴愭暟鎹帹閫� end: "+ "寮�鍏虫槸鍚﹀紑鍚�:" +DATA_SYNC_PUSH_ISSTARE);
 	}
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeApplySwingController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeApplySwingController.java
index 6e08c7d..5b5112a 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeApplySwingController.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeApplySwingController.java
@@ -226,5 +226,14 @@
 	public R addSaveCode(@RequestBody CodeOrderDTO orderDTO) throws Exception {
 		return R.data(mdmEngineService.addSaveCode(orderDTO));
 	}
-
+	/**
+	 * 鐢宠缂栫爜淇濆瓨
+	 * @param orderDTO 缂栫爜鐢宠鐩稿叧鐨勪俊鎭紝闇�瑕佹湁灞炴�у拰鐮佹鐩稿叧鐨勪俊鎭�
+	 * @return 鎵ц缁撴灉
+	 */
+	@PostMapping("/checkKeyAttrOnOrderFordatas")
+	@VciBusinessLog(operateName = "鐢宠鍗曚釜缂栫爜")
+	public R checkKeyAttrOnOrderFordatas(@RequestBody CodeOrderDTO orderDTO) throws Exception {
+		return R.data(mdmEngineService.checkKeyAttrOnOrderFordatas(orderDTO));
+	}
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeBasicSecController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeBasicSecController.java
index 79f9102..5aaed90 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeBasicSecController.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeBasicSecController.java
@@ -3,9 +3,12 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import com.vci.ubcs.code.dto.CodeBasicSecDTO;
+import com.vci.ubcs.code.dto.CodeOrderDTO;
+import com.vci.ubcs.code.dto.CodeRuleDTO;
 import com.vci.ubcs.code.entity.CodeBasicSec;
 import com.vci.ubcs.code.service.ICodeBasicSecService;
 import com.vci.ubcs.code.vo.pagemodel.CodeBasicSecVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO;
 import com.vci.ubcs.code.wrapper.CodeBasicSecWrapper;
 import com.vci.ubcs.starter.exception.VciBaseException;
 import com.vci.ubcs.starter.web.pagemodel.BladeQueryObject;
@@ -205,4 +208,28 @@
         return R.status(codeBasicSecService.downOrderNum(oid));
     }
 
+	/**
+	 * 鏌ヨ缂栫爜瑙勫垯鐨勬墍鏈夋祦姘翠緷璧栫殑鐮佹
+	 * @param ruleOid 缂栫爜瑙勫垯涓婚敭
+	 * @return
+	 */
+	@GetMapping("/getCodeRuleAndBasicSecByRuleOid")
+	@ApiOperationSupport(order = 13)
+	@ApiOperation(value = "鏌ヨ缂栫爜瑙勫垯鐨勬墍鏈夋祦姘翠緷璧栫殑鐮佹", notes = "浼犲叆oid")
+	public R<CodeRuleVO> getCodeRuleAndBasicSecByRuleOid(String ruleOid){
+		return R.data(codeBasicSecService.getSerialNumberDepend(ruleOid));
+	}
+
+
+	/**
+	 * 璁剧疆鏈�澶ф祦姘村彿
+	 * @param codeOrderDTO 缂栫爜鐢宠浼犺緭瀵硅薄
+	 * @return
+	 */
+	@PostMapping("/setMaxSerialNumberForCodeRule")
+	@ApiOperationSupport(order = 14)
+	@ApiOperation(value = "璁剧疆鏈�澶ф祦姘村彿", notes = "codeOrderDTO")
+	public R setMaxSerialNumberForCodeRule(@RequestBody CodeOrderDTO codeOrderDTO){
+		return R.success(codeBasicSecService.setMaxSerialNumberForCodeRule(codeOrderDTO));
+	}
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeBasicSecService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeBasicSecService.java
index cb902e9..95bd055 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeBasicSecService.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeBasicSecService.java
@@ -4,9 +4,12 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.vci.ubcs.code.dto.CodeBasicSecDTO;
+import com.vci.ubcs.code.dto.CodeOrderDTO;
+import com.vci.ubcs.code.dto.CodeRuleDTO;
 import com.vci.ubcs.code.entity.CodeBasicSec;
 import com.vci.ubcs.code.vo.CodeReferConfigVO;
 import com.vci.ubcs.code.vo.pagemodel.CodeBasicSecVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO;
 import com.vci.ubcs.starter.exception.VciBaseException;
 import com.vci.ubcs.starter.web.pagemodel.*;
 import org.springblade.core.mp.support.Query;
@@ -179,4 +182,20 @@
 	 * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
 	 */
 	CodeBasicSecVO codeBasicSecDO2VO(CodeBasicSec codeBasicSecDO) throws VciBaseException;
+
+	/**
+	 * 鏍规嵁缂栫爜瑙勫垯涓婚敭鑾峰彇缂栫爜涓嬬殑娴佹按渚濊禆鐮佹
+	 * @param oid 缂栫爜瑙勫垯涓婚敭
+	 * @return
+	 * @throws VciBaseException
+	 */
+	CodeRuleVO getSerialNumberDepend(String oid) throws VciBaseException;
+
+	/**
+	 * 璁剧疆鏈�澶ф祦姘村彿
+	 * @param codeOrderDTO 缂栫爜鐢宠浼犺緭瀵硅薄
+	 * @return
+	 * @throws VciBaseException
+	 */
+	String setMaxSerialNumberForCodeRule(CodeOrderDTO codeOrderDTO) throws VciBaseException;
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineService.java
index 674e2fd..2815bf0 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineService.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineService.java
@@ -446,4 +446,11 @@
 	 * @return
 	 */
     R processChangeStatus(FlowStatusDTO flowDTO);
-}
+
+	/**
+	 * 鏍¢獙鍏抽敭灞炴��
+	 * @param orderDTO         缂栫爜鐢宠鐨勭浉鍏崇殑淇℃伅
+	 */
+	public List<Map>  checkKeyAttrOnOrderFordatas(CodeOrderDTO orderDTO) ;
+
+	}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmIOService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmIOService.java
index 897b2e7..82dab4b 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmIOService.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmIOService.java
@@ -110,5 +110,5 @@
 	 * @param resultDataObjectDetailDOs 閿欒淇℃伅
 	 * @return 鏈夐敊璇俊鎭殑excel
 	 */
-	void batchSyncApplyCode(CodeOrderDTO orderDTO, DataObjectVO dataObjectVO, LinkedList<XMLResultDataObjectDetailDO> resultDataObjectDetailDOs);
+	void batchSyncApplyCode(CodeOrderDTO orderDTO, DataObjectVO dataObjectVO, LinkedList<XMLResultDataObjectDetailDO> resultDataObjectDetailDOs,boolean isCodeOrGroupCode);
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java
index c198752..007bee9 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java
@@ -3,18 +3,22 @@
 import com.alibaba.cloud.commons.lang.StringUtils;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 
 import com.vci.ubcs.code.dto.CodeBasicSecDTO;
+import com.vci.ubcs.code.dto.CodeOrderDTO;
+import com.vci.ubcs.code.dto.CodeOrderSecDTO;
 import com.vci.ubcs.code.entity.*;
 import com.vci.ubcs.code.enumpack.*;
 import com.vci.ubcs.code.lifecycle.CodeRuleLC;
 import com.vci.ubcs.code.mapper.CodeBasicSecMapper;
 import com.vci.ubcs.code.mapper.CodeClassifyValueMapper;
 import com.vci.ubcs.code.mapper.CodeFixedValueMapper;
+import com.vci.ubcs.code.mapper.CodeSerialValueMapper;
 import com.vci.ubcs.code.service.*;
 import com.vci.ubcs.code.vo.CodeReferConfigVO;
 import com.vci.ubcs.code.vo.pagemodel.*;
@@ -23,6 +27,7 @@
 import com.vci.ubcs.omd.enums.EnumEnum;
 import com.vci.ubcs.starter.enumpack.CodeTableNameEnum;
 import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.revision.model.BaseModel;
 import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
 import com.vci.ubcs.starter.util.DefaultAttrAssimtUtil;
 import com.vci.ubcs.starter.util.MdmBtmTypeConstant;
@@ -32,6 +37,7 @@
 import com.vci.ubcs.starter.web.pagemodel.*;
 import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
 import com.vci.ubcs.starter.web.util.VciBaseUtil;
+import com.vci.ubcs.starter.web.util.VciDateUtil;
 import com.vci.ubcs.starter.web.util.WebUtil;
 import com.vci.ubcs.system.entity.DictBiz;
 import com.vci.ubcs.system.feign.IDictBizClient;
@@ -50,6 +56,8 @@
 import java.util.stream.Collectors;
 
 import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.*;
+import static com.vci.ubcs.code.constant.MdmEngineConstant.EMPTY_SERIAL_UNIT;
+import static com.vci.ubcs.code.constant.MdmEngineConstant.SERIAL_UNIT_SPACE;
 
 /**
  * 鐮佹鍩虹淇℃伅鏈嶅姟鎺ュ彛
@@ -96,6 +104,12 @@
 	 */
 	@Resource
 	private ICodeFixedValueService fixedValueService;
+
+	/**
+	 * 娴佹按鍙风殑鐩稿叧鐨勪俊鎭�
+	 */
+	@Resource
+	private CodeSerialValueMapper serialValueMapper;
 
 	/**
 	 * 涓婂眰鍒嗙被鐮佹鐨勫睘鎬у悕绉�
@@ -351,6 +365,7 @@
 		DefaultAttrAssimtUtil.updateDefaultAttrAssimt(codeBasicSecDO);
 		boolean status = codeRuleService.checkEditDelStatus(codeRuleService.getObjectByOid(codeBasicSecDO.getPkCodeRule()).getLcStatus());
 		boolean resBoolean;
+		CodeReferConfigVO codeReferConfigVO = null;
 		if (!status){
 			//杩斿洖閿欒淇℃伅
 			throw new VciBaseException("缂栫爜瑙勫垯涓嶅厑璁哥紪杈戞垨鍒犻櫎锛�");
@@ -361,7 +376,6 @@
 				&& StringUtils.isBlank(codeBasicSecDO.getCodeFillSeparator())){
 				throw new VciBaseException("褰撹ˉ浣嶆柟寮忎负宸﹁ˉ浣嶆垨鑰呭彸琛ヤ綅鐨勬椂鍊欙紝琛ヤ綅瀛楃涓嶈兘涓虹┖");
 			}
-			CodeReferConfigVO codeReferConfigVO = null;
 			//寮曠敤鐮佹鐨勬椂鍊欙紝闇�瑕佸垽鏂弬鐓х殑淇℃伅鏄惁姝g‘
 			if(CodeSecTypeEnum.CODE_REFER_SEC.getValue().equalsIgnoreCase(codeBasicSecDO.getSecType())){
 				if(StringUtils.isBlank(codeBasicSecDO.getReferConfig())){
@@ -379,7 +393,16 @@
 					codeReferConfigService.insert(codeReferConfigVO);
 				}
 			}
-			revisionModelUtil.copyFromDTOIgnore(codeBasicSecDTO, codeBasicSecDO);
+
+//			revisionModelUtil.copyFromDTOIgnore(codeBasicSecDTO, codeBasicSecDO);//姝ゅ鐨勬嫹璐濅細鎶妑eferValueInfo鐨勫�肩粰瑕嗙洊鎺夛紝闇�瑕侀噸鏂拌祴鍊�
+			BaseModel tempModel = new BaseModel();
+			BeanUtilForVCI.copyPropertiesIgnoreCase(codeBasicSecDO, tempModel);
+			BeanUtil.copyProperties(codeBasicSecDTO, codeBasicSecDO,"referValueInfo");
+			BeanUtilForVCI.copyPropertiesIgnoreCase(tempModel, codeBasicSecDO);
+			codeBasicSecDO.setId(VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField("id", codeBasicSecDTO)));
+			codeBasicSecDO.setName(VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField("name", codeBasicSecDTO)));
+			codeBasicSecDO.setDescription(VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField("description", codeBasicSecDTO)));
+
 			resBoolean = codeBasicSecMapper.updateById(codeBasicSecDO)>0;
 			//SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
 			if(StringUtils.isNotBlank(codeBasicSecDO.getCodeFillSeparator())){
@@ -869,4 +892,129 @@
 		return codeBasicSecVO;
 	}
 
+	/**
+	 * 鏍规嵁缂栫爜瑙勫垯涓婚敭鑾峰彇缂栫爜涓嬬殑娴佹按渚濊禆鐮佹
+	 *
+	 * @param oid 缂栫爜瑙勫垯涓婚敭
+	 * @return
+	 * @throws VciBaseException
+	 */
+	@Override
+	public CodeRuleVO getSerialNumberDepend(String oid) throws VciBaseException {
+		VciBaseUtil.alertNotNull(oid,"缂栫爜瑙勫垯涓婚敭");
+		CodeRuleVO codeRuleVO = codeRuleService.getObjectByOid(oid);
+		if (codeRuleVO != null) {
+			//濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+			codeRuleVO.setLcStatusText(CodeRuleLC.getTextByValue(codeRuleVO.getLcStatus()));
+
+			LambdaQueryWrapper<CodeBasicSec> wrapper = Wrappers.<CodeBasicSec>query().lambda()
+				.eq(CodeBasicSec::getPkCodeRule, codeRuleVO.getOid())
+				.eq(CodeBasicSec::getSecType,CodeSecTypeEnum.CODE_SERIAL_SEC.getValue());
+			CodeBasicSec codeBasicSec = this.getOne(wrapper);
+			if(codeBasicSec != null && VciBaseUtil.isNotNull(codeBasicSec.getOid())){
+				wrapper = Wrappers.<CodeBasicSec>query().lambda()
+					.eq(CodeBasicSec::getPkCodeRule,codeRuleVO.getOid())
+					.eq(CodeBasicSec::getSerialDependFlag,"true")
+					.orderByAsc(CodeBasicSec::getSerialDependOrder);
+				List<CodeBasicSec> codeBasicSecList = this.list(wrapper);
+				if(!CollectionUtils.isEmpty(codeBasicSecList)){
+					List<CodeBasicSecVO> codeBasicSecVOS = codeBasicSecDO2VOs(codeBasicSecList);
+					//鏌ヨ鍥哄畾鐮佺殑鐮佸��
+					Map<String, List<CodeFixedValueVO>> secValueMap = fixedValueService.listCodeFixedValueBySecOids(codeBasicSecList.stream().map(CodeBasicSec::getOid).collect(Collectors.toList()));
+					codeBasicSecVOS.stream().forEach(vo->{
+						vo.setFixedValueVOList(secValueMap.getOrDefault(vo.getOid(),null));
+					});
+					codeRuleVO.setSecVOList(codeBasicSecVOS);
+				}
+			}else{
+				throw new VciBaseException(codeRuleVO.getName()+"缂栫爜瑙勫垯涓嬫棤娴佹按鐮佹锛屾棤娉曡缃渶澶ф祦姘村彿锛�");
+			}
+		}
+		return codeRuleVO;
+	}
+
+	/**
+	 * 璁剧疆鏈�澶ф祦姘村彿
+	 *
+	 * @param codeOrderDTO 缂栫爜鐢宠浼犺緭瀵硅薄
+	 * @return
+	 * @throws VciBaseException
+	 */
+	@Override
+	public String setMaxSerialNumberForCodeRule(CodeOrderDTO codeOrderDTO) throws VciBaseException {
+		VciBaseUtil.alertNotNull(codeOrderDTO.getCodeRuleOid(),"缂栫爜瑙勫垯涓婚敭",codeOrderDTO.getMaxSecNum(),"鏈�澶ф祦姘村彿");
+		List<CodeOrderSecDTO> codeOrderSecDTOList = codeOrderDTO.getSecDTOList();
+		if(CollectionUtils.isEmpty(codeOrderSecDTOList)){
+			throw new VciBaseException("鏈�澶ф祦姘村彿鐨勬祦姘翠緷璧栦笉鑳戒负绌猴紒");
+		}
+
+		String codeRuleOid = codeOrderDTO.getCodeRuleOid();
+		int maxSecNum = codeOrderDTO.getMaxSecNum();
+
+		Map<String/**鐮佹涓婚敭*/,CodeOrderSecDTO/**鐮佹鐩稿叧淇℃伅*/> codeOrderSecDTOMap = codeOrderSecDTOList.stream().collect(Collectors.toMap(s -> s.getSecOid(), t -> t));
+		List<String> codeBasicSecOidList = codeOrderSecDTOList.stream().map(s->s.getSecOid()).collect(Collectors.toList());//娴佹按渚濊禆鐮佹鐨勪富閿泦鍚�
+
+		//鑾峰彇娴佹按渚濊禆鐮佹
+		LambdaQueryWrapper<CodeBasicSec> wrapper = Wrappers.<CodeBasicSec>query().lambda()
+			.eq(CodeBasicSec::getPkCodeRule,codeRuleOid)
+			.in(CodeBasicSec::getOid,codeBasicSecOidList)
+			.eq(CodeBasicSec::getSerialDependFlag,"true")
+			.orderByAsc(CodeBasicSec::getSerialDependOrder);
+		List<CodeBasicSec> codeBasicSecList = this.list(wrapper);
+
+		//鎸夋祦姘翠緷璧栭『搴忥紝澶勭悊娴佹按渚濊禆鐮佹鐨勫��
+		List<String> serialDependValueList = new ArrayList<>();
+		codeBasicSecList.stream().forEach(s->{
+			CodeOrderSecDTO codeOrderSecDTO = codeOrderSecDTOMap.get(s.getOid());
+			String serialDependValue = codeOrderSecDTO.getSecValue();
+			if(s.getSecType().equals(CodeSecTypeEnum.CODE_DATE_SEC.getValue())){
+				try {
+					Date date = VciDateUtil.str2Date(codeOrderSecDTO.getSecValue(),s.getCodeDateFormatStr());
+					serialDependValue = VciDateUtil.date2Str(date,s.getCodeDateFormatStr());
+				} catch (Exception e) {
+					throw new RuntimeException(e);
+				}
+			}
+			serialDependValueList.add(serialDependValue);
+		});
+
+		//鑾峰彇娴佹按鐮佹
+		wrapper = Wrappers.<CodeBasicSec>query().lambda()
+			.eq(CodeBasicSec::getPkCodeRule,codeRuleOid)
+			.eq(CodeBasicSec::getSecType,CodeSecTypeEnum.CODE_SERIAL_SEC.getValue())
+			.orderByAsc(CodeBasicSec::getSerialDependOrder);
+		CodeBasicSec codeBasicSec = this.getOne(wrapper);
+
+		//鏍规嵁缂栫爜瑙勫垯鍜屾祦姘翠緷璧栵紝鑾峰彇鏈�澶ф祦姘村彿
+		String serialUnitString = serialDependValueList.size() == 0 ? EMPTY_SERIAL_UNIT : serialDependValueList.stream().collect(Collectors.joining(SERIAL_UNIT_SPACE));
+		LambdaQueryWrapper<CodeSerialValue> codeSerialWrapper = new LambdaQueryWrapper<>();
+		codeSerialWrapper.eq(CodeSerialValue::getCodeRuleOid, codeRuleOid);
+		codeSerialWrapper.eq(CodeSerialValue::getSerialUnit, serialUnitString);
+		codeSerialWrapper.eq(CodeSerialValue::getCodeSecOid,codeBasicSec.getOid());
+		codeSerialWrapper.orderByDesc(CodeSerialValue::getCreateTime);
+		List<CodeSerialValue> codeSerialValueList = serialValueMapper.selectList(codeSerialWrapper);
+
+		//濡傛灉鏈�澶ф祦姘村彿涓嶄负绌猴紝璇存槑宸叉湁鏈�濂芥祦姘村彿锛屾洿鏂版渶澶ф祦姘村彿
+		if(!CollectionUtils.isEmpty(codeSerialValueList)){
+			CodeSerialValue codeSerialValue = codeSerialValueList.get(0);
+			int maxSerial = Double.valueOf(codeSerialValue.getMaxSerial()).intValue();
+			//宸叉湁鐨勬渶澶ф祦姘村彿锛屽皬浜庤缃殑鏈�澶ф祦姘村彿锛屾洿鏂版渶澶ф祦姘村彿
+			if(maxSerial < maxSecNum){
+				codeSerialValue.setMaxSerial(String.valueOf(maxSecNum));
+				serialValueMapper.updateById(codeSerialValue);
+			}else{
+				maxSecNum = maxSerial;
+			}
+		}else{
+			//濡傛灉鏈�澶ф祦姘村彿涓嶄负绌猴紝璇存槑鏃犳渶濂芥祦姘村彿锛屾柊澧炴渶澶ф祦姘村彿
+			CodeSerialValue codeSerialValue = new CodeSerialValue();
+			DefaultAttrAssimtUtil.addDefaultAttrAssimt(codeSerialValue, MdmBtmTypeConstant.CODE_SERIAL_VALUE);
+			codeSerialValue.setCodeRuleOid(codeRuleOid);
+			codeSerialValue.setSerialUnit(serialUnitString);
+			codeSerialValue.setCodeSecOid(codeBasicSec.getOid());
+			codeSerialValue.setMaxSerial(String.valueOf(maxSecNum));
+			serialValueMapper.insert(codeSerialValue);
+		}
+		return String.valueOf(maxSecNum);
+	}
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java
index e3cfd10..192f270 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java
@@ -683,6 +683,68 @@
         }
     }
 
+	/**
+	 * 鏍¢獙鍏抽敭灞炴��
+	 *
+	 * @param classifyFullInfo 鍒嗙被鐨勫叏閮ㄤ俊鎭�
+	 * @param templateVO       妯℃澘鐨勫唴瀹癸紝蹇呴』鍖呭惈妯℃澘灞炴��
+	 * @param orderDTO         缂栫爜鐢宠鐨勭浉鍏崇殑淇℃伅
+	 */
+	public List<Map> checkKeyAttrOnOrderFordatas(CodeOrderDTO orderDTO) {
+		List<Map>dataList=new ArrayList<>();
+		CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
+		CodeClassifyTemplateVO templateVO = templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid());
+		//鍏堣幏鍙栧叧閿睘鎬х殑瑙勫垯锛屼篃鍒╃敤缁ф壙鐨勬柟寮�
+		CodeKeyAttrRepeatVO keyRuleVO = keyRuleService.getRuleByClassifyFullInfo(classifyFullInfo);
+		//娉ㄦ剰鐨勬槸keyRuleVO鍙兘涓虹┖锛岃〃绀轰笉浣跨敤瑙勫垯鎺у埗
+		//鑾峰彇鎵�鏈夌殑鍏抽敭灞炴��
+		Map<String, CodeClassifyTemplateAttrVO> ketAttrMap = templateVO.getAttributes().stream().filter(s -> VciBaseUtil.getBoolean(s.getKeyAttrFlag())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+		Map<String, String> conditionMap = new HashMap<>();
+		boolean trimAll = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnoreallspaceflag());
+		//鍏ㄩ儴鍘荤┖鐨勪紭鍏堢骇澶т簬鍘荤┖
+		boolean trim = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorespaceflag());
+		boolean ignoreCase = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorecaseflag());
+		boolean ignoreWidth = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorewidthflag());
+		ketAttrMap.forEach((attrId, attrVO) -> {
+			String value = getValueFromOrderDTO(orderDTO, attrId);
+			if (value == null) {
+				value = "";
+			}
+			wrapperKeyAttrConditionMap(value, keyRuleVO, attrId, trim, ignoreCase, ignoreWidth, trimAll, conditionMap);
+		});
+
+		//娌℃湁闄愬埗鍒嗙被锛屼絾鏄竴涓ā鏉垮彧鍙兘鍦ㄤ竴涓笟鍔$被鍨嬮噷闈紝鎵�浠ョ洿鎺ユ煡璇㈣繖涓笟鍔$被鍨嬪嵆鍙�
+		if (!CollectionUtils.isEmpty(conditionMap)) {
+			conditionMap.put("CODETEMPLATEOID","'" + orderDTO.getTemplateOid() + "'");
+//			final String[] sql = {"select count(*) from " + VciBaseUtil.getTableName(classifyFullInfo.getTopClassifyVO().getBtmtypeid()) + " t where 1 = 1 "};
+			R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(classifyFullInfo.getTopClassifyVO().getBtmTypeId()));
+//				String referTable = VciBaseUtil.getTableName(referVO.getReferType());
+			if (!listR.isSuccess() || listR.getData().size() == 0) {
+				throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒");
+			}
+			final String[] sql = {"select * from " + listR.getData().get(0).getTableName() + " t where 1 = 1 "};
+			conditionMap.forEach((key, value) -> {
+				sql[0] += " and " + key + " = " + value;
+			});
+			if (StringUtils.isNotBlank(orderDTO.getOid())) {
+				//淇敼鐨勬椂鍊欙紝闇�瑕佹帓闄よ嚜宸�
+				sql[0] += " and oid != '" + orderDTO.getOid() + "'";
+			} else if (StringUtils.isNotBlank(orderDTO.getCopyFromVersion())) {
+				sql[0] += " and oid != '" + orderDTO.getCopyFromVersion() + "'";
+			}
+			sql[0] += " and lastR = '1' and lastV = '1' ";
+//			if (boService.queryCountBySql(sql[0], new HashMap<>()) > 0) {
+			dataList=commonsMapper.selectBySql(sql[0]);
+			if (!CollectionUtils.isEmpty(dataList)) {
+//				String ruleInfoMsg = keyRuleVO == null ? "" : "鏌ヨ瑙勫垯锛氬幓闄ょ┖鏍�--{0},蹇界暐澶у皬鍐�--{1},蹇界暐鍏ㄥ崐瑙�--{2},蹇界暐鍏ㄩ儴绌烘牸--{3}";
+//				String[] objs = new String[]{trim ? "鏄�" : "鍚�", ignoreCase ? "鏄�" : "鍚�", ignoreWidth ? "鏄�" : "鍚�", trimAll ? "鏄�" : "鍚�"};
+//				throw new VciBaseException("鏍规嵁鎮ㄥ~鍐欑殑鍏抽敭灞炴�х殑鍐呭锛岀粨鍚堝叧閿睘鎬ф煡璇㈣鍒欙紝鍙戠幇杩欎釜鏁版嵁宸茬粡鍦ㄧ郴缁熶腑瀛樺湪浜嗐�傝淇!銆�" + ruleInfoMsg, objs);
+				return dataList;
+			}
+		}
+		return dataList;
+	}
+
     /**
      * 灏佽鍏抽敭灞炴�х殑鏌ヨ璇彞
      *
@@ -702,7 +764,7 @@
         boolean ignoreSpace = trim || trimAll;
         if (StringUtils.isBlank(value)) {
             //涓虹┖鐨勬椂鍊欙紝涓嶈兘鐢≦ueryOperation.ISNULL锛屽钩鍙颁笉鐭ラ亾鍟ユ椂鍊欎笉澶勭悊杩欑浜�
-            conditionMap.put("t." + attrId, "null");
+			conditionMap.put("t." + attrId, QueryOptionConstant.ISNULL);
         } else {
             if (keyRuleVO != null) {
                 String queryKey = "";
@@ -738,8 +800,12 @@
                 queryValue = String.format(temp, "'" + (trim ? value.trim() : value) + "'");
                 conditionMap.put(queryKey, queryValue);
             } else {
-                //涓虹┖鐨勬椂鍊欎笉浠h〃涓嶆牎楠岋紝鍙槸涓嶅幓闄ょ浉鍏崇殑淇℃伅
-                conditionMap.put("t." + attrId, "'" +value+ "'");
+				if(StringUtils.isNotBlank(value)) {
+					//涓虹┖鐨勬椂鍊欎笉浠h〃涓嶆牎楠岋紝鍙槸涓嶅幓闄ょ浉鍏崇殑淇℃伅
+					conditionMap.put("t." + attrId, "'" + value + "'");
+				}else{
+					conditionMap.put("t." + attrId, QueryOptionConstant.ISNULL);
+				}
             }
         }
     }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
index 0bd2aaa..f1c8341 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
@@ -1899,7 +1899,7 @@
 	 * @return 鏈夐敊璇俊鎭殑excel
 	 */
 	@Override
-	public void batchSyncApplyCode(CodeOrderDTO orderDTO, DataObjectVO dataObjectVO, LinkedList<XMLResultDataObjectDetailDO> resultDataObjectDetailDOs) {
+	public void batchSyncApplyCode(CodeOrderDTO orderDTO, DataObjectVO dataObjectVO, LinkedList<XMLResultDataObjectDetailDO> resultDataObjectDetailDOs,boolean isCodeOrGroupCode) {
 		Map<String,String> errorMap=new HashMap<>();
 		VciBaseUtil.alertNotNull(orderDTO,"缂栫爜鐢宠鐩稿叧鐨勬暟鎹�",orderDTO.getCodeClassifyOid(),"涓婚搴撳垎绫讳富閿�");
 		CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
@@ -2019,10 +2019,15 @@
 						sourceOid=codeOidToSystemOidMap.get(oid);
 					}
 					String code="";
+					String groupCode="";
 					String errorid="103";
 					String mes=errorMap.get(rowIndex);
 					XMLResultDataObjectDetailDO resultDataObjectDetailDO=new XMLResultDataObjectDetailDO();
-					resultDataObjectDetailDO.setCode(code);
+					if(isCodeOrGroupCode){
+						resultDataObjectDetailDO.setCode(groupCode);
+					}else{
+						resultDataObjectDetailDO.setCode(code);
+					}
 					resultDataObjectDetailDO.setId(sourceOid);
 					resultDataObjectDetailDO.setErrorid(errorid);
 					resultDataObjectDetailDO.setMsg(mes);
@@ -2048,6 +2053,7 @@
 						String oid = cbo.getOid();
 						String sourceOid = oid;
 						String code = "";
+						String groupCode="";
 						String errorid = "201";
 						if(codeOidToSystemOidMap.containsKey(oid)){
 							sourceOid=codeOidToSystemOidMap.get(oid);
@@ -2058,22 +2064,35 @@
 							String lcstatus =newCbo.getLcStatus();
 							String newOid =newCbo.getOid();
 							Date ts =newCbo.getTs();
+							groupCode=newCbo.getData().get("GROUPCODE");
 							code=newCbo.getId();
 							String lastmodifier=newCbo.getLastModifier();
-							if (!lcstatus.equals(CodeDefaultLC.RELEASED.getValue())) {
+							if (lcstatus!=null&&!lcstatus.equals(CodeDefaultLC.RELEASED.getValue())) {
 								newCbo.setOid(newOid);
 								newCbo.setLastModifier(lastmodifier);
-								newCbo.setId(code);
+								/*if(isCodeOrGroupCode) {
+									newCbo.setId(code);
+								}else{
+									newCbo.getData().put("groupcode",groupCode);
+								}*/
 								newCbo.setTs(ts);
 								cbo.setLastModifier(cbo.getLastModifier());
 								editBoList.add(newCbo);
 							}
 							String mes = errorKeyMap.get(rowIndex);
 							XMLResultDataObjectDetailDO resultDataObjectDetailDO = new XMLResultDataObjectDetailDO();
-							resultDataObjectDetailDO.setCode(code);
+							if(isCodeOrGroupCode) {
+								if(StringUtils.isBlank(groupCode)){
+									mes+="锛涚瓑寰呴泦鍥㈢紪鐮佽祴鍊�";
+								}
+								resultDataObjectDetailDO.setCode(groupCode);
+							}else{
+								resultDataObjectDetailDO.setCode(code);
+							}
 							resultDataObjectDetailDO.setId(sourceOid);
 							resultDataObjectDetailDO.setErrorid(errorid);
 							resultDataObjectDetailDO.setMsg(mes);
+
 							resultDataObjectDetailDOs.add(resultDataObjectDetailDO);
 						}
 					}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java
index cf4880e..4948270 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java
@@ -179,11 +179,13 @@
 						CodeSerialValue serialValueDO = serialValueDOS.get(0);
 						if(VciBaseUtil.getDouble(serialValueDO.getMaxSerial())<maxSerial){
 							serialValueDO.setMaxSerial(String.valueOf(maxSerial));
+							DefaultAttrAssimtUtil.updateDefaultAttrAssimt(serialValueDO);
 							editSerialValueList.add(serialValueDO);
 						}
 					}else{
 						//娌℃湁
 						CodeSerialValue serialValueDO = new CodeSerialValue();
+						DefaultAttrAssimtUtil.addDefaultAttrAssimt(serialValueDO, MdmBtmTypeConstant.CODE_SERIAL_VALUE);
 						serialValueDO.setCodeRuleOid(ruleVO.getOid());
 						serialValueDO.setSerialUnit(serialUnit);
 						serialValueDO.setCodeSecOid(secOid);
@@ -627,6 +629,7 @@
                                 BaseModel cbo, CodeClassifyTemplateVO templateVO,
                                 List<CodeAllCode> allCodeDOList, String serialUnitString, String serialValueString){
 		CodeAllCode allCodeDO = new CodeAllCode();
+		DefaultAttrAssimtUtil.addDefaultAttrAssimt(allCodeDO, MdmBtmTypeConstant.CODE_ALL_CODE);
 		allCodeDO.setCodeClassifyOid(classifyFullInfoBO.getCurrentClassifyVO().getOid());
 		allCodeDO.setCodeRuleOid(ruleVO.getOid());
 		allCodeDO.setId(cbo.getId());
@@ -661,9 +664,11 @@
 					//璇存槑鏈�
 					serialValueDO = maxSerialValueMap.get(secOid).get(unit);
 					serialValueDO.setMaxSerial(maxSerial.toString());
+					DefaultAttrAssimtUtil.updateDefaultAttrAssimt(serialValueDO);
 					editSerialValueDOList.add(serialValueDO);
 				}else{
 					serialValueDO = new CodeSerialValue();
+					DefaultAttrAssimtUtil.addDefaultAttrAssimt(serialValueDO, MdmBtmTypeConstant.CODE_SERIAL_VALUE);
 					serialValueDO.setCodeRuleOid(ruleVO.getOid());
 					serialValueDO.setSerialUnit(unit);
 					serialValueDO.setCodeSecOid(secOid);
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java
index d62a822..eaf4e1f 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java
@@ -6,6 +6,7 @@
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.thoughtworks.xstream.XStream;
 import com.thoughtworks.xstream.io.xml.DomDriver;
+import com.vci.ubcs.code.applyjtcodeservice.feign.IMdmInterJtClient;
 import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
 import com.vci.ubcs.code.constant.MdmDuckingConstant;
 import com.vci.ubcs.code.dto.CodeOrderDTO;
@@ -128,6 +129,9 @@
 
 	@Autowired
 	private ICodeClassifyValueService codeClassifyValueService;
+
+	@Resource
+	private IMdmInterJtClient mdmInterJtClient;
 	/***
 	 * 闆嗘垚鎺ュ彛鏃ュ織鏈嶅姟鐨勯厤缃�
 	 */
@@ -149,7 +153,7 @@
 	@Override
 	public String applyCode(String data, String dataType) throws Throwable {
 		String resultStr = "";
-		String errorid="0";
+		final String[] errorid = {"0"};
 		msg="鎴愬姛";
 		objerrorCode="0";
 		objerrorMsg="鎴愬姛";
@@ -159,7 +163,7 @@
 		List<XMLResultClassfyVO> resultClassfyVOList = new ArrayList<>();
 		try {
 			if(StringUtils.isBlank(data)) {
-				errorid="101";
+				errorid[0] ="101";
 				throw new Throwable("鎺ュ彛鍙傛暟锛氫紶閫掍负绌�");
 			}
 			InterParameterVO interParameterVO  =new InterParameterVO();
@@ -175,17 +179,11 @@
 					interParameterVO = JSONObject.toJavaObject(JSONObject.parseObject(data), InterParameterVO.class);
 				}
 			}catch (Throwable e){
-				errorid="101";
+				errorid[0] ="101";
 				throw new Throwable("鎺ュ彛鍙傛暟锛氫紶鍏ユ暟鎹弬鏁拌В鏋愬け璐�");
 			}
 			ClassfysVO classfysVO = interParameterVO.getData().getClassifys();
 			systemId = interParameterVO.getData().getSystemId();
-			//鏍¢獙鏄惁閰嶇疆
-			boolean checkPass= checkIspass(systemId, SysIntegrationDataFlowTypeEnum.ACCEPT.getValue(), sysIntegrationPushTypeEnum.ACCPET_APPCODE.getValue());
-			if(!checkPass){
-				errorid="101";
-				throw new Throwable("绯荤粺鏍囪瘑涓恒��"+systemId+"銆�,"+sysIntegrationPushTypeEnum.ACCPET_APPCODE.getText()+"鎺ュ彛閰嶇疆宸插仠鐢ㄦ垨鑰呮湭閰嶇疆锛岃鑱旂郴缂栫爜绠$悊鍛橈紒");
-			}
 			UserVO userVo = interParameterVO.getData().getUser();
 			List<ClassfyVO> classVOList = classfysVO.getClassify();
 			InterParameterVO finalInterParameterVO = interParameterVO;
@@ -196,20 +194,32 @@
 			sessionInfo.setUserName(userVo.getTrueName());
 			sessionInfo.setIp(userVo.getIp());
 			VciBaseUtil.setCurrentUserSessionInfo(sessionInfo);
-
+//			List<XMLResultDataObjectDetailDO> allResultDataObjectDetailDOS=new ArrayList<>();
 			String finalSystemId = systemId;
 			classVOList.stream().forEach(classVO -> {
 				log.info("鍙傛暟锛氬垎绫籆Ode:" + classVO.getClassCode());
+				boolean isCodeOrGroupCode=false;
 				LinkedList<XMLResultDataObjectDetailDO> resultDataObjectDetailDOs = new LinkedList<>();
+				String libray ="";
 				//鑾峰彇鍒嗙被淇℃伅
 				try {
-					String libray = classVO.getLibrary();
+					libray = classVO.getLibrary();
 					CodeClassifyVO codeClassifyVO = getClassfy(classVO);
 					log.info("end锛氬垎绫绘煡璇㈠畬姣�");
 					//鑾峰彇鍒嗙被妯℃澘淇℃伅
 					if(codeClassifyVO==null || StringUtils.isBlank(codeClassifyVO.getOid())){
 						objerrorCode="100";
 						throw  new  Throwable ("鏍规嵁浼犺緭鐨勫垎绫伙紝鏈幏鍙栧埌鍒嗙被淇℃伅");
+					}
+					String operation="";
+					if(CODE_CHECKCONFIG) {
+						//鏍¢獙鏄惁閰嶇疆
+						DockingSystemConfig dockingSystemConfig= checkIspass(finalSystemId, SysIntegrationDataFlowTypeEnum.ACCEPT.getValue(), sysIntegrationPushTypeEnum.ACCPET_APPCODE.getValue(),codeClassifyVO.getOid());
+						if(dockingSystemConfig==null){
+							errorid[0] ="101";
+							throw new Throwable("绯荤粺鏍囪瘑涓恒��"+ finalSystemId +"銆戯紝闆嗘垚鍒嗙被涓恒��+codeClassifyVO.getName()銆戜互涓婂垎绫伙紝"+sysIntegrationPushTypeEnum.ACCPET_APPCODE.getText()+"鎺ュ彛閰嶇疆宸插仠鐢ㄦ垨鑰呮湭閰嶇疆锛岃鑱旂郴缂栫爜绠$悊鍛橈紒");
+						}
+						isCodeOrGroupCode="true".equals(dockingSystemConfig.getIsGroupCodeFlag())?true:false;
 					}
 					CodeClassifyTemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(codeClassifyVO.getOid());
 					if(templateVO==null||StringUtils.isBlank(templateVO.getOid())){
@@ -241,15 +251,29 @@
 					CodeOrderDTO orderDTO = new CodeOrderDTO();
 					orderDTO.setCodeClassifyOid(codeClassifyVO.getOid());//鍒嗙被涓婚敭
 					orderDTO.setSecDTOList(codeOrderSecDTOList);//鍒嗙被鐮佹
-					mdmIOService.batchSyncApplyCode(orderDTO, dataObjectVO, resultDataObjectDetailDOs);
+					mdmIOService.batchSyncApplyCode(orderDTO, dataObjectVO, resultDataObjectDetailDOs,isCodeOrGroupCode);
+					//allResultDataObjectDetailDOS.add(resultDataObjectDetailDOs);
 					log.info("end锛氱敵璇疯幏鍙栧畬姣�");
 				} catch (Throwable e) {
-					XMLResultDataObjectDetailDO xmlResultDataObjectDetailDO=new XMLResultDataObjectDetailDO();
-					xmlResultDataObjectDetailDO.setCode("");
-					xmlResultDataObjectDetailDO.setId("");
-					xmlResultDataObjectDetailDO.setErrorid(objerrorCode);
-					xmlResultDataObjectDetailDO.setMsg("缂栫爜鐢宠澶辫触:"+e.getMessage());
-					resultDataObjectDetailDOs.add(xmlResultDataObjectDetailDO);
+					List<ApplyDataVO> applyDataVOList= classVO.getObjects().getObject();
+					if(!CollectionUtils.isEmpty(applyDataVOList)) {
+						applyDataVOList.stream().forEach(applyDataVO -> {
+							XMLResultDataObjectDetailDO xmlResultDataObjectDetailDO = new XMLResultDataObjectDetailDO();
+							xmlResultDataObjectDetailDO.setCode("");
+							xmlResultDataObjectDetailDO.setId(applyDataVO.getId());
+							xmlResultDataObjectDetailDO.setErrorid(objerrorCode);
+							xmlResultDataObjectDetailDO.setMsg("缂栫爜鐢宠澶辫触:" + e.getMessage());
+							resultDataObjectDetailDOs.add(xmlResultDataObjectDetailDO);
+						});
+					}else{
+
+						XMLResultDataObjectDetailDO xmlResultDataObjectDetailDO = new XMLResultDataObjectDetailDO();
+						xmlResultDataObjectDetailDO.setCode("");
+						xmlResultDataObjectDetailDO.setId("");
+						xmlResultDataObjectDetailDO.setErrorid(objerrorCode);
+						xmlResultDataObjectDetailDO.setMsg("缂栫爜鐢宠澶辫触:" + e.getMessage());
+						resultDataObjectDetailDOs.add(xmlResultDataObjectDetailDO);
+					}
 					e.printStackTrace();
 				}finally {
 					XMLResultClassfyVO resultClassfyVO = new XMLResultClassfyVO();
@@ -259,14 +283,22 @@
 					resultClassfyVO.setObjects(resultDataObjectDetailDOs);
 					resultClassfyVOList.add(resultClassfyVO);
 				}
+				//鏄惁璋冪敤闆嗗洟鎺ュ彛鐢宠鎺ュ彛
+				if(isCodeOrGroupCode){
+					 List<String> IdList=resultDataObjectDetailDOs.stream().filter(xMLResultDataObjectDetailDO->StringUtils.isNotBlank(xMLResultDataObjectDetailDO.getId())).map(XMLResultDataObjectDetailDO::getId).distinct().collect(Collectors.toList());
+					 if(!CollectionUtils.isEmpty(IdList)) {
+						this.sendApplyGroupcode(IdList, libray,sysIntegrationPushTypeEnum.ACCPET_APPCODE.getValue());
+					}
+				}
 			});
+
 			XMLResultSystemVO xmlResultSystemVO=new XMLResultSystemVO();
 			xmlResultSystemVO.setClassifys(resultClassfyVOList);
 			xmlResultSystemVO.setMsg(msg);
-			xmlResultSystemVO.setErrorid(errorid);
+			xmlResultSystemVO.setErrorid(errorid[0]);
 			resultStr= transferResultXMl(xmlResultSystemVO,dataType);
 		}catch (Throwable e){
-			e.printStackTrace();;
+			e.printStackTrace();
 			msg="鐢宠缂栫爜澶辫触:"+e.getMessage();
           /*  XMLResultSystemVO XMLResultSystemVO=new XMLResultSystemVO();
             XMLResultSystemVO.setErrorid(errorid);
@@ -280,10 +312,10 @@
 			XMLResultSystemVO xmlResultSystemVO=new XMLResultSystemVO();
 			xmlResultSystemVO.setClassifys(resultClassfyVOList);
 			xmlResultSystemVO.setMsg(msg);
-			xmlResultSystemVO.setErrorid(errorid);
+			xmlResultSystemVO.setErrorid(errorid[0]);
 			resultStr= transferResultXMl(xmlResultSystemVO,dataType);
 			final boolean[] issucess = {true};
-			if(!errorid.equals("0")) {
+			if(!errorid[0].equals("0")) {
 				issucess[0] = false;
 			}else {
 				if(!CollectionUtils.isEmpty(resultClassfyVOList)) {
@@ -306,10 +338,23 @@
 			}
 		}
 		log.info("杩斿洖鍙傛暟:"+resultStr);
-
+		//璋冪敤闆嗗洟鐢宠鎺ュ彛鐢宠闆嗗洟鐮�
 		return resultStr;
 	}
 
+	/***
+	 * 鐢宠闆嗗洟缂栫爜
+	 * @param idList
+	 * @param btmName
+	 */
+	private void sendApplyGroupcode(List<String> idList,String btmName,String operationType){
+		String oids=VciBaseUtil.array2String(idList.toArray(new String[]{}));
+		if(operationType.equals(sysIntegrationPushTypeEnum.ACCPET_APPCODE.getValue())) {
+			mdmInterJtClient.applyGroupCode(oids,btmName);
+		}else if(operationType.equals(sysIntegrationPushTypeEnum.ACCPET_EDITCODE)){
+			mdmInterJtClient.receiveEditApply(oids,btmName);
+		}
+	}
 	/***
 	 * 缁熶竴鏇存柊鎺ュ彛锛堟洿鏀圭姸鎬侊紝鏇存敼灞炴�т俊鎭級鎺ュ彛
 	 * @param data
@@ -1598,4 +1643,35 @@
 		queryWrapper.eq(DockingSystemConfig::getPushType,operationType);
 		return dockingSystemConfigService.count(queryWrapper)>0?true:false;
 	}
+
+	/***
+	 * 鏍¢獙鏄惁鍋氫簡閰嶇疆
+	 * @param systemId,绯荤粺鏍囪瘑
+	 * @param type:鎺ュ彛绫诲瀷
+	 * @param operationType:鎺ュ彛鎿嶄綔绫诲瀷
+	 * @return
+	 */
+	private DockingSystemConfig  checkIspass(String systemId,String type,String operationType,String classOid){
+		DockingSystemConfig dockingSystemConfig=new DockingSystemConfig();
+		CodeClassifyVO codeClassifyVO= classifyService.getObjectByOid(classOid);
+		classOid=codeClassifyVO.getOid();
+		//鏍规嵁绫诲瀷鍘绘煡璇㈤渶瑕侀泦鎴愮殑鍒嗙被鎴栬�呮暟鎹�
+		LambdaQueryWrapper<DockingSystemConfig> queryWrapper = Wrappers.<DockingSystemConfig>lambdaQuery();
+		queryWrapper.eq(DockingSystemConfig::getUsedFlag, MdmDuckingConstant.SEND_FLAG_TRUE);
+		queryWrapper.eq(DockingSystemConfig::getSysBaseId,systemId);
+		queryWrapper.eq(DockingSystemConfig::getDataFlowType,type);
+		queryWrapper.eq(DockingSystemConfig::getPushType,operationType);
+		if(StringUtils.isNotBlank(classOid)){
+			queryWrapper.in(DockingSystemConfig::getClassifyId,classOid);
+		}
+		List<DockingSystemConfig> dockingSystemConfigList=	dockingSystemConfigList=dockingSystemConfigService.list(queryWrapper);
+		if(!CollectionUtils.isEmpty(dockingSystemConfigList)){
+			dockingSystemConfig=dockingSystemConfigList.get(0);
+		}else{
+			if(StringUtils.isNotBlank(codeClassifyVO.getParentCodeClassifyOid())) {
+				checkIspass(systemId, type, operationType, codeClassifyVO.getOid());
+			}
+		}
+		return dockingSystemConfig;
+	}
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/DockingSystemConfigMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/DockingSystemConfigMapper.xml
index 6831b11..d11ab3f 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/DockingSystemConfigMapper.xml
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/DockingSystemConfigMapper.xml
@@ -58,6 +58,7 @@
         <result column="NAMESPACE" property="namespace"/>
         <result column="SOAPACTION" property="soapAction"/>
         <result column="CXFAXIS" property="cxfAxis"/>
+        <result column="ISGROUPCODEFLAG" property="isGroupCodeFlag"/>
 
     </resultMap>
 

--
Gitblit v1.9.3